
Automatisiertes Testen im DevOps Kontext
Automatisierte Tests ermöglichen es, per Knopfdruck Tests auszuführen und diese auch automatisch auszuwerten. Die Vielfalt an Möglichkeiten automatisierte Tests zu entwickeln ist groß. So greift man im Bereich der Unittests auf Frameworks zurück, die eine Umgebung zum Erstellen und Ausführen der Tests bieten. Bei der testgetriebenen Entwicklung kann hiermit der produzierte Produktcode von Projektbeginn an durchgängig getestet werden. Dabei können schnell Sektionen oder Module als Fehlerursache identifiziert werden.. Das Verfahren ist mit erhöhtem Abstrahierungsaufwand ebenfalls für Integrationstests anwendbar.
Im Rahmen der IEC 62304 bzw. noch stärker im FDA Kontext ist zu bedenken, dass eine saubere Beschreibung der Software-Einheiten (nach IEC 62304) und deren Schnittstellen notwendig ist. Eine Nachverfolgung zwischen der Anforderungsbeschreibung und den Tests ist dabei wünschenswert. Bei Software-Systemtests und Gesamtsystemtests ist es schwierig, eine fertige Lösung ähnlich der Unittest-Frameworks zu finden. Es ist üblich, eine produktspezifisch konzeptionierte Testumgebung zu entwickeln. Dafür werden die externen Schnittstellen des Systems genutzt, um Aktionen einzuleiten und Reaktionen zu prüfen. So kann beispielsweise auf einem Testrechner ein Testscript in einer beliebigen Scriptsprache ausgeführt werden, welches über ein Gateway mit den Schnittstellen eines oder mehrerer Systeme kommuniziert . Bei allen Testvarianten ist es wichtig, früh mit der Planung und Implementierung der Tests zu beginnen, denn die Testplanung wird die Software-Architektur beeinflussen und umgekehrt.
Infrastruktur zur Testautomatisierung
Nicht nur das Entwickeln von Tests führt zu einer robusten und stabilen Software, auch die Häufigkeit der Ausführung jener Tests trägt dazu bei.
Testautomatisierung ermöglicht es, in regelmäßigen Abständen Tests starten und auswerten zu lassen. Auf diesem Weg können beispielsweise Rechenkapazitäten außerhalb der typischen Arbeitszeiten genutzt werden, um Testläufe durchzuführen (sogenannter nightly-test run). Dafür muss allerdings zunächst eine Infrastruktur geschaffen werden, die zusammen mit dem Projektfortschritt und der Testkomplexität wächst. Diese Infrastruktur kann sich aus IT, Versionsverwaltung, Testframework, Testhardware, Entwicklungs- und Projektmanagement-Tools und beliebig vielen weiteren Komponenten zusammensetzen.
Testautomatisierung - Was ist DevOps?
DevOps, oder auch Development und Operations, hat das Ziel, die Geschwindigkeit der Entwicklung bei steigender Qualität zu erhöhen. DevOps ist ein Ansatz, der die Zusammenarbeit zwischen Softwareentwicklung (Development) und IT-Betrieb (Operations) fördert. Ziel ist es, die Softwareentwicklung und -bereitstellung zu beschleunigen, die Qualität zu verbessern und die Effizienz zu steigern. Durch Automatisierung, kontinuierliche Integration und kontinuierliches Deployment können Teams schneller auf Veränderungen reagieren und neue Funktionen oder Updates bereitstellen. DevOps fördert auch eine Kultur der Zusammenarbeit und des gemeinsamen Verantwortungsbewusstseins, was zu einer besseren Kommunikation und einem reibungsloseren Arbeitsablauf führt.
Continuous Integration
Continuous Integration (CI) ist eine Softwareentwicklungspraxis, bei der Entwickler regelmäßig (oft mehrmals täglich) ihren Code in ein gemeinsames Repository integrieren. Ziel ist es, frühzeitig Fehler zu erkennen und die Qualität des Codes zu verbessern. Bei jeder Integration wird der Code automatisch getestet, um sicherzustellen, dass neue Änderungen keine bestehenden Funktionen beeinträchtigen. Dies fördert eine schnellere Entwicklung, da Probleme frühzeitig identifiziert und behoben werden können.
Der Sinn ist hierbei, dass ein Commit einer Softwareänderung in den Master (bzw. trunk) erst dann ermöglicht wird, wenn alle automatisierten Tests fehlerfrei durchlaufen. Dies ist die Voraussetzung für ein Continous Delivery (siehe unten).Continuous Delivery
Continuous Delivery (CD)
Continuous Delivery (CD) ist eine Erweiterung der Continuous Integration und ermöglicht zusätzlich eine Automatisierung des Release Prozesses. Bei CD wird sichergestellt, dass der Code jederzeit in einem einsatzbereiten Zustand ist. Das bedeutet, zu jeder Zeit ein komplettes System zur Verfügung zu haben, das für Tests zur Verfügung steht. Continuous Delivery umfasst automatisierte Tests und Integrationen, die es ermöglichen, neue Funktionen oder Bugfixes schnell zu implementieren und zu überprüfen. Das Ziel ist es, die Zeit zwischen der Entwicklung und der Bereitstellung von Software zu verkürzen, um schneller auf Kundenfeedback reagieren und die Software kontinuierlich verbessern zu können.

Continuous Deployment
Nachgelagert nach Continuous Delivery wird die Software kontinuierlich ausgeliefert. Das kann auch innerhalb eines Projektes angewandt werden, um beispielsweise eine Teilkomponente in das übergreifende Projekt zu integrieren. Oft werden dabei alle in das Versionskontrollsystem eingecheckten Änderungen nach der automatischen Testausführung ohne weiteres manuelles Eingreifen in die Live-Umgebung übertragen.
Validierung
Software-Werkzeuge, die in der Qualitätssicherung eingesetzt werden, müssen validiert werden.
FDA 21 CFR 820.70(i)
Automated processes. When computers or automated data processing systems are used as part of production or the quality system, the manufacturer shall validate computer software for its intended use according to an established protocol. All software changes shall be validated before approval and issuance. These validation activities and results shall be documented.
Dies bedeutet, dass die Werkzeuge für DevOps (mit Continous Integration, Continous Delivery und Continous Deployment) einschließlich der Testwerkzeuge, Revisionsmanagement, Speicherung und Verteilung der Releases etc. validiert werden müssen. Falls anschließend eine erneute Verifizierung (z.B. des Gesamtreleases) stattfindet, kann eine reduzierte Validierung erfolgen.
Software-Entwicklungsplan
Alle eingesetzen Werkzeuge müssen nach IEC 62304:2006+A1:2015 in den Softwareentwicklungsplan aufgenommen werden.
Es empfiehlt sich, die komplette DevOps Chain (Workflow mit Continous Integration, Continous Delivery und Continous Deployment), d.h. alle Schritte, die zur Erzeugung eines Release verwendet werden, ebenfalls in den Softwareentwicklungsplan aufzunehmen.
Software-Freigabe
Software, welche komplett automatisiert im Rahmen des Continous Deployment erzeugt und getestet wurde, kann nicht ohne weiteres in die Produktionsumgebunggegeben werden. So sind weitere Aktivitäten wie die Erstellung der Liste der ungelösten Anomalien, Archivierung, Dokumentation der Vollständigkeit der Verifikationstätigkeiten, Dokumentation des Releases, Usability Evaluierung, Freigabe der Technischen Dokumentation, Anpassungen der Benutzerdokumentation, etc. notwendig, um die finale Freigabe einer Software zu erlangen. Erst danach kann die Software ins Feld ausgerollt werden. Somit ist das klassische Continous Deployment wie zum Beispiel für Webanwendungenfür die Medizintechnik nicht möglich. Einzig das Continous Delivery ist anwendbar ,bei dem bereits getestete Softwaren für andere Abteilungen zum weiteren Testen bzw. Evaluierungen der Softwareänderungen bereitgestellt werden.