Escolar Documentos
Profissional Documentos
Cultura Documentos
1
Linhas de Produtos de Software: Uma tendência
da indústria
Abstract
Over the past few years a new approach to software reuse has gained attention both by in-
dustry and academia. This approach is known as software product line development wich
is based upon the systematic reuse of software artifacts, through exploiting commonalities
and managing variabilities among products, that are established under a common archi-
tecture. This concept of product lines have been used by the manufacturing industry for
a long time to reduce costs and increase productivity. However, product line practice in
the software industry is a relatively new concept. Studies have shown that organizations
can yield remarkable improvements mainly in productivity by applying this approach. In
this context, this chapter presents some of the most important aspects related to software
product lines, such as variability, development processes and finally presents some tools
to support Software Product Line (SPL).
Resumo
Ao longo dos últimos anos uma nova abordagem de reuso de software tem ganhado aten-
ção tanto pela indústria quanto pela academia. Esta abordagem é conhecida como Li-
nhas de Produtos de Software na qual é baseada na reutilização sistemática de artefatos
de software, através da exploração de pontos comuns e a gestão de variabilidade entre os
produtos, que são estabelecidos sob uma mesma arquitetura. Este conceito de linhas de
produtos tem sido utilizado pela indústria de manufatura a anos para reduzir custos e au-
mentar a produtividade. No entanto esta prática possui um conceito relativamente novo
na indústria de software. Estudos têm demonstrado que as organizações têm apresentado
melhorias principalmente na produtividade aplicando esta abordagem. Neste contexto,
este trabalho apresenta alguns dos aspectos mais importantes sobre linhas de produtos de
software, tais como variabilidade, processos de desenvolvimento e finalmente mostrando
algumas ferramentas de apoio a Linhas de Produtos de Software (LPS).
1.1. INTRODUÇÃO
A maneira que os bens de consumo são produzidos mudou significativamente no decorrer
do tempo. Anteriormente mercadorias eram especificas para clientes individuais. Cada
vez mais, o número de pessoas que poderiam ter recursos para comprar vários tipos de
produto foi aumentando. No domínio dos automóveis, isso levou à invenção por Henry
Ford da linha de produção, o que permitiu a produção para um mercado de massa muito
mais barata do que a criação de cada produto em uma base artesanal. No entanto, a linha
de produção reduziu as possibilidades de diversificação.
A grosso modo, ambos os tipos de produtos, individual e os produzidos em massa
também podem ser identificados no domínio de software: eles são denominados como
software individual e software padrão. Geralmente, cada um destes tipos de produtos tem
suas desvantagens. Produtos de software individuais são bastante caros pois exigem um
maior esforço desenvolvendo espeficidades de um único produto, enquanto produtos de
software padrão (sem muita especificidade) existe a falta de diversificação suficiente para
atender bem às expectativas de muitos clientes diferentes.
No início os clientes estavam satisfeitos com os produtos padronizados em massa
por um tempo, mas nem todas as pessoas queriam o mesmo tipo de carro para qualquer
finalidade. Certos carros são usados para viajar por uma única pessoa, outros por grandes
famílias por exemplo. Assim, a indústria foi confrontada com uma crescente demanda
por produtos individualizados. Este foi o início da chamada customização em massa, o
que significava atender às exigências dos clientes dando-lhes o que eles queriam.
Para o cliente a customização em massa significa a capacidade de ter um produto
individualizado, no entanto para a indústria significa maiores investimentos em tecnologia
que elevam os preços de produtos individualizados e / ou menores margens de lucro para
a empresa. Ambos os efeitos são indesejáveis. Assim, muitas empresas, especialmente
na indústria automobilística, começaram a apresentar plataformas comuns para os seus
diferentes tipos de carros planejando de antemão quais peças seriam usadas em vários
tipos de carros diferentes.
Ao longo do tempo a plataforma foi sendo trabalhada a fim de se tornar cada
vez mais adaptável a novos componentes. As partes compreendendo a plataforma eram
geralmente mais caras em termos do projeto e os custos de preparação de fabricação.
Porém esta estratégia levou a uma redução no custo de produção para um tipo de carro
particular [21].
A indústria de automóveis passou por esta transformação na forma de produzir
seus produtos e a indústria de software também necessita atender ao mesmo requisito de
individualidade e cada vez mais produção em massa. O mercado de desenvolvimento de
software precisa construir os produtos de software com melhor qualidade, redução de cus-
tos, adaptação rápida às mudanças, e menor tempo de colocação no mercado atendendo às
necessidades dos clientes. Visando estas expectativas vários esforços em criar processos
e arquituras de sistemas tem sido realizadas ao longo dos anos [16].
Seguindo por este caminho uma nova abordagem para reutilização de software
tem ganhado considerável atenção tanto pela indústria quanto pela academia. Esta abor-
dagem é conhecida como Linha de Produtos de Software (LPS) onde a idéia básica é o
trabalho sobre um grupo de sistemas compartilhando um conjunto comum e gerenciado
de funcionalidades (features) que satisfazem necessidades específicas de um segmento, e
desenvolvidos a partir de um aglomerado comum de artefatos base e de forma previamente
planejada. Em outras palavras LPS faz uso da reusabilidade para construir sistemas com
menos esforço desde que estes pertençam a uma mesma família, ou seja, que possuam
pontos em comum [17].
Este capítulo está organizado como segue: na seção 1.2 será apresentada uma vi-
são geral sobre as peculiaridades sobre Linhas de Produtos de Software, incluindo idéias
comparativas entre estas metodologias e o reuso de software tradicional. Na seção 1.3
como as variantes de um produto podem ser gerenciadas. Na seção 1.4 atividades exer-
cidas no desenvolvimento de LPS, mostrando algumas ferramentas. Finalmente na seção
1.5 são apresentadas as conclusões.
A vantagem dessa divisão é que há uma separação de objetivos, para construir uma
plataforma robusta e para construir aplicações específicas em um curto espaço de tempo.
Para ser eficaz, os dois processos devem interagir de uma maneira que seja benéfica para
ambos.
A Figura 1.1 mostra como estes processos interagem entre si e qual o resultado dos
mesmos através de um fluxo de informações. Tanto na engenharia de domínio quanto na
engenharia de aplicação são realizadas atividades de análise, arquitetura, implementação
e testes para ao final serem gerados os produtos.
2. Cummins, Inc., foi capaz de reduzir o tempo que leva para produzir o software de
um motor diesel de cerca de um ano para cerca de uma semana.
1.3. VARIABILIDADE
O conceito de variabilidade está relacionado às possibilidades de mudar ou personalizar
um sistema. A Figura 1.3 ilustra como a variabilidade de um sistema de software é limi-
tada durante todo o projeto de construção do mesmo. No início a quantidade de sistemas
possíveis é grande pois as restrições são mínimas. Durante a execução do projeto na cons-
trução do sistema as possibilidades diminuem, até que finalmente em tempo de execução
existe exatamente um sistema apenas. Em cada etapa do desenvolvimento, decisões de
design são feitas. Cada decisão restringe o número de possíveis sistemas
Com a abordagem de LPS as variabilidades são modeladas na arquitectura de
referência da LPS (através da representação dos Pontos de Variabilidade e Variantes res-
pectivos) e resolvidas antes da instalação dos produtos.
• Documentação por Diagramas. A este nível o sistema pode ser descrito usando
várias notações UML.
Uma feature obrigatória é representada por uma aresta terminada por um círculo
preenchido a preto. Uma feature opcional é representada por uma aresta terminada por um
círculo vazio. As features alternativas são representadas por arestas que estão ligadas e
conectadas por um arco. Se o arco for vazio deve-se escolher apenas uma das alternativas
(XOR), se for preenchido é permitido escolher mais de uma alternativa (OR) [23].
Czarnecki [13] propõe colocar cardinalidade nas features para poder remover am-
biguidades e representar a informação mais facilmente, sendo as diferentes cardinalidades
assim definidas:
Core Asset Development é uma atividade na forma de ciclo de vida que resulta em ativos
base que em conjunto compõem a plataforma da linha de produto [16]. O objetivo desta
atividade é definir os aspectos comuns e a variabilidade da linha de produtos, e, portanto,
obter artefatos reutilizáveis para em seguida possuir uma capacidade de produção maior
[21]. A Figura 1.6 mostra o núcleo desta atividade juntamente com suas saídas e insumos
necessários.
As setas rotatórias na Figura 1.6 sugerem que não há um momento certo de adici-
onar uma restrição ou novos padrões no desenvolvimento e estas entradas afetam direta-
mente as saídas no processo. Em alguns contextos os produtos existentes são a base para
os ativos base em outros estes podem ser desenvolvidos do zero para futuro reuso.
Ativos base incluem, mas não estão limitados à arquitetura e sua documentação,
especificações, componentes de software, ferramentas como geradores de componentes
ou aplicação, modelos de desempenho, cronogramas, orçamentos, planos de teste, casos
de teste, planos de trabalho e processo descrições [17].
Embora possa ser possível a criação de ativos base que podem ser utilizados em
todos os produtos sem quaisquer adaptações, em muitos casos, algumas adaptações são
necessárias para torná-los mais utilizáveis no contexto mais amplo de uma linha de pro-
dutos. Logo, mecanismos de variação dos principais ativos base utilizados ajudam a con-
trolar as adaptações necessárias e suportar as diferenças entre os produtos de software
[5]. Essas adaptações devem ser planejadas antes do desenvolvimento e facilitada para a
equipe de desenvolvimento do produto sem colocar em risco as propriedades existentes
dos ativos base.
1.4.1.2. Desenvolvimento de Produtos
Como na Figura 1.5, as setas de rotação na Figura 1.7 indicam iterações entre as
partes envovidas. Por exemplo, a existência e a disponibilidade de um determinado pro-
duto pode assim afetar os requisitos de produtos subseqüentes. Como outro exemplo de
construção, um produto que tem em comunalidades previamente não reconhecidas em re-
lação a outro produto da linha vai criar a necessidade de para atualização dos ativos base e
fornecer uma base para explorar essa comunilidade em futuros produtos [17]. Além disso,
esta atividade tem a obrigação de dar feedback sobre quaisquer problemas ou deficiências
encontradas com os ativos base.
• Proativa: Com esta abordagem os ativos base são desenvolvidos primeiro para
futuro produtos. Aqui são considerados todos os produtos a serem gerados previa-
mente fazendo-se um planejamento inicial completo.
• Reativa: Nesta abordagem os ativos base já existem, bem como uma versão da linha
de produtos, o que acontece é a evolução desta linha realizando-se incrementos na
mesma à medida que novos requisitos aparecem.
Na estratégia big bang, LPS é adotada para os novos produtos de uma só vez,
uma mudança drástica. Primeiramente a engenharia de domínio é construída completa-
mente e a plataforma é modelada e desenvolvida. Quando os ativos base estão prontos a
engenharia de aplicação inicia e as aplicações são derivadas da plataforma [21].
Com abordagem incremental, os ativos base são gradualmente desenvolvidas para
suporte aos futuros produtos.
Já a abordagem reativa pode ser quebrada em três subcategories (ver Figura 1.9):
• baseado em infra-estrutura,
• baseado em branch-and-unit, e
• baseado em bulk-integration.
1.4.3. Ferramentas
Nesta seção iremos abordar algumas ferramentas relacionadas basicamente à modelagem
de feature models.
Aguiar [2] realizou um estudo comparativo sobre as principais ferramentas de
apoio a Linha de Produtos de Software e abaixo seguem algumas características descriti-
vas deste trabalho.
1.4.3.1. fmp
O fmp (Feature Model Plugin) é um plugin gratuito para o Eclipse desenvolvido pelo
Generative Software Development Lab, da University of Waterloo [1]. Ele utiliza como
base o Eclipse Modeling Framework, o que, de acordo com os desenvolvedores, reduziu
significativamente o esforço de desenvolvimento.
O fmp apenas apresenta suporte à modelagem do domínio, através de feature mo-
dels. Ele não possui nenhuma funcionalidade de configuration knowledge, nem nada que
permita, dentro do próprio fmp, o mapeamento necessário entre features e artefatos da
linha de produtos para permitir a geração dos produtos.
Os modelos gerados pelo feature model são gravados no sistema como um arquivo
XML (do inglês Extensible Markup Language), o que pode permitir que geradores, uti-
lizando XSLT (do inglês Extensible Stylesheet Language Transformation), por exemplo,
possam processar o modelo. Por ser um plugin para o Eclipse e possuir uma API bem
definida, possibilita que outras ferramentas se integrem com o mesmo.
Figura 1.10. Interface do fmp
1.4.3.2. XFeature
O XFeature é um plugin para o Eclipse desenvolvido pela P&P Software, que é uma
empresa que se originou no Institute of Automatic Control of ETH (Swiss Federal Institute
of Technology).
O XFeature foi criado para demonstrar um conceito de uma ferramenta para au-
tomatizar o processo de modelagem e configuração de artefatos reusáveis de software.
A ferramenta se apresenta como inovadora pela possibilidade de customização do meta-
modelo da família de produtos [9].
O XFeature tem suporte à modelagem do domínio, através de feature models e não
possui a funcionalidade de configuration knowledge, que permite o mapeamento neces-
sário entre features e artefatos da linha de produtos para permitir a geração dos produtos.
Originalmente o XFeature foi desenvolvido visando o seu uso em aplicações espa-
ciais (sistemas de controle embutidos para naves espaciais, por exemplo), porém, não há
nenhuma restrição na maneira que foi desenvolvido que não permita o seu uso em outros
contextos.
Em relação à implementação, o XFeature foi implementado baseado na versão 3.3
do Eclipse, ao contrário do fmp, ele não utilizou o EMF para a definição do meta-modelo
de feature model. O seu editor é baseado no GEF (Graphical Editing Framework) do
Eclipse.
O XFeature depende fortemente de XML e de transformações XSL. Scripts Ant
são utilizados para a verificação e geração de arquivos de configuração da aplicação, tais
como os que customizam o editor dos modelos.
O processo de criação de modelos no XFeature é consideravelmente mais com-
plicado do que nas outras ferramentas. Primeiramente se define qual será a configuração
utilizada (FD, FMP, SimplifiedICSR ou ICSR). Em seguida, é criado o que o XFeature
chama de family model, que é o meta-modelo do domínio. Após a validação do family
model sob a configuração utilizada, o usuário deve clicar em um botão que gera dois
meta-modelos: o de aplicação e o de display. O meta-modelo de aplicação é o que será
utilizado como configuração dos modelos que vão conter as instâncias da linha de pro-
duto, e o meta-modelo de display define quais os elementos visuais que aparecerão no
editor. Apesar de ser mais complicado, o XFeature permite que o usuário tenha mais con-
trole sobre como são criados os feature models, uma vez que o usuário não fica preso à
única configuração presente nas outras aplicações.
Uma vez criados os modelos das instâncias da linha de produtos, eles podem ser
validados contra seu meta-modelo, que foi definido pelo usuário anteriormente. Quando
os modelos estiverem validados, eles podem ser utilizados como entrada pra outras ferra-
mentas que possuam a parte de configuration knowledge para gerar os produtos finais.
A Figura 1.11 demonstra a interface do XFeature.
O XFeature só possui uma maneira de visualizar e editar os seus modelos, que é
em forma de árvore, como demonstrado na Figura 3, onde encontramos feature raiz, no
topo da árvore, features opcionais, pontilhadas, e features obrigatórias, em caixas ama-
relas, assim como o editor de propriedades de features. O XFeature também permite a
definição de restrições globais sobre o feature model. O usuário cria um modelo de restri-
ções, que passa pelo global constraints compiler, que vai gerar um conjunto de arquivos
XSL que permitem a verificação das restrições.
Figura 1.11. Interface do Xfeature
1.4.3.3. pure::variants
Referências
[1] GENERATIVE SOFTWARE DEVELOPMENT GROUP.
http://www.sei.cmu.edu/plp/ web-page acessada em 14 de outubro de 2011.
[2] Rogerio Aguiar. Comparacao entre ferramentas para Linha de Produtos de Soft-
ware. Escola Politecnica de Pernambuco. Departamento de Sistemas e Computacao.
http://dsc.upe.br/ tcc/20081/RogeriomonografiaFinal.pdf Acessado em 14 de outu-
bro de 2011.
[3] F. Ahmed, P. Campbell, and M.S. Lagharid. Cognitive factors in software product
line engineering. In Computer Modelling and Simulation, 2009. UKSIM ’09. 11th
International Conference on, pages 352 –355, march 2009.
[4] Muhammad Ali Babar, Lianping Chen, and Forrest Shull. Managing variability in
software product lines. IEEE Software, 27:89–91, 94, 2010.
[5] Felix Bachmann and Paul C Clements. Variability in software product lines. Soft-
ware Engineering Institute Pittsburgh USA, (September):46, 2005.
[6] Len Bass, Paul Clements, and Rick Kazman. Software Architecture in Practice.
Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2 edition, 2003.
[7] Jan Bosch. Design and use of software architectures: adopting and evolving a
product-line approach. ACM Press/Addison-Wesley Publishing Co., New York,
NY, USA, 2000.
[8] Stan Buhne, Gary Chastek, Timo Kakola, Peter Knauber, Linda Northrop, and Stef-
fen Thiel. S.: Exploring the context of product line adoption. In In: Proc. 5th Int.
Workshop on Product Family Engineering, 2003.
[9] V Cechticky, A Pasetti, O Rohlik, and W Schaufelberger. Xml-based feature mo-
delling. Software Reuse Methods Techniques and Tools, pages 101–114, 2004.
[10] Y Chen, G C Gannod, and J S Collofello. A software product line process simulator.
Software Process: Improvement and Practice, 11(4):385–409, 2006.
[11] Sholom Cohen. Product line state of the practice report. Technical report, Software
Engineering Institute, Carnegie Mellon University, 2002.
[13] Eisenecker U. Czarnecki K., Helsen S. Staged configuration using feature models,
software product lines. International Conference SPLC, 2004.
[14] K Kang. Feature-oriented domain analysis feasibility study. Technical report, SEI
Technical Report, 1990.
[15] Paul C. Clements Len Baas and Rick Kazman. Software Architecture in Practice.
Second Edition. SEI Series in Software Engineering. Addison-Wesley, 2003.
[17] C.A. Long. Software product lines: practices and patterns [book review]. Software,
IEEE, 19(4):131 –132, jul/aug 2002.
[18] John D. McGregor, Linda M. Northrop, Salah Jarrad, and Klaus Pohl. Guest editors’
introduction: Initiating software product lines. IEEE Softw., 19:24–27, July 2002.
[19] Northrop. Software product line adoption roadmap. SEI Technical Note, 2004.
[20] SEI PLP. Framework for Product Line Practice. http://www.sei.cmu.edu/plp/, 2003.
[21] Klaus Pohl, Günter Böckle, and Frank J. van der Linden. Software Product Line
Engineering: Foundations, Principles and Techniques. Springer-Verlag New York,
Inc., Secaucus, NJ, USA, 2005.
[22] S. Segura, R.M. Hierons, D. Benavides, and Ruiz-Corte. Automated test data gene-
ration on the analyses of feature models: A metamorphic testing approach. pages
35 –44, april 2010.
[23] Arie van Deursen and Paul Klint. Domain-specific language design requires feature
descriptions. Journal of Computing and Information Technology, 10, 2001.