NFluent à l’honneur au Bootcamp de Juin

Bootcamp Cellenza

Journée Craftmanship avec Thomas Pierrain – NFluent, Refactoring et Design Pattern

Jeudi 12 juin s’est déroulé le Bootcamp Cellenza. NFluent était à l’honneur en cette belle journée de juin, avec l’intervention de Thomas Pierrain (un grand merci à lui), qui nous a éclairés sur ses méthodes de TDD avec son API Fluent et les bonnes pratiques de travail sur le code legacy.

Au programme de ce bootcamp donc, Kata sur la reprise et l’amélioration de code legacy, One Man Show de Mick, Hot Dogs, démo avec NFluent et Design Patterns… que du bonheur !

Matinée sportive – GildedRose Kata. TDD sur Code Legacy

Thomas Pierrain, contributeur principal de la librairie NFluent, nous a invité à travailler sur Gilded Rose (disponible ici), un Kata consistant à reprendre un code existant pas très propre (qui a dit euphémisme ?) pour y ajouter une fonctionnalité.

Ça paraît simple comme ça, mais quand l’existant est en fait un code spaghetti non documenté qui fonctionne, que toute la logique métier est contenue dans une seule et même méthode et qu’il ne faut évidemment rien casser, les choses se corsent. L’exercice doit bien sûr se faire en moins de 30 minutes, sinon où est le fun… ?

Nous nous sommes donc mis par équipes de 2 et avons planché sur ce Kata en bons codeurs chevronnés que nous sommes. Différentes approches ont émergé mais, dans l’ensemble, nous étions unanimes sur la nécessité de couvrir le code existant d’une suite de tests unitaires avant de modifier l’application. La difficulté résidait dans la question « comment organiser les tests pour avoir une couverture de code maximale ». Réponse dans l’après-midi…

Une fois le temps écoulé, nous avons comparé les résultats de chaque équipe. Globalement, l’exercice nous a semblé long pour le temps imparti. Ce Kata, en plus d’être un bon exercice de développement, constitue un vaccin efficace contre la grosse tête.

Après-midi Démo

En première moitié d’après-midi, Thomas nous a fait une démonstration de son approche pour résoudre les problèmes posés par le Kata GildedRose. Sa présentation s’articulait autour de 2 axes :

  • la difficulté d’écrire des tests avec l’Assert, et la solution offerte par l’outil NFluent,
  • l’approche à adopter pour avoir une couverture de code acceptable avant d’attaquer le travail de refactoring.

Simplifiez vos tests avec NFluent

NFluent est un outil dont le but est de faciliter la vie du développeur lors de la création des tests unitaires. Le postulat de départ est que la méthode Assert proposée par les différents frameworks de tests est assez limitée. Le développeur utilise essentiellement les méthodes IsNull/IsNotNull, AreEquals/AreNotEquals and IsTrue/IsFalse. Cette limitation sémantique force le développeur à s’exprimer de manière maladroite et verbeuse. A titre d’exemple, voici comment comparer 2 collections avec Assert.

Assert_Syntax

Pour faire plus court, nous pouvons utiliser CollectionAssert fourni par NUnit. C’est mieux, mais la lecture du code n’est toujours pas très naturelle :

CollectionAssert_Syntax

NFluent à l’inverse offre une syntaxe intuitive. En somme, on code comme on parle. Tout ce que le développeur a besoin de retenir est la méthode Check.That. Pour le reste, il suffit de se laisser guider par l’IDE , le principe étant le même que pour la syntaxe Linq basée sur les méthodes d’extension. Au final, résultat plutôt convaincant :

NFluent_Syntax

Une stratégie à la rescousse: le Golden Master

Le programme du Kata GildedRose repose sur une méthode Update qui met à jour une liste de produits à chaque invocation. Cette méthode contient de nombreux tests et couvrir le code avec la méthode classique « une branche d’exécution = 1 test unitaire » (NbTests = complexité cyclomatique) peut se révéler coûteuse.

Thomas nous a donc proposé une stratégie alternative connue sous le nom de Golden Master. Le principe est simple: on clone l’existant, on refactore le clone et nos tests se contentent de comparer les listes de produits des 2 versions à chaque appel à la méthode Update. Si les listes sont les mêmes, on n’a rien cassé. On peut donc continuer notre refactoring avec la conscience tranquille. NFluent apporte ici un grand service en rendant  la comparaison des listes particulièrement simple.

Fonctionner ainsi par comparaison présente le double avantage de réduire le nombre de tests unitaires tout en fournissant le harnais de sécurité nécessaire à la modification de code fonctionnel existant.

Design Patterns

L’après-midi s’est terminé avec une présentation des Design Patterns du GoF. Tour-à-tour, chacun des Cellenzans a présenté en une dizaine de minutes le patron qui lui a été confié. Objectif du pattern, organisation et bien sûr exemple en C#. La formule s’est montrée efficace et a séduit la majorité. A reproduire donc…

WP_20140612_005

Pour finir, la traditionnelle Rétro

Le rituel cellenzan veut que, dans un souci d’amélioration continue, chaque Bootcamp se termine par une rétro. Tour à tour, nous sommes venus « coller » nos remarques dans les colonnes « plus » et « moins » du tableau.

6tag_120614-222248

L’intervention de Thomas a fait un carton ! Les seuls regrets furent les absences de certains, l’annonce du départ de Anne et le manque de frites au déjeuner (sacrilège)…

Pas de commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *