Las Líneas de Producto Software (Software Product Lines – SPLs) son una estrategia de desarrollo que busca aprovechar la eficiencia y la reutilización en la creación de un conjunto de productos software relacionados, basados en una base común compartida. Existen una gran cantidad de soluciones basadas en SPL y la literatura es extensa.

Sin embargo, ¿cuál es el potencial de las SPL? ¿Qué beneficios aporta la aplicación de estas técnicas? ¿Por qué algunas empresas no las implementan en su día a día? Y lo más importante, ¿por qué debería aplicarlas en mis proyectos de software? En este post, exploramos a fondo estas cuestiones y descubriremos las ventajas y desafíos que acompañan a las Líneas de Producto Software.

Conceptos básicos

Las Líneas de Producto Software tienen sus raíces en las décadas de 1970 y 1980, una época en la que la industria del software enfrentaba desafíos monumentales en términos de complejidad, costes y tiempo de desarrollo para sistemas cada vez más grandes y sofisticados. A medida que la industria del software experimentó un crecimiento exponencial a principios de la década de 1990, el concepto de SPL se consolidó y ganó impulso. Fue entonces cuando las organizaciones se dieron cuenta de que podían transformar las similitudes entre productos en una ventaja competitiva, agilizando el proceso de desarrollo, mejorando la calidad del software y reduciendo costos significativamente.

Un hito fundamental en el desarrollo de SPL fue la concepción de la Ingeniería de Software Basada en Componentes (CBSE). Esta metodología se centró en la creación y reutilización de componentes de software independientes y bien definidos. Así, nació la idea de construir productos basados en componentes comunes, lo que se convirtió en el núcleo esencial de las Líneas de Producto Software. La premisa básica que subyace en las técnicas de SPL es identificar los componentes compartidos por una familia de productos. A partir de aquí se pueden ir definiendo y generando un gran variedad de productos similares componiendo algunos de estos componentes en diferentes configuraciones.

Por ejemplo, si una compañía se especializa en el desarrollo de chatbots para negocios e-commerce, pueden identificarse componentes clave presentes en toda la gama de productos, como motores de procesamiento del lenguaje natural, plataformas de despliegue e información de la base de conocimiento. Al generar artefactos reutilizables y personalizar la solución para cada caso, no solo se acelera el proceso de desarrollo, sino que también se logra una personalización en masa que resulta en una reducción significativa de los costes.

Modelando una línea de producto

El primer paso es identificar el dominio del problema, es decir, el ámbito o el conjunto de productos relacionados que se desea abordar con la SPL. Es importante delimitar claramente los límites del dominio para garantizar que todos los productos pertenecientes a la línea compartan una base común y tengan una relación lógica entre sí. A continuación, debemos identificar las características comunes que son requeridas por todos los productos en la línea y las variaciones específicas que los distinguen entre sí. Esto puede lograrse a través de técnicas de ingeniería de dominio, como entrevistas con usuarios, análisis de requisitos y modelado de casos de uso. Es fundamental capturar las características de manera precisa y detallada. Una vez que se han identificado las características que podremos encontrar en nuestra familia de productos, debemos modelar la variabilidad del dominio.

Por ejemplo, en la anterior figura, se muestran tres productos distintos, que comparten características entre sí. De esta manera, construiremos nuestros productos partiendo de la base compartida de características.

Para guiar la explicación, supongamos que somos una empresa de desarrollo de chatbots personalizados, y nos acaba de llegar una petición para crear los chatbots a varias cadenas de restauración. Acabamos de fijar el dominio, chatbots para hostelería, y ahora necesitamos identificar cuales son las características que podremos encontrar. Utilizando las técnicas de ingeniería de dominio anteriormente mencionadas, hemos aprendido que, todos los restaurantes tienen una carta o menú, y distintas formas de pedir, además de sus diferencias: hemos encontrado algunos restaurantes con baños adaptados a personas minusválidas, con parking, con terraza… Acabamos de identificar una serie de características, algunas comunes y otras específicas, y debemos responder una pregunta fundamental en la ingeniería de dominio. ¿Qué es una característica en mi línea de producto? En nuestro caso, una característica será la información que tendrá que tener nuestro chatbot. Si creamos un chatbot con la característica “parking”, el chatbot deberá tener información sobre las horas de apertura, cierre, capacidad, tiempo disponible, y todas aquellas otras preguntas que podamos plantearnos sobre el parking. De esta manera, crear un chatbot con nuestras distintas características implica cargar cierta información dentro del chatbot.

Ahora, podemos representar la variabilidad de nuestra línea de producto usando un modelo de información llamado modelo de características (feature models en inglés). La primera vez que se nombran los modelos de características fue por Kang et al en 1990, y estos modelos se usan para representar la variabilidad, junto a sus restricciones. En la Figura 2, podemos encontrar un ejemplo de modelo de característica para nuestro caso específico. Se han identificado características como: distintas formas de realizar el pedido, instalaciones y un menú común. Además, se imponen una serie de relaciones y restricciones entre características. En este artículo se encuentra una explicación más detallada de las relaciones y restricciones que podemos encontrar en un modelo de características.

Finalmente, con nuestro modelo de características, podemos realizar un proceso de configuración de la línea de producto, seleccionando qué características deseamos para nuestro producto, en nuestro caso, qué información queremos cargar dentro de nuestro chatbot. Este proceso culmina con la generación de una especificación, una lista de características marcadas por el usuario más todas las características obligatorias. Con esta especificación se procede a generar el producto deseado. En nuestro caso, se procederá a añadir los paquetes de información seleccionados dentro del chatbot.

Ámbitos de aplicación

La metodología SPL se destaca especialmente en situaciones donde existen múltiples productos con una base común y variaciones específicas, lo que permite maximizar la reutilización y la eficiencia en el desarrollo de software.

Un ejemplo ilustrativo de esta aplicación se encuentra en el último trabajo fin de máster dirigido por los investigadores David Benavides y Jordi Cabot, donde se conceptualiza una línea de producto software de chatbots. En este trabajo, se propone un enfoque sistemático para la generación inteligente de múltiples chatbots. El enfoque se centra en identificar información esencial compartida por todos los chatbots, como horarios, preguntas comunes o diferentes vías de contacto. Esta información se estructura en una base de conocimiento reutilizable, y a través de selecciones adecuadas, se carga en cada chatbot para personalizarlo según las necesidades específicas del negocio. Este enfoque sistemático permite la generación eficiente de bases de conocimiento para los chatbots, lo que resulta en una producción en masa de chatbots altamente personalizados. Para respaldar la implementación de esta metodología, se ha diseñado una herramienta que facilita la conceptualización y creación de las bases de conocimiento.

Un resumen del trabajo se presentará en la conferencia SISTEDES 2023está ya disponible aquí

Desafíos

A pesar de las ventajas significativas que ofrecen las SPL, su adopción y gestión también presentan algunos desafíos y problemas que las organizaciones deben abordar. Por ejemplo, el proceso de identificar las características comunes y las variaciones en el dominio del problema puede ser complejo, especialmente en proyectos de gran escala. La ingeniería de dominio requiere una comprensión profunda de las necesidades de los clientes y usuarios, así como una planificación cuidadosa para garantizar que todas las variantes sean adecuadamente gestionadas.

Además, la planificación de una línea de productos requiere una visión a largo plazo y una inversión inicial para identificar y desarrollar componentes reutilizables. Además, una vez establecida la SPL, se necesita un esfuerzo continuo para mantener y actualizar los componentes compartidos y las variantes a lo largo del tiempo. De esta forma, la adopción de este conjunto de técnicas no siempre es sencilla.

 Conclusiones

En resumen, las SPL representan una poderosa estrategia de desarrollo que busca optimizar la producción en masa de software al reutilizar componentes y compartir características comunes entre múltiples productos.  Sin embargo, el uso de SPL no está exento de desafíos. La complejidad en la ingeniería de dominio, la gestión de la variabilidad y la resistencia al cambio son solo algunos de los obstáculos a superar.  Para abordar estos desafíos, las organizaciones deben adoptar un enfoque cuidadoso y una cultura de colaboración y reutilización. La correcta selección de proyectos para formar parte de una línea de productos y una gestión efectiva de la trazabilidad y el cambio organizacional son esenciales para el éxito de la implementación de SPL.