Dans le paysage du dĂ©veloppement logiciel, l’Ă©cart entre ce que les parties prenantes imaginent et ce que les dĂ©veloppeurs construisent est souvent Ă l’origine de tensions importantes. L’ambiguĂŻtĂ© des exigences entraĂźne des reprises de travail, des retards dans les livraisons et des Ă©quipes frustrĂ©es. Pour combler cet Ă©cart, les Ă©quipes ont besoin d’un langage commun prĂ©cis, lisible et exĂ©cutable. L’une des techniques les plus efficaces pour atteindre cette clartĂ© est le Given When Then syntaxe. Cette approche transforme les histoires utilisateur vagues en spĂ©cifications concrĂštes de comportement.
Lorsqu’elle est appliquĂ©e correctement, cette mĂ©thode sert plus qu’un simple exercice d’Ă©criture ; elle devient un contrat entre les mĂ©tiers, l’Ă©quipe de conception et l’ingĂ©nierie. Elle garantit que chaque fonctionnalitĂ© livrĂ©e correspond Ă la valeur attendue. Ce guide explore les mĂ©canismes, les avantages et les bonnes pratiques pour utiliser efficacement Given When Then afin de spĂ©cifier le comportement des histoires utilisateur.

đ§ Comprendre la structure fondamentale
Le modĂšle Given When Then est un composant fondamental du dĂ©veloppement pilotĂ© par le comportement (BDD). Il structure les critĂšres d’acceptation de maniĂšre Ă imiter le langage naturel, ce qui le rend accessible aux parties prenantes non techniques tout en restant suffisamment dĂ©taillĂ© pour les tests automatisĂ©s. Chaque partie du modĂšle remplit une fonction distincte dans la dĂ©finition du cycle de vie d’un scĂ©nario.
- Given : Ătablit le contexte ou l’Ă©tat initial. Il prĂ©pare le terrain en dĂ©crivant les prĂ©conditions nĂ©cessaires avant que l’action ne se produise.
- When : DĂ©crit l’Ă©vĂ©nement ou l’action spĂ©cifique qui dĂ©clenche le comportement. Il s’agit de l’entrĂ©e ou du stimulus.
- Then : DĂ©finit le rĂ©sultat observable ou le rĂ©sultat attendu. Il vĂ©rifie que le systĂšme se comporte comme prĂ©vu aprĂšs l’action.
En sĂ©parant le contexte, l’action et le rĂ©sultat, les Ă©quipes peuvent isoler les variables et comprendre exactement quelle partie du systĂšme est responsable d’un comportement spĂ©cifique. Cette modularitĂ© rĂ©duit la complexitĂ© et rend le dĂ©bogage beaucoup plus facile.
đ DĂ©cortiquer les composants
đïž Le contexte « Given »
L’Ă©tape Given est souvent la plus nĂ©gligĂ©e, pourtant elle est cruciale pour dĂ©finir l’environnement appropriĂ©. Elle ne doit pas dĂ©crire l’action elle-mĂȘme, mais plutĂŽt l’Ă©tat du systĂšme. Une Ă©tape Given bien rĂ©digĂ©e rĂ©pond Ă la question : « Qu’est-ce qui doit ĂȘtre vrai avant de commencer ? »
Pensez aux subtilités lors de la rédaction de cette section :
- Ătat vs. DonnĂ©es : Distinct entre l’Ă©tat de l’application (par exemple, un utilisateur est connectĂ©) et les donnĂ©es prĂ©sentes (par exemple, l’utilisateur a un solde de 100 $).
- PrĂ©conditions : Liste toutes les prĂ©conditions nĂ©cessaires. Si un paiement Ă©choue en raison d’un solde insuffisant, l’Ă©tape Given doit s’assurer que le solde est effectivement vĂ©rifiĂ©.
- LisibilitĂ© : Gardez-le dĂ©claratif. Ăvitez les formulations impĂ©ratives comme « Cliquez sur le bouton ». PrivilĂ©giez plutĂŽt « L’utilisateur est sur le tableau de bord. »
Lorsque l’Ă©tape Given est ambiguĂ«, les tests Ă©chouent de maniĂšre imprĂ©visible. Si l’Ă©tat du systĂšme n’est pas clairement dĂ©fini, l’automatisation pourrait s’exĂ©cuter dans un environnement diffĂ©rent de celui prĂ©vu, entraĂźnant des faux nĂ©gatifs.
đ Le dĂ©clencheur « When »
L’Ă©tape When reprĂ©sente l’interaction. C’est le moment oĂč l’utilisateur ou le systĂšme dĂ©clenche un changement. Il doit s’agir d’une action unique et atomique. Si vous combinez plusieurs actions dans une seule Ă©tape When, il devient difficile d’isoler quelle partie du flux a causĂ© l’Ă©chec.
Les points clés à considérer pour la section When incluent :
- ResponsabilitĂ© unique : Concentrez-vous sur un seul Ă©vĂ©nement par scĂ©nario. Si vous devez tester une sĂ©quence d’Ă©vĂ©nements, envisagez de les diviser en scĂ©narios distincts ou d’utiliser des schĂ©mas de scĂ©nario (Scenario Outlines).
- Intention de l’utilisateur :Formulez l’action du point de vue de l’utilisateur ou de la frontiĂšre du systĂšme. « L’utilisateur soumet le formulaire » est prĂ©fĂ©rable à « Le bouton de soumission est cliquĂ©. »
- Moment :Ăvitez les termes vagues comme « bientĂŽt » ou « plus tard ». Soyez prĂ©cis sur le dĂ©clencheur.
đ Le rĂ©sultat « Alors »
L’Ă©tape « Alors » est le mĂ©canisme de vĂ©rification. Elle confirme que le systĂšme a rĂ©pondu correctement Ă l’Ă©tape « Quand ». C’est ici que la proposition de valeur est validĂ©e.
Les étapes « Alors » efficaces doivent :
- Ătre observable :VĂ©rifier quelque chose qui peut ĂȘtre vu ou mesurĂ©. VĂ©rifiez les Ă©lĂ©ments de l’interface utilisateur, les enregistrements de base de donnĂ©es ou les rĂ©ponses de l’API.
- Ăviter les dĂ©tails d’implĂ©mentation :Concentrez-vous sur le rĂ©sultat, pas sur la logique interne. « Le message de confirmation s’affiche » est prĂ©fĂ©rable à « L’ID de la base de donnĂ©es est incrĂ©mentĂ©. »
- Couvrir le succĂšs et l’Ă©chec :Assurez-vous de prĂ©ciser ce qui se passe si l’action Ă©choue. « Alors un message d’erreur est affichĂ© » est aussi important que « Alors la commande est passĂ©e. »
đ AmĂ©liorer la clartĂ© avec des donnĂ©es structurĂ©es
Pour amĂ©liorer la lisibilitĂ© et rĂ©duire les rĂ©pĂ©titions, les Ă©quipes utilisent souvent des tableaux dans leurs spĂ©cifications. Cela est particuliĂšrement utile lorsqu’on teste plusieurs variations du mĂȘme comportement avec des entrĂ©es de donnĂ©es diffĂ©rentes.
| Type de scénario | Objectif | Exemple |
|---|---|---|
| Chemin normal | Flux de succĂšs standard | Ătant donnĂ© des identifiants valides, lorsque la connexion est tentĂ©e, alors le tableau de bord est affichĂ©. |
| Cas limite | Conditions aux limites | Ătant donnĂ© un mot de passe de 8 caractĂšres, lorsque la rĂ©initialisation est demandĂ©e, alors le mot de passe est acceptĂ©. |
| Chemin nĂ©gatif | Gestion des erreurs | Ătant donnĂ© une session expirĂ©e, lorsque l’accĂšs est demandĂ©, alors une redirection vers la page de connexion a lieu. |
Utiliser cette structure permet aux parties prenantes de parcourir rapidement les exigences et de comprendre le périmÚtre couvert sans devoir lire des paragraphes denses de texte.
đ« PiĂšges courants Ă Ă©viter
MĂȘme avec un cadre solide, les Ă©quipes introduisent souvent des erreurs qui compromettent l’efficacitĂ© de la spĂ©cification. Identifier ces piĂšges tĂŽt garantit la durabilitĂ© de la documentation.
â MĂ©langes de prĂ©occupations
Une erreur frĂ©quente consiste Ă combiner des rĂšgles mĂ©tier avec des contraintes techniques dans la mĂȘme Ă©tape. Par exemple, dire « Ătant donnĂ© que la base de donnĂ©es est connectĂ©e » mĂ©lange l’infrastructure au comportement. Le systĂšme doit supposer que la connectivitĂ© est gĂ©rĂ©e Ă un niveau infĂ©rieur. Concentrez-vous sur le contexte mĂ©tier.
â Verbes vagues
Des mots comme « traiter », « gĂ©rer » ou « manipuler » sont trop vagues. Ils ne dĂ©finissent pas le rĂ©sultat. Au lieu de « Le systĂšme traite la commande », utilisez « Lâe-mail de confirmation de commande est envoyĂ© ». La prĂ©cision Ă©limine les erreurs dâinterprĂ©tation.
â Trop de scĂ©narios
Bien que les détails soient utiles, une sur-spécification crée une charge de maintenance. Si un scénario comporte vingt étapes « Given », il essaie probablement de faire trop de choses. Découpez-le en blocs de contexte plus petits et réutilisables.
â Couplage technique
NâĂ©crivez pas de scĂ©narios qui dĂ©pendent de dĂ©tails dâimplĂ©mentation spĂ©cifiques comme les noms de classes ou les schĂ©mas de base de donnĂ©es. Ces Ă©lĂ©ments changent frĂ©quemment et cassent inutilement les tests. Concentrez-vous sur le comportement observable.
đ„ Dynamiques de collaboration
Le pouvoir du Given When Then rĂ©side dans la collaboration quâil favorise. Ce nâest pas seulement un format de documentation ; câest un outil de facilitation pour aligner lâĂ©quipe.
- PropriĂ©taires de produit : Ils dĂ©finissent les rĂ©sultats « Then » en fonction de la valeur mĂ©tier. Ils sâassurent que le comportement rĂ©pond aux besoins des utilisateurs.
- Développeurs : Ils précisent le contexte « Given » pour comprendre les préconditions et les dépendances.
- SpĂ©cialistes QA : Ils valident les actions « When » pour sâassurer que le systĂšme rĂ©pond correctement et que les cas limites sont couverts.
Cette compréhension partagée réduit la dépendance vis-à -vis de la documentation isolée. Lorsque la spécification est rédigée dans un format partagé, chacun contribue à la qualité de la demande.
đ De la spĂ©cification Ă lâautomatisation
Lâun des principaux avantages de cette syntaxe est sa correspondance directe avec les cadres de test automatisĂ©. Bien que les outils spĂ©cifiques varient, la structure logique reste cohĂ©rente.
Lorsquâun scĂ©nario est rĂ©digĂ© clairement, il peut ĂȘtre traduit en code exĂ©cutable avec une friction minimale :
- DĂ©finitions dâĂ©tapes :Chaque phrase Given, When ou Then peut ĂȘtre mappĂ©e Ă une fonction dans la suite de tests.
- RĂ©utilisabilitĂ© :Les contextes courants (comme « Lâutilisateur est connectĂ© ») peuvent ĂȘtre dĂ©finis une fois et rĂ©utilisĂ©s dans plusieurs scĂ©narios.
- SĂ©curitĂ© contre les rĂ©gressions :Au fur et Ă mesure que lâapplication Ă©volue, ces scĂ©narios agissent comme un filet de sĂ©curitĂ©, garantissant que le nouveau code ne brise pas le comportement existant.
Cette intĂ©gration crĂ©e une source unique de vĂ©ritĂ©. Les critĂšres dâacceptation sont les tests, et les tests sont les critĂšres dâacceptation. Cette alignement garantit que ce qui est testĂ© est exactement ce qui a Ă©tĂ© convenu.
đ Exemples pratiques
Pour illustrer la différence entre une exigence standard et une spécification de comportement, examinons une fonctionnalité spécifique : une demande de réinitialisation de mot de passe.
â SpĂ©cification vague
« L’utilisateur doit pouvoir rĂ©initialiser son mot de passe s’il l’oublie. Le systĂšme doit envoyer un e-mail. »
Cela laisse trop de place Ă l’interprĂ©tation. Que se passe-t-il si l’adresse e-mail est invalide ? Et si l’utilisateur n’existe pas ? Le moment d’envoi de l’e-mail n’est pas dĂ©fini.
â SpĂ©cification Given When Then
Scénario : Demande de réinitialisation du mot de passe
Ătant donnĂ©l’utilisateur dispose d’un compte enregistrĂ© avec l’e-mail « [email protected] »
Lorsqueils soumettent le formulaire de réinitialisation avec cette adresse e-mail
Alorsun message de confirmation s’affiche Ă l’Ă©cran
Etun lien de réinitialisation est envoyé à « [email protected] »
Scénario : Réinitialisation avec une adresse e-mail inconnue
Ătant donnĂ©il n’existe aucun compte associĂ© à « [email protected] »
Lorsqueils soumettent le formulaire de réinitialisation
Alorsun message de succÚs générique est affiché
Etaucun e-mail n’est envoyĂ© Ă l’adresse fournie
Ces exemples montrent comment la sĂ©curitĂ© et l’utilisabilitĂ© sont traitĂ©es de maniĂšre explicite. Le deuxiĂšme scĂ©nario protĂšge la vie privĂ©e de l’utilisateur en ne rĂ©vĂ©lant pas si un compte existe, une considĂ©ration de sĂ©curitĂ© essentielle.
đĄïž ScĂ©narios pilotĂ©s par les donnĂ©es
Souvent, un seul comportement s’applique Ă plusieurs jeux de donnĂ©es. Ăcrire des scĂ©narios distincts pour chaque variation peut devenir rĂ©pĂ©titif. La solution consiste Ă utiliser des schĂ©mas de scĂ©narios.
Cette structure vous permet de définir le flux une fois et de le remplir avec différents points de données.
| Montant d’entrĂ©e | Solde attendu | Statut |
|---|---|---|
| $50 | $150 | SuccĂšs |
| $-10 | $100 | Erreur |
| $1000 | $1000 | Limite atteinte |
En définissant le flux avec des espaces réservés, vous préservez la lisibilité tout en assurant une couverture complÚte. Cette approche réduit la duplication et facilite les mises à jour. Si le flux change, vous mettez à jour le modÚle plutÎt que cinquante scénarios individuels.
đ Maintenance et Ă©volution
Les spécifications ne sont pas des artefacts statiques. Elles doivent évoluer avec la maturité du produit. Des revues réguliÚres sont nécessaires pour garantir que les étapes Given When Then restent précises.
Les meilleures pratiques pour la maintenance incluent :
- Réfactoring des étapes : Si une étape devient trop complexe, réorganisez-la en unités plus petites et significatives.
- Dépréciation : Supprimez les scénarios qui ne reflÚtent plus la logique métier actuelle.
- Gestion des versions : Suivez les modifications apportées aux scénarios pour comprendre comment les exigences ont évolué au fil du temps.
Investir du temps dans la maintenance de ces spĂ©cifications rapporte des dividendes en termes de rĂ©duction du nombre de bogues et d’adaptation plus rapide des nouveaux membres de l’Ă©quipe. Les nouveaux dĂ©veloppeurs peuvent lire les scĂ©narios pour comprendre le comportement du systĂšme sans avoir Ă fouiller dans le code.
đĄ RĂ©flexions finales sur les spĂ©cifications
RĂ©diger des spĂ©cifications claires est une discipline qui exige de la pratique et une attention aux dĂ©tails. Le modĂšle Given When Then fournit un cadre solide pour cette discipline. Il oblige les Ă©quipes Ă rĂ©flĂ©chir aux implications de leurs fonctionnalitĂ©s avant d’Ă©crire du code.
En vous concentrant sur le contexte, l’action et le rĂ©sultat, vous crĂ©ez un document vivant qui pilote le dĂ©veloppement et les tests. Il aligne l’Ă©quipe autour d’une dĂ©finition commune du terme « terminĂ© ». Cette alignement est la fondation d’une livraison de logiciel de haute qualitĂ©.
Souvenez-vous que l’objectif est la communication. Si un intervenant ne peut pas comprendre le scĂ©nario, celui-ci n’est pas prĂȘt. Utilisez cette structure pour favoriser le dialogue, clarifier les attentes et construire un logiciel qui rĂ©pond vraiment aux besoins des utilisateurs.











