# Release Management

Software Release Management, en castellano, gestión de entregas de software, es el proceso de entregas de software nuevo o de actualizaciones del software. El proceso es mucho más que crear una nueva versión o actualizar un programa. Cuando se necesita una nueva entrega hay que seguir varios pasos. Reunir las nuevas exigencias y conocer las dependencias con los componentes existentes es el primer paso. Después se puede producir la nueva versión, se le somete a prueba y se prepara la nueva entrega. La entrega que es llevada finalmente al entorno de operaciones consiste en un archivo listo para ser instalado, con los manuales de uso. La firma también recibe los documentos de diseño y pruebas.

## En el pasado

En el pasado era usual que una firma desarrollara un sistema. Un sistema simple de gestión de configuración era usado para apoyar al release management. Cuando un nuevo software debía ser entregado, todas las componentes eran congeladas, se dejaba de trabajar en el código fuente. A los usuarios se les notificaba donde obtener el nuevo software. Internet cambió esa manera de trabajar.

## Desafíos

Muchos nuevos desafíos han aparecido en los últimos años. Muchas veces el software no es desarrollado por un equipo principal sino que el desarrollo se distribuye entre equipos e incluso entre compañías. Los diseñadores deben tener presente componentes ya existentes y las dependecias entre las componentes, sobre todo en el caso de equipos trabajando en lugares geográficamente alejados. El software debe ser descrito acusiosamente. Uno de los aspectos más importantes son las dependencias con otros sistemas. La localización, recepción y revisión de componentes puede ser fuente de errores. Hoek (1997&2003) señala que el gestor de entrega de software en un puente entre las organizaciones donde se escribe y produce una componente y las organizaciones donde son integrados en una aplicación.

## Beneficios

Es necesario desarrollar el software para enfrentar nuevos requisitos, fallas y tecnologías. Al usar Release Management se gana un desarrollo estructurado y otros beneficios al contrario de desarrollar el software en forma intuitiva.
El Release management:
* da la posibilidad de planificar el uso de recursos
* es un proceso estructurado eficiente y efectivo
* los cambios aparecen de una vez, limitando en el tiempo los efectos sobre el usuario
* ayuda a verificar la funcionalidad y su uso antes de la entrega mediante pruebas
* utiliza control de versiones y almacenamiento central que aseguran el uso de la versión correcta
El proceso de entrega tiene varias fases:

### 1. Información y descripción

Cuando se prepara una entrega, primero debemos informarnos de lo que se exige que cumpla la nueva entrega, estos son los requerimientos. Por ejemplo, las mejoras que deben superar las fallas en el software existente. Eso se puede organizar mediante el uso de un Sistema de seguimiento de errores (Bugtracker). Un paso paralelo es fijarse en las dependencias. El software esta a menudo compuesto de muchos módulos que dependen uno del otro para trabajar. Si cambia uno, eso afectára al otro. Una vez que los requerimientos y las dependencias nos son conocidas se puede comenzar a planificar el proceso de entrega. La planificación consiste en fijar los pasos necesarios, los plazos límites, etc. En la figura 1 se puede visualizar el proceso usando meta modeling technique.

### 2. Release Building

Cuando son conocidos los requerimientos, dependencias y plazos, se comienza la construcción de la nueva entrega. El primer paso es el diseño de la nueva entrega. Se puede hacer usando técnicas de desarrollo de software, por ejemplo UML. El diseño es convertido en código fuente de algún lenguaje de programación (por ejemplo C). Se da a conocer a los desarrolladores la fecha de término para cambios (congelar el repositorio). Las piezas de código, clases, archivos de configuración, etc son entonces traídas desde el repositorio mediante un checkout, compiladas, enlazadas y finalmente armadas en un solo programa, un built. Se debe colocar una marca (tag) en el repositorio sobre la versión que fue traída, para posteriormente conocer el estado de avance de la versión usada por el usuario.

### 3. Prueba de aceptación

Cuando el built está listo, es enviado al departamento de control de calidad para las pruebas estándares de aceptación. El programa es revisado para verificar que cumple con los requerimientos y dependencias y que funciona correctamente. Durante esta fase, el proceso completo es documentado para tener en el futuro una base de conocimientos. Después de la verificación final se deben actualizar los estándares de prueba para adaptarlos al nuevo software.

### 4. Preparación de la entrega

Cuando se tiene una entrega correcta y probada, esta entrega debe ser empacada con los documentos necesarios como pueden ser:
* lista de fallas que han sido corregidas,
* nombre de la entrega (release tag),
* especificación del entorno para el cual se ha construido la entrega,
* documentación,
* archivos de configuración,
* informes de las pruebas realizadas, etc.
La transferencia al usuario se hace según lo que se haya acordado con él: por internet (descarga), un CD, etc.

### 5. Instalación de la entrega

La instalación consiste en la transferencia de la entrega al usuario su implementación.
Una descripción de los conceptos utilizados se encuentra en la tabla 1. Una descripción de las actividades se encuentra en la tabla 2.

## Release manager

Existe la necesidad de tener una persona responsable de supervisar el desarrollo, pruebas, implementación y apoyo al usuario de los programas más complejos. Esta persona debe tener un conocimiento general de cada aspecto del desarrollo del ciclo de vida del software, de varios sistemas operativos y plataformas de aplicaciones para software junto con una comprensión de las diferentes funciones y perspectivas económicas. La gestión de entregas apunta a esa necesidad. Un gestionador de entregas es:
* Facilitador - un gestionador de entregas sirve como eslabón entre diferentes departamentos de la empresa para garantizar entregas oportunas de software y actualizaciones y menor fricción entre los actores.
* Guardia – un gestor de entregas "guarda las llaves" de los sistemas de producción y es responsable de su calidad y disponibilidad.
* Arquitecto – el gestor de entregas ayuda a identificar, crear y/o implementar los procesos para gestionar eficientemente las entregas de código.
* Ingeniero de apoyo para las aplicaciones en un servidor – a menudo se espera del gestor de entregas que ayude en la solución de problemas en las aplicaciones.