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 pubblica sul suo blog personale il 7 dicembre 2022 (ultimo aggiornamento 17 marzo 2025) una controargomentazione punto per punto al celebre saggio di David Heinemeier Hansson (DHH) *"TDD is dead.
#Mathieu Eveillard#TDD#Test-Driven Development#Controargomentazione a DHH#David Heinemeier Hansson#TDD is dead long live testing 2014#Distinzione tra Test-first e Test-Driven Development#unit test di basso livello
Mathieu Eveillard pubblica il 7 dicembre 2022 (ultimo aggiornamento 17 marzo 2025) sul suo blog personale una controargomentazione punto per punto al celebre saggio di David Heinemeier Hansson (DHH) "TDD is dead. Long live testing." (2014). Articolo classificato craft / best-of.
Distinzione cruciale che secondo Eveillard sfugge a DHH: Test-first (scrivere tutti i test prima di qualsiasi codice) vs Test-Driven Development (i test mi guidano nella scrittura del codice, ogni volta scrivo un po' di codice in reazione a un nuovo test). DHH in realtà critica il Test-first chiamandolo TDD — una confusione che "nasconde un modo di programmare completamente diverso".
Tre confutazioni: (1) TDD come martello per abbattere i non credenti — Eveillard concede il punto deontologico ma ridefinisce il "buon codice" come unit test a grana fine, collocati insieme al codice, una rete di sicurezza; (2) Riequilibrare dallo unit al system — il TDD non dice nulla sui test di sistema e non afferma che non esista nulla al di fuori del TDD; i test di sistema non sostituiscono gli unit test (una dichiarazione dei redditi testata end-to-end = assurdo); piramide dei test — gli unit test per un feedback in millisecondi + individuazione precoce dei bug; (3) Mostruosità architetturali orrende (service object, command pattern) — Eveillard non riscontra questi effetti nella programmazione funzionale, quindi è attribuibile all'OOP, non al TDD.
Conclusione equilibrata: "Il TDD non è una religione, è uno strumento." Il TDD è particolarmente adatto al codice di dominio (il nucleo funzionale di un bounded context, il cuore dell'esagono) — motori di calcolo, regole di business a grana fine, casi limite ovunque — ovvero "al massimo il 30% della codebase". Cita la Legge dello Strumento (se lo strumento non aiuta, è perché si è caduti nella trappola del martello).
Rilevanza per il corpus di veille IA: un articolo di craft esterno al corpus IA in senso stretto ma che risuona con Kent Beck (Vibe Coding vs TDD 2024-10 + Augmented Coding 2025-06), l'atrofia del muscolo della scrittura di Frizzo, il Cognitive Surrender di Osmani (PR limitate a 100 righe + tempo solitario alla tastiera), Lattice (granularità fine atomi/molecole). Convergenza etica su "strumento, non religione" con Karpathy (jagged intelligence), DORA ("tutti i modelli sono sbagliati ma utili"), Talisman ("il lavoro non può essere saltato"). Convergenza sull'ambito limitato con il 35-40% greenfield vs ≤10% brownfield di Stanford e il Frontend > Backend > Infra > Research di Ng.
Da utilizzare per sessioni di formazione craft interne, dibattiti di team sul TDD, collegamento con il corpus 2026 sugli agenti di codifica, per attingere a un aforisma sintetico.
Punti chiave
Data / fonte.7 dicembre 2022 (iniziale), 17 marzo 2025 (ultimo aggiornamento). Blog personale mathieueveillard.com. Categorie: craft, best-of.
Bersaglio. DHH, "TDD is dead. Long live testing." (RailsConf 2014, post su Signal v Noise).
Tesi cruciale.il TDD non è una religione, è uno strumento. E DHH in realtà critica il Test-first, non il TDD. ### La distinzione cruciale di Eveillard | Concetto | Definizione | |---------|-----------| | Test-first | Scrivo tutti i test prima di scrivere una sola riga di codice | | Test-Driven Development | I test mi guidano nella scrittura del codice — ogni volta scrivo un po' di codice in reazione a un nuovo test | > "È un peccato che questa confusione non venga mai chiarita, perché nasconde un modo di programmare completamente diverso." ### Le 3 confutazioni punto per punto #### (1) "Il TDD come martello per abbattere i non credenti"DHH: il TDD usato come martello per puntare il dito contro i non credenti, per dichiararli non professionali. Eveillard concede: non ha senso puntare il dito, in contrasto con l'umiltà dell'artigiano. Ma ridefinisce il "buon codice":
Al di là dell'assenza di bug;
Unit test. che documentano il comportamento al livello più basso;
Collocati insieme. al codice;
Rete di sicurezza. — "Più la maglia è fine, meglio si evitano le regressioni". #### (2) "Riequilibrare lo spettro dei test dallo unit al system"DHH: spostamento dagli unit test (con mock) ai test di sistema. Eveillard risponde:
Il TDD non vieta nulla al di là degli unit test.
I test di sistema non sostituiscono gli unit test (una dichiarazione dei redditi testata end-to-end = assurdo).
Piramide dei test. — ogni tipo contribuisce con il proprio valore:
Unit test = feedback in millisecondi → guida la scrittura del codice tramite il TDD;
Individuazione precoce dei bug → costo inferiore. Sull'architettura: "mostruosità orrende (service object, command pattern)" — Eveillard non riscontra questi effetti nella programmazione funzionale, quindi è attribuibile all'OOP, non al TDD. #### (3) "Non scrivo software test-first"DHH: usa "Test first" pur annunciando il TDD nel titolo. Eveillard individua nella confusione semantica tra Test-first e TDD il difetto fondamentale dell'argomentazione di DHH. ### L'ambito ragionevole del TDD > "Il TDD è particolarmente adatto al codice di dominio, il nucleo funzionale di un bounded context. Il cuore dell'esagono, il cuore del reattore. Un motore di calcolo, regole di business a grana fine, casi limite ovunque. Lì, non so come fare altrimenti che con il TDD. Ma alla fine, questo rappresenta solo una piccola parte della codebase, al massimo il 30%." | Codice | TDD rilevante? | |------|----------------| | Dominio / regole di business / motore di calcolo | FORTEMENTE SÌ | | Codice di collegamento / orchestrazione / IO | Meno rilevante | | UI / boilerplate del framework | Non necessario | | Stima di Eveillard | Al massimo il 30% della codebase | ### Collegamento con il corpus di veille #### Rilevanza per il corpus IA / agenti di codifica 2025-2026 L'articolo è del 2022 (quindi prima dell'esplosione degli agenti di codifica) ma risuona con i dibattiti attuali:
Kent Beck — Vibe Coding vs TDD. (2024-10-17): Beck osserva che il vibe coding e il TDD non si escludono a vicenda — il TDD rimane rilevante per il codice di dominio, esattamente la posizione di Eveillard.
Beck — Augmented Coding Beyond Vibes. (2025-06-25): la posizione di "augmented coding" si basa su guardrail (test) che il TDD fornisce naturalmente.
Frizzo.Year With Claude Code (2026-05-05): "atrofia del muscolo della scrittura" — mantenere una pratica di TDD è proprio un antidoto all'atrofia della pratica manuale.
Osmani Cognitive Surrender. (2026-05-05): "PR ~100 righe max", tempo solitario alla tastiera — converge con l'idea di Eveillard secondo cui il TDD mantiene lo sviluppatore all'interno della pratica metodologica del mestiere.
Lattice. (2026-05-05): Atoms / Molecules / Refiners — granularità fine, esattamente ciò che il TDD incoraggia. #### Convergenza "strumento, non religione"
Eveillard."Il TDD non è una religione, è uno strumento."
Karpathy. (2026-04-29): "jagged intelligence" — uno strumento con limiti di efficacia.
DORA ROI 2026. (2026-04-21): "tutti i modelli sono sbagliati ma utili" — umiltà metodologica.
Talisman Ontology Pipeline Refresh. (2026-05-04): "il lavoro non può essere saltato" — la metodologia come strumento disciplinare.
→ Convergenza etica: rifiuto sia del dogmatismo SIA del rigetto di uno strumento metodologico. #### Convergenza sull'"ambito limitato"
Eveillard. TDD = al massimo il 30% della codebase (codice di dominio).
Stanford. (citato da DORA): produttività 35-40% greenfield vs ≤10% brownfield — distribuzione disomogenea in base al contesto.
Ng The Batch #350. (2026-04-24): Frontend > Backend > Infra > Research — accelerazione differenziata in base al contesto.
→ Convergenza: nessuno strumento metodologico è universalmente applicabile — occorre sempre valutare l'ambito pertinente. ### Limiti da segnalare
Articolo esterno al corpus IA. in senso stretto — focus su craft / TDD storico. Rilevante indirettamente.
Nessun dato empirico. — argomentazione concettuale, non uno studio.
Nessun confronto con gli agenti di codifica. nella versione del 2025 (l'aggiornamento di marzo 2025 non sembra aver incorporato il dibattito su IA/agenti).
L'ambito del 30% è una stima non documentata da Eveillard — discutibile a seconda del contesto (un compilatore potrebbe essere all'80% dominio).
Impostazione fortemente orientata a FP/esagonale. — può apparire dogmatica agli sviluppatori fortemente radicati in OOP/Rails.
Non affronta. il dibattito sull'impatto del CI/CD sulla strategia di test che altri autori (in particolare DORA) considerano cruciale. ### Da utilizzare per
Sessioni di formazione interne craft / TDD. materiale didattico di riferimento in lingua francese.
Dibattiti di team sul TDD. argomentazione strutturata per chiarire Test-first vs TDD.
Collegamento con il corpus 2026 sugli agenti di codifica. collocare i dibattiti attuali (vibe coding, agenti, AI-augmented) nella continuità storica dei dibattiti craft.
Sourcing. l'aforisma "il TDD non è una religione, è uno strumento" — una formula sintetica utilizzabile.
Affermazioni attribuite
il TDD non è una religione, è uno strumento
— Mathieu Eveillard
DHH critica il Test-first chiamandolo TDD
— Mathieu Eveillard
i test di sistema non sostituiscono i test unitari
— Mathieu Eveillard
il codice di dominio rilevante per il TDD rappresenta al massimo il 30% della codebase
— Mathieu Eveillard
Il grafo di conoscenza estratto da questa fiche — 12 entità, 16 relazioni.
In questo grafo :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