Líneas de producto, nuevo paradigma de desarrollo de software

Hasta el momento, las empresas dedicadas a la elaboración de software han fabricado sus productos de forma individual y han desarrollado sistemas completos a partir de cero, pero eso no es rentable. La industrialización llega ahora al mundo del software, donde los avances en tecnología, metodología y herramientas de diseño permiten su reutilización. Las líneas de producto son la clave.

En los últimos años el software ha crecido de forma continua en tamaño y complejidad, convirtiéndose en un valor añadido de muchos productos, una ventaja competitiva. El desarrollo se puede ver claramente en empresas productoras de productos industriales como controles numéricos, electrodomésticos, etc. En estos productos el software ha pasado de ser un elemento periférico a ser el elemento más importante.

Sin embargo, en general, el desarrollo del software sigue siendo el mismo en estas empresas. La mayoría de las empresas desarrollan un único sistema por periodo. Además, se establece como objetivo principal la finalización temprana del producto, dejando de lado otros criterios como la calidad. Y al trabajar para que el producto termine a tiempo, no tienen en cuenta la necesidad de mantener el mismo sistema a la hora de desarrollar el sistema, por lo que los cambios posteriores que se producen en el sistema son difíciles. Y como si fuera poco, la mayoría de las empresas siguen utilizando metodologías antiguas.

Esto genera muchos problemas y quebraderos de cabeza en las empresas. El mayor problema puede ser la progresiva pérdida de competitividad. En las empresas que no han alterado el proceso de desarrollo del software, la labor de la mayoría de los empleados es el mantenimiento de sistemas desarrollados previamente, cuya fase de mantenimiento supone más del 80% del coste total de los sistemas, por lo que existen pocos recursos para el desarrollo de nuevos sistemas. Esto supone una pérdida de capacidad de innovación.

Como el software se está haciendo cada día más necesario, las empresas ven la necesidad de cambiar el proceso de desarrollo. Se trata de reducir el coste de cada producto software, mejorar la calidad del software, reducir el tiempo de comercialización y, sobre todo, reducir el coste de mantenimiento. ¿Y cómo conseguirlo? La reutilización y las líneas de producto son la vía.

Objetivo de siempre

La reutilización del software siempre ha sido uno de los objetivos de la Ingeniería del Software. A finales de la década de 1960 se empezaron a utilizar las subrutinas, mientras que en la década de los 70 se empezaron a utilizar los módulos y en la de 80 la programación orientada a objetos.

Sin embargo, la reutilización era oportunista, es decir, no planificada, realizada individualmente y de bajo nivel. En la década de los 90 surge la idea de desarrollo basado en componentes. Esta filosofía proponía la reutilización de unidades o componentes de mayor tamaño, dando un paso firme en su reutilización.

Los primeros indicios sobre las líneas de producto aparecieron a finales de la década de los 90 y el interés se ha disparado a partir del año 2000. Abordan una visión más amplia que otras filosofías, ya que trabajan en la reutilización planificada y estratégica, teniendo en cuenta sus características técnicas y criterios de negocio, buscando la industrialización del sector software. En otros sectores industriales, como el de automoción o la máquina herramienta, se avanzó mucho antes por esta vía, utilizando en la actualidad la economía de escala.

¿Y en software? ¿Por qué todavía no ha llegado la industrialización? Falta de tecnología, metodología y herramientas de diseño adecuadas. Ahora tenemos a mano: Los productos .NET de CORBA, J2EE y Microsoft son el ejemplo de las nuevas tecnologías y cada vez hay más metodología y herramientas de diseño.

¿Qué son las líneas de productos software?

Son sistemas software intensivos con unas características comunes que satisfacen las necesidades de una determinada área del mercado. Estos sistemas se desarrollan a partir de bases activas comunes siguiendo un proceso previamente establecido.

Un activo es un producto de trabajo que la organización utiliza y reutiliza. Se diseña para su reutilización, integra la parte común del dominio y permite la versatilidad, es decir, se adapta a diferentes situaciones. Por tanto, las bases activas constituyen el eje de la línea de producto. Arquitectura, componentes software reutilizables, modelos de dominio, documentos y casos de test son ejemplos de bases activas.

La clave del éxito de una línea de producto se basa en la gestión sistemática de los cambios planificados. Por tanto, es fundamental identificar, controlar y gestionar la variabilidad de la línea de producto, característica que separa a los miembros de la familia.

Una línea de producto debe estar dirigida a un dominio (área de conocimiento con terminología común). Y no todos los dominios son adecuados para la aplicación de las líneas de producto, es necesario que haya solicitud de aplicaciones similares. En el desarrollo de los productos de este dominio es imprescindible disponer de conocimientos y experiencia interna.

Las líneas de producto suponen un cambio en el ciclo de vida de los productos: desde la perspectiva de proyecto vamos a la vista de dominio. En la vista de dominio se pueden distinguir dos actividades: ingeniería de dominio e ingeniería de aplicaciones o desarrollo de productos.

En ingeniería de dominio, tras un exhaustivo análisis de productos, se desarrollan activos reutilizables. El objetivo es identificar la parte común y variable de los productos y crear la infraestructura o base necesaria para alcanzar el mayor grado de reutilización posible. Estos activos recogen toda la experiencia y conocimiento de las empresas sobre los productos. El principal activo es la arquitectura general de los productos, basada en la línea de producto. La arquitectura de una línea de producto abarca de forma global todos los productos.

Sin embargo, la ingeniería de aplicaciones tiene como objetivo crear aplicaciones, pero no empezando a cero, sino utilizando bases activas generadas en ingeniería de dominio.

A la hora de desarrollar los activos es beneficioso utilizar un enfoque de desarrollo basado en los componentes, es decir, crear sistemas basados en los componentes, desarrollar y almacenar dichos componentes.

Por otro lado, es imprescindible tener en cuenta otra actuación, la gestión. Para gestionar la línea de producto, tanto a nivel técnico como organizativo de la empresa, es necesario garantizar que el planteamiento de la línea de producto va por el camino correcto y con éxito. Asimismo, se deberá garantizar la adecuación de la línea de producto a las nuevas circunstancias.

Actividades de líneas de producto.

Para empresas de todo tipo y tamaño

La estrategia de las líneas de producto es aplicable a empresas de muy variado tipo y tamaño: Empresas de desarrollo de sistemas software, consultoras de software y departamentos de desarrollo de software interno.

Hasta ahora, la idea de las líneas de producto se vinculaba a las grandes empresas, que podían dedicar más recursos y esfuerzos al desarrollo de la línea de producto. No obstante, las pequeñas empresas también pueden aplicarlo y obtener beneficios económicos si se utilizan versiones ‘más ligeras’
de las prácticas utilizadas. Además, los cambios de estructura y rol necesarios para aplicar una línea de producto pueden ser más fáciles en las pequeñas empresas.

Por tanto, con la estrategia que ofrece la filosofía de las líneas de producto, las empresas dedicadas a la elaboración de software podrán realizar una reutilización sistemática de sus productos y obtener ventajas competitivas.

No se empezará a desarrollar un nuevo sistema desde cero, sino que lo desarrollarán utilizando bases activas ya existentes, lo que permitirá ahorrar tiempo. Aumentar la cuota de mercado, reducir costes, sistemas más fiables, satisfacción del cliente y menor tiempo de comercialización son las ventajas que ofrece esta metodología de desarrollo de software.

Inversión que merece

La puesta en marcha de una línea de producto requiere grandes inversiones y esfuerzos. Es necesario realizar un análisis coste-beneficio que contemple y controle los riesgos entre otros. Las líneas de producto requieren una inversión inicial, pero luego se obtienen beneficios al abaratar los productos.


Metodologías

Existen diferentes metodologías para el desarrollo de líneas de producto. Si se analizan las actividades a desarrollar en una línea de producto: ingeniería de dominio, ingeniería de aplicaciones, gestión y evolución, algunas metodologías ofrecen apoyo a todos los ámbitos, mientras que otras se limitan a un ámbito concreto. Entre las metodologías de apoyo a todas las actividades se encuentran: PuLSE (Product Line Software Engineering), Cobre, COPA (Component-Oriented Platform Architecting), FAST (Family-Oriented Abstraction, Specification and Translation). Por otra parte, FORM, SREB + FODA, etc. se limitan a ingeniería de dominio e ingeniería de aplicaciones, sin tener en cuenta la gestión y evolución. Existen metodologías que se limitan a actuaciones más concretas: FODA (Feature-Oriented Domain Analysis) es una metodología de análisis de dominios para el diseño arquitectónico de una línea de producto ADD (Attribute Driven Design) y FBAD (Functionality-Based Architectural Desing).


Reutilización: varias opciones

Para el desarrollo de productos software con características comunes, las organizaciones disponen de varias opciones de diferentes niveles de reutilización. Cada una de estas opciones supone una mayor inversión, pero también un mayor grado de reutilización.

• Producto a producto: es la visión de siempre. Consiste en desarrollar cada producto desde cero.

Infraestructura estandarizada: consiste en la estandarización de la infraestructura de productos (con sistema operativo y componentes comerciales habituales).

Plataforma: Los productos se desarrollan a partir de una plataforma de infraestructura estandarizada que incluye las funciones comunes de todos los productos.

• Línea de productos software: Además de la plataforma, el producto se basa en funciones comunes a la mayoría de los productos; las funciones específicas de uno o varios productos se desarrollan cuando el producto procede de dicha base.

• Base de producto configurable: Es desarrollar una
base para la creación de productos. Esta base se puede configurar para crear el producto. Se utiliza principalmente en dominios estables.

Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila