Bohrbug: qué es, causas de aparición y métodos de corrección

Autor: IT Sectr Publicado: 2026-07-29 Tiempo de lectura: 8 min

Bohrbug es un error de software que se comporta de forma determinista: con los mismos datos de entrada, se reproduce siempre sin excepción. El nombre proviene del modelo atómico de Niels Bohr, donde un electrón se mueve en una órbita estrictamente definida, tan predecible como este error. Según Wikipedia (2026), Bohrbug pertenece a la clase de defectos más fáciles de diagnosticar, ya que no requiere condiciones especiales para reproducirse.

Puntos clave

  • Bohrbug es un error estable que se reproduce en cada ejecución con los mismos datos de entrada.
  • El nombre está relacionado con el modelo planetario del átomo de Bohr: el error se comporta de forma predecible, como un electrón en órbita.
  • El diagnóstico de estos errores es el más sencillo: basta con registrar las condiciones de entrada y depurar.
  • Las causas incluyen errores lógicos, condiciones límite incorrectas y erratas en el código.
  • Las pruebas unitarias son la herramienta principal para prevenir Bohrbugs durante el desarrollo.

¿Qué es un Bohrbug?

Bohrbug es un tipo de error de software que se manifiesta de forma determinista: con los mismos datos de entrada, siempre produce el mismo fallo. El término fue introducido por los investigadores Jim Gray y Andreas Reuter en el libro “Transaction Processing: Concepts and Techniques” (1993).

A diferencia de Mandelbug, que cambia caóticamente su comportamiento, Bohrbug es estable: un desarrollador puede reproducirlo con los ojos cerrados proporcionando al sistema los mismos parámetros. Esto lo convierte en un candidato ideal para la depuración paso a paso en un IDE.

Bohrbug aparece en todas las etapas del ciclo de vida del software, desde el desarrollo hasta la operación. A menudo se descubre durante las pruebas, ya que los ingenieros de QA ejecutan escenarios repetitivos que garantizan provocar el fallo.

Definición según Gray y Reuter

Según la clasificación de Gray y Reuter, un Bohrbug es un defecto que cumple tres condiciones: un conjunto fijo de datos de entrada, el mismo estado del sistema y el mismo resultado de fallo. Si se viola al menos una condición, el error deja de ser “Bohr.”

Los autores subrayan que un Bohrbug no es necesariamente un error simple. Puede ser arbitrariamente complejo en lógica, pero su determinismo lo distingue de todos los demás tipos de fallos en la clasificación.

Origen del nombre Bohrbug

El nombre Bohrbug proviene del físico danés Niels Bohr, creador del modelo planetario del átomo. La analogía es simple: así como un electrón en el modelo de Bohr se mueve en una órbita estrictamente fija, este error repite el mismo comportamiento en cada ejecución.

Gray y Reuter eligieron este nombre para contrastar los errores deterministas con los caóticos, a los que llamaron Mandelbug, en honor al matemático Benoit Mandelbrot, fundador de la teoría del caos y los fractales.

Curiosamente, en la literatura en inglés, el término Bohrbug se usa a menudo como sinónimo de “error determinista,” aunque es menos común en entornos de habla hispana. La mayoría de los desarrolladores simplemente llaman a estos errores “errores reproducibles.”

Características clave de Bohrbug

Bohrbug tiene un conjunto de propiedades distintivas que ayudan a identificarlo entre otros tipos de defectos de software. Veamos cada característica en detalle.

Determinismo

La principal característica de Bohrbug es la predecibilidad total. Si la aplicación falló con ciertos datos de entrada en la máquina de un desarrollador, fallará exactamente igual en la máquina de un tester y en producción. Sin factores aleatorios.

Reproducibilidad

Bohrbug se reproduce en el 100% de los intentos. Esto significa que no se necesitan herramientas especiales para depurarlo: basta con un IDE y un depurador estándar. El desarrollador coloca un punto de interrupción, inicia la aplicación, proporciona los datos de entrada y recorre el código paso a paso.

Estabilidad en el tiempo

Si un Bohrbug no se corrige, se reproducirá en cualquier versión del programa hasta que se solucione. Los factores temporales —carga de CPU, fase lunar, hora del día— no afectan su manifestación.

Causas principales de Bohrbug

Las causas de Bohrbug se pueden dividir en varias categorías. Comprender estas categorías ayuda a encontrar la raíz del problema más rápidamente.

Errores lógicos

Una condición mal construida es la causa más común de Bohrbug. Por ejemplo, un desarrollador usó el operador `||` en lugar de `&&`, lo que provocó que una rama de código se ejecutara incorrectamente cada vez que se llama a la función con ciertos argumentos.

Errores de condiciones límite

Usar el operador `<=` en lugar de `<` o la situación inversa es una fuente clásica de Bohrbug. Si un bucle debe ejecutarse 10 veces pero se ejecuta 11 debido a una condición incorrecta, se trata de un error determinista que se manifestará en cada ejecución.

Constantes incorrectas y números mágicos

Las constantes codificadas que no coinciden con la lógica de negocio crean fallos estables. Por ejemplo, un tiempo de espera de conexión al servidor configurado en 100 milisegundos en lugar de 5000: la conexión se interrumpirá en cada solicitud.

Cómo detectar Bohrbug en el código

Detectar un Bohrbug es la tarea más fácil para un desarrollador en comparación con otros tipos de errores. Su naturaleza determinista permite aplicar métodos de depuración estándar.

java
public class DiscountCalculator {
    public double calculate(double amount, boolean isPremium) {
        // Error: los usuarios premium obtienen un 5% de descuento en lugar del 10%
        if (isPremium) {
            return amount * 0.95;
        }
        return amount * 0.90;
    }
}

En este ejemplo, el Bohrbug es obvio: al llamar a `calculate(1000, true)`, el método siempre devuelve 950 en lugar de 900. Una prueba unitaria simple con datos de entrada fijos revelará el problema al instante.

Pruebas unitarias como método principal

Para detectar Bohrbug, las pruebas unitarias son la herramienta más eficaz. Basta con cubrir la función con un conjunto de pruebas con varios valores límite, y el error determinista aparecerá en la primera ejecución.

Depuración paso a paso

Una vez detectado un Bohrbug, la depuración paso a paso en un IDE es la mejor manera de encontrar la causa raíz. El desarrollador coloca un punto de interrupción en la entrada de la función y recorre cada línea, observando los valores de las variables.

Diferencia entre Bohrbug y otros tipos de errores

Bohrbug se diferencia de otros tipos de errores de software por una característica clave: el determinismo. Veamos la comparación en una tabla.

Tipo de errorReproducibilidadCausaComplejidad de depuración
Bohrbug100% con los mismos datosError lógicoBaja
MandelbugDepende del estadoCondiciones de carrera, tiemposAlta
Schrödinbug0% hasta leer el códigoConciencia del errorPsicológica
HindenbugUna sola vezFallo en cascadaExtrema
HeisenbugCambia al depurarOptimización del compiladorMedia

Bohrbug es el único tipo de error que se puede reproducir de forma fiable en condiciones controladas. Esto lo hace el más seguro desde el punto de vista del diagnóstico, pero no menos peligroso para el usuario.

Por qué se confunden Bohrbug y Heisenbug

Heisenbug es un error que desaparece al intentar depurarlo. A diferencia de Bohrbug, Heisenbug puede no reproducirse en un depurador debido a cambios en los tiempos de ejecución del código. Los desarrolladores principiantes suelen confundir estos dos tipos.

Ejemplo de Bohrbug en código

Veamos un ejemplo real de Bohrbug en una aplicación de tienda en línea. La función calcula el costo total del pedido con impuestos.

java
public double calculateTotal(double subtotal, double taxRate) {
    // Error: el desarrollador configuró taxRate como porcentaje
    // pero olvidó dividir entre 100
    return subtotal + (subtotal * taxRate);
}

Al llamar a `calculateTotal(1000, 20)`, la función devuelve 21000 en lugar de los 1200 esperados. Este es un Bohrbug clásico: los mismos datos de entrada siempre conducen al mismo resultado incorrecto. La corrección es trivial: añadir la división entre 100.

Versión corregida

Después de la corrección, la función procesa correctamente la tasa impositiva:

java
public double calculateTotal(double subtotal, double taxRatePercent) {
    return subtotal + (subtotal * taxRatePercent / 100.0);
}

Este ejemplo muestra claramente que un Bohrbug puede ser causado por un simple error matemático. Por eso la revisión de código y las pruebas unitarias son las principales herramientas de prevención de estos defectos.

Preguntas frecuentes

¿En qué se diferencia Bohrbug de un error normal?

Bohrbug es una variedad de error normal que se caracteriza por un estricto determinismo. Todo Bohrbug es un error, pero no todos los errores son Bohrbug. Un error normal puede reproducirse de forma inestable o depender de factores externos.

¿Por qué se llama a Bohrbug error estable?

Bohrbug se llama estable por su capacidad de reproducirse en cada ejecución con los mismos datos de entrada. Esta propiedad lo hace predecible y cómodo para la depuración, a diferencia de Mandelbug o Heisenbug.

¿Quién introdujo el término Bohrbug?

El término Bohrbug fue introducido por Jim Gray y Andreas Reuter en 1993 en el libro “Transaction Processing: Concepts and Techniques.” Clasificaron los errores de software según el grado de determinismo, usando analogías de la física y las matemáticas.

¿Cómo corregir rápidamente un Bohrbug?

Para corregir rápidamente un Bohrbug es necesario: reproducir el error en un entorno de prueba, recorrer el código paso a paso en un depurador, encontrar la línea con la lógica incorrecta y escribir una prueba unitaria que verifique el comportamiento correcto.

¿Puede un Bohrbug ser complejo?

Sí, un Bohrbug puede ser arbitrariamente complejo en su lógica. El determinismo no implica simplicidad. El error puede involucrar muchas condiciones y llamadas anidadas, pero si se reproduce de forma estable, es un Bohrbug.

Resumen

  • Bohrbug es un error de software determinista que se reproduce en el 100% de los casos con los mismos datos de entrada.
  • El nombre proviene del físico Niels Bohr, cuyo modelo atómico se basa en órbitas estrictas, una analogía con el comportamiento predecible del error.
  • Las causas principales de Bohrbug: errores lógicos, condiciones límite incorrectas, erratas y constantes equivocadas.
  • El diagnóstico de Bohrbug es el más sencillo entre todos los tipos de errores gracias a su naturaleza determinista.
  • Las pruebas unitarias y la revisión de código son las principales herramientas para prevenir Bohrbugs durante el desarrollo.
  • Diferencia con Mandelbug: Bohrbug es estable y predecible, Mandelbug es caótico y depende del estado del sistema.
  • Recomendación: al encontrar un error estable, empieza siempre escribiendo una prueba que lo reproduzca.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también