Software-Entwicklung ist heute mehr als nur Code hacken. Software-Entwickler tragen in Zeiten der Digitalisierung, in der Software der wesentliche Bestandteil von Produkten ist, eine besondere Verantwortung über die Funktionalität ihres Codes.

Software entscheidet über Menschenleben

Im Extremfall entscheidet Software über Leben und Tod. Man denke nur an autonom fahrende Autos, die uns bald auf deutschen Straßen begegnen werden. Unser Smartphone ist zum „Alles-Vernetzer“ geworden. In ein paar Jahren wird es normal sein, dass wir per App unser Auto an die Haustüre befehlen, dieses Auto uns zu unserem Wunschort bringt – ohne dass wir jemals das Lenkrad angefasst haben. Das heißt: Das Smartphone bekommt einen viel höheren Stellenwert, was seine Sicherheit betrifft. Schon heute manövrieren wir mithilfe von Apps durch unseren persönlichen und beruflichen Alltag: Mit wem wir wann kommunizieren, welche Aufgaben wir erledigen und wann wir welche Nachrichten konsumieren. Im industriellen Einsatz überwachen und steuern Apps Logistik-, Produktions- oder Wartungsprozesse. Insbesondere aber in den Bereichen Railway, Aviation, Pharma, Medizintechnik, Food, etc.. gilt: Software kann Menschenleben retten oder gefährden.

Funktionale Sicherheit als wesentliche Anforderung von Industrie 4.0

Wir leben im Zeitalter des Internet of things. Unterschiedlichste Geräte werden über das Internet miteinander vernetzt und gesteuert. Die Funktionale Sicherheit, also die Fähigkeit, bei Auftreten von Gefahren in einem sicheren Zustand zu bleiben oder diesen einzunehmen, ist mit zur zentralen Anforderung an alle Software-Entwicklungen geworden.

In diesem Zusammenhang haben sich drei Grundprinzipien etabliert:

  • Security by design
  • Quality by design
  • Safety by design

Damit ist gemeint, dass bereits im Entstehungsprozess (Architektur- und Designprozess) eines Produkts alles getan wird, um Fehler und Sicherheitsrisiken zu vermeiden. Doch wie sieht das in der Praxis aus?

Software-Entwicklung beginnt weder beim Coden, noch endet sie damit

Reines Coden war gestern. Um die Funktionale Sicherheit von programmierbaren Anwendungen zu gewährleisten, halte ich drei Punkte für wichtig:

  1. Eine ausführliche Anforderungsanalyse, inkl. der Analyse von Risiken
  2. Regelmäßig durchgeführte Software-Tests
  3. Eine automatisierte Überwachung des gesamten Entwicklungszyklus

Requirements Engineering – Fehler bereits mitdenken

In der Software-Entwicklung dürfen nicht nur kundenseitig Anforderungen in einem Lastenheft dokumentiert werden, sondern es muss bereits hier an mögliche Gefahren und Sicherheitsrisiken gedacht werden. Dazu gehören funktionale, wie auch nicht-funktionale Anforderungen zu berücksichtigen, wie die Nutzung von Open Source Software oder Freeware in sicherheitskritischer Software. Im gewerblichen Bereich kann eine Nicht-Beachtung von Sicherheitsrisiken zu Strafzahlungen, Lizenzverstößen u. ä. führen.

Zwei Methoden, mögliche Fehlerquellen bereits bei der Anforderungsanalyse zu identifizieren, stelle ich Ihnen hier vor:

Fehlermöglichkeits- und Einflussanalyse

Die Fehlermöglichkeits- und Einflussanalyse (Failure Mode and Effects Analysis, kurz: FMEA) wird eingesetzt, um Fehler bereits in der Entwurfsphase eines Projekts zu entdecken und von vornherein zu vermeiden. Sie stützt sich auf das Verständnis, dass die möglichst frühe Korrektur oder gesamte Vorbeugung eines Fehlers günstiger ist als eine spätere Verbesserungs- oder Korrekturmaßnahme. Mehr Infos in unserem Glossar unter: https://gloeckner-schuhwerk.de/glossary/fmea/

Fehlerbaumanalyse

Die Fehlerbaumanalyse (Failure Tree Analyses, kurz: FTA) ist eine Methode, um die Zuverlässigkeit eines technischen Systems zu bestimmen. Ziel der Fehlerbaumanalyse ist es, durch schrittweises Vorgehen die Komponenten zu identifizieren, die zu einem Ausfall des Systems führen können. Mehr Infos in unserem Glossar: https://gloeckner-schuhwerk.de/glossary/fta/

Überwachen Sie Ihren Entwicklungszyklus

Software-Entwicklung mit Anforderungskatalogen in Excel oder Word ist nicht mehr zeitgemäß. Sie funktionieren nicht in größeren, dezentral arbeiteten Teams, denn sie sind zu wenig flexibel und aktualisieren sich nicht bei allen Clients automatisch.

Das Entwicklungsteam benötigt eine Umgebung, in der sich alle Schritte, von der Planung bis zur Auslieferung, Betrieb, Wartung und Support, auch zu späteren Zeitpunkten noch nachvollziehen können. Jeder Schritt muss dokumentiert sein, um so auch im Falle eines Fehlers schneller an die Ursache zu kommen und Fehler beheben zu können.

Dafür gibt es Application Lifecycle Management Lösungen. Mithilfe dieser sind Sie sind in der Lage, den gesamten Entwicklungszyklus zu tracken und zu späteren Zeitpunkten genauestens nachzuvollziehen.

Testen Sie Ihre Software

Überlassen Sie das Testen nicht dem Zufall! Auch das frühzeitige Testen gehört zur verantwortungsvollen Software-Entwicklung. Aus diesem Grund müssen Sie auch Ihre Tests genauso planen und designen wie das eigentliche Software-Produkt. Idealerweise beginnen diese beiden Prozesse gleichzeitig, d. h. wenn sie mit dem Software-Design beginnen, starten Sie auch gleichzeitig mit dem Test-Design. Auch hier gilt der Grundsatz der Verifizierung und Validierung, das Hinterfragen: „Entspricht mein Testergebnis dem geplanten Ergebnis?“ und „Ist mein Testvorgehen das geeignete für den Test, den ich durchführen möchte?“.

Wichtig ist, wenn Änderungen an einer Software vorgenommen werden, über Integrationstests das Verhalten des Gesamtsystems zu prüfen. So können Auswirkungen von einem Modul auf andere Komponenten der Software erkannt werden.

Software-Entwicklung ist mehr als Programmierwissen

Aus den vorangestellten Anforderungen an die Software-Entwicklung ergibt sich: Coden im stillen Kämmerlein war gestern. Der qualitätsbewusste Entwickler verlässt sich nicht auf seine Coding-Skills, sondern bildet sich auch abseits seiner Nische weiter. Dazu gehört auch, anerkannte Methoden und technische Standards zu kennen, wie z. B.:

  • ISO 26262 „Road vehicles – functional safety“ – Diese Norm soll die funktionale Sicherheit von Elektronikkomponenten im Auto gewährleisten
  • ISO 61508 – Diese Norm handelt von der Entwicklung programmierbarer elektronischer Systeme, die eine Sicherheitsfunktion aufführen

Fazit: Der Erfolg Ihrer Software entscheidet sich schon bei der Planung

Je ausführlicher und detaillierter Sie zu Beginn eines neuen Software-Projekts das Requirements Engineering machen, umso besser kann das Ergebnis werden. Das heißt: Wenden Sie mindestens 50 Prozent Ihrer Zeit für das Anforderungsmanagement auf und 25 Prozent für das Testen Ihrer Software.

Es wird sich langfristig rechnen: Qualität kostet weniger, als keine Qualität.

Nun würde ich gerne von Ihnen wissen: Wie sind Ihre Erfahrungen mit Software-Entwicklung in Zeiten von Industrie 4.0? Welche Standards haben Sie implementiert, um die Funktionale Sicherheit zu gewährleisten?

Bildquelle: https://pixabay.com/de/computer-computertechnologie-zimmer-1245714/