Articulo de referencia

Fábrica de software

Una fábrica de software es una colección estructurada de activos de software relacionados que facilita la producción de aplicaciones o componentes de software según los requisit...

Una fábrica de software es una colección estructurada de activos de software relacionados que facilita la producción de aplicaciones o componentes de software según los requisitos específicos del usuario final, definidos externamente, mediante un proceso de ensamblaje. [ 1 ] Una fábrica de software aplica técnicas y principios de fabricación al desarrollo de software para imitar las ventajas de la fabricación tradicional. Generalmente, las fábricas de software participan en 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 extensas herramientas, procesos y contenido utilizando una plantilla basada en un esquema para automatizar el desarrollo y el mantenimiento de variantes de un producto arquetípico mediante la adaptación, el ensamblaje y la configuración de componentes basados ​​en marcos de trabajo. [ 2 ]

Dado que la codificación requiere un ingeniero de software (o, en el caso de la fabricación tradicional, un artesano cualificado), se elimina del proceso en la capa de aplicación, y el software se crea mediante el ensamblaje de componentes predefinidos en lugar de utilizar entornos de desarrollo integrados (IDE) tradicionales. La codificación tradicional se reserva únicamente para la creación de nuevos componentes o servicios. Al igual que en la fabricación tradicional , la ingeniería se limita a 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 .

Objetivo

El desarrollo de aplicaciones basado en fábricas de software aborda el problema del desarrollo de aplicaciones tradicional, donde estas se desarrollan y entregan sin aprovechar el conocimiento adquirido ni los recursos generados al desarrollar aplicaciones similares. Se utilizan diversos enfoques, como la capacitación, la documentación y los marcos de trabajo, para solucionar este problema; sin embargo, aplicar de forma consistente el valioso conocimiento previamente adquirido durante el desarrollo de múltiples aplicaciones puede resultar 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 guías integradas que los equipos de proyecto pueden adoptar fácilmente. El desarrollo de aplicaciones mediante 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 recursos 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 recursos interrelacionados de los siguientes tipos:

  • Esquema de fábrica: Un 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 final realista que la fábrica de software ayuda a los desarrolladores a crear.
  • Guía y patrones de arquitectura : Ayudan a explicar las decisiones de diseño de la aplicación y la motivación de dichas decisiones.
  • Temas prácticos: Proporcionar procedimientos e instrucciones para completar las tareas.
  • Recetas: Automatice los procedimientos descritos en los tutoriales, ya sea por completo o en pasos específicos. Pueden ayudar a los desarrolladores a completar tareas rutinarias con una mínima intervención.
  • Plantillas : Elementos de aplicación prediseñados con marcadores de posición para argumentos. Se pueden usar para crear elementos iniciales del proyecto.
  • Diseñadores: Proporcionar información que los desarrolladores puedan utilizar para modelar aplicaciones con un nivel de abstracción superior.
  • Código reutilizable : Componentes que implementan funcionalidades 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 entre aplicaciones. [ 1 ]

Desarrollo de productos

La creación de un producto mediante una fábrica de software implica las siguientes actividades:

  • Análisis del problema : Determina si el producto se encuentra dentro del alcance de una fábrica de software. La idoneidad determina si el producto se desarrolla total o parcialmente con la fábrica de software.
  • Especificación del producto : Define los requisitos del producto al describir las diferencias con respecto a los requisitos de la línea de productos, utilizando diversos mecanismos de especificación del producto.
  • Diseño de producto : Relaciona las diferencias en los requisitos con 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 grado de diferencias.
  • Despliegue del producto : Implica crear o reutilizar restricciones de despliegue predeterminadas y configurar los recursos necesarios para instalar los archivos ejecutables que se van a desplegar.
  • Pruebas de producto : Implican la creación o reutilización de recursos de prueba (como casos de prueba , conjuntos de datos y scripts) y la aplicación de herramientas de instrumentación y medición. [ 2 ]

Beneficios

El desarrollo de aplicaciones mediante una fábrica de software puede ofrecer muchas ventajas en comparación con los enfoques de desarrollo de software convencionales . Estas incluyen las siguientes:

  • Consistencia: Las fábricas de software permiten crear múltiples instancias de una línea de productos de software (un conjunto de aplicaciones con características y arquitectura similares), lo que facilita lograr la consistencia. Esto simplifica la gobernanza y reduce los costos de capacitación y mantenimiento.
  • Calidad: El uso de una fábrica de software facilita a los desarrolladores el aprendizaje y la implementación de prácticas probadas. Gracias a la integración de código reutilizable, los desarrolladores pueden dedicar más tiempo a las funcionalidades específicas de cada aplicación, lo que reduce la probabilidad de fallos de diseño y defectos de código. Las aplicaciones desarrolladas con una fábrica de software también se pueden verificar antes de su implementación, lo que garantiza que se hayan seguido las mejores prácticas específicas de la fábrica durante el desarrollo.
  • Productividad: Muchas actividades de desarrollo de aplicaciones pueden optimizarse y automatizarse, 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 maneras:

Valor para las empresas

Las tareas empresariales 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 fácil implementación de funcionalidades nuevas y actualizadas, junto con interfaces de usuario flexibles, también permite a los usuarios finales realizar tareas de una manera que se ajuste al flujo de trabajo empresarial . Las mejoras en la calidad de los datos reducen la necesidad de intercambiar datos entre las partes de la aplicación mediante las técnicas ALT+TAB y copiar y pegar. [ 3 ]

Valor para los arquitectos

Las fábricas de software pueden ser utilizadas por los arquitectos para diseñar aplicaciones y sistemas con mayor calidad y consistencia. Esto se logra mediante la capacidad de crear una implementación parcial de una solución que incluye solo los mecanismos más críticos y los elementos compartidos. Conocida como arquitectura base, este tipo de implementación puede abordar los desafíos de diseño y desarrollo, exponer las decisiones arquitectónicas y mitigar los riesgos en las primeras etapas del ciclo de desarrollo. Las fábricas de software también permiten crear una forma consistente y predecible de desarrollar, empaquetar, implementar y actualizar componentes de negocio para aplicar estándares arquitectónicos independientemente de la lógica de negocio. [ 3 ]

Valor para los desarrolladores

Los desarrolladores pueden usar 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 (línea base) de alta calidad para las 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 recursos 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 responsabilidades, lo que permite a los desarrolladores centrarse en diferentes áreas, como la lógica de negocio, la interfaz de usuario (UI) o los servicios de la aplicación, sin un conocimiento profundo de la infraestructura o los servicios de la línea base. La abstracción de las tareas comunes de los desarrolladores y la mayor reutilización del código de infraestructura pueden ayudar a impulsar la productividad y la mantenibilidad. [ 3 ]

Valor para las operaciones

Las aplicaciones desarrolladas con fábricas de software permiten consolidar los esfuerzos operativos. Esto facilita la implementación de elementos y módulos empresariales comunes, lo que resulta en una gestión de configuración coherente en todo el conjunto de aplicaciones. Las aplicaciones se pueden gestionar de forma centralizada con una arquitectura modular que permite a los equipos de operaciones controlar los servicios básicos. [ 3 ]

Otros enfoques

Existen diversos enfoques que representan visiones contrastantes sobre los conceptos de fábrica de software, desde iniciativas orientadas a herramientas hasta iniciativas orientadas a procesos. Los siguientes enfoques abarcan iniciativas japonesas, europeas y norteamericanas. [ 4 ]

Organización de software industrializada (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 objetivos principales de este enfoque son la calidad combinada con la productividad, asegurando que el aumento de costos no perjudique la competitividad. Además, se busca crear un entorno en el que el diseño, la programación, las pruebas, la instalación y el mantenimiento se realicen de manera unificada.

La clave para mejorar la calidad y la productividad reside en la reutilización del software. Entre los rasgos predominantes del diseño organizacional se incluye un esfuerzo decidido por hacer que el trabajo operativo sea rutinario, simple y repetitivo, así como por estandarizar los procesos laborales.

Un ejemplo representativo de este enfoque sería el concepto de fábrica de software de Toshiba, que describe la división de software de la empresa y sus procedimientos tal como eran en 1981 y 1987, respectivamente.

Fábrica de software genérico (Europa)

Este enfoque, financiado por el programa Eureka, se denominó Fábrica de Software Eureka. En este proyecto participan grandes empresas europeas, fabricantes de ordenadores, empresas de software, institutos de investigación y universidades. El objetivo es proporcionar la tecnología, los estándares, el apoyo organizativo y demás infraestructuras necesarias para la creación y adaptación de fábricas de software a partir de componentes comercializados por proveedores independientes.

El objetivo de este enfoque es crear una arquitectura y un marco de trabajo para entornos de desarrollo integrados . La fábrica de software genérica desarrolla componentes y entornos de producción que forman parte de las fábricas de software, junto con estándares y directrices para los componentes de software.

Fábrica de componentes basada en la experiencia (Norteamérica)

La fábrica de componentes basada en la experiencia se desarrolla en el Laboratorio de Ingeniería de Software del 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 incorporar los métodos identificados y perfeccionados al proceso de desarrollo. El enfoque ha consistido en experimentar con nuevas tecnologías en un entorno de producción, extraer y aplicar experiencias y datos de los experimentos, y medir el impacto en términos de costo, confiabilidad y 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 la calidad del producto. La fábrica de software se utiliza para recopilar datos sobre fortalezas y debilidades, establecer puntos de referencia para las mejoras y obtener experiencias que se puedan reutilizar en nuevos proyectos.

Organización de software consolidada (Norteamérica)

Definido por el Modelo de Madurez de Capacidades , este enfoque busca 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 graduales 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 medibles.

Historia

Cusumano [ 8 ] sugiere que existen seis fases para las fábricas de software:

  • Estructura básica de organización y gestión (mediados de la década de 1960 a principios de la década de 1970)
  • Adaptación y estandarización de la tecnología (principios de la década de 1970 a principios de la década de 1980)
  • Mecanización y soporte de procesos (finales de la década de 1970)
  • Perfeccionamiento y ampliación del proceso (principios de la década de 1980)
  • Automatización integrada y flexible (mediados de la década de 1980)
  • Mejora incremental del producto/variedad (finales de la década de 1980)

Véase también

Referencias

  1. 1 2 3 4 "Fábricas de software" . MSDN. 20 de mayo de 2014.
  2. 1 2 3 Greenfield, Jack; Short, Keith; Cook, Steve; Kent, Stuart (2004). Fábricas de software: Ensamblaje de aplicaciones con patrones, modelos, marcos de trabajo y herramientas . Wiley. ISBN 0-471-20284-3.
  3. 1 2 3 4 "Fábricas de software: escenarios y beneficios" . MSDN. 20 de mayo de 2014.
  4. 1 2 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.
  5. Bratman, H.; Court, T. (1975). "La fábrica de software". Computer . 8 (5): 28– 37. doi : 10.1109/cm.1975.218953 . S2CID 537648 . 
  6. Cusumano, Michael A. (marzo de 1989). "La fábrica de software: una interpretación histórica". IEEE Software . 6 (2): 23– 30. doi : 10.1109/ms.1989.1430446 . S2CID 18982313 . 
  7. Griss, ML (1993). "Reutilización de software: De la biblioteca a la fábrica". IBM Systems Journal . 32 (4): 548– 566. CiteSeerX 10.1.1.88.2855 . doi : 10.1147/sj.324.0548 . 
  8. Cusumano, Michael A. (1991). "Conceptos y prácticas de fábrica en el desarrollo de software". Anales de la historia de la computación . 13 (1): 3– 32. doi : 10.1109/mahc.1991.10004 . S2CID 7733552 . 
  • Harvard Business Review Wipro Technologies: El modelo de fábrica
  • La externalización sin deslocalización es el objetivo de 'Software Factory', por PJ Connolly.