Code-Reviews in der Medizintechnik

Code-Review oder kein Code-Review? Das ist hier die Frage. Um Software-Qualität sicherzustellen, gibt es verschiedene Ansatzpunkte. Statische Codeanalyse, automatisierte Unittests, Integrationstests, Smoke Tests und viele viele mehr. Die aufgezählten Punkte sind in der heutigen Software-Entwicklung Stand der Technik und nicht aus der täglichen Arbeit wegzudenken. Beim Code-Review ist die Medizintechnik-Szene jedoch gespalten. Kaum eine andere Testmethode ist so umstritten.  Dabei wird der Methode Code-Review oft unrecht getan.

“Talk is cheap, show me the code.”

Linus Torvalds

Was sagt die IEC62304 dazu?

Die IEC62304 (Medizingeräte-Software – Software-Lebenszyklus-Prozesse) fordert kein Code-Review. Vielmehr muss für die Software eine Sicherheitsklassifizierung erfolgen. Auf Basis der Sicherheitsklassifizierung kann man dann festlegen, welche Testmethoden angewendet werden sollen. Dabei ist es zulässig, durch Architektur-Entscheidungen Software-Komponenten zu segregieren und damit sicherheitskritische von nicht sicherheitskritischen Teilen zu trennen. Das führt zur Reduktion von Aufwand und ist durchaus berechtigt. Es führt häufig dazu, dass man Code-Review als absolute „Topmethode“ auf Software der Sicherheitsklasse C beschränkt und andere Module der Klassen A und B unberücksichtigt lässt. Schließlich muss man ja bei A und B weniger machen als bei C. Hier ist die Frage, ob diese Entscheidung sinnvoll ist. Denn auch wenn Software nicht imstande ist jemanden zu töten oder zu verletzen, so kann ein Fehlverhalten trotzdem unangenehme Folgen haben.

Was bringen Code-Reviews?

  • Fehler werden frühzeitig in der Entwicklung gefunden (in der Programmierphase).
  • Nicht verstandene Anforderungen an das Produkt werden erkannt.
  • Entwickler räumen Code auf, der zum Review soll.
  • Externe Experten sehen Dinge, die der Entwickler nicht mehr sieht.
  • Fehler im Systemtest führen zu einem sehr hohen Aufwand. Fehler finden, Fehler lokalisieren, Änderung durchführen, erneute Tests durch Änderung (z.B. Systemtests müssen wiederholt werden).
  • Systemtests sind nicht vollständig. Es ist nicht möglich alle Fälle zu testen. Daher ist es besser, die Fehlerfälle durch ein Code-Review zu finden.
  • Ein dokumentiertes Code-Review gibt dem Entwickler ein gutes Gefühl und sorgt dafür, dass Fortschritt sichtbar ist (Spezifikation, Implementierung, Review, Test, Fertig, nächstes Modul)
  • Das Wissen im Unternehmen wird größer. Die Entwickler werden besser und lernen voneinander.
  • Die Wartbarkeit von Code ist besser, wenn mehr als eine Person den Code verstanden hat. Es ist auch leichter möglich für andere sich einzuarbeiten.
  • Es entsteht ein firmenweiter Standard auf hohem Niveau.

Was spricht gegen ein Review?

  • Es gibt keine Zeit mehr im Projekt. Reviews werden zu spät im Projekt eingeplant. Die Software soll eigentlich schon fertig sein und jetzt soll es noch Reviews mit 100-200 Stunden Aufwand geben. Das will keiner mehr ausgeben.
  • Manche Module oder Komponenten (z.B. Linux) sind viel zu groß und es wäre unwirtschaftlich diese zu reviewen. Das ist in der Tat ein gutes Argument gegen das Review. Im Gegenzug muss klar sein, dass sich dadurch Aufwand an anderer Stelle ergibt. Es müssen also Tests durchgeführt werden. Bei SOUP/OTS (source of unknown provenance / off the shelf software) ist auch das Risikomanagement gefragt.
  • Es handelt sich nur um Klasse A oder B Software. Von diesem Argument rate ich dringend ab! Es ist sehr schwierig auszuschließen, dass Klasse A Software nicht ebenfalls zu einem Fehlverhalten führen kann. Und es geht ja nicht nur darum niemanden zu verletzen. Das Ziel ist es, effizient ein gutes Produkt entwickeln.

Was sind meine Erfahrungen?

  • Bei mehr als 30 % der Code-Reviews werden kritische Fehler erkannt, die zu einem Fehlverhalten im Feld  führen können.
  • Richtig geplant und eingesetzt entsteht ein Aufwand von ca. 5-8 % der Software-Entwicklung (Erfahrungswerte aus meinen Projekten) für ein vollständiges Code-Review einer Klasse C Software.
  • Gerade junge Entwickler profitieren enorm durch Reviews.
  • Es entsteht eine sehr große Dynamik und damit Spaß an der Arbeit mit Kollegen Arbeitsergebnisse zu diskutieren und zu zeigen, was man drauf hat.
  • Viele sehr gute und erfahrene Entwickler sprechen sich für Reviews aus.
  • Durch Weglassen des Reviews wird kein Aufwand vermieden, sondern nur an anderer Stelle bezahlt. Unter Umständen zu einem höheren Preis.

Was ist sonst noch wichtig?

Entwickler, die noch nicht durch das Fieber Review angesteckt sind, lehnen diese eher ab. Sie sehen es als Prüfungssituation, wodurch Stress produziert wird. „Das soll sich lieber keiner anschauen, ich mache das schon…“ Diese Einstellung ist nicht sinnvoll. Es geht nicht darum jemanden schlecht zu machen oder seine Kompetenzen abzusprechen. Es geht darum ein gutes Produkt zu entwickeln und technologisch sehr gute Arbeit zu leisten. Sobald das klar ist, entsteht ein Flow, der zum Anspruch führt Software auf hohem Niveau zu entwickeln.

Ihr Ansprechpartner:

Dipl.-Ing. Goran Madzar, Gesellschafter, Senior Systems Engineer 
E-Mail: madzar@medtech-ingenieur.de
Tel.:  +49 9131 691 240
 

Benötigen Sie Unterstützung bei der Entwicklung Ihres Medizingeräts? Wir helfen gerne! Die MEDtech Ingenieur GmbH bietet Hardware-Entwicklung, Software-Entwicklung, Systems Engineering, Mechanik-Entwicklung und Beratung aus einer Hand. Nehmen Sie Kontakt mit uns auf.

Kontakt aufnehmen


Templates für Reviews müssen leicht handhabbar sein. Es ist natürlich nicht klug ein Template zu verwenden, das nicht schlank und einfach zu benutzen ist. Wir wollen nicht Word Experten sein, sondern super Software entwickeln. Am besten verwendet man Tools, um Code Reviews durchzuführen (z.B. Remine, reviewboard). Hiermit können die Reviews in der Versionsverwaltung der Software integriert werden.

Es muss die Freiheit geben, das Vorgehen beim Review anzupassen. Manche brauchen den Source Code vor dem Review als Ausdruck, um sich Notizen zu machen. Andere brauchen unbedingt ihren Editor, weil dieser Begriffe über das ganze Dokument markieren kann. Manche brauchen ihre Ruhe zum Denken. Andere wollen darüber sprechen. Es ist daher nicht sinnvoll eine Vorgehensweise für alle Fälle vorzuschreiben.

Was ist das absolute Minimalziel?

Code-Reviews sollten in den folgenden Fällen auf jeden Fall durchgeführt werden:

  • Klasse C Module
  • Komplexe Module
  • Code von unerfahrenen Entwicklern (<3Jahre Berufserfahrung oder an weniger als 20 Code Reviews teilgenommen) als eine Art Mentoring
  • Code von externen Mitarbeitern
  • Code bei dem die Entwickler ein schlechtes Gefühl haben

Überlegen Sie sich welche Module wie getestet werden. Eventuell sind Module durch Unit-Tests besser testbar als durch Review. Die Teststrategie und die Verifikationsplanung muss frühzeitig festgelegt werden. Die Methoden müssen zielführend sein!

Planung der Code-Reviews

Ich plane die Code-Reviews auf Basis der Software Architektur und der Liste der Software Module. In Tabellenform werden die Software-Module mit Risikoklassifizierung aufgelistet und die Testmethode festgelegt. Die Festlegung wird dabei mit dem Software-Entwickler diskutiert. Die Tabelle unten zeigt den prinzipiellen Aufbau.

Module Risk Class Test Method
Code Review Unit Test Software System Test
FreeRTOS B yes yes
HAL: CMSIS B yes yes
Audio Manager A no yes
Error Manager B yes yes yes
Language Manager A yes no yes
Menu Control B yes yes yes
Parameter Base B yes yes
Module xyz B yes yes yes

Um die Aufwände für die Code-Reviews abzuschätzen, werden zwei Ansätze verwendet. Zum einen schätzt der Entwickler den Aufwand für jedes Modul in der Liste. Bei einem jungen oder unerfahrenen Kollegen sollten erfahrene Kollegen unterstützen. Das ergibt die Bottom-Up Schätzung. Um die Plausibilität und Richtigkeit überprüfen zu können, werden Aufwände eines ähnlichen Projektes gegenübergestellt. Das ist die Top-Down Schätzung. Mit diesen beiden Werten hat man eine gute Basis für eine fundierte Aufwandsabschätzung.

Vorgehensweise bei Code-Reviews

Der Source Code muss vorher aufgeräumt werden, sodass Offensichtliches beseitigt ist. Es ist nicht das Ziel sich auf Kommentare (z.B. Doxygen) oder auf Rechtschreibfehler zu konzentrieren, sondern auf den Code. Es ist auch empfehlenswert die statische Codeanalyse vorher durchzuführen und den Code daraufhin zu prüfen, dass es den Programmierrichtlinien ihrer Organisation entspricht.

Das Ablaufdiagramm zeigt eine mögliche Vorgehensweise.

Vorgehen Code-Review

Vorgehen Code-Review

Fazit

Die Codereviews sind eine gut planbare und frühzeitig mögliche Methode, um Fehler und damit verbundene Aufwände in einer späten Projektphase zu vermeiden. Es wird empfohlen, bei der Abschätzung sowohl Top-Down als auch Bottom-Up vorzugehen. Es ist daher sinnvoll, Aufwände von vergangenen Projekten zur Abschätzung zu benutzen. Es ist auch sinnvoll, die geeignete Testmethode für die Qualifizierung festzulegen. Manchmal ist ein Code-Review günstiger als eine andere Methode, weil man einfach nur lesen muss.

Das Vorgehen funktioniert und bringt eine bessere Codequalität. Nicht nur für die Module, die man sich anschaut, sondern auch in den anderen, weil ein Lerneffekt eintritt und die Fehler nicht in anderen Modulen wiederholt werden. Die Qualität verbessert sich sogar über das Projekt hinaus. Die Code-Reviews sorgen für einheitlichen Code.

Ich freue mich über Feedback und wenn Sie mit mir in Kontakt treten. Sie können gerne auch einen Kommentar zu dem Artikel abgeben. Falls Sie jemanden kennen, für den der Blog ebenfalls interessant sein könnte, freue ich mich auch sehr über eine Weiterempfehlung.

Viele Grüße

Goran Madzar

Kontaktieren Sie uns!

Autor

  • Goran Madzar

    MEDtech Ingenieur aus Leidenschaft! Mein Team und ich helfen Medizintechnik-Herstellern mit Engineering-Dienstleistungen dabei, Produkte zu entwickeln und in Verkehr zu bringen! Sprechen sie mich gerne an, ob bei LinkedIn oder per Mail. Ich freue mich Sie kennenzulernen.

Auch interessant:

ISO 13485 – Was steht da eigentlich drin?

PDCA ist eine iterative Management-Methode um Prozesse und Produkte kontinuierlich zu verbessern.
Wer im Bereich Medizintechnik tätig ist, hat bestimmt schon von der Norm ISO 13485 gehört. Es geht um Qualitätsmanagementsysteme für Medizinprodukte. Doch was steht in dieser Norm eigentlich drin? In diesem Blog-Artikel möchte ich für Sie einen Blick in die Norm werfen und Ihnen eine kurze Zusammenfassung der Inhalte vorstellen.…
Getagged mit: , , , ,