Workflow de Développement Piloté par les Tests
Implémentez le développement piloté par les tests dans votre équipe. Écrivez les tests d'abord, concevez un meilleur code et construisez la confiance dans vos changements.
5 min de lecture
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 │
└─────────────────────────────────────────────────────────────┘