Ariane 5 - Il bug che distrusse un razzo
Siamo nel 1996 ed una linea di codice sta per mandare in fumo mezzo miliardo di dollari
Introduzione
Il 4 Giugno 1996 l'Agenzia Spaziale Europea (ESA) si apprestava a lanciare in orbita alcuni satelliti molto costosi utilizzando il nuovo razzo Ariane 5, successore dell'Ariane 4.
La ricerca per la produzione della nuova versione costò circa 7 miliardi di dollari, mentre il costo del razzo e dei satelliti che avrebbe dovuto trasportare ammontavano a 500 milioni di dollari.
Alle ore 12:33:59 (UTC) il razzo lasciò la piattaforma di lancio e per i successivi 36 secondi tutto procedette come previsto.
Solo a quel punto iniziò ad inclinarsi fino a far cedere la struttura e quindi ad attivare il sistema di autodistruzione che mandò in fumo mezzo miliardo di dollari in attrezzature spaziali.
Cosa successe?
Il sistema di navigazione (INS), utilizzando accelerometri e giroscopi, calcolava la posizione, l'orientamento e la velocità del razzo e poi le comunicava al sistema di guida.
Il problema si verificò proprio all'interno del sistema di navigazione che provò a convertire un valore a virgola mobile di 64 bit in un valore intero di 16 bit, praticamente è come se si provasse ad inserire l'acqua di un'intera vasca da bagno all'interno di un bicchiere.
Ovviamente questo causò un errore di runtime che portò al crash dell'INS.
Immediatamente subentrò il sistema di navigazione di backup che però andò in contro allo stesso destino.
Al sistema di guida arrivò l'informazione dell'errore ma questo venne interpretato erroneamente come un segnale valido ed iniziò ad inclinare il razzo su un lato, manovra che lo sottopose a pressioni per cui non era stato progettato, portandolo prima al collasso e quindi all'avvio del processo di autodistruzione di sicurezza.
Il codice utilizzato per l'Ariane 5 era lo stesso della versione precedente, ma la differenza tra le due versioni era chiaramente tecnica: il nuovo razzo era tecnologicamente più avanzato e potente con la possibilità di seguire traiettorie diverse, e fu proprio questo particolare a causare l'eccezione ed il conseguente disastro.
Conclusione
Sicuramente riutilizzare codice scritto in precedenza è un buon modo per risparmiare tempo ma è fondamentale eseguire tutti i test necessari per poter garantire il corretto funzionamento del programma.
In questo caso la mancanza di un if
è costato circa 500 milioni di dollari all'ESA.