CAPÍTULO 2. LITERATURA PREVIA
2.3 Fábricas de Software
Además del desarrollo basado en componentes existen modelos que incorporan además otros elementos de desarrollo. Ejemplo de ello es el modelo de fábricas de software el cual incluye características de los modelos mencionados y algunas otras técnicas. Dicho modelo se describe a continuación.
2.3.1 Definición de Fábricas de Software.
Una Fábrica de Software se puede definir como una línea de producción, arquitectura o esquema de software que permite el desarrollo en forma masiva de software con características similares, la cual genera herramientas para definir una familia de productos. Esto se realiza por medio del uso de plantillas que son utilizadas para crear productos a la medida y específicos a un dominio de aplicación (Cantone, 1992; De Baud y Schmid, 1999; Greenfield y Short, 2005).
Por otra parte, de acuerdo con Li, Li y Li (2001), una fábrica de software involucra: la integración de sistemas de administración de la calidad orientados a procesos, infraestructura y organización acorde para la producción en línea, procesos organizacionales y técnicas de desarrollo. De acuerdo con Cantone (1992) dichas técnicas incluyen: producción de “partes de software” organizadas por medio de repositorios, arquitecturas modulares, integración de métodos heterogéneos, y herramientas para su adecuada configuración y reconfiguración.
Además, una fábrica de Software captura sistemáticamente el conocimiento de cómo producir miembros de una familia de productos y lo transforma en patrones, frameworks, modelos y herramientas, aplicándolos de tal forma que se puede automatizar el proceso de desarrollo de miembros de dicha familia reduciendo costos y tiempo para comercializarlos (Cantone, 1992; Greenfield y Short, 2003).
Para efectos de este estudio se considerará como fábrica de software a la capacidad de desarrollar líneas de producción de software, utilizando técnicas que permitan derivar productos terminados a partir de familias de productos, que tengan capacidad de reutilizar código y además utilicen sistemas de administración de calidad que permitan capturar la experiencia obtenida en cada desarrollo para su uso posterior.
2.3.2 Elementos del desarrollo de aplicaciones en una fábrica de software
De acuerdo con Greenfield y Short (2005) se necesitan elementos o estructuras para aplicar el modelo de fábricas de software: esquemas y plantillas de software y un ambiente de desarrollo interactivo.
Esquemas de Software o Arquitecturas de Infraestructura reutilizable.
Contienen la definición de una familia de productos y los recursos que necesita para la creación de más de un producto de software con características similares. Abarca requerimientos ejecutables, código, pruebas, y artefactos de despliegue. En general, especifica ampliamente las características de una familia de productos de software. Un esquema de software tiene partes variables que se modifican para adecuarlas a las características del producto a desarrollar y otras fijas que conforman la definición de la familia de productos. Por otro lado, De Baud y Schmid (1999) las llaman arquitecturas de infraestructura reutilizable y conforman la base para construir líneas de producción de software.
Plantillas de Software. Se obtienen al empaquetar los lenguajes de dominio específico, los patrones, frameworks y herramientas descritas por un esquema de software para ponerlos a la disposición de un desarrollador de software para la creación de un producto específico. Estas plantillas son cargadas en un ambiente de desarrollo extensible para desarrollar y modificar fácilmente las características del producto generado a partir de ellas (Greenfield y Short, 2005).
Ambiente de desarrollo Interactivo. Es una herramienta por medio de la cual es posible cargar una plantilla de software y de esta manera crear productos a la medida (Greenfield y Short, 2005). La cual incluye la integración de herramientas y métodos heterogéneos con este propósito (Cantone, 1992).
En conjunto estos elementos permiten el desarrollo de aplicaciones específicas dentro de un dominio y conforman un producto terminado, tal como se muestra en la figura 2.2.
Fig. 2.2. Desarrollo de productos a la medida en fábricas de software
Fuente: Adaptado de Cantone, 1992; De Baud y Schmid, 1999; y Greenfield y Short, 2005.
2.3.3 Técnicas empleadas en el Modelo de Fábricas de Software
De acuerdo con Greenfield (2004) las fábricas de software incorporan las siguientes técnicas de desarrollo de software:
• Reuso sistemático. Permiten crear familias de productos de software por medio de Integradores de Sistemas, los cuales transportan aplicaciones a otros clientes o utilizan aplicaciones existentes para adecuarlas a requisitos o dominios específicos (Arquitectura modular).
Esquemas de Software (Características generales de una familia de productos
de software)
Ambiente de Desarrollo Extensible
(Medio por medio del cual se cargan las Plantillas de
Software) Plantillas de Software (Características que definen
un producto de software específico) Producto de Software a la Medida Desarrollo de Productos en Fábricas de Software
• Producción en Línea. Capturan la forma en que se crean productos de software en componentes reutilizables y de esta manera se acelera la siguiente producción de aplicaciones con características similares.
• Desarrollo conducido por Modelos (MDD). Aumentan el grado de abstracción de las herramientas para facilitar el trabajo en dominios específicos al documentar el proceso de desarrollo, e inclusive automatizarlo.
• Lenguajes de dominio específico. Para los propósitos del MDD no es de utilidad utilizar lenguajes de propósito general. Un Lenguaje de Dominio Específico (DSL) es la opción adecuada para este esquema de desarrollo. Un DSL tiene que ser de fácil comprensión por una persona que domine el área del lenguaje, debe utilizar conceptos utilizados dentro del dominio para el que fue creado y utilizar nombres que sean fáciles de identificar por éstas personas (notaciones de uso sencillo y reglas propias del dominio para evitar ambigüedades).
• Generación de Código Incremental. Utiliza pequeños elementos de abstracción para producir pequeñas cantidades de código y más acordes con la plataforma. Pueden crearse armazones que son completados con pequeñas cantidades de código por medio de herramientas como lenguajes visuales, o bien, pueden usarse varios DSL para transformar gradualmente el código y refinarlo hasta adoptarlo a la plataforma.
• Mecanismos de integración de componentes.
a) Composición en tiempo de diseño (codificación + framework = aplicación)
b) Composición en tiempo de Ejecución (permite sustituir objetos en el momento de ejecución de la aplicación o cambiar valores) c) Composición en tiempo de compilación.
2.3.4 Ciclo de Vida de desarrollo en Fábricas de Software.
De acuerdo con Greenfield (2004), las etapas de desarrollo de productos en fábricas de software son las siguientes:
• Análisis del problema. Se determina si el producto está dentro del alcance de la fábrica de software o si debe hacerse otro esquema y otra plantilla, o bien adquirir estas a otro desarrollador.
• Especificación del producto. Se definen las diferencias que existen entre las características del producto con la línea de producción.
• Mapeo del diseño del producto. Se crea una arquitectura y un proceso de desarrollo a la medida del producto.
• Implementación del producto. Se adaptan los componentes o los armazones del producto con pruebas de componentes y de ejecución.
• Despliegue del producto. Se crean y reutilizan condiciones, configuraciones y componentes ejecutables que sean requeridos para la ejecución del producto.
• Prueba. Crear o reutilizar técnicas de prueba, instrumentación y herramientas de medición.
Estas etapas de desarrollo involucran (Cantone, 1992):
• Almacenar componentes genéricos y adaptarlos en tiempo de producción a componentes personalizados según las necesidades.
• Compartir partes del proceso que son comunes en varias etapas.
• Diseñar la arquitectura del dominio que será compartida por cada aplicación dentro del mismo dominio que se vaya construyendo.
2.3.5 Visión a futuro de las fábricas de Software
De acuerdo con Greenfield y Short (2003) el desarrollo por medio de fábricas de software tendrá impactos en el mercado de desarrollo entre los que se pueden mencionar:
• Se disminuye el desarrollo y se incrementa el ensamblaje del software.
• Se crean cadenas de suministro para el software y estándares de arquitecturas y herramientas de desarrollo.
• Relaciones más estrechas entre proveedores y consumidores para mejorar el servicio.
• Creación de herramientas para el desarrollo en dominios específicos (para desarrollo de aplicaciones y de otras herramientas).
• Desarrollo en masa de aplicaciones a la medida.
• Desarrollo de nuevas habilidades para el ensamblaje y no para escribir código.