8. Linhas de Produtos de Software
S Será que na fabricação de automóveis, eles
precisam refazer o projeto toda vez que algum
cliente escolhe uma opção de motorização ou
o tipo de câmbio?
9. Linhas de Produtos de Software
S Cada modelo tem algumas personalizações
que podem ser escolhidas pelo cliente
Câmbio
Manual
ou
Automá0co
Motor
1.0,
1.6
ou
2.0
Pintura:
Verde,
Amarela,
Roxo,
ou
Azul
Anil
10. Linhas de Produtos de Software
S Eu tenho a ligeira impressão que não. Porque
eles usam a ideia de linha de produtos.
S Então o que seria Linhas de Produto afinal?
Vamos primeiro olhar o conceito de reuso na
Engenharia do Software.
11. Linhas de Produtos de Software
S Engenharia de Software
S Objetivo central da Engenharia de Software é propor
métodos, técnicas e ferramentas para o
desenvolvimento de software com custo
relativamente baixo, de qualidade e com
produtividade.
S Um dos caminhos mais promissores para promover
qualidade e produtividade em engenharia de software
é em 1º lugar o Reuso, em 2º lugar o Reuso e em 3º
lugar o Reuso.
12. Linhas de Produtos de Software
S Evolução do Reuso em Software
S Existem vários tipos de reuso do desenvolvimento de
software, por exemplo:
S Reuso de Código:
S Spring, Hibernate, JSF, EJB, Bibliotecas, API,
Frameworks, etc...
S Reuso do de projeto:
S MVC, DAO, Strategy, etc..
S Reuso de hardware:
S Virtualização, etc.
13. Linhas de Produtos de Software
S Limitações das Técnicas do Reuso
S Técnicas de reuso tradicionais de software
promovem reuso horizontal e localizado.
S O que é reuso horizontal e localizado?
14. Linhas de Produtos de Software
S É você chegar para um cliente de dizer: “O
meu software é muito bom porque ele usa EJB na
camada de negócio para fazer transação e não
deixar os dados inconsistentes”.
16. Linhas de Produtos de Software
S Linhas de produto de software permitem o
reuso estratégico em torno do negócio da
empresa e seus clientes.
S O que é reuso estratégico e em torno do
negócio ?
17. Linhas de Produtos de Software
S É você chegar para um cliente e falar: “O meu
software tem cinco tipos diferentes de pagamentos que
contemplam a maioria das regras de negócio de
pagamentos existentes no Brasil, se o da sua empresa
for diferente, um sexto tipo pode ser criado.”
18. Linhas de Produtos de Software
S Reuso estratégico e em torno do negócio
19. Linhas de Produtos de Software
S Linhas de produtos são o próximo nível de
modularização (reuso) de software.
20. Linhas de Produtos de Software
S Mas o que são LPS?
S Linha de produto de software (Software Product
Line) é uma família de sistemas compartilhando
um conjunto de características (features) comuns e
que mantém outro conjunto características
específicas que variam em cada produto da linha,
satisfazendo um segmento específico de mercado.
22. Linhas de Produtos de Software
S O que significa ser uma família de sistema
satisfazendo um segmento específico de
mercado?
S Significa que não adianta tentar fazer uma linha de
produtos entre um sistema web e o jogo Call of Duty.
Nesse caso mantenha dois softwares separados, acredite é
mais fácil!
23. Linhas de Produtos de Software
S O que é essa tal de característica? (Ou como é mais
comum “feature”) ?
S Feature é uma funcionalidade que é comum ou variável
na linha. As features variáveis são as que distinguem um
produto de outro na linha.
S Feature pode ser um caso de uso, um conjunto de
classes, apenas uma classe, um método, um trecho de
um método, qualquer coisa que diferencia um produto
de outro na linha.
24. Linhas de Produtos de Software
S Mas porque a gente usa esse negócio de LPS
mesmo?
25. Linhas de Produtos de Software
S Linhas de Produtos tentam organizar a
mesma coisa de uma forma mais gerenciável.
core
configuration
knowledge
features
Derivação do Produto
produtos
26. Linhas de Produtos de Software
S Mas esse negócio de LPS existe na vida
real? Ou é só no mundo do faz de conta?
27. Linhas de Produtos de Software
S Eclipse
No caso do
eclipse as
variabilidades da
linha são
realizadas com o
uso de plug-ins.
28. Linhas de Produtos de Software
S Android
Uma boa técnica
para se usar com
Android é a
compilação
condicional
29. Linhas de Produtos de Software
S Sistemas Web
Podem usar
Parâmetros de
Configuração,
Templates de
estilo e Padrões de
Projeto
31. Linhas de Produtos de Software
S Tipos de Feature :
S Obrigatórias: Estão em todos os produtos (login)
S Opcionais: Podem ou não estar em um produto
(reserva de materiais na biblioteca)
S Alternativas: exatamente uma das features deve
estar no produto (modo de autenticação: banco ou
ldap)
S Or-features: um subconjunto das features pode estar
no produto (punição por atraso na biblioteca)
32. Linhas de Produtos de Software
S Feature Model:
Feature Obrigatória
Feature Alternativa
Feature Opcional
Or-feature
33. Linhas de Produtos de Software
S Abordagens na Construção de uma LPS:
S Proativa
S Construir desde o começo todos os produtos da
linha (Requer $$$$).
S Extrativa
S As variações já existem no produto utilizado, então
elas são apenas extraídas(organizadas) para se criar
a linha
S Reativa
S A medida que surge a necessidade, as features são
criadas gerando-se um novo produto na linha
34. Linhas de Produtos de Software
S Variation Points
S Lugares onde a variação ocorre no sistema
S Configuration knowledge
S Mapeamento entre features e artefatos do
código
S Feature Model
S Modelo em forma de árvore muito usado para
documentar as variabilidades de uma linha.
35. Linhas de Produtos de Software
S Derivação do Produto
S Processo que cria um produto da linha
(normalmente é automatizado)
S Fases
S Engenharia de Domínio
S Os artefatos são preparados da serem reutilizado
como features da linha (identificando as partes
comuns e variáveis)
S Engenharia de Aplicação
S Instancia-se um produto reutilizando os artefatos
criados da ED.
37. Linhas de Produtos de Software
S LPS não envolve apenas as equipes de
desenvolvido
S Como realizar a elicitação de requisitos de uma
LPS?
S Será que todas as variabilidades existentes estão
sendo testadas?
38. Linhas de Produtos de Software
S Vantagens na Adoção de Linhas de Produto:
S Redução dos custos de desenvolvimento
S Aumenta da Qualidade
S Redução do time-to-market (ciclos de
desenvolvimento mais curtos para a implantação
de um sistema em um novo cliente)
S Redução dos esforços de manutenção.
S Evolução Organizada
39. Linhas de Produtos de Software
S Desvantagens na Adoção de Linhas de
Produto:
S Grande investimento inicial $$$
S Requer uma Engenharia Experiente
S Requer Maior Gerenciamento Técnico e
Organizacional
40. Linhas de Produtos de Software
S Quando não é recomendado usar?
S Domínio não estável
S Uma quantidade muito grande de variabilidade
entre os produtos da linha (50%, 60%, 70% das
funcionalidades são diferentes)
41. Linhas de Produtos de Software
S O mais complicado em LPS é como
implementar as variabilidades existentes na
sua linha de produtos
S Compilação Condicional
S Execução Condicional
S Programação Orientada a Aspectos
S Orientação a Objetos, Padrões de Projeto
Polimorfismo, Frameworks, etc.
42. Linhas de Produtos de Software
S O Padrão “Execução Condicional”
S Definição bem simples:
S Padrões de Projetos para isolar as variabilidades +
Parâmetros para decidir qual a variabilidade será
executa no momento.
43. Linhas de Produtos de Software
S O Padrão “Execução Condicional”
S A parametrização do sistema não é usada apenas
para definir valores de negócio variável
S Padrões de Projetos são usados junto com os
parâmetros para definir variabilidades bem mais
complexas
44. Linhas de Produtos de Software
S Exemplo: Feature “Punição” do Módulo de
Bibliotecas do SIGAA
S Padrões de Projeto Layer Super Type + Factory +
Strategy + Parâmetros de Configuração
S Todo o sistema só interage com a estratégia
genérica PunicaoAtrasoEmprestimoStrategy e a
inteface PunicaoAtrasoEmprestimoBiblioteca.
45. Linhas de Produtos de Software
S Feature “Punição” do Módulo de Bibliotecas do
SIGAA
S A classe
PunicaoAtrasoEmprestimoStrategyFactory
instancia e retorna a estratégia a ser usada de acordo
com o tipo de variabilidade configurada: Multa ou
Supensão.
S Todo o cálculo e lógica de négocio de cada
variabilidade estão localizados dentro da estratégia,
sem que as classes clientes precisem conhecer qual
estratégia está sendo utilizanda.
46. Linhas de Produtos de Software
S Feature “Punição” do Módulo de Bibliotecas
do SIGAA
S Hoje qualque novo tipo punição que inventarem,
pode ser facilmente adicionado ao sistema
implementando-se apenas uma nova estratégia, sem
impacto em nenhuma outra parte de sistema
47. Linhas de Produtos de Software
S Feature “Punição” do Módulo de Bibliotecas
do SIGAA
S A feature “Punição” da biblioteca está realicionada,
entre outros, com os Casos de Uso “Realizar
Empréstimo”, “Renovar Empréstimo” e “Devolver
Empréstimo”.
S E os pontos de váriação estão localizados em
diversos artefatos do sistema, como
ProcessadorRealizaEmprestimo.java e até mesmo
a JSP menu_discente.jsp
48. Linhas de Produtos de Software
S Feature “Punição” do Módulo de Bibliotecas
do SIGAA
49. Linhas de Produtos de Software
S Quer saber mais ?
S Conditional Execution: A Pattern for the Implementation
of Fine-Grained Variabilities in Software Product Lines
S http://www.slideshare.net/jadsonjs/conditional-execution
S http://jadsonjs.wordpress.com/2013/05/25/conditional-
execution-a-pattern-for-the-implementation-of-fine-grainedvariabilities-in-software-product-lines/
51. Linhas de Produtos de Software
S Desafio
S Alguns sistemas de grande porte possuem certos
módulos nos quais é perfeitamente possível aplicar
técnicas de LPS
S Contudo, outros módulos do mesmo sistema não
formam uma LPS, seja porque os clientes possuem
regras diferentes ou porque o domínio ainda não está
estável.
S Esses módulos são dependentes entre si.
52. Linhas de Produtos de Software
S Desafio
S Como garantir que os módulos que usam LPS
possam evoluir de forma organizada sem que os
módulos não LPS, que vão evoluir distintamente
em cada produto da linha, atrapalhem?
S Como isolar as dependências entre os módulos
“não LPS” e os LPS de tal forma que mudanças
em um módulo não conflitem com os demais
módulos?
55. Linhas de Produtos de Software
S Desafio
S Esse isolamento é relativamente fácil de ser
realizado na abordagem proativa, contudo muito
complexo para sistemas em produção
S A literatura pouco retrata técnicas de isolamento
ou evolução dos artefatos de uma LPS quando o
cenário não é o ideal.