Linha de Produto de Software
Uma linha de produto de software (LPS) é um conjunto de sistemas de software que compartilham características (features) comuns e gerenciáveis, que satisfazem as necessidades de um segmento particular ou de uma missão [1]. Esse conjunto de sistemas é denominado também, família de produtos.
Os membros da família são produtos específicos desenvolvidos de maneira sistemática a partir da instanciação de uma infraestrutura comum de uma LPS, chamada núcleo de artefatos (Core assets) [2].
O núcleo de artefatos é formando por um conjunto de características comuns (similaridades) e características variáveis (variabilidades) [3]. O núcleo forma a base da LPS, e inclui a arquitetura de linha de produto (ALP), componentes reusáveis, modelos de domínios, requisitos da LPS, planos de testes e modelos de características e de variabilidades.
As variabilidades, inseridas no núcleo de artefatos, como mencionado previamente, indicam as características variáveis dos produtos que podem ser instanciados de um núcleo, logo correspondem aos diversos artefatos que são reutilizados. Estando, desta maneira, associadas a diferentes níveis de abstração, dentre eles: a descrição da arquitetura, a documentação de projeto, o código fonte, o código compilado, o código ligado e o código executável [4].
O SEI, por meio da iniciativa Product Line Practice (PLP) [2], define três atividades essenciais em LPS, sendo estas: o desenvolvimento do núcleo de artefatos, correspondente à engenharia de domínio; o desenvolvimento do produto, referente à engenharia de aplicação; e o gerenciamento de linha de produto. A interação entre essas três atividades é representada na Figura 1.

Em síntese, a interação entre as três atividades, por meio dos círculos da Figura 1, indica que essas são interligadas e iterativas. A atividade de desenvolvimento do núcleo de artefatos (Core Asset Development) interage com a atividade de desenvolvimento dos produtos específicos (Product Development), gerando-os de forma sistemática, por meio da atividade de gerenciamento (Management), que engloba a gerência técnica e organizacional.
O elemento mais importante do gerenciamento técnico é o gerenciamento de variabilidades, essencial ao sucesso na adoção de LPS [4,5].
[1] Clements, P. & Northrop, L. Software Product Lines: Practices and Patterns Addison-Wesley, 2002.
[2] SEI Software Engineering Institute A Framework for Software Product Line Practice - Version 5.0. 2012.
[3] Linden, F. J. v. d.; Schmid, K. & Rommes, E. Software Product Lines in Action: The Best Industrial Practice in Product Line Engineering Springer-Verlag New York, Inc., 2007.
[4] Capilla, R.; Bosch, J. & Kang, K. Systems and Software Variability Management: Concepts, Tools and Experiences Springer, 2013.
[5] Chen, L.; Ali Babar, M. & Ali, N. Variability Management in Software Product Lines: a Systematic Review Proc. Int. Software Product Line Conference, Carnegie Mellon University, 2009, 81-90.