Was sind kontinuierliche Tests?
Kontinuierliche Tests spielen eine wichtige Rolle bei der Beschleunigung der Softwareentwicklung, der Verbesserung der Codequalität und der Vermeidung kostenintensiver Engpässe.
IBM Newsletter abonnieren
Schwarz-blauer Hintergrund
Was sind kontinuierliche Tests?

Unter kontinuierliche Tests versteht man einen Prozess, bei dem automatisiertes Feedback in verschiedenen Phasen des Softwareentwicklungslebenszyklus (Software Development Life Cycle, SDLC) integriert wird, um die Geschwindigkeit und Effizienz bei der Verwaltung von Bereitstellungen zu verbessern.

Kontinuierliche Tests sind ein entscheidender Treiber für die Effektivität von CI/CD (Continuous Integration/Continuous Delivery)-Prozessen und spielt eine wichtige Rolle bei der Beschleunigung von SDLC-Zeitplänen durch Verbesserung der Codequalität, Vermeidung kostenintensiver Engpässe und Beschleunigung von DevOps-Prozessen.

Eines der grundlegenden Prinzipien bei der Entwicklung eines praktischen DevOps-Ansatzes besteht darin, die Lücke zwischen schneller Softwarebereitstellung und zuverlässigen Benutzererfahrungen zu schließen. Die herkömmliche Methode, in jeder Phase der Softwareentwicklung (d. h. Projektentwurf, Codierung, Testen, Bereitstellung und Wartung) manuelles Feedback einzuholen, hat jedoch zu einem unzureichenden und ineffektiven Einsatz von Unternehmensressourcen und letztlich zu längeren Integrationszyklen und verzögerten Produktaktualisierungen geführt.

Kontinuierliche Tests beheben diese Ineffizienzen, indem sie den Shift-Left-Ansatz der DevOps-Teams unterstützen und ihnen frühzeitig im SDLC wertvolles Feedback geben, während manuelle Testprozesse automatisiert und Bedienungsfehler minimiert werden.

Kontinuierliche Tests nutzen automatisierte Tools, um vordefinierte QA-Scripts in allen Phasen der Produktion zu laden. Diese automatisierten Scripts machen regelmäßige manuelle Eingriffe bei der Durchführung von QA-Tests überflüssig und validieren nacheinander die Effizienz des Quellcodes. Gleichzeitig stellen sie sicher, dass relevantes Feedback sofort an die entsprechenden Teams weitergeleitet wird.

Wenn automatisierte Tests fehlschlagen, werden die Entwicklerteams in der jeweiligen Entwicklungsphase benachrichtigt, damit sie die erforderlichen Anpassungen an ihrem Quellcode vornehmen können, „bevor“ sich dies auf andere Teams in anderen Phasen des SDLC auswirkt. Wenn automatisierte Tests die Prüfung bestehen, werden Projekte automatisch an die nächste Phase des SDLC weitergeleitet, sodass Unternehmen ein nachhaltiges Übermittlungsmodell entwickeln können, das die Produktivität maximiert und die abteilungsübergreifende Koordination verbessert.

Im folgenden Video geht Eric Minick weiter auf das Thema ein:

Vorteile kontinuierlicher Tests

Die Einbindung kontinuierlicher Tests in DevOps-Prozesse bietet wachsenden Unternehmen mehrere Vorteile.

Höhere Effizienz und qualitativ hochwertigere Bereitstellungen. Kontinuierliche Tests bieten eine automatisierte Methode zur Qualitätssicherung und zum Zusammenspiel von Arbeitsabläufen in jeder Phase des Softwareentwicklungslebenszyklus (SDLC). Durch die Integration von kontinuierlichen Rückkopplungsschleifen in Benutzer- und Komponententestmodule erhalten Entwickler die nötigen Informationen, um die Kompatibilität und Leistung ihres Codes vor der Bereitstellung zu verbessern. Durch diese Effizienz werden Verbindungsunterbrechungen zwischen mehreren DevOps-Teammitgliedern beseitigt und die Zeitpläne für die Softwarebereitstellung beschleunigt.

Schnelle Fehlererkennung und -korrektur für dezentrale Projekte. Moderne Entwicklungsarchitekturen von heute sind vielseitig und mehrschichtig. Kontinuierliche Tests helfen den Entwicklerteams, diese Komplexität zu überwinden, indem sie eine skalierbare, automatisierte Testlösung einführen, die die Zeitspanne für die Fehlererkennung und -korrektur erheblich verkürzt.

Verbessertes Benutzererlebnis. Erweiterte Methoden für kontinuierliche Tests können eine Vielzahl einzigartiger Anwendungsfall- und Fehlerbehebungsszenarien simulieren und beobachten, wie Benutzer darauf reagieren. Mit den aus diesen Simulationen gewonnenen Erkenntnisse können Entwickler Ineffizienzen in der Benutzeroberfläche früher beseitigen und unerwünschte Überraschungen vermeiden, wenn das physische Produkt bereits bereitgestellt wurde.

Reduzierte Kosten aufgrund entwicklungsbedingter Betriebsunterbrechungen. Insbesondere in großen, miteinander verbundenen Systemen kann ein Fehler in nur einem Modul einer Anwendung Dominoeffekte haben, die zu unerwünschten Ausfallzeiten führen und sich negativ auf die Produktivität und das Geschäftsergebnis auswirken können.

Beispielsweise melden Cloud-Provider immer wieder Ausfälle an einem Ende, die eine ganze Region lahmlegen und zu mehrstündigen Betriebsunterbrechung führen. Dies kann besonders verheerend für Unternehmen sein, die auf eine hohe Serviceverfügbarkeit angewiesen sind. Kontinuierliche Tests auf differenzierter Ebene identifiziert Fehler, die sonst in großen Softwaresystemen unsichtbar bleiben würden, und hilft, die Kosten von Betriebsunterbrechungen zu vermeiden.

Methodik zur Durchführung kontinuierlicher Tests

Kontinuierliche Tests umfassen ein Spektrum von Tests, die die Zuverlässigkeit, Sicherheit, Betriebsleistung und Benutzerfreundlichkeit des Systems sicherstellen. Zu den Tests auf dem Spektrum gehören die folgenden:

  • Shift-Left-Ansatz: Dieser Ansatz priorisiert Software- und Systemtests in einem frühen Stadium des Softwareentwicklungslebenszyklus (SDLC), um spätere Probleme bei der Fehlersuche zu verringern oder zu vermeiden.

  • Shift-Right-Ansatz: Bei diesem Ansatz werden Tests gegen Ende des SDLC priorisiert, wobei der Schwerpunkt auf der Verbesserung des Benutzererlebnisses, der Gesamtleistung, der Fehlertoleranz und der Funktionalität liegt.

  • Smoketests: Diese Tests, die manuell oder automatisiert durchgeführt werden können, bieten eine erste oberflächliche Überprüfung auf auffällige Fehler in der Software. Smoketests sind zwar nicht sehr aufwändig in ihrer Konstruktion, bieten aber dennoch eine schnelle und kostengünstige Lösung zur Beseitigung grober Fehler in Software.

  • Komponententests: Diese eignen sich ideal für kleinere Tests auf Beanspruchung, Last, Volumen oder Speicherlecks in mehreren Builds, um Güteverlust in frühen Entwicklungsphasen zu erkennen.

  • Integrations- und Messaging-Tests: Diese prüfen, ob Fehler auftreten, wenn Softwaremodule miteinander arbeiten. Kontinuierliche Tests virtualisieren fehlende Abhängigkeiten, damit Teams testen können, wie gut die End-to-End-Prozesse und -Szenarien insgesamt funktionieren. Der zusammengesetzte Code wird dann kompiliert und zur Laufzeit ausgeführt, um zu testen, ob er wie erwartet funktioniert.

  • Leistungstests: Beim Testen der Leistung von Anwendungssoftware allein werden die Hardware und Middleware in der endgültigen Produktionsumgebung möglicherweise nicht berücksichtigt. Um die Gesamtleistung der Lösung effektiv beurteilen zu können, sind Systemintegrationstest erforderlich.

  • Funktionstests: Bei dieser Form des Testens wird überprüft, ob das Benutzererlebnis den Erwartungen entspricht und ob funktionale Workflows in einem Softwaresystem wie erforderlich ausgeführt werden. Die Lieferkettensoftware sollte zum Beispiel in der Lage sein, LKWs zu benachrichtigen, damit diese in den Fabriken eintreffen, wenn die Bestände für den Transport verfügbar sind. (Im Gegensatz dazu konzentrieren sich nicht-funktionale Tests auf Leistung, Bedienungskomfort, Reliabilität, Reaktionszeit, Ladezeit, Skalierbarkeit usw. und messen die Bereitschaft der Software, das gewünschte Kundenerlebnis zu bieten.)

  • Regressionstests: Bei diesen Tests wird überprüft, ob sich die Leistung, die Funktionalität oder die Abhängigkeiten ändern, nachdem Fehler in einer abhängigen Software behoben wurden, und ob das System wie zuvor funktioniert.

  • Benutzerabnahmetests: Diese werden auch als Anwendungstests oder Endbenutzertests bezeichnet. Hierbei wird die Anwendung in einer realistischen Situation von einer Untergruppe der vorgesehenen Benutzer getestet wird. Betatests sind ein Beispiel für Benutzerabnahmetests.
Virtualisierung und kontinuierliche Tests

Aufgrund folgender Merkmale sind IT-Systeme und Anwendungen einem erhöhten Fehlerrisiko ausgesetzt:

  • Sie werden zunehmend in eine Vielzahl neuer Technologien integriert – z. B. Cloud Computing, Internet der Dinge (IoT), softwaredefinierte Netzwerke, Augmented Reality (AR)

  • Sie sind zunehmend über mehrere Regionen verteilt, wobei Core und Edge nahtlos miteinander verbunden sind. Anwendungen für Smarter Cities, autonome Autos und intelligente Versorgungsunternehmen profitieren von einer solchen Architektur.

In diesen Fällen sind kontinuierliche Tests anspruchsvoller, weil die Entwicklung nicht an einem einzelnen Standort oder in einem Unternehmen stattfindet. Anderer Anbieter, einschließlich Remote-Teams, können einige Elemente des Systems liefern. Das System kann in Anwendungsprogrammierschnittstellen (APIs) integriert werden. Jedes Entwicklerteam arbeitet in unterschiedlichen IT-Umgebungen, einschließlich älterer Software. Die physische Umgebung jedes einzelnen Teams lässt sich für kontinuierliche Tests nicht reproduzieren.

Glücklicherweise können kontinuierliche Tests virtualisiert werden, um eine Testumgebung zu schaffen, in der das gesamte System virtuell in einer einzigen Schnittstelle reproduziert werden kann. Eine virtualisierte Umgebung kann problemlos neu konfiguriert werden, um ein anderes IT-System zu testen oder ein System, das zur Korrektur von Fehlern geändert wurde.

Die Rolle kontinuierlicher Tests in DevOps

In einer DevOps-Umgebung werden kontinuierliche Tests während des gesamten Softwareentwicklungslebenszyklus (SDLC) automatisch durchgeführt und arbeiten Hand in Hand mit kontinuierlicher Integration, um jeden neuen Code, der in die Anwendung integriert ist, automatisch zu validieren.

Testtools sind mit Testscripts vorinstalliert, die automatisch ausgeführt werden, wenn neuer Code in die Anwendung integriert wird. Normalerweise beginnen die Tests mit Integrationstests und wechseln automatisch zu Systemtests, Regressionstests und Benutzerabnahmetests.

Die Tests generieren Datenfeeds aus jedem Anwendungsmodul und die Feeds werden analysiert, damit sicher alle von dem neuen Code betroffenen Module wie erwartet funktionieren. Wenn ein Test fehlschlägt, geht der Code zur Korrektur an das Entwicklerteam zurück. Dann wird er wieder integriert und der Testzyklus beginnt von neuem.

Sobald alle Tests bestanden sind, geht die Anwendung oder das Projekt in die nächste Phase des SDLC über – in der Regel kontinuierliche Bereitstellung (Continuous Delivery).

Weitere Hintergrundinformationen zu diesem Thema finden Sie in Andrea Crawfords Erklärung zu DevOps:

Frameworks für kontinuierliche Tests

Für Testsätze ist ein kontinuierliche Tests-Framework erforderlich, das die Konsistenz zwischen Modulen in einer Anwendung, ihren Konnektoren (oder APIs und Containern), den Plattformen, ihrer Infrastruktur und den Szenarien, die ihre Anforderungen definieren, sicherstellt.

Die Testsätze können sequenziell (z. B. Regressionstests folgen Komponententests) oder gleichzeitig sein (z. B. wird eine neue Iteration eines Moduls von einem Test mit entsprechenden Tests für seine Abhängigkeiten begleitet).

Ein Framework für kontinuierliche Tests bietet einen Wrapper für alle Tests, sodass sie konsistent angewendet werden und den Weg für die Automatisierung ebnen. Entwickler wollen sicher sein, dass der Ansatz, den sie für ein Modul verfolgen, sich nicht von dem Ansatz unterscheidet, der für verwandte Module angewendet wird. Wenn sich die Module weiterentwickeln, entwickeln sich auch eine Reihe von Tests für miteinander verknüpfte Software.

Frameworks bieten eine Standardmethode zum bequemen Ändern der Scripts und Funktionen zum Testen. Die Automatisierung wird nur dann Vorteile erzielen, wenn die Inkonsistenzen beim Testen beseitigt werden. Andernfalls wird eine Reihe irreführender Testergebnisse generiert.

Weiterführende Lösungen
DevOps-Lösungen

Nutzen Sie leistungsstarke DevOps-Software für die Erstellung, Bereitstellung und Verwaltung von sicherheitsrelevanten, cloudnativen Anwendungen auf mehreren Geräten, in verschiedenen Umgebungen und Clouds.

DevOps-Lösungen erkunden
IBM Rational Test Workbench

Automatisieren Sie API-Tests, funktionale UI-Tests, Leistungstests und mehr. Identifizieren Sie Fehler dann, wenn sie weniger kostenintensiv zu beheben sind.

Rational Test Workbench erkunden
DevOps Insights

Erhöhen Sie die Geschwindigkeit, Qualität und Kontrolle Ihrer Anwendungen mit umfassenden Erkenntnissen aus vielfach eingesetzten Tools für kontinuierliche Integration und kontinuierliche Bereitstellung (Continuous Delivery).

DevOps Insights erkunden
Ressourcen Kontinuierliche Tests für Dummies, IBM Limited Edition

Erfahren Sie, wie IBM Software und Best Practices Softwareentwicklungs-, Test- und Betriebsteams bei der Einführung eines Ansatzes für kontinuierliche Tests unterstützen können.

Was ist DevOps?

DevOps beschleunigt die Bereitstellung qualitativ hochwertigerer Software, indem es die Arbeit von Softwareentwicklungs- und IT-Teams kombiniert und automatisiert.

Was ist Continuous Integration?

Die kontinuierliche Integration ist ein Prozess, bei dem die Entwickler während des gesamten Entwicklungszyklus häufig neuen Code integrieren und ihn mindestens einmal täglich zur Codebasis hinzufügen.

Gehen Sie den nächsten Schritt

Sind Sie bereit für DevOps? Um Software und Services mit der vom Markt geforderten Geschwindigkeit bereitzustellen, müssen Teams schnell iterieren und experimentieren sowie häufig neue Versionen bereitstellen, die auf Feedback und Daten basieren. Die erfolgreichsten Cloud-Entwicklungsteams setzen auf moderne DevOps-Kultur und -Praktiken sowie cloud-native Architekturen und stellen Toolchains aus erstklassigen Tools zusammen, um ihre Produktivität zu steigern.

Finden Sie Ihre DevOps-Lösung