ERRORES GRAVES DE PROGRAMACION

Podemos exigir que una lavadora, por ejemplo, no tenga fallos de funcionamiento por un diseño incorrecto pero aún en una cosa tan básica en una lavadora la cosa es más compleja de lo que parece. Prácticamente todos los electrodomésticos modernos llevan un pequeño ordenador dentro.

De hecho, hoy en día no hay casi ningún aparato eléctrico o electrónico que se salve de llevar dentro un microprocesador.

Y esos ordenadores al igual que los PCs o los grandes sistemas de computación van controlados por software y el software consiste en miles de líneas de código que escriben los humanos. Y un error muy pequeño, al escribir ese código, puede dar lugar a un fallo grave que sólo se dará en determinadas y muy precisas circunstancias.

Vamos a ilustrarlo con un par de ejemplos reales. Y de algo que no se trata de un simple electrodoméstico.

El 22 de Julio de 1962 se lanzó el Mariner1 con la intención de volar hasta Venus. Un fallo en el mecanismo de una antena provocó que el cohete impulsor perdiera el contacto con los sistemas de guía situados en tierra. Eso no representaba un gran problema ya que el ordenador de a bordo podía asumir el control del cohete como así sucedió nada más fallar el mecanismo de la antena. Sin embargo, el software del ordenador de a bordo tenía un error.

El programador cometió un error en la fórmula que calculaba el suavizado de la aceleración. Con el error en ese cáculo, el programa trató a las pequeñas variaciones de velocidad como si fueran importantes provocando correcciones de rumbo exageradas que pusieron al misil fuera de rumbo.

El control de tierra no tuvo más remedio que enviar una orden de destrucción al cohete.

El error que cometió el programador está documentado y es público: cambió una coma por un punto. Concretamente había una sentencia en lenguaje Fortran que decía “DO 17I = 1,10” como si fuera “DO17I=1.10”. Para los que entiendan en programación, convirtió una ejecución en una asignación del valor 1,10 a la variable DO17I ya que ese punto no debía alteró para el ordenador todo el sentido de la línea.

Resumiendo. Una coma que costó un motón de millos de dólares y el fracaso de una misión.

En ese mismo orden de cosas, tenemos otro error tan sonado como simpático. En 1986, se desarrolló el cazabombardero F16.

El F16 es un avión que vuela por el sistema de “control por hilo” que significa que los mandos del piloto no están conectados directamente a las superficies alares sino que están conectados a un ordenador el cual, a su vez, envía órdenes de movimiento a los timones, alerones, etc.

Por tanto, el ordenador de a bordo evita que el piloto haga tonterías. Por ejemplo, si el piloto le da por jugar a lo tonto con el joystick de mando, el ordenador instruirá a los alerones para ejecutar como máximo un giro de 4 ó 5 gravedades evitando interpretar órdenes que puedan destruir al avión o matar al piloto.

Pues bien, los primeros prototipos del F16 tenían unos cuantos errores de software.

El primero, se vió cuando estando en tierra, el piloto hizo la prueba de plegar el tren de aterrizaje. Lo que sucedió es que el tren se plegó y el avión cayó de barriga sobre la pista y se rompió.

Faltaba una pequeña rutina del programa que indicase que aún cuando el piloto pulsase el botón de subir el tren de aterrizaje no lo hiciese si el avión no estaba volando.

El segundo error de software se manifestaba cuando el avión cruzaba el Ecuador. Justo en ese momento una variable de programa a la que le faltaba corregir el signo negativo hacía que el avión se pusiera a volar boca abajo y así continuase a pesar de los esfuerzos del piloto por enderezarlo ya que para el programa la posición invertida parecía ser la correcta cuando se volaba en el hemisferio sur.

La única solución consistía en retornar al hemisferio norte para que el avión recuperar el vuelo normal o bien aterrizar boca abajo en el hemisferio sur, lo cual podía provocar terribles dolores de cabeza al piloto.

Y ahora que hemos visto lo que puede hacer un pequeño error de programación, ¿cómo quieren ustedes que el Windows no se cuelgue?.

Publicado en O.C. el 11 de Septiembre de 2006.

Esta entrada fue publicada en articulos publicados. Guarda el enlace permanente.