fbpx
Wikipedia

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 software son denominados depuradores (en inglés, debuggers).

Entre las numerosas incidencias notables causadas por este tipo de error están la máquina de radioterapia Therac-25 en la década de 1980, la destrucción de la sonda espacial Mariner 1 en 1962,[1]​ del Ariane 5 501 en 1996,[2]​ y el Airbus A400M en 2015.[3]​También fueron famosos los incidentes de la red de AT&T en 1990, o los accidentes del Boeing 737 MAX en 2018 y 2019 que llevaron a la suspensión de sus vuelos durante meses por fallos en el software MCAS.[4]

En 2002 un estudio encargado por el National Institute of Standards and Technology del Department of Commerce (Ministerio de Comercio) de Estados Unidos concluyó que los errores informáticos costaban a la economía estadounidense 59 500 millones de USD al año, un 0.6% del PIB.[5]


Orígenes del término

 
Foto del origen de la leyenda acerca del primer bug informático conocido.

El 9 de septiembre de 1947, la física y matemática Grace Murray Hopper y otros que trabajaban en la Universidad de Harvard en el Mark II informaron de que el ordenador sufrió un fallo en el relé electromagnético #70 del panel F. Cuando se investigó ese relé, el equipo encontró una polilla (bug) electrificada que provocó que el relé quedase abierto. Hopper pegó el insecto con cinta adhesiva en la bitácora con el comentario:[6]

‘First actual case of bug being found.‘
‘Primer caso real de «bug» encontrado.’

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.[7][8]​ En realidad, el término bug ya formaba parte del idioma inglés, al menos desde que Thomas Alva Edison lo utilizó en sus notas en 1872, en una carta en 1878 para referirse a defectos mecánicos o eléctricos,[9]​ y en 1889 refiriéndose a interferencias y mal funcionamiento en un fonógrafo.[10]​ Es posible que Hopper lo haya asociado por primera vez a la informática, en este caso, relacionado con 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: [11]

‘It ranged from the pre-design development of essential components, through the stage of type test and flight test and ‘debugging’ right through to later development of the engine.‘
‘Iba desde el desarrollo previo del diseño de los componentes esenciales, pasando por la etapa de prueba, vuelo de prueba y «debugging» y terminando con el desarrollo del motor.’

Errores de programación comunes

  • División por cero
  • Ciclo infinito
  • Problemas aritméticos como desbordamientos (overflow) o subdesbordamientos (underflow).
  • Exceder el tamaño del array definido
  • Utilizar una variable no inicializada
  • Errores tipográficos varios, por ejemplo confundir el dígito "0" con la vocal "O", confundir el dígito "1" con la letras "I" o "l", o escribir "," en lugar de "." como parte de nombres de variables en lenguajes donde no es necesario declarar las variables antes de usarlas. Por ejemplo, en Fortran IV los espacios no cuentan, por lo que cambiar una coma por un punto en un bucle DO 100 I=1. 10 equivale a la asignación DO100I = 1.10 que por ser una instrucción válida no la reporta el compilador.
  • Usar constantes mágicas, es decir que en lugar de definir una variable o macro para definir un parámetro que puede cambiar, poner el valor en el código. Por ejemplo, declarar un arreglo float X[10] y usarla en bucles for i=0 to 10 en varias partes del programa en lugar de definir una constante XSize=10; float X[XSize]; y usar for i=0 to XSize, con lo que se evitan omisiones cuando se cambie la dimensión de X, ya que basta con con cambiar XSize=20 en lugar de buscar en todo el código las constantes mágicas 10 para cambiarlas por 20.
  • Acceder a memoria no permitida (Violación de acceso)
  • Pérdida de memoria (memory leak)
  • Desbordamiento o subdesbordamiento de la pila (estructura de datos) (Stack overflow)
  • Desbordamiento de búfer (buffer overflow)
  • Bloqueo mutuo (deadlock)
  • Indizado inadecuado de tablas en bases de datos.
  • Corrupción de las bases de datos relacionales por no estar normalizadas.
  • Desbordamiento de la pila de recursión, cuando se dejan demasiadas llamadas en espera.
  • Programar por ensayo y error, en lugar de desarrollar los programas sistemáticamente.
  • No atender los mensajes de advertencia al momento de compilar un programa.
  • Errores que resultan del uso indiscriminado de variables de alcance global.
  • Errores por no declarar el tipo de las variables.
  • Errores que emergen porque el programador no toma en cuenta la semántica del lenguaje de programación. Por ejemplo, desconocer si el alcance es léxico o dinámico.
  • Errores de sintaxis, por ejemplo, no terminar una instrucción con un punto y coma ( ; ) en un lenguaje de programación que lo requiere.
  • No documentar correctamente el programa, provoca el no entender qué hace, lo que acarrea errores por no tener claro lo que hace.
  • Condición de carrera (race condition)
  • Uso incorrecto de API.
  • Incompatibilidad de sistemas.

Defectos de instalación o programación

 
Pantalla de ordenador con error de software en la Puerta 11 del Aeropuerto de Santiago-Pudahel
  • 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. 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.

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
  • 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

Implicaciones

El tipo y cantidad de daño producido por un error de software puede afectar los procesos de toma de decisión y la política sobre la calidad del software. En aplicaciones para el viaje espacial tripulado y para el automóvil los controles de calidad del software deben ser superiores.

Casos notables

Y2K

 
Y2K

El problema del año 2000 (Y2K) pudo llegar a ser un colapso económico porque muchos programas interpretarían el año 2000 como si fuera el año 1900. Los trabajos de adaptación y corrección de programas evitaron problemas graves.

Knight Capital

Disrupción de la bolsa de Nueva York en 2012. El 1 de agosto de 2012 Knight Capital provocó una disrupción del mercado de bolsa que le llevó a perder en dos días el 75% de su capitalización bursátil. Knight Capital disponía del software SMARS que gestionaba de forma automatizada, a alta velocidad y de forma algorítmica las órdenes para ejecutar en el mercado. Dentro del código tenía la funcionalidad «Power Peg», que ya no usaba desde 2003. No se había borrado y estaba disponible si se la llamaba. El contador de las acciones vendidas en cada orden pasó a realizarla otra parte del código fuera de «Power Peg» desde 2005. Comenzando el 27 de julio de 2012 se inició la instalación del nuevo software SMARS por fases en los servidores durante varios días. El nuevo software contenía una etiqueta que en el antiguo activaba «Power Peg». Un técnico olvidó realizar una copia del nuevo código RLP a uno de los ocho servidores SMARS que gestionaban las órdenes de compra y venta de acciones automatizadas. El 1 de agosto de 2012 el servidor no actualizado al ejecutar el antiguo código «Power Peg» mandó millones de órdenes porque el contador de acciones ejecutadas en cada orden no se comunicaba a SMARS y entonces el proceso de compra no se paraba nunca. En un intento de solucionar el problema desinstalaron el nuevo código RLP de los siete servidores que funcionaban correctamente, lo que agravó el problema. En 45 minutos ejecutó 4 millones de operaciones en 154 valores moviendo 397 millones de acciones, cuando en su lugar debería haber ejecutado 212 órdenes de pequeña entidad. Knight Capital perdió 460 millones de USD y la SEC le impuso una multa de 12 millones de USD por violar regulaciones de bolsa.[12]

Boeing 737 MAX

 
Boeing 737 MAX 8

Dos accidentes del avión Boeing 737 MAX en 2018 y 2019 llevaron a que el 13 de marzo de 2019 la FAA iniciara la Suspensión de vuelo del Boeing 737 MAX durante meses por fallos en el software MCAS (Sistema de Aumento de Características de Maniobra, en inglés, Manoeuvring Characteristics Augmentation System).[4]​ Fallecieron 346 personas en los accidentes. La FAA permitía a fabricantes como Boeing emitir certificados de vuelo para sus aviones. En noviembre de 2019 la FAA suspendió la capacidad de Boeing para emitir certificados para los aviones MAX.

El MCAS en el MAX se diseñó para activarse usando la señal de uno de los dos sensores de ángulo de ataque del avión, haciéndolo susceptible al punto único de fallo (Single point of failure). Cuando MCAS detecta que el avión está en modo manual con los flaps arriba y con un ángulo de ataque elevado, ajusta el estabilizador horizontal para bajar el morro y que el piloto no suba demasiado rápido y produzca una caída en pérdida. Aunque el sistema MCAS podía causar picados no intencionados, no se mencionaba en los manuales de vuelo y entrenamiento, por lo que los pilotos lo desconocían.[13]​ En marzo de 2019 quedaron en tierra 387 aviones MAX que realizaban 8600 vuelos semanales para 59 compañías aéreas. En enero de 2020 Boeing calculó que en 2019 perdió 18 400 millones de USD y le cancelaron 183 pedidos de MAX. En 2019 el precio de un Boeing 737 MAX iba de 100 a 135 millones de USD.

Therac-25

 
Simulación de la pantalla de entrada de un Therac-25.
 
Simulación de la pantalla de entrada de un Therac-25 con el error 54.
 
Desbordamiento de una variable octeto (8 bits).

La Therac-25 fue una máquina de radioterapia producida por AECL, sucesora de los modelos Therac-6 y Therac-20 (las unidades anteriores fueron producidas en asociación con CGR). El aparato estuvo comprometido en al menos seis accidentes entre 1985 y 1987, en los que varios pacientes recibieron sobredosis de radiación. Tres de los pacientes murieron como consecuencia directa. Estos accidentes pusieron en duda la fiabilidad del control por software de sistemas de seguridad crítica, convirtiéndose en caso de estudio en la informática médica y en la ingeniería de software. La comisión investigadora concluyó que las causas primarias de los accidentes fueron malas prácticas de desarrollo, análisis de requerimientos y un mal diseño de software, y no por errores aislados en el código fuente. En particular, el programa de la Therac-25 fue diseñado de tal manera que era casi imposible encontrar y subsanar fallos automáticamente.

El sistema no usaba un sistema operativo estándar. En su lugar operaba con un sistema operativo propio escrito en lenguaje ensamblador PDP-11 para funcionar en el ordenador 32K PDP-11/23.[14]​ Cuando el sistema notificaba un error y detenía los rayos X, solamente mostraba el mensaje «MALFUNCTION» (error de funcionamiento) seguido de un número del 1 al 64. El manual de la máquina no explicaba el problema ni mostraba los códigos de error, y por lo tanto el operario acababa por cerrar la advertencia y proceder con el tratamiento. El personal de AECL y los operadores de las máquinas inicialmente no creyeron en las quejas de los pacientes por la alta confianza que tenían en la máquina.

La ingeniería había reutilizado código de modelos más antiguos (Therac-6 y Therac-20), que sí que contaban con sistemas de seguridad mecánicos.

El fallo sólo ocurría cuando se introducía rápidamente una secuencia particular de teclas en la terminal VT100, que controlaba la computadora PDP-11 de la Therac-25. El operador había rellenado todas las casillas y estaba en la casilla de órdenes cuando se daba cuenta que había un error en la casilla del tipo de haz que contenía una X (Rayos X) cuando debía contener una E (haz de Electrones). Para corregirlo usaba el cursor hasta subir a la casilla, escribir una E y bajar con el cursor hasta la casilla de órdenes, escribir una B y pulsar Entrar. La secuencia completa era E B Entrar. Si esta secuencia se realizaba en menos de 8 segundos la máquina producía una radiación que podía llegar a ser hasta 1000 veces la que se pretendía aplicar.

Esto ocurría muy raramente y se desconocía que existiera tal error de condición de carrera (race condition) en el que la salida o estado de un proceso es dependiente de una secuencia de eventos que se ejecutan en orden arbitrario y van a trabajar sobre un mismo recurso compartido. Se puede producir un error cuando dichos eventos no llegan (se ejecutan) en el orden que el programador esperaba.

El programa cambiaba la variable bandera «Class3» incrementándola cada vez que ejecutaba la rutina de prueba de ajuste, en vez de asignarle un valor fijo. La variable «Class3» tenía 1 byte de longitud y sus valores posibles iban de 0 a 255. Cuando el valor era 255 y se sumaba 1, la variable «Class3» pasaba a valer 0. Cuando la variable «Class3» valía 0 indicaba que se podía lanzar el haz de electrones y no se comprobaba la posición del colimador.[14]

La rutina de prueba de ajuste se ejecutaba cientos de veces en cada sesión para un paciente. Una vez de cada 256 ejecuciones de la rutina, la variable «Class3» tenía el valor 0 (no intencionado), el colimador no se comprobaba y cualquier fallo en el colimador no se detectaba. La sobredosis se producía si el operador apretaba el botón Set en el preciso momento en que la variable «Class3» pasaba de 255 a 0 (desbordamiento). Entonces el software aplicaba la máxima potencia de 25 MeV sin tener el objetivo en su sitio y sin escanear. AECL corrigió este problema asignando a la variable «Class3» un valor distinto de 0 cada vez que pasaba por la rutina de prueba de ajuste, en lugar de incrementarla.[14][15]

OpenSSL

 
Explicación simplificada del error «Heartbleed».

Un usuario del paquete Debian OpenSSL notificó un aviso para su rectificación. En el proceso de arreglo de la incidencia un programador estropeó el generador de números aleatorios. El parche defectuoso se lanzó en septiembre de 2006 con la versión OpenSSL 0.9.8c-1. Hasta abril de 2008 no se descubrió el problema. Todas las claves criptográficas generadas con esa versión están comprometidas porque los números «aleatorios» son fácilmente predecibles, y los datos encriptados con ellas también son vulnerables. Esto supuso una amenaza en muchas aplicaciones que se apoyan en la encriptación como S/MIME, Tor, conexiones protegidas por SSL o TLS y SSH. Se corrigió en la versión OpenSSL 0.9.8c-4etch3.[16]

Heartbleed (español: hemorragia de corazón) es un agujero de seguridad de software en la biblioteca de código abierto OpenSSL, solo vulnerable en su versión 1.0.1f, que permite a un atacante leer la memoria de un servidor o un cliente, permitiéndole por ejemplo, conseguir las claves privadas SSL de un servidor.[17]

El código vulnerable fue adoptado y usado ampliamente con el lanzamiento de la versión 1.0.1 de OpenSSL el 14 de marzo de 2012. El soporte de Heartbeat estaba habilitado de forma predeterminada, causando que las versiones afectadas fueran vulnerables por defecto.[18][19][20]

La «RFC 6520 Heartbeat Extension» prueba los enlaces de comunicación segura TLS/DTLS al permitir que un ordenador en un extremo de una conexión envíe un mensaje de "solicitud de latido de corazón" ("Heartbeat Request"), que consiste en una carga útil, típicamente una cadena de texto, junto con la longitud de dicha carga útil como un entero de 16-bits. El equipo receptor debe entonces enviar la misma carga exacta de vuelta al remitente. Las versiones afectadas de OpenSSL asignan un búfer de memoria para el mensaje a devolver basado en el campo de longitud en el mensaje de solicitud, sin tener en cuenta el tamaño real de la carga útil de ese mensaje. Debido a esta falla de revisión de los límites apropiados, el mensaje devuelto consta de la carga útil, posiblemente seguido de cualquier otra cosa que sea que esté asignada en el buffer de memoria. La Agencia Tributaria de Canadá reportó el robo de números de la Seguridad Social que pertenecen a 900 contribuyentes, y declaró que fueron accedidos a través de la explotación del fallo durante un período de seis horas el 8 de abril de 2014.[21]​ Cuando el ataque se descubrió, la agencia cerró su sitio web y amplió el plazo de presentación de los contribuyentes del 30 de abril al 5 de mayo.[22]​ La primera versión corregida, 1.0.1g, fue lanzada el día 7 de abril de 2014.

En la cultura popular

  • En la película "Brazil" (1985), un error en un apellido debido a una mosca caída en la cabecera de un teletipo provoca la detención errónea de un ciudadano inocente, con consecuencias fatales para este; una suerte de dramatización basada en el caso de la polilla en el ordenador Mark II en 1947.
  • La novela de Ellen Ullman The Bug (2004) trata de la búsqueda de error de software por parte de una probadora de software y un programador. El bug es apodado «The Jester» por su tendencia a aparecer en los momentos más inoportunos y amenazando el destino de la compañía.[23]
  • La película canadiense Control Alt Delete (2008) es una comedia que trata de un programador que a finales de 1999 trata de corregir errores para prevenir los problemas del error 2YK.[24]

Véase también

Referencias

  1. (en inglés) «History's Worst Software Bugs.» Pág. 1. Wired. Consultado el 20 de marzo de 2014.
  2. (en inglés) «History's Worst Software Bugs.» Pág. 2. Wired. Consultado el 20 de marzo de 2014.
  3. (en inglés) «Airbus Cites Assembly Problem in A400M Crash.» Consultado el 22 de junio de 2015.
  4. O'Kane, Sean (6 de febrero de 2020). «Boeing finds another software problem on the 737 Max». The Verge (en inglés). Consultado el 16 de mayo de 2020. 
  5. . 10 de junio de 2009. Archivado desde el original el 10 de junio de 2009. Consultado el 16 de mayo de 2020. 
  6. (en inglés) Naval History and Heritage Command. Consultado el 20 de marzo de 2014.
  7. bug
  8. La polilla que voló dentro de un ordenador y el origen de «bug informático» | Microsiervos (Leyendas Urbanas)
  9. Magoun, Alexander B. (1 de agosto de 2013). «Did You Know? Edison Coined the Term “Bug”». IEEE Spectrum (en inglés). Consultado el 16 de mayo de 2020. 
  10. (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.» 
  11. «Bug». World Wide Words (en inglés). Consultado el 16 de mayo de 2020. 
  12. SEC, ed. (16 de octubre de 2013). «SECURITIES EXCHANGE ACT OF 1934 Release No. 70694 / October 16, 2013». SEC (en inglés). Consultado el 16 de mayo de 2020. 
  13. Graham Dunn (13 de marzo de 2020). «Timeline of the twists and turns in the grounding of the Boeing 737 Max». Flightglobal. 
  14. Nancy Leveson (1995). . En Addison-Wesley, ed. Safeware:System Safety and Computers. Archivado desde el original el 16 de febrero de 2008. Consultado el 16 de mayo de 2020. 
  15. «Computerized Radiation Therapy (PDF) reported by TROY GALLAGHER». Consultado el 12 de febrero de 2011. 
  16. «DSA-1571-1 openssl -- predictable random number generator». Consultado el 16 de mayo de 2020. 
  17. Goodin, Dan (7 de abril de 2014). «Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping». ArsTechnica.com (en inglés). Consultado el 24 de abril de 2014. 
  18. Codenomicon Ltd (8 de abril de 2014). «Heartbleed Bug». 
  19. Goodin, Dan (8 de abril de 2014). «Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping». Ars Technica. 
  20. Hagai Bar-El (9 de abril de 2014). «OpenSSL "Heartbleed" bug: what's at risk on the server and what is not». 
  21. Heartbleed bug: 900 SINs stolen from Revenue Canada, CBC News, 14 de abril de 2014 .
  22. , Vancouver Sun, 13 de abril de 2014, archivado desde el original el 16 de junio de 2014, consultado el 9 de junio de 2014 .
  23. Ullman, Ellen (2004). Pushkin Press, Limited, ed. The Bug. ISBN 9781908968142. 
  24. «Control Alt Delete». IMDB (en inglés). Consultado el 17 de mayo de 2020. 

Enlaces externos

  •   Datos: Q179550
  •   Multimedia: Computer bugs

error, software, redirige, aquí, para, otras, acepciones, véase, desambiguación, error, software, error, simplemente, fallo, también, conocido, inglés, problema, programa, computador, sistema, software, desencadena, resultado, indeseado, programas, ayudan, det. Bug redirige aqui Para otras acepciones vease Bug desambiguacion Un error de software error o simplemente fallo tambien conocido por el ingles bug es un problema en un programa de computador o sistema de software que desencadena un resultado indeseado Los programas que ayudan a la deteccion y eliminacion de errores de software son denominados depuradores en ingles debuggers Entre las numerosas incidencias notables causadas por este tipo de error estan la maquina de radioterapia Therac 25 en la decada de 1980 la destruccion de la sonda espacial Mariner 1 en 1962 1 del Ariane 5 501 en 1996 2 y el Airbus A400M en 2015 3 Tambien fueron famosos los incidentes de la red de AT amp T en 1990 o los accidentes del Boeing 737 MAX en 2018 y 2019 que llevaron a la suspension de sus vuelos durante meses por fallos en el software MCAS 4 En 2002 un estudio encargado por el National Institute of Standards and Technology del Department of Commerce Ministerio de Comercio de Estados Unidos concluyo que los errores informaticos costaban a la economia estadounidense 59 500 millones de USD al ano un 0 6 del PIB 5 Indice 1 Origenes del termino 2 Errores de programacion comunes 3 Defectos de instalacion o programacion 4 Codigos de errores de lenguajes de programacion 5 Defectos de diseno de programas 6 Implicaciones 7 Casos notables 7 1 Y2K 7 2 Knight Capital 7 3 Boeing 737 MAX 7 4 Therac 25 7 5 OpenSSL 8 En la cultura popular 9 Vease tambien 10 Referencias 11 Enlaces externosOrigenes del termino Editar Foto del origen de la leyenda acerca del primer bug informatico conocido El 9 de septiembre de 1947 la fisica y matematica Grace Murray Hopper y otros que trabajaban en la Universidad de Harvard en el Mark II informaron de que el ordenador sufrio un fallo en el rele electromagnetico 70 del panel F Cuando se investigo ese rele el equipo encontro una polilla bug electrificada que provoco que el rele quedase abierto Hopper pego el insecto con cinta adhesiva en la bitacora con el comentario 6 First actual case of bug being found Primer caso real de bug encontrado Este incidente es erroneamente referido como el origen de la utilizacion del termino ingles bug bicho para indicar un problema en un aparato o sistema 7 8 En realidad el termino bug ya formaba parte del idioma ingles al menos desde que Thomas Alva Edison lo utilizo en sus notas en 1872 en una carta en 1878 para referirse a defectos mecanicos o electricos 9 y en 1889 refiriendose a interferencias y mal funcionamiento en un fonografo 10 Es posible que Hopper lo haya asociado por primera vez a la informatica en este caso relacionado con un insecto real Por otra parte aunque durante los anos 50 del siglo XX Hopper tambien empleo en ingles el termino debug al hablar de la depuracion de errores en los codigos de programacion El primer uso registrado del termino se encuentra en la Journal of the Royal Aeronautical Society de 1945 11 It ranged from the pre design development of essential components through the stage of type test and flight test and debugging right through to later development of the engine Iba desde el desarrollo previo del diseno de los componentes esenciales pasando por la etapa de prueba vuelo de prueba y debugging y terminando con el desarrollo del motor Errores de programacion comunes EditarDivision por cero Ciclo infinito Problemas aritmeticos como desbordamientos overflow o subdesbordamientos underflow Exceder el tamano del array definido Utilizar una variable no inicializada Errores tipograficos varios por ejemplo confundir el digito 0 con la vocal O confundir el digito 1 con la letras I o l o escribir en lugar de como parte de nombres de variables en lenguajes donde no es necesario declarar las variables antes de usarlas Por ejemplo en Fortran IV los espacios no cuentan por lo que cambiar una coma por un punto en un bucle DO 100 I 1 10 equivale a la asignacion DO100I 1 10 que por ser una instruccion valida no la reporta el compilador Usar constantes magicas es decir que en lugar de definir una variable o macro para definir un parametro que puede cambiar poner el valor en el codigo Por ejemplo declarar un arreglo float X 10 y usarla en bucles for i 0 to 10 en varias partes del programa en lugar de definir una constante XSize 10 float X XSize y usar for i 0 to XSize con lo que se evitan omisiones cuando se cambie la dimension de X ya que basta con con cambiar XSize 20 en lugar de buscar en todo el codigo las constantes magicas 10 para cambiarlas por 20 Acceder a memoria no permitida Violacion de acceso Perdida de memoria memory leak Desbordamiento o subdesbordamiento de la pila estructura de datos Stack overflow Desbordamiento de bufer buffer overflow Bloqueo mutuo deadlock Indizado inadecuado de tablas en bases de datos Corrupcion de las bases de datos relacionales por no estar normalizadas Desbordamiento de la pila de recursion cuando se dejan demasiadas llamadas en espera Programar por ensayo y error en lugar de desarrollar los programas sistematicamente No atender los mensajes de advertencia al momento de compilar un programa Errores que resultan del uso indiscriminado de variables de alcance global Errores por no declarar el tipo de las variables Errores que emergen porque el programador no toma en cuenta la semantica del lenguaje de programacion Por ejemplo desconocer si el alcance es lexico o dinamico Errores de sintaxis por ejemplo no terminar una instruccion con un punto y coma en un lenguaje de programacion que lo requiere No documentar correctamente el programa provoca el no entender que hace lo que acarrea errores por no tener claro lo que hace Condicion de carrera race condition Uso incorrecto de API Incompatibilidad de sistemas Defectos de instalacion o programacion Editar Pantalla de ordenador con error de software en la Puerta 11 del Aeropuerto de Santiago Pudahel Eliminacion o sustitucion de bibliotecas comunes a mas de un programa o del sistema DLL Hell Reiniciar arbitrariamente la sesion de un usuario para que la instalacion tenga efecto Suponer que el usuario tiene una conexion permanente a internet Utilizar como fuente enlaces simbolicos a ficheros que pueden cambiar de ubicacion Codigos de errores de lenguajes de programacion EditarLa mayor parte de los lenguajes de programacion 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 compilacion y errores en tiempo de ejecucion Los errores de compilacion normalmente inhiben que el codigo fuente derive en un programa ejecutable mientras que los errores en tiempo de ejecucion son situaciones especificas en las que un evento externo al programa impide su ejecucion 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 Por ejemplo un bloque de error no manejado podria 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 regresara un error que el programa no atrapara 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 tendran otra accion que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea dando por terminado violentamente el programa Un codigo que permitiese atrapar el error en tiempo de ejecucion seria Abre el archivo miarchivo para escritura Si el sistema operativo lo permite comienza a escribir datos en miarchivo si no lo permitio informa al usuario de lo que sucede regresa al usuario a un punto donde no haya conflicto el menu principal por ejemplo Continua operando normalmente Los diferentes lenguajes de programacion permiten diferentes construcciones logicas a los programadores para atrapar y resolver errores en tiempo de ejecucion como pueden ser las sentencias assert try y on error en diferentes lenguajes de programacion Defectos de diseno de programas EditarDisenos con colores inapropiados para las personas que padecen daltonismo Disenos que usan textos con tipografias de dificil lectura por su tamano o diseno Disenos que fuerzan el uso del raton sin dejar alternativas de teclado para personas con disfunciones motrices Estimar que el equipo donde se instalara tiene determinadas caracteristicas como la resolucion 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 disenar el software para su ejecucion en equipos normalesImplicaciones EditarEl tipo y cantidad de dano producido por un error de software puede afectar los procesos de toma de decision y la politica sobre la calidad del software En aplicaciones para el viaje espacial tripulado y para el automovil los controles de calidad del software deben ser superiores Casos notables EditarY2K Editar Y2K Articulo principal Problema del ano 2000 El problema del ano 2000 Y2K pudo llegar a ser un colapso economico porque muchos programas interpretarian el ano 2000 como si fuera el ano 1900 Los trabajos de adaptacion y correccion de programas evitaron problemas graves Knight Capital Editar Disrupcion de la bolsa de Nueva York en 2012 El 1 de agosto de 2012 Knight Capital provoco una disrupcion del mercado de bolsa que le llevo a perder en dos dias el 75 de su capitalizacion bursatil Knight Capital disponia del software SMARS que gestionaba de forma automatizada a alta velocidad y de forma algoritmica las ordenes para ejecutar en el mercado Dentro del codigo tenia la funcionalidad Power Peg que ya no usaba desde 2003 No se habia borrado y estaba disponible si se la llamaba El contador de las acciones vendidas en cada orden paso a realizarla otra parte del codigo fuera de Power Peg desde 2005 Comenzando el 27 de julio de 2012 se inicio la instalacion del nuevo software SMARS por fases en los servidores durante varios dias El nuevo software contenia una etiqueta que en el antiguo activaba Power Peg Un tecnico olvido realizar una copia del nuevo codigo RLP a uno de los ocho servidores SMARS que gestionaban las ordenes de compra y venta de acciones automatizadas El 1 de agosto de 2012 el servidor no actualizado al ejecutar el antiguo codigo Power Peg mando millones de ordenes porque el contador de acciones ejecutadas en cada orden no se comunicaba a SMARS y entonces el proceso de compra no se paraba nunca En un intento de solucionar el problema desinstalaron el nuevo codigo RLP de los siete servidores que funcionaban correctamente lo que agravo el problema En 45 minutos ejecuto 4 millones de operaciones en 154 valores moviendo 397 millones de acciones cuando en su lugar deberia haber ejecutado 212 ordenes de pequena entidad Knight Capital perdio 460 millones de USD y la SEC le impuso una multa de 12 millones de USD por violar regulaciones de bolsa 12 Boeing 737 MAX Editar Articulo principal Boeing 737 MAX Boeing 737 MAX 8 Dos accidentes del avion Boeing 737 MAX en 2018 y 2019 llevaron a que el 13 de marzo de 2019 la FAA iniciara la Suspension de vuelo del Boeing 737 MAX durante meses por fallos en el software MCAS Sistema de Aumento de Caracteristicas de Maniobra en ingles Manoeuvring Characteristics Augmentation System 4 Fallecieron 346 personas en los accidentes La FAA permitia a fabricantes como Boeing emitir certificados de vuelo para sus aviones En noviembre de 2019 la FAA suspendio la capacidad de Boeing para emitir certificados para los aviones MAX El MCAS en el MAX se diseno para activarse usando la senal de uno de los dos sensores de angulo de ataque del avion haciendolo susceptible al punto unico de fallo Single point of failure Cuando MCAS detecta que el avion esta en modo manual con los flaps arriba y con un angulo de ataque elevado ajusta el estabilizador horizontal para bajar el morro y que el piloto no suba demasiado rapido y produzca una caida en perdida Aunque el sistema MCAS podia causar picados no intencionados no se mencionaba en los manuales de vuelo y entrenamiento por lo que los pilotos lo desconocian 13 En marzo de 2019 quedaron en tierra 387 aviones MAX que realizaban 8600 vuelos semanales para 59 companias aereas En enero de 2020 Boeing calculo que en 2019 perdio 18 400 millones de USD y le cancelaron 183 pedidos de MAX En 2019 el precio de un Boeing 737 MAX iba de 100 a 135 millones de USD Therac 25 Editar Articulo principal Therac 25 Simulacion de la pantalla de entrada de un Therac 25 Simulacion de la pantalla de entrada de un Therac 25 con el error 54 Desbordamiento de una variable octeto 8 bits La Therac 25 fue una maquina de radioterapia producida por AECL sucesora de los modelos Therac 6 y Therac 20 las unidades anteriores fueron producidas en asociacion con CGR El aparato estuvo comprometido en al menos seis accidentes entre 1985 y 1987 en los que varios pacientes recibieron sobredosis de radiacion Tres de los pacientes murieron como consecuencia directa Estos accidentes pusieron en duda la fiabilidad del control por software de sistemas de seguridad critica convirtiendose en caso de estudio en la informatica medica y en la ingenieria de software La comision investigadora concluyo que las causas primarias de los accidentes fueron malas practicas de desarrollo analisis de requerimientos y un mal diseno de software y no por errores aislados en el codigo fuente En particular el programa de la Therac 25 fue disenado de tal manera que era casi imposible encontrar y subsanar fallos automaticamente El sistema no usaba un sistema operativo estandar En su lugar operaba con un sistema operativo propio escrito en lenguaje ensamblador PDP 11 para funcionar en el ordenador 32K PDP 11 23 14 Cuando el sistema notificaba un error y detenia los rayos X solamente mostraba el mensaje MALFUNCTION error de funcionamiento seguido de un numero del 1 al 64 El manual de la maquina no explicaba el problema ni mostraba los codigos de error y por lo tanto el operario acababa por cerrar la advertencia y proceder con el tratamiento El personal de AECL y los operadores de las maquinas inicialmente no creyeron en las quejas de los pacientes por la alta confianza que tenian en la maquina La ingenieria habia reutilizado codigo de modelos mas antiguos Therac 6 y Therac 20 que si que contaban con sistemas de seguridad mecanicos El fallo solo ocurria cuando se introducia rapidamente una secuencia particular de teclas en la terminal VT100 que controlaba la computadora PDP 11 de la Therac 25 El operador habia rellenado todas las casillas y estaba en la casilla de ordenes cuando se daba cuenta que habia un error en la casilla del tipo de haz que contenia una X Rayos X cuando debia contener una E haz de Electrones Para corregirlo usaba el cursor hasta subir a la casilla escribir una E y bajar con el cursor hasta la casilla de ordenes escribir una B y pulsar Entrar La secuencia completa era E B Entrar Si esta secuencia se realizaba en menos de 8 segundos la maquina producia una radiacion que podia llegar a ser hasta 1000 veces la que se pretendia aplicar Esto ocurria muy raramente y se desconocia que existiera tal error de condicion de carrera race condition en el que la salida o estado de un proceso es dependiente de una secuencia de eventos que se ejecutan en orden arbitrario y van a trabajar sobre un mismo recurso compartido Se puede producir un error cuando dichos eventos no llegan se ejecutan en el orden que el programador esperaba El programa cambiaba la variable bandera Class3 incrementandola cada vez que ejecutaba la rutina de prueba de ajuste en vez de asignarle un valor fijo La variable Class3 tenia 1 byte de longitud y sus valores posibles iban de 0 a 255 Cuando el valor era 255 y se sumaba 1 la variable Class3 pasaba a valer 0 Cuando la variable Class3 valia 0 indicaba que se podia lanzar el haz de electrones y no se comprobaba la posicion del colimador 14 La rutina de prueba de ajuste se ejecutaba cientos de veces en cada sesion para un paciente Una vez de cada 256 ejecuciones de la rutina la variable Class3 tenia el valor 0 no intencionado el colimador no se comprobaba y cualquier fallo en el colimador no se detectaba La sobredosis se producia si el operador apretaba el boton Set en el preciso momento en que la variable Class3 pasaba de 255 a 0 desbordamiento Entonces el software aplicaba la maxima potencia de 25 MeV sin tener el objetivo en su sitio y sin escanear AECL corrigio este problema asignando a la variable Class3 un valor distinto de 0 cada vez que pasaba por la rutina de prueba de ajuste en lugar de incrementarla 14 15 OpenSSL Editar Explicacion simplificada del error Heartbleed Un usuario del paquete Debian OpenSSL notifico un aviso para su rectificacion En el proceso de arreglo de la incidencia un programador estropeo el generador de numeros aleatorios El parche defectuoso se lanzo en septiembre de 2006 con la version OpenSSL 0 9 8c 1 Hasta abril de 2008 no se descubrio el problema Todas las claves criptograficas generadas con esa version estan comprometidas porque los numeros aleatorios son facilmente predecibles y los datos encriptados con ellas tambien son vulnerables Esto supuso una amenaza en muchas aplicaciones que se apoyan en la encriptacion como S MIME Tor conexiones protegidas por SSL o TLS y SSH Se corrigio en la version OpenSSL 0 9 8c 4etch3 16 Heartbleed espanol hemorragia de corazon es un agujero de seguridad de software en la biblioteca de codigo abierto OpenSSL solo vulnerable en su version 1 0 1f que permite a un atacante leer la memoria de un servidor o un cliente permitiendole por ejemplo conseguir las claves privadas SSL de un servidor 17 El codigo vulnerable fue adoptado y usado ampliamente con el lanzamiento de la version 1 0 1 de OpenSSL el 14 de marzo de 2012 El soporte de Heartbeat estaba habilitado de forma predeterminada causando que las versiones afectadas fueran vulnerables por defecto 18 19 20 La RFC 6520 Heartbeat Extension prueba los enlaces de comunicacion segura TLS DTLS al permitir que un ordenador en un extremo de una conexion envie un mensaje de solicitud de latido de corazon Heartbeat Request que consiste en una carga util tipicamente una cadena de texto junto con la longitud de dicha carga util como un entero de 16 bits El equipo receptor debe entonces enviar la misma carga exacta de vuelta al remitente Las versiones afectadas de OpenSSL asignan un bufer de memoria para el mensaje a devolver basado en el campo de longitud en el mensaje de solicitud sin tener en cuenta el tamano real de la carga util de ese mensaje Debido a esta falla de revision de los limites apropiados el mensaje devuelto consta de la carga util posiblemente seguido de cualquier otra cosa que sea que este asignada en el buffer de memoria La Agencia Tributaria de Canada reporto el robo de numeros de la Seguridad Social que pertenecen a 900 contribuyentes y declaro que fueron accedidos a traves de la explotacion del fallo durante un periodo de seis horas el 8 de abril de 2014 21 Cuando el ataque se descubrio la agencia cerro su sitio web y amplio el plazo de presentacion de los contribuyentes del 30 de abril al 5 de mayo 22 La primera version corregida 1 0 1g fue lanzada el dia 7 de abril de 2014 En la cultura popular EditarEn la pelicula Brazil 1985 un error en un apellido debido a una mosca caida en la cabecera de un teletipo provoca la detencion erronea de un ciudadano inocente con consecuencias fatales para este una suerte de dramatizacion basada en el caso de la polilla en el ordenador Mark II en 1947 La novela de Ellen Ullman The Bug 2004 trata de la busqueda de error de software por parte de una probadora de software y un programador El bug es apodado The Jester por su tendencia a aparecer en los momentos mas inoportunos y amenazando el destino de la compania 23 La pelicula canadiense Control Alt Delete 2008 es una comedia que trata de un programador que a finales de 1999 trata de corregir errores para prevenir los problemas del error 2YK 24 Vease tambien EditarLista de errores de software Last Error Agujero de seguridad Bugtraq Bugzilla Hotfix Depurador Depuracion de programas Ingenieria de software Exploit Seguridad informatica Common Vulnerabilities and Exposures CVE Packet StormReferencias Editar en ingles History s Worst Software Bugs Pag 1 Wired Consultado el 20 de marzo de 2014 en ingles History s Worst Software Bugs Pag 2 Wired Consultado el 20 de marzo de 2014 en ingles Airbus Cites Assembly Problem in A400M Crash Consultado el 22 de junio de 2015 a b O Kane Sean 6 de febrero de 2020 Boeing finds another software problem on the 737 Max The Verge en ingles Consultado el 16 de mayo de 2020 Software bugs cost US economy dear 10 de junio de 2009 Archivado desde el original el 10 de junio de 2009 Consultado el 16 de mayo de 2020 en ingles 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 volo dentro de un ordenador y el origen de bug informatico Microsiervos Leyendas Urbanas Magoun Alexander B 1 de agosto de 2013 Did You Know Edison Coined the Term Bug IEEE Spectrum en ingles Consultado el 16 de mayo de 2020 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 Bug World Wide Words en ingles Consultado el 16 de mayo de 2020 SEC ed 16 de octubre de 2013 SECURITIES EXCHANGE ACT OF 1934 Release No 70694 October 16 2013 SEC en ingles Consultado el 16 de mayo de 2020 Graham Dunn 13 de marzo de 2020 Timeline of the twists and turns in the grounding of the Boeing 737 Max Flightglobal a b c Nancy Leveson 1995 Medical Devices The Therac 25 PDF En Addison Wesley ed Safeware System Safety and Computers Archivado desde el original el 16 de febrero de 2008 Consultado el 16 de mayo de 2020 Computerized Radiation Therapy PDF reported by TROY GALLAGHER Consultado el 12 de febrero de 2011 DSA 1571 1 openssl predictable random number generator Consultado el 16 de mayo de 2020 Goodin Dan 7 de abril de 2014 Critical crypto bug in OpenSSL opens two thirds of the Web to eavesdropping ArsTechnica com en ingles Consultado el 24 de abril de 2014 Codenomicon Ltd 8 de abril de 2014 Heartbleed Bug Goodin Dan 8 de abril de 2014 Critical crypto bug in OpenSSL opens two thirds of the Web to eavesdropping Ars Technica Hagai Bar El 9 de abril de 2014 OpenSSL Heartbleed bug what s at risk on the server and what is not Heartbleed bug 900 SINs stolen from Revenue Canada CBC News 14 de abril de 2014 Canada Revenue Agency pushes tax deadline to May 5 after Heartbleed bug Vancouver Sun 13 de abril de 2014 archivado desde el original el 16 de junio de 2014 consultado el 9 de junio de 2014 Ullman Ellen 2004 Pushkin Press Limited ed The Bug ISBN 9781908968142 Control Alt Delete IMDB en ingles Consultado el 17 de mayo de 2020 Enlaces externos Editar Wikimedia Commons alberga una categoria multimedia sobre Error de software Buscador de Vulnerabilidades por productos de INTECO CERT Datos Q179550 Multimedia Computer bugs Obtenido de https es wikipedia org w index php title Error de software amp oldid 139088904, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos