Una fábrica de software es una colección estructurada de activos de software relacionados que ayuda a producir aplicaciones de software o componentes de software de acuerdo con los requisitos específicos del usuario final definidos externamente a través de un proceso de ensamblaje. [1] Una fábrica de software aplica técnicas y principios de fabricación al desarrollo de software para imitar los beneficios de la fabricación tradicional. Las fábricas de software generalmente están involucradas con la creación de software subcontratada .
Descripción
En ingeniería de software y arquitectura de software empresarial , una fábrica de software es una línea de productos de software que configura herramientas, procesos y contenido extensos utilizando una plantilla basada en un esquema para automatizar el desarrollo y mantenimiento de variantes de un producto arquetípico mediante la adaptación, ensamblaje y configurar componentes basados en framework. [2]
Dado que la codificación requiere un ingeniero de software (o el paralelo en la fabricación tradicional, un artesano capacitado), se elimina del proceso en la capa de aplicación y el software se crea ensamblando componentes predefinidos en lugar de utilizar IDE tradicionales . La codificación tradicional se deja solo para crear nuevos componentes o servicios. Al igual que con la fabricación tradicional , la ingeniería se deja para la creación de los componentes y la recopilación de requisitos para el sistema. El resultado final de la fabricación en una fábrica de software es una aplicación compuesta .
Propósito
El desarrollo de aplicaciones basado en fábricas de software aborda el problema del desarrollo de aplicaciones tradicionales en el que las aplicaciones se desarrollan y entregan sin aprovechar el conocimiento adquirido y los activos producidos a partir del desarrollo de aplicaciones similares. Se utilizan muchos enfoques, como la capacitación, la documentación y los marcos, para abordar este problema; sin embargo, el uso de estos enfoques para aplicar consistentemente el valioso conocimiento previamente adquirido durante el desarrollo de múltiples aplicaciones puede ser un proceso ineficiente y propenso a errores.
Las fábricas de software abordan este problema codificando prácticas probadas para desarrollar un estilo específico de aplicación dentro de un paquete de orientación integrada que es fácil de adoptar para los equipos de proyecto. El desarrollo de aplicaciones utilizando una fábrica de software adecuada puede proporcionar muchos beneficios, como una mayor productividad, calidad y capacidad de evolución. [1]
Componentes
Las fábricas de software son únicas y, por lo tanto, contienen un conjunto único de activos diseñados para ayudar a construir un tipo específico de aplicación. En general, la mayoría de las fábricas de software contienen activos interrelacionados de los siguientes tipos:
- Esquema de fábrica: documento que categoriza y resume los activos utilizados para construir y mantener un sistema (como documentos XML, modelos, etc.) de manera ordenada y define las relaciones entre ellos. [2]
- Implementación de referencia: proporciona un ejemplo de un producto terminado realista que la fábrica de software ayuda a los desarrolladores a construir.
- Patrones y orientación de la arquitectura: ayude a explicar las opciones de diseño de aplicaciones y la motivación para esas opciones.
- Temas de procedimientos : proporcione procedimientos e instrucciones para completar las tareas.
- Recetas: Automatice los procedimientos en los temas de procedimientos, ya sea en su totalidad o en pasos específicos. Pueden ayudar a los desarrolladores a completar tareas rutinarias con una entrada mínima.
- Plantillas: elementos de aplicación prefabricados con marcadores de posición para argumentos. Se pueden utilizar para crear elementos de proyecto iniciales.
- Diseñadores: proporcionan información que los desarrolladores pueden utilizar para modelar aplicaciones en un nivel superior de abstracción.
- Código reutilizable: componentes que implementan funciones o mecanismos comunes. La integración de código reutilizable en una fábrica de software reduce los requisitos de código escrito manualmente y fomenta la reutilización en todas las aplicaciones. [1]
Desarrollo de productos
La construcción de un producto utilizando una fábrica de software implica las siguientes actividades:
- Análisis de problemas: determina si el producto está dentro del alcance de una fábrica de software. El ajuste determina si todo o parte del producto se construye con la fábrica de software.
- Especificación del producto: define los requisitos del producto al describir las diferencias con los requisitos de la línea de productos mediante una variedad de mecanismos de especificación del producto.
- Diseño de producto: asigna las diferencias en los requisitos a las diferencias en la arquitectura de la línea de productos y el proceso de desarrollo para producir un proceso personalizado.
- Implementación del producto: se puede utilizar una variedad de mecanismos para desarrollar la implementación dependiendo del alcance de las diferencias.
- Implementación del producto: Implica la creación o reutilización de restricciones de implementación predeterminadas y la configuración de los recursos necesarios para instalar los ejecutables que se implementan.
- Pruebas de productos: implica la creación o reutilización de activos de prueba (como casos de prueba, conjuntos de datos y scripts) y la aplicación de herramientas de medición e instrumentación. [2]
Beneficios
El desarrollo de aplicaciones utilizando una fábrica de software puede proporcionar muchos beneficios en comparación con los enfoques de desarrollo de software convencionales . Estos incluyen los siguientes:
- Coherencia: las fábricas de software se pueden utilizar para crear varias instancias de una línea de productos de software (un conjunto de aplicaciones que comparten características y arquitectura similares), lo que facilita la consecución de la coherencia. Esto simplifica la gobernanza y también reduce los costes de formación y mantenimiento.
- Calidad: el uso de una fábrica de software facilita que los desarrolladores aprendan e implementen prácticas comprobadas. Debido a la integración de código reutilizable, los desarrolladores pueden dedicar más tiempo a trabajar en funciones que son únicas para cada aplicación, lo que reduce la probabilidad de fallas de diseño y defectos de código. Las aplicaciones desarrolladas con una fábrica de software también se pueden verificar antes de la implementación, lo que garantiza que se siguieron las mejores prácticas específicas de la fábrica durante el desarrollo.
- Productividad: muchas actividades de desarrollo de aplicaciones se pueden optimizar y automatizar, como la reutilización de activos de software y la generación de código a partir de abstracciones de los elementos y mecanismos de la aplicación. [1]
Estos beneficios pueden aportar valor a varios equipos diferentes de las siguientes formas:
Valor para el negocio
Las tareas comerciales se pueden simplificar, lo que puede aumentar significativamente la productividad del usuario. Esto se logra mediante el uso de interfaces de usuario comunes y consistentes que reducen la necesidad de capacitación del usuario final. La implementación sencilla de funcionalidades nuevas y actualizadas e interfaces de usuario flexibles también permite a los usuarios finales realizar tareas de una manera que sigue el flujo de trabajo empresarial . Las mejoras en la calidad de los datos reducen la necesidad de intercambio de datos entre las partes de la aplicación a través de ALT + TAB y las técnicas de copiar y pegar. [3]
Valor para los arquitectos
Los arquitectos pueden utilizar las fábricas de software para diseñar aplicaciones y sistemas con mejor calidad y consistencia. Esto se logra mediante la capacidad de crear una implementación parcial de una solución que incluye solo los mecanismos y elementos compartidos más críticos. Conocida como la arquitectura de referencia, este tipo de implementación puede abordar los desafíos de diseño y desarrollo, exponer las decisiones de arquitectura y mitigar los riesgos en las primeras etapas del ciclo de desarrollo. Las fábricas de software también permiten la capacidad de crear una forma consistente y predecible de desarrollar, empaquetar, implementar y actualizar componentes comerciales para hacer cumplir los estándares arquitectónicos independientes de la lógica comercial. [3]
Valor para desarrolladores
Los desarrolladores pueden utilizar las fábricas de software para aumentar la productividad y reducir el tiempo de puesta en marcha. Esto se logra mediante la creación de un punto de partida de alta calidad (línea de base) para aplicaciones que incluye código y patrones. Esto permite que los proyectos comiencen con un mayor nivel de madurez que las aplicaciones desarrolladas tradicionalmente. Los activos reutilizables, la guía y los ejemplos ayudan a abordar escenarios y desafíos comunes, y la automatización de tareas comunes permite a los desarrolladores aplicar fácilmente la guía de manera consistente. Las fábricas de software proporcionan una capa de abstracción que oculta la complejidad de la aplicación y separa las preocupaciones, lo que permite a los desarrolladores centrarse en diferentes áreas como la lógica empresarial, la interfaz de usuario (UI) o los servicios de aplicaciones sin un conocimiento profundo de la infraestructura o los servicios básicos. La abstracción de las tareas comunes del desarrollador y una mayor reutilización del código de infraestructura pueden ayudar a impulsar la productividad y la capacidad de mantenimiento. [3]
Valor para las operaciones
Las aplicaciones creadas con fábricas de software dan como resultado una consolidación de los esfuerzos operativos. Esto proporciona una implementación más fácil de elementos y módulos comerciales comunes, lo que resulta en una administración de configuración consistente en un conjunto de aplicaciones. Las aplicaciones se pueden administrar de forma centralizada con una arquitectura conectable que permite a los equipos de operaciones controlar los servicios básicos. [3]
Otros enfoques
Hay varios enfoques que representan puntos de vista contrastantes sobre los conceptos de la fábrica de software, que van desde iniciativas orientadas a herramientas hasta iniciativas orientadas a procesos. Los siguientes enfoques cubren iniciativas japonesas, europeas y norteamericanas. [4]
Organización de software industrializado (Japón)
Bajo este enfoque, el software producido en la fábrica de software se utiliza principalmente para sistemas de control, reactores nucleares, turbinas, etc. Los principales objetivos de este enfoque son la calidad emparejada con la productividad, asegurando que el aumento de costos no debilite la competitividad. También existe el objetivo adicional de crear un entorno en el que el diseño, la programación, las pruebas, la instalación y el mantenimiento se puedan realizar de manera unificada.
La clave para mejorar la calidad y la productividad es la reutilización del software. Los rasgos dominantes del diseño organizacional incluyen un esfuerzo decidido para hacer que el trabajo operativo sea una rutina, simple y repetitiva y para estandarizar los procesos de trabajo.
Un representante de este enfoque sería el concepto de fábrica de software de Toshiba, que denota la división y los procedimientos de software de la empresa como estaban en 1981 y 1987, respectivamente.
Fábrica de software genérico (Europa)
Este enfoque fue financiado por el programa Eureka y llamado Eureka Software Factory. Los participantes en este proyecto son grandes empresas europeas, fabricantes de ordenadores, casas de software, institutos de investigación y universidades. El objetivo de este enfoque es proporcionar la tecnología, los estándares, el apoyo organizativo y otras infraestructuras necesarias para que las fábricas de software se construyan y adapten a partir de componentes comercializados por proveedores independientes.
El objetivo de este enfoque es producir una arquitectura y un marco para entornos de desarrollo integrados . La fábrica de software genérico desarrolla componentes y entornos de producción que forman parte de las fábricas de software junto con estándares y orientación para los componentes de software.
Fábrica de componentes basada en la experiencia (América del Norte)
La fábrica de componentes basada en la experiencia se desarrolla en el Laboratorio de Ingeniería de Software en el Centro de Vuelo Espacial Goddard de la NASA . Los objetivos de este enfoque son "comprender el proceso de software en un entorno de producción, determinar el impacto de las tecnologías disponibles e infundir métodos identificados / refinados en el proceso de desarrollo". El enfoque ha sido experimentar con nuevas tecnologías en un entorno de producción, extraer y aplicar experiencias y datos de experimentos y medir el impacto con respecto al costo, la confiabilidad y la calidad.
Este enfoque pone un gran énfasis en la mejora continua mediante la comprensión de la relación entre ciertas características del proceso y las cualidades del producto. La fábrica de software se utiliza para recopilar datos sobre fortalezas y debilidades para establecer líneas de base para mejoras y recopilar experiencias que se reutilizarán en nuevos proyectos.
Organización de software madura (América del Norte)
Definido por el modelo de madurez de capacidad , este enfoque tenía como objetivo crear un marco para lograr un proceso de desarrollo de software predecible, confiable y auto-mejorable que produzca software de alta calidad. La estrategia consiste en mejoras escalonadas en la organización del software, definiendo qué procesos son clave en el desarrollo. El proceso de software y la calidad del producto de software son predecibles porque se mantienen dentro de límites mensurables.
Historia
- La primera empresa en adoptar este término fue Hitachi en 1969 con su Hitachi Software Works. Posteriormente, otras empresas como System Development Corporation en 1975, [5]
- NEC , Toshiba y Fujitsu en 1976 y 1977 siguieron el mismo enfoque organizativo. [6] [7] [4]
Cusumano [8] sugiere que hay seis fases para las fábricas de software:
- Estructura básica de organización y gestión (mediados de la década de 1960 hasta principios de la de 1970)
- Adaptación y estandarización de la tecnología (principios de los setenta hasta principios de los ochenta)
- Mecanización y soporte de procesos (finales de la década de 1970)
- Refinamiento y extensión de procesos (principios de la década de 1980)
- Automatización integrada y flexible (mediados de la década de 1980)
- Mejora incremental de producto / variedad (finales de la década de 1980)
Ver también
Referencias
- ^ a b c d "Fábricas de software" . MSDN.
- ^ a b c Greenfield, Jack; Corto, Keith; Cook, Steve; Kent, Stuart (2004). Fábricas de software: ensamblaje de aplicaciones con patrones, modelos, marcos y herramientas . ISBN 0-471-20284-3.
- ^ a b c d "Fábricas de software: escenarios y beneficios" . MSDN.
- ^ a b Aaen, Ivan; Bøttcher, Peter; Mathiassen, Lars (1997). "La fábrica de software: contribuciones e ilusiones" (PDF) . Actas del Vigésimo Seminario de Investigación en Sistemas de Información . Escandinavia, Oslo.
- ^ Bratman, H .; Tribunal, T. (1975). "La Fábrica de Software". Computadora . 8 (5): 28–37. doi : 10.1109 / cm . 1975.218953 . S2CID 537648 .
- ^ Cusumano, Michael A. (marzo de 1989). "La fábrica de software: una interpretación histórica". Software IEEE . 6 (2): 23–30. doi : 10.1109 / ms.1989.1430446 . S2CID 18982313 .
- ^ Griss, ML (1993). "Reutilización de software: de la biblioteca a la fábrica". Revista de sistemas de IBM . 32 (4): 548–566. CiteSeerX 10.1.1.88.2855 . doi : 10.1147 / sj.324.0548 .
- ^ Cusumano, Michael A. (1991). "Conceptos y prácticas de fábrica en el desarrollo de software". Anales de la historia de la informática . 13 (1): 3–32. doi : 10.1109 / mahc.1991.10004 . S2CID 7733552 .
enlaces externos
- Harvard Business Review Wipro Technologies: el modelo de fábrica
- La subcontratación sin deslocalización es el objetivo de la 'fábrica de software' de PJ Connolly