Un “bug de software” es un error que afecta el comportamiento de un determinado programa. Odiados por los programadores, los “bugs” suelen ser bastante difíciles de eliminar. Para poder lidiar con ellos, los especialistas los han divididos en grupos según su comportamiento, y así es como ha surgido toda una clasificación zoológica de estos bichos. En esta ocasión, te presentamos a los más inusuales: Heisenbugs, Bohrbug, Mandelbugs, Schroedinbugs y demás integrantes de este nutrido grupo de errores.
La historia de los bugs
Cualquier persona que haya intentado programar un ordenador sabe lo que es un “bug”. La palabra en inglés significa “bicho” (insecto), y se la utiliza para referirse a los fallos que aparecen a lo largo del proceso de creación de programas de ordenador. Si bien pueden aparecer en cualquiera de las etapas del ciclo de vida del software, son más frecuentes durante la fase de desarrollo y programación. El origen de este término es tan viejo como la programación misma, e incluso hay quienes afirman que el término “bug” se utilizaba en la “era pre-ordenador”, cuando alguna polilla atascaba los delicados mecanismos de alguna máquina. En la informática comenzó a utilizarse en 1947, cuando Grace Murray Hopper (una licenciada en física y destacada matemática llamada), que trabajaba programando el ordenador Mark II, pegó en su cuaderno el nombre del bicho que había bloqueado uno de sus relés electromagnéticos.
El bug descubierto por Grace Murray Hopper fue el primero en ser famoso, pero no el único. La industria del software, aunque no tenga componentes físicos que puedan ser bloqueados por un bicho, suele tener problemas de funcionamiento que -siguiendo la tradición- también se denominan “bugs”. El software generalmente contiene errores. Esto es más evidente durante las etapas de desarrollo del mismo, ya que muchas personas se encuentran trabajando en diferentes partes del sistema, y varias de esas rutinas y subprogramas aún no están completamente terminadas. Tantos son los fallos que pueden aparecer, que los informáticos los han clasificado según su “comportamiento”.
Tipos de Bugs
Heisenbug es el nombre de uno de estos bichos y tiene su origen en el conocido “Principio de Incertidumbre de Heisenberg”. Heisenberg estableció limites, más allá de los cuales los conceptos de la física clásica no pueden ser empleados. Este principio afirma, por ejemplo, que no se puede determinar simultáneamente la posición y la cantidad de movimiento de una partícula. A veces se expresa esto como que el mismo acto de observar un experimento altera los resultados. Los programadores utilizan el término “heisenbug” para denominar a los errores que desaparecen o alteran su comportamiento al tratar de depurarlos. Esto ocurre por que cuando se intenta encontrar un error dentro de un programa se suele utilizar alguna herramienta -otro programa- o un estado de memoria diferente al habitual, lo que hace que el entorno en que se ejecuta el software bajo prueba no sea el mismo y el error desaparezca como por arte de magia, o “mute”, provocando efectos diferentes.
Los “Bohrbug”, denominados así por el modelo atómico de Bohr, es un tipo de error que se encuentra en las antípodas del anterior. Los informáticos utilizan esta denominación para aquellos errores que, no importa lo que se haga, mantienen un comportamiento constante. Otra variedad bastante frecuente es el “Mandelbug”, fallos con causas tan complejas que su comportamiento parece ser completamente caótico. La denominación se debe al conocido conjunto fractal descubierto por Benoit Mandelbrot, un monstruo matemático de enorme complejidad. Si estás programando, seguramente no querrás encontrarte con uno de estos.
Los “Schroedinbugs” parecen sacados de una novela de ciencia ficción. Son errores que no aparecen hasta que alguien lee el código y descubre que, en determinadas circunstancias, el programa podría fallar. A partir de ese momento, el maldito “Schroedinbug” comienza aparecer una y otra vez. Parece que algo así no puede existir, sin embargo, cualquiera que haya participado de un desarrollo más o menos grande seguramente ha tenido que lidiar con él. Su nombre se relaciona, por supuesto, con el físico Erwin Rudolf Josef Alexander Schrödinger y su famosa paradoja conocida como “paradoja del gato de Schrödinger”. En este caso, el error no se manifiesta hasta que el observador no sabe que está allí. Raro. Muy raro. Pero real.
El zoológico informático tiene más criaturas. Algunos no son son realmente problemas del software, pero lo parecen. Los programadores llaman “stole” al problema que se produce cuando luego de introducir datos que aparentan ser correctos (pero no lo son) se obtiene una (lógica) salida incorrecta. El problema, por supuesto, se encuentra en los datos introducidos, pero como el programador está convencido que estos son correctos, suele comenzar a reescribir partes de su programa tratando de eliminar un bug que, en realidad, no existe.
El nombre deriva de Aristóteles (Aristotle), de quien mucha gente asumía que debía estar siempre en lo cierto y no cuestionaba sus ideas. Más extraños aun son los denominados “Phase of the Moon bug” (o bugs de fase lunar), errores que parecen depender de factores aleatorios y que la mente del programador los atribuye a los motivos más esotéricos. “El programa falla cuando José está presente”, o “solo falla cuando la luna está en cuarto creciente”. Al igual que todos los anteriores, este bug es muy frecuente.
El último tipo de bug es quizás uno de los más comunes. Denominado “fantasma en el código”, suele esconderse en esas rutinas o subprogramas que rara vez se ejecutan. Su ubicación los hace muy difíciles de identificar durante las pruebas previas al lanzamiento del programa, y puede hacer que un producto fracase estrepitosamente al ser puesto a la venta. Aunque parezca extraño que algo así pueda ocurrir, basta con recordar el problema que tenia el microcódigo de los primeros microprocesadores Intel Pentium, que en determinadas condiciones arrojaban resultados erróneos al dividir dos números. Ese bug logró sobrevivir a todas las pruebas, y explotó cuando el chip ya estaba en la calle. Esperamos que esta galería de bichos te haya resultado interesante, y te esperamos en el foro para que comentes con cuales has tenido que medirte.
"Bug" en inglés significa "bicho" no insecto. Insecto es "insect".
No seas ridículo… todos saben que da lo mismo cómo los llames, un bicho es un insecto finalmente…
Los libros de biología no muerde.
Los insectos son bichos pero no todos los bichos son insectos. Vos sos el ridículo al intentar corregir algo que desconoces.
Me parece un artículo bastante interesante, aunque a decir verdad, jamás había escuchado hablar de este tipo de defectos (bugs como aquí los llaman), llevo 4 años como ingeniero de pruebas y nunca me había topado con esta data, gracias por la información.
Resulta completamente increíble que no hallas escuchado esos términos que inclusive un usuario computacional de nivel medio los ha oído mencionar… ingeniero…
La verdad estos nombres estan un poco rebuscados. El termino bug es bastante empleado en el desarrollo de software y los hay de distintos tipos.
Sacados de Wikipedia
División por cero
Ciclo infinito
Problemas aritméticos como desbordamientos (overflow) o subdesbordamientos (underflow).
Exceder el tamaño del array
Utilizar una variable no inicializada
Acceder a memoria no permitida (access violation)
Pérdida de memoria (memory leak)
Desbordamiento o subdesbordamiento de la pila (estructura de datos)
Buffer overflow
Deadlock
Indizado inadecuado de tablas en bases de datos.
#2 Ingeniero de pruebas y no saber de esto??? ya ni yo que apenas voy para la universidad (tengo 17 XD)
Ingeniero de pruebas y no haber escuchado de el tema jeje, ni yo que soy diseñador…
Más extraños aun son los denominados “Phase of the Moon bug” (o bugs de fase lunar), errores que parecen depender de factores aleatorios y que la mente del programador los atribuye a los motivos más esotéricos. “El programa falla cuando José está presente”, o “solo falla cuando la luna está en cuarto creciente”. Al igual que todos los anteriores, este bug es muy frecuente….
Mas frecuente de lo que parece…
uno que es muy comun y pasaron por alto es el winbug…….. XD XD XD
lapidacion en 3, 2, 1……………………….
Todos los que tenemos el gusto de programar sabemos, que el programador debe pensar en todas las posibles fallas de nuetro programa y pensarlo en todos los esenarios, esto significa algo mas de codigo para garantizar el buen funcionamiento, pero si el error es de el lenguaje en el que estamos desarrollando nuestra aplicacion, nos puede hacer la vida de cuadritos y ver que un lenguaje de programacion creado por las mentes mas brillantes como delphi requiere de un nuevo parche por encontrar tantos bugs.
excelente articulo, aunque no conocia tantas clasificaciones.
Yo casi siempre me encuentro con los de la fase de la luna y el del fantasma, aun así, en programación existe el control de errores en donde se destacan todas las excepciones que se producen al utilizar eventos.
Un programador novato añade código correctivo, un buen programador elimina el código erróneo. (no me acuerdo quien dijo esta frase xD).
Bugs hay miles de millones de tipos, nos es imposible clasificarlos a todos xD.
@es_binario
Delphi no es un lenguaje de programación, el lenguaje usado es Object Pascal. Y no encuentro Pascal precisamente un buen lenguaje de programación, así que es mejor evitar hacer afirmaciones de ese calibre cuando hablamos de lenguajes de programación.
Interesante post. No sabía que existiera tal clasificación de bugs.
una pregunta por curiosidad: ¿el porque aveces se hace un programa en 2 o mas lenguajes de programación, acaso el lenguaje tiene cierto punto no poder hacer algo que otro lenguaje si?
A veces un lenguaje tiene más capacidades o facilidades que otros para determinados algoritmos. Por ejemplo, Perl es usadopara el parseo de cadenas, C por su eficiencia, Lisp para la generación de código…
Ahhh buee….. mejor no leo nunca mas los comentarios, me voy a volver burro si le hago caso a algun comentario.
Hace mas de 15 años que programo y es la primera vez que escucho hablar de esos terminos, el ‘bug’ siempre fue ‘bug’. Cuanta gente al pedo que hay queriendo ponerles nombres a las cosas simples agregando mas sanata a la que ya existe en informatica, para darle de comer a muchos, cuando en realidad los unicos que laburan realmente son los analistas y los desarrolladores.
Falso, como la moneda de 3 pesos.
No has de saber nada de Pascal ni de Delphi, por eso escribes semejantes blasfemias XD.
¿Has oído de algún otro lenguaje, fuera de C o C++, en que se pueda crear drivers?
Exacto, en delphi, (DDDK, o Delphi Driver Developer Kit). Delphi es C++ con una sintaxis muchísimo más limpia.
C++ es más popular por que a Micro$oft le conviene que así sea, no por que sea el gran lenguaje.
El propio creador de C++, Bjarne Stroustrup, así lo creía!
Algunas frases del mismísimo creador de C++, por si no te convences:
*"C++ lo hace todo más difícil"
*"C++ es innecesariamente complicado"
*"C++ hace fácil dispararse en los propios pies"
*"C++ es un lenguaje difícil en el que puede existir una línea muy tenue entre una característica y un ‘bug’ "
Una función nativa de ése lenguaje, llamada strcat(), tremendamente mal diseñada, le ha dado de comer a las compañías antivirus por años! Y les ha dado diversión a los hackers también por años. En parte, es por estar hecho en ese lenguaje que Windows es tan inseguro.
¡Hola!
Vuelvo a repetir, ¡Delphi no es un lenguaje de programación! El lenguaje que usa Delphi (¡un IDE!) es Object Pascal:
"Delphi es un entorno de desarrollo de software diseñado para la programación de propósito general con énfasis en la programación visual. En Delphi se utiliza como lenguaje de programación una versión moderna de Pascal llamada Object Pascal."
Fuente – Wikipedia
Y pienso que crees que soy estúpido, porque mi lenguaje favorito no es C++ (es más, encuentro que es un lenguaje inútil y para ignorantes) si no CL. Pensar que un lenguaje es el que te da la capacidad de programar drivers es de ser un ignorante, eso depende del COMPILADOR que es el que finalmente crea el código que se va a ejecutar. Cualquier lenguaje de propósito general (Whitespace, Brainfuck también, por supuesto) te permitirán hacer drivers.
La función strcat es de C, lo primero, lo segundo, la seguridad de una función depende del proveedor de dicha función, en GNU Lib C dicha función es segurísima siempre y cuando la uses como debes (verificando que se tenga memoria suficiente). Y eres simplemente un ignorante diciendo que los hackers se han divertido con ella, ya que los hackers son programadores, lee un rato a Eric S. Raymond que te hará bien anda…
Y hablando de bichos? como anda el negocio de las granjas de insectos que estaban estudiando la gente de la ONU? es que desde aquel dia cada vez que veo una cucaracha o alguien me mencioan un bicho se me hace la boca agua!!! ;))
Desconocia esto =D
Ahhhh y yo tengo un bug con los botones de compartir en redes sociales. cada vez que soluciono uno parece otro.
eso me pasa por usar APIs de facebook, twitter y buzz.
Esto es real