Einheit 9 / 11

Regressionstests, Testwartung und Bekämpfung fragiler Tests

Gewinne:

  • Verstehen Sie den Zweck von Regressionstests und können Sie mithilfe künstlicher Intelligenz Tests auswählen und Regressionsfälle entsprechend den Änderungen erstellen
  • Fähigkeit, die Grundursachen fragiler Tests (Zeitpunkt, Reihenfolgeabhängigkeit, gemeinsamer Zustand, externe Abhängigkeit) zu diagnostizieren und dauerhafte Lösungen anzuwenden, ohne das Symptom zu unterdrücken
  • Fähigkeit, die Disziplin beizubehalten, das vollständige Paket vor der Veröffentlichung auszuführen und gleichzeitig die Regressionssuite schnell, unabhängig und zuverlässig zu halten, indem doppelte Tests vermieden werden

Software ändert sich ständig; Jede neue Funktion, jeder Fix kann etwas zerstören, das zuvor funktioniert hat. Die anschließende Störung einer zuvor funktionierenden Funktion wird als Regression bezeichnet. Beim Regressionstest wird die vorhandene Funktionalität bei jeder Änderung erneut getestet, um diese Verschlechterungen zu erkennen. Mit der Zeit werden diese Testsuiten größer – Tausende von Tests – und es entstehen zwei große Probleme: Die Suite wird langsamer und unzuverlässige Tests – unzuverlässige Tests, die manchmal im selben Code bestehen und manchmal fehlschlagen – zerstören das Vertrauen des Teams in die Testergebnisse. Künstliche Intelligenz (KI) ist ein leistungsstarkes Hilfsmittel, um die Regressionssuite gut gewartet, schnell und zuverlässig zu halten. Der zentrale Vorbehalt bleibt jedoch bestehen: Während KI anbietet, einen fragilen Test „zu bestehen“, kann sie oft einen Patch erstellen, der einen echten Fehler vertuscht. Ihre Aufgabe ist es, die Grundursache der Instabilität zu finden und nicht das Symptom zu unterdrücken.

Ursachen für fragile Tests

Fragiles Testen ist das heimtückischste Testproblem: Es ist unzuverlässig, ob es bestanden wird oder nicht, was das Team zur Gewohnheit zwingt: „Es muss schon wieder hängengeblieben sein, führen Sie es noch einmal aus“ – und diese Angewohnheit wird eines Tages einen echten Fehler als „flaky“ ignorieren. Hauptursachen:

  • Zeit-/Rennbedingung: Der Test überprüft das Ergebnis, ohne auf den Abschluss eines Vorgangs zu warten. Der häufigste Grund.
  • Reihenfolgeabhängigkeit: Tests hängen von den voneinander hinterlassenen Daten ab; Es bricht, wenn sich die Reihenfolge ändert.
  • Gemeinsamer Fall: Mehrere Tests verwenden dieselben Testdaten/Benutzer, was zu Konflikten führt.
  • Externe Abhängigkeit: Reales Netzwerk, Drittanbieterdienst, Systemzeit, Zufallswert.
  • Umgebungsunterschied: Wechselt zu lokal, bleibt in CI (kontinuierliche Integrationsumgebung).
Achtung: Das Bestehen eines fragilen Tests durch „mehrmaliges Wiederholen“ verschleiert oft einen echten Parallelitätsfehler. Bei einem erneuten Versuch handelt es sich um ein diagnostisches Hilfsmittel, nicht um eine Behandlung. Finden Sie zuerst die Grundursache; Verwenden Sie einen erneuten Versuch nur als letzten Ausweg bei dokumentierter, tatsächlich externer Instabilität.

Testwartung: Das Paket gesund halten

Die Regressionssuite ist wie ein Garten; Wenn man sich nicht darum kümmert, wird das Unkraut die Oberhand gewinnen. KI unterstützt bei drei Wartungsaufgaben:

1. Doppelte/unnötige Probereinigung. Im Laufe der Zeit häufen sich viele Fälle, in denen dasselbe getestet wird. KI schlägt vor, ähnliche Tests zu gruppieren und zusammenzuführen.

2. Fragile Testdiagnose. Sie geben der KI den Testcode und das Instabilitätsmuster; schlägt mögliche Grundursachen und dauerhafte Lösungen vor.

3. Testauswahl/-priorisierung. Es ist teuer, bei jeder Änderung das gesamte Paket auszuführen. Mit der Testauswirkungsanalyse (Auswahl nur relevanter Tests basierend auf geändertem Code) empfiehlt die KI, welche Tests zuerst ausgeführt werden sollten. Allerdings ist das vollständige Vorabversionspaket ein Muss.

Quarantäne: Fragile Tests richtig verwalten

Sie haben festgestellt, dass ein Test fragil ist, aber Sie haben keine Zeit, die Grundursache sofort zu beheben. Was zu tun? Es gibt zwei falsche Möglichkeiten: den Test vollständig zu löschen (das Verhalten bleibt überhaupt nicht mehr erhalten) oder ihn durch einen erneuten Versuch zum Schweigen zu bringen (wodurch der eigentliche Fehler vertuscht wird). Der richtige Weg ist die Quarantäne (den fragilen Test vorübergehend vom Hauptpaket trennen und ihn in einer separaten Liste verfolgen). Unter Quarantäne gestellte Tests verhindern nicht die Zusammenführung von Versionen, bleiben aber eine sichtbare Belastung und werden regelmäßig behoben. Der entscheidende Punkt ist: Quarantäne ist ein Wartezimmer, kein Mülleimer. Wenn die Quarantäneliste wächst, ist dies ein Alarm dafür, dass sich der Testzustand des Teams verschlechtert. KI kann Ihre Quarantäneliste regelmäßig überprüfen und nach Ursachenmustern gruppieren. Es ermöglicht kollektive Lösungen, indem es gemeinsame Ursachen aufdeckt, wie zum Beispiel „alle 6 Tests sind mit demselben gemeinsamen Testbenutzer verbunden“.

Tipp: Fügen Sie jedem Quarantänedatensatz einen „Eigentümer“ und ein „Datum der letzten Überprüfung“ hinzu. Verfallene Quarantäne wird zur dauerhaften Mülldeponie; Sprödigkeitstests bleiben dort für immer bestehen, weil es niemanden interessiert.

Regressionsstrategietabelle

Status

Strategie

Rolle der KI

kleine Korrektur

Betroffener Bereich + Rauchtest

Wählen Sie relevante Tests aus

neue Funktion

Zugehöriges Modul + Integration

Schlagen Sie einen neuen Regressionsfall vor

großer Refaktor

Vollständiges Regressionspaket

Analyse der Versorgungslücke

Vorveröffentlichung

Komplettpaket + Erkundung

Schätzung der Priorität und Dauer

Dringender Live-Fix

Fokussierter + kritischer Weg

Mindestsicherer Testsatz

Schwache Eingabeaufforderung / Starke Eingabeaufforderung

Schwach: „Dieser Test schlägt manchmal fehl, beheben Sie das Problem.“
Stark: „Dieser Test schlägt bei 3 von 10 Durchläufen fehl, der Code bleibt unverändert. Diagnostizieren Sie die Grundursache der Instabilität: könnte Timing/Rennen, Reihenfolgenabhängigkeit, gemeinsamer Zustand, externe Abhängigkeit oder Umgebungsunterschied sein. Zeigen Sie, welche Zeile im Test auf jede mögliche Ursache hinweist. Schlagen Sie eine dauerhafte Lösung vor. Schlagen Sie KEINE symptomunterdrückende Lösung wie „Wiederholung hinzufügen“ vor – wenn unvermeidbar, schreiben Sie einen klaren Grund. Test: [Code]. Fehlerpfad: [Protokoll].“

Leistungsstarke Eingabeaufforderung; lenkt die Diagnose auf die Grundursache und verbietet ausdrücklich die Unterdrückung von Symptomen.

Vier kopierbare Vorlagen

1) Fragile-Test-Diagnose:

Dieser Testcode besteht manchmal den Test und schlägt manchmal ohne Änderung fehl. Listen Sie die Grundursachenkandidaten auf (Rasse, Ordnungsabhängigkeit, gemeinsamer Zustand, externe Abhängigkeit, Uhr/Zufall, Umgebungsunterschied) und zeigen Sie im Test für jeden die Beweislinie auf. Schlagen Sie eine dauerhafte Lösung vor; Markieren Sie eine unterdrückende Lösung wie einen erneuten Versuch als letzten Ausweg und mit Begründung. Test: [Code] / Instabilitätsmuster: [wie oft in wie vielen Läufen]

2) Einen Regressionsfall vorschlagen:

Die folgende Änderung wurde vorgenommen: [Änderung/PR-Zusammenfassung]. Listen Sie AKTUELLE Verhaltensweisen auf, die diese Änderung beeinträchtigen würde, und schlagen Sie für jedes einen Regressionstestfall vor. Heben Sie insbesondere Bereiche mit Nebenwirkungen und gemeinsamen Abhängigkeiten hervor.

3) Bereinigung doppelter Tests:

Schauen Sie sich die Testsuite unten an. Gruppieren Sie doppelte oder überlappende Fälle, die dasselbe Verhalten testen. Schlagen Sie vor, welche ich behalten und welche ich für jede Gruppe kombinieren sollte. Warnen Sie, wenn die Gefahr eines Versicherungsverlustes besteht. Tests: [Liste/Code]

4) Auswahl des Testeffekts:

Die folgenden Dateien/Funktionen haben sich geändert: [Liste]. Wählen Sie aus der vorhandenen Testsuite die Tests aus und begründen Sie sie, die ich zuerst ausführen muss (diejenigen, die direkt/indirekt mit dem geänderten Code verknüpft sind). Hinweis: Erinnern Sie mich daran, dass ich weiterhin die vollständige Vorabversionssuite ausführen werde.

drei Mini-Koffer

Fall 1 – Echter Fehler, der durch Wiederholung vertuscht wird. Ein Team fügte 3 Wiederholungsversuche zu einem gelegentlichen verbleibenden Auszahlungstest hinzu; Der Test hieß jetzt immer „bestanden“. Bei der Anwendung der „fragilen Testdiagnose“ wurde festgestellt, dass die Instabilität auf eine echte Rennbedingung zurückzuführen war: Bei hoher Auslastung wurde die Zahlungsbestätigung manchmal doppelt verarbeitet. Monatelang vertuschte Retry einen Fehler, der live zu einem tatsächlichen Geldverlust hätte führen können. Grundursache behoben, Wiederholungsversuch entfernt.

Fall 2 – Paket schrumpfte, Geschwindigkeit erhöht. Eine Regressionssuite mit 1.400 Tests dauerte 55 Minuten. Bei der „Doppeltestreinigung“ erwiesen sich 380 Tests als Duplikate bzw. abgedeckt; zusammengeführt. Das Paket wurde auf 900 Tests reduziert, die Zeit wurde auf 34 Minuten reduziert, die Abdeckung wurde nicht messbar reduziert. Schnelleres Feedback ermutigte das Team, häufiger zu testen.

Fall 3 – Auftragsabhängigkeit. Ein Test würde lokal immer bestanden, in CI jedoch zufällig fehlschlagen. Die KI-Diagnose zeigte, dass der Test vom Benutzer abhing, der von einem anderen Test erstellt wurde. Bei CI scheiterte er, weil die Tests parallel bzw. in unterschiedlicher Reihenfolge ausgeführt wurden. Jeder Test wurde durchgeführt, um seine eigenen Daten zu ermitteln; Die Unentschlossenheit hat ein Ende.

Häufige Fehler

  • Den fragilen Test mit einem erneuten Versuch zum Schweigen bringen. Versuchen Sie es noch einmal, ohne nach der Grundursache zu suchen. den wahren Fehler vertuschen.
  • „Wieder feststecken“-Kultur. Rote Ergebnisse routinemäßig ignorieren; Eines Tages den wahren Fehler überspringen.
  • Das Paket wird überhaupt nicht beschnitten. Dadurch können sich doppelte Tests anhäufen und das Paket verlangsamen.
  • Abhängigkeit zwischen Tests. Tests basieren auf einer gemeinsamen Bedingung/Sequenz; Quelle der Unsicherheit.
  • Testen Sie nur den geänderten Teil und überspringen Sie das gesamte Paket. Verknüpfung vor der Veröffentlichung; Versteckte Nebenwirkungen entgehen.
  • Sich auf externe Abhängigkeit verlassen. Tests basierend auf dem tatsächlichen Netzwerk-/Takt-/Zufallswert; von Natur aus instabil.

Zusammenfassend

Regressionstests erkennen Änderungen, die zuvor funktionierende Funktionen beeinträchtigen; Aber wenn die Pakete wachsen, wird das Vertrauen durch Langsamkeit und spröde Tests untergraben. Die Hauptursachen für fragile Tests sind normalerweise Timing, Reihenfolgeabhängigkeit, gemeinsamer Status und externe Abhängigkeiten. KI ist ein leistungsstarkes Hilfsmittel bei der Diagnose, Reinigung und Testauswahl; Aber die Unterdrückung der Unentschlossenheit durch einen erneuten Versuch vertuscht echte Fehler. Finden Sie die Grundursache, machen Sie Tests unabhängig und deterministisch, bereinigen Sie das Paket regelmäßig und führen Sie das vollständige Paket vor der Veröffentlichung aus.

Anwendungsaufgabe

Wählen Sie einen Test aus Ihrem eigenen Projekt, von dem Sie wissen, dass er fragil ist (oder instabil erscheint). Extrahieren Sie Ursachenkandidaten und überprüfen Sie Beweislinien im Test mit der Vorlage „fragile Testdiagnose“. Identifizieren Sie die Grundursache und implementieren Sie eine dauerhafte Lösung ohne Wiederholung. Wählen Sie dann 10 Tests aus Ihrem Paket aus und finden Sie diejenigen, die mit der „Bereinigung doppelter Tests“ kombiniert werden können. Geben Sie an, wie viele Testinstabilitäten Sie von ihrer Grundursache gelöst haben und wie viele unnötige Fälle Sie aus der Suite entfernt haben.

Checkliste

  • [ ] Ich habe die Grundursache für den fragilen Test diagnostiziert; Ich habe das Symptom nicht unterdrückt.
  • [ ] Ich betrachtete einen erneuten Versuch als gerechtfertigten letzten Ausweg, nicht als Heilung.
  • [ ] Ich habe die Tests unabhängig und deterministisch gemacht (isoliert von externen Abhängigkeiten).
  • [ ] Ich habe doppelte/unnötige Tests aus der Regressionssuite entfernt.
  • [ ] Ich habe mich aufgrund der Änderung für einen Test entschieden, aber das vollständige Paket vor der Veröffentlichung ausgeführt.
  • [ ] Ich habe jeden Fehler ernst genommen, im Gegensatz zur „Stuck again, Pass“-Kultur.