Was sind Regressionstests?

Autoren

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Regressionstests definiert

Der Regressionstestprozess ist eine Strategie zum Testen von Software, mit der überprüft wird, ob Codeänderungen die bestehende Funktionalität beeinträchtigen oder neue Fehler verursachen.

Regressionstests werden in der Regel nach der Behebung von Fehlern durchgeführt. Dabei werden Tests erneut ausgeführt, um sicherzustellen, dass die Funktionen nach dem Hinzufügen von neuem Code wie erwartet funktionieren.

Ein Aspekt, der Regressionstests einzigartig macht, ist die Art und Weise, wie sie sich frei über alle verschiedenen Phasen von Softwareentwicklungstests erstrecken. Regressionstests können jederzeit durchgeführt werden, um einen Schritt zurückzugehen und sicherzustellen, dass der neu eingeführte Code die allgemeine Funktionalität und die Effizienz des Workflows nicht beeinträchtigt.

Wer sollte Regressionstests durchführen?

Jedes Unternehmen, dessen Computercode regelmäßig aktualisiert wird, muss wahrscheinlich Regressionstestmethoden implementieren. Code-Updates sind so allgegenwärtig, dass es schlichtweg unmöglich ist, eine genaue Gesamtzahl mit irgendeiner Zuverlässigkeit zu ermitteln.

Aufgrund von Technologien wie künstlicher Intelligenz (KI) und der Pipeline für kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) erhöhen jedoch viele Unternehmen die Häufigkeit von Codeänderungen, wobei einige Unternehmen sogar tägliche Updates durchführen. Das kann zu einer Menge Regressionstests führen.

Ein wichtiger Bereich, in dem Regressionstests eine zentrale Rolle spielen, ist die Qualitätssicherung (QA). Die Aufgaben von Regressionstest- und QA-Teams sind bemerkenswert ähnlich: die Optimierung der Benutzererfahrung und die Bereitstellung hochwertiger Daten und möglichst sicherer Software.

Der einzige Unterschied besteht darin, wie viel vom Gesamtbild jeder einzelne betrachtet. Regressionstests konzentrieren sich mit einem präziseren Umfang auf kürzlich vorgenommene Änderungen, während die Qualitätssicherung das gesamte System und seine Funktionsweise bewertet.

IBM DevOps

Was ist DevOps?

Andrea Crawford erklärt, was DevOps ist, welchen Wert DevOps hat und wie DevOps-Praktiken und -Tools Ihnen dabei helfen, Ihre Anwendungen durch die gesamte Delivery Pipeline der Softwareentwicklung von der Idee bis zur Produktion zu bringen. Das von führenden IBM Experten geleitete Programm soll Führungskräften das nötige Wissen vermitteln, um Prioritäten für KI-Investitionen zu setzen, die zu mehr Wachstum führen.

Regression in 8 Schritten

Regressionstesttechniken fungieren als Schutzmaßnahmen gegen Codeänderungen, die nicht mit dem System, das sie hostet, kompatibel sind. Es ist wichtig, solche Maßnahmen zu ergreifen, um den Systembetrieb zu optimieren.

Bei Regressionstests wird in der Regel diese Abfolge von Schritten (oder eine sehr ähnliche) befolgt:

  1. Eine Codeänderung einführen: Fügen Sie neuen Code hinzu, ändern Sie vorhandenen Code oder optimieren Sie die aktuelle Funktionalität innerhalb des Quellcodes.
  2. Berücksichtigen Sie mögliche Auswirkungen: Analysieren Sie die Softwareanwendung, um Bereiche zu identifizieren, die potenziell von den neuen Änderungen betroffen sind.
  3. Auswahl der Testfälle: Das DevOps-Team wählt die Tests auf der Grundlage der Testfälle innerhalb der Regressionstest-Suite aus und konzentriert sich dabei insbesondere auf diejenigen, die kritische Funktionen abdecken. Dazu können Unit-Tests (für einzelne Module), Funktionstests (zur Überprüfung der Abläufe) oder Integrationstests (zur Sicherstellung der Zusammenarbeit der Komponenten) gehören.
  4. Priorisieren Sie Testfälle: Wenn mehrere Testfälle ausgewählt werden, unterzieht das Team die Testfälle einer Priorisierung, um sie nach Wichtigkeit und potenzieller Auswirkung zu ordnen.
  5. Testfälle ausführen: Führen Sie Tests manuell aus oder verwenden Sie automatisierte Regressionstesttools. Verlassen Sie sich unabhängig vom Ansatz (z. B. manuelles Testen oder automatisiertes Testen) auf Testskripte – strukturierte Vorlagen, die Tester bei den Aktionen unterstützen.
  6. Testergebnisse melden und analysieren: Überprüfen Sie die Ergebnisse und unterstützenden Daten. Wenn Tests Fehler oder Ausfälle aufdecken, benachrichtigen Sie umgehend das Entwicklungsteam.
  7. Fixes vornehmen und Fälle erneut testen: Die Entwickler wenden die erforderlichen Fixes auf die vorhandenen Testfälle an und testen die zuvor gekennzeichneten Probleme erneut, um die Lösung zu bestätigen.
  8. Wiederholen Sie nach Bedarf den gesamten Prozess: Wiederholen Sie den Regressionstestzyklus so oft wie nötig, um sicherzustellen, dass die Anwendung wie beabsichtigt funktioniert.

Arten von Regressionstests

Für ein scheinbar einfaches Thema gibt es eine Vielzahl von Regressionstechniken, die eingesetzt werden. Jeder hat seine eigene Herangehensweise an Regressionstests.

Unit-Regressionstests

Wie der Name schon sagt, konzentriert sich diese Form des Regressionstests auf die Komponenten oder Module (oder „Einheiten“), aus denen ein System besteht, und darauf, ob in dieser einzelnen Einheit Fehler aufgetreten sind.

Beispiel: Entwickler könnten beschließen, einer Website eine Funktion „Passwort vergessen“ hinzuzufügen. Ein Unit-Regressionstest würde überprüfen, ob der ursprüngliche Anmeldemechanismus trotz der zusätzlichen Funktion weiterhin wie vorgesehen funktioniert.

Partielle Regressionstests

Wenn das Ziel darin besteht, herauszufinden, ob sich die jüngsten Änderungen nur auf einen Teilbereich des aktualisierten Systems ausgewirkt haben, wird eine partielle Regressionstestung verwendet, um diesen Teilbereich zu ermitteln und geeignete Diagnosen durchzuführen.

Beispiel: Nehmen wir an, eine Website integriert ein neues Zahlungsgateway. Bei partiellen Regressionstests wird möglicherweise nur ein Teil einer neuen Funktion und deren Zweckmäßigkeit bewertet, während weitere, nicht damit in Zusammenhang stehende Funktionen ungetestet bleiben.

Vollständige Regressionstests

In anderen Fällen sind umfassendere Tests erforderlich, beispielsweise nach größeren Codeänderungen. Bei vollständigen Regressionstests wird das gesamte System oder die gesamte Anwendung erneut getestet, um die fortlaufende Funktionalität sicherzustellen.

Beispiel: Die Entwickler einer Website beschließen, eine Galerie mit ausgewählten Produkten einzubinden. Nach der Erstellung führt das Unternehmen vollständige Regressionstests zur Funktionalität der neuen Galerie und aller bestehenden Testfälle durch, die alle erneut ausgeführt werden müssen.

Selektive Regressionstests

Selektive Regressionstests führen ein prädiktives Element in Regressionstests ein. Dabei werden Testfälle aus der Testsuite ausgewählt, basierend auf der Einschätzung der Tester, dass diese Bereiche von den vorgenommenen Codeänderungen betroffen sein werden.

Beispiel: Entwickler mobiler Anwendungen stellen möglicherweise fest, dass mehrere Aspekte der Benutzeroberfläche integriert und aktualisiert werden müssen. In einem solchen Fall könnten die Entwickler selektive Regressionstests einsetzen, um die dauerhafte Stabilität der Benutzeroberfläche sicherzustellen.

Progressive Regressionstests

Mit einem gemischten Ansatz werden sowohl neue als auch bestehende Funktionen bewertet. Progressive Regressionstests überprüfen jedes einzelne Element, um Fehler zu erkennen, die durch neue Funktionen verursacht wurden.

Beispiel: Wenn ein Unternehmen ein neues Update für ein bestehendes Softwareprodukt veröffentlicht, führt es in der Regel zuvor progressive Regressionstests durch, um sicherzustellen, dass die Funktionalität des neuesten Updates weiterhin derjenigen der Serie entspricht.

Korrigierende Regressionstests

Die Sicherstellung der Datenkonsistenz ist der Zweck korrigierender Regressionstests. Testfälle werden erneut ausgeführt, um zu sehen, ob ähnliche Testergebnisse auftreten. Korrigierende Regressionstests werden häufig durchgeführt, wenn keine Änderungen an der Codebasis vorgenommen wurden.

Beispiel: Neue Funktionen werden nicht immer zur Software hinzugefügt. Manchmal werden Änderungen vorgenommen, um den Code zu verfeinern und ihn besser laufen zu lassen. Korrigierende Regressionstests werden in Fällen verwendet, in denen Code umgestaltet wird, um sicherzustellen, dass das Refactoring keine Codefehler verursacht.

Erneutes Durchführen aller Regressionstests

Regressionstests, bei denen alle Tests erneut durchgeführt werden, gelten als postfinale Tests. Dabei führen Entwicklungsteams Tests an allen Regressionstestfällen durch, um sicherzustellen, dass alles harmonisch zusammenarbeitet.

Beispiel: Regressionstests, bei denen alle Tests erneut durchgeführt werden, werden häufig verwendet, um die Änderungen zu überprüfen, die mit größeren architektonischen Umstellungen in der Software einhergehen können. Beispielsweise eine Finanz-App, die ein neues Framework einführt, das eine wesentliche Änderung der Funktionsweise darstellt.

Automatisierte Regressionstests

Die beschriebenen Testverfahren können zeitaufwändig sein, weshalb häufig automatisierte Testtools eingesetzt werden, um den Prozess zu beschleunigen. Die Geschwindigkeit der Testausführung wird erhöht, selbst wenn es sich um große Systeme handelt.

Beispiel: Automatisierte Regressionstests können nach Backend-Updates durchgeführt werden, um festzustellen, ob die Endpunkte der Anwendungsprogrammierschnittstelle (API) weiterhin korrekte Daten und Antworten generieren, was auf einen korrekten Gesamtbetrieb hindeutet.

Manuelle Regressionstests

Bestimmte Testszenarien erfordern menschliches Verständnis, und genau hier kommen manuelle Regressionstests zum Einsatz. Es versteht sich, dass manuelle Tests aufgrund der besonderen Sensibilität, die diese Arbeit mit sich bringt, in der Regel mehr Zeit in Anspruch nehmen.

Beispiel: Websites müssen auf verschiedenen Plattformen sowohl ansprechend als auch vergleichbar aussehen. Mit manuellen Regressionstests können Sie die Reaktionsfähigkeit einer Website nach Layoutänderungen überprüfen.

Selenium-Regressionstests

Dieses Regressionstestverfahren nutzt Selenium, ein Open-Source-Framework zur Automatisierung von Webanwendungen. Selenium-Regressionstests verbessern die Software-Stabilität, indem sie Regressionen frühzeitig erkennen und sicherstellen, dass neue Änderungen den bestehenden Code nicht beeinträchtigen. Dies ist besonders nützlich in Situationen mit ständigen Aktualisierungen, wie z. B.der kontinuierlichen Integration.

Beispiel: Ein System zur Flugbuchung fügt eine neue Funktion hinzu, die neben den bisher zulässigen Kreditkartenzahlungen auch die Kartenzahlung per Debitcard ermöglicht. Selenium kann überprüfen, ob der Ablauf von Kreditkartenzahlungen wie erwartet weiterhin funktioniert.

Nichtfunktionale Regressionstests

Die Softwarequalität wird anhand mehrerer Variablen beurteilt, die unabhängig vom Softwareentwicklungslebenszyklus (SDLC) existieren. Nicht-funktionale Regressionstests dienen dazu, die Qualität von Software zu überprüfen, die sicher in der Anwendung ist und eine gute Benutzererfahrung bietet.

Beispiel: Die Entwickler einer Website fügen neue Funktionen hinzu und möchten dann feststellen, wie sich die neuen Funktionen auf die Betriebsgeschwindigkeit auswirken. Nichtfunktionale Regressionstests überprüfen die Ladezeiten. Wenn sich diese Ladezeiten verlängert haben, deutet dies auf eine Regression hin.

Mit welchen Technologien werden Regressionstests durchgeführt?

Ein weiterer wichtiger Aspekt von Regression ist die Art und Weise, wie sie mit anderen Testschemata zusammenarbeiten können, um Synergieeffekte zu erzielen. Hier sind ein paar:

  • Exploratives Testen: Exploratives Testen kann mit Regressionstests kombiniert werden, um mehr Ergebnisse für die Analyse zu erzielen. Die beiden funktionieren unterschiedlich: Regressionstests dienen dazu, das erwartete Systemverhalten nach der Verwendung von skriptbasierten Tests zu bestätigen, während explorative Tests unerwartete Probleme durch nicht skriptbasierte Entwickleruntersuchungen aufdecken. Dennoch können die beiden Testschemata komplementär eingesetzt werden, sodass sie sich gegenseitig ergänzen. Einige Unternehmen verwenden eine Kombination aus beidem – exploratives Regressionstesten –, die Entwicklern Orientierung und Flexibilität bietet. Exploratives Testen kann seinerseits dazu beitragen, bestehende Fälle oder neue Testfälle zu verbessern und eine umfassendere Testabdeckung zu fördern.
  • Kontinuierliche Tests: Ebenso werden Regressionstests häufig zusammen mit kontinuierlichen Tests eingesetzt. Wie der Name schon sagt, umfasst kontinuierliches Testen die Integration kontinuierlicher Testverfahren in den gesamten SDLC. Ständige oder kontinuierliche Tests sind ein fester Bestandteil von Regressionstests. Regressionstests könnten ohne kontinuierliche Tests nicht wirklich wie vorgesehen funktionieren. Kontinuierliches Regressionstraining – eine Mischung aus beidem – gibt Testern mehr Freiraum, sich auf Testumgebungen mit hoher Priorität zu konzentrieren, die möglicherweise Fehler oder andere Probleme aufweisen.
  • End-to-End-Tests: Eine weitere Technologie, die bei Regressionstests zum Einsatz kommt, ist das End-to-End-Testing (E2E), bei dem realistische Anwenderszenarien implementiert werden, um den gesamten Workflow eines Systems von Anfang bis Ende zu validieren. E2E konzentriert sich auf die Benutzererfahrung sowie auf Komponenten wie die Benutzeroberfläche, das Backend und zugehörige Datenbanken. Regressionstests und E2E-Tests ergänzen sich insofern, als Regressionstests sogar vollständige E2E-Tests umfassen können und E2E-Tests auf Probleme hinweisen können, die durch Regressionstests behoben werden müssen.

Regressionstests und KI

Die weitreichenden Auswirkungen von KI sind verblüffend. Nur wenige Branchen investieren so stark in KI wie der Technologiesektor, und Regressionstests sind einer von vielen technologischen Prozessen, die durch die Leistungsfähigkeit der KI radikal beschleunigt werden.

Der Begriff „beschleunigt“ ist treffend, da KI Regressionstests vor allem dadurch verbessert, dass sie die Geschwindigkeit maximiert, mit der ihre verschiedenen Schlussfolgerungen erzielt werden. Allerdings erhöht KI auch die Genauigkeit dieser Testdaten.

Konkret nutzt KI ihre Algorithmen, um relevante Testfälle zu erstellen, indem sie historische Testdaten, Nutzerverhalten und Codeänderungen analysiert. Dies hilft dabei, Tests entsprechend ihrer voraussichtlichen Auswirkungen zu priorisieren. Und wenn KI diese Tests durchführt, werden sie schneller ausgeführt und liefern schnellere Testergebnisse.

KI verbessert sogar die Art und Qualität von Regressionstests durch den Einsatz von Fehlererkennungsmethoden und selbstheilenden Tests. Dadurch können automatisierte Tests auch in Situationen, in denen die Entwicklung weitergeht, reibungslos funktionieren. Letztendlich verbessert KI Regressionstests, indem sie die Entscheidungsfindung optimiert und Aufgaben automatisiert, was Kosten senkt und die Markteinführungszeit verkürzt.

Verwandte Lösungen Lösungen
IBM Instana Observability

Nutzen Sie die Leistungsfähigkeit von KI und Automatisierung, um Probleme im gesamten Anwendungs-Stack proaktiv zu lösen.

IBM Instana Observability kennenlernen
DevOps-Lösungen

Verwenden Sie DevOps-Software und -Tools, um cloudnative Anwendungen für mehrere Geräte und Umgebungen zu erstellen, bereitzustellen und zu verwalten.

DevOps-Lösungen erkunden
Cloud-Beratungsleistungen

Geschäftsagilität und -wachstum beschleunigen: Modernisieren Sie Ihre Anwendungen mit unseren Cloud-Consulting-Services durchgehend auf jeder Plattform.

Erkunden Sie Cloud-Beratungsleistungen
Machen Sie den nächsten Schritt

Von proaktiver Erkennung mit IBM Instana bis hin zu Echtzeit-Erkenntnissen in Ihrem Stack können Sie cloudnative Anwendungen zuverlässig am Laufen halten.

  1. Entdecken Sie IBM Instana
  2. DevOps-Lösungen erkunden