Martes 11 Abril 2023
En la industria del software hay algunas tendencias que hacen que el panorama de la producción en esta industria vaya cambiando. Por una parte, la reutilización de componentes y artefactos, algo que se viene persiguiendo 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 hecho en otros proyectos, definiendo (micro)servicios, paquetes u otros artefactos. En segundo lugar, la variabilidad de los sistemas informáticos está pasando de una manera acelerada del hardware al software hasta el punto de llegar a virtualizar componentes hardware como sensores, actuadores o incluso redes. Un mismo producto (por ejemplo un coche) puede tener exactamente el mismo hardware y una diferencia grande de valor según el software que tiene configurado. Esto lleva de manera natural a la tercera tendencia y es que el número de puntos de variabilidad de los sistemas está creciendo por miles. Si pensamos en una parte de un sistema informático, por ejemplo, el kernel de Linux, hay reportes que sitúan entre 10.000 y 16.000 los posibles valores de configuración de esta parte de un sistema. Si esos puntos de configuración fueran solamente con valores booleanos, querría decir que tendríamos muchas más posibles configuraciones del kernel 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, la reutilización y la variabilidad en ingeniería de software, son las líneas de producto software (software product lines). La idea es relativamente simple, no tanto 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 denomina producción en masa (mass production). La idea era que se podía producir un mismo producto estandarizado de manera 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 un 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 inicio los relojes se producían de manera artesanal, luego 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 otra cosa 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 debe haber un cambio de enfoque a nivel organizacional, lo que es un reto y suele ser una barrera. Para ello hay que centrarse en un dominio o dominios de aplicación. Ya no produciríamos software de manera genérica para cualquier tipo 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 que está 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 lo tanto, tenemos un gran reto en la comunidad para dar a conocer los avances tecnológicos en este campo y seguir investigando.
Autor: David Benavides