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.
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.
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-Technik | Selektive 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.
| Selenium | Appium | JMeter | Katalon |
|---|---|---|---|
| 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!
