Quel est un bon exemple de classe pour démontrer le TDD?

Je dois faire une courte présentation (2 à 4 heures) sur le développement piloté par les tests et proposer un petit cours que je peux construire en utilisant la méthodologie TDD. La classe doit être relativement petite, mais “vendre” le concept de TDD.

Si quelqu’un a lu le livre de James Newkirk, Test-Driven Development pour Microsoft.Net, l’exemple de Stack est parfait. C’est une petite classe, a une liste gérable de tests / exigences, et le processus de création vend TDD (IMHO).

Je ne veux pas utiliser l’exemple Stack ou des structures de données similaires (queue, listes, etc.) de peur d’empiéter sur le travail de Newkirk.

Donc, je cherche quelques bonnes idées pour un exemple de classe.

Merci.

Que diriez-vous d’utiliser la 1ère section de l’exemple Money de Kent Beck . Cela commence très simplement, mais lorsque vous arrivez à append deux devises différentes, TDD vous montre soudain la structure de la conception initiale, ou YAGNI (vous n’en aurez pas besoin).

Un autre bon exemple est l’ exemple de TDD avec score de bowling de l’ oncle Bob. Je pense que ceci est un bon exemple de la façon dont un récit TDD vous amène à une solution propre qui aurait été explicitement inaccessible via une conception initiale.

Pour en faire une présentation vraiment passionnante, vous pouvez dès le départ inciter le public à concevoir les deux scénarios en utilisant les méthodes qu’ils jugent appropriées. Vous montrerez ensuite la manière dont TDD les conçoit.

Le vrai moment WTF pour moi avec TDD était quand Beck a enlevé les deux sous-classes de Money, et les tests ont fonctionné. Ce n’est pas une action sortingviale; l’homme a supprimé deux classes! La confiance de faire quelque chose comme cela ne peut être trouvée que par deux moyens.

1) rassembler tous les joueurs seniors dans une base de code et parcourir les scénarios, suivi d’un suivi approfondi pour confirmer que cela fonctionne

2) TDD

= D

Si vous avez le temps de le faire, je choisirais un exemple avec une dépendance externe quelconque qui sera analysée dans le test. Soit une firebase database, des appels à une interface graphique, des appels vers un système distant, etc.

La raison en est que l’un des obstacles à TDD est que l’exemple semble trop autonome. “Bien sûr, lorsque tout est une unité autonome, vous pouvez effectuer des tests unitaires, mais quand j’ai 15 systèmes à intégrer, quel est l’intérêt?” sorte de chose.

Je voudrais également au moins montrer un exemple à la fin (consultez le livre de Michael Feather Travailler efficacement avec le code hérité pour savoir comment) de la migration d’une classe existante pour l’amener sous TDD. Ne vous attardez pas là-dessus à titre d’exemple, mais il est fort probable que votre auditoire réfléchisse à la manière de migrer la classe qu’il a écrite ce matin-là, et qu’il n’y a aucune raison de laisser cet aliment «inavouable».

Les problèmes de TDD ont une liste de problèmes, allant du simple au moins simple.

Certains ont une liste de tests pour démarrer à partir de aucune solution pour le moment.

Si vous avez un exemple parfait dans un livre, alors vous devriez l’utiliser et promouvoir le livre. Aucun auteur ne s’y opposerait.

En dehors de cela, j’ai assisté à une présentation TDD il y a quelques années, où l’exemple était une simple calculasortingce et qui fonctionnait à merveille.

Trois j’aime bien, dans l’ordre de difficulté croissant:

  • Plage (des entiers; implémenter isEmpty (), contient (), intersecte (), length ())
  • Tri naturel
  • Serpent

Si j’avais une demi-heure, je le ferais Range; 90 minutes, probablement sorting naturel; plus: Serpent. Cela dépend du public, cependant.

Je voudrais essayer de trouver quelque chose de petit dans un domaine bien connu. J’ai récemment donné une présentation sur BDD / TDD basée sur ASPNET.MVC. Cela comprenait un contrôleur, une action et un modèle de vue. Cela m’a également donné l’occasion d’introduire un conteneur de dépendance et un cadre moqueur.

Que diriez-vous d’une simple classe de mathématiques, avec addition, soustraction, multiplication et autres?

Un exemple classique de la communauté TDD / Extreme / Agile est l’exemple du jeu de bowling. Il me semble rappeler qu’elle a été utilisée à la fois chez Beck et Martin, ainsi que sur de nombreuses resockets sur xprogramming.com pour des exemples et des explorations de différentes techniques au sein de TDD.

Sortez et prenez les demandes du public. 🙂

Si l’objective est la vente de TDD, vous voulez également montrer une petite refactorisation d’une grande base de test. Il est facile de le faire fonctionner avec de petits échantillons, la plupart des développeurs y adhèrent maintenant. Il y a beaucoup plus de doute sur l’évolutivité. Un sujet avancé serait alors de savoir comment gérer une grande base de code hérité (pas de tests unitaires).

Un jeu de cartes simple serait bien, surtout que vous pouvez fournir une représentation visuelle du résultat

Et je suppose que vous allez utiliser un dojo de codage comme forme de présentation, n’est-ce pas? Pas de powerpoint sophistiqué. Si le public n’est pas un programmeur, utilisez l’exemple Excel

Compétences essentielles pour le développement agile – Ka Iok Tong. Ce livre concerne Agile mais contient plusieurs chapitres sur les tests, en particulier TDD. L’auteur explique TDD en codant à partir de l’exigence, note également sa pensée sur la façon de résoudre le problème en TDD. Vous pouvez trouver ce livre ici . Pour en savoir plus sur les concepts et les outils modernes, vous pouvez aller ici

Je vous suggère de vous acheter le livre Test piloted design par exemple de Kent Beck.

Le livre se concentre presque entièrement sur la construction d’une classe via TDD.

Chiffres romains. Comptez les lignes sans commentaire du code source. Tours de Hanoi. Il y a plein d’idées là-bas.

Si le public visé est naïf en TDD, je vous recommande d’utiliser les exemples ci-dessous. Cela vous permet de bien comprendre les concepts et la mise en œuvre de TDD.

  1. Compte bancaire

  2. Jeu de bowling