Skip to main content

Moderne Software verändert sich ständig. Besonders in agilen Umgebungen, in denen Releases sehr häufig, manchmal sogar als Continuous Delivery erfolgen, werden ständig neue Funktionen hinzugefügt, bestehende Funktionen geändert und Fehler behoben. Und das ist natürlich eine gute Sache.

Gleichzeitig ist jedoch das Risiko hoch, dass bestehende, funktionierende Funktionalitäten beeinträchtigt werden. Deshalb benötigen wir Regressionstests. Kurz gesagt, sind Regressionstests eine Technik, die überprüft, ob neue Änderungen im Code keine neuen Fehler eingeführt haben. 

Im Folgenden gehe ich genauer auf Regressionstests als eine wichtige Praxis der Qualitätssicherung ein.  

Want more from The CTO Club?

Create a free account to finish this piece and join a community of CTOs and engineering leaders sharing real-world frameworks, tools, and insights for designing, deploying, and scaling AI-driven technology.

This field is for validation purposes and should be left unchanged.
Name*

Was sind Regressionstests?

Regressionstests sind ein wichtiger Bestandteil des Softwareentwicklungszyklus. Es handelt sich um eine Testart, die durchgeführt wird, um sicherzustellen, dass Codeänderungen keine Auswirkungen auf bestehende Funktionalitäten hatten und das, was vor den Änderungen funktionierte, weiterhin funktioniert. Alle während dieses Prozesses gefundenen Probleme gelten als Regressionsfehler und sollten mit höchster Priorität behandelt werden.

Regressionstests können sowohl manuell als auch automatisiert durchgeführt werden. Besonders bei großen Anwendungen ist es sinnvoll, die Regressionstest-Suite zu automatisieren, da der gesamte Regressionstestprozess ansonsten sehr zeitaufwändig sein kann.

Warum sind Regressionstests in der Softwareentwicklung wichtig?

Wenn neuer Code zur Codebasis hinzugefügt wird, sei es als Fehlerbehebung oder neue Funktionalität, kann dies den bereits funktionierenden Code beeinträchtigen, indem neue Fehler eingeführt oder nicht-funktionale Aspekte der Anwendung wie Leistung oder Benutzerfreundlichkeit beeinflusst werden.

Dies kann für die Endanwender zu Unannehmlichkeiten führen, die wohl wenig begeistert wären, wenn etwas, das früher funktionierte, plötzlich nicht mehr funktioniert. Das wiederum kann zu Umsatzverlusten führen und den Ruf des Unternehmens stark schädigen.

Regressionstests helfen, diese Fehler frühzeitig zu finden und ermöglichen eine Korrektur, bevor die Software in Produktion geht. Das bedeutet, dass die Kunden eine stabilere Version der Anwendung sehen, ohne dass bereits genutzte, bestehende Funktionalitäten beeinträchtigt werden.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

Upgrade your inbox with more tech leadership wisdom for delivering better software and systems.

This field is for validation purposes and should be left unchanged.
Name*

Auswahl der Testfälle

Zu Beginn des Regressionstests müssen die Tester die zu prüfenden Regressionstestfälle identifizieren. Es gibt zwei Hauptmethoden zur Auswahl von Testfällen: reaktiv und proaktiv.

Reaktiv 

Bei der reaktiven Auswahl der Testfälle handelt das Qualitätssicherungsteam erst nach der Änderung. Das bedeutet, die auszuführenden Testfälle werden nach den Codeänderungen durch das Entwicklungsteam ausgewählt.

Proaktiv

Beim proaktiven Ansatz antizipieren die Tester mögliche Änderungen bereits vor den Modifikationen durch die Entwicklung und bauen den Testplan entsprechend auf. Die Entscheidung zwischen den beiden Methoden hängt von bestimmten Faktoren ab, darunter Kosten, Komplexität, Abdeckung und Zeitvorgaben.

Priorisierung von Testfällen 

Die Priorisierung der Testfälle ist vermutlich einer der wichtigsten Schritte bei der Gestaltung eines Regressionsplans. Sie hilft, die Zeit effektiv zu nutzen und verbessert die Fehlererkennungsrate. Zunächst muss man feststellen, welche Bereiche von den jüngsten Änderungen am stärksten betroffen sind, sowie einschätzen, wie viel Zeit dem Team für die Durchführung der Regressionstests zur Verfügung steht. Nach einem bekannten Testprinzip ist ein "erschöpfendes Testen unmöglich" – das heißt, wir können nicht alle Testszenarien und Randfälle abdecken, aber wir können die bestmögliche Testabdeckung anstreben.

Mit diesem Wissen führen Tester eine Risikobewertung durch – sie entscheiden, welche Bereiche am kritischsten für Tests sind und wo die größte Fehlerwahrscheinlichkeit besteht. Zu den Testprinzipien zählt auch: Fehler neigen dazu, sich zu häufen, d.h. ein Bereich mit Problemen wird wahrscheinlich die meisten Fehler aufdecken. Im Regressionstest sind dies die Bereiche, die geändert wurden.

Ein weiterer Punkt ist, ob Testautomatisierung verwendet wird oder nicht. Die Ausführung automatisierter Tests läuft unabhängig, sodass sich Tester mehr auf erfahrungsbasierte Tests wie exploratives und Ad-hoc-Testing konzentrieren können sowie auf Bereiche, die nicht automatisiert werden können – beispielsweise um sicherzustellen, dass die Benutzererfahrung nicht verschlechtert wurde.

Während die Software verändert wird, ist es außerdem wichtig, vorhandene Testfälle anzupassen, um die neuen Änderungen widerzuspiegeln oder veraltete Testfälle entsprechend zu kennzeichnen, damit diese nicht versehentlich ausgeführt werden.

Techniken & Tools für effektive Regressionstests

Die Retest-All-TechnikSelektive Technik Priorisierungstechnik
Auch bekannt als vollständige Regressionstestung, ist dies die gründlichste Regressionstesttechnik. Sie beinhaltet das erneute Testen sämtlicher Funktionen der Software nach jeder Änderung. Ziel ist eine 100%ige Testabdeckung, indem alle bestehenden Tests erneut ausgeführt und neue Testfälle durchgeführt werden.

Diese Technik eignet sich besonders für automatisierte Regressionstests, sofern der Großteil des Test-Sets automatisiert ist. Sie ist die sicherste Technik, aber bei manuellen Tests wenig effektiv, da es sehr viel Zeit kosten kann, die gesamte Regressionstestsuite durchzugehen.
Dies ist eine teilweise Regressionstesttechnik, bei der das Team nur diejenigen Funktionen erneut testet, die von den geänderten Teilen des Codes betroffen sind. Sie steht in enger Verbindung mit der Auswahl der Regressionstests.

Eine Regressionstestsuite wird erstellt, indem bestehende und neue Tests ausgewählt werden, die mit den Bereichen zusammenhängen, in denen Fehlerbehebungen und Erweiterungen hinzugefügt wurden. Diese Testfälle werden zudem nach Risiko und Wichtigkeit der Funktionalitäten priorisiert.
Dies ist ein Testansatz, bei dem die Funktionen basierend auf ihrer Bedeutung und Auswirkung auf die Gesamtfunktionalität der Software getestet werden. Das Testteam prüft die Kernfunktionen der Software und sorgt dafür, dass diese gründlich getestet werden.

Die Idee hinter dieser Technik ist es, sicherzustellen, dass die wichtigsten Teile der Anwendung nicht beeinträchtigt wurden. Dennoch ist es keine besonders effiziente Technik, da sie sich nicht auf die tatsächlich geänderten Bereiche fokussiert und viel Retesting für Funktionen erfordert, die möglicherweise seit dem letzten Test unverändert geblieben sind.

Die Rolle der Automatisierung beim Regressionstesten

Beim Testen mit Automatisierung ist es wichtig, die Testautomatisierungspyramide zu berücksichtigen. Diese besagt, dass der Großteil der Tests Unit-Tests sein sollten, da sie schneller ausgeführt werden können und Fehler somit schneller erkannt werden. Hinzu kommen Integrationstests (oder API-Tests), die zwar weniger zahlreich, aber trotzdem ein großes Testvolumen ausmachen.

Auf der obersten Ebene stehen die UI-End-to-End-Tests, die am längsten laufen und geringer ausfallen sollten als in den unteren Stufen.

Durch den Einsatz automatisierter Testskripte kann der gesamte Regressionsprozess optimiert werden. Testfälle werden schneller ausgeführt, Fehler werden rasch identifiziert und es ist nur wenig menschliches Eingreifen nötig. Die automatisierten Tests können nach jeder Änderung am Quellcode ausgeführt werden. Anhand der Testergebnisse können die Tester erkennen, welche Bereiche stärker betroffen sind, und diese gezielt mit manuellen Tests untersuchen.

Exploratives Testen ist immer eine gute Ergänzung zur Automatisierung, denn es handelt sich um eine Testmethode, die nicht automatisiert werden kann. Die Erfahrungen der Tester bringen dabei enormen Mehrwert, da sie ungewöhnliche Szenarien aufdecken können.

Regressionstest-Tools

Die Entwicklungsabteilung übernimmt üblicherweise die ersten beiden Ebenen der Pyramide. In diesem Abschnitt schauen wir uns einige der beliebtesten UI-Automatisierungswerkzeuge an, die den Testprozess automatisieren können.

SeleniumAppiumJMeterKatalon
Ein Open-Source-Tool zur Automatisierung von Browsern, das häufig für die Testautomatisierung von Webanwendungen benutzt wird.

Es ist in mehreren Programmiersprachen verfügbar, darunter Java, Python, JavaScript und C#, und funktioniert unter allen Betriebssystemen und gängigen Browsern. Tester, die Skripte erstellen, benötigen allerdings Programmierkenntnisse.
Appium ist das mobile Pendant zu Selenium – ein Framework speziell zum Testen von mobilen Apps.

Auch Appium unterstützt mehrere Programmiersprachen und funktioniert sowohl auf Android als auch iOS.
Ebenfalls ein Open-Source-Tool: JMeter kann für Funktionstests eingesetzt werden, ist aber besonders leistungsfähig, wenn es um Performancetests geht.

Das Tool eignet sich bestens, wenn Last- oder Stresstests auf der Anwendung erforderlich sind und Ergebnisse mit denen vor dem Code-Änderungen verglichen werden sollen – um zu überprüfen, ob sich die Performance in irgendeiner Weise verändert hat.
Katalon ist ein Tool für Softwaretests auf Web-, Mobil-, API- und Desktop-Anwendungen.

Es bietet zudem Record-and-Playback-Funktionen, was Vorteile für Teams bringt, in denen nicht alle Tester erfahrene Entwickler sind.

Natürlich lässt sich diese Liste beliebig erweitern, denn auf dem Markt stehen zahlreiche automatisierte Testwerkzeuge zur Verfügung. Welches gewählt wird, hängt von den individuellen Anforderungen des Projektes und Teams ab.

Herausforderungen bei der Implementierung 

Obwohl der Regressionstest-Prozess ein fester Bestandteil des Entwicklungszyklus ist, bringt er dennoch Herausforderungen mit sich.

  • Zeitliche Einschränkungen: Zeit ist wahrscheinlich die häufigste Herausforderung beim Regressionstest. Da die Regressionstest-Suite mit jedem neuen Modul im Code immer umfangreicher wird, kann sie sehr viel Zeit in Anspruch nehmen, die dem Team nicht immer zur Verfügung steht. Mehr Zeit für Regressionstests bedeutet außerdem höhere Kosten.
  • Wartung: Wenn der bestehende Code neue Funktionen und Verbesserungen erhält, müssen auch die Testfälle angepasst werden. Dies gilt sowohl für manuelle als auch automatisierte Tests, da alle bestehenden Testszenarien die neuen Anforderungen widerspiegeln sollten.
  • Priorisierung: Einer der wichtigsten Schritte bei Regressionstests. Das Team muss sicherstellen, dass unter Berücksichtigung der zur Verfügung stehenden Zeit für Regression die richtigen Testfälle und Skripte ausgewählt werden, um die Testabdeckung zu maximieren und gleichzeitig die Größe der Test-Suite zu minimieren.

Die Auswirkungen effizienter Regressionstests auf die Produktqualität

Trotz der Herausforderungen haben Regressionstests einen großen Einfluss auf die Softwarequalität, wenn sie richtig durchgeführt werden.

Durch Regressionstests stellt das Team zunächst sicher, dass nach der Einführung neuer Funktionen keine neuen Fehler in die Anwendung gelangen.

Dies hat einen Kaskadeneffekt auf die Codequalität und die Gesamtqualität des zu testenden Systems.

Weniger Fehler im Produktivbetrieb bedeuten außerdem eine höhere Kundenzufriedenheit und ein besseres Kundenerlebnis.

Fazit

Regressionstests sind ein integraler Bestandteil der Teststrategie eines jeden erfolgreichen Entwicklungsprozesses. Sie stellen sicher, dass neu hinzugefügte Funktionen und Fehlerbehebungen den bestehenden funktionsfähigen Code nicht beeinträchtigen und das System die Anforderungen für die Freigabe in der Produktion erfüllt.

Mit einer erfolgreichen Priorisierung der Testfälle und Unterstützung durch Automatisierungstools kann der Regressionsprozess ein äußerst effizienter Weg sein, das Risiko zu minimieren, bereits funktionierende Bereiche zu beschädigen. Dies trägt wiederum dazu bei, dem Endnutzer eine gute User Experience zu bieten.

Mehr zum Thema Regressionstests und alles rund ums Testen erfahren Sie, wenn Sie den QA Lead Newsletter abonnieren!