Linhas de Produtos de Software: uma introdução
Autor: Fagner Souza | Publicado: 2012-10-07T14:56:00-07:00



Olá leitores,&nbsp;



Hoje abro um novo tipo de artigo no meu blog. São artigos dedicados à Engenharia da Computação. O artigo de estreia é sobre Linhas de Produtos de Software e seu conteúdo é inteiro baseado em um fichamento que estou produzindo para minha Dissertação de Mestrado. O site de origem das informações pode ser acessado aqui:&nbsp;http://www.softwareproductlines.com/



O trabalho do autor se baseia em sua própria experiência de
cerca de duas décadas em reuso de software e campos de linhas de produto de
software.



O site está organizado na forma de livro online com
capítulos de introdução e primeiros passos além de benefícios e casos de
sucesso. Ao final são destacados artigos do próprio autor e de pesquisadores
voluntários falando sobre as perspectivas da área seguidas de um capítulo de
recursos onde podem ser encontradas mais referencias sobre o tema como sites,
artigos e livros.



Existem diversas referencias a casos de sucesso de empresas
grandes como HP, Phillips e outras.&nbsp;
Nesses casos de sucesso são destacadas melhorias no time-to-market,
custo de engenharia, tamanho do portfolio e taxa de defeitos na ordem de 3 para
50. A origem dessa ordem de magnitude é o reuso estratégico de software:
consolidar aspectos comuns ao longo da linha de produto, estrategicamente
gerenciar toda a variação da linha de produto e agressivamente eliminar toda a
duplicação de esforços de engenharia. 



Produção em massa – é a habilidade de criar muitas cópias do
mesmo produto. Isso representa um avanço enorme no mundo da manufatura, mas é
algo trivial para a engenharia de software.

Customização em massa – é a habilidade de eficientemente
criar muitas variações de um produto. Esse é um enorme avanço tanto para a
manufatura quanto para a engenharia de software e a chave para isso é maximizar
os aspectos comuns e eficientemente gerenciar as variações na linha de produto.



Linhas de produto de software podem ser descritos a partir
de quatro conceitos:



Ativos de software: requisitos, componentes de
software na forma de código fonte, casos de teste, arquitetura e documentação.
&nbsp;Decisões de produto: descreve características
opcionais e variáveis para os produtos na linha de produto. Sua representação
pode variar desde descrições informais até descrições formais feitas em
linguagem de máquina. O processo de decisão pode também estar associado a
papeis como engenheiros de aplicação, engenheiros de domínio, gerente comercial
ou cliente.
Mecanismo de produção: meios para a composição e
configuração dos ativos de software. Pode ser automatizada, manual ou uma
combinação de ambos.
Produto de software: coleção de todos os
produtos que podem ser criados a partir da linha de produto.


<!--[if !supportLists]-->














Cada ativo de software tem um papel bem definido dentro de
uma arquitetura comum para a linha de
produto. Para que seja possível a variação entre os produtos, alguns desses
ativos precisam ser comuns e outros precisam ser passíveis de configuração de
modo a proverem diferentes comportamentos. Durante o processo de produção as
escolhas para cada uma das características opcionais e variáveis são utilizadas
para determinar quais ativos a usar e como configurá-los.






"The characteristic that distinguishes software product lines from previous&nbsp;efforts is predictive versus opportunistic software reuse. Rather than put&nbsp;general software components into a library in hopes that opportunities for reuse&nbsp;will arise, software product lines only call for software artifacts to be&nbsp;created when reuse is predicted in one or more products in a well defined&nbsp;product line."






Os objetivos principais da linha de produtos de software:
tirar proveito das características comuns e gerenciar a variação de modo a
reduzir tempo, esforço, custo e complexidade na criação e gerenciamento de
linha de produto de softwares similares.



A variação presente em alguns dos ativos de software pode
ser acessada em alguns momentos especiais durante o processo produtivo. Dentre
esses momentos destacam-se:



Código fonte: durante o reuso e configuração de
artefatos fonte
Desenvolvimento: durante arquitetura, projeto e codificação.
Instanciação estática do código: durante a
montagem do código antes da compilação
Build: durante a compilação
Empacotamento: durante a montagem de coleções
binárias e executáveis
Cliente: durante codificação personalizada no
cliente
Instalação: durante a instalação do produto de
software
Inicialização: durante a inicialização do
sistema
Tempo de execução: durante a execução do sistema


<!--[if !supportLists]-->




















Quanto ao escopo existem duas abordagens de gerenciamento do
escopo de linha de produtos de software: proativa e reativa. Na abordagem
proativa todos os produtos necessários no horizonte previsível são suportados
pela linha de produtos. No caso da abordagem reativa somente os produtos
necessários imediatamente são suportados pela linha de produto e novos produtos
são incrementalmente adicionados à medida que as necessidades mudam. É comum
que artefatos como arquitetura tenham um escopo mais proativo do que artefatos
como código fonte.&nbsp;




“strategic software reuse: consolidate commonality throughout the product line, strategically manage all product line variation, and aggressively eliminate all duplication of engineering effort”







Quanto à adoção de linhas de produtos de softwares nas
empresas existe diversas abordagem que suportam esse processo. Alguns estudos
mostram esforços que variam de 2 meses à 5 anos. Esse esforço é influenciado
principalmente pela origem dos ativos de software. A fonte dos ativos de
software que mais tarde comporão a linha de produto inclui: artefatos
reutilizáveis de uma biblioteca existente, artefatos encapsulados em produtos
existentes, ou ainda artefatos desenvolvidos do zero. Enfim, muito tempo pode
ser ganho se os ativos forem extraídos de produtos existentes, repositórios
existentes e bibliotecas comerciais. No entanto, existem técnicas leves que podem
ajudar a diminuir o esforço da adoção de linhas de produtos de software:




Minimizar diferenças entre sistemas únicos e
linha de produto
Utilizar uma adoção incremental para
inicialmente fazer a transição de um pequeno subconjunto dos ativos, produtos,
subsistemas ou pessoas
Oferecer ferramentas e tecnologias de apoio à linha de produtos
Usar abordagens reativas para adiar o
desenvolvimento de produtos e esforço de implantação
Estruturar produção para minimizar a necessidade
de fusões complexas e custosas



Agora que você tem uma&nbsp;ideia&nbsp;do que é Linha de Produtos de Software resposta a pergunta de pesquisa: Como produzir uma Linha de Produtos de Software usando uma abordagem ágil?

O autoatendimento pode, obviamente, tirar grande vantagem da abordagem usando Linha de Produtos de Softwares. Imagine que uma aplicação de autoatendimento pode ser ela própria uma Linha de Produto e cada serviço que ela disponibiliza é um produto do conjunto. Cada um desses serviços ou produtos podem possuir pontos de personalização ou configuração que permitem mudar o comportamento do produto de modo a, por exemplo, oferecer um serviço de saque com fluxo para cartão de crédito e outro para débito. A&nbsp;própria&nbsp;linha de produto com opções de configuração para execução em equipamentos dotados de telas touch screen ou sem esse recurso e assim por diante. O fato é que essa abordagem permite uma séria de combinações que ao final resultarão em redução dos custos, do tempo de desenvolvimento e na estabilidade geral do produto mediante o reuso expressivo dos artefatos de software.

É isso. Até o próximo artigo!!!

<!--[if !supportLists]-->