Kleine Ursachen koennen gewaltige Schaeden verursachen

Programmierfehler begleiten den Siegeszug der Datentechnik

26.03.1993

Seit den Anfaengen der Entwicklerkunst gelingt es, kurze und vor allem algorithmisch triviale Programme so zu verfertigen, dass sie am Ende fehlerfrei dastehen. Doch obwohl inzwischen moderne Programmsprachen wie zunaechst die blockorientierten mit ihrem beruehmten "GOTO"-Verbot und jetzt die objektorientierten das Programmieren ohne Zweifel erleichtern, kann man den Fehlerteufel doch nicht ganz ausmerzen. Und da er sich in den hochkomplexen Programmsystemen moderner Computer weit besser verstecken kann als in den eher ueberschaubaren, knappen Anwendungen aus den Pioniertagen unserer Rechenautomaten, schlaegt er nun oftmals besonders unerwartet, gleichzeitig besonders wirkungsvoll und manchmal sogar katastrophal zu.

So mussten 1991 im Golfkrieg mindestens 28 Soldaten sterben, weil Patriot-Abwehrraketen, da falsch programmiert, oft unfaehig waren, ein anfliegendes Scud-Projektil der Iraker unschaedlich zu machen. Diese tragischen Fehlschlaege beruhten auf einem ueberaus simplen, geradezu laecherlich kleinen Programmfehler.

Ein Schluesselelement des Patriot-Systems sind interne Zeitgeber, die letztlich die Basis aller Flugbahn-Berechnungen darstellen. Doch als die Patriot- Programme vor gut zwei Jahrzehnten entwickelt wurden, begingen die Ingenieure den fatalen Irrtum, die Zeit in Intervallen von je einer Zehntelsekunde zu definieren und die entsprechenden Zeitdaten aus den Zielverfolgungs-Radarsystemen in Registern zu je 24 Bit abzuspeichern.

Nun ist ein Zehntel aber leider ein Zahlenwert, fuer den es im Dualsystem der Computer auch bei noch soviel Bit Wortbreite keine exakte Entsprechnung gibt - was also unvermeidlich auf ein Runden der gemessenen Echo-Laufzeiten hinauslaeuft. Bei 24 Bit Wortbreite betraegt dieser Rundungsfehler knapp ein Millionstel beziehungsweise, nach je 100 Stunden Betriebszeit des Systems seit der letzten Synchronisations-Prozedur, eine gute Drittelsekunde. Waehrend dieser Fehler in der Fruehzeit der Patriots, als sie Flugzeuge mit einem Tempo von allenfalls etwa der dopppelten Schallgeschwindigkeit abwehren sollten, nicht weiter stoerte, sah all dies im Irak ganz anders aus. Denn nunmehr waren doppelt so schnelle Raketen abzuwehren - und schon entfaltete der Programmfehler seine toedliche Wirkung.

Immerhin 60 Millionen Dollar an entgangenen Telefongebuehren und ein praktisch nicht bezifferbarer weiterer, sicher immenser volkswirtschaftlicher Schaden infolge einer neunstuendigen Leitungsblockade - das sind die Kosten, die ein Fehler in einem anderen Computersystem nach sich zog. Er bewirkte vor einigen Jahren, dass die Fernvermittlungs-Computer des US-Telefongiganten AT&T verrueckt spielten und waehrend besagter neun Stunden nur bestenfalls jeder zweite von insgesamt rund 100 Millionen Anrufen sein Ziel erreichen konnte.

14 moegliche Strecken fuer die Kommunikation

Das Desaster nahm seinen Anfang in einer von 114 computergesteuerten Weitverkehrs-Vermittlungszentralen, die im Normalbetrieb jeweils rund 700 000 Anrufe pro Stunde bewaeltigen koennen. Dabei waehlen die Rechner dieser Vermittlungen bei jedem eingehenden Ferngespraechswunsch unter 14 moeglichen Kommunikationsstrecken die optimale aus, wobei ihnen ein separat betriebenes, systeminternes Leitungsnetz hilft. Ueber dieses wird die angewaehlte Nummer vorab an den Zielort uebertragen und ueberprueft, ob die lokale Vermittlung im Zielbereich ueberhaupt Kapazitaet frei hat. Andernfalls erzeugt die primaer aktivierte Fernvermittlung an Ort und Stelle ein Besetztzeichen, ohne kostenaufwendig eine Fernleitung zu belegen.

Hat die ferne Vermittlung indes Kapazitaet frei, so reserviert das Signalisierungsnetz bei ihr zunaechst einen Sprechkanal, dann befehlen seine Rechner der anrufenden Vermittlung, das Gespraech durchzuschalten, und schliesslich pruefen sie auch noch, ob die frisch geschaltete Leitung intakt ist.

Was hat das technische Massensterben bewirkt?

Als die Leute in der AT&T-Netzueberwachungs-Zentrale im Januar 1990 unversehens auf ihren Bildschirmen beobachten mussten, dass immer mehr Telefonleitungen und Vermittlungscomputer zusammenbrachen, gab es zunaechst ein grosses Raetselraten: Was konnte so ein technisches Massensterben bewirkt haben? Doch als kundige Techniker schliesslich auf einen Fehler in den Programmen der Signalisierungscomputer tippten, hat dies letztlich wohl nur jene erstaunt, fuer die Computer immer noch perfekte Maschinen von hoechst berechenbarer - und jeden Menschen in puncto Zuverlaessigkeit weitaus uebertreffender - Arbeitsweise sind.

Als die Servicetechniker die aktuell in den Vermittlungen laufenden Programme probehalber gegen eine etwas aeltere Version austauschten und die Rechner dann neu starteten, zeigte sich an deren problemloser Arbeitsweise alsbald, dass ein Fehler im neuen Programm das Desaster verursacht haben musste. Bei naeherem Augenschein wurde rasch klar, wo das Problem lag. Beim Austausch der alten Programme gegen die neue und schnellere Weiterentwicklung hatte sich in eine der unendlich vielen Programmzeilen ein einziger, simpler Fehler eingeschlichen. Also ein paar fehlplazierte Bytes, die AT&T in der Folge 60 Millionen Dollar kosten sollten.

Was war im einzelnen passiert? Das Malheur begann ganz harmlos damit, dass eine Schaltzentrale in New York im Zuge eines Selbsttests herausfand: Ich bin infolge starken Gespraechsaufkommens nahe meinen Leistungsgrenzen angelangt und muss mich jetzt sicherheitshalber einer Ruecksetz- (Reset-) Prozedur unterziehen; also einer absoluten Routineangelegenheit, die normalerweise keine sieben Sekunden dauert und auch keinerlei Probleme machen duerfte.

Zum Einleiten dieser Ruecksetzmassnahmen schickte die New Yorker Vermittlung an ihre 113 "Schwestern" im ganzen Lande eine kurze Mitteilung, sie werde demnaechst fuer ein paar Sekunden ihren Dienst einstellen und mithin auch keine Anrufe mehr annehmen beziehungsweise weiterleiten koennen. Spaeter, nachdem der Reset abgeschlossen war, signalisierte der Computer, man sei in New York jetzt wieder voll in Betrieb, waehrend er gleichzeitig begann, die zwischenzeitlich lokal eingelaufenen Gespraechswuensche an die 113 restlichen Vermittlungen durchzuschalten.

Im Zuge dieser Durchschalt-Prozeduren nun geschah es, dass eine ferne Vermittlung in - sagen wir - A-City als erste aus New York nach dem Reset einlaufende Mitteilung signalisiert bekam, New York wolle ein Gespraech durchschalten.

Die Station in A-City begann mit ihrem Computer daher umgehend, die Nachricht vom Wiederfunktionieren der New Yorker Station in ihre interne Liste von Status-informationen einzubauen - als ploetzlich noch eine zweite Nachricht aus New York einlief. Und zwar nicht einmal 50 Millisekunden nach der ersten.

Da der Computer in A-City nun aber noch damit beschaeftigt war, die erste Nachricht zu bearbeiten, musste die zweite Mitteilung - wie stets in so einem Fall - programmgesteuert zwischengespeichert werden. Der leidige Fehler in den Programmen aber bewirkte jetzt, dass dabei im Speicher wichtige Daten ueber die gerade aktive Kommunikationsleitung nach New York ueberschrieben wurden - was in A-City allerdings auch sofort bemerkt wurde. Automatisch aktivierte der Rechner daher eine Reserveleitung, und eigentlich haette nun alles in Ordnung sein muessen. Denn nun haette das Hauptsystem ja Zeit genug haben sollen, sich selber per Reset wieder in einen gueltigen Betriebszustand zu versetzen.

Leider wollte es aber das Schicksal, dass extrem zeitnah noch ein zweites Paar von derart ueberlappend aufeinanderfolgenden Anrufen einlief - und damit war nun auch das Reservesystem von A-City am Ende seiner Moeglichkeiten angelangt. Als Folge des Ganzen legte der Computer in A-City seinen Betrieb fuer einen vollen Reset still, was eine Art Lawineneffekt nach sich zog. Denn da ja auch die anderen 113 Vermittlungscomputer des Netzes den gleichen, winzigen Programmfehler aufwiesen, kam es angesichts starken Gespraechsaufkommens wiederholt - und alsbald zusehends haeufiger - zu fatalen Ereignisverkettungen der skizzierten Art. Sie versetzten das landesweite Netz fuer Stunden in einen ausgesprochen labilen, nur noch zufallsbestimmten Zustand mit all den erwaehnten Folgen an Gespraechs- und Gebuehrenausfaellen.

Bemerkenswert an diesen grossen Wirkungen kleiner Ursachen ist nicht nur, dass das fehlerhafte, scheinbar bessere und schnellere Programmsystem nicht nur ausfuehrlich getestet worden war, ehe man es auf die reale Welt der US-Telekommunikation losliess. Sondern ueberdies, dass es trotz des Fehlers rund einen Monat lang problemlos arbeitete, ehe ein ausgesprochen unwahrscheinliches Zusammentreffenen ganz besonderer Umstaende die fatale Kettenreaktion in Gang setzte.

Wie wenig selbst sorgsamstes Testen von Programmen Sicherheit gewaehrleisten kann, macht auch ein Fall aus der Welt des Flugverkehrs augenfaellig. Denn wiewohl die US-Luftfahrtbehoerden aeusserst streng sind, was die Qualitaet aller sicherheitsrelevanten Systeme sowie die Gruendlichkeit ihrer Dokumentation betrifft - manchmal kommt es doch vor, dass beispielsweise eine B 747 besorgniserregende Dinge treibt. Wie etwa, dass sie kurz nach dem Start auf unerklaerliche Weise den Schub ihrer Triebwerke verringert und somit Muehe hat, Hoehe zu gewinnen.

Simpler, aber kritischer Fehler

Auch hier wurden intensive und gruendliche Untersuchungen noetig, ehe die Ursache des Problems gefunden werden konnte. Der Datentransfer zwischen dem computergesteuerten Flug-Management- Systems des Duesenriesen und den internen Steuerungscomputern der Triebwerke, die ja der Ueberwachung der Schubleistung sowie mehrerer anderer Parameter dienen, liess zu wuenschen uebrig. Die Triebwerkscomputer schickten an den Bordrechner immer wieder falsche Werte.

Wenigstens in diesem Fall ist es den Ingenieuren also gelungen, einen ebenso simplen wie kritischen Programmfehler aufzudecken, ehe er Menschen in konkrete Gefahr bringen konnte. Ebenso leicht liesse sich aber eine Reihe von Faellen anfuehren, in denen Menschen infolge raffiniert sich verbergender, in hochkomplizierten Programmen praktisch unauffindbarer Fehler zu Tode kamen.

Mit steigender Komplexitaet moderner Programmsysteme nimmt auch die Gefahr verborgener Maengel zu; beziffern Experten die Fehlerquote doch immerhin auf jeweils 100 bis 200 pro MB Programmcode. Versuche, alte Schwachstellen zu beheben, fuehren nicht selten zum Einbau neuer Fehler.

*Egon Schmidt ist freier Journalist in Muenchen.