Tests sind wertvoll. Zumindest berichten sie, dass jemand überlegte, Zeit damit zu verbringen, sie zu schreiben. Vermutlich hatten sie einmal einen gewissen Wert für jemanden. Mit etwas Glück werden sie eine vollständige Auflistung aller Funktionen und Fehler enthalten, an denen das Team jemals gearbeitet hat - obwohl sie möglicherweise auch nur eine Möglichkeit waren, eine willkürliche Testabdeckungszahl zu ermitteln, ohne sorgfältig durchdacht zu werden. Bis Sie sie anschauen, werden Sie nicht wissen, was hier der Fall ist.
Wenn die meisten Ihrer Tests die meiste Zeit bestehen, beißen Sie einfach in die Kugel und investieren Sie Zeit, um herauszufinden, was die wenigen fehlgeschlagenen Tests versuchten, und um sie zu beheben oder zu verbessern, damit die Arbeit beim nächsten Mal einfacher wird. In diesem Fall fahren Sie mit Bestimmen der Absicht für jeden Testabschnitt fort , um Ratschläge zu erhalten, wie mit einer kleinen Anzahl von fehlgeschlagenen Tests verfahren werden kann.
Auf der anderen Seite könnten Sie jetzt mit einem roten Build konfrontiert sein, und Hunderte oder sogar Tausende von Tests, die eine Weile nicht bestanden haben, und Jenkins war lange nicht mehr grün. Zu diesem Zeitpunkt ist der Jenkins-Build-Status unbrauchbar geworden und ein Schlüsselindikator für Probleme beim Einchecken funktioniert nicht mehr. Sie müssen dies beheben, können es sich aber nicht leisten, alle Vorwärtsbewegungen zu stoppen, während Sie das Chaos in Ihrem Wohnzimmer aufräumen.
Damit Sie bei der Durchführung der erforderlichen Archäologie auf Nummer sicher gehen und feststellen können, welcher Wert aus den fehlgeschlagenen Tests wiederhergestellt werden kann, empfehle ich die folgenden Schritte:
Deaktivieren Sie die fehlgeschlagenen Tests vorübergehend.
Es gibt verschiedene Möglichkeiten, wie Sie dies tun können, abhängig von Ihrer Umgebung, die Sie nicht eindeutig beschreiben. Daher kann ich keine bestimmte empfehlen.
Einige Frameworks unterstützen die Vorstellung von erwarteten Fehlern. Wenn dies bei Ihnen der Fall ist, ist dies großartig, da Sie einen Countdown sehen, wie viele Tests in dieser Kategorie noch vorhanden sind, und Sie werden sogar informiert, wenn einige davon unerwartet verlaufen.
Einige Frameworks unterstützen Testgruppen und ermöglichen es Ihnen, Hudson anzuweisen, nur einige der Tests auszuführen oder eine Gruppe der Tests zu überspringen. Dies bedeutet, dass Sie die Testgruppe gelegentlich manuell ausführen können, um festzustellen, ob sie jetzt bestanden hat.
In einigen Frameworks können Sie einzelne zu ignorierende Tests mit Anmerkungen versehen oder auf andere Weise als ignoriert markieren. In diesem Fall ist es schwieriger, sie als Gruppe zu führen, aber es hindert sie daran, Sie abzulenken.
Sie können die Tests in einen Quellbaum verschieben, der normalerweise nicht im Build enthalten ist.
Im Extremfall können Sie den Code aus dem HEAD des Versionskontrollsystems löschen. Dadurch wird es jedoch schwieriger, zu erkennen, wann die dritte Phase abgeschlossen ist.
Das Ziel ist es, Jenkins so schnell wie möglich dazu zu bringen, grün zu werden, damit Sie sich so schnell wie möglich in die richtige Richtung bewegen können.
Halten Sie die Tests aktuell.
Lösen Sie den Vorgang aus, um neue Tests hinzuzufügen, während Sie Code hinzufügen oder ändern, und verpflichten Sie sich, alle bestandenen Tests bestehen zu lassen.
Tests können aus einer Vielzahl von Gründen fehlschlagen, einschließlich der Tatsache, dass es sich anfangs nicht um gut geschriebene Tests handelte. Aber sobald Sie Jenkins grün bekommen, ist es wirklich wichtig, dass es so bleibt.
Gewöhnen Sie sich daran, gute Tests zu schreiben, und machen Sie es zu einer großen Sache, wenn Tests fehlschlagen.
Bestimmen Sie die Absicht für jeden Test.
Führen Sie die deaktivierten Tests nacheinander durch. Beginnen Sie mit den Modulen, die sich auf die Module auswirken, die Sie am häufigsten ändern. Bestimmen Sie die Absicht des Tests und den Grund für den Fehler.
Testet es eine Funktion, die absichtlich aus der Codebasis entfernt wurde? Dann kannst du es wohl löschen.
Fängt es einen Bug, den noch niemand bemerkt hat? Setzen Sie den Test wieder ein und beheben Sie den Fehler.
Schlägt dies fehl, weil ungerechtfertigte Annahmen getroffen wurden (z. B. wurde angenommen, dass der Text der Schaltfläche immer in Englisch ist, aber Sie haben Ihre Anwendung jetzt für mehrere Sprachen lokalisiert)? Finden Sie dann heraus, wie Sie den Test auf eine einzelne Sache konzentrieren und ihn nach besten Kräften von nicht damit zusammenhängenden Änderungen isolieren können.
Verbreitet sich der Test über die gesamte Anwendung und stellt er einen Systemtest dar? Entfernen Sie es dann aus Ihrer Haupt-Jenkins-Testsuite und fügen Sie es der Regressionssuite hinzu, die seltener ausgeführt wird.
Hat sich die Architektur der App bis zur Unkenntlichkeit verändert, sodass der Test nichts mehr nützt? Lösche es.
Wurde der Test hinzugefügt, um die Statistik der Codeabdeckung künstlich zu erhöhen, aber er bestätigt lediglich, dass der Code korrekt kompiliert wurde und nicht in eine Endlosschleife übergeht? Oder bestätigt der Test einfach, dass Ihr ausgewähltes Spott-Framework die Ergebnisse zurückgibt, denen Sie es gerade mitgeteilt haben? Lösche es.
Infolgedessen werden einige Tests bestehen bleiben, einige werden modifiziert, einige werden in mehrere unabhängige, mundgerechte Stücke aufgeteilt und einige werden entfernt. Solange Sie mit den neuen Anforderungen noch Fortschritte machen, müssen Sie ein wenig Zeit für den Umgang mit solchen technischen Schulden einplanen.