Translate

domingo, 7 de outubro de 2012

Linhas de Produtos de Software: uma introdução


Olá leitores, 

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: 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.  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:
  1. Ativos de software: requisitos, componentes de software na forma de código fonte, casos de teste, arquitetura e documentação.
  2.  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.
  3. 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.
  4. Produto de software: coleção de todos os produtos que podem ser criados a partir da linha de produto.



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 efforts is predictive versus opportunistic software reuse. Rather than put general software components into a library in hopes that opportunities for reuse will arise, software product lines only call for software artifacts to be created when reuse is predicted in one or more products in a well defined 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:
  1. Código fonte: durante o reuso e configuração de artefatos fonte
  2. Desenvolvimento: durante arquitetura, projeto e codificação.
  3. Instanciação estática do código: durante a montagem do código antes da compilação
  4. Build: durante a compilação
  5. Empacotamento: durante a montagem de coleções binárias e executáveis
  6. Cliente: durante codificação personalizada no cliente
  7. Instalação: durante a instalação do produto de software
  8. Inicialização: durante a inicialização do sistema
  9. Tempo de execução: durante a execução do sistema

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. 

“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:
  1. Minimizar diferenças entre sistemas únicos e linha de produto
  2. Utilizar uma adoção incremental para inicialmente fazer a transição de um pequeno subconjunto dos ativos, produtos, subsistemas ou pessoas
  3. Oferecer ferramentas e tecnologias de apoio à linha de produtos
  4. Usar abordagens reativas para adiar o desenvolvimento de produtos e esforço de implantação
  5. Estruturar produção para minimizar a necessidade de fusões complexas e custosas

Agora que você tem uma ideia 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 própria 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!!!

4 comentários:

Unknown disse...


Hi! I know this is somewhat off topic but I was wondering if you knew where I could get a captcha plugin for my comment form? I'm using the same blog platform as yours and I'm having trouble finding one? Thanks a lot! capitalone com login

Unknown disse...


When someone writes an paragraph he/she keeps the plan of a user in his/her brain that how a user can be aware of it. Therefore that's why this paragraph is amazing. Thanks! hotmail sign in email

Travis Smith disse...


What's up to every body, it's my first pay a visit of this web site; this webpage consists of remarkable and genuinely good stuff in support of visitors. netflix.com login

Unknown disse...

Estou utilizando o aplicativo espião no celular da minha filha para conseguir ver tudo que ela acessa ou com quem ela conversa. É muito bom fiquei impressionado como é simples e fácil de usar recomendo muito usarem. https://brunoespiao.com.br/espiao-de-sms