Archive for 31 de octubre de 2007|Daily archive page

Cuando los Bugs Terminan en Explosiones

Quizá un título un poco Simpsons, pero cualquiera que haya programado alguna vez sabrá que hacer un programa sin ningún tipo de bug (partes del programa que no funcionan adecuadamente); pero lo que quizá no tengamos en mente muchas veces es que hay veces que los bugs pueden acabar en explosiones.

Un poco de historia de explosiones causadas por bugs.

1962: El Mariner 1 tenía como misión el viaje hasta Venus, pero el lanzamiento no salió como se esperaba. Primero se produjo un fallo en las comunicaciones con los sistemas de tierra, por lo que el cochete entró en modo automático. El problema era que el sistema de guiado tenía un bug. Parece ser que se vuelve a cumplir esta frase célebre de "me llevaba una". En este caso, había un fallo en la transcripción de las ecuaciones de guiado de la pizarra al programa (toma especificaciones!) y alguién se olvidó de meter la media.

El programa por tanto, actuaba con las variaciones de los valores, no con la media de estas variaciones lo que hizo que una pequeña desviación fuera considerada un gran problema y por tanto era necesario introducir grandes correcciones en el vuelo. La aventura terminó con la orden desde el centro de control de destruir el cohete como media de seguridad.

1991: Una batería de misiles Patriot no consigue adquirir como blanco un misíl Scud resultando en la muerte de 28 personas. El culpable, otra vez un bug en el programa. Básicamente, el error en la posición de un objeto en el radar tenía un error acumulativo. A las 100 horas de operación del sistema el error era tan grande que aunque se detectaba un objeto en el radar, no se sabía dónde tenía que ser interceptado.

1996: El Ariane 5, quizá uno de los fallos informáticos más conocidos de la historia se dispone a despegar. Pero poco después de la ignición, dentro del sistema de guiado se quiso utilizar una variable de 64 bits como parámetro de un método que operaba con variables de 16 bits procedente de una misión anterior. El resultado buffer overflow, halt del programa y explosión.

1998: El Mars Climate Orbiter es lanzado con la misión de llegar a Marte, desintegrándose en la entrada en la atmósfera. El problema, parte del software realizado en un sitio esperaba unidades métricas y el componente software que las sumistraba lo hacía en unidades imperiales. Por tanto, la velocidad y órbita de entrada en la atmósfera eran erróneas.

Supongo que al menos, a partir de ahora quizá pensemos distinto sobre las consecuencias de un bug en un programa 🙂 Tampoco hay que ser alarmante, ya que depende mucho del dominio del programa (no todos hacemos programas para cohetes), pero tampoco bien mal pensar sobre ello.

Referencias:

  1. Mariner 1 en Wikipedia
  2. Lanzamiento Ariane 5 en Youtube
  3. Mars Climate Orbiter en Wikipedia
  4. Incidente Misiles Patriot