Quand le code parle le langage des affaires : introduction au BDD
Imaginez la situation : vous avez écrit un module de paiement parfait, du point de vue du code. Toutes les méthodes fonctionnent, les exceptions sont gérées, la couverture des tests unitaires est de 99 %. Vous ouvrez le champagne, mais le manager arrive et dit : « Pourquoi l'argent est-il débité avant la confirmation de la commande ? ». Et vous comprenez — le bug n'est pas dans le code, mais dans la compréhension de la tâche.
Cela vous parle ? C'est exactement pour ce genre de cas qu'existe le BDD (Behaviour-Driven Development) — le développement piloté par le comportement. Ce n'est pas juste une méthodologie de plus, mais un pont entre « je veux que ça marche » et « comment l'implémenter en PHP ». Si vous en avez assez de réécrire la logique après chaque clarification des exigences, cet article est pour vous.
Dans ce contenu, nous allons voir comment implémenter le BDD en PHP à l'aide du framework Behat, écrire des tests réels et comprendre pourquoi cela rend le code plus propre et la communication plus transparente.
Qu'est-ce que le BDD et en quoi diffère-t-il du TDD ?
Beaucoup confondent le Behaviour-Driven Development avec le TDD (Test-Driven Development) classique. Et il est vrai qu'ils se ressemblent extérieurement : dans les deux cas, on écrit d'abord les tests. Mais la différence réside dans l'objectif.
- TDD — c'est « comment vérifier qu'une fonction renvoie le bon nombre ». Les tests sont écrits dans le langage du programmeur : assert, equals, mock.
- BDD — c'est « comment le système se comporte dans une situation métier spécifique ». Les scénarios sont écrits dans un langage naturel, presque humain.
L'idée clé du BDD en PHP est d'utiliser un langage commun pour la communication. Développeurs, testeurs et managers lisent le même scénario. Et si celui-ci dit « l'utilisateur ajoute un produit au panier sans être connecté », tout le monde le comprend de la même manière.
Boîte à outils : Behat et Gherkin
Dans le monde PHP, l'outil principal pour le BDD est Behat. C'est un framework qui analyse les scénarios écrits en langage Gherkin et les transforme en tests exécutables. Gherkin est un langage simple, en anglais (ou en français) avec des mots-clés : Feature, Scenario, Given, When, Then.
Installons Behat dans votre projet PHP :
composer require --dev behat/behat behat/mink-extension behat/mink-goutte-driverAprès l'installation, initialisons le projet :
vendor/bin/behat --initLa structure ressemblera à ceci :
features/ bootstrap/ FeatureContext.php your_feature.featurebehat.ymlÉcrire notre premier scénario BDD en PHP
Supposons que nous ayons une boutique en ligne. Exigence métier : « Un utilisateur enregistré peut ajouter un produit au panier et voir le montant total ». Créons le fichier features/cart.feature :
Feature: Panier d'achat En tant qu'utilisateur enregistré Je veux ajouter des produits au panier Afin de voir le coût total
Scenario: Ajout d'un seul produit Given je me connecte au site en tant qu'utilisateur "ivan@example.com" And sur la page du catalogue, il y a un produit "Ordinateur portable" à 50000 roubles When je clique sur "Ajouter au panier" pour le produit "Ordinateur portable" Then je vois le message "Produit ajouté" And le montant total du panier est de 50000 roublesRemarque : ce scénario peut être lu par n'importe quel manager sans connaissance de PHP. Mais pour Behat, c'est un test exécutable.
Implémentation des étapes (Step Definitions)
Maintenant, il faut « apprendre » à Behat à comprendre ces étapes. Ouvrez features/bootstrap/FeatureContext.php :
<?php
use Behat\\Behat\\Context\\Context;use Behat\\Gherkin\\Node\\PyStringNode;use Behat\\Gherkin\\Node\\TableNode;
class FeatureContext implements Context{ private $currentUser; private $cart = []; private $products = [];
/** * @Given je me connecte au site en tant qu'