Software für Medizingeräte

5 Tipps für die statische und dynamische Codeanalyse

13. Dezember 2019, 14:25 Uhr   |  Andrey Shastin

5 Tipps für die statische und dynamische Codeanalyse
© Pixabay

Softwarecode (Symbolbild): Die statische Codeanalyse kann den manuellen Aufwand für Reviews erheblich reduzieren.

Fachbeitrag | Das Thema Cybersecurity rückt zunehmend in den Fokus der FDA und bringt besondere Anforderungen betreffend statische und dynamischer Codeanalyse mit sich. Entwickler sollten diese automatisieren und in ihre bestehenden Entwicklungsabläufe integrieren.

Kurz erklärt

Die statische Codeanalyse prüft automatisch die Konformität zu bekannten Codierrichtlinien wie MISRA, CERT, AUTOSAR oder JSF und detektiert potenzielle Bugs wie die Nullzeiger-Dereferenzierung, Division durch Null und Pufferüberläufe. Moderne statische Analyse-Tools ergänzen zudem die traditionellen Code-Reviews und verringern den manuellen Aufwand damit insgesamt um mindestens 30%.

Während die statische Analyse den Quellcode als Text interpretiert und sämtliche Schlussfolgerungen aufgrund der Ausgabe des Parsers zieht, ohne auch nur eine einzige Anweisung auszuführen, bedient sich die dynamische Codeanalyse einer anderen Sichtweise auf den Code. Sie untersucht den laufenden Code und gibt Auskunft über die Codeabdeckung, die Hinlänglichkeit und die Qualität der Modultests, etwaige Speicherlecks sowie weitere potenzielle Schwachstellen.

Tipp 1: Der Compiler ist auf der Seite der Entwickler

Disziplinierte Entwicklungsteams kompilieren in der Regel mit –Wall und –Werror (in GCC) beziehungsweise /Wall /WX (in Visual Studio) oder wenden bei anderen Compilern entsprechende Optionen an. Das Beheben von Compiler-Warnungen ist eine einfache und kostengünstige Möglichkeit, um sich auf die Ausführung der statischen Analyse vorzubereiten. Die Prüfung des Compiler-Outputs in einem »Paranoid«-Modus kann den Gesamtumfang der bei der statischen Analyse aufgedeckten Regelverletzungen reduzieren.

Natürlich ist das Beheben sämtlicher Compiler-Warnungen grundsätzlich zu begrüßen. Allerdings gibt es Projekte, in denen die Nutzung eines Compilers nicht ausreicht und aus Konformitätsgründen keine akzeptable Option ist. Dann bieten sich statische Analysetools an, die darauf abzielen, den Code weitaus gründlicher zu untersuchen und deutlich mehr Hinweise zu liefern.

Tipp 2: Statische Codeanalyse in einer frühen Phase anwenden

Entwickler von Medizingeräte-Software sollten sich auf die Frage nach einer automatisierten statischen Codeanalyse-Praxis einstellen. Es ist so gut wie sicher, dass die statische Analyse in einem internen oder externen Audit oder sogar bei einer Antragstellung vor der Markteinführung ein Diskussionsthema wird. Entscheidend ist es, das Tool so einzusetzen, dass die Entwicklung nicht an Tempo verliert, während man sich auf das Verbessern der Qualität konzentriert, und dass man seine Zeit nicht mit Eigenheiten des Tools und mit Rauschen vergeudet.

Bei vielen Regelverletzungen an bestehendem Code ist es möglich, diese zunächst zu  übergehen und sich damit zu einem späteren Zeitpunkt zu befassen. Es ist aber wichtig, bei der Entwicklung keine neuen Regelverletzungen (technische Schuld) hinzuzufügen. Moderne Tools wie Parasoft C/C++test enthalten Features, mit denen Entwickler das Rauschen ausfiltern und sich darauf konzentrieren können, die neuesten, bei der statischen Analyse aufgedeckten Regelverletzungen zu beheben.

Tipp 3: Flexibel sein betreffend Laufzeitumgebung

Auch wenn meist gewisse Reserven für Software-Updates und Wartung freigehalten werden, reicht die Leistung unter Umständen nicht aus, um die Software für die dynamische Codeanalyse zu instrumentieren. Denn dieser Prozess braucht enorm viel RAM-Kapazität und außerdem Platz im Massenspeicher, um die Test- und Codeabdeckungs-Resultate abzulegen. Wenn also die Speicherkapazität im Gerät nicht ausreicht, um die Tests laufen zu lassen und die Codeabdeckungs-Ergebnisse zu sammeln, kann es sein, dass die Zielplattform ungeeignet ist, um die Codeabdeckung für die Modul- und Integrationstests zu erfassen. Wird die Haupt-Zielplattform standardmäßig nicht unterstützt, gilt es nach geeigneten Alternativen zu suchen, wie etwa eine verwandte Plattform mit mehr Schnittstellen und Speicher. Eine weitere Alternative ist die Verwendung von Hardware-Simulatoren, auf denen ARM Fast Models und QEMU  laufen können.

Obwohl es am attraktivsten ist, die Tests auf der Zielplattform auszuführen, lassen Teams oft die Modultests und gewisse Applikationsintegrationstests auf der Workstation des Entwicklers (z. B. Linux, Mac, Windows) laufen. Sie profitieren hierbei von einem kürzeren Entwicklungszyklus und der Tatsache, dass es für allgemeine Entwicklungsplattformen mehr Tools gibt. In diesem Fall müssen Sie ihren Embedded-Code portieren, um die Kompilierung mit einem Host-Compiler vorzunehmen, was wiederum einige Herausforderungen mit sich bringen könnte. Es gibt eine breite Auswahl an Compilern, Build-Tools, Frameworks und Methoden.  Dynamische Analysetools unterstützen viele gängige Build-Techniken, wobei intern bestimmte Annahmen gemacht werden, wie Entwickler diese einsetzen.

Tipp 4: Nicht zu sehr auf automatisch generierte Testfälle verlassen

Moderne dynamische Analysetools generieren automatisch Sätze von Modultests, um die Codeabdeckung zu verbessern. Aber Tools sind eben nur Tools und wissen nichts von den verschiedenen Szenarien, in denen der Produktions-Code zum Einsatz kommen wird. Dies gilt insbesondere, wenn man versucht, die Testabdeckung zu verbessern und die Grenze vom reinen Modul- zum Integrationstest überschreitet. Dann muss man nach wie vor die generierten Modultests manuell aktualisieren und sogar neue Tests schreiben, denn nur Sie wissen, wie sich der Code verhalten soll, wenn es um positive und negative Testresultate geht.

Werden Modultests automatisch und ausschließlich auf Basis des Quellcodes generiert, können sie bei fehlerbehaftetem Code häufig perfekt laufen. Darum sollte die automatische Testgenerierung als Ausgangsbasis für die Modultests herangezogen werden. Das manuelle Erstellen von Testfällen bewirkt eine Verbesserung der Codequalität, weil es eine zusätzliche Codeprüfung erzwingt und dafür sorgt, dass das Design aus einem anderen Blickwinkel betrachtet wird.

Tipp 5: Nicht den Aufwand für die Tool-Qualifizierung und -Validierung unterschätzen

Die FDA verlangt, dass jedes Tool, das während der formellen Entwicklung zum Einsatz kommt, für den vorgesehenen Verwendungszweck geeignet ist. So soll sichergestellt werden, dass es die erwarteten Aktionen ausführt und die richtigen Ergebnisse liefert. Im Normalfall handelt es sich hierbei um ein spezielles Prüfprotokoll mit der Bezeichnung IUV (Intended Use Validation).

Branchenführende Anbieter statischer und dynamischer Analysetools helfen beim Erstellen der notwendigen Prozeduren und Dokumentationen, was äußerst hilfreich ist, um den Aufwand zu minimieren. Hier erweisen sich Lösungen als besonders wertvoll, die einen Großteil des Prozesses automatisieren. Ebenso wie bei anderen generischen Paketen, will man vielleicht auch hier Leistung zur Prüfung und Anpassung von Dokumenten bereitstellen, um diese mit eigenen QMS-Prozeduren zu synchronisieren. Entwickler sollten daher darauf achten, dass die Toolqualifikations-Software einen Satz an Testfällen bereit hält, die sie in ihrer Umgebung ausführen müssen, um die statischen und dynamischen Analysefähigkeiten zu validieren.

Über den Autor: Andrey Shastin ist Technology & Business Partnerin Executive bei Auriga. Das Unternehmen betreut seit fast 20 Jahren Softwareentwicklungs-Projekte für Medizingeräte, wobei die Spanne von einfachen Blutzucker-Messgeräten bis zu komplexeren Systemen wie etwa Infusionspumpen, Patientenmonitoren und Beatmungsgeräten reicht.

Schlagworte:Software für Medizingeräte, Statische Codeanalyse, Dynamische Codeanalyse

Genannte Firmen:Parasoft

Moderne statische Analyse-Tools ergänzen die traditionellen Code-Reviews und verringern den manuellen Aufwand.
© Parasoft

Moderne statische Analyse-Tools ergänzen die traditionellen Code-Reviews und verringern den manuellen Aufwand.

Auf Facebook teilenAuf Twitter teilenAuf Linkedin teilenVia Mail teilen

Verwandte Artikel

Parasoft Corp.