Bugs en el software I: Accidentes y pérdidas graves por fallos en el software

Aunque a diario hablamos de bugs en el software, el origen de este concepto es precisamente por un fallo en el hardware. El 9 de Septiembre de 1945, Grace Murray Hopper estaba trabajando en su computador Mark II cuando este empezó a fallar. Tras revisarlo descubrieron que una polilla se había introducido en este. Grace dejó apuntado en su cuaderno que este era el primer caso en el que habia sido un bicho (bug) encontrado. Por ello, en la actualidad se asemeja bug a error.

Sin embargo, no es un caso aislado el hecho de la existencia de bugs en cualquier tipo de software o hardware. En 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software, se definió el concepto de Crisis de Software indicando que desarrollar software era una tarea compleja con probabilidad de aparición de errores. En la actualidad seguimos sufriendo este problema debido a que la complejidad en la informática, lejos de disminuirse, se incrementa a medida que se descubren técnicas nuevas.

Hoy en día, los que estamos en contacto constante con la informática ya damos por hecho que los ordenadores fallan y los asimilamos como parte de nuestro trabajo. Sin embargo no siempre se deberían asimilar como tal. Hay entornos donde es muy importante que el software no falle. Para ello realizar las pruebas pertinentes y eliminar la complejidad es vital para que un sistema salga adelante.

En este post vamos a ver casos excepcionales donde por errores en el software se han producido pérdidas económicamente tremendas o incluso la pérdida de vidas humanas. Aquí van algunos accidentes provocados por bugs en el software:

Accidentes graves

  • La Mariner 1 (1962): Este fue la primera misión de la NASA para sobrevolar Venus. El cohete no duró más de 5 minutos en vuelo cuando se desvió de su trayectoria y fue autodestruido por los responsables. El motivo de este desvió se debió a la omisión de un guión ‘-’ en el programa que controlaba el cohete.

  • Therac-25 (1985-1987): La Atomic Energy of Canada Limited(AECL) creó una máquina de radioterapia utilizada para entornos médicos. Durante un periodo existieron seis accidentes en el que los pacientes recibieron alta sobredosis de radiación. En las investigaciones se responsabilizó al software tanto en el diseño por ser un código indocumentado y prácticamente ofuscado como en fallos concretos detectados.

  • MIM-104 Patriot (1991): Es un misil antiaereo que se utilizan también para la interceptación de misiles balísticos a modo de defensa. Durante la Guerra del Golfo en 1991 un Scud iraquí mató a 28 soldados al alcanzar un cuartel norteamericano ya que estos misiles fallaron. Se dictaminó que fue un error de software en el reloj del sistema que se había retrasado un tercio de segundo por haber estado activado 100 horas.

  • Ariane-5 (1996): Esta fue una misión ESA en el que el vuelo 501 la lanzadera se desvió y se partió durando únicamente 40 segundos en vuelo. El problema fue que el sistema de referencia inercial tratado con datos de punto flotante de 64 bits lo convertía a 16 bits con valores enteros. En una de esas operaciones el valor era demasiado grande provocando un desbordamiento aritmético en el hardware.

  • The Mars Climate Orbiter (1999): La Mars Climate Orbiter fue una sonda enviada por la NASA que se envió para estudiar la atmósfera de Marte. Un problema en el sistema de navegación hizo salirse de tu trayectoria y desintegrarse. El motivo era la utilización de diferentes sistemas de medición en el software. Mientras que desde el control de tierra se utilizaba el Sistema Anglosajón de Unidades, la nave lo realizaba con el Sistema Métrico Decimal.

  • Osprey (2000). Osprey es un híbrido entre avión y helicóptero de propósito militar. En diciembre del 2000, uno de estos ejemplares tuvo un accidente. Uno de los sistemas hidráulicos fallo y el avión se estrelló en un pantano matando a toda la tripulación. Actualmente se conoce que el origen del problema estaba en el software pero se sigue sin conocer el motivo exacto.

  • Multidata Systems/Cobalt 60 (2001): Una máquina de Cobalto-60 en el Instituto Nacional del Cáncer de Panamá produjo una sobredosis de radiación gamma a más de dos docenas de pacientes. El exceso de trabajo y el cansancio de los técnicos en el mantenimiento fueron parte del problema. En algún momento probaron a alinear los escudos para trabajar de una manera más eficaz. Este comportamiento no estaba en el manual pero funcionaba. Al utilizar algo no documentado, en una actualización del software el comportamiento cambió para este caso de manera al estar los escudos alineados se producía una sobreradiación sobre el paciente. Este problema se mantuvo durante siete meses.

Fallos multimillonarios

  • AT&T (1990): La empresa AT&T perdió unos $60 millones de dólares al dejar aproximadamente a 60.000 clientes sin comunicación en llamadas de larga distancia. El motivo de esta caída fue debido a los interruptores que se reseteaban cada pocos segundos debido a un fallo en una actualización del software. Este fallo provocaba una caida cascada entre los diferentes interruptores.

  • Chips Pentium (1994): Un error en el juego de instrucciones en los chip Pentium repercutió en la empresa $475 millones de dólares de costes en recogida y reenvío de procesadores. El error se reproducía al realizar una división con coma flotante en el que a partir del cuarto dígito decimal no daba valores correctos. Este fallo empezó a llamarse “bug de FDIV“.

Otros fallos

Han existido más fallos similares en todos los ámbitos. En algunas ocasiones tan solo produce las molestias a los usuarios. En otras ocasiones la imagen de la empresa responsable de ese software queda dañada.

En todo caso, cada vez se van viendo e irán apareciendo más casos de problemas por fallos por el software y sistemas que caen dado a que nuestro entorno se va volviendo cada vez más complejo y cada vez está todo más globalizado (tanto en actualizaciones como en sistemas compartidos). Esto no significa que antes hubiesen fallos. Seguramente un gran porcentaje tenía el ordenador con problemas. Pero ahora los fallos afectarán a más personas concurrentemente y harán más ruido.

Conclusión

La aparición de bugs no es nada nueva. Siempre viene relacionada con la imperfección del ser humano, la complejidad del problema y la responsabilidad en aplicarla. Cuando un programa controla aparatos peligrosos como control aéreo, balístico y espacial, gestiona material peligroso o controla máquinas peligrosas, el más mínimo detalle cuenta para que no se convierta en una catástrofe de magnitudes tremendas.

En números próximos veremos algunos bugs divertidos en videojuegos (glitch), los fallos más comunes y efectos colaterales entre módulos distantes.

Portada de Genbeta