La ingeniería de lanzamiento , abreviada frecuentemente como RE o como el compuesto recortado Releng , es una subdisciplina de la ingeniería de software que se ocupa de la compilación , el ensamblaje y la entrega del código fuente en productos terminados u otros componentes de software. Asociada con el ciclo de vida de lanzamiento de software , Boris Debic de Google Inc. [1] [2] dijo que la ingeniería de lanzamiento es a la ingeniería de software lo que la fabricación es a un proceso industrial:
La ingeniería de lanzamiento es la diferencia entre fabricar software en equipos pequeños o empresas emergentes y fabricar software de manera industrial que sea repetible, dé resultados predecibles y se adapte bien a las necesidades. Estas prácticas de estilo industrial no solo contribuyen al crecimiento de una empresa, sino que también son factores clave para posibilitar el crecimiento.
John O'Duinn [3] y Bram Adams [4] han defendido repetidamente la importancia de la ingeniería de lanzamiento para permitir el crecimiento de una empresa tecnológica . Si bien el objetivo de la ingeniería de lanzamiento no es sobrecargar el desarrollo de software con una superposición de procesos, a menudo se la considera un signo de madurez organizacional y de desarrollo.
La ingeniería de lanzamiento moderna se ocupa de varios aspectos de la producción de software:
La ingeniería de lanzamiento es a menudo el centro de integración de 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 lanzamiento suelen desempeñar el papel de guardianes (por ejemplo, en Facebook, Google, Microsoft) de ciertos productos críticos donde su criterio forma una línea paralela de responsabilidad y autoridad en relación con los lanzamientos de producción (pushes).
Con frecuencia, el seguimiento de los cambios en un sistema de gestión de configuración o un sistema de control de revisión 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 fuente específicos a los que se aplica) suele recaer sobre el ingeniero de versiones. Producir o mejorar la automatización en la producción de software suele ser un objetivo del ingeniero de versiones. Recopilar, rastrear y proporcionar todas las herramientas necesarias para desarrollar y crear un software en particular puede ser una tarea de ingeniería de versiones, con el fin de reproducir o mantener de manera confiable el software años después de su lanzamiento inicial a los clientes.
Si bien la mayoría de los ingenieros de software o desarrolladores de software realizan muchas o todas las tareas mencionadas anteriormente como parte de su trabajo, en organizaciones más grandes la especialidad del ingeniero de lanzamiento se puede aplicar para coordinar árboles de código fuente, 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 de control de calidad de software. El software proporcionado puede generar herramientas, ensamblajes u otros scripts de reorganización que toman los resultados de la compilación y los colocan en una estructura de árbol predefinida, e incluso la 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 compilación de software , la integración automatizada de pruebas , la generació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 electrónicos de distribución de software.