Modellbasierte Medizin Softwareentwicklung gemäß IEC 62304

Bild 1: Model-Based-Design-Tools für die IEC-62304-konforme Softwareentwicklung
Bild 1: Model-Based-Design-Tools für die IEC-62304-konforme Softwareentwicklung

Modellbasierter Entwurf lässt sich effektiv für den IEC-62304-konformen Software-Entwicklungsprozess einsetzen. Dabei sind allerlei Randbedingungen zu beachten, doch der Aufwand kann sich lohnen: Mit Links zwischen Prozesselementen und Modellen lassen sich Anforderungen vom Design bis hin zur Implementierung nachverfolgen.

Bei der IEC 62304 handelt es sich um eine internationale Norm, die Lebenszyklus-Prozesse in der Softwareentwicklung spezifiziert und die Verbesserung der Sicherheit medizinischer Geräte zum Ziel hat. Sie definiert eine Reihe von Tätigkeiten und Aufgaben, die bei der Softwareentwicklung für medizinische Geräte erforderlich sind. Werkzeuge für das »Model-based Design«, hier am Beispiel von Mathworks-Tools beschrieben, lassen sich zur Entwicklung von Software für Regelungssysteme und für Signalverarbeitungsanwendungen einsetzen, bei der die Systemintegrität und somit die Einhaltung der Norm unbedingt Voraussetzung ist.

Softwaredesign und -implementierung

Zur Modellierung von funktionalem Verhalten kann »Simulink« dienen, um das Softwaredesign in die strukturellen Hauptkomponenten zu unterteilen, ihre externen Eigenschaften anzugeben und die Beziehungen zwischen den Komponenten darzulegen. Simulink ermöglicht die hierarchische Modellierung mit Hilfe grafischer Blöcke. Zur Ausführung ist »Matlab« erforderlich.

Beispielsweise lassen sich Risikokontrollmaßnahmen in ein Simulink-Subsystem oder ein referenziertes Modell ausgliedern, wodurch sie sich auf intuitive Art und Weise nachverfolgen lassen. Unter Umständen ist es durch eine solche Vorgehensweise sogar möglich, die Software-Sicherheitsklasse für andere Teile der Architektur zu senken. »Simulink Verification and Validation« (SVV) bietet mit dem so genannten »Requirements Management Interface« eine Funktion, die Links für die Navigation zwischen Anforderungen in Textform und Modellkomponenten herstellt.

Ganz allgemein kann die Toolbox »Verification and Validation« ein Simulink-Modell mit Anforderungen verknüpfen und die Testabdeckung von Modellen bei der Simulation nach verschiedenen Kriterien messen. Diese Messung korreliert mit der des generierten Codes, ist aber nicht identisch. Für Software in Sicherheitsklasse C (mit dem größten Risikopotenzial) der Norm ist ein dokumentiertes, verifiziertes »Detailed Design« für jede Softwarekomponente erforderlich.

Das Simulink-Modell oder -Subsystem, das die einzelne Softwarekomponente darstellt, kann einen wesentlichen Beitrag zu diesem detaillierten Entwurf leisten. Weitere Softwarestandards wie DO-178B, IEC 61508 und MISRA-C, aber auch Mathworks-eigene Vorgaben wie MAAB, können die Validierung des Designs der einzelnen Softwarekomponenten unterstützen.

Funktionen in SVV automatisieren Modellüberprüfungen gemäß dieser Standards. Die Validierung des Designs kann außerdem Simulationen von funktionalen Testfällen, die aus Anforderungen abgeleitetet sind, beinhalten. Weiterhin lässt sich die Modellabdeckung durch diese Testfälle erfassen, um deren Vollständigkeit zu überprüfen. Schließlich wird für eine optimierte Implementierung der Software mit »Embedded Coder« (bis Mathworks Release R2011a »Real-Time Workshop Embedded Coder«) aus dem Simulink-Modell mehr oder weniger gut strukturierter C- oder C++-Code generiert.

Verifikation von Komponenten

Testszenarien, die zur funktionalen »Detailed Design«-Verifikation der in Simulink entwickelten Softwarekomponenten erzeugt wurden, lassen sich ebenfalls zur funktionalen Verifikation der Softwarekomponenten in der Implementierung heranziehen und erweitern. Der generierte Code wird auf dem Host-Betriebssystem kompiliert und als S-Funktion in einem Testumgebungsmodell aufgerufen. Dies ermöglicht einen direkten Vergleich des Modells mit dem Code (Software-in-the-Loop- oder SIL-Testen).

Mit Embedded Coder können solche Tests außerdem für Code durchgeführt werden, der bereits für eine Zielplattform kompiliert wurde. Diese »Processor-in-the-Loop«-Methode (PIL) hilft zu verifizieren, dass die ausführbare Software dasselbe Verhalten aufweist wie das Simulink-Modell, wenn die Software als Komponente auf dem Endgerät ausgeführt wird.

Mit Hilfe der Code-Abdeckung lässt sich zudem zeigen, dass keine unbeabsichtigten Funktionen eingeführt wurden. Model-Based-Design unterstützt das Software-Risikomanagement primär durch die Verknüpfung von Anforderungen mit Modellelementen. Zusammen mit dem »Requirements Report« von SVV ist damit die Nachverfolgung einer dokumentierten Gefährdung über Kontrollmaßnahmen im Modell (Design) bis zur Implementierung dieser Maßnahmen im erzeugten Software-Element möglich. Die Nachverfolgbarkeit ist bis auf die Ebene korrespondierender Codezeilen durch entsprechende Kommentierung gewährleistet.

Eine Navigation zwischen Code und Modell ist über einen HTML-Report sowie der »Navigate-to-Code«-Funktion in Simulink beziehungsweise »Simulink Coder« (vormals »Real-Time Workshop«) möglich. Die Toolbox »Simulink Coder« kann aus einem Simulink-Modell Programmcode erzeugen, der mit Konfigurationsdateien für verschiedene Zielsprachen anpassbar ist. Soll der generierte Code auf einer Zielhardware ohne mathematischen Coprozessor laufen, wie es oft bei eingebetteten Systemen der Fall ist, kann die zusätzliche Toolbox »Embedded Coder« eingesetzt werden, die das Erzeugen von Festkomma-Algorithmen erleichtert.

Die im Rahmen des Software-Entwicklungsprozesses erstellten Modelle und Daten müssen zusammen mit den entsprechenden Software-Elementen identifiziert und verwaltet werden. Typische Elemente, die während der Entwicklung erstellt werden, sind Simulink-Modelle, »MATLAB«-Skripte und -Funktionen, Data-Dictionaries, generierter Seriencode, S-Funktionen und weitere benutzerdefinierte Blockbibliotheken, Simulationsstimuli (Testvektoren) und -ergebnisse sowie generierte Dokumentation wie Designdokumente und Testergebnisse.

Über den Autor:

David Hoadley, Ph. D., ist Pilot Engineer bei Mathworks