En la jerga de la programación informática , un heisenbug es un error de software que parece desaparecer o alterar su comportamiento cuando se intenta estudiarlo. [ 1 ] El término es un juego de palabras con el nombre de Werner Heisenberg , el físico que introdujo por primera vez el principio de incertidumbre , y hace referencia al efecto del observador , que establece que el acto de observar un sistema inevitablemente altera su estado. En electrónica, el término tradicional es efecto de sonda , donde la conexión de una sonda de prueba a un dispositivo cambia su comportamiento. El término ha sido criticado porque confunde el principio de incertidumbre de Heisenberg (al que debe su nombre) con el efecto del observador en mecánica cuántica , que son dos conceptos diferentes. [ 2 ]
Términos similares, como "bohrbug", "mandelbug", [ 3 ] [ 4 ] [ 5 ] "hindenbug" y "schrödinbug" [ 6 ] [ 7 ] (véase la sección sobre términos relacionados ) se han propuesto ocasionalmente para otros tipos de errores de software inusuales, a veces en tono de broma. [ 8 ] [ 9 ]
Ejemplos
Los errores de Heisen se producen porque los intentos comunes de depurar un programa , como insertar instrucciones de salida o ejecutarlo con un depurador , suelen tener el efecto secundario de alterar el comportamiento del programa de maneras sutiles, como cambiar las direcciones de memoria de las variables y el momento de su ejecución.
Un ejemplo común de un heisenbug es un error que aparece cuando el programa se compila con un compilador optimizador , pero no cuando el mismo programa se compila sin optimización (como se suele hacer para examinarlo con un depurador). Durante la depuración, los valores que un programa optimizado normalmente mantendría en registros a menudo se envían a la memoria principal. Esto puede afectar, por ejemplo, el resultado de las comparaciones de punto flotante , ya que el valor en memoria puede tener un rango y una precisión menores que el valor en el registro . De manera similar, los heisenbugs pueden ser causados por efectos secundarios en expresiones de prueba utilizadas en aserciones de tiempo de ejecución en lenguajes como C y C++ , donde la expresión de prueba no se evalúa cuando las aserciones están desactivadas en el código de producción mediante la macro.NDEBUG
Otras causas comunes de errores de depuración son el uso del valor de una variable no inicializada (que puede cambiar su dirección o valor inicial durante la depuración) o el seguimiento de un puntero no válido (que puede apuntar a una ubicación diferente durante la depuración). Los depuradores también suelen permitir el uso de puntos de interrupción o proporcionan otras interfaces de usuario que provocan la ejecución subrepticia de código fuente adicional (como accesores de propiedades), lo que, a su vez, puede cambiar el estado del programa. [ 10 ]
Los usuarios finales pueden experimentar un error de visualización (o "heisenbug") cuando, al tomar una captura de pantalla para observarlo, se soluciona el problema y la captura muestra un funcionamiento correcto. Este efecto puede ocurrir cuando se utilizan conjuntos complejos de software, como por ejemplo un navegador web que usa la aceleración de la tarjeta gráfica por hardware, lo que provoca errores de renderizado en la pantalla que no se aprecian en la captura de pantalla.
El tiempo también puede ser un factor en los errores de Heisen, especialmente en aplicaciones multihilo. La ejecución de un programa bajo el control de un depurador puede alterar su temporización en comparación con la ejecución normal. Los errores sensibles al tiempo, como las condiciones de carrera , pueden no producirse cuando el programa se ralentiza al ejecutar el código paso a paso en el depurador. Esto es particularmente cierto cuando el comportamiento implica la interacción con una entidad que no está bajo el control del depurador, como al depurar el procesamiento de paquetes de red entre dos máquinas, donde solo una está bajo el control del depurador.
Los Heisenbugs pueden considerarse ejemplos del efecto del observador en la tecnología de la información . Los programadores frustrados pueden culpar con humor a la fase lunar de un Heisenbug , [ 11 ] o (si ha ocurrido solo una vez) pueden explicarlo como un error leve debido a partículas alfa o rayos cósmicos que afectan al hardware, un fenómeno bien documentado conocido como efectos de eventos únicos .
Términos relacionados
Un bohrbug , por el contrario, es un "buen y sólido bicho". Al igual que el modelo atómico determinista de Bohr , no cambian su comportamiento y son relativamente fáciles de detectar. [ 12 ] [ 13 ]
Un mandelbug (llamado así por el fractal de Benoît Mandelbrot ) es un error cuyas causas son tan complejas que desafía la reparación, o hace que su comportamiento parezca caótico o incluso no determinista . [ 3 ] El término también se refiere a un error que exhibe un comportamiento fractal (es decir, autosimilitud ) al revelar más errores (cuanto más profundiza un desarrollador en el código para corregirlo, más errores encuentra).
Un schrödinbug o schroedinbug (llamado así por Erwin Schrödinger y su experimento mental ) es un error que se manifiesta en un software en ejecución después de que un programador se da cuenta de que el código nunca debería haber funcionado en primer lugar. [ 6 ]
Un hindenbug [ 14 ] (llamado así por el desastre del Hindenburg ) es un error con un comportamiento catastrófico.
Un bosón de Higgs [ 15 ] [ 16 ] (llamado así por la partícula bosón de Higgs ) es un error cuya existencia se predice a partir de otras condiciones observadas (generalmente, entradas de registro vagamente relacionadas e informes anecdóticos de usuarios), pero que es difícil, si no imposible, de reproducir artificialmente en un entorno de desarrollo o prueba. El término también puede referirse a un error que es obvio en el código (matemáticamente probado), pero que no se puede ver durante la ejecución (aunque es difícil o imposible encontrarlo en la práctica).
Etimología
La primera aparición conocida data de 1983, en una publicación de ACM . [ 17 ]
El término fue utilizado en 1985 por Jim Gray en un artículo sobre fallos de software [ 18 ] , y a veces se le atribuye erróneamente debido a esta publicación. Fue utilizado en 1986 por Jonathan Clark y Zhahai Stewart en la lista de correo (posteriormente grupo de noticias de Usenet ) comp.risks [ 19 ] .
Bruce Lindsay, investigador de IBM , afirmó en una entrevista de ACM Queue de 2004 que estuvo presente cuando se definió originalmente el Heisenbug, [ 20 ] pero no especificó cuándo ocurrió.
Resolución
Los errores de Heisen son difíciles de identificar y corregir; a menudo, intentar solucionarlos genera comportamientos inesperados adicionales. Dado que el problema se manifiesta como resultado de un error subyacente independiente, el comportamiento puede ser difícil de predecir y analizar durante la depuración. En general, la cantidad de errores de Heisen identificados debería disminuir a medida que el software madura. [ 21 ]
Véase también
- Programación de culto al cargo
- Jinx Debugger : una herramienta que explora automáticamente las ejecuciones que probablemente expongan errores de Heisenbug.
- depurador de memoria
Referencias
- ↑ "El archivo de jerga: heisenbug" .
- ↑ Pike, Rob (27 de agosto de 2010). "Conoce tu ciencia" . Centro de comandos . Archivado del original el 31 de agosto de 2010. Recuperado el 3 de noviembre de 2025 .
- 1 2 "The Jargon File: Mandelbug" . Catb.org . Consultado el 5 de septiembre de 2013 .
- ↑ Raymond, Eric S.; El nuevo diccionario del hacker , 3.ª edición, 1996
- ↑ Clarke, Arthur C. , El fantasma de Grand Banks , Bantam Books, 1990
- 1 2 "The Jargon File: Schroedinbug" . Catb.org . Consultado el 5 de septiembre de 2013 .
- ↑ Raymond, Eric S.; El nuevo diccionario del hacker , 3.ª edición, 1996
- ↑ El siguiente artículo investiga las diversas definiciones de bohrbug, mandelbug y heisenbug propuestas en la literatura, así como las afirmaciones hechas sobre las relaciones entre estos tipos de fallas: Grottke, Michael; y Trivedi, Kishor S. ; Software Faults, Software Aging and Software Rejuvenation , Journal of the Reliability Engineering Association of Japan , Vol. 27, No. 7, pp. 425–438, 2005.
- ↑ Grottke, Michael; y Trivedi, Kishor S.; Combatir errores: eliminar, reintentar, replicar y rejuvenecer , IEEE Computer vol. 40, n.º 2 (febrero de 2007), págs. 107–109
- ↑ "Sobrescritura de toString() en Java con inicialización como efecto secundario" Archivado el 30/12/2014 en Wayback Machine
- ↑ CATB.org, "fase de la luna"
- ↑ Goshgarian, Gary; Explorando el lenguaje , HarperCollins College Publishers, 1995
- ↑ "Estos fallos transitorios de software han recibido el nombre peculiar de 'Heisenbug' porque desaparecen al volver a examinarlos. En cambio, los 'Bohrbugs' son errores de programación sólidos y persistentes." (IEEE Computer Group News, Volumen 24, Números 7–12, 1991)
- ↑ "Escarabajo trasero" .
- ↑ "Nueva jerga de programación" . 20 de julio de 2012.
- ↑ "20 frases hilarantes de jerga de programación que deberías usar al hablar con ingenieros" . Business Insider .
- ↑ Actas del Simposio de Ingeniería de Software ACM SIGSOFT/SIGPLAN sobre Depuración de Alto Nivel, Pacific Grove, California, 20-23 de marzo de 1983 , Association for Computing Machinery, 1983, búsqueda en Google Books :
Este es el principio de incertidumbre de Heisenberg aplicado a la depuración de errores (un participante denominó a un ejemplo de este tipo de error "Heisenbug").
También citado en LeBlanc, Richard J.; Robbins, Arnold D.; Event-Driven Monitoring of Distributed Programs , en Proceedings of the IEEE 5th International Conference on Distributed Computing Systems (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, pp. 515-522. Búsqueda en Google Books :Este es el Principio de Incertidumbre de Heisenberg aplicado a la Depuración, a veces llamado Principio "Heisenbug" [ACM83].
- ↑ Gray, Jim (1985). "¿Por qué se detienen las computadoras y qué se puede hacer al respecto?" . Informe técnico 85.7 . Tandem Computers.
- ↑ (16 de diciembre de 1986) RISKS DIGEST 4.30 - (23 de diciembre de 1986) RISKS DIGEST 4.34 , moderado por Peter G. Neumann
- ↑ ""Una conversación con Bruce Lindsay", ACM Queue vol. 2, n.º 8 - noviembre de 2004" . Queue.acm.org . Consultado el 5 de septiembre de 2013 .
- ↑ P., Birman, Kenneth (2005). Sistemas distribuidos fiables : tecnologías, servicios web y aplicaciones . Nueva York: Springer. ISBN 0387276017OCLC 225378026
{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
Enlaces externos
- La tecnología de depuración de Heisenberg
- Una historia sobre magia
- OpenOffice no imprime los martes , un error garrafal que tardó casi nueve meses en solucionarse.
- Errores de software
- Depuración
- Pruebas de software
- Folclore de la programación informática
- Folclore de la ingeniería de software
- jerga informática