Deshalb verbessert CI / CD Ihren SaMD / MDSW-Entwicklungsprozess

Geschrieben von Marc Assmann

2

Bei der Entwicklung von Software, die für sich genommen ein eigenständiges Medizinprodukt ist („standalone“) oder die Teil eines Medizinprodukts ist, ist es wichtig, dass Sie Ihren Code unter Kontrolle haben. Die IEC 62304 gibt Ihnen hier eine sehr gute Anleitung. Grundlegende Bestandteile dieser Kontrolle sind Versionskontrolle, Änderungskontrolle, Release Management und Rückverfolgbarkeit zwischen Quellcode und der zugehörigen Softwareversion. Die Kontrolle über Ihren Code wirkt sich auf fast jeden Prozess in Ihrem QMS aus, wie z. B. Designkontrolle, klinische Bewertung, Überwachung nach dem Inverkehrbringen und Vigilanz Reporting. Damit hat sie einen grossen Einfluss auf die Patientensicherheit und die Produktqualität. Wenn z. B. bei einem Ihrer Patienten oder Benutzer ein Problem mit Ihrer Software auftritt, möchten Sie sicher feststellen, welche Version dieser Benutzer verwendet hat, als das Problem auftrat. Und natürlich wollen Sie diese Version bis zu Ihrem Quellcode zurückverfolgen, um mögliche Ursachen für dieses Problem zu ermitteln. Software ist jedoch von Natur aus komplex, besteht aus vielen verschiedenen Teilen und umfasst einige Tausend bis Millionen von Codezeilen, die von einer unbestimmten Anzahl von Softwareentwicklern entwickelt werden. Je komplexer die Software ist und je mehr Entwickler am Entwicklungsprozess beteiligt sind, desto schwieriger wird es, die Kontrolle über den Code zu behalten. Diese Komplexität wirkt sich ausserdem direkt auf den Aufwand für Softwaretests und die Zuverlässigkeit der Testergebnisse aus. Vor allem, wenn Sie in einer schnelllebigen Umgebung wie Scrum, Extreme Programming und anderen arbeiten, die erforderlich sind, um mit Ihren Mitbewerbern mithalten zu können. Und genau da setzen wir in diesem Artikel an.

Was ist eine CI/CD-Pipeline und warum sollten Sie sich dafür interessieren?

CI/CD steht für Continuous Integration (CI) und Continuous Delivery/Deployment (CD). Dabei handelt es sich um eine Praxis der Softwareentwicklung, die Entwicklern hilft, Codeänderungen einfach und schnell in ein gemeinsames Repository zu integrieren, wobei jede Änderung durch automatisierte Builds und Tests überprüft wird. Dies ermöglicht häufige und zuverlässige Software-Releases, was zu besserer Qualität, schnellerer Veröffentlichung neuer Versionen und effizienteren Entwicklungsprozessen führt.

Sie sollten sich mit CI/CD befassen, weil es die Qualität und Effizienz Ihres Softwareentwicklungsprozesses erheblich verbessern kann. Durch die Automatisierung von Builds, Tests und Bereitstellungen können Sie das Risiko menschlicher Fehler verringern und sicherstellen, dass Ihre Codeänderungen gründlich getestet werden, bevor sie veröffentlicht werden. Dies führt zu weniger Fehlern, schnelleren Feedbackschleifen und einem schlankeren Entwicklungsprozess (siehe Abbildung 1).

Abbildung 1 CI/CD-Prozessablauf. Der CI/CD-Prozess besteht aus einer definierten Abfolge von Schritten, die einen kontrollierten und strukturierten Weg zur kontinuierlichen Freigabe neuer Softwareversionen gewährleisten.
Abbildung 1 CI/CD-Prozessablauf. Der CI/CD-Prozess besteht aus einer definierten Abfolge von Schritten, die einen kontrollierten und strukturierten Weg zur kontinuierlichen Freigabe neuer Softwareversionen gewährleisten.

CI/CD kann Ihnen auch dabei helfen, rasch auf sich ändernde Geschäftsanforderungen und Kundenbedürfnisse zu reagieren, da Sie neue Funktionen und Fehlerbehebungen kontrolliert und mit minimalem manuellen Aufwand in Ihr Softwareprodukt einbringen können. Letztlich können Sie durch die Implementierung von CI/CD bessere Software schneller und mit grösserer Zuverlässigkeit bereitstellen.

Deshalb steigern Code-Repositories die Qualität Ihres Codes!

Code-Repositories wie GitLab und GitHub sind leistungsstarke Werkzeuge für die Softwareentwicklung und bieten zahlreiche Vorteile für Teams, die gemeinsam an denselben Projekten arbeiten. Obwohl es auch andere Plattformen gibt, beziehen wir uns in diesem Artikel nur auf GitLab und GitHub, da sie zu den beliebtesten webbasierten Git-Repository-Hosting-Diensten auf dem Markt gehören.

Versionskontrolle und Audit Trail:

Diese Plattformen bieten Versionskontrollsysteme, die es Entwicklern ermöglichen, Änderungen am Quellcode über den gesamten Zeitraum der Bearbeitung zurückzuverfolgen. Jede Änderung wird als neue Version oder Revision aufgezeichnet, wodurch ein vollständiger Änderungsverlauf entsteht.

Diese Versionshistorie dient als Überwachungswerkzeug, das Aufschluss darüber gibt, wer wann warum welche Änderungen vorgenommen hat. Dies ist für die Nachverfolgung von Problemen, das Verständnis der Codeentwicklung und die Nachverfolgbarkeit der Verantwortlichkeiten von entscheidender Bedeutung.

Mit dieser Funktion erfüllen GitHub und GitLab die gesetzlichen Anforderungen an die Rückverfolgbarkeit von Code Änderungen.

Zugriffskontrolle

Git Code Repositories ermöglichen eine granulare Zugriffskontrolle, so dass Administratoren die Berechtigungen für Teammitglieder und Mitarbeiter verwalten können.

Durch die Definition von Benutzerrollen und Zugriffsebenen können Unternehmen Sicherheitsrichtlinien durchsetzen, sensiblen Code schützen und unautorisierte Änderungen verhindern.

Die Zugriffskontrolle ist ein wichtiger und regulatorisch erforderlicher Mechanismus in der Medizintechnik und Pharmaindustrie, um sensible Daten vor Manipulationen zu schützen.

Master Branch und Feature Branches

Der Master Branch dient in der Regel als Hauptentwicklungsebene und repräsentiert den „production ready“ Code.

Feature Branches ermöglichen es den Entwicklern, isoliert an bestimmten Aufgaben, Fehlerkorrekturen oder neuen Funktionen zu arbeiten, bevor sie in den Master Branch integriert werden. Dieser Ansatz fördert die Stabilität des Codes und minimiert Störungen an der Code Basis.

Branching ist eine ideale Funktion für die Kontrolle des Designs Ihrer Software für medizinische Geräte.

Pull Requests und Peer Reviews

Wenn ein Entwickler bereit ist, seine Änderungen aus einem Feature Branch in den Main Branch zu integrieren, löst er einen Pull-Request aus. Diese Aktion löst ein Review und eine Freigabe der Änderungen am Code aus. Ein zweiter Entwickler prüft die Änderungen und genehmigt den Pull Request, so dass der Code in den Master Branch integriert werden kann. Diese Praxis fördert die Zusammenarbeit und den Wissensaustausch unter den Entwicklern.

Peer-Reviews helfen dabei, potenzielle Fehler aufzuspüren, verbesserungswürdige Bereiche zu identifizieren und sicherzustellen, dass der Code den etablierten Standards und Best Practices entspricht.

Insbesondere bei Prozessen und Komponenten, die für die Produktqualität entscheidend sind, verlangen die zuständigen Regulierungsbehörden eine 4-Augen-Prüfung. Pull-Requests sind daher ein einfach zu handhabender Ansatz für diese Anforderung.

Plugins für statische Softwaretests

Sowohl GitLab als auch GitHub verfügen über die Möglichkeit zur Integration von Plugins zur statischen Codeanalyse wie SonarQube, ESLint und Brakeman. Diese Tools können potenzielle Code-Probleme wie Sicherheitsschwachstellen, Code-Smells oder stilistische Unstimmigkeiten bereits in einem frühen Stadium des Entwicklungsprozesses automatisch erkennen.

Plugins für automatisierte Softwaretests

Beide Plattformen unterstützen zudem die Integration gängiger automatisierter Test-Frameworks und -Tools wie JUnit, Selenium und Cypress, die es Entwicklern ermöglichen, Tests als Teil des Entwicklungsworkflows durchzuführen. So wird sichergestellt, dass der Code gründlich getestet wird, bevor er in den Master-Branch eingefügt wird.

Build-Pipelines

GitLab und GitHub bieten über ihre CI/CD-Pipelines integrierte Funktionen für die kontinuierliche Integration (CI).

Diese Pipelines ermöglichen es Teams, die Erstellung, das Testen und die Bereitstellung zu automatisieren, was zu schnelleren Feedbackschleifen, besserer Codequalität und zuverlässigeren Softwareversionen führt.

Sichern und Wiederherstellen

Beide Plattformen bieten Sicherungs- und Wiederherstellungsfunktionen, die gewährleisten, dass Code-Repositories und ihre Historie vor Datenverlust oder -beschädigung geschützt sind.

Warum etwas von Hand machen, wenn eine Maschine das viel besser kann?

  • Software Build-Erzeugung
  • Bereitstellung in der Sandbox / Validierung / PROD
  • Wiederherstellung früherer Versionen („Roll back“)
  • Containerisierung

Jenseits der CI/CD-Pipeline - passen Sie Ihre Prozesse an

Es ist schwer, die Vorteile von CI/CD nicht zu erkennen. Im Rahmen der Implementierung von CI-/CD-Tools entsteht zunächst ein erheblicher Aufwand, da diese als Business Anwendung für die „Herstellung Ihres medizinischen Geräts“ qualifiziert und validiert werden müssen. Und ein solches Werkzeug besteht in der Regel aus mehreren unabhängigen Teilen, die oft als „Tool Chain“ bezeichnet werden, bestehend aus Code-Repository, Containerisierung, Testautomatisierung usw. Aber Qualifizierung und Validierung sind Standardvorgänge und kein Hexenwerk. Sobald sie abgeschlossen ist, können Sie mit der Software arbeiten und auf ihre Funktionen und Eigenschaften vertrauen.

Software allein kann jedoch keine Probleme in Ihren Geschäftsprozessen beheben. Wenn Sie ein CI/CD-Tool implementieren, sollten Sie Ihren Softwareentwicklungsprozess und alle Prozesse, die ihn beeinflussen, überprüfen. Die meisten Probleme, die wir bei Kunden sehen, sind nicht direkt mit der Software selbst, sondern mit den entsprechenden Geschäftsprozessen verbunden.

Schaffen Sie Klarheit über den erforderlichen Input und Output Ihres Softwareentwicklungsprozesses. Verstehen Sie, wer welche Aufgabe in Ihrem Prozess hat. Und verstehen Sie, welche Fähigkeiten und Werkzeuge ein Mitarbeiter braucht, um seine Arbeit richtig zu erledigen. Und wie passt das alles in die IT-Landschaft Ihres Unternehmens? Haben Sie auch über Cybersicherheit, GDPR und Informationssicherheit nachgedacht?

Sie sehen, es gibt viele Aspekte zu berücksichtigen, die über CI/CD hinausgehen. Die Prozessverbesserung ist nicht direkt mit Ihrem CI/CD-Tool verknüpft, aber sie hilft Ihnen, die Arbeitsweise in Ihrem Unternehmen insgesamt zu verbessern.