¿Qué es el control de versiones semántico? – CloudSavvy IT

Ilustración que muestra diferentes cadenas de versiones semánticas

El control de versiones semántico es una convención formal para determinar el número de versión de las nuevas versiones de software. El estándar ayuda a los usuarios de software a comprender la gravedad de los cambios en cada nueva distribución.

Un proyecto que utiliza versiones semánticas anunciará un Mayor, Menor y Parche número para cada lanzamiento. La cadena de versión 1.2.3 indica un mayor versión de 1, una menor versión de 2 y un número de parche de 3.

Los números de versión que utilizan este formato son ampliamente utilizados tanto por paquetes de software como por ejecutables de usuario final, como aplicaciones y juegos. No todos los proyectos siguen exactamente el estándar establecido por semver.org.

La especificación se creó para abordar los problemas causados ​​por prácticas de control de versiones inconsistentes entre los paquetes de software utilizados como dependencias. Por “paquete” y “dependencia”, nos referimos a una biblioteca de código que está destinada a ser utilizada dentro de otro proyecto de software y es distribuida por un administrador de paquetes como npm, composer o nuget. Esta es la aplicación del control de versiones semántico que estamos considerando en este artículo.

Mayor, menor y parche

Es importante comprender el significado de los tres componentes involucrados. Juntos, trazan el viaje de desarrollo de un proyecto y relacionan el impacto en el usuario final de cada nueva versión.

  • Número mayor – El número principal indica la versión actual de la interfaz pública del paquete. Esto debe incrementarse cada vez que realice un cambio que requiera que los usuarios existentes de su paquete actualicen su propio trabajo.
  • Número menor – El número menor describe la versión funcional actual de su software. Esto se incrementa cada vez que agrega una nueva característica pero no altera la interfaz de su paquete. Comunica a los usuarios que se ha realizado un cambio significativo, pero el paquete sigue siendo totalmente compatible con el número menor anterior.
  • Número de parche – El número de parche se incrementa cada vez que realiza un cambio menor que no afecta la interfaz pública ni la funcionalidad general de su paquete. Esto se usa más comúnmente para corregir errores. Los consumidores siempre deberían poder actualizar a la última versión del parche sin dudarlo.

La estructura de versión semántica de versiones se modela mejor como un árbol. En la parte superior, tiene sus cambios de interfaz pública, cada uno de los cuales da como resultado un nuevo número importante. Cada serie principal tiene su propio conjunto de versiones menores, donde se agrega nueva funcionalidad de una manera compatible con versiones anteriores. Finalmente, las versiones menores pueden recibir parches de corrección de errores de vez en cuando.

¿Donde empezar?

La mayoría de los proyectos deben usar 1.0.0 como su versión inicial. Está publicando su primera interfaz pública y un conjunto inicial de funcionalidades inalteradas. Todavía no ha tenido que crear un parche, por lo que la versión del parche es 0.

Veamos ahora qué sucede a medida que realiza cambios en su paquete. Después de su lanzamiento inicial, recibe un informe de error de un usuario. Cuando publique la solución, el número de versión correcto será 1.0.1. Si luego creara otra versión para corregir errores, aumentaría el número de parche hasta 1.0.2.

Mientras tanto, también ha estado trabajando en una nueva y emocionante función. Es completamente opcional, por lo que los usuarios no tendrán que hacer nada para actualizar. Sueltas esto como 1.1.0 – Se ha creado una nueva serie funcional y aún no ha tenido que parchearla. Desafortunadamente, pronto llegan informes de errores y 1.1.1 se envía a sus usuarios.

Varios meses después, ha decidido refactorizar todo el proyecto. Algunas de las funciones que solía ofrecer se han eliminado o ahora se accede a ellas a través de una interfaz consolidada. Si publicaste este trabajo, las personas que usan la versión actual de tu paquete tendrían que realizar modificaciones importantes en su proyecto. Es hora de que publiques 2.0.0 en su repositorio de paquetes.

Mantenimiento de sucursales más antiguas

Tocar un número dentro de la cadena de su versión no crea un punto sin retorno. Después de publicar 1.1.1, puede descubrir un error que también estaba presente en 1.0.2. Usando ramas en su sistema de control de código fuente, puede aplicar el parche a ambas series de versiones. Terminarías liberando 1.1.2 y 1.0.3.

Del mismo modo, es posible que desee seguir manteniendo la 1.x rama de su proyecto a pesar de haber publicado 2.0.0. Puede parecer extraño publicar 1.1.2 después 2.0.1 pero esta es una práctica perfectamente aceptable. El control de versiones semántico no crea un número de versión lineal que siempre se incrementa; en cambio, está destinado a ser utilizado como parte de un modelo de desarrollo de ramificación que capitaliza la facilidad de parcheo que ofrecen los sistemas de control de código fuente como Git.

Las versiones publicadas deben ser inmutables. Una vez que haya creado una versión, como 2.4.3, no puede “actualizarlo” simplemente presionando código adicional bajo la misma cadena de versión. Debe asignar un nuevo número de versión a cada lanzamiento, para que los usuarios siempre puedan acceder a cada revisión específica de su paquete.

Manejo de paquetes de prelanzamiento

Por lo general, siempre golpea la versión principal de su proyecto cada vez que se introduce un cambio incompatible hacia atrás. Cuando se encuentra en un estado previo al lanzamiento, su base de código puede evolucionar muy rápidamente, lo que resulta en la publicación de una gran cantidad de versiones principales.

Puede evitar esto anunciando su proyecto como 0.y.z para empezar. Adoptando 0 ya que su versión principal indica que su paquete es inestable. Las reglas normales sobre los cambios incompatibles hacia atrás ya no se aplican, por lo que puede publicar nuevas versiones incrementando solo los números de parches y menores. Esto significa que aún puede usar 1.0.0 para etiquetar la primera versión “terminada” de su software.

También puede agregar “identificadores” adicionales al final de la cadena de la versión, utilizando un guión como separador: 1.0.0-alpha.1. Puede usar esto para denotar claramente las variantes alfa y beta. De manera similar, puede incluir metadatos de compilación agregándolos con el + personaje: 1.1.0-alpha.1+linux_x86.

Conclusión

Hacer un uso coherente del control de versiones semántico ayuda a los usuarios a tener confianza en su proyecto. Pueden ver claramente cómo está evolucionando su base de código y si tendrán que trabajar ellos mismos para mantenerse al día.

La publicidad de una cadena de versiones semánticas es esencial cuando publica en los administradores de paquetes más populares. No obstante, en última instancia, es su decisión qué números aumenta para cada nueva versión. Apegándose a el estandar comunica claramente sus intenciones a la comunidad y minimiza el riesgo de romper involuntariamente el trabajo de otra persona.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad