Dois-je écrire un test pour prouver que la suppression de code corrige un bogue?

14

Parfois, je vais rencontrer la situation où la correction d'un bogue nécessite que je supprime une section de code. Le puriste TDD recommanderait (je suppose) d'écrire un test qui échoue, de supprimer le code, puis de regarder le test réussir.

Maintenant, il semble vraiment étrange d'avoir un test affirmant que du code a été supprimé. Bien sûr, je suppose que cela garantirait que personne ne creuserait dans le contrôle des sources et ne remettrait ce code, mais est-ce que ça vaut le coup? Si cela en vaut la peine, cela semble certainement moins utile que d'écrire un test pour le code qui a été ajouté , non?

jhewlett
la source
8
Je pense que tout test de régression est utile, quelle que soit la façon dont le bogue a été corrigé
Ismail Badawi
1
Le test n'affirme pas que le code a été supprimé - le test affirme que le bogue est corrigé ...
user253751

Réponses:

50

Vous le regardez dans le mauvais sens. Le test n'affirme pas que le code a été supprimé. Le test fait valoir une certaine fonctionnalité.

Le test ne se soucie pas de la quantité de code nécessaire pour le faire passer, ni ne se rend compte que vous avez supprimé du code. La valeur d'un tel test est la même que tout autre test que vous créez en raison d'un bogue: vous avez confiance en l'absence du bogue lorsque le test réussit et l'intégration du test dans le processus de construction vous assure que le bogue sera probablement pas réintroduit.

Encore une autre façon de le voir du point de vue TDD est la suivante: lorsque vous savez que la suppression du code corrige le bogue et que vous vous demandez ensuite si vous devez écrire un test, vous avez déjà mal fait TDD. Une fois que vous avez commencé à travailler sur le bogue, vous devez d' abord écrire le test qui garantit la présence du bogue en échouant. Ce n'est qu'après que vous corrigez le bogue réel - qui peut nécessiter la suppression de code ou non - et faites passer le test. La question que vous posez ne se pose même pas de cette façon.

Franc
la source
3
+1, mais je peux imaginer la situation suivante: le code supprimé contenait des fonctionnalités absurdes ajoutées par quelqu'un qui ne comprenait pas correctement le domaine problématique. Maintenant, lors d'une révision de code, un autre développeur voit que toute la partie est vraiment absurde et le code sera supprimé. Avoir beaucoup de tests pour un tel comportement absurde peut alourdir votre suite de tests.
Doc Brown
2
De toute évidence, la fonctionnalité supprimée a mal géré certaines entrées / sorties. Il est clair que quelqu'un d'autre pourrait mal comprendre le problème de la même manière. Si vous avez peur du ballonnement de la suite de tests, je ne pense pas que TDD soit fait pour vous. Qu'est-ce que le ballonnet de test de toute façon?
Dorus
3
@DocBrown: S'ils font du TDD, alors il doit y avoir un test qui nécessite cette fonctionnalité absurde, sinon ils n'auraient même pas été autorisés à écrire ce code en premier lieu! N'oubliez pas que vous n'êtes autorisé à écrire que la quantité minimale absolue de code pour réussir le test. S'il n'y a pas un tel test, alors le code n'aurait jamais dû être écrit en premier lieu et il peut simplement être supprimé. S'il est un test que les forces que le comportement absurde, alors ce test doivent être supprimés, et maintenant nous sommes en même cas , je décrit précédemment: le test est parti, supprimez le code.
Jörg W Mittag
Dans les deux cas, vous n'ajoutez jamais de test à la suite de tests et dans le second cas, vous en supprimez même un. Cependant, s'il s'avère que le test a du sens, eh bien, la fonctionnalité n'était pas si absurde après tout.
Jörg W Mittag