Es geht hier nur um die Bereiche, wo wir als Solcept Erfahrung haben. Das heisst es geht um Entwicklung von Software und Elektronik. Wir lassen also den restlichen Lebenszyklus von Produktion bis Entsorgung aussen vor, wie auch die Details der Systementwicklung auf z.B. Fahrzeug- oder Flugzeug-Ebene.
Funktionale Sicherheit bedeutet, dass die Risiken eines Produktes von Verletzungen oder schlimmerem minimiert werden. Funktional deswegen, weil die Sicherheit von der richtigen Funktion des Systems abhängt. Z.B. dass ein Fahrzeug nicht abfährt, wenn man gerade am einsteigen ist, dass die Anzeige im Cockpit dem Piloten nicht vorgaukelt, noch mehr Treibsoff zu haben als real in den Tanks vorhanden ist.
Darin unterscheidet sich die funktionale Sicherheit von "Nebeneffekten" der Funktion des Systems, wie z.B. Explosionsschutz, Spannungsschutz, Brandsschutz etc.
Als Startpunkt für diese Übersicht gehe ich von einer "normalen" embedded Entwicklung in der Industrie aus. Beachten Sie, dass die Qualitätsstufen ohne funktionale Sicherheit (z.B. QM (Quality Managed) in der Automobilindustrie oder DAL-E (Design Assurance Level E) in der Luftfahrt) bereits einen massiv höheren Aufwand erfordern, als die Entwicklung, von der wir hier ausgehen. Dies, weil diese Entwicklungen bereits nach Level 3 von automotive SPICE oder CMMI (Common Maturity Model Integration) erfolgen sollten. Das heisst, dass bereits ziemlich viele Anforderungen, Unittests, Traceability etc. vorhanden sind.
Geschichtlich nahmen die Normen für sicherheitskritische Systeme im embedded Bereich ihren Anfang 1982 in den Vereinigten Staaten mit der Norm DO-178, welche auf Airliner abzielte. Diese Norm, heute in der Version DO-178C, ist immer noch die Mutter aller Normen und ihre Konzepte wurden von anderen Industrien übernommen. In Deutschland entstand 1998 die IEC 61508, primär für die Chemieindustrie, aber auch als Schirmnorm, von der die meisten anderen Industrien ihre Normen abgeleitet haben.
Ich möchte hier das Thema der verschiedenen Normen nicht weiter vertiefen, in vielen Fällen kommt man nicht mit nur einer aus, es gibt einen ganze Sammlung von Dokumenten, welche man beachten muss. Dennoch sind die Grundkonzepte gleich, so dass sich unabhängig von der Industrie definieren lässt, was man für funktionale Sicherheit tun muss.
Zuletzt hier in der Einführung der wohl wichtigste Punkt für alle, die für funktionale Sicherheit entwickeln wollen. Man kann zu den Normen und den von ihnen verlangten Modellen stehen wie man will, in dem Moment wo man ja sagt zu einem Projekt mit funktionaler Sicherheit, muss man das Spiel der funktionalen Sicherheit spielen. Also buchstabengetreu die verlangten Arbeiten ausführen und die Dokumente erstellen. Dies gilt für die Ingenieure, welche die Arbeit tun, aber vor allem auch für die Führung, welche die Zeit und Ressourcen zur Verfügung stellen muss. Sonst... muss man ein anderes Spiel ohne funktionale Sicherheit spielen.
Einige wenige Grundbegriffe sind wichtig, daher hier eine kurze Definition
Es gibt ein paar Grundprinzipien der funktionalen Sicherheit, welche zu verstehen helfen, wieso man genau so entwickeln soll und nicht anders.
Die erste Analyse beschäftigt den Entwickler des gesamten sicherheitskritischen Systems :
Level | Bereich | Höchste Riskostufe | Industrie |
---|---|---|---|
DAL: Design Assurance Level | E..A | A | Luftfahrt: ARP4761, ARP 4754A, DO-178C, DO-254... |
SIL: Safety Integrity Level | 1..4 | 4 | Industrie, IEC 61508 und Bahnen, EN 50128/9 |
ASIL: Automotive Safety Integrity Level | A..D | D | Automobil, ISO 26262 |
PL: Performance Level | a..e | e | Maschinen, ISO 13849 |
Class: Software Safety Class | A..C | C | Medizingeräte, IEC 62304 |
Die weiteren Analysen finden dann auf jeder der Hierarchie-Ebenen statt: System, Subsystem, Komponente, Funktion, sowohl als Hardware- wie auch als Software-Sicherheitsanalysen, teilweise in verschiedenen Ausprägungen. Von ihnen ist also jeder Entwickler betroffen. Es gibt verschiedene Varianten, die wichtigsten sind:
Basierend auf den Sicherheitsanalysen müssen Sicherheitsmassnahmen ergriffen werden, um die folgenden Ausfälle zu entdecken und abzufangen.
Diese Massnahmen können umfassen: Plausibilitätschecks, Redundanz (d.h. mehrere Systeme, welche sich gegenseitig überprüfen), diversitäre Redundanz (Redundanz beruhend auf komplett verschiedenartig aufgebauten und entwickelten Komponenten), Überwachung des Programmflusses, Fehlerkorrektur für Speicher und viele andere mehr.
Fehler in den Anforderungen sind die häufigste Ausfallursache. Daher haben Anforderungen ein hohes Gewicht in der funktionalen Sicherheit. Dabei sind verschiedene Aspekte zu beachten:
Zum V-Modell muss hier noch ein wichtiges Missverständnis ausgeräumt werden: Das V-Modell sollte nicht primär als Ablaufdiagramm, sondern als Daten-Management-Modell angesehen werden. Es bildet das "teile und herrsche" ab und die Beziehungen zwischen den Artefakten. In der Praxis heisst das, dass man ohne Iterationen zwischen den Ebenen nicht auskommt. Diese sind natürlich der Effizienz zuliebe auf ein Minimum zu beschränken. Daraus ergibt sich ein natürlicher Ablauf, da man auf den unteren Detailierungsebenen nichts fertig spezifizieren und designen kann, wenn auf der oberen nicht alles stabil und freigegeben ist. So wie man auf den oberen Integrationsebenen nichts fertig testen kann, wenn die Test auf der unteren Ebene nicht vollständig durchgelaufen sind.
Verifikation wird häufig mit Testen gleichgesetzt. Dem ist für sicherheitskritische Systeme nicht so, Tests sind nur ein kleiner Teil der Verifikation. Der grösste Teil der Verifikation besteht aus Reviews.
Aus der verlangten Code-Abdeckung und dem Anforderungs-basierten Testen ergibt sich übrigens, dass es nicht erlaubt ist (explizit so in der Luftfahrt mit DO-178C), Tests für Code-Coverage zu schreiben, zu denen es keine Anforderungen gibt. Also erzeugt man eben einfach eine Anforderung? ...die dann als "derived" Anforderung einer Sicherheitsanalyse bedarf! Es darf keine unbeabsichtigte ("unintended") Funktionalität vorhanden sein. Daher lohnt es sich, nur das zu implementieren, was wirklich gefordert ist.
Um eine homogene Qualität über das ganze Projekt sicherzustellen, werden für viele Artefakte Standards, Regeln gefordert. Diese können intern entwickelt werden, jedoch tut man sich mit den externen Auditoren einfacher, wenn man bekannte Standards benutzt, z.B. MISRA für C/ C++ Code.
Für die Elektronik sollen nur qualitativ hochwertige Komponenten ausgewählt werden. Bei der Auswahl soll auf die Langzeit-Verfügbarkeit geachtet werden, damit man die Sicherheitsnachweise bei Komponentenänderungen nicht immer wieder erbringen muss. Zusätzlich ist es unabdingbar, für die Berechnung der Ausfallwahrscheinlichkeiten gutes Zahlenmaterial zu haben.
Leider gibt es ausserhalb der AEC-Q Nachweise für die Automobilindustrie fast keine "high reliability" Bauteile mehr. Und auch an den "Standards" mit den Zahlen zur den Ausfallwahrscheinlichkeiten (Siemens SN 29500, MIL-HDBK-217F...) nagt der Zahn der Zeit, bzw. der technologische Fortschritt. Die Standards werden dennoch für quantitative Analysen herangezogen, da es meist nur um den Vergleich von verschiedenen technischen Lösungen oder die Erfüllung eines Zielwertes innerhalb des Gesamtsystems geht und nicht um eine realistische Aussage zur Ausfallwahrscheinlichkeit.
Keine moderne Elektronik- oder Softwareentwicklung ohne Software-Werkzeuge. Software? Ist die Software aller Werkzeuge im Projekt fehlerfrei? Was passiert, wenn ein Fehler in einem Werkzeug zu einem Fehler in einem Artefakt führt?
Funktionale Sicherheit ist doch logisch, eine klare Sache: sachlogisch. Denkt man am Anfang... Dem ist jedoch nicht wirklich so. Psychologische Aspekte spielen eine nicht unwesentliche Rolle, sowohl für die Zielerreichung, aber auch die Effizienz und vor allem für die eigene Zufriedenheit.
Kein Ingenieur kommt um Feedback herum, spätestens bei der Review seiner Resultate. Das positive Feedback anzunehmen stellt meist kein Problem dar, aber wenn was falsch ist, dann gehen manchmal die Emotionen hoch. Hier ist die eigene Einstellung zu Fehlern der Knackpunkt: Kann ich eigene Fehler annehmen und aus ihnen lernen? Bin ich bereit, bei fremden Fehlern hinzuschauen und darauf hinzuweisen? Bin ich bereit, solche Konflikte konstruktiv auszutragen? Denn "es funktioniert ja" ist nur in "normalen" Projekte ein Grund, schlechten Code nicht zu korrigieren, und vielleich auch dort nicht?
Und da es das Ziel sein sollte, die Review ohne Fehler zu bestehen, funktioniert Einzelkämpfertum nicht mehr. Wenn ich nicht meine Lösung mit anderen abspreche, sie gemeinsam erarbeite und einen Konsens finde, dann mache ich so viele Review-Runden bis mir schwindelt.
Zu guter letzt bin ich nur zufrieden wenn ich nicht jeden Fehler, jede Kritik als Angriff auf mich als Mensch auffasse, sondern als eine Einladung, noch besser zu werden, mich zu entwickeln.
Das ganze Projektteam und der Projektleiter werden auch in die Pflicht genommen und müssen sich um folgende Aspekte kümmern.
Damit nichts dem Zufall überlassen wird, müssen Projekte zur Entwicklung von sicherheitskritischen Systemen alle geplant ablaufen. So müssen Prozesse, Rollen, Verantwortlichkeiten etc. als Pläne zusammengefasst werden:
Das Konfigurationsmamagement stellt sicher, dass zu jedem Zeitpunkt alle Artefakte zusammenpassen.
Nach dem ersten formalen Release tritt das Änderungsmamagement in Kraft. Es wird die Zusammensetzung eines Change Control Boards definiert. Dieses muss für jede Änderung einem genau definierten Ablauf folgend sicherstellen, dass folgende Fragen beantwortet werden:
Der ganze Prozess natürlich immer mit detaillierter Rückverfolgbarkeit (Traceability).
Alle wichtigen Artefakte, je nach Sicherheitslevel sind das einige, müssen auditiert werden, d.h. eine weitere Person muss eine Review durchführen. Diese Audits sollen sicherstellen, dass man keine Abkürzungen genommen hat. Daher ist für die Auditoren immer eine starke Unabhängigkeit vom Projekt gefordert, häufig werden Dritte beigezogen: benannte Stellen, der Kunde selbst, Behörden (EASA, FAA...).
Am Schluss entsteht das wichtigste Dokument für den Kunden bzw. die Behörde, die finale Erklärung, dass das Produkt sicher ist.
Gerade von Ingenieuren wird der psychologische Anteil an der Kommunikation meist unterschätzt. Funktionale Sicherheit ist Team-Arbeit, also Kommunikation zwischen Menschen und diese lässt sich nicht auf reine Informationsübertragung reduzieren.
Die meisten Aufgaben, vor allem wenn etwas kompliziertere sicherheitskritische Systeme entwickelt werden sollen, lassen sich nicht von Anfang an so beschreiben, dass der Ingenieur sich nachher ein paar Wochen in sein Kämmerchen zurückziehen kann und seine Lösung genügend gut ist. Es braucht Kommunikation zwischen allen Beteiligten, damit die Schnittstellen stimmen und der Konsens erreicht wird, der dann in den vielen Artefakten dokumentiert wird.
Auch gutes und damit sicheres Design lässt sich nicht über Metriken erreichen, sondern nur über einen Trade-Off, einen Ausgleich und diesen Konsens gibt es nicht ohne Kommunikation miteinander.
Die Grundlage für jede Kommunikation, die ankommen soll, sind Beziehungen. Vor allem wenn die Kommunikation mal etwas schwergewichtiger ist: "das ist komplett falsch". Gute Beziehungen heisst nicht, dass alle mit allen jedes Wochenende verbringen müssen, die Beziehungen müssen dennoch so gut sein, dass eine emphatische Kommunikation möglich ist.
Zu guter letzt ist es wichtig, dass man trotz der peinlich genauen Arbeitsweise der funktionale Sicherheit eine Stimmung im Team erreicht, welche die Arbeit angenehm macht.
Es ist nun aber nicht so einfach, dass die ganze Verantwortung für die funktionale Sicherheit an das Projektteam delegiert werden kann. Vor allem dann nicht, wenn man noch den Produktlebenszyklus von der Produktion bis zur Entsorgung einschliesst. Die Organisation hat einiges zu leisten.
Für funktionale Sicherheit wird davon ausgegangen, dass die Organisation Prozesse hat, diese lebt und auch verbessert. Für die Entwicklung sind automotive SPICE oder CMMI (Capability Maturity Model Integration) als Prozessmodelle verbreitet. Und diese Modelle gehen viel weiter als ISO 9001, es sind mehr Ziele zu erreichen und mehr Tätigkeiten vorgegeben. In der Luftfahrt brauchen Sie ein DOA (Design Organization Approval), wobei dieses auch vom Kunden transferiert werden kann, wenn er die Verantwortung für die finale Qualitätssicherung übernimmt.
Die Frage, welche sich mir persönlich jeweils stellt ist die, ob und wie diese Prozesse und Modelle dann wirklich gelebt werden, vor allem bei der Zusammenarbeit mit grossen Organisationen mit hoher, zertifizierter Maturität....
Was heisst Level 3? Level 3 heisst in allen Prozessmodellen, dass Prozesse für die ganze Organisation, d.h. für alle Projekte definiert sind und gelebt werden. Sie werden dann je nach Projekt durch einen Prozess namens "Tailoring" an das Projekt angepasst. Die Prozesse umfassen Arbeitsweisen, Werkzeuge, Vorlagen, Checklisten...
All diese Prozesse müssen kontinuierlich verbesssert werden, es wird eine lernende Organisation gefordert.
Last but not least einer der wichtigsten Faktoren: die Sicherheitskultur. Die Organisation muss vor allem sicherstellen, dass die Sicherheit vor kommerziellen Aspekten steht. Das heisst, dass es nicht mehr möglich ist mit einem heroischen Wochenendeinsatz kurzfristig das Produkt auf den Markt zu werfen. Alle Pläne, Reviews, Audits müssen eingehalten werden.
Zusätzlich wird eine proaktive Einstellung zu Fehlern gefordert und dass aus Fehlern gelernt wird, auf Projekt- und Firmenebene. Klare Pläne ohne ad-hoc Ressourcenallokation sind gefordert und eine nachverfolgbare Verantwortlichkeit.
Wie wir bisher gesehen haben, ist der Aufwand für jede Anforderung, jedes Bauteil, jede Zeile Code riesig. Das heisst im Umkehrschluss, dass über jedem Projekt zur funktionalen Sicherheit stehen sollte: Keep it Simple! Jede Anforderung, jedes "nice-to-have" das wegfällt, kann viel Aufwand sparen. Die Devise ist: vereinfachen, was immer geht, auch wenn das dem Produktmanagement häufig zuwider ist.
Und nun, wir soll man vorgehen, dass man in der Lage ist, so zu entwickeln, dass das Produkt funktional sicher genannt werden kann?
Grundsätzlich kann man bestehenden Code, bestehende Schemas und eventuelle Dokumentation nicht für die funktionale Sicherheit "einfach" wiederverwenden. Man muss also alle Tätigkeiten durchführen wie für eine Neuentwicklung und mit Artefakten belegen. Die bestehenden Artefakte können höchstens als "Inspirationsquelle" dienen. Durch die angestrebten Vereinfachungen und die Korrektur der Fehler, welche die strikten Prozesse unweigerlich aufdecken, wird das Produkt so oder so geändert aus dem Prozess hervorgehen.
In seltenen Fällen, wenn die Vereinfachung durch z.B. eine neue Plattform es rechtfertigt, kann eine komplette Neuentwicklung sinnvoll sein. Vom Sicherheitsaspekt her hat ein komplette Neuentwicklung übrigens den Nachteil, dass eventuell neue Fehler eingebaut werden, welche in einem langjährigen Produkt ausgemerzt wurden.
Und dann kommt immer wieder die Frage: Können wir das Produkt nicht einfach so lassen, es gab ja bisher keine Ausfälle. Theoretisch ist das möglich, doch sind die Hürden an den Nachweis von Betriebsstunden und lückenlose Rückverfolgbarkeit von Fehlern über Jahre meist so hoch, dass diese Variante praktisch nicht anwendbar ist.
Wir sind den Weg gegangen zuerst einmal Level 3 zu erreichen, für uns mit CMMI-DEV (Common Maturity Model Integration for DEVelopment). Dazu haben wir Audits mit externen Spezialisten durchgeführt, zuerst vor allem mit Fokus auf Effizienz. Dann haben wir für die anzuwendenden Sicherheitsnormen und -level eine Gap-Analyse durchführen lassen und die Arbeitsweise, d.h. unsere Prozesse verbessert um die Lücken zu den Sicherheitsnormen zu schliessen.
Der Aufwand für die Erstellung und Pflege einer solchen Prozesslandschaft ist erheblich. Für Solcept von 2011 bis 2018 (8..16 Ingenieure) war der Aufwand zwischen 2 und 4% der jährlichen Arbeitszeit und ca. 30'000 CHF per externes Audit oder per Gap-Analyse.
Es gibt noch andere Wege:
Einerseits gibt es komplette Prozesslandschaften zu kaufen. Die Frage bei diesen ist jedoch, was mit den bestehenden Arbeitsweisen passiert, d.h. ob die Prozesse überhaupt zu Ihrer Organisation passen und lebbar sind.
Man kann auch die Prozesse direkt nach den Sicherheitsnormen erstellen. Wir hatten da Zweifel, ob wir nicht den Fokus auf Effizienz verlieren, welcher CMMI beinhaltet.
Die dritte Methode wäre dann, dem Projektteam die Norm zu geben und dieses dann die Prozesse erarbeiten zu lassen. Diese Methode kollidiert jedoch mit den Anforderungen an Prozesse von Level 3 und mit der geforderten Sicherheitskultur.
Wir entwickeln industrieübergreifend für funktionale Sicherheit und auf Wunsch transferieren wir das Projekt inklusive der ganzen Projektprozesse zu Ihnen zurück.
Wenn Sie sich nicht selbst mit den ganzen Prozessen herumschlagen möchten, kontaktieren Sie mich.
Andreas Stucki
Haben Sie zusätzliche Fragen? Haben Sie eine andere Meinung? Wenn ja, mailen Sie mir oder kommentieren Sie Ihre Gedanken unten!
Projekte? Ideen? Fragen? Machen wir einen kostenlosen Erst-Workshop!
| Anton Sulovsky
Eine der besten und realistischsten Zusammenfassung, die ich je gelesen habe...