stringtranslate.com

Heisenbug

En la jerga de programación informática , un heisenbug es un error de software que parece desaparecer o alterar su comportamiento cuando uno 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 inevitablemente altera su estado. En electrónica, el término tradicional es efecto sonda , donde conectar una sonda de prueba a un dispositivo cambia su comportamiento.

Ocasionalmente se han propuesto términos similares, como bohrbug , mandelbug , [2] [3] [4] hindenbug y schrödinbug [5] [6] (consulte la sección sobre términos relacionados) para otros tipos de errores de software inusuales, a veces en broma. [7] [8]

Ejemplos

Los Heisenbugs 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 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 con el fin de 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 la memoria puede tener un rango y precisión menores que el valor en el registro [ cita requerida ] . De manera similar, los errores 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 NDEBUGmacro.

Otras causas comunes de errores heisen 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 suelen permitir el uso de puntos de interrupción o proporcionar otras interfaces de usuario que hacen que el código fuente adicional (como los descriptores de acceso a propiedades) se ejecute de manera sigilosa, lo que, a su vez, puede cambiar el estado del programa. [9]

Los usuarios finales pueden experimentar un heisenbug cuando el acto de hacer una captura de pantalla del heisenbug para su observación corrige el heisenbug y la captura de pantalla muestra un estado de funcionamiento perfecto. Este efecto puede ocurrir cuando pilas complejas de software trabajan juntas, por ejemplo, un navegador web que utiliza una aceleración de tarjeta gráfica de hardware que provoca errores de representación en la pantalla física que no se muestran en una captura de pantalla.

El tiempo también puede ser un factor en los errores heisen, 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 los errores urgentes, como las condiciones de carrera , no se produzcan cuando el programa se ralentiza mediante líneas fuente 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, con humor, culpar a un heisenbug de la fase de la luna , [10] o (si ha ocurrido sólo una vez) pueden explicarlo como un error leve debido a partículas alfa o rayos cósmicos que afectan el hardware, un fenómeno bien documentado. conocidos como efectos de evento único .

Términos relacionados

Un bohrbug , por el contrario, es un "bicho bueno y sólido". Al igual que el modelo atómico determinista de Bohr , no cambian su comportamiento y se detectan con relativa facilidad. [11] [12]

Un mandelbug (llamado así por el fractal de Benoît Mandelbrot ) es un insecto 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, autosemejanza ) al revelar más errores (cuanto más profundiza un desarrollador en el código para corregirlo, más errores encuentra). [ cita necesaria ]

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 nota que el código nunca debería haber funcionado en primer lugar. [5]

Un hindenbug [13] (llamado así por el desastre de Hindenburg ) es un insecto con un comportamiento catastrófico.

Un higgs-bugson [14] [15] (llamado así por la partícula bosón de Higgs ) es un error cuya existencia se predice basándose en otras condiciones observadas (más comúnmente, 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 en la ejecución (aunque es difícil o imposible de encontrar en existencia).

Etimología

El término fue utilizado en 1985 por Jim Gray , en un artículo sobre fallas de software [16] (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 News). grupo) riesgos comp . [17]

Bruce Lindsay, investigador de IBM , afirmó en una entrevista de ACM Queue en 2004 que estuvo presente cuando se definió originalmente el Heisenbug. [18]

Una aparición anterior en publicaciones de ACM es de 1983. [19]

Resolución

Los Heisenbugs son difíciles de identificar y solucionar; A menudo, intentar resolverlos conduce a nuevos comportamientos inesperados. 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, el número de errores heisen identificados debería disminuir a medida que el software madura. [20]

Ver también

Referencias

  1. ^ "El archivo de jerga: heisenbug".
  2. ^ ab "El archivo de jerga: Mandelbug". Catb.org . Consultado el 5 de septiembre de 2013 .
  3. ^ Raymond, Eric S.; El diccionario del nuevo hacker, tercera edición, 1996
  4. ^ Clarke, Arthur C. , El fantasma de los grandes bancos, Bantam Books, 1990
  5. ^ ab "El archivo de jerga: Schroedinbug". Catb.org . Consultado el 5 de septiembre de 2013 .
  6. ^ Raymond, Eric S.; El diccionario del nuevo hacker, tercera edición, 1996
  7. ^ 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 .; Fallos de software, envejecimiento del software 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.
  8. ^ Grottke, Michael; y Trivedi, Kishor S.; Lucha contra errores: eliminar, reintentar, replicar y rejuvenecer, IEEE Computer vol. 40, núm. 2 (febrero de 2007), págs. 107-109
  9. ^ "Anulación de Java toString() con inicialización como efecto secundario" Archivado el 30 de diciembre de 2014 en Wayback Machine.
  10. ^ CATB.org, "fase de la luna"
  11. ^ Goshgarian, Gary; Explorando el lenguaje , HarperCollins College Publishers, 1995
  12. ^ "A estas fallas transitorias 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". (IEEE Computer Group News, volumen 24, números 7 a 12, 1991)
  13. ^ "Insecto hindú".[ se necesita una mejor fuente ]
  14. ^ "Nueva jerga de programación". 20 de julio de 2012.
  15. ^ "20 frases divertidas de jerga de programación que debes utilizar al hablar con ingenieros". Business Insider .
  16. ^ Gris, Jim (1985). "¿Por qué se detienen las computadoras y qué se puede hacer al respecto?". Informe Técnico 85.7 . Computadoras en tándem.
  17. ^ (16 de diciembre de 1986) RISKS DIGEST 4.30 - (23 de diciembre de 1986) RISKS DIGEST 4.34, moderado por Peter G. Neumann
  18. ^ ""Una conversación con Bruce Lindsay ", ACM Queue vol. 2, núm. 8 - noviembre de 2004". Cola.acm.org . Consultado el 5 de septiembre de 2013 .
  19. ^ Actas del Simposio de ingeniería de software de ACM SIGSOFT/SIGPLAN sobre depuración de alto nivel, Pacific Grove, California, 20 al 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 (un participante llamó "Heisenbug" a un caso de tal error).

    También citado en LeBlanc, Richard J.; Robbins, Arnold D.; Monitoreo impulsado por eventos de programas distribuidos , en Actas de la Quinta Conferencia Internacional IEEE sobre Sistemas Computacionales Distribuidos (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 Principio de "Heisenbug" [ACM83].

  20. ^ P., Birmano, Kenneth (2005). Sistemas distribuidos confiables: tecnologías, servicios web y aplicaciones . Nueva York: Springer. ISBN 0387276017. OCLC  225378026.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )

enlaces externos