Heisenbugs, Bohrbug, Mandelbugs, Schroedinbugs

Parecen insultos pero no lo son. De los heisenbugs había oído hablar hace tiempo en ¿Joel on Software? ¿Coding Horror? El resto de estos pintorescos tipos de bugs no los conocía. Muy curiosos.

Heisenbugs

Un heisenbug es un bug que desaparece o altera su comportamiento al intentar depurarlo.

El nombre es un juego de palabras con el “Principio de Incertidumbre de Heisenberg”, que erróneamente se suele identificar con el efecto observador, y que, este si, afirma que el simple hecho de observar un fenómeno puede cambiar su resultado (vaya, yo soy uno de estos que confundía ambos, ¿quizás por Jurassic Park?).

Una causa común de los heisenbugs es que al ejecutar un programa en modo de depuración a menudo se limpia la memoria antes de lanzar la ejecución.

Bohrbug

El bohrbug (del modelo atómico de Bohr) sería el antónimo de los heisenbug. Es un bug que no cambia su comportamiento.

Mandelbugs

Un mandelbug (por el conjunto de Mandelbrot) es un bug cuyas causas son tan complejas que su comportamiento parece caótico.

Schroedinbugs

Un schroedinbug es un bug que no se manifiesta hasta que alguien, leyendo el código o usando el programa de forma inusual, descubre que nunca debió haber funcionado, momento en el cuál deja de funcionar para todo el mundo. Y aunque parezca imposible, este tipo de bugs existe.

El nombre de schroedinbug deriva de la paradoja del gato de Schrödinger, en el que teniendo un gato en una caja, no podemos saber si está vivo o muerto sin abrir la caja, y por lo tanto se considera que se encuentra vivo y muerto a la vez hasta que la abramos.

Stotle

El stotle se da cuando, al introducir una serie de datos al programa que parecen correctos (pero no lo son), obtenemos una salida incorrecta. Como la entrada no era correcta, no se trata de un bug, pero lo puede parecer.

Su nombre deriva de Aristotle (Aristóteles), porque el programador asume que el error se encuentra en el programa y no la entrada, al igual que mucha gente asumía en su día que Aristóteles debía estar siempre en lo cierto y no cuestionaban sus ideas.

Bugs de fase lunar

Se usa de forma humorística para referirse a bugs que parecen depender de factores aleatorios y casi esotéricos.

Fantasma en el código

Se llama así a cualquier bug que no se identifica durante la fase de pruebas. Esta clase de bugs se pueden encontrar a menudo en porciones de código que no suelen ejecutarse a menudo.

Vía

18 pensamientos en “Heisenbugs, Bohrbug, Mandelbugs, Schroedinbugs”

  1. Curioso. En el Stotle, una explicación alternativa podría ser la lógica aristotélica: para que un razonamiento sea válido, tienen que ser ciertas las premisas y correctos los silogismos o las argumentaciones. La entrada sería la premisa y el algoritmo o programa el razonamiento deductivo. Pero bueno, no me hagáis mucho caso xD

  2. Pingback: Heisenbugs, Bohrbug, Mandelbugs, Schroedinbugs (tipos de bugs)

  3. Yo tengo una en el curro que me manda muchos stotles. Es una putada, porque te revisas el código y no le encuentras explicación hasta que te dices “¿no será que se ha equivocado?”. También la culpa es mía por no hacer como House y presuponer que todo el mundo miente (o se equivoca).

  4. Por fin encontré el tipo de bug que tengo con el Xorg (un bug de Fase Lunar), ya que aveces me carga, y otras, tengo de reiniciar la mákina para ver si me carga.
    Lo raro es que esto no lo tenía antes de instalarme en otra partición el Kubuntu 8.04, será eso o un simple bug del ubuntu???

  5. jajaja lo que no entendi fue lo del gato era una historia mas larga y te falto un tanto o porke no se puede saber si un gato esta muerto encerrandolo en una kaja ?

    rayos ….lo ke me impresiono fue lo del SCHROEDINBUG lo investigare no sera acaso un extraño error de lectura de un compilador o akaso un compilador ke aplico los defaults mas estrictamente ke deberia hacerlo o algun compilador resuelvelotodo.

    saludos

    1. Es porque faltó poner que dentro de la caja hay un veneno que el gato debe comer para morir… Por eso al cerrar la caja, y no poder ver si el gato ha comido o no el veneno, se supone que el gato está tanto muerto como vivo. Eso es, claro, hasta que abramos la caja.

  6. Los Schroedinbugs se han usado en ocasiones de manera intencionada para evitar ingeniería inversa. Evidentemente, al ser intencionado no era un bug, pero se basaba en el mismo principio.

    En varias partes del programa ponías código que si se ejecutaba en un depurador el programa terminaba.

    No me preguntéis por qué sé esto. Una pista: nunca he hecho un programa así 😉 Y de hecho no sé cómo lo hacían realmente. Supongo que comprobaban el reloj de alguna manera (en una función que se llamaba cada segundo o yo qué sé).

  7. Muy buena la lista, la verdad es que era algo que desconocía totalmente y que como programador junior me interesa mucho para hablar con propiedad. Me han encantado los Schroedinbugs, seguramente porque también me pierde la quántica…

  8. Pingback: Chorradas para programadores II at Pisito en Madrid

  9. Pa cuando empece a programar en C tuve cientos de Heisenbugs relacionados a los punteros.
    Especialmente uno que solo ocurria en Visual Studio. Me molesto muchisimo que en modo debugger andara todo bien y en modo normal se muriera todo. En fin como tenia que compilar con Cyigwin y solo usaba Visual C++ porque no tenia un Cygwin compatible con vista no le di importancia pero si que lo probe miles de veces con Cygwin antes de entregarlo (era una tarea de la facultad).

  10. Pingback: 8 bugs famosos de la historia de la tecnología

  11. Pingback: Heisenbugs, Bohrbug, Mandelbugs, Schroedinbugs « Rincondigital – Blog

  12. Pingback: La jerga del programador

  13. Pingback: La jerga del programador « Argentina Geek 2.0

  14. Pingback: Jesús Rizo Lavalle » Blog Archive » La cagad… del programador

  15. Pingback: Los 20 improperios favoritos de los programadores

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.