Wann ist es in Ordnung, "abgeschlossene" Gerätetests zu ändern?

8

Ich habe meine ersten kleinen Schritte in Unit Testing gemacht und aufgrund eines besseren Verständnisses der Domäne eine Änderung an einem Domänenmodell vorgenommen, das einen Komponententest durchbrochen hat. Das brachte die Frage auf:

Wann ist es zulässig, zuvor arbeitende Komponententests zu ändern?

Ich denke, mir fehlt ein wichtiger Aspekt des Komponententests, wenn ich diese Frage stellen muss ...

    
I Clark 06.05.2009, 07:28
quelle

6 Antworten

8

Bei "richtiger" TDD ändern Sie zuerst den Test, dann ändern Sie den Code.

Sie haben also nie einen kaputten Test, sondern nur kaputten Code. Sie sollten immer danach streben, in einer Position zu sein, in der die Tests der definitive Ausdruck der korrekten Funktionalität sind und als solche a priori korrekt sind.

    
PaulJWilliams 06.05.2009, 07:33
quelle
6

Der Punkt eines jeden einzelnen Komponententests ist nicht, dass er niemals bricht, sondern dass er so lange funktioniert, wie auch die Funktion, für die er testet, funktioniert. Auf diese Weise führt eine versehentliche Änderung an einer getesteten Funktion zu einem fehlgeschlagenen Test, den Sie herausfinden, und nicht zu Ihrem Endbenutzer.

Wenn die Funktion absichtlich geändert wird, sollten Sie erwarten, dass einige Tests unterbrochen werden. Wenn Sie dies nicht tun, haben Sie das Feature in der Testsuite nicht ausreichend abgedeckt.

    
RBerteig 06.05.2009 07:35
quelle
5

Wenn Sie eine Änderung vornehmen, die Tests unterbricht:

1) Finden Sie zuerst heraus, ob der Test nun unterbrochen ist oder ob Ihre Änderung einen Test durchbrochen hat, den sie nicht haben sollte.

2). Wenn es ersteres ist, repariere den Test. Sonst behebe deine Änderung.

    
Mitch Wheat 06.05.2009 07:31
quelle
2

Wenn sich die Anforderungen ändern. Unabhängig davon, ob Sie Ihren Code ändern und dann sehen, welche Tests aus welchen Gründen unterbrochen werden (wie Mitch vorgeschlagen hat) oder Ihre Tests ändern und dann Ihren Code ändern (wie auf Visage angesprochen), werden sich die Tests nur ändern, wenn die Funktionalität angeblich etwas anderes machen.

    
Smashery 06.05.2009 07:38
quelle
2

Jedes Mal, wenn Sie müssen.

  • Tests sollten geändert werden, wenn sie ungenau werden oder den Spezifikationen nicht mehr folgen.
  • Tests sollten entfernt werden, wenn sie irrelevant geworden sind.

Der Punkt ist, Ihre Tests sollten ein genaues Bild davon sein, wie Ihre Software funktionieren soll. Zugegeben, das wird ein bisschen schwierig zu pflegen sein, und in der Tat ist dies einer der größeren Abzweigungen von TDD, nach den Tests-zuerst-Programmierung.

    
Jon Limjap 06.05.2009 07:39
quelle
1

Tests sind die Spezifikation des Verhaltens des Programms. Sie ändern sie, wenn Sie die Spezifikationen ändern müssen, weil sie die Spezifikationen sind. Einige, die mir in den Sinn kommen ...

  • Wenn sich die Anforderungen für den Code geändert haben und der Test nicht mit dem neuen Verhalten übereinstimmt, sollten Sie sie aktualisieren.
  • Wenn einige Anforderungen veraltet sind, sollten die Tests, die dieses Verhalten angeben, entfernt werden.

Die Hauptqualität, die der Testcode haben muss, ist die Lesbarkeit. Daher sollten Sie die Tests regelmäßig ändern wegen ...

  • Wenn ein Test schwer zu lesen ist und nicht jede Absicht des Programmierers aufdeckt, sollte er überarbeitet werden, um seine Lesbarkeit zu verbessern.

Dann gibt es auch Fälle, in denen die Tests unterbrochen sind, zum Beispiel brüchige Tests für gleichzeitigen Code, die meistens passieren, aber immer wieder fehlschlagen, obwohl der Code korrekt ist. In solchen Fällen sollten die Tests so festgelegt werden, dass sie wiederholbarer sind (es kann erforderlich sein, den Code zu ändern, um leichter testbar zu sein - das Beste ist, Parallelität mit geeigneten Entwurfsmustern zu vermeiden / einzuschränken).

    
Esko Luontola 06.05.2009 08:38
quelle

Tags und Links