Les tests de régression
Tout est question de test de régression .
Imaginez le prochain développeur qui examine votre méthode et remarque que vous utilisez des nombres magiques. On lui a dit que les nombres magiques sont diaboliques, il a donc créé deux constantes, une pour le numéro deux, l'autre pour le numéro trois - il n'y a rien de mal à faire ce changement; ce n'est pas comme s'il modifiait votre implémentation déjà correcte.
Etre distrait, il inverse deux constantes.
Il valide le code et tout semble bien fonctionner, car aucun test de régression n'est exécuté après chaque validation.
Un jour (peut-être des semaines plus tard), quelque chose se casse ailleurs. Et par ailleurs, je veux dire dans l'emplacement complètement opposé de la base de code, ce qui semble n'avoir rien à voir avec la polynominal
fonction. Des heures de débogage douloureux mènent au coupable. Pendant ce temps, l'application continue d'échouer en production, causant de nombreux problèmes à vos clients.
Garder les tests originaux que vous avez écrits pourrait éviter une telle douleur. Le développeur distrait commettrait le code et verrait presque immédiatement qu'il avait cassé quelque chose; un tel code n'atteindra même pas la production. Les tests unitaires seront en outre très précis sur l'emplacement de l'erreur . Le résoudre ne serait pas difficile.
Un effet secondaire ...
En fait, la plupart des refactorisations sont fortement basées sur des tests de régression. Faites un petit changement. Tester. Si ça passe, tout va bien.
L'effet secondaire est que si vous n'avez pas de test, pratiquement toute refactorisation devient un risque énorme de casser le code. Étant donné le nombre de cas, il est déjà difficile d’expliquer à la direction que la refactorisation doit être effectuée. Il serait encore plus difficile de le faire après que vos précédentes tentatives de refactoring aient introduit plusieurs bogues.
En proposant une suite complète de tests, vous encouragez la refactorisation et, par conséquent, un code plus propre. Sans risque, il devient très tentant de refactoriser davantage, sur une base régulière.
Changements dans les exigences
Un autre aspect essentiel est que les exigences changent. Vous serez peut-être invité à gérer des nombres complexes et vous devrez soudainement effectuer une recherche dans votre journal de contrôle de version pour rechercher les tests précédents, les restaurer et commencer à ajouter de nouveaux tests.
Pourquoi tout ce tracas? Pourquoi supprimer des tests pour les ajouter plus tard? Vous auriez pu les garder en premier lieu.