featured image

Revisando una lista curiosa de catalogación de bichos (entendido como bugs, o errores informáticos), me he topado con una clasificación que viene de bastante tiempo atrás. Parece que hay gente que se encargó de catalogar los tipos de errores informáticos según su dificultad para ser resueltos o naturaleza. ¿Quieres saber más de estos bichos?

En principio, el término de error informático conocido como bicho (bug) se acuñó en 1945 cuando una polilla se introdujo en un Mark II quedándose enganchada a un relé y haciendo que la máquina funcionase mal. Los ingenieros lo documentaron, aquí se puede ver el documento con la polilla por Grace Hopper, programadora y creadora de lenguajes de programación como FLOW-MATIC o Cobol.

Polilla del Mark II de 1945

Pero parece que el término viene de aún más antiguo. En una carta que Thomas A. Edison escribió a Western Union acerca de un error detectado en el teléfono, Edison respondió:

Tenías razón parcialmente, encontré un 'bicho' en mi aparato, pero no fue en el propio teléfono. Fue del género 'callbellum'. El insecto parece encontrar condiciones para su existencia en todos los aparatos de llamada de teléfonos.

Carga de Thomas A. Edison a Western Union en 1878

De esta forma bromeaba e indicaba que el error (llamado 'bicho') era del tipo call-bellum haciendo referencia a Graham Bell y a sus líneas telefónicas. Parece que no se llevaban bastante bien.

Catalogación

Como decía al inicio lo que realmente me interesa en este artículo es la catalogación que se ha realizado de estos bichos con el tiempo. Sabemos ya de dónde procede el término. Ahora veremos algunos juegos de palabras que definen algunos de estos bichos en combinación con personajes famosos para identificar un poco la acción que realiza el bicho:

  • Heisenbugs: un error que desaparece o se altera cuando es investigado.
  • Bohrbugs: errores fáciles de detectar y corregir.
  • Mandelbugs: un error tan complejo que su comportamiento parece caótico.
  • Schroedinbugs: un error que se manifiesta únicamente cuando el software se usa de forma inusual.
  • Hindenbugs: un error tonto que por un descuido produce consecuencias graves.

Vamos a verlos un poco más en detalle.

Heisenbugs

La denominación incluye como parte inicial del nombre al físico Werner Heisenberg quien definió el efecto observador como simplemente observar una situación o un fenómeno necesariamente cambia este fenómeno. Por esta definición este bug toma su nombre.

El término apareció en 1985 acuñado por Jim Gray en un documento titulado Why Do Computers Stop and What Can Be Done About It? o en castellano ¿Por Qué los Ordenadores se Detienen y Qué Podemos Hacer al Respecto?. En el documento define el Heisenbug como el error que desaparece cuando es observado.

Es sabido que algunos errores que se producen por condiciones de carrera (race-conditions) o no esperar el tiempo suficiente para la compleción de un evento asíncrono cuando se someten a investigación y se agrega algún elemento ralentizador de la ejecución para que un observador pueda obtener información de qué está pasando estos errores simplemente desaparecen. En esas condiciones el error no se da porque estaba ligado al tiempo que tardaba en ejecutarse hasta el momento del error. Es el más claro ejemplo pero hay muchos otros más.

Bohrbugs

La denominación incluye como parte inicial del nombre al átomo de Bohr porque representa un error sólido y fácilmente detectable. Por este motivo es quizás el error más aburrido de investigar. Es fácil de encontrar y la mayoría de las veces fácil de corregir.

En el mismo documento de Jim Gray para constrastar la dificultad de observación del heisenbug se compara con la facilidad de detectar el bohrbug. Quizás sea la primera referencia de este tipo de error pero no está claro.

Mandelbugs

La denominación incluye como parte inicial del nombre al matemático Benoît Mandelbrot quien fue conocido por sus trabajos sobre los fractales. Por este motivo los errores con este nombre son considerados muy complejos, con muchas ramificaciones. Aún reduciendo y ampliando el foco sobre una sección se descubren nuevas ramificaciones y la investigación se hace interminable y caótica.

También se incluyen otros tipos de errores cuyo comportamiento no es caótico pero sus causas son tan complejas que no existe una solución práctica. Suele estar ligado a errores de diseño del sistema en lugar de errores de implementación o del programador.

Cuándo apareció el término no estoy seguro, he conseguido rastrear hasta The New Hacker Dictionary publicado en 1991 donde aparece ya como conocido, su definición pero no quién o cuándo se acuñó.

Schroedinbugs

La denominación incluye como parte inicial del nombre al físico y filósofo Erwin Schrödinger por su famoso experimento del gato. En el experimento se introduce un gato en una caja opaca con un vial de veneno. El vial de veneno puede romperse en cualquier momento y el gato moriría pero si el vial no se rompe el gato sigue estando vivo. Hasta que no se abra la caja no se sabrá y por tanto hasta ese momento ambas posibilidades son válidas: el gato está vivo y muerto al mismo tiempo. Es la base de la mecánica cuántica.

Cuando un programa se usa de forma inusual y el programador no ha comprobado esa forma se dice que se produce este error porque el programa puede funcionar y no. Ambas posibilidades existen al mismo tiempo y se produce el caso de con ciertos valores funciona y con otros no cuando se van comprobando (abriendo las cajas).

Al igual que los mandelbugs estos errores fueron definidos en el diccionario nuevo del Hacker de 1991 y no he podido encontrar referencias más antiguas.

Hindenbugs

La denominación incluye como parte inicial del nombre a la fuerza aérea alemana Hindenburg que en 1937 se incendió matando a docenas de personas. El desastre fue registrado y ampliamente usado como símbolo de emergencia trágica que sale muy mal. En informática se acuña como errores de código tontos: no escribir bien el nombre de una variable, olvidar el WHERE en una sentencia DELETE FROM de SQL o ejecutar por accidente algo parecido a rm -rf / como usuario root en un sistema tipo Unix.

La referencia más antigua que encontré sobre este tipo de errores es del WikiWikiWeb actualizado en 2014 por última vez.

Conclusiones

Todos estos errores han sido ampliamente documentados y referidos en estudios por informáticos teóricos y algunos programadores en búsqueda de soluciones aplicables para la detección y minorizar la aparición de algunos de estos errores informáticos. Muchos de ellos muy difíciles de detectar y corregir bajo ciertas circunstancias. En algunos casos no solo depende del programador sino también del diseño propio del lenguaje. Hay lenguajes que propician la aparición de ciertos tipos de errores y otros donde es más difícil producirlos (aunque no imposible).

Como decía Bjarne Stroustrup creador del lenguaje C++ sobre la analogía de cometer errores con el uso de armas. Siempre se acuña que alguien torpe con un arma sin seguro puede dispararse en el pie. Del lenguaje C se dice que es fácil dispararse en el pie programando en C, del lenguaje C++ decía: Es más difícil dispararse en el pie, pero cuando lo haces te vuelas la pierna entera. Quizás una mezcla de la dificultad de introducir errores pero cuando se producen, son directamente Hindenbugs.

¿Sabías de estos errores?, ¿has reconocido algunos cometidos como programador en algunos desarrollos?, ¿conoces más tipos?, ¿herramientas para evitarlos?, ¿cómo te defiendes de ellos? ¡Déjanos tu comentario!