Linhas de
Produtos
de Software

Jadson Santos
Natal, Outubro de 2013

S
Linhas de Produtos de Software
S  Alguém vê alguma similaridade entre

esses produtos?
Linhas de Produtos de Software
S  Além de você comer e engordar!
Linhas de Produtos de Software
S  E variabilidades?
Linhas de Produtos de Software
S  Por que será que as empresas de fast

food fazem isso?
Linhas de Produtos de Software
S  Por que será que as empresas de fast

food fazem isso?
Linhas de Produtos de Software
S  E parece que essa ideia não é nova
Linhas de Produtos de Software
S  Será que na fabricação de automóveis, eles

precisam refazer o projeto toda vez que alg...
Linhas de Produtos de Software
S  Cada modelo tem algumas personalizações

que podem ser escolhidas pelo cliente

Câmbio	...
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...
Linhas de Produtos de Software
S  Engenharia de Software
S  Objetivo central da Engenharia de Software é propor
métodos,...
Linhas de Produtos de Software
S  Evolução do Reuso em Software
S  Existem vários tipos de reuso do desenvolvimento de
s...
Linhas de Produtos de Software
S  Limitações das Técnicas do Reuso
S  Técnicas de reuso tradicionais de software
promove...
Linhas de Produtos de Software
S  É você chegar para um cliente de dizer: “O

meu software é muito bom porque ele usa EJB...
Linhas de Produtos de Software
S  Reuso horizontal e localizado
Linhas de Produtos de Software
S  Linhas de produto de software permitem o

reuso estratégico em torno do negócio da
empr...
Linhas de Produtos de Software
S  É você chegar para um cliente e falar: “O meu

software tem cinco tipos diferentes de p...
Linhas de Produtos de Software
S  Reuso estratégico e em torno do negócio
Linhas de Produtos de Software
S  Linhas de produtos são o próximo nível de

modularização (reuso) de software.
Linhas de Produtos de Software
S  Mas o que são LPS?
S  Linha de produto de software (Software Product
Line) é uma famíl...
Linhas de Produtos de Software
S  Processando ....
Linhas de Produtos de Software
S  O que significa ser uma família de sistema

satisfazendo um segmento específico de
merc...
Linhas de Produtos de Software
S  O que é essa tal de característica? (Ou como é mais

comum “feature”) ?
S  Feature é u...
Linhas de Produtos de Software
S  Mas porque a gente usa esse negócio de LPS

mesmo?
Linhas de Produtos de Software
S  Linhas de Produtos tentam organizar a

mesma coisa de uma forma mais gerenciável.

core...
Linhas de Produtos de Software
S  Mas esse negócio de LPS existe na vida

real? Ou é só no mundo do faz de conta?
Linhas de Produtos de Software
S  Eclipse
No caso do
eclipse as
variabilidades da
linha são
realizadas com o
uso de plug-...
Linhas de Produtos de Software
S  Android
Uma boa técnica
para se usar com
Android é a
compilação
condicional
Linhas de Produtos de Software
S  Sistemas Web

Podem usar
Parâmetros de
Configuração,
Templates de
estilo e Padrões de
P...
Linhas de Produtos de Software

Conceitos
Linhas de Produtos de Software
S  Tipos de Feature :
S  Obrigatórias: Estão em todos os produtos (login)
S  Opcionais: ...
Linhas de Produtos de Software
S  Feature Model:

Feature Obrigatória

Feature Alternativa

Feature Opcional

Or-feature
Linhas de Produtos de Software
S  Abordagens na Construção de uma LPS:
S  Proativa
S  Construir desde o começo todos os...
Linhas de Produtos de Software
S  Variation Points
S  Lugares onde a variação ocorre no sistema
S  Configuration knowle...
Linhas de Produtos de Software
S  Derivação do Produto
S  Processo que cria um produto da linha
(normalmente é automatiz...
Linhas de Produtos de Software

Mais Complexidade
Linhas de Produtos de Software
S  LPS não envolve apenas as equipes de

desenvolvido
S  Como realizar a elicitação de re...
Linhas de Produtos de Software
S  Vantagens na Adoção de Linhas de Produto:
S  Redução dos custos de desenvolvimento
S ...
Linhas de Produtos de Software
S  Desvantagens na Adoção de Linhas de

Produto:
S  Grande investimento inicial $$$
S  R...
Linhas de Produtos de Software
S  Quando não é recomendado usar?
S  Domínio não estável
S  Uma quantidade muito grande ...
Linhas de Produtos de Software
S  O mais complicado em LPS é como

implementar as variabilidades existentes na
sua linha ...
Linhas de Produtos de Software
S  O Padrão “Execução Condicional”
S  Definição bem simples:
S  Padrões de Projetos para...
Linhas de Produtos de Software
S  O Padrão “Execução Condicional”
S  A parametrização do sistema não é usada apenas
para...
Linhas de Produtos de Software
S  Exemplo: Feature “Punição” do Módulo de

Bibliotecas do SIGAA
S  Padrões de Projeto La...
Linhas de Produtos de Software
S  Feature “Punição” do Módulo de Bibliotecas do

SIGAA
S  A classe

PunicaoAtrasoEmprest...
Linhas de Produtos de Software
S  Feature “Punição” do Módulo de Bibliotecas

do SIGAA
S  Hoje qualque novo tipo punição...
Linhas de Produtos de Software
S  Feature “Punição” do Módulo de Bibliotecas

do SIGAA
S  A feature “Punição” da bibliot...
Linhas de Produtos de Software
S  Feature “Punição” do Módulo de Bibliotecas

do SIGAA
Linhas de Produtos de Software
S  Quer saber mais ?
S  Conditional Execution: A Pattern for the Implementation

of Fine-...
Linhas de Produtos de Software

Desafio
Linhas de Produtos de Software
S  Desafio
S  Alguns sistemas de grande porte possuem certos
módulos nos quais é perfeita...
Linhas de Produtos de Software
S  Desafio
S  Como garantir que os módulos que usam LPS
possam evoluir de forma organizad...
Linhas de Produtos de Software
S  Desafio

Módulos LPS

Módulos não LPS
Linhas de Produtos de Software
Linhas de Produtos de Software
S  Desafio
S  Esse isolamento é relativamente fácil de ser
realizado na abordagem proativ...
Linhas de Produtos de Software
Linhas de
Produtos de
Software
Imagens retiradas da internet

Jadson Santos
jadsonjs@gmail.com
Linhas de
Produtos
de Software

Jadson Santos
Natal, Outubro de 2013

S
Próximos SlideShares
Carregando em…5
×

Apresentação lps para publicar

389 visualizações

Publicada em

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Apresentação lps para publicar

  1. 1. Linhas de Produtos de Software Jadson Santos Natal, Outubro de 2013 S
  2. 2. Linhas de Produtos de Software S  Alguém vê alguma similaridade entre esses produtos?
  3. 3. Linhas de Produtos de Software S  Além de você comer e engordar!
  4. 4. Linhas de Produtos de Software S  E variabilidades?
  5. 5. Linhas de Produtos de Software S  Por que será que as empresas de fast food fazem isso?
  6. 6. Linhas de Produtos de Software S  Por que será que as empresas de fast food fazem isso?
  7. 7. Linhas de Produtos de Software S  E parece que essa ideia não é nova
  8. 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. 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. 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. 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. 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. 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. 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”.
  15. 15. Linhas de Produtos de Software S  Reuso horizontal e localizado
  16. 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. 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. 18. Linhas de Produtos de Software S  Reuso estratégico e em torno do negócio
  19. 19. Linhas de Produtos de Software S  Linhas de produtos são o próximo nível de modularização (reuso) de software.
  20. 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.
  21. 21. Linhas de Produtos de Software S  Processando ....
  22. 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. 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. 24. Linhas de Produtos de Software S  Mas porque a gente usa esse negócio de LPS mesmo?
  25. 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. 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. 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. 28. Linhas de Produtos de Software S  Android Uma boa técnica para se usar com Android é a compilação condicional
  29. 29. Linhas de Produtos de Software S  Sistemas Web Podem usar Parâmetros de Configuração, Templates de estilo e Padrões de Projeto
  30. 30. Linhas de Produtos de Software Conceitos
  31. 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. 32. Linhas de Produtos de Software S  Feature Model: Feature Obrigatória Feature Alternativa Feature Opcional Or-feature
  33. 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. 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. 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.
  36. 36. Linhas de Produtos de Software Mais Complexidade
  37. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 48. Linhas de Produtos de Software S  Feature “Punição” do Módulo de Bibliotecas do SIGAA
  49. 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/
  50. 50. Linhas de Produtos de Software Desafio
  51. 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. 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?
  53. 53. Linhas de Produtos de Software S  Desafio Módulos LPS Módulos não LPS
  54. 54. Linhas de Produtos de Software
  55. 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.
  56. 56. Linhas de Produtos de Software
  57. 57. Linhas de Produtos de Software Imagens retiradas da internet Jadson Santos jadsonjs@gmail.com
  58. 58. Linhas de Produtos de Software Jadson Santos Natal, Outubro de 2013 S

×