Page 1

Arquitectura de Líneas de Producto Andrés Eduardo López Ramírez, Andrés Mauricio Sabogal Borrello, Juan David Giraldo Giraldo

Introducción En la actualidad, los sistemas de software son el pilar fundamental sobre el cual se sostienen gran cantidad de organizaciones modernas como: hospitales, aeropuertos, casas de bolsa, etc. Estos sistemas permiten administrar información que es utilizada como materia prima en las organizaciones. Muchos de los sistemas que se desarrollan actualmente son altamente complejos; el desarrollo de estos sistemas requiere de metodologías y estrategias que apoyen en su correcta implementación con el fin de resolver las necesidades del usuario final; Por ello la importancia de resaltar las llamadas “Línea de Producto”. Uno de los objetivos de la ingeniería de software en el desarrollo de cualquier sistema, es la reutilización de código o componentes de software, con el objetivo de reducir la carga de trabajo, el tiempo de desarrollo y los costos. Las líneas de producto de software se refiere a técnicas de ingeniería de software y administración de desarrollo de sistemas, para crear una colección similar de sistemas de software que comparten un núcleo de software común. Esta idea ya ha sido usada en la manufactura de productos (electrónicos, automóviles, mencionadas con anterioridad), los cuales se crean a partir de un conjunto de elementos base para formar parte de nuevos productos. Crear una línea de producto de software depende de una estrategia coordinada que involucra ingenieros de software, equipos técnicos, la estructura y políticas de la organización en cuestión. En resumen, las líneas de producto de software consiste en una familia de sistemas de software que tienen una funcionalidad común, y una funcionalidad variable, donde la funcionalidad común hace referencia en un contexto general y la funcionalidad variable es más específica de acuerdo a características especiales de cada uno. Presenta unas mejoras como: - Tiempo de entrega del producto. - Costos de ingeniería. - Calidad de productos. - Reducción de: tiempo, esfuerzos, defectos, costo. Un aspecto fundamental a resaltar en el desarrollo de software LPS es que las empresas que lo adopten deben tener en cuenta los siguientes aspectos: Conceptuales, Tecnológicos, Metodológicos, Organizativos, Gerenciales.


¿Qué es una Línea de Productos de Software? Una línea de productos de software es un portafolio de sistemas software similares producidos a partir de un conjunto compartido de activos software usando métodos comunes de producción. Consiste de una familia de sistemas de software que tienen una funcionalidad común y alguna funcionalidad variable.

Modelo Básico de una Línea de Productos de Software Entrada: Activos de Software Conjunto de partes de software que se configuran para producir los productos software.

Control: Modelos de Decisión Definen los aspectos variables y opcionales de los productos software. Cada producto de la línea es definido por un conjunto de decisiones.

Proceso de Producción Mecanismos para componer y configurar productos a partir de activos. Las decisiones se utilizan para determinar los activos necesarios y los puntos de variación de dichos activos.


Arquitecturas de Líneas de Productos de Software La arquitectura de una línea de productos es una arquitectura de software genérica que describe la estructura de toda la familia de productos y no solamente la de un producto en particular. Además, captura los aspectos comunes y variables de la familia de productos software. Una arquitectura de línea de productos esta compuesta de un conjunto de decisiones arquitectónicas, un conjunto de componentes reusables y una librería de componentes opcionales que corresponden a requisitos específicos de los clientes. Los diferentes componentes pueden ser ensamblados siguiendo una serie de reglas. En la línea de productos se deben considerar los atributos de calidad Modificabilidad y Configurabilidad, para permitir la variación o evoluciona través del tiempo, y considera variaciones en los productos.

Métodos de Diseño para Arquitecturas de Línea de Productos COPA (Component-Oriented Platform Architecting Method) El principal objetivo de este método es lograr el mejor ajuste entre negocio, arquitectura, proceso y organización. El objetivo específico del diseño de arquitectura es encontrar un balance entre los enfoques basados en componentes y centrados en la arquitectura. Las entradas para la fase de arquitectura de este método son hechos, expectativas de los stakeholders y arquitecturas existentes. El resultado de esta fase es producir una arquitectura ligera.

FAST (Family Oriented Abstraction, Specification and Translation process) Este método es aplicable en organizaciones donde se crean múltiples versiones de un producto que comparten atributos comunes significantes como comportamiento, interfaces o código. El objetivo principal de FAST es hacer que el proceso de ingeniería de software sea más eficiente reduciendo múltiples tarea y costos de producción. FAST define un proceso completo de ingeniería de líneas de productos con actividades y artefactos. Este proceso se divide en sub procesos: domain qualification, domain engineering y application engineering.

FORM (Feature Oriented Reuse Method) Extiende al método FODA (Feature Oriented Domain Analysis) a las fases de diseño e implementación de software, y define como el modelo de características puede ser usado para desarrollar arquitecturas de dominio y componentes reutilizables. El objetivo específico de FORM es aplicar los resultados del análisis de dominio a la ingeniería de componentes de dominio reutilizables y adaptables.


A nivel de dominio se crean el modelo de características, la arquitectura de referencia y los componentes reutilizables.

KobrA (Komponentenbasierte Anwendungsentwicklung) Se define como un enfoque basado en componentes para el desarrollo incremental de líneas de productos y una metodología para modelar arquitecturas. Esta diseñado para adaptarse a enfoques de desarrollo basados en sistemas independientes y en familias de productos. Además, puede ser visto como un método que soporta un enfoque Model Driven Architecture (MDA). Este método define un proceso completo de ingeniería de líneas de productos, incluyendo aspectos como implementación, despliegue, inspección y testing.

QADA (Quality driven Architecture Design and quality Analysis) Es un método para diseñar y evaluar la arquitectura de sistemas orientados a servicios. Los requisitos de calidad son la guía a la hora de elegir las estructuras de software. El diseño de la arquitectura es combinado con análisis de calidad para determinar si la arquitectura diseñada cumple los requisitos de calidad. QADA describe el diseño de la arquitectura en el proceso de desarrollo de software.

Evaluación de Arquitecturas de Líneas de Productos Es necesario realizar una evaluación de la arquitectura para asegurar que esta sea robusta para soportar los objetivos de calidad de la línea de productos y de los productos que serán construidos a partir de esta. La arquitectura contiene activos críticos que deben ser constantemente evaluados para confirmar que se adecuan según los requisitos. Además, la valoración puede determinar de forma temprana, si la arquitectura es innecesariamente compleja o ignora algunos requisitos importantes.

Evolución de la Arquitectura de Línea de Productos Cuando un nuevo conjunto de productos debe ser desarrollado, se debe evaluar la arquitectura para tomar decisiones para integrar dichos productos. En primer lugar, se pueden introducir nuevos requisitos directamente en los componentes. Otra forma es realizar los cambios en la arquitectura: ●

Dividir la arquitectura de la Línea de Productos Dividir la arquitectura en dos, usando la arquitectura existente como una plantilla para crear otra.


Herencia Usar un mecanismo de herencia para definir una sub línea de productos.

Extensión Extender la arquitectura con nuevos componentes correspondientes a requisitos específicos que no pueden ser adaptados fácilmente a la actual línea de productos.

Principios de Arquitectura de Líneas de Productos 1. Centrarse en simplificación, minimización y clarificación. 2. Adaptar la arquitectura a futuros clientes, necesidades, tecnológicas, competencia y metas de negocio. 3. Mantener una visión clara de la arquitectura de forma transversal a la organización. 4. Gestionar de forma proactiva los riesgos y oportunidades.

Guías Para Arquitecturas de Líneas de Productos ●

Generalizar las Interfaces de los Componentes Cuando se está diseñando la arquitectura, la definición de las interfaces debe ser general para que se pueda soportar la adición de nuevas implementaciones de componentes.

Separar el Comportamiento del Dominio y la Aplicación Se debe diferenciar el dominio y las funcionalidades de la aplicación durante la implementación.

Evitar Dividir la Línea de Productos Una línea de productos usualmente es definida para un dominio y no para tipos específicos de productos. Por lo tanto, se debe evitar dividir la línea de producto de acuerdo a tipos de productos. Mantener dos líneas de productos en paralelo es costoso e ineficiente.

Determinar y Explotar Funcionalidades Comunes de los Componentes Se debe gestionar una librería de funcionalidades compartidas entre diferentes implementaciones para cada dominio.

Ser Abierto a Reescribir Componentes e Implementaciones Modificar el código de componentes para cambiar su implementación es inadecuado, la mejor solución es reescribir el componente a partir del diseño.


Técnicas para Arquitecturas de Líneas de Productos Architecture Recovery Identifica las partes comunes y variables de los productos ayuda a definir la arquitectura de la línea de productos. Se requiere comparar las arquitecturas de diferentes productos usando Architecture Recovery. Este proceso extrae modelos arquitectónicos del código fuente para analizar las dependencias entre los componentes y documenta la arquitectura del software existente.

Architectural Design Model El diseño consiste de las siguientes actividades: ● ● ● ●

Business Case Analysis: Evalúa si la aplicación del modelo será económicamente importante. Scoping: Definir los limites (productos y funcionalidad) de la línea de productos. Product and Feature Planning: Proponer de forma proactiva posibles nuevos productos y funcionalidades para refinar el alcance. Design of the Product Line Architcture: Se divide en tres pasos ○ Functionality Based Architectural Design: Identifica y define las principales abstracciones de la línea de productos teniendo en cuenta las variabilidades. ○ Architectural Assessment: Evaluar la arquitectura de la línea de productos contra sus requisitos de calidad. ○ Architecture Transformation: Gestiona la evolución de la arquitectura soportando tres aspectos de transformación: variantes, opciones y conflictos.

Product Line Architecture Description Languages Los lenguajes de descripción de arquitecturas permiten describir formalmente las arquitecturas. Estos lenguajes proveen notaciones para representar estructuras arquitectónicas tales como componentes, conectores, sistemas y propiedades.


Técnicas Básicas de Variabilidad a Nivel de la Arquitectura Adaptation

En esta técnica se cuenta con una sola implementación disponible para el componente, pero es posible

Replacement

Existen muchas implementaciones para un componente. Todas son conformes con el contrato de la arquitectura. La implementación es escogida dependiendo del producto.

Extensión


La arquitectura debe proveer interfaces para permitir adicionar nuevos componentes.

Mapa conceptual

Opinión Grupal Las líneas de producto de software es una forma de desarrollar software enfocada en la reutilización de componentes. Es una alternativa a los procesos que se utilizan actualmente en las empresas, ya que estos se basan en la construcción de sistemas independientes. Aunque no hay evidencia del uso de líneas de producto en la industria actual del software, este tipo de enfoques permitirá a las empresas reducir esfuerzo y tiempo en la construcción de productos software. La adopción de este enfoque de desarrollo, implica la adopción de una serie de procesos y técnicas de ingeniería enfocados al análisis, diseño, implementación, verificación y despliegue de productos software construidos a partir de un conjunto de componentes reutilizables, que contienen funcionalidades comunes dependiendo de la familia de productos, y funcionalidades específicas dependiendo de las necesidades específicas de los clientes.


Conclusiones ●

Frecuentemente se habla de reutilización de software, para lograr esto se hace de importancia la implantación de líneas de producto dentro de las organizaciones aunque esto requiere de un esfuerzo importante, pero se podrán obtener beneficios de gran importancia que realmente valen la pena. Un punto importante en las líneas de producto es la arquitectura que soporta los distintos productos ya que esta debe tener en cuenta las posibles variaciones que permitirán generar productos específicos. La construcción de líneas de productos de software buscan un equilibrio entre costos y calidad de software, y para ello se debe tener en cuenta tres aspectos que son la organización, la metodología y la técnica. Se siguen presentando muchas problemáticas sin resolver para las fábricas de software que aún son temas de investigación y otras que pueden no tener solución.

Referencias ●

http://www.softwareproductlines.com/

http://www.ieee.org.ar/downloads/2006-montilva-productos.pdf

http://sistemas.uniandes.edu.co/~isis4715/dokuwiki/lib/exe/fetch.php?media=temas:arqu itectura_de_referencia.pdf

http://www.inf.ufpr.br/silvia/topicos/artigostrab10/artigo1-S1e2.pdf

http://mcyti.izt.uam.mx/archivos/Tesis/Generacion2005/ICR_MarcoNunez.pdf

Arquitectura de Líneas de Productos de Software  

Este documento explica brevemente algunos aspectos fundamentales de las líneas de productos de software.