Análisis de modelos de variabilidad especificados en Kconfig - Gonnet, Silvio (2017)
Una tendencia creciente en el desarrollo de software es la necesidad de desarrollar múltiples productos de software similares en conjunto en vez de varios productos individuales. Hay varias razones para esto: los productos pueden estar enfocados a distintos sectores del mercado, estar sujetos a distintas restricciones legales o culturales, o deben satisfacer necesidades específicas de diferentes stakeholders. Debido a las restricciones de costo y tiempo, no es posible desarrollar un nuevo producto desde cero para cada cliente, y el reuso de software debe ser incrementado. Frente a este desafío, la ingeniería de líneas de productos de software (SPLE: Software Product Line Engineering) surge como un paradigma viable e importante que permite a las empresas desarrollar familias de productos, disminuyendo costos y tiempos, basándose en el reuso de componentes [1] [2]. Una línea de productos de software (SPL: Software Product Line) es una familia de sistemas de software desarrollados a partir de un conjunto de características comunes, que apunta a satisfacer necesidades específicas de un segmento de mercado. Una SPL está constituida por un núcleo que contiene los componentes presentes en todos los productos o aplicaciones derivadas, y un conjunto de elementos variables, variabilidad, que incluye aquellas características optativas de la aplicación [1] [2]. Muchos proyectos de desarrollo de software deben administrar una variabilidad muy grande. Proyectos que adoptan SPL emplean el concepto de variabilidad para derivar productos de software individuales en nicho de mercados [3]. Los modelos de variabilidad representan las características, o “features”, comunes y variables de productos en una SPL [4] [5]. Por otro lado, existen proyectos de software altamente configurables, como es el caso del kernel de Linux, donde las opciones de configuración (características o features) son empleadas para derivar el producto cumpliendo ciertas propiedades funcionales y nofuncionales, según las necesidades del usuario.