La ingeniería de versiones , con frecuencia abreviada como RE o como el compuesto recortado Releng , es una subdisciplina de la ingeniería de software que se ocupa de la compilación , ensamblaje y entrega de código fuente en productos terminados u otros componentes de software. Asociado con el ciclo de vida del lanzamiento de software , Boris Debic de Google Inc. [1] [2] dijo que la ingeniería de lanzamiento es para la ingeniería de software como la fabricación es para un proceso industrial:
La ingeniería de versiones es la diferencia entre la fabricación de software en equipos pequeños o nuevas empresas y la fabricación de software de forma industrial que es repetible, ofrece resultados predecibles y escala bien. Estas prácticas de estilo industrial no solo contribuyen al crecimiento de una empresa, sino que también son factores clave para permitir el crecimiento.
John O'Duinn [3] y Bram Adams han argumentado en repetidas ocasiones la importancia de la ingeniería de versiones para permitir el crecimiento de una empresa de tecnología . [4] Si bien el objetivo de la ingeniería de versiones no es sobrecargar el desarrollo de software con una superposición de procesos, a menudo se ve como una señal de madurez organizativa y de desarrollo.
La ingeniería de versiones moderna se ocupa de varios aspectos de la producción de software:
- Identificabilidad
- Ser capaz de identificar todas las fuentes, las herramientas, el entorno y otros componentes que componen una versión en particular.
- Reproducibilidad
- La capacidad de integrar la fuente, los componentes de terceros, los datos y los externos de implementación de un sistema de software para garantizar la estabilidad operativa.
- Consistencia
- La misión de proporcionar un marco estable para el desarrollo, la implementación, la auditoría y la responsabilidad de los componentes de software.
- Agilidad
- La investigación en curso sobre cuáles son las repercusiones de las prácticas modernas de ingeniería de software en la productividad en el ciclo del software, por ejemplo, la integración continua y el impulso de iniciativas ecológicas [ aclaración necesaria ] .
La ingeniería de versiones suele ser el centro de integración para los equipos de desarrollo de software más complejos, y se encuentra en el cruce entre el desarrollo, la gestión de productos, el control de calidad y otros esfuerzos de ingeniería, también conocidos como DevOps . Los equipos de ingeniería de versiones a menudo desempeñan el papel de guardianes (por ejemplo, en Facebook, Google, Microsoft) para ciertos productos críticos donde su juicio forma una línea paralela de responsabilidad y autoridad en relación con las versiones de producción (empujes).
Con frecuencia, el seguimiento de los cambios en un sistema de gestión de la configuración o un sistema de control de revisiones es parte del dominio del ingeniero de versiones. La responsabilidad de crear y aplicar un esquema de numeración de versiones en el software, y rastrear ese número hasta los archivos de origen específicos a los que se aplica, a menudo recae en el ingeniero de versiones. Producir o mejorar la automatización en la producción de software suele ser un objetivo del ingeniero de versiones. La recopilación, el seguimiento y el suministro de todas las herramientas necesarias para desarrollar y construir una pieza de software en particular puede ser una tarea de ingeniería de lanzamiento, con el fin de reproducir o mantener el software de manera confiable años después de su lanzamiento inicial para los clientes.
Si bien la mayoría de los ingenieros de software o desarrolladores de software realizan muchas o todas las tareas anteriores como parte de su trabajo, en organizaciones más grandes se puede aplicar la especialidad del ingeniero de versiones para coordinar árboles de origen, proyectos, equipos y componentes dispares. Esto libera a los desarrolladores para implementar funciones en el software y también libera a los ingenieros de control de calidad para probar de manera más amplia y profunda el software producido.
El ingeniero de versiones puede proporcionar software, servicios o ambos a los equipos de ingeniería de software y aseguramiento de la calidad del software. El software proporcionado puede crear herramientas, ensamblar u otros scripts de reorganización que toman el resultado de la compilación y los colocan en una estructura de árbol predefinida, e incluso a la creación y creación de instaladores para que los utilicen los equipos de prueba o el consumidor final del software. . Los servicios proporcionados pueden incluir la automatización de la creación (compilación) de software , la integración de pruebas automatizadas , la presentación de informes de resultados y la producción o preparación de sistemas de entrega de software, por ejemplo, en forma de medios electrónicos (CD, DVD) o mecanismos de distribución de software electrónicos.
Disciplinas afines
- Automatización de lanzamiento de aplicaciones
- Gestión del ciclo de vida de las aplicaciones
- Automatización de construcción
- Integración continua
- Gestión del cambio
- Empaquetado e implementación
- Portabilidad : la ingeniería de línea de productos incluye la portabilidad de un producto de software de una plataforma a otra.
- Gestión de la liberación
- Gestión de la configuración de software : aunque la ingeniería de versiones a veces se considera parte de la Gestión de la configuración de software, esta última, al ser una herramienta o un proceso utilizado por el ingeniero de versiones, es en realidad más un subconjunto de las funciones y responsabilidades del ingeniero de versiones típico.
- Despliegue de software
- Ciclo de vida de la versión de software
- Control de versiones de software
Referencias
- ^ Adams, Bellomo, Bird, Marshall-Keim, Khomh, Moir (marzo de 2015). "La práctica y el futuro de la ingeniería de versiones" . Software IEEE . Sociedad de Informática IEEE. 32 (2): 46. doi : 10.1109 / ms.2015.52 .
- ^ http://valleyproofs.debic.net/2009/03/behind-scenes-production-pushes.html
- ^ John O'Duinn. 2015. Ingeniería de lanzamientos como multiplicador de fuerzas. En Actas del Tercer Taller Internacional sobre Ingeniería de Versiones (RELENG '15). IEEE Press, Piscataway, Nueva Jersey, EE. UU., 1-1.
- ^ 2013. Actas del 1er taller internacional sobre ingeniería de versiones. IEEE Press, Piscataway, Nueva Jersey, EE. UU.
Otras lecturas
- "Metodología de lanzamiento de software" por Michael E. Bays; ISBN 0-13-636564-7 .
- "Gestión de la configuración de software" de H. Ronald Berlack; ISBN 0-471-53049-2 .
- "Diseño de una metodología para respaldar las decisiones de lanzamiento de software" por H. Sassenburg; ISBN 90-367-2424-4 .
- "Entrega continua: Versiones de software confiables mediante la automatización de la construcción, la prueba y la implementación" por Jez Humble, David Farley; ISBN 0-321-60191-2