En la jerga de la programación de computadoras , 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 afirmó por primera vez el efecto observador de la mecánica cuántica , que afirma que el acto de observar un sistema altera inevitablemente 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.
Términos similares, como bohrbug , mandelbug , [2] [3] [4] hindenbug y schrödinbug [5] [6] (ver la sección sobre términos relacionados ) se han propuesto ocasionalmente para otros tipos de errores de software inusuales, a veces en broma; [7] [8] sin embargo, a diferencia del término heisenbug , no son ampliamente conocidos ni utilizados. [9] [ investigación original? ]
Ejemplos de
Los errores de error ocurren porque los intentos comunes de depurar un programa , como insertar declaraciones de salida o ejecutarlo con un depurador , generalmente tienen el efecto secundario de alterar el comportamiento del programa de manera sutil, como cambiar las direcciones de memoria de las variables y el tiempo. de su ejecución.
Un ejemplo común de un heisenbug es un error que aparece cuando el programa se compila con un compilador de optimización , pero no cuando el mismo programa se compila sin optimización (como se hace a menudo con el propósito de examinarlo con un depurador). Durante la depuración, los valores que un programa optimizado normalmente mantendría en los 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 la memoria puede tener un rango y una precisión más pequeños que el valor en el registro. De manera similar, los errores de Heisen pueden ser causados por efectos secundarios en las expresiones de prueba utilizadas en aserciones en tiempo de ejecución en lenguajes como C y C ++ , donde la expresión de prueba no se evalúa cuando las aserciones se desactivan en el código de producción usando la NDEBUG
macro.
Otras causas comunes de heisenbugs son el uso del valor de una variable no inicializada (que puede cambiar su dirección o valor inicial durante la depuración), o seguir un puntero no válido (que puede apuntar a un lugar diferente durante la depuración). Los depuradores también permiten comúnmente el uso de puntos de interrupción o proporcionan otras interfaces de usuario que hacen que el código fuente adicional (como los accesos de propiedad) se ejecute de forma sigilosa, lo que, a su vez, puede cambiar el estado del programa. [10]
El tiempo también puede ser un factor en los errores de heisenbugs, particularmente con aplicaciones multiproceso. La ejecución de un programa bajo el control de un depurador puede cambiar el tiempo de ejecución del programa en comparación con la ejecución normal. Es posible que no se produzcan errores sensibles al tiempo, como las condiciones de carrera, cuando el programa se ralentiza mediante líneas de origen de un solo paso en el depurador. Esto es particularmente cierto cuando el comportamiento implica la interacción con una entidad que no está bajo el control de un depurador, como cuando se depura el procesamiento de paquetes de red entre dos máquinas y solo una está bajo el control del depurador.
Los Heisenbugs pueden verse como ejemplos del efecto observador en la tecnología de la información . Los programadores frustrados pueden culpar con humor de un error heisenbug a la fase de la luna , [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 el hardware.
Términos relacionados
Un bohrbug , por oposición, es un "error bueno y sólido". Al igual que el modelo de átomo determinista de Bohr , no cambian su comportamiento y se detectan con relativa facilidad. [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 . [2] El término también se refiere a un error que exhibe un comportamiento fractal (es decir, auto-similitud ) al revelar más errores (cuanto más profundo se adentra un desarrollador en el código para corregirlo, más errores encuentra). [ cita requerida ]
Un schrödinbug o schroedinbug (llamado así por Erwin Schrödinger y su experimento mental ) es un error que se manifiesta al ejecutar software después de que un programador se da cuenta de que el código nunca debería haber funcionado en primer lugar. [5]
Un hindenbug [14] (llamado así por el desastre de Hindenburg ) es un error con comportamiento catastrófico.
Un higgs-bugson [15] [16] (llamado así por la partícula del bosón de Higgs ) es un error que se predice que existe en base a otras condiciones observadas (más comúnmente, entradas de registro vagamente relacionadas e informes de usuarios anecdóticos) pero 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 (probado matemáticamente), pero que no se puede ver en ejecución (pero es difícil o imposible de encontrar en realidad).
Etimología
El término también fue utilizado en 1985 por Jim Gray , en un artículo sobre fallas de software [17] (y a veces se le atribuye erróneamente debido a esta publicación) y también en 1986 por Jonathan Clark y Zhahai Stewart en la lista de correo (más tarde Usenet grupo de noticias) riesgos comparativos . [18]
Bruce Lindsay, investigador de IBM , afirmó en una entrevista de ACM Queue en 2004 que estaba presente cuando se definió originalmente el Heisenbug. [19]
Una aparición anterior en las publicaciones de ACM es de 1983. [20]
Resolución
Las chinches son difíciles de identificar y arreglar; a menudo, intentar resolverlos conduce a comportamientos inesperados adicionales. Debido a 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 heisenbugs identificados debería disminuir a medida que madura el software. [21]
Ver también
- Programación de culto a la carga
- Depurador de memoria
- Jinx Debugger: una herramienta que explora automáticamente las ejecuciones que pueden exponer Heisenbugs
Referencias
- ^ "El archivo de jerga: heisenbug" .
- ^ a b "El archivo de jerga: Mandelbug" . Catb.org . Consultado el 5 de septiembre de 2013 .
- ^ Raymond, Eric S .; The New Hacker's Dictionary , 3.a edición, 1996
- ^ Clarke, Arthur C. , El fantasma de los grandes bancos , Bantam Books, 1990
- ^ a b "El archivo de jerga: Schroedinbug" . Catb.org . Consultado el 5 de septiembre de 2013 .
- ^ Raymond, Eric S .; The New Hacker's Dictionary , 3.a edición, 1996
- ↑ El siguiente artículo investiga las diversas definiciones de bohrbug, mandelbug y heisenbug propuestas en la literatura, así como las declaraciones hechas sobre las relaciones entre estos tipos de fallas: Grottke, Michael; y Trivedi, Kishor S .; Fallos de software, envejecimiento y rejuvenecimiento del software , Revista de la Asociación de Ingeniería de Confiabilidad de Japón , vol. 27, núm. 7, págs. 425–438, 2005.
- ^ Grottke, Michael; y Trivedi, Kishor S .; Lucha contra errores: eliminar, reintentar, replicar y rejuvenecer , IEEE Computer vol. 40, no. 2 (febrero de 2007), págs. 107 a 109
- ^ Una búsqueda de Google Books de febrero de 2012 arroja alrededor de 70 resultados para "schroedinbug", 100 para "mandelbug", 400 para "bohrbug" o "heisenbug".
- ^ "Anulación de Java toString () con inicialización como efecto secundario" Archivado el 30 de diciembre de 2014 en Wayback Machine
- ^ CATB.org, "fase de la luna"
- ^ Goshgarian, Gary; Explorando el lenguaje , HarperCollins College Publishers, 1995
- ^ "A estos fallos transitorios de software se les ha dado el nombre caprichoso de 'Heisenbug' porque desaparecen cuando se vuelven a examinar. Por el contrario, los 'Bohrbugs' son buenos errores sólidos". (Noticias del IEEE Computer Group, Volumen 24, Números 7-12, 1991)
- ^ "Insecto hinden" .[se necesita una mejor fuente ]
- ^ "Nueva jerga de programación" .
- ^ "20 frases divertidas de jerga de programación que debe usar al hablar con ingenieros" .
- ^ Gray, Jim (1985). "¿Por qué se detienen las computadoras y qué se puede hacer al respecto?" . Informe técnico 85.7 . Computadoras en tándem.
- ↑ (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, no. 8 - noviembre de 2004" . Queue.acm.org . Consultado el 5 de septiembre de 2013 .
- ^ Actas del Simposio de ingeniería de software ACM SIGSOFT / SIGPLAN sobre depuración de alto nivel, Pacific Grove, California, 20 al 23 de marzo de 1983 , Asociación de maquinaria informática, 1983, búsqueda en Google Books :
Este es el Principio de Incertidumbre de Heisenberg aplicado a la depuración (un participante llamó "Heisenbug" a una instancia de tal error).
También citado en LeBlanc, Richard J .; Robbins, Arnold D .; Monitoreo basado en eventos de programas distribuidos , en las actas de la Quinta Conferencia Internacional de IEEE sobre Sistemas de Computación Distribuida (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, págs. 515-522 Búsqueda en Google Books :
Este es el principio de incertidumbre de Heisenberg aplicado a la depuración, a veces llamado el principio "Heisenbug" [ACM83].
- ^ P., Birman, Kenneth (2005). Sistemas distribuidos confiables: tecnologías, servicios web y aplicaciones . Nueva York: Springer. ISBN 0387276017. OCLC 225378026 .
enlaces externos
- La tecnología de depuración de Heisenberg
- Una historia sobre magia
- OpenOffice no imprime los martes , un error fascinante que tardó casi nueve meses en resolver.