En la industria del software existen algunas tendencias que hacen que el panorama de la producción en esta industria vaya cambiando. Por un lado, la reutilización de componentes y artefactos, lo que se persigue desde siempre en la ingeniería del software, evolucione de ser una reutilización oportunista y ad hoc a una reutilización planificada. Gran parte de las empresas maduras planifican cómo reutilizar sus activos y, aunque el «copia y pega» sigue siendo una de las formas más frecuentes de reutilización, se planifican otras formas de reaprovechar el trabajo realizado en otros proyectos, definiendo (micro) servicios, paquetes u otros artefactos. En segundo lugar, la variabilidad de los sistemas informáticos está pasando de forma acelerada del hardware al software hasta el punto de llegar a virtualizar componentes de hardware como sensores, actuadores o incluso redes. Un mismo producto (por ejemplo, un coche) puede tener exactamente el mismo hardware y una gran diferencia de valor según el software que tiene configurado. Esto lleva de forma natural a la tercera tendencia y es que el número de puntos de variabilidad de los sistemas crece por miles. Si pensamos en una parte de un sistema informático, por ejemplo, el kernel de Linux, existen reportes que sitúan entre 10.000 y 16.000 los posibles valores de configuración de esa parte de un sistema. Si estos puntos de configuración fueran sólo con valores booleanos, quisiera decir que tendríamos muchas más posibles configuraciones del núcleo de Linux que el número total de átomos estimados que existen en todo el universo.
Todo esto nos lleva a una de las tareas más complejas dentro de la producción de software que es la gestión de la complejidad. Los sistemas siguen creciendo en funcionalidad, tamaño, alcance y también en complejidad. Una posible aproximación para abordar la complejidad, reutilización y variabilidad en ingeniería de software son las líneas de producto software(software product lines). La idea es relativamente simple, no así la puesta en marcha de la idea.
En la revolución industrial se pasó de un paradigma de producción artesanal a lo que se llama producción en masa (mass production). La idea era que se podía producir un mismo producto estandarizado de forma repetida con mucha eficiencia usando para ello cadenas de montaje. La aparición de las TIC y la automatización permitió avanzar en el proceso de producción hacia lo que se conoce como personalización en masa (mass customization) que parte de producir bienes o servicios con alto grado de personalización pero haciéndolo con casi la misma eficiencia que la producción en masa. Un ejemplo podría ser la producción de relojes. Al principio los relojes se producían de forma artesanal, después pasaron a producirse en masa en un número reducido de modelos y actualmente se producen infinidad de modelos personalizados con capacidad de almacenar información y ejecutar una multitud de aplicaciones. La ingeniería de líneas de producto software no sería más que la personalización en masa de los productos software.
Para poder abordar una estrategia de líneas de producto software en una organización es necesario que haya un cambio de enfoque en el ámbito organizacional, lo que es un reto y suele ser una barrera. Por eso es necesario centrarse en un dominio o dominios de aplicación. Ya no produciríamos software de forma genérica para cualquier clase de proyecto, sino que lo haríamos dentro de un determinado dominio, por ejemplo, haríamos software para tiendas de comercio electrónico.
Una vez determinado el dominio en el que produces, debes identificar cuáles son tus partes comunes y cuáles son las partes variables que esperas tengan tus productos. Aquí es donde los modelos de características (feature models)pueden servir para determinar cuáles son los productos que entrarán dentro del alcance (scope) de la línea de productos y cuáles no. Estos modelos son útiles tanto para interactuar con los participantes como para aspectos más técnicos como generar configuradores interactivos o permitir el análisis o razonamiento automático con los modelos para la producción o depuración de errores.
Las líneas de producto son una aproximación interesante si una organización produce productos similares dentro de un mismo dominio. Desde la red de investigación TASOVA PLUS, en la que participan hasta 13 universidades, hemos detectado, a través de una encuesta con más de 100 participantes de la industria del estado, que hay más necesidad de gestión de la variabilidad que conocimiento sobre líneas de producto software. Por tanto, tenemos un gran reto en la comunidad para dar a conocer los avances tecnológicos en este campo y seguir investigando.