5 min lecture • Guide 832 of 877
Workflow de Développement Piloté par les Tests
Les tests pilotent le design. GitScrum aide les équipes à suivre l'adoption TDD et mesurer l'impact des pratiques test-first sur la qualité et la vélocité.
Fondamentaux TDD
Le Cycle Rouge-Vert-Refactor
CYCLE TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ LE CYCLE: │
│ ───────── │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ │ │
│ │ ┌────────┐ │ │
│ │ │ ROUGE │ Écrire test échouant │ │
│ │ └───┬────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌────────┐ │ │
│ │ │ VERT │ Le faire passer │ │
│ │ └───┬────┘ (code minimal) │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌────────┐ │ │
│ └────┤REFACTOR│ Améliorer design │ │
│ └────────┘ (tests passent encore)│ │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ ÉTAPE 1 - ROUGE: │
│ Écrire un test pour comportement qui n'existe pas encore │
│ L'exécuter → Il échoue (prouve que le test marche) │
│ │
│ ÉTAPE 2 - VERT: │
│ Écrire juste assez de code pour passer le test │
│ Pas de sur-ingénierie, pas d'optimisation │
│ Juste le faire marcher │
│ │
│ ÉTAPE 3 - REFACTOR: │
│ Maintenant améliorer le code │
│ Supprimer duplication, clarifier noms, améliorer design │
│ Les tests assurent que vous n'avez rien cassé │
│ │
│ RÉPÉTER pour chaque petit morceau de comportement │
└─────────────────────────────────────────────────────────────┘
Exemple de Workflow
TDD en Pratique
EXEMPLE TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ FEATURE: Calculer total commande avec remise │
│ │
│ ─────────────────────────────────────────────────────────── │
│ │
│ ÉTAPE 1 - ROUGE (Écrire test échouant): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ test('calcule total avec remise 10%', () => { ││
│ │ const order = new Order([ ││
│ │ { price: 100 }, ││
│ │ { price: 50 } ││
│ │ ]); ││
│ │ order.applyDiscount(0.1); ││
│ │ expect(order.total()).toBe(135); ││
│ │ }); ││
│ │ ││
│ │ EXÉCUTION → ❌ ÉCHEC (Order n'existe pas) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ÉTAPE 2 - VERT (Le faire passer): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ class Order { ││
│ │ constructor(items) { ││
│ │ this.items = items; ││
│ │ this.discount = 0; ││
│ │ } ││
│ │ ││
│ │ applyDiscount(rate) { ││
│ │ this.discount = rate; ││
│ │ } ││
│ │ ││
│ │ total() { ││
│ │ const subtotal = this.items.reduce( ││
│ │ (sum, item) => sum + item.price, 0 ││
│ │ ); ││
│ │ return subtotal * (1 - this.discount); ││
│ │ } ││
│ │ } ││
│ │ ││
│ │ EXÉCUTION → ✅ PASSE ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ÉTAPE 3 - REFACTOR (Améliorer): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Extraire calcul sous-total ││
│ │ • Ajouter validation ││
│ │ • Améliorer nommage ││
│ │ • Exécuter tests → Passent encore ✅ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ SUIVANT: Écrire autre test pour comportement suivant │
│ (ex: remise maximum, prix négatifs, etc.) │
└─────────────────────────────────────────────────────────────┘
Bénéfices
Pourquoi le TDD Fonctionne
BÉNÉFICES TDD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ BÉNÉFICES DESIGN: │
│ • Force à penser à l'interface d'abord │
│ • Mène à code modulaire, testable │
│ • Attrape problèmes design tôt │
│ • Résulte en designs plus simples │
│ │
│ BÉNÉFICES QUALITÉ: │
│ • Bugs attrapés immédiatement │
│ • Haute couverture de tests naturellement │
│ • Protection régression │
│ • Confiance pour refactorer │
│ │
│ SANS TDD: │
│ Écrire code → Tester après → Trouver bugs → Debug → Fix │
│ │
│ AVEC TDD: │
│ Écrire test → Écrire code → Test passe → Refactor → Fait │
└─────────────────────────────────────────────────────────────┘