• Un nouveau développement est lancé. La volonté de "bien faire les choses" pousse à commencer par écrire les tests unitaires. => les TDD sont une bonne idée
  • Des évolutions sont demandées et le donneur d'ordre est pressé. Il n'a pas envie de "perdre du temps" avec ces tests unitaires dont on lui rabat les oreilles. De son point de vue, ce n'est pas directement productif, donc c'est inutile. => les TDD sont une fausse bonne idée
  • Ensuite, j'ai vu 2 scénarii possibles :
    • Un bug apparaît. Pour accélérer le débuggage, on ressort les tests unitaires qui avaient été mis de côté. Et là, bingo, un des tests remonte une erreur, et on trouve très vite un bug de régression qui n'aurait pas été simple à trouver autrement. => les TDD sont une vraie fausse bonne idée
    • Des bugs apparaissent. Un seul développeur prend la peine de toujours commencer ses développements par l'écriture des tests unitaires ; et bizarrement, les bugs ne se situent jamais dans son code. Il ne perd pas de temps à traquer les bugs, il peut rester créatif et productif. => les TDD sont une vraie fausse bonne idée

Mais il ne faut pas se leurrer. Il est toujours assez difficile de discipliner des développeurs pour qu'ils écrivent leurs tests. Ils veulent toujours entamer le plus vite possible la partie la plus créative de leur boulot. Il faut alors rester ferme, et ne pas accepter de voir la moindre ligne de code écrite si les rapports de test (en échec, voir plus haut) ne sont pas présentés d'abord.

Je vous souffle une astuce : Ce que les développeurs détestent souvent encore plus que d'écrire des tests, c'est d'écrire des spécification techniques détaillées des développements qu'ils comptent faire. Ça leur semble pénible de réaliser les diagrammes UML de toutes leurs classes, avec la documentation complète de toutes les méthodes.
Alors il suffit de dire que les tests sont la spécification technique. Et c'est une bonne chose, car les tests unitaires valident un comportement, donc on peut considérer qu'ils décrivent le comportement attendu. Si au cours du développement on souhaite modifier quelque chose (changer les paramètres d'une méthode, ajouter des méthodes, etc.), il est assez facile d'adapter les tests en conséquence. En tout cas, les développeurs préféreront ça, plutôt que de devoir reprendre une spécification technique !