BDD en PHP : Écrire du code que le métier comprend

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi le code ne fonctionne-t-il pas si le métier a dit "tout est bon" ?

\n\n

Avez-vous déjà vécu cette situation : le manager affirme que la tâche est résolue, les tests passent au vert, mais l'utilisateur est toujours mécontent ? Un grand classique. Le problème n'est pas dans le code — le problème est dans la communication. Nous parlons des langues différentes : le métier raisonne en scénarios, tandis que les développeurs raisonnent en méthodes et en classes. C'est là que le BDD (Behaviour-Driven Development) — le développement piloté par le comportement — vient à la rescousse. Et oui, sur PHP, cela fonctionne à merveille.

\n\n

Dans cet article, nous allons voir comment le BDD en PHP aide à transformer des "envies" vagues en tests compréhensibles, que le manager comme le programmeur peuvent saisir. Vous découvrirez en quoi le BDD diffère du TDD classique, comment rédiger des scénarios en Gherkin et quels outils (Behat, PHPSpec) simplifient réellement la vie.

\n\n

Qu'est-ce que le BDD en termes simples ?

\n\n

BDD (Behaviour-Driven Development) est une évolution du TDD. Si le TDD se concentre sur "comment tester le code", le BDD répond à la question "que doit faire le code pour que le métier soit satisfait".

\n\n

Imaginez que vous développez une boutique en ligne. Au lieu d'un test abstrait comme "la méthode applyDiscount() doit réduire le prix", vous rédigez un scénario :

\n\n
    \n
  • Étant donné : un article à 1000 roubles dans le panier
  • \n
  • Quand : l'utilisateur saisit le code promo "SALE10"
  • \n
  • Alors : le total du panier devient 900 roubles
  • \n
\n\n

Ce scénario est lisible par n'importe qui — du marketeur au chef d'équipe. Pas de magie, seulement le comportement du système.

\n\n

BDD vs TDD : quelle est la différence ?

\n\n

Beaucoup confondent ces concepts. Mettons les points sur les i :

\n\n
    \n
  • TDD — on écrit un test, puis le code, puis on refactorise. Les tests sont écrits par un développeur pour un développeur.
  • \n
  • BDD — on écrit d'abord un scénario de comportement en langage naturel, puis on l'automatise. Les scénarios sont rédigés en dialogue avec le métier.
  • \n
\n\n

Le BDD ne remplace pas le TDD, il le complète. Vous écrivez toujours des tests unitaires, mais vous disposez désormais d'une "documentation vivante" sous forme de scénarios.

\n\n

Outils BDD pour PHP : choisir son arme

\n\n

L'écosystème PHP propose deux outils principaux pour le développement piloté par le comportement : Behat et PHPSpec. Ils répondent à des objectifs différents.

\n\n

Behat — le soldat universel

\n\n

Behat est un framework de tests d'acceptation. Il fonctionne avec le langage Gherkin (le fameux "Étant donné-Quand-Alors"). Behat est idéal pour les tests d'intégration, la vérification d'API, d'interfaces web et de logique métier de haut niveau.

\n\n

PHPSpec — le microscope du développeur

\n\n

PHPSpec est un outil de spécification de classes. Il est plus proche du TDD, mais avec la philosophie du BDD : vous décrivez le comportement d'un objet, pas ses détails internes. PHPSpec est parfait pour les tests unitaires de la logique métier.

\n\n

Dans cet article, nous nous concentrerons sur Behat, car il illustre le mieux le behaviour-driven development en PHP.

\n\n

Écrire notre premier scénario BDD en PHP avec Behat

\n\n

Créons un exemple concret. Supposons que nous développions un système de fidélité. Le client bénéficie d'une réduction de 10% si le montant de la commande dépasse 5000 roubles.

\n\n

Étape 1 : Installation de Behat

\n\n
composer require --dev behat/behat
\n\n

Ensuite, initialisons le projet :

\n\n
vendor/bin/behat --init
\n\n

La structure sera la suivante :

\n\n
features/\n  bootstrap/\n    FeatureContext.php\n  discount.feature
\n\n

Étape 2 : Rédiger un fichier feature en Gherkin

\n\n

Créons le fichier features/discount.feature :

\n\n
Feature: Calcul de la réduction pour les clients fidèles\n  En tant que responsable commercial\n  Je veux offrir une réduction de 10% sur les commandes à partir de 5000 roubles\n  Afin de stimuler les gros achats\n\n  Scenario: La commande dépasse le seuil de réduction\n    Étant donné des articles dans le panier pour un montant de 6000 roubles\n    Quand je demande le montant total\n    Alors le montant total doit être                

Blogs

Book Recommendations