Donnerstag, 1. Februar 2007

In Zukunft noch mehr Aufpassen in der Uni

Oh ja... Nächste Woche habe ich meine erste Klausur für dieses Semester. Softwaretechnik I. Heute traf ich bei meinen intensiven Studien der Vorlesungsfolien zu der Vorlesung auf eine Sache, die ich schon sehr krass finde. Mein Prof stellt in diesen Folien die Ursache des Ariane-5-Absturzes am 4. Juni 1996 vor. Es war ein Softwarefehler. Und zwar einer (oder besser zwei in Folge) für die man u.U. bei uns in einem Semester durchfallen könnte. Einfach gesagt: Die Software zur Steuerung der Rakete wurde von dem Vorgängertypen Ariane 4 übernommen, da diese fehlerfrei funktionierte. Es wurde aber nicht bedacht, dass die sich die Physik der beiden Typen wesentlich unterscheidet. Die Sensoren lieferten an die Software zu hohe Werte, mit denen sie nicht mehr klarkam. Durch eine Reihe von Reaktionen wurden komische Werte weiter an die Steuerungssysteme gegeben, diese reagierten daher zu stark, die Rakete hielt dem aerodynamischen Gegebenheiten nicht mehr stand und zerbrach.

Genau sieht die Stelle im Code so aus (Programmiersprache Ada):

begin
sensor_get(vertical_veloc_sensor);
sensor_get(horizontal_veloc_sensor);
vertical_veloc_bias := integer(vertical_veloc_sensor);
horizontal_veloc_bias := integer(horizontal_veloc_sensor);
[...]
exception
when numeric_error => calculate_vertical_veloc();
when others => use_irs1();
end;

Es wird in der rot markierten Zeile ein 64bit-Gleitkommawert der neueren Systeme in einen 16bit-Ganzzahlwert des alten Ariane-4-Systems konvertiert. Dieser konvertierte Ganzzahlwert wird für das nicht überarbeitete System zu groß und hat einen Systemabsturz zur Folge. Eigentlich hätte man diese "Ausnahme" mit einer Ausnahmebehandlung abfangen müssen, was man nicht getan hat, da man so wenig wie möglich Systemauslastung haben wollte. So hat hat man nur 4 von 7 möglichen Variablen geschützt, bei denen das passieren konnte.
Hier eine genauere Beschreibung des Vorgangs und hier ein Video des 500-Millionen-Dollar-Desasters.
Gott sei Dank, wurde niemand verletzt!

Bei meinen Recherchen bin ich auf weitere fatale Softwarefehler gestoßen:
  • Software zur Steuerung einer Patriot-Rakete hat zu kleines Register, wodurch ungenaue Zahlenwerte zustande kommen; die Patriot verfehlt angreifende Scud-Rakete um weit über 500m; Scud-Rakete tötete 28 Soldaten wegen des zu kleinen Registers am 25.11.1991
  • 1998 auf der USS Yorktown gibt Besatzungsmitglied an einem Rechner eine 0 ein, was eine Division durch Null zur Folge hatte; Absturz der Antriebssysteme
  • wegen Vorzeichenfehler im Eingabesystem dreht 1984 die Autopilotensoftware der F16 das Flugzeug bei Äquatorüberflug auf den Kopf (Fehler allerdings schon im Simulator gefunden)
  • 1986 stürzt eine Saab Gripen ab, weil zu starker Gegenwind war, wo man zu stark gegensteuerte, was zu hohen Werten und Overflow führte...

Es ist ganz schön heftig, was so passiert, wegen kleinen Fehlern im System. Und das wo man glaubt, dass da Leute dran sitzen, die sehr routinerte Programmierer sind - aber auch das sind Menschen. Jetzt weiß ich, warum wir im letzten Semester so intensiv mit Exception-Handling gequält wurden. Hat mich ganz schön geschockt.
So, ich werde jetzt weiter lernen. Auf dass ich mich hoffentlich nie wegen eines so fatalen Fehlers verantworten muss.


Listening To:
Die Toten Hosen - Ein kleines bißchen Horrorschau

1 Kommentar:

Phosphor hat gesagt…

Und Seitenwurzeln entstehen durch die suberinisierung von Endodermiszellen mit Aussparungen. Aber schon heftig. Das ist doch ein reichlich doofer Fehler. Und wegen so doofen Fehlern passiert sowas?