Deshalb verbessert CI / CD Ihren SaMD / MDSW-Entwicklungsprozess
Geschrieben von Marc Assmann
Bei der Entwicklung von eigenständiger Medizinprodukt-Software oder von Software, die Teil eines medizinischen Hardware-Produkts ist, ist es unerlässlich, die Kontrolle über den eigenen Code zu haben. Die Norm IEC 62304 bietet hierfür eine sehr gute Orientierungshilfe. Wesentliche Bestandteile dieser Kontrolle sind die Versionskontrolle, die Änderungskontrolle, das Release-Management und die Rückverfolgbarkeit zwischen Quellcode und der jeweiligen Softwareversion. Die Kontrolle über Ihren Code fließt in nahezu jeden Prozess Ihres Qualitätsmanagementsystems (QMS) ein, beispielsweise in die Designkontrolle, die klinische Bewertung, die Überwachung nach dem Inverkehrbringen und die Vigilanzberichterstattung. Damit hat sie einen starken Einfluss auf die Patientensicherheit und die Produktqualität. Wenn beispielsweise einer Ihrer Patienten oder Nutzer ein Problem mit Ihrer Software hat, möchten Sie mit Sicherheit feststellen, welche Version dieser Nutzer zum Zeitpunkt des Vorfalls verwendet hat. Und Sie möchten diese Version sicherlich bis zu Ihrem Quellcode zurückverfolgen, um mögliche Ursachen für dieses Problem zu identifizieren. 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 wurden. Je komplexer die Software ist und je mehr Entwickler am Entwicklungsprozess beteiligt sind, desto schwieriger wird es, den Überblick über Ihren Code zu behalten. Diese Komplexität wirkt sich zudem direkt auf den Aufwand für das Testen der Software und die Zuverlässigkeit der Testergebnisse aus. Dies gilt insbesondere, wenn Sie in einem schnelllebigen Umfeld wie Scrum, Extreme Programming und anderen arbeiten, um mit Ihren Mitbewerbern Schritt halten zu können. Und genau hier setzen wir in diesem LinkedIn-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).
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 verbessern Code-Repositorys Ihre Codequalität!
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 anzuzweifeln. Zu Beginn entsteht bei der Implementierung von CI/CD-Tools ein erheblicher Aufwand, da diese als Geschäftsanwendung für die „Herstellung Ihres Medizinprodukts“ qualifiziert und validiert werden müssen. Ein solches Tool besteht in der Regel aus mehreren unabhängigen Komponenten, die oft als „Toolchain“ bezeichnet werden und unter anderem ein Code-Repository, Containerisierung sowie Testautomatisierung umfassen. Die Qualifizierung und Validierung ist jedoch ein Standardverfahren und keine Hexerei. Und sobald dieser Schritt abgeschlossen ist, können Sie mit dem Tool arbeiten und sich auf seine Features und Funktionen verlassen.
Allerdings kann Software allein Probleme in Ihren Geschäftsprozessen nicht beheben. Überprüfen Sie bei der Implementierung eines CI/CD-Tools Ihren Softwareentwicklungsprozess und alle damit verbundenen Prozesse. Die meisten Probleme, die wir beobachten, stehen nicht in direktem Zusammenhang mit der Software selbst, sondern mit den entsprechenden Geschäftsprozessen.
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.