Ein Regressionstest ist etwas, das eure Testergebnisse mit bestimmten Anforderungen abgleicht. Gute Beispiele hierfür sind Unit-Tests und funktionale Tests. Diese geben Aufschluss darüber, ob sich die Funktionalität eurer Anwendung verschlechtert hat oder nicht (daher Regression).

Es gibt noch andere Arten von automatisierten Tests: Fuzzy-Inputs und automatisierte Erkundungstests kommen mir in den Sinn. Diese haben nicht immer vorhersehbare, wiederholbare Ergebnisse, wie eure Regressionstests. Für einen Tester wäre es ziemlich mühsam und zeitaufwendig, sie manuell durchzuführen, daher ist es nicht verkehrt, sie zu automatisieren und das Ergebnis zu betrachten. Die Grenze des Testens liegt darin, wie schnell man denken und dann automatisieren kann, und nicht darin, wie schnell man klicken kann.

Einige Beispiele für automatisierte Nicht-Regressionstests sind:

  • Jeder automatisierte Test, der weggeworfen und nicht für Regressionstests verwendet wird, ist kein Regressionstest, einschließlich Unit-Tests, die später nicht für Regressionstests verwendet werden. Technisch gesehen ist jeder automatisierte Test, der für eine neue Funktionalität geschrieben wurde, kein Regressionstest, solange er nicht mindestens einmal die korrekte Funktionalität überprüft hat. Erst dann kann er nachweisen, dass sich die Funktionalität nicht geändert hat.
  • Zuverlässigkeitstests, bei denen ihr das zu testende System so lange wie möglich in einer produktionsnahen Umgebung laufen lasst, um zu sehen, wie lange es ohne Fehler oder Abstürze läuft
    Stresstests, bei denen es darum geht, zu sehen, wie sich das zu testende System bei starker Beanspruchung oder eingeschränkten Ressourcen verhält; Ihr könnt z. B. CPUs entfernen oder die Bandbreite verringern oder eine große Anzahl von Benutzern simulieren.
  • Bei einigen Leistungstests gibt es möglicherweise keine spezifischen Prüfungen, die zu verifizieren sind, und es wird eine Person benötigt, um die Ergebnisse zu interpretieren, obwohl einige Leistungstests als Regressionstests durchgeführt werden können (z. B. “Führe 100 Iterationen dieser Funktion aus. Wenn es weniger als 5 Sekunden gedauert hat, ist der Test bestanden, ansonsten ist er fehlgeschlagen”).
    Glowcoder erwähnte Fuzz-Tests, bei denen die Eingaben in eine Funktion nach dem Zufallsprinzip erfolgen, aber das Thema verdient es, etwas erweitert zu werden. Beim Fuzz-Testing sucht der Tester nach unerwartetem Verhalten, das Probleme verursachen könnte, wie Sicherheitslücken, Abstürze und Hänger.

 

Beispiele für Regressionstests sind:

  • Wiederholung früherer Tests: Tests, die zuvor durchgeführt wurden, um sicherzustellen, dass sie auch nach einer Änderung weiterhin erfolgreich durchgeführt werden können.
  • Funktionalitätstests: Tests, die sicherstellen, dass die bestehenden Funktionen der Software nach einer Änderung weiterhin korrekt funktionieren. Dies kann z.B. die Überprüfung von Benutzereingaben, die Ausgabe von Daten oder die Interaktion mit anderen Systemen umfassen.
  • Edge-Case-Tests: Tests, die sicherstellen, dass die Software auch in Randfällen oder ungewöhnlichen Szenarien korrekt funktioniert. Dies könnte z.B. die Behandlung von ungültigen Eingaben oder unerwarteten Zuständen sein.
  • Integrationstests: Tests, die sicherstellen, dass die Software nach einer Änderung weiterhin korrekt mit anderen Komponenten oder Systemen interagiert.
  • Leistungstests als Regressionstests: Bestimmte Leistungstests können auch als Regressionstests dienen, wenn sie sicherstellen, dass Änderungen keine negativen Auswirkungen auf die Leistung der Software haben.

Aber wie definiert man das nun genauer?

“Automatisierte Tests” bezieht sich im Allgemeinen auf Tests, die automatisiert durchgeführt werden, um die Funktionalität einer Software zu überprüfen. Diese Tests können verschiedene Arten von Tests umfassen, wie z.B. Unit-Tests, Integrationstests oder Systemtests. Das Hauptziel automatisierter Tests ist es, Fehler frühzeitig im Entwicklungsprozess zu finden und die Qualität der Software sicherzustellen.

“Automatisierte Regressionstests” sind eine spezifische Art von automatisierten Tests, die darauf abzielen, sicherzustellen, dass neue Änderungen oder Updates an einer Software keine bereits behobenen Fehler reintroduzieren (Regressionen). Sie überprüfen, ob die bestehende Funktionalität nach einer Änderung immer noch wie erwartet funktioniert. Regressionstests werden typischerweise nach jeder Änderung am Code oder an der Konfiguration durchgeführt, um sicherzustellen, dass keine unerwünschten Nebeneffekte auftreten.