DesarrolloBásico

Bug

Error o defecto en el código que causa un comportamiento inesperado o incorrecto en el software. Uno de los términos más icónicos de la programación.

Pronunciación

/bʌɡ/
"bag"
Escuchar en:Forvo Cambridge

Qué es

Un bug es un error, defecto o falla en el código que causa que el software se comporte de manera inesperada o incorrecta.

Puede manifestarse como:

  • Un botón que no funciona
  • Un cálculo incorrecto
  • Un crash de la aplicación
  • Datos que se pierden o corrompen
  • Comportamientos extraños bajo ciertas condiciones

Errores comunes de pronunciación

  • ❌ “boog” (no como “book”)
  • ❌ “bug-ui” (no tiene sonido extra al final)

El Origen del Término

La Leyenda de la Polilla (1947)

El término se popularizó gracias a Grace Hopper, que trabajaba con el equipo del computador Harvard Mark II. En 1947, los operadores rastrearon un fallo hasta una polilla real atrapada en un relé.

La polilla se pegó con cinta en el libro de registro con la nota:

“First actual case of bug being found” (Primer caso real de un bug encontrado)

Este registro histórico se conserva en el Museo Nacional de Historia Americana del Smithsonian.

Nota: El término “bug” ya se usaba en ingeniería antes de esto (Thomas Edison lo empleaba en el siglo XIX); la anécdota, que Hopper contó muchas veces, lo popularizó en computación.

Tipos de Bugs

Por severidad

Nivel Nombre Ejemplo
🔴 Crítico / Bloqueante Critical / Blocker App no inicia, pérdida de datos
🟠 Mayor Major Función principal no trabaja
🟡 Menor Minor Error visual, typo
🟢 Trivial Trivial Estético, no afecta funcionalidad

Por tipo técnico

┌─────────────────────────────────────────────────────┐
│              TIPOS COMUNES DE BUGS                   │
├─────────────────────────────────────────────────────┤
│ Lógico      │ El código hace algo diferente a lo    │
│             │ esperado                               │
├─────────────────────────────────────────────────────┤
│ Sintáctico  │ Error de escritura que impide         │
│             │ compilar/ejecutar                      │
├─────────────────────────────────────────────────────┤
│ Runtime     │ Error que ocurre durante la ejecución │
├─────────────────────────────────────────────────────┤
│ Concurrencia│ Problemas con múltiples hilos/procesos│
├─────────────────────────────────────────────────────┤
│ Memory Leak │ El programa no libera memoria         │
└─────────────────────────────────────────────────────┘

Ejemplos de Código

Bug lógico (el más común)

// ❌ BUG: Error de uno (off-by-one)
function obtenerUltimoElemento(array) {
  return array[array.length];  // 🐛 Debería ser length - 1
}

// ✅ CORRECTO
function obtenerUltimoElemento(array) {
  return array[array.length - 1];
}

Bug de comparación

// ❌ BUG: Comparación incorrecta
function esMayorDeEdad(edad) {
  if (edad = 18) {  // 🐛 Asignación en vez de comparación
    return true;
  }
  return false;
}

// ✅ CORRECTO
function esMayorDeEdad(edad) {
  return edad >= 18;  // Usar >= para comparar
}

Bug de null/undefined

// ❌ BUG: No verificar null
function obtenerNombreUsuario(usuario) {
  return usuario.nombre.toUpperCase();  // 🐛 Crash si usuario es null
}

// ✅ CORRECTO
function obtenerNombreUsuario(usuario) {
  return usuario?.nombre?.toUpperCase() ?? 'Usuario Anónimo';
}

Caso Práctico: El Bug del Carrito de Compras

Imagina esta situación en una tienda online:

El reporte del bug

Usuario reporta: “Cuando agrego un producto y luego lo elimino, el total sigue mostrando el precio del producto eliminado.”

Investigación

// ❌ CÓDIGO CON BUG
function eliminarProducto(carrito, productoId) {
  const index = carrito.items.findIndex(item => item.id === productoId);
  carrito.items.splice(index, 1);
  // 🐛 BUG: Olvidó recalcular el total
}

// ✅ CÓDIGO CORREGIDO
function eliminarProducto(carrito, productoId) {
  const index = carrito.items.findIndex(item => item.id === productoId);
  if (index === -1) return; // Si no existe, splice(-1, 1) borraría el último item
  carrito.items.splice(index, 1);
  carrito.total = carrito.items.reduce((sum, item) => sum + item.precio, 0);
}

Lecciones aprendidas

  1. Tests unitarios habrían detectado el bug
  2. Code review podría haberlo prevenido
  3. Documentación del flujo completo ayuda

Bugs Famosos en la Historia

Año Bug Impacto
1962 Mariner 1 Cohete y sonda destruidos tras el lanzamiento por un símbolo omitido en el software de guiado, popularizado como “el guion faltante” (US$18.5M de la época)
1996 Ariane 5 (vuelo 501) Cohete autodestruido por un overflow al convertir un número de 64 bits a un entero de 16 bits (pérdidas de más de US$370M)
1999-2000 Y2K Costosa remediación mundial por fechas almacenadas con 2 dígitos
2014 Heartbleed Vulnerabilidad en OpenSSL afectó millones de sitios
2021 Log4Shell Vulnerabilidad crítica en Log4j

El Ciclo de Vida de un Bug

┌─────────┐    ┌──────────┐    ┌───────────┐    ┌──────────┐
│  Nuevo  │ → │ Asignado │ → │ En progreso│ → │ Resuelto │
└─────────┘    └──────────┘    └───────────┘    └──────────┘
     ↓                                               ↓
┌─────────┐                                   ┌──────────┐
│ Cerrado │ ← ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ← │Verificado│
└─────────┘                                   └──────────┘

Cómo reportar un bug correctamente

Un buen reporte de bug incluye:

  1. Título descriptivo: “El carrito no actualiza el total al eliminar productos”
  2. Pasos para reproducir:
    • Agregar producto X al carrito
    • Eliminar producto X
    • Observar el total
  3. Comportamiento esperado: Total debe ser $0
  4. Comportamiento actual: Total sigue mostrando $100
  5. Entorno: Chrome 120, Windows 11, producción
  6. Evidencia: Screenshot o video

Términos relacionados

  • Debug - Proceso de encontrar y corregir bugs
  • Testing - Proceso para detectar bugs antes de producción
  • Hotfix - Corrección urgente de un bug en producción
  • QA - Quality Assurance, equipo que busca bugs

Recuerda: Los bugs son inevitables. Lo importante es tener procesos para detectarlos temprano (testing), corregirlos rápido (debugging) y aprender de ellos (retrospectivas).