Supposons que l’on ait un programme relativement important (disons 900k SLOC en C #), tous commentés / documentés de manière approfondie, bien organisés et fonctionnant bien. L'ensemble de la base de code a été écrit par un seul développeur senior qui n'est plus avec la société. Tout le code est testable tel quel et IoC est utilisé partout - sauf pour une raison étrange, ils n’ont écrit aucun test unitaire. Désormais, votre société souhaite créer une branche pour le code et souhaite ajouter des tests unitaires afin de détecter le moment où des modifications annulent la fonctionnalité principale.
- L'ajout de tests est-il une bonne idée?
- Si oui, comment pourrait-on même commencer avec quelque chose comme ça?
MODIFIER
OK, donc je ne m'attendais pas à des réponses en faisant de bons arguments pour des conclusions opposées. La question est peut-être hors de portée de toute façon. J'ai également lu les "questions en double" et le consensus général est que "passer des tests, c'est bien" ... oui, mais pas très utile dans ce cas particulier.
Je ne pense pas que je suis le seul à envisager d’écrire des tests pour un système existant. Je vais garder des mesures sur combien de temps est passé et combien de fois les nouveaux tests détectent des problèmes (et combien de fois ils ne le font pas). Je reviendrai et le mettrai à jour dans un an environ avec mes résultats.
CONCLUSION
Il s'avère donc qu'il est fondamentalement impossible d'ajouter un test unitaire au code existant avec un semblant d'orthodoxie. Une fois que le code fonctionne, vous ne pouvez évidemment pas mettre vos tests à feu rouge ou vert, il n’est généralement pas clair quels comportements sont importants à tester, ni où commencer et surtout quand vous avez terminé. Vraiment même poser cette question passe à côté de l’essentiel de l’écriture des tests. Dans la majorité des cas, j’ai trouvé qu’il était en fait plus facile de réécrire le code avec TDD que de déchiffrer les fonctions prévues et d’ajouter rétroactivement des tests unitaires. Lors de la résolution d'un problème ou de l'ajout d'une nouvelle fonctionnalité, l'histoire est différente et je pense que le moment est venu d'ajouter des tests unitaires (comme certains l'ont souligné ci-dessous). Finalement, la plupart du code est réécrit, souvent plus tôt que prévu, en adoptant cette approche.