Dans la partie précédente, vous avez découvert les tests et admettons-le : ça a un peu changé votre vie ! Désormais, vous avez un outil qui vous permet de vérifier que le code que vous avez écrit est correct. Et ça, c'est puissant !
Mais nous pouvons faire encore mieux. Et si nous étions sûrs que notre code fonctionne sans bug au moment même où est en train de l'écrire ? Ça vous paraît être de la science-fiction ? Et non je suis très sérieux, et c'est même assez simple.
Si les tests nous assurent que notre code est correct, et qu'on veut pouvoir que tout nouveau code fonctionne avec certitude dès son écriture, c'est qu'il faut rédiger les tests...
AVANT LE CODE ??!!!!
Eh oui ! Que vous êtes bons ! Ne faites pas cette tête-là pour autant et laissez-moi vous expliquer.
Comment ça marche
Rédiger les tests avant le code, on appelle ça du Test Driven Development, souvent abrégé TDD (Développement motivé par les tests en français).
Comment ça marche ?
Prenons un exemple : vous travaillez sur une application de rappels. Votre boss vient vous voir et vous demande de rajouter une fonctionnalité. Il veut que l'on puisse supprimer un rappel.
Voyons comme réagissent un développeur normal et un développeur en TDD :
En développement normal
Vous vous exécutez immédiatement et créez la fonctionnalité désirée. Une fois que vous vous êtes assurés manuellement que ça fonctionne, vous écrivez le ou les tests correspondants, car vous êtes un bon développeur qui teste son code.
En TDD
Vous écrivez immédiatement un test qui contrôle que la suppression d'une note se passe bien. Forcément le test échoue, car vous n'avez même pas créé la fonction correspondante. Donc vous n'avez plus qu'une idée en tête : réparer le test. Pour cela, vous développer la fonctionnalité demandée par votre boss. Et sans aucun test manuel, vous savez qu'elle fonctionne, car votre test est passé au vert !
L'intérêt
Quel est l'intérêt de cette technique ? Il y a plusieurs bonnes raisons de faire du TDD et je vais essayer de vous en proposer quelques-unes :
Penser à ce que le code doit faire 🤔
En rédigeant d'abord votre test, vous êtes contraint de réfléchir à ce que vous voulez que votre code fasse avant de le rédiger. Vous avez une idée claire du résultat à obtenir, ce qui va vous faire gagner du temps.
Travailler dans un environnement de code sain 🍀
Lorsque vous développez en TDD, vos tests sont constamment présents et à jour. Donc vous évoluez dans votre code avec confiance, car vous savez que si vous causez le moindre bug, un test vous le dira avant même que vous vous en rendiez compte.
Être concentré 👩💻
Il est facile de se disperser lorsqu'on développe. Il y a souvent beaucoup de choses à faire et on peut s'éparpiller, ce qui peut causer au mieux une perte de temps et de la fatigue et au pire des bugs !
Lorsque vous développez en TDD, vous rédigez un seul test qui échoue et ensuite vous le fixez en développant la fonctionnalité correspondante. Donc vous faites une seule chose à la fois.
Si vous commencez à vous disperser, vos tests vous le diront, ils deviendront rouges les uns après les autres. Et votre cerveau est câblé pour ne pas aimer le rouge, donc vous allez vous concentrer pour réparer ce petit test rouge et ne pas en créer d'autres. Et ensuite seulement, vous aurez envie de passer au reste.
Validation automatique de votre code ✅
Lorsque vous développez votre fonctionnalité, vous n'avez même pas à tester manuellement. Vos tests s'en occupent automatiquement pour vous ! Pas de validation manuelle à faire.
Les tests sont importants ⚠️
Votre cerveau a l'habitude de considérer comme plus important ce qui vient en premier. Vous êtes faits comme ça. Donc en écrivant vos tests en premier, vous leur donnez une vraie valeur. Et cela vous assure qu'ils seront toujours de qualité.
Mais du coup le reste du code va perdre en qualité ?
Bien sûr que non, vous ne risquez pas de délaisser le reste du code ou même de ne pas le développer, car cela impactera directement votre app et donc vos clients, vos utilisateurs, votre boss et donc en définitive vous ! Ce n'est pas vrai pour les tests, il y a un risque que vous les oubliiez et ils sont trop importants pour ça ! Alors, faites-les en premier !
En résumé
Le Test Driven Development (TDD) est une technique de développement très puissante dans laquelle on écrit les tests avant le code.
Concrètement on écrit un test qui échoue, puis on écrit le code correspondant, ce qui répare le test.
Les intérêts du TDD sont :
Penser à ce que l'on fait
Travailler dans un environnement de code sain
Être concentré
La validation automatique du code
Ne pas oublier les tests
Dans le prochain chapitre, nous allons apprendre la méthode "Red, Green, Refactor" qui nous permet de travailler en Test Driven Development.