Pendant de nombreuses années, j'ai eu la fausse impression que je n'avais pas assez de temps pour écrire des tests unitaires pour mon code. Lorsque j’écrivais des tests, ils étaient gonflés et constituaient des choses lourdes qui ne m’avaient incité à penser que je ne devrais écrire des tests unitaires que lorsque je savais que c’était nécessaire.
Ensuite, j'ai commencé à utiliser Test Driven Development et j'ai trouvé qu'il s'agissait d'une révélation complète. Je suis maintenant fermement convaincu que je n'ai pas le temps de ne pas écrire de tests unitaires .
D'après mon expérience, en développant en gardant à l'esprit les tests, vous obtenez des interfaces plus propres, des classes et des modules plus ciblés et généralement plus de code SOLID testable.
Chaque fois que je travaille avec du code existant qui ne comporte pas de tests unitaires et que je dois tester manuellement quelque chose, je continue de penser "cela serait tellement plus rapide si ce code comportait 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 "cela serait tellement plus facile s'il avait été écrit de manière découplée".
Comparer et opposer les deux stations expérimentales que je supporte. L'un existe depuis un certain temps et contient beaucoup de code hérité, tandis que l'autre est relativement nouveau.
Lors de l'ajout de fonctionnalités à l'ancien laboratoire, il est souvent nécessaire de passer au laboratoire et de passer de nombreuses heures à comprendre les implications de la fonctionnalité dont elles ont besoin et la manière dont je peux ajouter cette fonctionnalité sans affecter aucune des autres fonctionnalités. Le code n'est tout simplement pas configuré pour permettre les tests hors ligne, de sorte que tout doit être développé en ligne. Si j'essayais de développer hors ligne, je me retrouverais avec plus d' objets factices que ce qui serait raisonnable.
Dans les laboratoires les plus récents, je peux généralement ajouter des fonctionnalités en les développant hors ligne sur mon bureau, en ne dédaignant que les tâches immédiatement nécessaires, puis en ne passant que peu de temps au laboratoire, en réglant tous les problèmes non résolus. -ligne.
Pour plus de clarté, et depuis @ naught101 a demandé ...
J'ai tendance à travailler sur des logiciels de contrôle expérimental et d'acquisition de données, avec quelques analyses de données ad hoc. La combinaison de TDD et de contrôle de révision permet donc de documenter à la fois les modifications apportées au matériel de test sous-jacent et les exigences de collecte de données au fil du temps.
Même dans le cas de l’élaboration d’un code exploratoire, j’ai pu voir un avantage significatif à avoir des hypothèses codifiées, ainsi qu’à la possibilité de voir comment ces hypothèses évoluent dans le temps.