Heisenbug es un término del argot utilizado en programación para describir un error de software que desaparece o cambia sus propiedades cuando se detecta. Esta palabra, a diferencia de la palabra " bug " ( error en inglés ), rara vez se usa en ruso. No es completamente idéntico, pero tiene un significado bastante cercano al término ruso: "error flotante".
Los ejemplos pueden ser errores que aparecen en la versión final del programa pero que no son visibles en el modo de depuración o errores de temporización en una aplicación de subprocesos múltiples .
Este nombre es un juego de palabras y proviene del término “ principio de incertidumbre de Heisenberg ” de la mecánica cuántica , que a nivel cotidiano se entiende como un cambio inesperado en el objeto observado como consecuencia del propio hecho de la observación.
En una entrevista con ACM Queue [1] , Bruce Lindsay dice que él estaba presente cuando el término se usó por primera vez en el sentido de "lo miras y él desaparece" (comparar con las palabras de Heisenberg , quien dijo: "el cuanto más intensamente miras una cosa, menos atención prestas a otra cosa.
Por lo general, estos son problemas de bajo nivel:
Errores del optimizador:
Los Heisenbugs son muy difíciles de buscar, ya que aparecen en función de factores aleatorios y se reproducen de forma inestable (la complejidad de analizar el estado de un sistema multihilo también juega su papel). Por lo tanto, están tratando de cortarlos en la etapa de diseño, pensando en los procedimientos de sincronización.
Estas palabras, así como "heisenbag", prácticamente no se encuentran en ruso.
Borbag ( inglés Bohr bug ) es un bicho que, a diferencia del Heisenbug, no desaparece y no cambia sus propiedades cuando intentas detectarlo, similar a la estabilidad del modelo de orbitales electrónicos de Niels Bohr . Un análogo similar en ruso es el error "estable" o "sostenible" [2] , "error sistemático".
Un mandelbug es un insecto cuyo comportamiento es tan complejo que parece caótico [3] . El nombre proviene del nombre de Benoit Mandelbrot , el fundador de la geometría fractal . Sin embargo, vale la pena señalar (sobre un principio similar a la prueba de Turing ) que si no hay forma de separar un error cuyo comportamiento parece ser caótico y un error cuyo comportamiento es realmente caótico, entonces no tiene sentido distinguir entre un Mandelbug y un Heisenbug [4] . Algunos usan el término mandelbug para describir un error cuyo comportamiento no parece realmente caótico, pero es tan complejo que requiere reescribir el programa desde cero para solucionarlo. Un ejemplo de tal error es un error fundamental cometido en el diseño del sistema [5] .
Schroedinbug [6] ( eng. schroedin bug - en honor al experimento mental con el gato de Schrödinger ) es un error que no se manifiesta de ninguna manera, sino que surge repentinamente si alguien se tropieza con él en el código fuente o intenta usar el programa en condiciones inusuales y se da cuenta de que el sistema no podría funcionar en absoluto en presencia de dicho error. Después de eso, el programa deja de funcionar hasta que se soluciona el error. Aunque suene increíble, algunos programas contienen este tipo de errores.
El hindenbug [7] [8] ( ing. hinden bug - por el nombre del desastre del dirigible Hindenburg ) es un error con consecuencias catastróficas, por ejemplo, la destrucción completa de datos.
El bugson de Higgs [8] [9] ( ing. higgs-bugson - en honor a la partícula llamada bosón de Higgs ) es un error cuya existencia se predice (la mayoría de las veces, según datos indirectos o informes de un solo usuario), pero que es extremadamente difícil, si no imposible, reproducirse artificialmente en condiciones de desarrollo o prueba. El término también se puede utilizar en relación con un error que es evidente en el código (prueba matemática), pero que nunca se ha observado en condiciones reales.