Il semble que l'écriture de tests représente un travail supplémentaire, donne aux gens une béquille quand ils écrivent le code réel, et pourrait ne pas être efficace très souvent.
Les tests unitaires ont de la valeur en tant que béquille. Il soutient vos efforts de développement en vous permettant de modifier votre implémentation sans craindre que votre application cesse de fonctionner correctement. Les tests unitaires sont aussi beaucoup plus qu'une simple béquille, car ils vous fournissent un outil avec lequel vous pouvez valider que votre implémentation répond aux exigences.
Tous les tests, qu'il s'agisse de tests unitaires, de tests d'acceptation, de tests d'intégration, etc., sont aussi efficaces que ceux qui les utilisent. Si vous vous approchez de votre travail de manière bâclée, vos tests seront lâches et votre mise en œuvre rencontrera des problèmes. Alors pourquoi s'embêter? Vous vous donnez la peine d'essayer parce que vous devez vous prouver, à vous et à vos clients, que votre logiciel fonctionne et que vous ne rencontrez aucun problème pouvant empêcher son utilisation. Certes, les tests sont un travail supplémentaire, mais la façon dont vous allez les tester déterminera les efforts que vous devrez déployer pour résoudre les bogues après leur publication et les efforts que votre code nécessitera pour être modifiés et conservés.
Je comprends comment fonctionnent les tests unitaires et comment les écrire, mais est-ce que quelqu'un peut affirmer que c'est vraiment une bonne idée et que cela en vaut la peine?
TDD, et vraiment toute méthode qui vous oblige à écrire des tests avant de coder, adopte l’approche que vous avez mise tôt dans l’effort, comme un acompte sur une dette technique future. Au fur et à mesure que vous avancez dans le projet, tout ce qui est manqué ou mal mis en œuvre entraînera une dette plus technique sous la forme de difficultés croissantes de maintenance, ce qui affectera directement les coûts futurs et les besoins en ressources. Les tests préalables garantissent non seulement que vous avez fait un effort pour traiter la dette technique future, mais également que vous codez vos exigences de manière à ce qu'elles puissent être vérifiées simplement en exécutant votre code. Tester d'abord vous donne également la possibilité de valider votre compréhension du domaine du problème avant de vous engager à résoudre le problème en code, et de valider vos efforts d'implémentation.
Il s’agit vraiment de tenter de maximiser la valeur commerciale de votre code. Un code en grande partie non testé et difficile à maintenir est généralement bon marché et rapide à créer, et très coûteux à maintenir tout au long de la vie du produit après sa publication. Le code qui a été testé de manière approfondie au niveau de l’unité est généralement plus coûteux à créer, mais son coût de maintenance est relativement peu élevé tout au long de la durée de vie du produit après sa publication.
En outre, y a-t-il quelque chose qui rend le TDD particulièrement bon pour SCRUM?
TDD n'est pas particulièrement bon pour une méthodologie particulière. C'est simplement un outil. Une pratique que vous pouvez intégrer à vos processus de développement afin de vous aider à atteindre vos objectifs spécifiques. Donc, pour répondre à votre question, TDD est complémentaire à votre méthode, qu’il s’agisse de SCRUM ou de toute autre approche.