stringtranslate.com

Insecto Heisen

En la jerga de la 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 del 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 sonda , donde conectar 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]

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 formas sutiles, 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 optimizador , pero no cuando el mismo programa se compila sin optimización (como se hace a menudo 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 una precisión menores que el valor en el registro [ cita requerida ] . 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 se desactivan en el código de producción utilizando la NDEBUGmacro.

Otras causas comunes de errores de programació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 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 se ejecute código fuente adicional (como accesores de propiedades) de forma sigilosa, lo que puede, a su vez, cambiar el estado del programa. [9]

Los usuarios finales pueden experimentar un error de Heisenbug cuando el acto de hacer una captura de pantalla del error de Heisenbug para observarlo soluciona el problema y la captura de pantalla muestra un estado de funcionamiento perfecto. Este efecto puede ocurrir cuando complejos paquetes de software trabajan juntos, por ejemplo, un navegador web que utiliza una aceleración de tarjeta gráfica de hardware que causa 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 de Heisen, en particular en 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. Los errores sensibles al tiempo, como las condiciones de carrera , pueden no ocurrir cuando el programa se ralentiza mediante la ejecución de líneas de código fuente en 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 errores de Heisen pueden considerarse ejemplos del efecto del observador en la tecnología de la información . Los programadores frustrados pueden atribuir humorísticamente un error de Heisen a la fase de la luna [10] o (si ha ocurrido solo una vez) pueden justificarlo como un error leve debido a partículas alfa o rayos cósmicos que afectan el hardware, un fenómeno bien documentado conocido como efectos de evento único .

Términos relacionados

Por el contrario, un bohrbug es un "buen y sólido bicho". 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 error cuyas causas son tan complejas que desafían la reparación, o hacen 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, autosimilitud ) al revelar más errores (cuanto más profundiza un desarrollador en el código para solucionarlo, 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 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. [5]

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

Un bosón de Higgs [14] [15] (denominado así por la partícula del bosón de Higgs ) es un error cuya existencia se predice en función de 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 (probado matemáticamente), pero que no se puede ver en la ejecución (pero que es difícil o imposible de encontrar en realidad).

Etimología

El término fue utilizado en 1985 por Jim Gray , en un artículo sobre fallos 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 grupo de noticias de Usenet ) comp.risks . [17]

Bruce Lindsay, un investigador de IBM , afirmó en una entrevista con 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 errores de Heisen son difíciles de identificar y solucionar; a menudo, intentar resolverlos conduce a un comportamiento inesperado. 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 errores de Heisen identificados debería disminuir a medida que un software madura. [20]

Véase 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 nuevo diccionario del hacker, 3.ª 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 nuevo diccionario del hacker, 3.ª 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 realizadas 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.
  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 toString() de Java 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 estos fallos transitorios de software se les ha dado el nombre caprichoso de 'Heisenbug' porque desaparecen cuando se los vuelve a examinar. Por el contrario, los 'Bohrbugs' son errores buenos y sólidos". (IEEE Computer Group News, volumen 24, números 7-12, 1991)
  13. ^ "Error Hinden".[ 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 deberías usar al hablar con ingenieros". Business Insider .
  16. ^ 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.
  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, no. 8 - noviembre de 2004". Queue.acm.org . Consultado el 5 de septiembre de 2013 .
  19. ^ 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 , Association for Computing Machinery, 1983, búsqueda en Google Books:

    Éste es el principio de incertidumbre de Heisenberg aplicado a la depuración (un participante denominó un error de este tipo "Heisenbug").

    También citado en LeBlanc, Richard J.; Robbins, Arnold D.; Event-Driven Monitoring of Distributed Programs , en Actas de la 5.ª Conferencia Internacional IEEE sobre Sistemas de Computación Distribuida (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, págs. 515-522 Búsqueda de libros en Google:

    Este es el principio de incertidumbre de Heisenberg aplicado a la depuración, a veces llamado principio "Heisenbug" [ACM83].

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

Enlaces externos