Sagen Sie es anders: welchen Code haben Sie geschrieben, dass nicht scheitern kann. Ich bin daran interessiert, von denen zu hören, die an Projekten gearbeitet haben, die sich mit Herzmonitoren, Wassertests, wirtschaftlichen Grundlagen, Raketenflugbahnen oder der O2-Konzentration auf dem Space Shuttle beschäftigen.
Wie haben Sie sich darauf vorbereitet, diese Art von Code zu schreiben: methodisch, intellektuell und emotional?
Bearbeiten
Ich habe dieses Wiki für den Fall markiert, dass das Rep-Problem die Leute davon abhält, zu antworten. Ich dachte, dass es zu diesem Thema viel mehr Perspektive geben würde als bisher.
Obwohl ich persönlich nicht an dem, was dort beschrieben ist, beteiligt bin, wird dieser Artikel hoffentlich zum Geist Ihrer Frage beitragen: Sie schreiben die richtigen Sachen .
Ich habe einen Treiber für ein Blutdruckmessgerät für den Krankenhausgebrauch geschrieben. Wenn es "fehlschlägt", wird der Patient nicht zum geplanten Zeitpunkt seinen Blutdruck überprüfen lassen; Wenn sein Blutdruck anormal ist, wird kein Alarm (im größeren System) ausgelöst. Ein solches Ereignis könnte klinisch signifikant sein.
Mein Ansatz war es, die Spezifikation / Dokumentation in einer arbeitsfreien Umgebung gründlich zu lesen (um die Versuchung zu vermeiden, sofort mit dem Programmieren zu beginnen), dann lese ich sie wieder bei der Arbeit. Danach fasste ich die möglichen Zustände und Aktionen auf Papier zusammen und "flowte" einen Algorithmus und kommentierte alle möglichen realen "schlechten Ereignisse" (Kabel wurden ausgesteckt, Batterien starben usw.). Schließlich schrieb und schrieb ich den Treiber dreimal mit unterschiedlichen Mechanismen (z. B. FSM) und verglich deren Ergebnisse. Jede Iteration half mir, Schwachstellen zu identifizieren, die ich noch nicht entdeckt hatte. Die dritte Neufassung war das "offizielle" Ergebnis. Ich habe jede Iteration mit meinem Kollegen überprüft.
Emotionale Vorbereitung bestand darin, mich davon zu überzeugen, dass das Undenkbare passieren sollte, zumindest war ich nicht vorsätzlich nachlässig - nur inkompetent (die alte "Ich bin nur menschlich" Entschuldigung). ; -)
Ich habe eine Computerschnittstelle für eine MRT-Maschine geschrieben. Es hatte keine Chance, den Endbenutzer zu verletzen, da es nur eine Datensatzverwaltung war, aber möglicherweise eine falsche Diagnose erhalten oder wichtige Informationen weglassen konnte.
Tests, viele und viele Tests.
Unit-Tests, Mid- und High-Level-Tests. Simulieren Sie alle möglichen Eingabekombinationen. Auch eine Menge Tests mit der Hardware selbst. Der Test muss vollständig und methodisch durchgeführt werden. Es sollte viel mehr Zeit zum Testen benötigen als zum Schreiben.
Fehlerbericht
Alle Fehler müssen gemeldet werden und offensichtlich sein. Wenn es das Patent nicht verletzt, scheitern Sie schnell.
Für etwas, das eine Person aktiv am Leben hält, sind die Dinge noch schlimmer. Es darf nie aufhören zu arbeiten. Wenn es fehlschlägt, muss es neu starten und weiter versuchen. Redundante Interna sind auch ein Muss für den Fall, dass die Hardware ausfällt.
Bei der falschen Firma kann es wirklich schwierig sein, in einer Situation zu arbeiten. Aber wenn alles gut läuft, Sie gut finanziert sind und der Druck auf die Freilassung nicht hoch ist, kann es ein sehr lohnender Bereich sein.
Nicht wirklich eine Antwort, aber:
Ich habe einen Freund, der Embedded-Control-Software für Laser-Augenchirurgie-Maschinen schreibt. Als er selbst Laser-Augenchirurgie hatte, ging er zu einem Augenarzt, der das System seiner Firma benutzte. Ich habe große Bewunderung für diesen Typen. Ich kann mir keine Software vorstellen, die ich je geschrieben habe, deren Qualität so hoch war, dass ich meinem eigenen Sehvermögen trauen würde.
Momentan arbeite ich an einem Basiscode für ein System, das medizinische Patienteninformationen aus Kliniken und Krankenhäusern für eine medizinische Abrechnungsstelle abruft. Wir beginnen mit einem kleineren Kunden und einer langen Einarbeitungszeit, um die Qualität sicherzustellen, aber letztendlich muss dieser Code sicher eine Vielzahl von Berichtsformaten von einer Reihe von Kunden in verschiedenen Einrichtungen handhaben.
Es ist nicht ganz im gleichen Maßstab wie Ihre Beispiele, aber ein schlechter Fehler könnte dazu führen, dass die falschen Leute in Rechnung gestellt werden oder die richtige Person an eine nicht funktionierende Adresse in Rechnung gestellt wird (Verschrauben von Kreditauskünften) oder Leute für Identitätsdiebstahl öffnet Es ist immer noch ziemlich kritisch. Oh ja, und es könnte bedeuten, dass Ärzte nicht so schnell bezahlt werden. Das ist auch wichtig, insbesondere aus betriebswirtschaftlicher Sicht, aber nicht in der gleichen Klasse wie Datenschutz und Integrität.
Ich habe verrückte Geschichten über die Prozesse gehört, mit denen Code bei der NASA für die Raumschlitze geschrieben wurde. Jede Zeile Code enthält etwa 10-20 Zeilen Dokumentation, zusammen mit Tests, vollständige Revisionshistorie usw. Jedes Mal, wenn ein Fehler gefunden wird, wird nicht nur der Code ausgewertet und repariert, sondern der gesamte Vorgang des Schreibens von Code, der gesamte Befehl Kette usw. wird überprüft, um die Frage zu beantworten: "Was ist in unserem Prozess falsch gelaufen, das diesen Fehler überhaupt erst enthalten ließ?"
Mein erster "richtiger" Software-Job war das Schreiben einer GUI-App für die Planung stereotaktischer Gehirnoperationen. Testen, Testen, Testen ... absolut keine formalen Methoden, Gedanken im Engineering-Stil, nur jüngere Programmierer machen es aus. Als sie anfingen, über die Verwendung der Software zu sprechen, um einen Roboterarm mit einem Laser zu steuern, ohne ernsthafte technische Methoden an Ort und Stelle zu haben, machte ich mir ein wenig Sorgen um weitere Büroflächen.
Ich habe Informationssystemanwendung für lokale Regierungskulturen und Tourismusabteilung in Bali-Insel geschaffen, die in mehreren Tourismusdentinationen installiert wurden, die umfangreiche Informationen über die Kultur, Karten, Unterkünfte usw. zur Verfügung stellen.
Wenn es scheiterte, dann könnten wahrscheinlich Touristen nicht die richtigen Informationen bekommen, die sie am meisten brauchen, betrügen durch Brooks oder irgendwo verloren:)
Obwohl nichts so wichtig wie ein MRT-Gerät oder ein Blutdruckmessgerät war, bekam ich einen Tipp, um Blackjack neu zu schreiben, als ich für einen Online-Glücksspielanbieter arbeitete. Blackjack ist bei weitem das beliebteste Online-Spiel, und Millionen von Dollar würde durch diese Software gehen (und tat).
Ich habe die Spiel-Engine getrennt vom Server und vom Client geschrieben und Test Driven Development verwendet, um sicherzustellen, dass das, was ich annahm, in den Ergebnissen ankommt. Ich hatte auch einen Wrapper "Server", der Konsolenausgabe hatte, mit der ich spielen konnte. Dies war eigentlich nur nützlich, weil es die echte Serveroberfläche nachahmte, da das Spielen einer Textversion von Blackjack nicht sehr spaßig oder einfach ist ("Du zeichnest eine 10. Du hast jetzt eine 10 und eine 6, während der Dealer eine 6 hat anzeigen. [bsd] & gt; ")
Das Spiel wird immer noch auf einigen anderen Seiten betrieben, und meines Wissens hat es nach Jahren des Spielens nie finanzielle Fehler gehabt.
Tags und Links mission-critical