¿Qué es el Versionado Semántico?

conceptos

🎯 Introducción

El Versionado Semántico (o SemVer) es un sistema de numeración que nos ayuda a comunicar el tipo de cambios que hacemos en nuestro software. Es como un lenguaje universal que todos los desarrolladores entienden.

Cada versión se representa con tres números separados por puntos:

MAJOR.MINOR.PATCH

O en Español:

MAYOR.MENOR.PARCHE

1.2.3

  • El primer número (MAJOR) indica cambios que rompen la compatibilidad
  • El segundo número (MINOR) indica nuevas funcionalidades compatibles
  • El tercer número (PATCH) indica correcciones de errores compatibles

🖥️ ¿Cómo funciona?

MAJOR (1.x.x)

Este número cambia cuando hacemos cambios que rompen la compatibilidad con versiones anteriores. Por ejemplo:

  • Eliminamos una función que otros desarrolladores podrían estar usando
  • Cambiamos cómo funciona una característica existente
  • Modificamos la estructura de datos que devuelve una API

MINOR (x.1.x)

Este número aumenta cuando agregamos nuevas funcionalidades que son compatibles con versiones anteriores:

  • Agregamos nuevas funciones
  • Incluimos nuevas características
  • Añadimos nuevas opciones de configuración

PATCH (x.x.1)

Este número cambia cuando hacemos correcciones de errores que son compatibles con versiones anteriores:

  • Arreglamos bugs
  • Mejoramos el rendimiento
  • Corregimos errores tipográficos en la documentación

📌 Ejemplos Prácticos

Veamos algunos ejemplos de cómo cambiarían los números:

// Versión 1.0.0 - Primera versión estable
function saludar(nombre) {
return `¡Hola ${nombre}!`;
}
// Versión 1.1.0 - Nueva característica (MINOR)
function saludar(nombre, idioma = "es") {
const saludos = {
es: "¡Hola",
en: "Hello",
fr: "Bonjour",
};
return `${saludos[idioma]} ${nombre}!`;
}
// Versión 1.1.1 - Corrección de bug (PATCH)
function saludar(nombre, idioma = "es") {
const saludos = {
es: "¡Hola",
en: "Hello",
fr: "Bonjour",
};
return `${saludos[idioma] || saludos.es} ${nombre}!`; // Corregido para manejar idiomas no soportados
}
// Versión 2.0.0 - Cambio que rompe compatibilidad (MAJOR)
function saludar(nombre, opciones = {}) {
const { idioma = "es", formal = false } = opciones;
const saludos = {
es: formal ? "Buenos días" : "¡Hola",
en: formal ? "Good day" : "Hello",
fr: formal ? "Bonjour" : "Salut",
};
return `${saludos[idioma] || saludos.es} ${nombre}!`;
}
CUIDADO

Cuando cambiamos el número MAJOR, debemos documentar claramente los cambios que rompen la compatibilidad para que otros desarrolladores puedan adaptarse.

🔢 Versiones Preliminares

A veces necesitamos publicar versiones que aún no están listas para producción. Para esto, usamos etiquetas especiales:

  • alpha: 1.0.0-alpha.1
  • beta: 1.0.0-beta.2
  • rc (release candidate): 1.0.0-rc.1

☝️🤓
🏋️‍♂️ Ejercicio

Analiza los siguientes cambios y determina qué número de versión debería incrementarse:

  1. Se arregló un bug donde la función calcularTotal() no manejaba correctamente los valores nulos
  2. Se agregó soporte para pagos con PayPal
  3. Se cambió la estructura de la respuesta de la API de /usuarios de { data: [...] } a { usuarios: [...] }
  4. Se mejoró el rendimiento de la función de búsqueda
  5. Se agregó documentación en español
🚀 Extra

Investiga sobre:

  1. ¿Por qué es importante mantener las dependencias actualizadas?
  2. ¿Qué herramientas existen para automatizar el versionado semántico?
  3. ¿Qué estrategias existen para comunicar cambios importantes a los usuarios de tu código?

Comentarios