✨ TDD, BDD, ATDD ... pardon ?
Published: 2020-08-31 16:47:28

Il y a plein de sujets sur lesquels je suis complètement à la ramasse, mais si il en est un qui m'intéresse vraiment, c'est tout le mouvement qui monte depuis quelques années (même si ça existe depuis des dizaines d'années) à propos du **Test Driven Development (TDD)** et du **Behavior Driven Development (BDD)**.

Mais de quoi parle-t-on ? Je suis bien mal placé pour en parler mais je vais quand même essayer 😁😁 

J'ai d'ailleurs fait mon premier live sur ma chaine YouTube où j'ai appris en direct comment ça fonctionnait :

{% youtube JWH6WhnZvKo %}


# Test Driven Development : les tests c'est AVANT qu'on les écrit 😁
En premier lieu, il faut comprendre ce qu'est le TDD. C'est une philosophie qui repose sur 3 règles :

* Loi 1 : Vous devez écrire un test qui échoue avant de pouvoir écrire le code de production correspondant.
* Loi 2 : Vous devez écrire une seule assertion à la fois, qui fait échouer le test ou qui échoue à la compilation.
* Loi 3 : Vous devez écrire le minimum de code de production pour que l'assertion du test actuellement en échec soit satisfaite.

```javascript
// Exemple en JS, en utilisant la librairie
// Jest pour créer les tests :

// Etape 1 : j'écris un test qui va foirer
it('should add numbers correctly', function() {
  // Au moment d'écrire cette ligne
  // La fonction "additionner" n'existe
  // tout simplement pas !
  const resultat = additionner(5, 5);
  expect(resultat).toBe(10);
});

// Etape 2: Je joue les tests
// et je me rend compte qu'il est évidemment
// ROUGE puisque la fonction n'existe pas.

// Etape 3 : Je code ce qu'il faut pour 
// que le test passe au vert !
function add(x, y) {
  return x + y;
}

// Etape 4 : Le test passe donc au vert
// et je peux continuer le processus
```

Ce qui est merveilleux avec cette façon de procéder, c'est que au fur et à mesure qu'on avance dans le projet, on gagne en sérénité ! A chaque fois qu'on a peur d'avoir fait une connerie, on rejoue l'ensemble de nos tests :
* si ça passe, c'est que tout va bien
* si au contraire un ou plusieurs tests passent au rouge, c'est qu'on a merdé !

Pour en savoir plus, vous pouvez voir cette vidéo de Grafikart :

{% youtube _M7Zp3QL-kw %}


# BDD, ATDD : Le fonctionnel et le métier au centre de nos préoccupations

On l'a donc bien compris, **le principe du TDD c'est de tester des unités de code (une fonction ou une classe). On teste donc une implémentation**. Mais pour le BDD ou le ATDD, ce n'est pas du tout le principe.

**BDD et ATDD ne sont pas là pour vous aider à tester les détails de l'implémentation** (le COMMENT), ils sont là pour vous aider à **tester une fonctionnalité attendue**.

Pour ce faire, vous devez écrire des tests qui soient compréhensibles autant par les devs que par les clients. Dans l'idéal, on peut utiliser **la syntaxe Gherkin** pour faire ça et voilà à quoi ça ressemble :

```gherkin
# Avec Gherkin, on va décrire HUMAINEMENT
# des fonctionnalités attendues
Feature: Blog posts management
  # La "feature" décrit une catégorie de 
  # de fonctionnalités

  # On peut décrire différents scenarios
  Scenario: an admin can create a post
    Given I'm logged in as ADMIN
    When I create a blog post
    Then I can see the blog post on the home page

  Scenario: we can read a blog post
    Given I'm on the home page
    When I click on a blog post
    Then I see the blog post details
```

Vous le voyez bien ici, on ne parle pas du tout de base de données, de la façon dont on s'authentifie sur l'application, on ne sait même pas en quel langage l'application est écrite. On teste ici les fonctionnalités attendues.

L'avantage de ce type d'approche est que vous pouvez vous rendre compte rapidement si votre application répond ou pas à ce que vous avez convenu avec le client lui même !

Si vous souhaitez VRAIMENT comprendre tout ça, je ne peux que vous encourager à regarder **cet atelier de Michael Azerhad (WealCome)** qui tient un podcast très intéressant sur ces sujets (à retrouver sur Spotify ou SoundCloud) :

{% youtube jxBmKvS7lAo %}

# Allez plus loin 

Comme d'habitude, j'ai envie de vous donner une ressource pour replacer un peu tout ça en contexte et j'ai pile poil ce qu'il vous faut ! **Une conférence de Thimotée Barray au Forum PHP 2018 ** de l'AFUP :
 
{% youtube X9PAXK8DjFQ %}

# Retrouvez moi 🚀
* Inscrivez vous à ma newsletter : http://eepurl.com/gZ0LEH
* Rejoignez moi sur YouTube : https://youtube.com/LiorChamla