TDD is dead. Long live testing. (Une contre-argumentation point à point à l'article phare de David Heinemeier Hansson, détracteur du Test-driven development)
Mathieu Eveillard publie sur son blog personnel le 7 décembre 2022 (dernière mise à jour 17 mars 2025) une contre-argumentation point à point au célèbre essai de David Heinemeier Hansson (DHH) *"TDD is dead.
#Mathieu Eveillard#TDD#Test-driven development#contre-argumentation DHH#David Heinemeier Hansson#TDD is dead long live testing 2014#Test-first vs Test-driven development distinction#tests unitaires bas niveau
Mathieu Eveillard publie le 7 décembre 2022 (dernière mise à jour 17 mars 2025) sur son blog personnel une contre-argumentation point à point à l'essai célèbre de David Heinemeier Hansson (DHH) "TDD is dead. Long live testing." (2014). Article catégorisé craft / best-of.
Distinction-pivot que DHH manque selon Eveillard : Test-first (écrire tous les tests avant le moindre code) vs Test-Driven Development (les tests me guident dans l'écriture du code, j'écris à chaque fois un peu de code en réaction à un nouveau test). DHH critique en réalité le Test-first en l'appelant TDD — confusion qui "cache une tout autre façon de programmer".
Trois réfutations : (1) TDD as hammer to beat down the nonbelievers — Eveillard concède le point déontologique mais redéfinit "bon code" comme tests unitaires fins, co-localisés, filet de sécurité ; (2) Rebalance from unit to system — TDD ne dit rien des tests système et ne dit pas qu'il n'y a rien en dehors du TDD ; tests système ne remplacent pas unitaires (impôt sur le revenu en e2e = absurde) ; pyramide de tests — unitaires pour feedback millisecondes + détection bug précoce ; (3) Horrendous monstrosities of architecture (service objects, command patterns) — Eveillard ne connaît pas ces effets en programmation fonctionnelle, donc imputable à la POO pas au TDD.
Conclusion équilibrée : "Le TDD n'est pas une religion, c'est un outil." Le TDD se prête particulièrement bien au code du domaine (noyau fonctionnel d'un bounded context, cœur de l'hexagone) — moteur de calcul, règles de gestion fines, cas limites — soit "30% au plus de la codebase". Mention de la Loi de l'Instrument (si l'outil n'aide pas, c'est qu'on est tombé dans le piège du marteau).
Pertinence dossier veille IA : article craft hors-corpus IA stricto sensu mais résonne avec Kent Beck (Vibe Coding vs TDD 2024-10 + Augmented Coding 2025-06), Frizzowriting muscle atrophy, Osmani Cognitive Surrender (PRs 100 lignes max + solo keyboard time), Lattice (granularité fine atoms/molecules). Convergence éthique "outil pas religion" avec Karpathy (jagged intelligence), DORA ("all models are wrong but useful"), Talisman ("the work cannot be skipped"). Convergence périmètre limité avec Stanford 35-40% greenfield vs ≤10% brownfield et NgFrontend > Backend > Infra > Recherche*.
À mobiliser pour formations craft internes, débats équipe sur TDD, articulation avec corpus 2026 coding agents, sourcing aphorisme synthétique.
À retenir
Date / source.7 décembre 2022 (initial), 17 mars 2025 (dernière mise à jour). Blog personnel mathieueveillard.com. Catégories : craft, best-of.
Cible. DHH, "TDD is dead. Long live testing." (RailsConf 2014, post Signal v Noise).
Thèse-pivot.Le TDD n'est pas une religion, c'est un outil. Et DHH critique en réalité le Test-first, pas le TDD. ### La distinction-pivot Eveillard | Concept | Définition | |---------|-----------| | Test-first | J'écris tous les tests avant d'écrire la moindre ligne de code | | Test-Driven Development | Les tests me guident dans l'écriture du code — j'écris à chaque fois un peu de code en réaction à un nouveau test | > "Dommage que cette confusion ne soit jamais levée, car elle cache une tout autre façon de programmer." ### Les 3 réfutations point à point #### (1) "TDD as a hammer to beat down the nonbelievers"DHH : TDD utilisé comme marteau pour montrer du doigt les non-croyants, les déclarer non-professionnels. Eveillard concède : pas de sens à montrer du doigt, oppose à l'humilité de l'artisan. Mais redéfinit "bon code" :
Au-delà de l'absence de bugs ;
Tests unitaires. documentant le comportement au plus bas niveau ;
Co-localisés. avec le code ;
Filet de sécurité. — "Plus les mailles sont fines, mieux on évite les régressions". #### (2) "Rebalance the testing spectrum from unit to system"DHH : passer des tests unitaires (avec mocks) aux tests système. Eveillard répond :
TDD n'interdit rien d'autre que les tests unitaires.
Tests système ne remplacent pas les unitaires (impôt sur le revenu en e2e = absurde).
Pyramide de tests. — chaque type apporte sa valeur :
Unitaires = feedback en millisecondes → guide l'écriture du code par TDD ;
Détection bug précoce → moindre coût. Sur l'architecture : "horrendous monstrosities (service objects, command patterns)" — Eveillard ne connaît pas ces effets en programmation fonctionnelle, donc imputable à la POO, pas au TDD. #### (3) "I do not write software test-first"DHH : utilise "Test first" alors que titre annonce TDD. Eveillard pointe la confusion sémantique Test-first / TDD comme l'erreur fondamentale de l'argumentaire DHH. ### Le périmètre raisonnable du TDD > "Le TDD se prête particulièrement bien au code du domaine, le noyau fonctionnel d'un bounded context. Le coeur de l'hexagone, le coeur du réacteur. Un moteur de calcul, des règles de gestion fines, des cas limites à tout-va. Là, je ne sais pas faire autrement qu'en TDD. Mais au final, cela ne représente qu'une petite partie de la codebase, 30% au plus." | Code | TDD pertinent ? | |------|----------------| | Domaine / règles métier / moteur calcul | OUI fortement | | Glue code / orchestration / IO | Moins | | UI / framework boilerplate | Pas obligatoire | | Estimation Eveillard | 30% codebase max | ### Articulation dossier veille #### Pertinence pour le corpus IA / coding agents 2025-2026 L'article est de 2022 (donc avant l'explosion coding agents) mais résonne avec les débats actuels :
Kent Beck — Vibe Coding vs TDD. (2024-10-17) : Beck observe que vibe coding et TDD ne s'excluent pas — le TDD reste pertinent pour le code du domaine, exactement la position Eveillard.
Beck — Augmented Coding Beyond Vibes. (2025-06-25) : la position "augmented coding" repose sur des garde-fous (tests) que TDD fournit naturellement.
Frizzo.Year With Claude Code (2026-05-05) : "writing muscle atrophy" — préserver une pratique de TDD est précisément un antidote à l'atrophie de la pratique manuelle.
Osmani Cognitive Surrender. (2026-05-05) : "PRs ~100 lignes max", solo keyboard time — converge avec l'idée Eveillard que le TDD garde le développeur dans la pratique méthodologique du métier.
Lattice. (2026-05-05) : Atoms / Molecules / Refiners — granularité fine, exactement ce que TDD encourage. #### Convergence "outil pas religion"
Eveillard."Le TDD n'est pas une religion, c'est un outil."
Karpathy. (2026-04-29) : "jagged intelligence" — outil avec frontières d'efficacité.
DORA ROI 2026. (2026-04-21) : "all models are wrong but useful" — humilité méthodologique.
Talisman Ontology Pipeline Refresh. (2026-05-04) : "the work cannot be skipped" — méthodologie comme outil disciplinaire.
→ Convergence éthique : refuser le dogmatisme ET le rejet d'un outil méthodologique. #### Convergence "périmètre limité"
Eveillard. TDD = 30% codebase max (code domaine).
Stanford. (citée DORA) : 35-40% productivity greenfield vs ≤10% brownfield — distribution inégale par contexte.
Ng The Batch n°350. (2026-04-24) : Frontend > Backend > Infra > Recherche — acceleration différentielle par contexte.
→ Convergence : aucun outil méthodologique n'est universellement applicable — toujours évaluer le périmètre pertinent. ### Limites à signaler
Pas de chiffres empiriques. — argumentation conceptuelle, pas étude.
Pas d'engagement avec coding agents. dans la version 2025 (la mise à jour mars 2025 ne semble pas avoir intégré le débat IA/agents).
Périmètre 30%. est une estimation non sourcée par Eveillard — discutable selon contexte (un compilateur peut être 80% domaine).
Frame fortement orienté FP/hexagonal. — peut paraître dogmatique pour les développeurs fortement OOP/Rails.
N'aborde pas. le débat CI/CD impact testing strategy que d'autres auteurs (DORA notamment) jugent critique. ### À mobiliser pour
Formations craft / TDD internes. matériel pédagogique français de référence.
Débats équipe sur TDD. argumentaire structuré pour clarifier Test-first vs TDD.
Articulation avec corpus 2026 coding agents. positionner les débats actuels (vibe coding, agents, AI-augmented) dans la continuité historique des débats craft.
Sourcing. aphorisme "Le TDD n'est pas une religion, c'est un outil" — formule synthétique mobilisable.
Affirmations attribuées
le TDD n'est pas une religion, c'est un outil
— Mathieu Eveillard
DHH critique Test-first en l'appelant TDD
— Mathieu Eveillard
les tests système ne remplacent pas les tests unitaires
— Mathieu Eveillard
le code domaine TDD-pertinent représente 30% de la codebase au plus
— Mathieu Eveillard
Le graphe de connaissance extrait de cette fiche — 12 entités, 16 relations.
Dans ce graphe :Mathieu Eveillard · David Heinemeier Hansson (DHH) · Test-Driven Development · Test-first · "Le TDD n'est pas une religion, c'est un outil" · Pyramide de tests · Code domaine / bounded context / cœur hexagone · Loi de l'Instrument · 30% codebase max TDD · Article DHH 2014 "TDD is dead" · craft / artisanat logiciel · Articulation TDD / coding agents 2026