Sollte ich einen Test schreiben, um zu beweisen, dass das Löschen von Code einen Fehler behebt?

14

Gelegentlich stoße ich auf die Situation, dass zur Behebung eines Fehlers ein Codeabschnitt gelöscht werden muss. Der TDD-Purist würde (ich nehme an) befürworten, einen fehlerhaften Test zu schreiben, den Code zu löschen und dann den Testdurchlauf zu beobachten.

Nun, es scheint wirklich seltsam, einen Test zu haben, der behauptet, dass ein Teil des Codes entfernt wurde. Sicher, ich nehme an, es würde sicherstellen, dass sich niemand in die Quellcodeverwaltung eingegraben und den Code wieder eingefügt hat, aber ist es das wert? Wenn es sich lohnt, scheint es sicherlich weniger wert zu sein, als einen Test für den hinzugefügten Code zu schreiben , oder?

jhewlett
quelle
8
Ich denke, jeder Regressionstest ist nützlich, unabhängig davon, wie der Fehler behoben wurde
Ismail Badawi
1
Der Test bestätigt nicht, dass der Code entfernt wurde - der Test bestätigt, dass der Fehler behoben ist ...
user253751

Antworten:

50

Sie sehen es falsch. Der Test bestätigt nicht, dass der Code entfernt wurde. Der Test funktioniert assert eine bestimmte Funktionalität.

Dem Test ist es egal, wie viel Code zum Bestehen erforderlich ist, und er erkennt auch nicht, dass Sie Code entfernt haben. Der Wert eines solchen Tests ist derselbe wie bei jedem anderen Test, den Sie aufgrund eines Fehlers erstellen: Sie haben Vertrauen in das Fehlen des Fehlers, wenn der Test bestanden wird, und die Integration des Tests in den Erstellungsprozess stellt sicher, dass der Fehler behoben wird höchstwahrscheinlich nicht wieder eingeführt werden.

Eine weitere Möglichkeit, es aus TDD-Sicht zu betrachten, ist die folgende: Wenn Sie wissen, dass das Löschen des Codes den Fehler behebt und Sie sich dann fragen, ob Sie einen Test schreiben sollen, haben Sie TDD bereits falsch gemacht. Wenn Sie mit der Arbeit an dem Fehler beginnen, sollten Sie zuerst den Test schreiben, der sicherstellt, dass der Fehler vorhanden ist, indem er fehlschlägt. Erst danach beheben Sie den eigentlichen Fehler - der möglicherweise das Entfernen von Code erfordert oder nicht - und führen den Test durch. Die Frage, die Sie stellen, stellt sich nicht einmal auf diese Weise.

Frank
quelle
3
+1, aber ich kann mir die folgende Situation vorstellen: Der entfernte Code enthielt eine absurde Funktionalität, die jemand hinzufügte, der die Problemdomäne nicht richtig verstand. Jetzt sieht ein anderer Entwickler während einer Codeüberprüfung, dass der ganze Teil wirklich Unsinn ist und der Code entfernt wird. Viele Tests für ein solches Unsinnsverhalten können Ihre Testsuite aufblähen lassen.
Doc Brown
2
Offensichtlich hat die entfernte Funktionalität einige Ein- / Ausgaben falsch gehandhabt. Es ist klar, dass jemand im Weiteren das Problem auf die gleiche Weise missverstehen könnte. Wenn Sie Angst haben, die Testsuite könnte aufgebläht sein, dann ist TDD für Sie nicht geeignet. Was ist ein aufgeblähter Testanzug?
Dorus
3
@DocBrown: Wenn sie TDD machen, dann muss es einen Test geben, der diese absurde Funktionalität erfordert , sonst hätten sie diesen Code gar nicht erst schreiben dürfen! Denken Sie daran, dass Sie nur die absolute Mindestmenge an Code schreiben dürfen, um den Test zu bestehen. Wenn es keinen solchen Test gibt, sollte der Code niemals geschrieben worden sein und kann einfach gelöscht werden. Wenn es ist ein Test , dass Kräfte, die absurde Verhalten, dann sollte dieser Test entfernt werden, und jetzt sind wir auf dem gleichen Fall , den ich zuvor beschrieben: Der Test gegangen ist, löschen Sie den Code.
Jörg W Mittag
In beiden Fällen fügen Sie der Testsuite niemals Tests hinzu, und im zweiten Fall entfernen Sie sogar einen. Wenn sich jedoch herausstellt, dass der Test tatsächlich Sinn macht, dann war die Funktionalität doch nicht so absurd.
Jörg W Mittag