Post by Benedikt Schwarzwarum werden Steuerungsprogramme für sicherheitskritische Systeme
(Flugzeuge, Raketen, Waffen, usw.) gerne in der Programmiersprache Ada
umgesetzt?
Weil man eine strenge Semantik mit einer klaren Syntax verbindet. Der
Sourcecode hängt nicht von der Zielhardware ab, sondern gibt dem Compiler
vor, was er dort hinzufummeln hat. Ada Programme kopmilieren für
verschiedene Zielplattformen also mit gleichartig funktionierenden Programmen.
Darüberhinaus bietet Ada strenge Typisierung, was es gestattet praktisch in
Einheiten zu rechnen. Es ist dann nicht möglich, eine Länge, die in einem
Meter-Typ angegeben war, an eine Länge, die in einem Meilen-Typ deklariert
wurde, zuzuweisen. (Ok, eine Marssonde haben wir verloren, weil nur ein
Meilen-Typ zuwenig ist, wenn Amis und Engländer im gleichen Projekt arbeiten)
Die Validierung kann man soweit treiben, daß der Compiler erst angeworfen
wird, wenn der Beweis geführt werden konnte, daß die Software die Spec
einhält. Das nennt sich dann SPARK.
Damit hat man testweise mal einen Hubschrauber programmiert. Im Groben lief
das so:
Das C++ Team hat nach drei Wochen das erste Compilat auf den Simulator
geworfen, dann haben Sie regelmäßig neue Versionen mit neuen Features und
Bugfixes aufgespielt. Nach einem Jahr waren die ersten Tests am realen
System (Hubschrauber auf der Piste).
Das SPARK-Team hat nach drei Monaten eine Klarstellung bezüglich einer
Formulierung in der Spec verlangt. Das ging dann etwa ein Jahr so weiter.
Sechs Wochen vor Projektende kam die erste Meldung "Der Compiler ist
erstmals angelaufen". Es war keine Zeit für Tests. Das Compilat wurde
direkt auf die Maschine gespielt.
Auswertung:
Das C++-Team hat 80% der Funktionalität erfolgreich umgesetzt. Für den Rest
existieren Bugreports, aber noch keine Fixes.
Das SPARK-Team hat 100% der gewünschten Funktionalität umgesetzt, es sind
keine Fehler aufgefallen. Allerdings wurde ein Handvoll Unklarheiten auf-
gelistet. Beispiel: "Es wird angenommen, daß der Hubschrauber weniger als
47 Tage ununterbrochen in der Luft bleibt, andernfalls haben wir einen
Zählerüberlauf im Scheduler."
Konsequenz der Herstellers:
Wir entwickeln zukünftig in C++. Die Arbeitsweise des SPARK-Teams überlebt
kein Projektmanager.
Anderes Beispiel ist der Absturz der Ariane 5, der mit einem C-Programm so
nicht geschehen wäre.