58
Linhas de Produtos de Software Jadson Santos Natal, Outubro de 2013

Apresentação lps para publicar

Embed Size (px)

Citation preview

Page 1: Apresentação lps para publicar

S

Linhas de Produtos

de Software

Jadson Santos Natal, Outubro de 2013

Page 2: Apresentação lps para publicar

S Alguém vê alguma similaridade entre esses produtos?

Linhas de Produtos de Software

Page 3: Apresentação lps para publicar

S Além de você comer e engordar!

Linhas de Produtos de Software

Page 4: Apresentação lps para publicar

S E variabilidades?

Linhas de Produtos de Software

Page 5: Apresentação lps para publicar

S Por que será que as empresas de fast food fazem isso?

Linhas de Produtos de Software

Page 6: Apresentação lps para publicar

S Por que será que as empresas de fast food fazem isso?

Linhas de Produtos de Software

Page 7: Apresentação lps para publicar

S E parece que essa ideia não é nova

Linhas de Produtos de Software

Page 8: Apresentação lps para publicar

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?

Linhas de Produtos de Software

Page 9: Apresentação lps para publicar

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  

Linhas de Produtos de Software

Page 10: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 11: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 12: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 13: Apresentação lps para publicar

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?

Linhas de Produtos de Software

Page 14: Apresentação lps para publicar

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”.

Linhas de Produtos de Software

Page 15: Apresentação lps para publicar

S Reuso horizontal e localizado

Linhas de Produtos de Software

Page 16: Apresentação lps para publicar

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 ?

Linhas de Produtos de Software

Page 17: Apresentação lps para publicar

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.”

Linhas de Produtos de Software

Page 18: Apresentação lps para publicar

S Reuso estratégico e em torno do negócio

Linhas de Produtos de Software

Page 19: Apresentação lps para publicar

S Linhas de produtos são o próximo nível de modularização (reuso) de software.

Linhas de Produtos de Software

Page 20: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 21: Apresentação lps para publicar

S Processando ....

Linhas de Produtos de Software

Page 22: Apresentação lps para publicar

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!

Linhas de Produtos de Software

Page 23: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 24: Apresentação lps para publicar

S Mas porque a gente usa esse negócio de LPS mesmo?

Linhas de Produtos de Software

Page 25: Apresentação lps para publicar

S Linhas de Produtos tentam organizar a mesma coisa de uma forma mais gerenciável.

features  core   configuration knowledge  

produtos  

Derivação do Produto

Linhas de Produtos de Software

Page 26: Apresentação lps para publicar

S Mas esse negócio de LPS existe na vida real? Ou é só no mundo do faz de conta?

Linhas de Produtos de Software

Page 27: Apresentação lps para publicar

S Eclipse

No caso do eclipse as variabilidades da linha são realizadas com o uso de plug-ins.

Linhas de Produtos de Software

Page 28: Apresentação lps para publicar

S Android

Uma boa técnica para se usar com Android é a compilação condicional

Linhas de Produtos de Software

Page 29: Apresentação lps para publicar

S Sistemas Web Podem usar Parâmetros de Configuração, Templates de estilo e Padrões de Projeto

Linhas de Produtos de Software

Page 30: Apresentação lps para publicar

Conceitos

Linhas de Produtos de Software

Page 31: Apresentação lps para publicar

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)

Linhas de Produtos de Software

Page 32: Apresentação lps para publicar

S Feature Model:

Feature Obrigatória Feature Opcional

Feature Alternativa Or-feature

Linhas de Produtos de Software

Page 33: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 34: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 35: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 36: Apresentação lps para publicar

Mais Complexidade

Linhas de Produtos de Software

Page 37: Apresentação lps para publicar

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?

Linhas de Produtos de Software

Page 38: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 39: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 40: Apresentação lps para publicar

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)

Linhas de Produtos de Software

Page 41: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 42: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 43: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 44: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 45: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 46: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 47: Apresentação lps para publicar

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

Linhas de Produtos de Software

Page 48: Apresentação lps para publicar

S Feature “Punição” do Módulo de Bibliotecas do SIGAA

Linhas de Produtos de Software

Page 49: Apresentação lps para publicar

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-grained-variabilities-in-software-product-lines/

Linhas de Produtos de Software

Page 50: Apresentação lps para publicar

Desafio

Linhas de Produtos de Software

Page 51: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 52: Apresentação lps para publicar

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?

Linhas de Produtos de Software

Page 53: Apresentação lps para publicar

S Desafio

Módulos não LPS

Módulos LPS

Linhas de Produtos de Software

Page 54: Apresentação lps para publicar

Linhas de Produtos de Software

Page 55: Apresentação lps para publicar

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.

Linhas de Produtos de Software

Page 56: Apresentação lps para publicar

Linhas de Produtos de Software

Page 57: Apresentação lps para publicar

Linhas de Produtos de Software Imagens retiradas da internet

Jadson Santos

[email protected]

Page 58: Apresentação lps para publicar

S

Jadson Santos Natal, Outubro de 2013

Linhas de Produtos

de Software