Apresentação lps para publicar

Preview:

Citation preview

S

Linhas de Produtos

de Software

Jadson Santos Natal, Outubro de 2013

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 algum cliente escolhe uma opção de motorização ou o tipo de câmbio?

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  

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.

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.

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.

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?

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

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 empresa e seus clientes.

S O que é reuso estratégico e em torno do negócio ?

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

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í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

S Processando ....

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!

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.

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.

features  core   configuration knowledge  

produtos  

Derivação do Produto

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

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 Projeto

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: 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

S Feature Model:

Feature Obrigatória Feature Opcional

Feature Alternativa 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 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

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

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

Mais Complexidade

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?

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

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

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)

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.

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.

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

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.

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.

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

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

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

Desafio

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.

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?

Linhas de Produtos de Software

S Desafio

Módulos não LPS

Módulos LPS

Linhas de Produtos de Software

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.

Linhas de Produtos de Software

Linhas de Produtos de Software

Linhas de Produtos de Software Imagens retiradas da internet

Jadson Santos

jadsonjs@gmail.com

S

Jadson Santos Natal, Outubro de 2013

Linhas de Produtos

de Software