Werbung

Wenn schlechte Programmierung tödlich wird

Ein Blick auf Programmierkatastrophen und wie schlecht Programmieren tödlich sein kann

Quelle : 1 , 2

Wenn die Programmierung eines kritischen Systems schwerwiegende Fehlfunktionen aufweist und wir Pech haben, kann der Fehler zu erheblichen Sachschäden, Wertverlust oder anderen Verwaltungskosten führen, die eine unnötige Katastrophe bewältigen - ganz zu schweigen von der Arbeit des Programmierers. Manchmal können die Folgen jedochunvorstellbar sein. Heute blicken wir auf einige berühmte Fälle zurück, die zeigen, wie leicht es für schlechte Programmierung ist, tödlich zu werden.

Therac-25: Es ist Nachlässigkeit den ganzen Weg nach unten

Quelle : Hackaday

Jeder, der Informatik auf Universitätsniveau studiert hat, hat von dem Therac-25-Bericht gehört. Es handelt sich um eine wichtige Fallstudie, die Studenten von Professoren als dringende Warnung gegeben wurde, was passieren kann, wenn Programmierer nachlässig werden, insbesondere, dass Menschen dies könnenund wird sterben.

Luft- und Raumfahrt

Der Programmierfehler, der dazu führte, dass der Raketenstart Russlands fehlschlug

Der Therac-25 war ein Strahlentherapiegerät, das 1982 zur Behandlung aggressiver Krebsarten gebaut wurde. Der Therac-25 wurde aus früheren Modellen, dem Therac-6 und dem Therac-20, aufgebaut und verwendete eine Dual-Mode-Konfiguration, eine für eine mildere DosisElektronenstrahlung und eine zweite, deutlich stärkere Dosis, die hunderte Male stärker war.

Die Entwickler der früheren Modelle erkannten die Gefahr der Verwendung der falschen Einstellung und bauten Hardware-Sicherheitsmechanismen, die eine versehentliche Überdosierung von Strahlung verhindern würden. Daher könnte sich die Programmierung, mit der die Maschine betrieben wurde, auf die Hardware-Verriegelungen stützen, um sich vor falschen Fehlern zu schützenMaschine konfigurieren.

Quelle: Links, Cold Fusion Guy | Rechts, Hackaday

Als die Programmierer des Therac-25 den alten Code von den früheren Maschinen kopierten und im neuen wiederverwendeten, hatten sie keine Ahnung, dass die Software-Fail-Safes im alten Code nicht annähernd so streng waren, wie sie dachtenSie waren es. Und weil der Programmierer für die Originalmaschinen, ein autodidaktischer Programmierer ohne formale Ausbildung, keine Kommentare in seinem Code hinterließ, wie er es hätte tun sollen, hatten die Therac-25-Programmierer keine Möglichkeit zu wissen, dass ihre Maschine eine grundlegend andere warSie haben sich nicht einmal die Mühe gemacht, den alten Code auf dem neuen Computer angemessen zu testen, was die Diskrepanz aufgedeckt hätte.

Werbung

Am wichtigsten ist, dass der ursprüngliche Programmierer einen „Race-Zustand“ zwischen den beiden verschiedenen Dosierungseinstellungen nicht berücksichtigt hat. Wenn ein Techniker einen Tastendruck verpasst hat, kann er die Maschine versehentlich anweisen, eine Einstellung zu verwenden, gefolgt von einer Anweisung anVerwenden Sie die andere. Welche Anweisung zuerst die Maschine erreichte, war, wie die Maschine eingestellt wurde, unabhängig davon, was der Techniker vorhatte, und sie würden den Unterschied nicht kennen.

Anstatt eine massive Strahlenexplosion auf eine Metallplatte zu schießen, die die Röntgenstrahlen wie vorgesehen über einen größeren Bereich verteilt, schießt der Therac-25 gelegentlich einen Patienten mit einem schmalen Strahl von Hunderten voll aufoftmals stärker als beabsichtigt - stark genug, um bei vielen Strahlenverbrennungen zu hinterlassen und sie in mindestens fünf bekannten Fällen zu töten.

Werbung

Die Patriot-Rakete, die nicht abgefeuert werden konnte

Quelle : US Army / Wikimedia Commons

Im Leben sind einfache, scheinbar belanglose Fehler selten gefährlich. Bei der Programmierung sind die einfachsten Fehler häufig die Ursache für Katastrophen größeren Ausmaßes, und einer der häufigsten Fehler dieser Art ist der Missbrauch von Gleitkomma-Arithmetik.

Das Problem bei Gleitkommazahlen besteht darin, dass nur so viel Speicherplatz zur Verfügung steht, um einen gespeicherten Wert im Speicher darzustellen. Wenn der zu speichernde Wert größer als der verfügbare Speicherplatz ist, schneidet das Gerät die Zahl ab, um sie anzupassenSpeicher. Das Schneiden dieser baumelnden Ziffern am anderen Ende einer Folge von Nullen scheint keine große Sache zu sein, aber für einen Computer, der Millionen von Operationen pro Sekunde ausführt, summieren sich diese Fehler.

Am 25. Februar 1991, mitten im Ersten Golfkrieg, war eine US-Patriot-Raketenbatterie in Dharan, Suadi Arabia, 100 Stunden ohne Neustart in Betrieb. Die Patriot-Batterie war Teil der Verteidigung der US-Armee gegen dieMobile SCUD-Raketen, die von der irakischen Armee eingesetzt werden, und das Programm, das für die Verfolgung eingehender SCUD-Raketen zuständig ist, stützten sich auf eine Reihe von Berechnungen, die vorhersagen würden, wo sich die verfolgte Rakete im nächsten Intervall in Abhängigkeit von ihrer Geschwindigkeit und Zeit befinden würde.

Werbung
Quelle : Das nationale Interesse

Da das Programm, das die Patriot-Batterie steuert, die verstrichene Zeit verfolgen musste, um die Flugbahn des SCUD zu bestimmen, fragte das Programm jede Zehntelsekunde die Zeit seit dem Start von der Systemuhr ab und die Uhr gab die Zehntelsekunde zurückseit dem Start als Ganzzahl. Um dies in Sekunden umzuwandeln, um ihre Berechnungen durchzuführen, multiplizierten die Programmierer diese Ganzzahl mit 1/10 und begingen mitten im Krieg einen Programmierfehler auf Neulingsebene.

Der Zeitstempel wurde in einem 24-Bit-Speicherblock gespeichert, daher musste jede Binärzahl, die größer als 24 Bit ist, abgeschnitten werden. 1/10 ist eine nicht terminierende Binärdarstellung, sodass die Zahl bei 24 Bit abgeschnitten wirdführt eine Drift von 0,000000095 Sekunden ein.

Addieren Sie alle diese Fehler über die 100 Stunden, in denen das Programm ausgeführt wurde, und die Zeit, die das Programm verwendete, war 0,34 Sekunden von den anderen Systemen entfernt.

Werbung

Als die Patriot-Batterie am 25. Februar eine ankommende SCUD-Rakete aufnahm und verfolgte, sagte sie voraus, wo sie im nächsten Intervall erscheinen würde, indem sie gegen zwei Radarsignale triangulierte, von denen eines die richtige Zeit widerspiegelte und eines den Fehler von 0,34 Sekunden aufwiesEs knirschte die Zahlen und schaute auf die Koordinaten, die es erwartete, um die SCUD zu finden, aber es gab den einzigen leeren Himmel.

Angenommen, die SCUD war außer Reichweite geraten, feuerte der Patriot nicht, als die SCUD vorbeifuhr und bald die Kaserne traf, die die Patriot-Batterie schützen sollte, wobei 28 Menschen getötet und weitere 100 verletzt wurden.

Digitale Täuschungen

Quelle : Isaias Montilla / Wikimedia Commons

Codierungsfehler können tödlich sein, aber das Versäumnis, Software vor ihrer Verwendung ordnungsgemäß zu entwerfen und gründlich zu testen, kann genauso tödlich sein wie der versehentliche Missbrauch von Gleitkomma-Arithmetik.

Werbung

Dies war in Panama City, Panama, der Fall, als Ärzte des National Cancer Institute medizinische Software verwendeten, die von einer US-amerikanischen Firma, Multidata Systems International, entwickelt wurde. Die Software war ein After-Market-Versuch, das alte und veraltete Institut zu haltenFunktionierende radiologische Cobalt-60-Geräte.

Zusätzlich zu den Geräten von schlechter Qualität waren die Ärzte überarbeitet, gestresst und stark auf die Software von Multidata angewiesen, um die richtige Strahlendosis für Patienten mit schwerem Krebs zu bestimmen.

Quelle: Links, MassDevice | Rechts, MIT PDF

Ein Teil des Prozesses bestand darin, das Modell des Patienten auf dem Bildschirm zu betrachten und das gesunde Gewebe mit Metallplatten abzusperren, um es vor Strahlung zu schützen. Dabei wurden die rechteckigen „Blöcke“ direkt auf das Modell auf dem Bildschirm gezeichnetFrustration der Ärzte am Institut, die Software erlaubte den Ärzten nur, vier Blöcke oder weniger zu zeichnen.

Werbung

Die Ärzte bestanden darauf, dass sie einen fünften Block benötigten, und suchten in der Dokumentation nach einer Problemumgehung. Ein Arzt stellte fest, dass sie die Software „täuschen“ könnten, wenn sie alle fünf Blöcke als einen großen Block mit einem oben ausgeschnittenen Loch zeichnen würdenwo das große Rechteck und der kleinere Ausschnitt eine Seite teilten.

Was sie nicht wussten, war, dass die Programmierung der Software darauf ausgelegt war, die Blöcke auf eine bestimmte Weise einzulesen und die geeignete Dosierung basierend auf dem, was gezeichnet wurde, zu berechnen. Erstaunlicherweise berücksichtigte ihre Programmierung nicht, wie jemand Formen mit präzisen Überlappungen zeichnen könnteSeiten, auf dem Bildschirm in die gleiche Richtung gezeichnet, im oder gegen den Uhrzeigersinn.

Wie Platten gezeichnet wurden, verwirrte die Software. Anamorphotische Kunst gibt eine Vorstellung von dem Problem. Quelle: Links, MIT PDF rechts Das Inspirationsraster

Wenn die Programmierung so zusammengefügt wurde, las sie die Formen als eine einzige durchgehende Linie und verlor irgendwie den Verstand, um herauszufinden, was die Form tatsächlich war, als würde man ihr eine optische Täuschung zuführen? Irgendwie hielt das sie nicht davon abohnehin eine Dosierung berechnen, basierend auf dieser Form hat es nicht verstanden.

Der Arzt nahm die Dosierungszahlen und für 7 Monate mit derselben Technik, wobei die Dosierungen doppelt so hoch waren, wie sie hätten sein sollen, und eine unermessliche Anzahl von Menschen überdosiert.

Von den 28 Personen, von denen wir wissen, dass sie aufgrund der schlampigen Programmierung in Multidatas Software Überdosierungen erhalten haben, starben 8 und der Rest wurde durch die Behandlungen, die sie erhielten, schrecklich verletzt. In Anbetracht der Tatsache, dass alle Patienten am Institut gegen eine schwer zu behandelnde Behandlung kämpftentödliche Krankheit, es gibt keine Möglichkeit zu wissen, wie viele Menschen durch die fehlerhaften Dosierungszahlen, die von der Multidata-Software ausgegeben werden, krank oder getötet wurden.

Die Bedeutung von Best Practices und Verfahren für die Programmierung

Niemand würde Programmierern jemals vorwerfen, einen einfachen Job zu haben. Das Programmieren hochentwickelter und hochtechnischer Geräte zu lernen, erfordert ein Leben lang Arbeit, um richtig zu werden, und selbst die besten Programmierer schreiben immer noch fehlerhaften Code.

Aus diesem Grund wurden Verfahren und Best Practices als Reaktion auf Katastrophen wie diese entwickelt, da die besten Programmierer nie aus den Augen verlieren, wie schnell ein Fehler zu einer Katastrophe werden kann und wie einfach es für schlechte, fahrlässige und schlampige Programmierung istgenau die Menschen zu töten, denen sie helfen wollten.

Via : MIT pdf

Folgen Sie uns auf

Bleiben Sie über die neuesten technischen Neuigkeiten auf dem Laufenden

Geben Sie einfach Ihre E-Mail-Adresse ein und wir kümmern uns um den Rest :

Mit Ihrer Anmeldung stimmen Sie unserer zu Nutzungsbedingungen und Datenschutzerklärung . Sie können sich jederzeit abmelden.