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 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.
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.
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.”
Bohrbug tiene un conjunto de propiedades distintivas que ayudan a identificarlo entre otros tipos de defectos de software. Veamos cada característica en detalle.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 error | Reproducibilidad | Causa | Complejidad de depuración |
|---|---|---|---|
| Bohrbug | 100% con los mismos datos | Error lógico | Baja |
| Mandelbug | Depende del estado | Condiciones de carrera, tiempos | Alta |
| Schrödinbug | 0% hasta leer el código | Conciencia del error | Psicológica |
| Hindenbug | Una sola vez | Fallo en cascada | Extrema |
| Heisenbug | Cambia al depurar | Optimización del compilador | Media |
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.
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.
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.
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.
Después de la corrección, la función procesa correctamente la tasa impositiva:
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
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.
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.
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.
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.
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
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.
Lea también