En toute justice, il a ajouté "In fun" à cette affirmation.
À ce jour, j'ai tendance à commencer par modéliser des systèmes en utilisant l'approche «nom et verbe», mais j'ai constaté au fil des ans que TDD nous apprend que cette approche attire votre attention sur la mauvaise chose. En ce sens, le blogueur a raison. Cependant, je ne suis pas sûr que ce soit l'approche en cause, plutôt que la façon dont nos esprits fonctionnent.
Si vous voulez essayer un petit défi ici, arrêtez de lire et allez essayer de modéliser le jeu Monopoly, en utilisant la langue anglaise, puis revenez ici.
Je soupçonne que la tentation sera de regarder immédiatement les objets avec lesquels nous interagissons beaucoup - le plateau, les espaces, les cartes, les dés, les pièces - mais ce n'est pas là que va la majeure partie de la logique. La plupart de ces objets sont entièrement muets. Des données, si vous voulez.
Mais dès que vous commencez à écrire des tests, vous réalisez quel objet est de loin le plus important dans n'importe quel jeu: les règles.
Rappelez-vous ce petit morceau de papier que vous avez lu une fois lorsque vous avez obtenu le jeu pour la première fois et avec lequel vous n'interagissez plus jusqu'à ce qu'il y ait un différend? La version informatisée ne fonctionne pas de cette façon. Chaque chose que le joueur essaie de faire, un ordinateur consultera les règles et verra s'il est autorisé à le faire ou non.
Quand vous y pensez, vous faites la même chose, mais comme il faut du temps pour lire les règles sur papier et que votre cerveau dispose d'un système de mise en cache raisonnable, vous consultez les règles dans votre tête. Un ordinateur trouvera probablement aussi facile de relire les règles - à moins qu'elles ne soient stockées dans la base de données, auquel cas il pourrait également les mettre en cache.
Et c'est pourquoi TDD est si populaire pour la conception de la conduite. Parce qu'il a tendance à conduire rapidement votre processus de réflexion aux bons endroits:
Quand je pense que je vais écrire des tests pour mon jeu Monopoly. Je pourrais regarder mon ensemble et essayer de trouver les objets. Donc, nous avons ces pièces. J'écrirai quelques tests pour ceux-là.
Peut-être aurai-je une classe de base MonopolyPiece et chaque type de pièce en dérivera. Je vais commencer par le DogPiece. Premier test ... ahh. En fait, il n'y a pas de logique ici. Oui, chaque morceau sera dessiné différemment, donc je pourrais avoir besoin d'un DogDrawer, mais pendant que je développe le jeu, je veux juste écrire "D" sur l'écran. Je vais pimenter l'interface utilisateur à la fin.
Trouvons une logique réelle à tester. Il y a beaucoup de ces maisons et hôtels, mais ils n'ont pas besoin de tests. L'argent, non. Cartes de propriété, non. Etc. Même la carte n'est qu'une machine à états, elle ne contient aucune logique.
Vous constaterez rapidement qu'il vous reste trois choses en main. Les cartes Chance et Community Chest, une paire de dés et un ensemble de règles. Ce seront les éléments importants à concevoir et à tester.
Avez-vous vu cela venir lorsque vous avez écrit les noms et les verbes?
Il y a, en fait, un excellent exemple dans les modèles et pratiques des principes agiles de Robert Martin où ils essaient d'étoffer une application de carte de score de bowling en utilisant TDD et de trouver toutes sortes de choses qu'ils pensaient être des classes évidentes ne valaient pas la peine d'être dérangées.