Quand le code parle le langage des affaires : une introduction au BDD
Imaginez cette situation : vous avez écrit un module de paiement parfait d'un point de vue code. Toutes les méthodes fonctionnent, les exceptions sont gérées, la couverture des tests unitaires est de 99 %. Vous vous apprêtez à sabrer le champagne, mais le manager arrive et dit : "Pourquoi facturons-nous avant que la commande ne soit confirmée ?" Et vous réalisez — le bug n'est pas dans le code, mais dans la compréhension de la tâche.
Cela vous semble familier ? C'est exactement le genre de cas où le BDD (Behaviour-Driven Development) entre en jeu — le développement piloté par le comportement. Ce n'est pas juste une autre méthodologie, 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 d'exigence, cet article est pour vous.
Dans ce contenu, nous allons décomposer comment implémenter le BDD en PHP en utilisant le framework Behat, écrire de vrais tests, et comprendre pourquoi il rend le code plus propre et la communication plus transparente.
Qu'est-ce que le BDD et en quoi est-il différent du TDD ?
Beaucoup de gens confondent le Behaviour-Driven Development avec le TDD (Test-Driven Development) classique. Et en effet, ils se ressemblent en surface : dans les deux cas, les tests sont écrits en premier. Mais la différence réside dans l'orientation.
- TDD concerne "comment vérifier qu'une fonction renvoie le bon nombre." Les tests sont écrits dans le langage du programmeur : assert, equals, mock.
- BDD concerne "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 unifié pour la communication. Les développeurs, testeurs et managers lisent tous le même scénario. Et s'il dit "l'utilisateur ajoute un produit au panier sans se connecter," tout le monde le comprend de la même manière.
Outillage : 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 dans le langage Gherkin et les transforme en tests exécutables. Gherkin est un anglais (ou russe) simple 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, initialisez le projet :
vendor/bin/behat --initLa structure ressemblera à ceci :
features/ bootstrap/ FeatureContext.php your_feature.featurebehat.ymlÉcrire votre premier scénario BDD en PHP
Disons que nous avons une boutique en ligne. L'exigence métier est : "Un utilisateur enregistré peut ajouter un produit au panier et voir le montant total." Créez le fichier features/cart.feature :
Feature: Shopping Cart As a registered user I want to add products to the cart So that I can see the total cost
Scenario: Adding a single product Given I log in to the site as user "ivan@example.com" And the catalog page has a product "Laptop" for 50000 rubles When I click "Add to cart" for the product "Laptop" Then I see the message "Product added" And the total cart amount is 50000 rublesRemarquez : n'importe quel manager peut lire ce scénario sans connaître PHP. Mais pour Behat, c'est un test exécutable.
Implémentation des définitions d'étapes
Maintenant, nous devons "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 I log in to the site as