Líneas de Productos de Software

La arquitectura de software es el resultado de un esfuerzo importante y su desarrollo puede representar una parte considerable del trabajo que se realiza en un proyecto de desarrollo. De lo anterior surge la pregunta, ¿habrá manera de aprovechar el esfuerzo que se hace respecto al desarrollo de la arquitectura de un sistema en el desarrollo de otros sistemas similares? Las líneas de productos de software buscan justamente lograr promover la reutilización sistemática de artefactos de los cuales la arquitectura es uno de los más importantes. Este enfoque busca tener distintos beneficios asociados a la reutilización como pueden ser la reducción del tiempo de desarrollo (pues ya no se tienen que desarrollar ciertas partes del sistema), y la mejora de la calidad (pues se incorporan partes que ya han sido verificadas previamente). En esta ocasión hablaremos al respecto de éste tema.

Reutilización

En el desarrollo de software, la reutilización se refiere a tomar uno o más artefactos realizados como parte de un desarrollo y utilizarlos nuevamente en el desarrollo de otro sistema. La reutilización no es un concepto nuevo y a lo largo de la historia del desarrollo de sistemas, han aparecido distintas técnicas que han facilitado de alguna manera la reutilización de artefactos de desarrollo de granularidad cada vez mayor, como lo muestra la figura 1:

Aún con las técnicas antes mencionadas, de manera general, la reutilización frecuentemente se realiza de manera oportunista, esto es que si durante el desarrollo los miembros del equipo de desarrollo ven la posibilidad de reutilizar algún artefacto entonces lo hacen, pero eso no ocurre de manera sistemática. Dada su naturaleza, la reutilización oportunista presenta beneficios muy variables, pues todo depende de que en un momento dado se identifiquen posibles artefactos que puedan ser reutilizados. A nivel de una organización, lo deseable es lograr un enfoque de reutilización sistemática con el fin de lograr diversos beneficios asociados con retomar artefactos previamente construidos en cada desarrollo nuevo que se realiza.

Líneas de productos

El concepto de líneas de productos busca justamente lograr un enfoque de reutilización sistemático dentro de una organización de desarrollo. Éste es un concepto que se originó, y que se usa frecuentemente, en industrias distintas al software. En la industria automotriz, por ejemplo, es común que un fabricante produzca distintas variantes de un vehículo (o productos) a partir de una base común que se reutiliza en todas estas variantes.

De acuerdo al SEI (Software Engineer Institute), una línea de productos de software se refiere a un conjunto de sistemas de software que comparten características y que son desarrollados a partir de un conjunto común de bienes núcleo (core assets). De la anterior definición es importante subrayar que los productos dentro de la línea de productos son los distintos sistemas y que los bienes núcleo son las partes reutilizables que permitirán desarrollar los productos. Los bienes núcleo son la base de la línea de productos e incluyen entre otros la arquitectura, componentes reutilizables, modelos de dominio, requerimientos, documentación, planes de prueba, etc. Un aspecto importante a considerar dentro de la línea de productos es que se debe establecer un alcance en donde se describe qué productos son parte de la línea.

Actividades del desarrollo de líneas de producto

También de acuerdo al SEI, el desarrollo de líneas de productos involucra tres actividades principales: el desarrollo de los bienes núcleo, el desarrollo de los productos y la administración, y estas actividades están íntimamente ligadas entre ellas, como se muestra en la figura 2:

A continuación se describen estas actividades en mayor detalle:

  • El desarrollo de bienes núcleo se refiere al establecimiento de las partes que serán reutilizadas. Cada uno de estos bienes debe ir acompañado de un proceso que explique la manera en que cada parte se usa al momento de incorporarla en un producto específico. Por otra parte, se establecen planes de producción que describen la manera en que los productos específicos son generados a partir de los bienes núcleo.
  • El desarrollo de productos cubre el objetivo último de la línea de producto: producir sistemas específicos dentro del alcance definido a partir de los bienes núcleo. Los insumos para esta actividad son los bienes núcleo, los procesos asociados a los bienes, los planes de producción y los requerimientos específicos a cada producto.
  • La administración juega un papel fundamental en la implantación de una línea de productos. La administración ocurre a un nivel técnico y organizacional. A nivel técnico, cubre tanto la supervisión del desarrollo de bienes núcleo como de productos específicos. A nivel organizacional orquesta el esfuerzo general de la línea de productos.

Arquitectura y líneas de producto

La arquitectura es un elemento clave dentro de la colección de bienes núcleo pues será compartida por los distintos productos de una línea particular. La arquitectura de una línea de productos es distinta a una arquitectura ‘típica’ pues para permitir la construcción de distintos productos por encima de ella, debe definirse una serie de puntos de variación que son necesarios para poder crear los distintos productos. En este tipo de arquitecturas, uno de los atributos de calidad más influyentes es entonces el que sea modificable.

Un ejemplo

Un ejemplo práctico de línea de productos puede observarse en la plataforma Eclipse que sirve de base al popular entorno de desarrollo (IDE) del mismo nombre (http://www.eclipse.org/pla- tform/). La plataforma Eclipse está basada en una arquitectura extensible a base de plug-ins y la plataforma establece una serie de puntos de extensión en los cuales se conectan dichos plug-ins. Los puntos de extensión que provee la plataforma representan los puntos de variación de la arquitectura. Los bienes núcleo son los distintos elementos que conforman a la plataforma Eclipse y son retomados para construir una gran variedad de productos específicos. Los productos específicos se construyen a partir de plug-ins que son conectados a la plataforma. Un aspecto interesante de Eclipse es que los plug-ins pueden, a su vez, definir puntos de extensión por lo cual un producto específico, conformado por la plataforma Eclipse y una serie de plug-ins, puede volverse a su vez un conjunto de bienes núcleo para una línea de productos más especializada. Un ejemplo de esto se puede observar en un producto como EclipseUML, una herramienta UML construida por encima de la plataforma Eclipse (http://www.ejb3.org/). De la línea de producto particular de EclipseUML se derivan dos productos específicos: el “Viewer” y el Editor. La parte administrativa de la línea de producto que establece la plataforma Eclipse se puede apreciar en la administración individual tanto del proyecto, que corresponde al desarrollo de la plataforma Eclipse, como la administración de los productos específicos que se producen por encima de la plataforma. La enorme variedad de aplicaciones sofisticadas construidas sobre la plataforma Eclipse que existen hoy en día sirven de testimonio del éxito de este enfoque.

En conclusión

En Ingeniería de Software frecuentemente se habla de reutilización y los avances tecnológicos de las últimas décadas indudablemente han logrado que hoy en día se reutilicen partes con un nivel de granularidad cada vez mayor. Lograr realizar una reutilización sistemática dentro de una organización requiere un enfoque específico y es ahí donde las líneas de productos pueden ser de mucha ayuda. La implantación de un esquema de línea de productos dentro de una organización requiere de un esfuerzo importante, sin embargo los beneficios que puede aportar pueden hacer que realmente valga la pena.

Un aspecto central de las líneas de productos es la arquitectura que soporta los distintos productos y ésta debe ser realizada tomando en cuenta las posibles variaciones que permitirán generar los productos específicos. Por último, es importante recalcar que al desarrollar una arquitectura para una línea de producto, es muy conveniente aplicar todas las actividades de desarrollo de arquitectura que hemos tratado en ediciones previas de ésta columna.

Referencias

  1. P. Clements y L. Northrop, “Software Product Lines: Practices and Patterns”, SEI Series in Software Engineering, 2002.

 

Bio

El Dr. Humberto Cervantes es profesor-investigador en la UAM Iztapalapa. Ha realizado investigación en temas relacionados con arquitectura de software desde el año 2000 y en años recientes se ha enfocado en el estudio y la aplicación de métodos que apoyen al desarrollo de arquitectura de software dentro de la industria Mexicana. www.humbertocervantes.net