Directriz: Guía para la gestión de versiones y definición de políticas de versionado
Descripción principal

Gestión de versiones

La gestión de versiones es un aspecto muy importante a tener en cuenta en el ciclo de vida de desarrollo del software y se recomienda definir las políticas de versionado de forma temprana, en las primeras instancias de planificación del proyecto.

La gestión de versiones es el proceso de realizar el seguimiento y control de las diferentes versiones de los artefactos de software o ítems de configuración y los sistemas de los cuales forman parte. No solamente aplica al código, aplica a cualquier artefactos generado durante el proceso de desarrollo: diseño, pruebas, requisitos, planes, documentos, etc.

Es especialmente importante para el caso del código fuente, ya que debe asegurar que los cambios realizados por distintos desarrolladores a estas versiones no interfieran entre sí. También puede verse como el proceso de gestión de líneas de código (codelines) y líneas base.

La línea principal (mainline) es una secuencia de versiones del sistema desarrolladas a partir de una línea base original.

Herramientas para la gestión de versiones

La definición de una herramienta para la gestión de las versiones de código (que a su vez oficia de repositorio del proyecto) es muy importante. Resulta prácitamente imposible realizar una correcta gestión de versiones del sistema de forma manual. Utilizar una herramienta es prácticamente una necesidad.

 Existen básicamente dos tipos de herramientas o sistemas para la gestión de versiones:

  • Sistema centralizado: existe un repositorio único que contiene todas las versiones de los componentes de software.
    • En este modelo todas las funciones de control de versiones ocurren en un servidor compartido.
    • Si dos desarrolladores tratan de cambiar un mismo archivo al mismo tiempo, y sin un mecanismo de acceso, uno podraí sobreescribir el trabajo del otro.
    • Se basa en: File locking y Version Merging
  • Sistema distribuido: múltiples versiones del repositorio de componentes existe al mismo tiempo.
    • Tienen un enfoque de manejo de versiones entre pares (peer-to-peer).
    • En lugar de existir un repositorio en el cual sincronizan clientes, aquí las computadoras sincronizan entre sí.
    • No hay una copia canónica del código.
    • Las operaciones más comunes (commit, revertir cambios, ver historial) son más rápidas.
    • Menor riesgo de pérdida de datos.

Dependiendo de la tecnología, existen diversas herramientas que se pueden adquirir. Ejemplos de estas herramientas pueden ser: Git (distribuido), Subversion (centralizado), CVS (centralizado) y otras.

Definición de una política de versionado

La numeración de las versiones de los incrementos de software permiten expresar de forma normalizada las modificaciones existentes entre las distintas versiones, indicando los cambios que se han producido entre una versión y la siguiente.

Existen distintas técnicas para la numeración de versiones, lo deseable es que cada organismo defina la suya. A continuación presentamos una sugerencia para esta definición.

La numeración de una versión es una notación numérica compuesta por tres números (y un cuarto opcional) separados por puntos con la siguiente notación:

major.minor.revision[.entrega]

Cada uno de estos números tienen el siguiente significado:

  • major: indica la versión principal del software, consistiendo en un conjunto de funcionalidades concretas que son recogidas y cubiertas en dicha versión.
  • minor: indican funcionalidad menor cubierta en la versión de software entregada.
  • revision: se modifican cuando hay revisiones de código ante fallos de la aplicación.
  • entrega: este dígito tiene el objetivo de llevar la cuenta del número de veces que una entrega se rechaza, por incumplimiento de algún requisitos de la gestión de entregas o del proyecto.

Otro ejemplo de política de versionado (en este caso para la herramienta Git) se puede encontrar en el siguiente enlace.