ATDD — Acceptance Test-Driven Development¶
Définir les tests d'acceptation avant le développement — la collaboration trilaterale PO/Dev/QA.
Le principe¶
ATDD place le test d'acceptation au centre du processus de développement. Avant d'écrire une seule ligne de code, l'équipe définit ensemble les critères qui prouveront que la fonctionnalité est terminee.
graph LR
A["Definir les tests<br/>d'acceptation"] --> B["Developper"]
B --> C["Executer les tests"]
C -->|"echouent"| B
C -->|"passent"| D["Feature terminee"] Différence avec BDD¶
| Aspect | ATDD | BDD |
|---|---|---|
| Focus | Critères d'acceptation | Comportement utilisateur |
| Format | Libre (tableaux, scripts, Gherkin) | Gherkin (Given/When/Then) |
| Qui définit | PO avec Dev et QA | Toute l'équipe en conversation |
| Granularité | Feature complète | Scenario par scenario |
| Objectif | Savoir quand c'est "fini" | Comprendre le comportement attendu |
ATDD et BDD sont complementaires
ATDD définit quand la feature est terminee (critères d'acceptation). BDD décrit comment elle se comporte (scenarios Gherkin). Beaucoup d'équipes combinent les deux.
La collaboration trilaterale¶
graph TD
PO["Product Owner<br/>Definit les criteres metier"]
DEV["Developpeur<br/>Identifie les contraintes techniques"]
QA["QA<br/>Trouve les cas limites et les risques"]
PO --- TA["Tests d'acceptation"]
DEV --- TA
QA --- TA Le rôle de chacun¶
| Rôle | Contribution |
|---|---|
| PO | "La feature est terminee quand X fonctionne pour l'utilisateur" |
| Dev | "Attention, le cas Y implique une latence — on accepte combien ?" |
| QA | "Que se passe-t-il si Z échoué ? Et en cas de données invalides ?" |
Le processus¶
- Atelier de définition : avant le sprint, l'équipe se reunit pour chaque user story
- Rédaction des tests : écrire les tests d'acceptation sous forme de tableaux ou de scenarios
- Développement : le développeur code en visant les tests d'acceptation
- Vérification : les tests d'acceptation sont exécutés — automatiquement ou manuellement
- Validation : le PO confirme que les critères sont remplis
Format des tests d'acceptation¶
Tableaux décision¶
Feature : Calcul de remise
| Montant panier | Client fidele | Remise attendue |
| -------------- | ------------- | --------------- |
| < 50€ | Non | 0% |
| < 50€ | Oui | 5% |
| >= 50€ | Non | 10% |
| >= 50€ | Oui | 15% |
Critères textuels¶
Feature : Inscription utilisateur
Criteres d'acceptation :
- [ ] L'utilisateur peut s'inscrire avec email + mot de passe
- [ ] Le mot de passe doit contenir au moins 8 caracteres, 1 majuscule, 1 chiffre
- [ ] Un email de confirmation est envoye dans les 30 secondes
- [ ] Un compte en doublon affiche "Cet email est deja utilise"
- [ ] L'utilisateur ne peut pas se connecter tant que l'email n'est pas confirme
Scenarios Gherkin¶
Les tests d'acceptation ATDD peuvent aussi être écrits en Gherkin (convergence avec BDD) :
Feature: Calcul de remise
Scenario: Client fidele avec panier >= 50€
Given un client marque comme "fidele"
And un panier de 75€
When le systeme calcule la remise
Then la remise appliquee est de 15%
Automatisation¶
Avec Robot Framework¶
Robot Framework est particulièrement adapté a ATDD grâce à son format tabulaire lisible par les non-techniques :
*** Settings ***
Library Browser
*** Test Cases ***
Client fidele avec gros panier obtient 15% de remise
[Documentation] Critere d'acceptation : remise 15% pour fideles >= 50€
Given un client fidele connecte
And un panier de 75 euros
When le systeme calcule la remise
Then la remise affichee est 15 pourcent
*** Keywords ***
un client fidele connecte
New Browser chromium headless=true
New Page ${BASE_URL}/login
Fill Text id=email fidele@example.com
Fill Text id=password P@ssw0rd!
Click id=submit
Avec FitNesse¶
FitNesse utilise des tableaux wiki editables par le PO :
| Calcul Remise |
| montant | client fidele | remise? |
| 30 | false | 0 |
| 30 | true | 5 |
| 75 | false | 10 |
| 75 | true | 15 |
Le développeur implémenté une "fixture" qui connecte le tableau au code :
public class CalculRemise {
private int montant;
private boolean clientFidele;
public void setMontant(int montant) { this.montant = montant; }
public void setClientFidele(boolean fidele) { this.clientFidele = fidele; }
public int remise() {
if (montant >= 50 && clientFidele) return 15;
if (montant >= 50) return 10;
if (clientFidele) return 5;
return 0;
}
}
ATDD dans le cycle de vie¶
graph LR
US["User Story"] --> AT["Atelier ATDD<br/>Criteres d'acceptation"]
AT --> TDD["TDD<br/>Implementation"]
TDD --> BDD["BDD<br/>Scenarios"]
BDD --> ACC["Tests d'acceptation<br/>passes ?"]
ACC -->|"oui"| DONE["Done"]
ACC -->|"non"| TDD ATDD encadre le développement de bout en bout :
- Les tests d'acceptation définissent le "done"
- BDD détaillé les scenarios de comportement
- TDD guide l'implémentation technique
- Les tests d'acceptation valident la fin
Outils¶
| Outil | Description | Lien |
|---|---|---|
| Robot Framework | Framework ATDD avec syntaxe tabulaire lisible | robotframework.org |
| FitNesse | Wiki executable avec tableaux de décision | fitnesse.org |
| Concordion | Spécifications executables en HTML pour Java | concordion.org |
| Cucumber | Peut servir pour ATDD quand les scenarios sont écrits comme critères d'acceptation | cucumber.io |