Combien de temps devrions-nous généralement consacrer à l'écriture de tests unitaires pour une nouvelle fonctionnalité ou la correction de bogues?

9

Lorsque je dois implémenter une nouvelle fonctionnalité ou corriger un bug, j'essaie généralement de recréer la situation avec un test. Je passe parfois environ 3 heures à trouver des appareils et à écrire le test. L'implémentation des fonctionnalités ou la correction des bogues prend moins d'une heure.

Quelqu'un d'autre passe-t-il au moins 3 fois plus de temps à écrire un test que de mettre en œuvre une fonctionnalité ou de corriger un bogue? Quel est le rapport acceptable entre le temps passé à écrire le test et le code?

Thierry Lam
la source
2
Pensez-y de cette façon: la correction du bogue prendrait-elle moins d'une heure si vous n'aviez pas de test pour confirmer qu'il existait, encore moins était-il corrigé?
Michael K
2
Réponse au titre de la question: aussi longtemps qu'il le faudra.
Marcelo
3
Je pense que l'obéissance servile aux principes du TDD, indépendamment du coût ou de la valeur commerciale, est toujours la bonne réponse.
Jeremy
Comment gérez-vous le cas où votre gestionnaire souhaite que vous mettiez le correctif en direct dès que possible et ne peut pas attendre un jour supplémentaire pour tester pleinement la mise en œuvre?
Thierry Lam
2
Habituellement, j'explique le coût de ne pas faire le test. Autrement dit, je peux envoyer le correctif maintenant, mais si nous n'écrivons pas le test, nous devrons refaire le tout plus tard. Parfois, ils acceptent ce coût futur, mais nous écrivons généralement les tests.
Christopher Bibbs

Réponses:

12

Cela varie en fonction de la complexité du bogue ou de la fonctionnalité. Je me souviens d'un projet qui avait une fois une estimation de développement de 1,5 semaine ... et une estimation de test de 3 mois. Le changement de code était modeste, une poignée de lignes ici et là, mais il a eu un impact sur un certain nombre de composants d'un système d'assurance de plusieurs manières, il a donc fallu le tester très soigneusement. Une autre fois, il y a eu un bug impliquant une parenthèse au mauvais endroit. Il a fallu 2 heures pour le trouver, 2 secondes pour le réparer, mais environ une semaine pour tester des dizaines de scénarios qui pourraient avoir été affectés par le changement de logique.

En général, je ne m'inquiète pas du rapport entre le temps passé à coder et le temps passé à tester, car il n'y a tout simplement aucun moyen d'être précis. Je trouve que dans certains projets, un rapport relatif au projet apparaît qui est généralement standard (par rapport au projet), mais même alors, cela peut changer plus tard.

Passez autant de temps que nécessaire pour dire avec confiance que le code fonctionne correctement.

FrustratedWithFormsDesigner
la source
6

Que diriez-vous de passer suffisamment de temps à écrire les tests jusqu'à ce que vous ayez montré que la fonctionnalité fonctionne comme prévu ou que le bogue a été correctement corrigé.

Chaque situation sera différente; il ne peut pas y avoir une sorte de ratio. Certains tests prendront un dixième du temps de mise en œuvre, d'autres prendront des centaines de fois plus de temps.

edA-qa mort-ora-y
la source
Telle est la vraie réponse.
DJClayworth
4

J'ai fait une fois une étude après avoir introduit des tests unitaires dans un projet. Résultat: le temps passé à rédiger les tests représentait à nouveau environ 40% du temps consacré à la mise en œuvre. Mais nous ne visions pas une couverture complète là-bas, et c'était un projet bien établi avec une structure et des conventions solides.

Michael Borgwardt
la source
0

Comptez-vous bien? Afin de faire une comptabilité précise du temps que vous passez sur les tests, vous devez écrire le code sans le test.

S'il vous a vraiment fallu trois heures pour écrire le test et une pour écrire du code pour qu'il passe, vous pouvez constater qu'il faut plus de 5 heures pour corriger le même bogue sans écrire de tests.

Oui, je passe souvent beaucoup plus de temps sur le test que le code correctif réel.

Edward Strange
la source