En continuant d’explorer la conception vue comme un processus régulé par des correcteurs de “bruit”, on trouve un pattern TDD souvent utilisé en conjonction avec Fake It :

Triangulate

Comment pousser les abstractions dans la conception de la manière la plus conservative qui soit ?

Abstraire uniquement lorsque l’on a 2 ou 3 exemples en plus.

Voici un exemple : On veut produire, par divisions successives, la liste des nombres premiers de 2 à N.

— D’accord. Donne moi un exemple.
— [Red] Eh bien déjà, 2 est premier.
— Certes. [Code]. Ensuite ?
— [Red] Si tu prends les nombres 3 et 4 seul le nombre 3 est premier.
— Bien [Code][Refactor]
— [Red] Parmi les nombres de 5 à 9, seuls 5 et 7 sont premiers.
— Les autres étant divisibles par 2 ou par 3… [Code][Refactor]
— Exact. Parmi…
— Laisse moi deviner : [Red] parmi les nombres de 10 à 25, seuls 11, 13, 17, 19, et 23 sont premiers.
— Tu as tout compris.

Ici notre binôme a procédé par triangulation. S’ils avaient procédé SANS Triangulation :

— D’accord. Est-ce que tu peux m’en dire plus ?
— Soit P(1),P(2),…,P(i) des nombres premiers connus. Parmi tous les nombres de P(i-1)²+1 à P(i)², sont premiers tous ceux qu’aucun des premiers de P(1) à P(i) ne divise. Par exemple :
[Red] Parmi les nombres de 26 à 49, seuls 29,31,37,41,43 et 47 sont premiers.
— J’ai compris. Laisse moi te revenir tantôt avec un petit programme de mon cru… [Code][Code][Code][Code]…

On devine que le code produit n’aurait pas le même forme.

En quoi la triangulation fait elle du “bruit” ?

Elle produit une dissonnance parce qu’elle met en place un test parfaitement “légal” du point de vue fonctionnel afin de construire une version simpliste, incomplète, de la solution. Elle ne produit rien de faux (comme ce serait le cas si un test disait : “imaginons temporairement que les nombres de 2 à 10 soient premiers”.) mais elle échafaude une solution complexe en la dévoilant progressivement.

Lorsque je rencontre des novices qui réagissent à cette dissonnance, je force le trait avec une boutade : “N’empêche qu’à ce stade, le programme, pour une partie de son domaine de valeur en entrée, marche ! On pourrait faire une démo au client !”

Triangulate produit un bruit utile, bien sûr : elle sert à se garder contre une aventure encore plus bruyante, celle qui consiste à concevoir d’un trait l’implémentation correcte couvrant tous les cas, et qui sera l’affaire d’un petit quart d’heure si on voulait bien nous laisser nous concentrer (spoiler : le quart d’heure, multipliez le par 4, voire 16).

Le but est d’éviter d’avoir à nager en apnée dans un long tunnel de code, sans test ni refactoring, et de ne refaire surface que quand ça semble enfin marcher.

Une fois qu’on a goûté à Triangulate, on s’en passe difficilement. Surtout lorsqu’on a renoncé à faire du code de nos produits le gymnase de nos prouesses mentales…

regulateur-5

Stay Tuned!

Publié sur Linked In le 27/10/2024