La ingeniería de versiones, o releng, es el proceso de preparación de software informático completo para su distribución. Esto puede involucrar muchas disciplinas independientes de programación e ingeniería, y no todas las definiciones de ingeniería de versiones son iguales en diferentes empresas. Algunas de las tareas que pueden estar involucradas en la ingeniería de versiones incluyen compilar código fuente, rastrear y mantener herramientas y entornos de desarrollo, mantener una biblioteca de versiones a lo largo de la vida de un programa y, a veces, implementar la implementación de software en un servidor o sistema en vivo. Algunos de los beneficios de tener un ingeniero de versiones dedicado en el ciclo de desarrollo de software son una mejor experiencia para los usuarios finales, porque los métodos de lanzamiento se prueban primero, una mejor documentación general del programa a lo largo de las actualizaciones y una especie de control de calidad en situaciones en las que diferentes partes de un programa se originan en fuentes independientes.
Durante el desarrollo del software, llega un punto en el que la aplicación se completa y debe distribuirse a los clientes o instalarse en un servidor activo para que pueda utilizarse. Sin un ingeniero de versiones, este proceso podría implicar que los desarrolladores compilen un programa a través de herramientas de desarrollo y luego muevan los archivos binarios al medio o servidor de destino. Algunos de los problemas que se pueden encontrar con este proceso son que el programa puede tener dependencias que no están cuantificadas, que algunos cambios pueden olvidarse o, en última instancia, el proceso puede no ser necesariamente reproducible en el futuro.
Una de las partes más importantes de la ingeniería de versiones es el seguimiento del progreso de cómo se desarrolla un programa. Esto podría significar usar un sistema de control de versiones o emplear otro software no solo para rastrear y etiquetar cada paso de un programa durante su desarrollo, sino también para almacenar instantáneas del programa para que se puedan recuperar más tarde. Además de solo manejar el código fuente, la construcción exitosa de un programa requiere que también se almacene información sobre las herramientas que se utilizan y las diferentes bibliotecas u otros recursos que se emplean. El objetivo final es poder recompilar un programa en cualquier etapa de su desarrollo, independientemente de los sistemas de desarrollo utilizados para crearlo.
Otra posible parte de la ingeniería de versiones es preparar una aplicación para distribuirla a los clientes. Una vez que el programa se ha compilado en binarios, se desarrollan y exploran métodos para instalar el programa en la computadora de un usuario final. Esto podría implicar escribir un programa de instalación o probar el programa en diferentes situaciones si está activo para asegurarse de que funciona de acuerdo con las especificaciones. La ingeniería de versiones a veces implica la instalación de un programa varias veces en varios sistemas para garantizar que las diferentes configuraciones o errores se manejen de la manera adecuada.