La sonda espacial destruida por programadores

José Luis Ávila 25 Noviembre 2016
5min
0
Cohete Atlas con Mariner 1

El pasado día  19 de Octubre  la sonda europea Exomars  entró en la órbita de Marte , la misión fue un éxito y  se cumplieron casi todos los objetivos marcados. A partir de ese día y durante varios meses, la sonda se dedicará a observar la atmósfera marciana buscando trazas de metano, un gas cuya existencia sería un factoría portante a la hora de saber si hay vida en Marte.

Sin embargo la sonda contaba con un “amartizador", esto es un elemento  que debía posarse en la superficie de Marte, llamado Shiaparelli. Poco después de que Shiaparelli se desprendiera de su nave nodriza para comenzar con la maniobra de "amartizaje", se perdió todo contacto con el y posteriemente se descubrio que se estrelló en contra la superficie.

La investigación de las razones por las que la sonda se ha perdido no acaba nada más que empezar, pero según fuentes de la agencia espacial europea, parece que se ha perdido por un error de software. No ha sido la primera sonda espacial perdida pro un error de programación, y temo que no será la última. De la primera sonda que se perdió por un error de software os quería hablar en esta entrada.

La sonda Mariner I iba a ser la primera nave espacial norteamericana en posarse en Venus. era la respuesta al programa sovietico Venera, que ya había logrado aterrizar y enviar imágenes de este planeta, el más cercano a la tierra.

Despegó el día 22 de julio de 1962 a bordo de un cohete Atlas, sin embargo, al poco de despegar el cohete comenzó a desviarse de su rumbo. Cuando el control se dio cuenta que podía impactar en el océano, cerca de rutasmarítimas muy transitadas, activaron la secu nacía de autodestrucción.

Las investigaciones determinaron que había un error en un programa, en  una sola  línea de código, en concreto en un solo signo de puntuación, veamos que causó la pérdida de la nave.

El código del programa de control del cohete estaba escrito en FORTRAN,el primer lenguaje de programación del alto nivel que se creó y el más usado en aquella época.

FORTRAN, como todos los lenguajes de alto nivel, tiene una sentencia de bucle "para" o for, que siervo para indicar que una serie de instrucciones se han de repetir una serie de veces. En concreto en FORTRAN la sentencia para tiene la siguiente sintaxis:

 do 10 i = 1, 8
       CÓDIGO A REPETIR
  10  continue

Estas líneas indican que se repita 8 veces el “Código a repetir”, que está situado entre el "do" y la etiqueta “10"

Hay que tener en cuenta otra característica de FORTRAN que es un poco diferente a otros lenguajes y es el tratamiento de hace de los espacios en blanco. Este lenguaje simplemente los ignora, los omite como si no existieran (similar a lo que ocurre en C o Java con los saltos de línea).

También hay que considerar que en el FORTRAN de la época no hcía falta inicializar una variable antes de utilizarla, sino que une implemente la primera vez que se usaba se consideraba declarada.

Pues bien, dicho todo esto, veamos la sentencia derribacohetes, Es esta:

 

DO 5 K = 1. 3

cuando se debería haber escrito

DO 5 K = 1,3

para repetir 3 veces las siguientes instrucciones. 

 

Como se puede ver, el programador cometió un error, cambio inadvertidamente el carácter “,” por un "." Esto unido a la peculiaridad de FORTRAN de que ignorar los espacios en blanco hizo que la entendía anterior se convirtiera en:

DO5K = 1.3

Exacto, una asignación del valor 1.3 a una variable llamada DO5K.

Eso convirtió una sentencia en otra,  además ambas perfectamente  valida dentro de la sintaxis del lenguaje no lo cual el compilador no la detectó como errónea,  y eso fue lo que hizo que el cohete explotara en vuelo.

Este fue el primero, después vinieron algunos más, Así que no olvidemos que los errores más dañinos son los que no detecta  el compilador. Le podéis contar  esta historia a todos los programadores que cuando se les cuestiona sobre las pruebas o de los errores de su programa, responden eso de "compilar compila”.