Dans mon projet actuel (un jeu, en C ++), j'ai décidé d'utiliser Test Driven Development 100% pendant le développement.
En termes de qualité de code, cela a été formidable. Mon code n'a jamais été aussi bien conçu ni aussi sans bug. Je ne grince pas quand je lis le code que j'ai écrit il y a un an au début du projet et j'ai maintenant beaucoup mieux compris comment structurer les choses, non seulement pour être plus facilement testable, mais pour être plus simple à implémenter et à utiliser .
Cependant ... cela fait un an que j'ai commencé le projet. Certes, je ne peux y travailler que pendant mon temps libre, mais le TDD me ralentit encore considérablement par rapport à ce que je suis habitué. J'ai lu que la vitesse de développement plus lente s'améliorait avec le temps, et je pense vraiment aux tests beaucoup plus facilement qu'auparavant, mais je le fais depuis un an et je travaille toujours au pas de l'escargot.
Chaque fois que je pense à la prochaine étape qui nécessite du travail, je dois m'arrêter à chaque fois et réfléchir à la manière dont j'écrirais un test pour lui permettre d'écrire le code lui-même. Je suis parfois bloqué pendant des heures, sachant exactement quel code je veux écrire, mais ne sachant pas le décomposer assez finement pour le couvrir complètement avec des tests. D'autres fois, j'imagine rapidement une douzaine de tests et passe une heure à rédiger des tests pour couvrir un minuscule morceau de code qui, autrement, aurait pris quelques minutes à écrire.
Ou, après avoir terminé le 50ème test pour couvrir une entité particulière du jeu et tous les aspects de sa création et de son utilisation, je regarde ma liste de tâches à faire et vois la prochaine entité à coder et grincant de peur à l'idée d'écrire 50 autres tests similaires pour le mettre en œuvre.
Nous en sommes arrivés au point où, considérant les progrès de l’année écoulée, j’envisage d’abandonner le TDD dans le but de "terminer ce foutu projet". Cependant, abandonner la qualité du code qui l'accompagne n'est pas quelque chose que je suis impatient de voir. Je crains que si j'arrête d'écrire des tests, alors je ne prendrai pas l'habitude de rendre le code aussi modulaire et testable.
Suis-je peut-être en train de faire quelque chose de mal pour être toujours aussi lent à ça? Existe-t-il des alternatives qui accélèrent la productivité sans perdre complètement les avantages? TAD? Moins de couverture de test? Comment les autres personnes survivent-elles au TDD sans nuire à la productivité et à la motivation?