Error de software
Un error de software, error o simplemente fallo (también conocido por el inglés bug) es un problema en un programa de computador o sistema de software que desencadena un resultado indeseado. Los programas que ayudan a la detección y eliminación de errores de programación de software son denominados depuradores (debuggers).
Entre las numerosas incidencias notables causadas por este tipo de error se incluyen la destrucción, en 1962, de la sonda espacial Mariner 1,[1] en 1996, del Ariane 5 501[2] y, en 2015, el Airbus A400M.[3]
Índice
1 Orígenes del término
2 Defectos de diseño de programas
3 Errores de programación comunes
4 Defectos de instalación o programación
5 Códigos de errores de lenguajes de programación
6 Véase también
7 Referencias
8 Enlaces externos
Orígenes del término
En 1947, ingenieros que trabajaban en el Mark II informaron que el ordenador sufrió un fallo en un relé electromagnético. Cuando se investigó ese relé, se encontró una polilla (bug) que provocó que el relé quedase abierto. Los ingenieros pegaron el insecto con cinta adhesiva en la bitácora con el comentario «First actual case of bug being found», en español «Primer caso real de bug encontrado».[4]
Este incidente es erróneamente referido como el origen de la utilización del término inglés bug («bicho») para indicar un problema en un aparato o sistema.[5][6] En realidad, el término bug ya formaba parte del idioma inglés, al menos desde que Thomas Alva Edison lo utilizó en 1889 refiriéndose a interferencias y mal funcionamiento en un fonógrafo.[7] Es posible que Hopper lo haya asociado por primera vez a la informática, en este caso, relacionado a un insecto real. Por otra parte, aunque durante los años 50 del siglo XX, Hopper también empleó en inglés el término debug al hablar de la depuración de errores en los códigos de programación, el primer uso registrado del término se encuentra en la Journal of the Royal Aeronautical Society de 1945.[8]
Defectos de diseño de programas
- Diseños con colores inapropiados para las personas que padecen daltonismo
- Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño
- Diseños que fuerzan el uso del ratón sin dejar alternativas de teclado para personas con disfunciones motrices
- Diseños con implicaciones culturales, por ejemplo usando partes del cuerpo que en una determinada cultura sean objeto de vergüenza o burla o símbolos con características de identidad cultural o religiosa
- Estimar que el equipo donde se instalará tiene determinadas características (como la resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o conectividad a Internet) propias de un equipo de gama alta, en vez de diseñar el software para su ejecución en equipos normales
Errores de programación comunes
- Punto y coma ( ; )
- 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 (Violación de acceso)
Pérdida de memoria (memory leak)- Desbordamiento o subdesbordamiento de la pila (estructura de datos)
Desbordamiento de búfer (buffer overflow)
Bloqueo mutuo (deadlock)- Indizado inadecuado de tablas en bases de datos.
- Desbordamiento de la pila de recursión, cuando se dejan demasiadas llamadas en espera.
Defectos de instalación o programación
- Eliminación o sustitución de bibliotecas comunes a más de un programa o del sistema (DLL Hell).
- Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto.
- Suponer que el usuario tiene una conexión permanente a internet.
- Utilizar como fuente enlaces simbólicos a ficheros que pueden cambiar de ubicación.
Códigos de errores de lenguajes de programación
La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores que permiten a los programadores manejar las fallas de los programas de una manera eficiente y que no resulte agresiva con el usuario final. Dichos errores son de compilación y errores en tiempo de ejecución.
Los errores de compilación normalmente inhiben que el código fuente derive en un programa ejecutable, mientras que los errores en tiempo de ejecución son situaciones específicas en las que un evento externo al programa impide su ejecución. Regularmente un programador eficiente debe intentar imaginar como debe responder ante esos eventos de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan el problema. Así por ejemplo un bloque de error no manejado podría hacer lo siguiente:
Abre el archivo "miarchivo" para escritura
comienza a escribir datos en mi archivo
cierra el archivo
Si "miarchivo" no existe (o el programa o el usuario no tienen privilegios suficientes para abrirlo), el sistema operativo regresará un error que el programa no atrapará y tendremos un mensaje como "El archivo "miarchivo" no puede ser abierto para escritura" y botones para reintentar, cancelar y abortar (en el sistema operativo Windows), que no tendrán otra acción que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea dando por terminado violentamente el programa. Un código que permitiese atrapar el error en tiempo de ejecución sería:
Abre el archivo "miarchivo" para escritura
Si el sistema operativo lo permite
comienza a escribir datos en "miarchivo"
si no lo permitió
informa al usuario de lo que sucede
regresa al usuario a un punto donde no haya conflicto (el menú principal, por ejemplo)
Continúa operando normalmente
Los diferentes lenguajes de programación permiten diferentes construcciones lógicas a los programadores para atrapar y resolver errores en tiempo de ejecución, como pueden ser las sentencias assert, try y on error en diferentes lenguajes de programación.
Véase también
- Last Error
- Agujero de seguridad
- Bugtraq
- Bugzilla
- Hotfix
- Depurador
- Depuración de programas
- Ingeniería de software
- Exploit
- Seguridad informática
Common Vulnerabilities and Exposures (CVE)- Packet Storm
Referencias
↑ (en inglés) «History's Worst Software Bugs.» Pág. 1. Wired. Consultado el 20 de marzo de 2014.
↑ (en inglés) «History's Worst Software Bugs.» Pág. 2. Wired. Consultado el 20 de marzo de 2014.
↑ (en inglés) «Airbus Cites Assembly Problem in A400M Crash.» Consultado el 22 de junio de 2015.
↑ (en inglés) «Rear Admiral Grace Murray Hopper, USNR, (1906-1992)»: imagen: Photo #: NH 96566-KN. Naval History and Heritage Command. Consultado el 20 de marzo de 2014.
↑ bug
↑ La polilla que voló dentro de un ordenador y el origen de «bug informático» | Microsiervos (Leyendas Urbanas)
↑ «Was the first computer ‘bug’ a real insect?» (html). Oxford Living Dictionaries (en en-uk). Archivado desde el original el 2 de abril de 2017. Consultado el 15 de julio de 2018. «The term in fact originates not with computer pioneers, but with engineers of a much earlier generation. The first example cited in the 20-volume historical Oxford English Dictionary is from the Pall Mall Gazette of 11 March 1889: "Mr. Edison, I was informed, had been up the two previous nights discovering 'a bug' in his phonograph - an expression for solving a difficulty, and implying that some imaginary insect has secreted itself inside and is causing all the trouble." It seems clear from this that the original ‘bug’, though it was indeed an insect, was in fact imaginary.»
↑ (en inglés) «bug». World Wide Words. Consultado el 20 de marzo de 2014.
Enlaces externos
Wikimedia Commons alberga una categoría multimedia sobre Error de software.- Buscador de Vulnerabilidades por productos de INTECO-CERT