Fake It Til You Make It
[TDD]
Pour approfondir encore la notion de bruit dans un processus de conception vu comme un système muni de régulateurs, voici un pattern qui choque souvent ceux qui découvrent TDD :
Fake It (‘Til You Make It)
Je viens d’écrire un test, et me suis assuré qu’il échoue pour la bonne raison. Comment faire passer ce test ?
Renvoyer la valeur attendue par le test, sous la forme d’une constante.
Maintenant que les tests passent à nouveau, on peut refactorer :
- éliminer la duplication amenée par la constante
- utiliser (si possible) les paramètres ou l’état de la classe dans la valeur retournée
- etc.
La raison d’être de Fake It tient aux priorités qui régissent la démarche de conception en TDD :
1 : make it work
2 : make it clean
3 : make it fast
S’il est futile ou présomptueux d’optimiser un code qui ne passe pas ses tests, il peut être difficile de produire une solution propre dans le même temps où l’on essaie de la faire marcher.
Au lieu de conjuguer les difficultés, avec Fake It on “revient à la barre verte” immédiatement, de manière à réfléchir en s’appuyant sur un code qui passe tous ses tests. (Kent Beck compare ce pattern à l’assurage en escalade.)
Cette constante, ce nombre magique posé pour faire passer le test en trichant, provoque chez les novices une dissonnance cognitive, pour la bonne raison qu’il s’agit d’un “bruit” : une conception “propre” ne laisse pas traîner des valeurs en dur dans le code de production, voyons.
On se trouve à nouveau (voir mon post d’il y a 2 jours) en présence d’un bruit délibéré utilisé dans le cadre d’un processus de réduction du bruit.
Ici le “régulateur” TDD :
→ RED (bruit : comportement manquant)
→ CODE (élimination du bruit)
→ REFACTOR (élimination des bruits de conception)
inclut un régulateur subordonné qui met en œuvre à nouveau du bruit :
→ RED (bruit : comportement manquant)
→ FAKE-IT (bruit de conception délibéré)
→ REFACTOR (résolution)
Lorsque je code en TDD parfois j’imagine comme un mini-drame entre ces 3 acteurs du processus, Red 🚨, Code ✅, et Refactor 🟦 :
🚨 : Il nous manque ce comportement ! J’attends !
✅ : (Fake It) Du calme. Voilà, ton test passe, regarde.
🟦 : Maintenant qu’on est au calme, on peut examiner un peu la structure du code ? Hmm…
À comparer avec le maxi-drame qui se produit lorsque je réalise un programme en mode Code & Fix :
✅ : bon alors voilà, ça devrait produire ça ici, et ça là…
✅ : maintenant, je peux étendre au cas où…
✅ : ah oui, mais il y aussi ça, qui va faire osbtacle. Alors…
(a few moments later…)
🚨 : le bout de comportement, là, il n’y est pas !
🚨 : les autres bouts non plus !
🚨 : en fait il n’y a rien qui marche!!
🚨 : et ça plante en plus !!
(more moments later…)
🟦 : bon ça y est ? Tous les tests passent ? Pffiou.
🟦 : …
🟦 : euh, sans rire, c’est quoi ce chantier ?
Fake It est souvent utilisé en conjonction avec un autre pattern bruyant : Triangulation
Stay Tuned!