Alt.NET : TDD ... in love

Publié le 25 mars 2009 par Olivier Duval

J'ai assisté hier soir à la 11è rencontre Alt.NET sur le thème du TDD (Test Driven Development). La soirée était hébergée chez Octo que nous remercions, et les (brillants) orateurs, le binôme Djamel et Frédéric.

La session a duré un peu plus longtemps que prévu, voire largement dépassé le créneau horaire. La présentation étant entrecoupée par des échanges très intéressants de l'assistance (plus de 25 participants) : entre les sceptiques, pros, curieux, intéressés mais ne sachant pas par où commencer, tous les points de vue étaient bien présents, et riches d'intérêt.

La présentation était animée par des slides et des séances de code (Visual Studio + TFS) sur le jeu Mastermind, pour les débutants (tests) et pour les avancés (Mocks ou bouchons).

Une démo avec une application WPF Mastermind et le pattern MV-VM (Model View-ViewModel) a également été montrée pour tester l'UI, avec notamment la classe DependencyObject ou les Converters (ndr : un peu plus compliqué à mettre en place a priori, bon, j'admets que je n'y connais rien en WPF).

Pour résumer sous forme de points importants :

  • tests unitaires par et pour les développeurs,
  • (re)commencer à penser au cas simple au lieu de s'engroufrer directement dans le cas le plus compliqué,
  • le refactoring est une dominante importante du TDD : les tests servent de harnais au code, mais l'inverse également, lors du refactoring des tests, le code peut aussi servir de harnais aux tests, ceci pour s'assurer qu'il n'y a pas de régressions,
  • demande un effort, et une courbe d'apprentissage non négligeable,
  • une méthode pour avancer dans les tests : dès qu'un bug est détecté, mettre en place le(s) test(s) approprié(s) pour le code fautif (ndr : c'est cette démarche que j'adopte le plus souvent possible sur un lourd existant),
  • commiter relativement souvent les tests afin de pouvoir revenir à une situation saine, on retrouve encore une fois la notion de sécurité,
  • au-delà des tests, le TDD amène un meilleur design à l'application, une façon + ou - coercitive d'améliorer son code, en découplant le plus possible le modèle. On s'aidera notamment des interfaces et de l'IoC (injection de dépendances), soit à la main, soit en s'aidant de frameworks (Castle Windsor en est un). Ceci induira un code plus flexible aux évolutions (ndr : la maintenabilité du code reste le plus difficile à préserver),
  • apporte une documentation au code,
  • les tests amènent une certaine confiance (harnais de sécurité) lors d'une modification de code,
  • ...et demande une certaine dose de maturité dans le développement (et oui, l'ingénierie logicielle, c'est un métier),

Le TDD fait partie des méthodes agiles, il participe à diminuer le taux de bugs, et à une amélioration de la conception du code. Même si cela demande un investissement, sur le long terme, le retour sur investissement est positif.

Agenda des prochaines rencontres : 9 avril : speed dating (!), 22 avril : MEF (Matthieu), 22/6 : Adaptive Object Modeling, 17/6 : AOP (Romain), 1/7 : DDD (Greg Young), 22/7 : debug (Yann)

Retrouvez toutes les informations sur le blog d'Alt.NET FR ou sur la liste du groupe Alt.Net.