Wie wird Software in kritischen Systemen auf Leben und Tod getestet?

51

Ein Flugzeug, im Gegensatz zu beispielsweise einer Website, ist ein System, bei dem ein Ausfall in bestimmten Systemen völlig inakzeptabel ist, da Fehler in z. B. der Flugüberwachung zu einer Fehlfunktion des Autopiloten führen und einen Tauchgang durchführen können. Dies ist offensichtlich nicht der Fall, da die hervorragenden Ingenieure von Boeing und Airbus den Autopiloten überprüfen, um sicherzustellen, dass ein Tauchgang nicht plötzlich ein akzeptables und sicheres Manöver darstellt. Oder der Computer stürzt ab und die Piloten des neueren Fly-by-Wire-Flugzeugs können das Flugzeug nicht mehr fliegen. Natürlich sind in diese Systeme verschiedene Sicherheitsverfahren und Redundanzen eingebaut, um einen Absturz (sowohl der Software als auch des Flugzeugs) zu verhindern.

Andererseits ist es ziemlich offensichtlich, dass Software nicht perfekt ist - sowohl Open Source- als auch Closed Source-Software stürzen regelmäßig ab, und nur das einfachste "Hello World" -Programm schlägt nicht fehl. Wie können die Ingenieure, die die Softwaresysteme in der Luftfahrt-, Medizin- und anderen Lebens- und Todesbranchen entwickeln, ihre Software so testen, dass sie nicht ausfällt (und wenn doch, zumindest nicht ordnungsgemäß)?

Ich hoffe verzweifelt, dass Sie nicht alle gehen werden: "Oh, ich arbeite für Boeing / Airbus / (eine andere Firma) und es ist nicht so! Viel Spaß bei Ihrem nächsten Flug / Krankenhausbesuch."

waiwai933
quelle
8
Wenn man den Fall des Therac25 und des Patriot-Akkus betrachtet, der sich nicht einschalten ließ, ist das offensichtlich nicht gut genug.
Loren Pechtel
@Loren Nun, ich habe keinen Zweifel, dass es keine Ausnahmen gibt. Andererseits habe ich noch nie von einem Airbus A320 (einem Fly-by-Wire-Flugzeug) gelesen, bei dem jemals ein erheblicher Softwarefehler aufgetreten ist, der fast zu Verletzungen / Verletzungen / zum Tod geführt hat, und es wurden über 4000 Exemplare hergestellt.
Waiwai933
3
"Hallo Welt" kann auch fehlschlagen. lol
xandy
1
@waiwai - tatsächlich geschah das vor ungefähr einem Jahr - ein fehlerhafter Sensor zeigte an, dass das Flugzeug zu steil anstieg und kurz vor dem Abwürgen stand. Der Versuch des Computers, zum ebenen Flug zurückzukehren, war tatsächlich ein Tauchgang. Kein Absturz, aber es gab Verletzungen / Schäden durch Passagiere und lose Gegenstände, die um die Kabine geworfen wurden.
Tom Clarkson
6
Verwenden sie keine Todestraktinsassen mit Pilotenschein?
JeffO

Antworten:

29

Ich habe viel in der Industriesteuerung gearbeitet. Es muss nicht in einer ruhmreichen Branche wie der Luft- und Raumfahrt sein. Fast jede Industriemaschine verfügt über genügend Energie, um schwere oder tödliche Verletzungen zu verursachen. Ich war in der Nähe, als Menschen verletzt wurden. Wenn Sie die meiste Zeit an einem Schreibtisch in einem Büro verbringen, werden Sie wahrscheinlich überrascht sein, wie gefährlich die meisten Fabrikjobs sein können (und waren es sicherlich bis vor kurzem). Jetzt haben wir bessere Methoden zur Maschinensicherung. So funktioniert es in der Praxis (obwohl es von Gerichtsbarkeit zu Gerichtsbarkeit unterschiedlich ist):

In den USA gibt es OSHA-Standards und in der EU ähnliche (normalerweise strengere) Richtlinien. Diese beginnen in der Regel damit, dass Sie eine Risikoanalyse durchführen müssen. Dies bedeutet, dass Sie eine Liste aller Gefahren erstellen und diese Gefahren dann kategorisieren, wobei Sie berücksichtigen, wie oft eine Person dem Risiko ausgesetzt wäre, wie einfach es ist, das Risiko zu vermeiden (abhängig von der Geschwindigkeit usw.) und was ist die Schwere des Ergebnisses (Schnitt, Amputation, Tod usw.).

Ein Großteil der Analyse hat mit der Gefahrenabwehr zu tun. Wenn Sie einen großen Käfig um Ihre Maschine legen und festschrauben, gilt Ihre Maschine als sicher, wenn die Komponenten der Maschine die Schutzvorrichtung nicht durchbrechen können. Wenn Sie zum Einsteigen ein Werkzeug benötigen, wird dies als Wartungsaufgabe betrachtet, und Wartungspersonal muss geschult werden, wie man sicher an einer Maschine arbeitet. In der Realität müssen die meisten Maschinen jedoch regelmäßig mit den Bedienern in Kontakt treten, sodass wir Zugangstüren in die Schutzvorrichtung oder Lichtvorhänge usw. einbauen müssen. Diese Türen und Lichtvorhänge müssen überwacht werden und die Gefährdungskraft, der der Bediener ausgesetzt ist muss "steuersicher" abgeschaltet werden.

Basierend auf dieser Analyse werden die Risiken in verschiedene Kategorien eingeteilt. Eine übliche Klassifizierungsskala ist Kategorie 1 bis Kategorie 4 (basierend auf der Norm EN 954-1). Aufgrund dieser Kategorien sind Sie gesetzlich verpflichtet, ein bestimmtes Maß an Maschinenschutz und Sicherheit zu gewährleisten.

Für Kategorie 4 ist beispielsweise Folgendes erforderlich:

Ein einzelner Fehler in jedem dieser Teile führt nicht zum Verlust der Sicherheitsfunktion.

Der einzelne Fehler wird mit oder vor der nächsten Anforderung an die Sicherheitsfunktion erkannt, oder wenn dies nicht möglich ist, kann eine Anhäufung von Fehlern nicht zum Verlust der Sicherheitsfunktion führen.

Dies kann in der Praxis schwierig zu erreichen sein, wird jedoch durch die Verfügbarkeit von Standardkomponenten, die nach Kategorie 4 zertifiziert sind, vereinfacht. Eine der häufigsten Komponenten in diesen Systemen ist beispielsweise ein Sicherheitsrelais. Dies sind mehr als nur mechanische Relais:

  • Sie dienen zur Überwachung von zwei redundanten Eingangskanälen. Wenn Sie also einen Sensor haben, der einen Fehlerzustand erkennt (z. B. eine geöffnete Schutztür), verfügt dieser normalerweise über zwei Kontakte mit redundanten Schaltkreisen. Das Relais überwacht beide Kanäle, und wenn einer der beiden Kanäle öffnet, fällt die Stromversorgung Ihrer Stellantriebe ab. Wenn beide nicht gleichzeitig ausfallen, tritt ein Fehler auf und die Maschine kann erst nach einer Reparatur wieder gestartet werden .
  • Das Relais verwendet auch elektrische Impulse auf diesen Leitungen und diese Signale zur Überwachung auf gekreuzte oder kurzgeschlossene Drähte, um einen Verdrahtungsfehler zu erkennen.
  • Auf der Ausgangsseite werden zwei Schaltkreise zum Ansteuern der Ausgangsspulen verwendet. Wenn also einer in den Zustand "Ein" wechselt, sollte der andere verhindern, dass der Ausgang erregt wird. Zusätzlich werden diese überwacht und wenn ein Fehler erkannt wird, wird der Betrieb verhindert. Die Spulen selbst sind doppelt zwangsgeführte Relais, was bedeutet, dass redundante physische Relais am Ausgang vorhanden sind. Außerdem ist gewährleistet, dass die Kontakte jedes einzelnen Relais physisch miteinander verbunden sind, so dass ein Kontakt von z. B. 4 nicht von alleine geklebt werden kann. Diese werden ebenfalls überwacht.
  • Es enthält auch einen Eingang zur Überwachung eines normalerweise geschlossenen Hilfskontakts von der zu steuernden Last. Wenn der Ausgang ausgeschaltet wird, muss der normalerweise geschlossene Kontakt aktiviert sein, was bedeutet, dass bestätigt wird, dass der Motorschütz oder was auch immer ausgeschaltet wurde, bevor er wieder eingeschaltet werden darf.

Wie Sie sehen, handelt es sich um komplizierte Geräte. Typische Kosten liegen zwischen 200 und 600 USD für jedes Sicherheitsrelais. Offensichtlich gibt es Software in diesen Geräten. Um Ihr Sicherheitsrelais zertifizieren zu lassen, müssen Sie normalerweise folgendermaßen vorgehen:

  • Zwei redundante Prozessoren, die in der Regel von verschiedenen Anbietern stammen und auf unterschiedlichen Designs basieren.
  • Der auf jedem Prozessor ausgeführte Code muss von zwei Teams entwickelt werden, die unter isolierten Bedingungen arbeiten. Dies verhindert, dass ein einzelner Softwarefehler zu einem einzelnen Fehlerpunkt wird.
  • Der Ausgang beider Prozessoren muss übereinstimmen oder die Sicherheitsrelais sind defekt.

Sobald Sie Ihr Sicherheitssystem für Ihre Maschine unter Verwendung von sicherheitsrelevanten Komponenten entworfen haben, müssen Sie das Design von einem professionellen Ingenieur überprüfen und stempeln lassen. Dann baust du die Maschine. Dann wird der P.Eng. wird die Konstruktion der Maschine überprüfen, um sicherzustellen, dass sie nach dem Entwurf gebaut wurde. Sie werden es dokumentieren und einige Tests durchführen, um sicherzustellen, dass es wie erwartet funktioniert. Dies wird als Pre-Start-Review (PSR) bezeichnet und wird nicht in allen Ländern durchgeführt. Nach dem PSR darf ein Bediener die Maschine bedienen.

In den letzten Jahren gab es einige Revolutionen bei Sicherheitssystemen. Eine Zeit lang vertraute niemand der Übertragung von Sicherheitsdaten über ein Netzwerk, weshalb die so genannten "verteilten E / A-Systeme" wie DeviceNET und EtherCAT im Sicherheitsteil des Systems nicht zulässig waren. Neuere Protokolle ermöglichen es jedoch jetzt, dass Sicherheitsgeräte über diese industriellen Netzwerke laufen. Die Protokolle verwenden zeitgestempelte Nachrichten und doppelte redundante Verarbeitung an beiden Enden der Verbindung.

Sicherheitsrelais gehen langsam den Weg des Dodo Birds und werden durch kompliziertere Sicherheits-SPS ersetzt, mit denen die Sicherheitslogik in einer Funktionsblockdiagrammsprache aufgebaut werden kann. Auch diese Sicherheits-SPS verwenden alles redundant. Wenn das Programm genehmigt ist, muss vor der Inbetriebnahme der Maschine die P.Eng. stempelt das Programm und das Programm / die SPS wird mit einem Passwort gesperrt. Es braucht auch einen Hash des Programms und dieser Hash ist in der Dokumentation vermerkt (das ist es, was das P.Eng. Wirklich stempelt).

Sobald Sie Ihr Sicherheitssystem entworfen haben, kann die Logik, die Sie zur Steuerung der Maschine selbst schreiben, ein Kinderspiel sein. Programmierer stürzen häufig Maschinen ab, die Tausende von Dollar an Schaden verursachen, aber zumindest wird niemand verletzt.

Scott Whitlock
quelle
20

Es gibt eher eine ernsthafte Tendenz zur formalen Verifizierung als zur zufälligen Funktionsprüfung.

Regierungsbehörden wie die NASA und einige Verteidigungsorganisationen geben immer mehr für diese Technologien aus.

Sie sind immer noch eine PITA für den durchschnittlichen Programmierer, aber beim Testen kritischer Systeme sind sie oft effektiver.

Es gibt auch die Tendenz, mehr Techniken aus der Wissenschaft auszuprobieren, um beispielsweise Multithread-Code zu validieren.

Uri
quelle
6
Da wir Bodensupport-Software für die NASA-Missionskontrolle geschrieben und Ausschnitte des alten und neuen Flugcodes gesehen haben, gibt es keinen solchen Schwerpunkt. Okay, aufgrund der Zunahme der Menge gibt die NASA vielleicht mehr für die Qualitätskontrolle aus als jemals zuvor, aber die Aufmerksamkeit, die auf jede Anwendung gerichtet ist, ist viel geringer als zu der Zeit, als das Weltraumprogramm noch jung war. Sicherheitskritische Dinge werden nach wie vor mit größter Sorgfalt behandelt, aber für unternehmenskritische Dinge ist lediglich eine weniger als umfassende Testsuite erforderlich, und selbst die sicherheitskritische Überprüfung scheint im Laufe der Zeit abgenommen zu haben.
Ben Voigt
7
Bitte beachten Sie, dass ich nicht ablehne, dass die formale Verifizierung sehr effektiv sein kann und für die Erzielung eines Höchstmaßes an Zuverlässigkeit unerlässlich ist. Es ist nur so, dass Manager gelernt haben, wie viel es kostet, und angesichts der immer komplexer werdenden Software nicht mehr so ​​viel pro Anforderung und Codezeile ausgeben können. Der richtige Ansatz wäre, das System zu partitionieren und die kritischen Teile klein zu halten, aber ich habe das nicht effektiv gesehen, mit dem Ergebnis, dass das Management den gesamten formalen Verifizierungsprozess für unerschwinglich erklärt hat.
Ben Voigt
2
@Ben Voight: Wenn ich ein Astronaut wäre, würde mich Ihr Bericht sehr beunruhigen.
Orbling
1
@Orbling: Die Astronauten sollten wahrscheinlich etwas Gewicht auf das Problem legen, aber sie sind zunächst eine Gruppe extremer Risikoträger. Es gibt einen Punkt, an dem Sie die Risiken, die Sie kontrollieren können, auf eine Größenordnung gesenkt haben, die Sie nicht einhalten können, und es ist nicht sehr effektiv, weiterhin Geld auszugeben Punkt. Einige hochrangige Manager waren davon überzeugt.
Ben Voigt
1
Und es ist traurig zu glauben, dass nicht viele Menschen Dijkstra zugehört haben, der sich seit den 1960er Jahren immer wieder mit formaler Verifikation befasst hat. Wie Nietzsche sagte: "Einige Männer werden posthum geboren."
dumm
12

Es kommt darauf an, was die Software ist. Beispielsweise gibt es in Flugzeugen normalerweise eine doppelt redundante Verarbeitung für kritische Systeme. im extremfall können 2 verschiedene hardware-designs verwendet werden und zwei unabhängig voneinander entwickelte s / w-teile, von denen jeweils einer ausgeführt werden kann. Sie berechnen und überprüfen sich gegenseitig. Dies ist nicht kinderleicht und extrem teuer.

Wenn es um das Testen von Flugzeugsystemen geht, werden eine Reihe von Tests durchgeführt - das Testen von flugbezogenen Systemen dauert Monate, und wenn Sie Änderungen vornehmen, müssen eine ganze Reihe von erneuten Tests durchgeführt werden. Dies geschieht normalerweise in einem Simulator, der tatsächlich mit echten Flugzeugteilen (z. B. Cockpit) gefüllt sein kann, beispielsweise mit einem simulierten Motor oder ähnlichem. Wie Sie sich vielleicht vorstellen können, ist der Bau auch fürchterlich teuer. Änderungen werden anhand eines formellen Testprogramms bewertet und dann in einem realen Flugzeug in Testflügen ausgeführt. Während Dinge wie "gestörte Funktionstests" ausgeführt werden, darf das geänderte Objekt seine normalen Aufgaben ausführen und alles wird überprüft / getestet, um festzustellen, dass keine schädlichen Auswirkungen aufgetreten sind. Das kostet auch viel Geld und kann Wochen dauern.

Ich kenne ein Beispiel, in dem eine sehr einfache Änderung an einem Flugsystem erforderlich war - so einfach, dass Sie überrascht wären, wie gering diese Änderung ist. Allerdings hätte der erneute Test> 3 Monate gedauert und ungefähr 1 Million Dollar gekostet.

Wenn Sie in die Medizinbranche einsteigen, gibt es eine ganze Reihe regulatorischer Hürden, die sich nicht nur auf Tests, sondern auch auf Entwicklungsprozesse und Dokumentation beziehen.

All diese Felder sind ein großer Schritt weiter als Orte, die ein bisschen PHP-Code für eine Website ausgeben. Es ist langsam, mühsam, schwierig, langweilig, mühsam, genau und sehr teuer. Nehmen Sie Ihre normalen Entwicklungs- / Testkosten und multiplizieren Sie sie mit etwa 100, und Sie nähern sich der Marke.

schnell_nun
quelle
Ein Beispiel für "2 verschiedene Hardware-Designs und zwei unabhängig voneinander entwickelte S / W-Komponenten, von denen jeweils eine ausgeführt werden kann" wäre interessant. Nicht widersprechen, nur neugierig.
Brian Carlton
1
@Brian: Ein bekanntes Beispiel für 2 verschiedene HW, 2 unabhängig voneinander entwickelte SW finden Sie beispielsweise im Antiblockiersystem-Controller. Siehe zum Beispiel infineon.com/cms/jp/product/applications/automotive/safety/… , das zwei verschiedene CPU-Architekturen (8-Bit und 16-Bit) auf einem einzelnen IC verwendet.
Schedler
4
Drei ist noch besser. Bei zweien weiß man nur, dass einer von ihnen falsch ist. Mit drei kannst du abstimmen. AFAIK, der Airbus A380 hat drei Flugcomputer von zwei Herstellern.
Jörg W Mittag
Vor Jahren bin ich auf einige militärische Head-up-Displays gestoßen, die auf diese Weise entworfen wurden. Ich vermute, dass viele dieser Techniken aus Kostengründen nicht mehr so ​​oft angewendet werden wie früher.
quick_now
3

Da Sie bereits genügend gute und informative Antworten erhalten haben, ist hier meine Meinung.

Es ist ganz einfach: Der erste Test wird immer von den Programmierern selbst durchgeführt. Es neigt dazu, die Anzahl der Fehler gering zu halten, und stellt sicher, dass nur die Qualitätsprogrammierer auf der Gehaltsliste bleiben.

Domchi
quelle
3

Lebenskritische Software wird nicht nach einem anderen Standard als dem "es scheint zu funktionieren" getestet , da dies überall getan wird.

Alle Investitionen fließen entweder in das, was früher zu funktionieren schien, oder in Projekte, die es Nicht-Programmierern ermöglichen, bessere Software zu produzieren .

ps Keine Kommentare zum ersten -1, aber ich würde mich freuen, -1für jede Referenz, die meiner Aussage widerspricht, zu nehmen .

Kann ich für jede Referenz, die ich auf kritische Software stelle, die nicht gut entworfen oder getestet wurde, +1 vergeben? Simson Garfinkel dokumentiert zehn Fälle in einem Artikel über WIRED.

Apalala
quelle
Das ist leider alles zu genau.
Ben Voigt
Klar, ich habe dich auf das Angebot für -1 genommen.
Brian Carlton
@ Brian Carlton Sie haben keine Referenz angegeben ...
Apalala
Was ist mit DO-178, MOPS für GPS ... Zumindest kann ich die Arbeitstests über ein Jahr dauern. Beachten Sie, dass das Testen nicht sicherstellt, dass der Code fehlerfrei ist und in jedem möglichen Fall der Spezifikation entspricht.
Jinawee
2

Es gibt nicht eine Antwort für alle Fälle. Es ist Sache des einzelnen Herstellers, zu entscheiden, wie er seine Software entwickelt und testet. Der gesamte Softwareentwicklungsprozess muss jedoch formalen Spezifikationen entsprechen.

Zum Beispiel , wenn die Software für medizinische Geräte zu schaffen , müssen Sie den folgen IEC 62304 Standard für Software für medizinische Geräte. (Leider kann ich nur auf Wikipedia verlinken, da es nicht kostenlos ist). So gut wie jedes Land der Welt verlangt, dass dieser Standard eingehalten wird.

Wie streng diese Anforderungen sind, hängt vom Schadensrisiko ab. Zum Beispiel hätte ein lebenserhaltendes Gerät das größte Risiko, Schaden zu nehmen (sicherer Tod, wenn das System ausfällt), wohingegen ein System, das mit Krankheitsdiagnose arbeitet, ein geringeres Risiko hat (möglicher Tod, wenn eine unheilbare Krankheit nicht richtig diagnostiziert wurde, wenn das System ausfällt).

Grundsätzlich heißt das aber, dass eine Rückverfolgbarkeit von den Anforderungen bis zur Software gegeben sein muss. Sie müssen Software-Unit-Überprüfungen durchführen. Das gibt nicht an, was die Überprüfung ist. Kann Unit-Tests sein, kann Code-Überprüfung sein. Bei Geräten mit höherem Risiko müssen Sie die Schnittstellen zwischen Softwareeinheiten manuell überprüfen (soweit ich weiß und weiß). Und natürlich viele andere Regeln. Oh, und Sie müssen eine Menge Dokumentation schreiben, um Ihre Arbeit zu dokumentieren.

Der Standard verbietet keine agile Entwicklung, obwohl es beim Lesen so aussieht, als wäre er mit Blick auf die Entwicklung von Wasserfällen geschrieben worden.

Ich kenne keine anderen Bereiche der Softwareentwicklung wie Luftfahrt, Züge, Autos usw. Aber ich gehe davon aus, dass andere ähnliche formale Richtlinien existieren.

Pete
quelle
1

Viele Techniken werden verwendet, einschließlich, aber nicht beschränkt auf:

  • formale Gestaltung und / oder Validierung
  • Strenge Codierungsstandards, die aufwändige Programmierungen wie die dynamische Zuweisung von Speicher vermeiden
  • sehr anspruchsvolle Qualitätsingenieure
  • Manys statische Analysetechniken wie Code Review, Fehlerbäume, FMECA, ...

Aber die Technik Nummer eins ist:

  • TESTEN

Die Software eines Raumfahrzeugs erfordert mehr Aufwand beim Testen als beim Entwerfen und Codieren.

Flugzeuge werden mehrjährigen Flugtests unterzogen, bei denen das Flugzeug in extreme Situationen gebracht wird. Dies testet nicht nur die physikalische Struktur, sondern auch die Software.

mouviciel
quelle
1

Es gibt einen Artikel "Perfect Software" von Jack Ganssle über EETimes vom 01.03.2009, 00:00 Uhr EST. Ein paar Punkte von dort:

  • "Theoretisch ist Software die einzige Komponente, die perfekt sein kann, und dies sollte immer unser Ausgangspunkt sein." - Das sagt Jesse Poore. Auf seiner Webseite erfahren Sie, wie perfekte Software zu nicht viel höheren Kosten als normale Software erstellt werden kann.
  • Es gibt industrielle Anbieter von hochzuverlässigen Betriebssystemen. Der Artikel erwähnte Mircrium und Green Hills. Auf der Webseite von Micrium finden Sie eine Liste der Zertifizierungsstandards. Dies müssen die Prozesse und Regeln sein, denen die Branche folgt. Das basiert auf einer formalen Validierung, ist aber stark von der Theorie abgewichen.

Interessanterweise deuten die von Capers Jones gesammelten Daten in Bezug auf die kommerzielle Software darauf hin, dass "Software im Allgemeinen eine Effizienz bei der Beseitigung von Fehlern (der Prozentsatz der vor dem Versand entfernten Fehler) von 87% aufweist. Die Firmware erreicht bei weitem bessere 94%." Für mich ist keines davon nahezu perfekt. Der Artikel, den ein früherer Antworter erwähnte, besagt, dass das NASA-Space-Shuttle-Team eine Fehlerbehebungsrate von 99% erreicht hat, die Kosten liegen jedoch bei 35 Millionen pro Jahr für etwa 400.000 Codezeilen.

Ein interessanterer Artikel "Software für zuverlässige Systeme" desselben Autors vom 1.11.2009 scheint relevanter zu sein. Es kann wie folgt zusammengefasst werden:

  • In Bezug auf den Entwicklungsprozess hat die Industrie DO-178B oder IEC61508 befolgt. Es betont das Testen mit größter Abdeckung. Es gibt jedoch nur wenige Anhaltspunkte dafür, dass dies wirksam ist.
  • Eine Zertifizierungsstelle, das Committee on Certificably Dependable Software Systems, hat ein Buch mit dem Titel "Software für verlässliche Systeme - ausreichende Nachweise" veröffentlicht. Es ist eine gute Referenz.
  • Das Buch fordert im Wesentlichen drei Dinge: [1] Legen Sie explizite Regeln für Zuverlässigkeitstests fest. [2] Teste gegen die Regeln, stelle aber auch sicher, dass die Tests für normale Kunden oder Aufsichtsbehörden verständlich sind, die weniger Zeit benötigen als die Entwickler. [3] Stellen Sie sicher, dass die Experten für Softwaretechnik und Problemdomäne die Entwicklung und den Test durchführen.
  • Der Softwarelieferant muss sich zu einer Garantie oder anderen Abhilfemaßnahmen für etwaige Softwarefehler verpflichten.
  • Verwenden Sie eine sichere Sprache, insbesondere nicht C. SPARK wird empfohlen.
  • Design for Contract Approach ist eine der Stärken von SPARK. Design-for-Contract ist eine wichtige Technologie, um Tests in jeden Funktions- / Methodenaufruf einzubetten und immer zur Laufzeit auszuführen. Mehr als eine einfache Behauptung () in alten Zeiten kann der Vertrag auch Tests gegen strukturelle Absichten beinhalten und sicherstellen, dass zu einem späteren Zeitpunkt im Wartungszyklus keine Verstöße vorliegen, wenn die ursprünglichen Entwickler zumeist zu anderen Projekten übergegangen sind. Es gibt Hinweise darauf, dass Design for Contract sehr zuverlässige Softwareprodukte hervorgebracht hat. Mit SPARK und seinen Tools können Zertifizierungs-Testfälle generiert werden, um den Zertifizierungsprozess zu vereinfachen.

Meiner Erinnerung nach hat HP vor fast einem Jahrzehnt das Vertragsdesign praktiziert. Mit einem kleinen Team, 500.000 Codezeilen, wurden nach der Auslieferung nur zwei Fehler gemeldet. Sehr beeindruckend.

Aus meiner Sicht kann zuverlässige oder perfekte Software nur erreicht werden, wenn die Kosten nicht unerschwinglich hoch sind. Frameworks oder Automatisierungen sind ein Muss.

Minghua
quelle
0

Sie verfügen normalerweise über eine Hardware-Verriegelung , die als Ausfallsicherung verwendet wird.

ZB enthalten übliche böse Textfelder für Killerroboter immer einen Killschalter: P

Dunkle Nacht
quelle
0

Jede Branche hat ihre eigenen Regulierungsbehörden, die Test- und Dokumentationsanforderungen für sicherheitsrelevante Hard- und Software haben. Betrachten Sie dieses PDF des Underwriters Laboratory (UL), das den UL 1998-Standard einführt: http://www.ul.com/global/documents/offerings/industries/hightech/software/UL_softwareconformityassessment.pdf

Dieses Dokument enthält Verweise auf viele andere verwandte Dokumente von UL, CSA und IEC.

Sicherheitsbezogene Software verfügt normalerweise über redundante Hardwareschaltungen oder muss über andere redundante Steuerungsfunktionen verfügen, um einen sicheren Betrieb und sichere Fehlermodi zu gewährleisten.

Oosterwal
quelle