Mon expérience de la transition
Pendant de nombreuses années, je pensais à tort que je n'avais pas assez de temps pour écrire des tests unitaires pour mon code. Quand j'ai fait des tests, ils étaient gonflés, des choses lourdes qui ne m'ont encouragé à penser que je ne devrais jamais écrire des tests unitaires que lorsque je savais qu'ils étaient nécessaires.
Récemment, j'ai été encouragé à utiliser le développement piloté par les tests et j'ai trouvé que c'était une révélation complète. Je suis maintenant fermement convaincu que je n'ai pas le temps non pas écrire de tests unitaires .
D'après mon expérience, en développant en gardant à l'esprit les tests, vous vous retrouvez avec des interfaces plus propres, des classes et des modules plus ciblés et généralement plus SOLIDES code et testable.
Chaque fois que je travaille avec du code hérité qui n'a pas de tests unitaires et que je dois tester manuellement quelque chose, je continue de penser "ce serait tellement plus rapide si ce code avait déjà des tests unitaires". Chaque fois que je dois essayer d'ajouter une fonctionnalité de test unitaire au code avec un couplage élevé, je continue de penser "ce serait tellement plus facile s'il avait été écrit de manière découplée".
Comparaison et contraste des deux stations expérimentales que je soutiens. L'un existe depuis un certain temps et a beaucoup de code hérité, tandis que l'autre est relativement nouveau.
Lors de l'ajout de fonctionnalités à l'ancien laboratoire, il s'agit souvent de se rendre au laboratoire et de passer de nombreuses heures à travailler sur les implications des fonctionnalités dont ils ont besoin et comment je peux ajouter cette fonctionnalité sans affecter aucune des autres fonctionnalités. Le code n'est tout simplement pas configuré pour permettre des tests hors ligne, donc presque tout doit être développé en ligne. Si j'essayais de développer hors ligne, je me retrouverais avec plus de faux objets qu'il ne serait raisonnable.
Dans le laboratoire plus récent, je peux généralement ajouter des fonctionnalités en les développant hors ligne sur mon bureau, en se moquant uniquement des choses qui sont immédiatement nécessaires, puis en ne passant que peu de temps dans le laboratoire, en résolvant les problèmes restants non résolus -ligne.
Mon conseil
Il semble que vous ayez bien commencé, chaque fois que vous allez apporter de grands changements à votre flux de travail de développement, vous devez vous assurer que tout le monde est impliqué dans la prise de cette décision, et idéalement que la plupart des gens y ont adhéré. D'après votre question, il semble que vous ayez bien compris. Si les gens ne sont pas enthousiastes à l'idée, elle est vouée à l'échec ou à générer de la mauvaise volonté.
À moins que vous ne puissiez présenter une analyse de rentabilisation convaincante, je ne recommanderais pas une implémentation de base des tests unitaires et des spécifications pour l'ensemble de votre système. Comme je l'ai mentionné ci-dessus, si un système n'est pas conçu avec des tests à l'esprit, il peut être très difficile d'écrire des tests automatisés pour lui.
Au lieu de cela, je recommanderais de commencer petit et d'utiliser la règle du boy-scout :
Laissez toujours le terrain de camping plus propre que vous ne l'avez trouvé.
Si, pendant que vous implémentez quelque chose sur cette base de code, vous pouvez identifier les tests spécifiques requis pour tester le comportement existant et la transition de l'ancien comportement au nouveau, vous avez à la fois documenté le changement de spécification et commencé à implémenter des tests d'unités pour votre système.
Les modules que vous ne touchez pas ne reçoivent pas de tests unitaires, mais si vous ne les touchez pas, c'est probablement parce qu'ils sont déjà testés en profondeur et ne nécessitent aucune modification, ou qu'ils ne sont jamais utilisés.
Ce que vous voulez éviter, c'est gaspiller une charge entière de tests d'écriture d'efforts de développeur qui ne seront jamais nécessaires ( YAGNI fonctionne aussi bien pour le code de test que pour le code de production * 8 '), ne sera plus jamais utilisé et démoralisera les gens en pensant que les tests sont inutiles après tout.
Sommaire
Commencez petit, renforcez progressivement la confiance dans les tests et gagnez de la valeur commerciale en développant des tests quand et où ils profitent le plus à votre équipe.