Regressionstest
# Regressionstest

Unter einem Regressionstest (von lateinisch regredior, regressus sum ‚zurückschreiten‘) versteht man in der Softwaretechnik die Wiederholung von Testfällen, um sicherzustellen, dass Modifikationen in bereits getesteten Teilen der Software keine neuen Fehler („Regressionen“) verursachen. Solche Modifikationen entstehen regelmäßig z. B. aufgrund der Pflege, Änderung und Korrektur von Software. Der Regressionstest gehört zu den dynamischen Testtechniken.

Aufgrund des Wiederholungscharakters und der Häufigkeit dieser Wiederholungen ist es sinnvoll, wenn für Regressionstests Testautomatisierung zum Einsatz kommt.

In der Praxis steht der Begriff des Regressionstests für die reine Wiederholung von Testfällen. Die Testfälle selbst müssen spezifiziert und mit einem Soll-Ergebnis versehen sein, welches mit dem Ist-Ergebnis eines Testfalls verglichen wird. Ein direkter Bezug auf die Ergebnisse eines vorherigen Testdurchlaufs findet nicht statt.

Im Gegensatz dazu ordnet Liggesmeyer den Regressionstest in die Gruppe der diversifizierenden Tests ein. Dadurch wird im Unterschied zu funktionsorientierten Testtechniken die Korrektheit der Testergebnisse nicht anhand der Spezifikation entschieden, sondern durch Vergleich der Ausgaben der aktuellen Version mit den Ausgaben des Vorgängers. Ein Testfall gilt beim Regressionstest als erfolgreich absolviert, wenn die Ausgaben identisch sind.

## Regressionstests in Echtzeitsystemen

Der Regressionstest stellt insbesondere bei nichtdeterministischen Echtzeitsystemen ein wesentliches Problem dar, da in diesen Systemen eine Wiederholung des Tests streng genommen nicht gewährleistet ist. Zum einen führen typischerweise bereits geringfügige Änderungen an der Hardware des Systems zu einem veränderten Verhalten, andererseits sind hier im Allgemeinen manuelle Eingriffe (zum Beispiel bei Telefonanlagen oder Flugüberwachungssystemen) notwendig, die wegen des menschlichen Zeitverhaltens nicht „regressionstestgerecht“ erfolgen können. Eine Lösung dieses Problems liegt in der Implementierung eines automatischen Testsystems. Der Aufwand hierfür wird jedoch aus folgenden Gründen meistens gescheut:

* das automatische Testsystem muss alle Funktionen des Prüflings abdecken
* das automatische Testsystem muss parallel zum Prüfling entwickelt werden
* das automatische Testsystem muss parallel zum Prüfling angepasst werden
* eine Hardware-Änderung führt zu einem Neu-Aufsetzen der Testergebnisse, gegen die verglichen werden soll
