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 veröffentlicht am **7.
Von **Mathieu Eveillard** — développeur / coach craft / formateur// Quelle mathieueveillard.com ↗/Lesezeit 2 min/.md// Automatisch geprüfte Übersetzung
#Mathieu Eveillard#TDD#Test-Driven Development#DHH-Gegenargumentation#David Heinemeier Hansson#TDD is dead long live testing 2014#Unterscheidung Test-first vs. Test-Driven Development#feingranulare Unit-Tests
Mathieu Eveillard veröffentlicht am 7. Dezember 2022 (letzte Aktualisierung 17. März 2025) auf seinem persönlichen Blog eine punktweise Gegenargumentation zum berühmten Essay von David Heinemeier Hansson (DHH) "TDD is dead. Long live testing." (2014). Artikel kategorisiert als craft / best-of.
Zentrale Unterscheidung, die DHH laut Eveillard entgeht: Test-first (alle Tests vor jeglichem Code schreiben) vs. Test-Driven Development (Tests leiten mich beim Schreiben von Code an, jedes Mal schreibe ich ein Stück Code als Reaktion auf einen neuen Test). DHH kritisiert tatsächlich Test-first, nennt es jedoch TDD — eine Verwechslung, die "eine völlig andere Art zu programmieren verdeckt".
Drei Erwiderungen: (1) TDD als Hammer, um Ungläubige niederzuschlagen — Eveillard räumt den deontologischen Punkt ein, definiert aber "guten Code" neu als feingranulare, direkt beim Code angesiedelte Unit-Tests, ein Sicherheitsnetz; (2) Verschiebung vom Unit- zum System-Test — TDD sagt nichts über System-Tests aus und behauptet nicht, dass es außerhalb von TDD nichts gebe; System-Tests ersetzen Unit-Tests nicht (eine Ende-zu-Ende getestete Steuererklärung = absurd); Testpyramide — Unit-Tests für Feedback im Millisekundenbereich + frühe Fehlererkennung; (3) Horrende Architektur-Monstrositäten (Service Objects, Command Patterns) — Eveillard beobachtet diese Effekte nicht in der funktionalen Programmierung, sodass sie eher der OOP zuzuschreiben sind, nicht TDD.
Ausgewogenes Fazit: "TDD ist keine Religion, sondern ein Werkzeug." TDD eignet sich besonders gut für Domain-Code (den funktionalen Kern eines Bounded Context, den Kern des Hexagons) — Berechnungs-Engines, feingranulare Geschäftsregeln, jede Menge Grenzfälle — also "höchstens 30 % der Codebasis". Erwähnt das Gesetz des Instruments (wenn das Werkzeug nicht hilft, liegt es daran, dass man in die Hammerfalle getappt ist).
Relevanz für den KI-Veille-Corpus: ein Craft-Artikel, der streng genommen außerhalb des KI-Corpus liegt, aber Resonanz zeigt mit Kent Beck (Vibe Coding vs TDD 2024-10 + Augmented Coding 2025-06), Frizzoswriting muscle atrophy, OsmanisCognitive Surrender (PRs auf 100 Zeilen begrenzt + Solo-Keyboard-Zeit), Lattice (feine Granularität Atoms/Molecules). Ethische Konvergenz zu "Werkzeug, keine Religion" mit Karpathy (jagged intelligence), DORA ("all models are wrong but useful"), Talisman ("the work cannot be skipped"). Konvergenz beim begrenzten Anwendungsbereich mit Stanfords 35–40 % Greenfield vs. ≤10 % Brownfield und NgsFrontend > Backend > Infra > Research.
Zu verwenden für interne Craft-Schulungen, Team-Debatten zu TDD, Verknüpfung mit dem Coding-Agenten-Corpus 2026, als Quelle für einen prägnanten Aphorismus.
Kernpunkte
Datum / Quelle.7. Dezember 2022 (ursprünglich), 17. März 2025 (letzte Aktualisierung). Persönlicher Blog mathieueveillard.com. Kategorien: craft, best-of.
Zielscheibe. DHH, "TDD is dead. Long live testing." (RailsConf 2014, Signal v Noise-Beitrag).
Zentrale These.TDD ist keine Religion, sondern ein Werkzeug. Und DHH kritisiert tatsächlich Test-first, nicht TDD. ### Eveillards zentrale Unterscheidung | Konzept | Definition | |---------|-----------| | Test-first | Ich schreibe alle Tests, bevor ich eine einzige Zeile Code schreibe | | Test-Driven Development | Tests leiten mich beim Schreiben von Code an — jedes Mal schreibe ich ein Stück Code als Reaktion auf einen neuen Test | > "Es ist schade, dass diese Verwechslung nie aufgeklärt wird, denn sie verdeckt eine völlig andere Art zu programmieren." ### Die 3 punktweisen Widerlegungen #### (1) "TDD als Hammer, um Ungläubige niederzuschlagen"DHH: TDD wird als Hammer benutzt, um auf Ungläubige zu zeigen, sie für unprofessionell zu erklären. Eveillard räumt ein: Es bringt nichts, mit dem Finger zu zeigen, das widerspricht der Demut des Craftsman. Definiert aber "guten Code" neu:
Über die reine Abwesenheit von Bugs hinaus;
Unit-Tests. , die das Verhalten auf niedrigster Ebene dokumentieren;
Direkt beim Code angesiedelt. (co-located);
Sicherheitsnetz. — "Je feiner die Maschen, desto besser werden Regressionen vermieden". #### (2) "Das Testspektrum vom Unit- zum System-Test verschieben"DHH: Verlagerung von Unit-Tests (mit Mocks) hin zu System-Tests. Eveillard entgegnet:
TDD verbietet nichts, was über Unit-Tests hinausgeht.
System-Tests ersetzen Unit-Tests nicht (eine Ende-zu-Ende getestete Steuererklärung = absurd).
Testpyramide. — jeder Typ trägt seinen eigenen Wert bei:
Unit-Tests = Feedback im Millisekundenbereich → leitet das Schreiben von Code via TDD an;
Frühe Fehlererkennung → geringere Kosten. Zur Architektur: "horrende Monstrositäten (Service Objects, Command Patterns)" — Eveillard beobachtet diese Effekte nicht in der funktionalen Programmierung, sodass sie eher der OOP zuzuschreiben sind, nicht TDD. #### (3) "Ich schreibe Software nicht test-first"DHH: verwendet "Test first", obwohl der Titel TDD ankündigt. Eveillard verweist auf die semantische Verwechslung zwischen Test-first und TDD als grundlegenden Fehler in DHHs Argumentation. ### Der angemessene Anwendungsbereich von TDD > "TDD eignet sich besonders gut für Domain-Code, den funktionalen Kern eines Bounded Context. Den Kern des Hexagons, den Kern des Reaktors. Eine Berechnungs-Engine, feingranulare Geschäftsregeln, überall Grenzfälle. Dort weiß ich nicht, wie ich es anders machen sollte als mit TDD. Aber letztlich macht das nur einen kleinen Teil der Codebasis aus, höchstens 30 %." | Code | TDD relevant? | |------|----------------| | Domain / Geschäftsregeln / Berechnungs-Engine | EINDEUTIG JA | | Glue-Code / Orchestrierung / IO | Weniger | | UI / Framework-Boilerplate | Nicht erforderlich | | Eveillards Schätzung | max. 30 % der Codebasis | ### Verbindung zum Veille-Corpus #### Relevanz für den KI- / Coding-Agenten-Corpus 2025–2026 Der Artikel stammt aus dem Jahr 2022 (also vor der Explosion der Coding-Agenten), resoniert aber mit aktuellen Debatten:
Kent Beck — Vibe Coding vs TDD. (2024-10-17): Beck stellt fest, dass Vibe Coding und TDD sich nicht gegenseitig ausschließen — TDD bleibt für Domain-Code relevant, genau Eveillards Position.
Beck — Augmented Coding Beyond Vibes. (2025-06-25): die "augmented coding"-Haltung stützt sich auf Guardrails (Tests), die TDD von Natur aus liefert.
Frizzo.Year With Claude Code (2026-05-05): "writing muscle atrophy" — eine TDD-Praxis aufrechtzuerhalten ist genau ein Gegenmittel gegen die Atrophie der manuellen Praxis.
Osmani Cognitive Surrender. (2026-05-05): "PRs ~100 lines max", Solo-Keyboard-Zeit — konvergiert mit Eveillards Idee, dass TDD den Entwickler innerhalb der methodischen Praxis des Handwerks hält.
Lattice. (2026-05-05): Atoms / Molecules / Refiners — feine Granularität, genau das, was TDD fördert. #### Konvergenz "Werkzeug, keine Religion"
Eveillard."TDD ist keine Religion, sondern ein Werkzeug."
Karpathy. (2026-04-29): "jagged intelligence" — ein Werkzeug mit Wirksamkeitsgrenzen.
DORA ROI 2026. (2026-04-21): "all models are wrong but useful" — methodische Demut.
Talisman Ontology Pipeline Refresh. (2026-05-04): "the work cannot be skipped" — Methodik als Disziplinierungswerkzeug.
→ Ethische Konvergenz: Ablehnung sowohl des Dogmatismus ALS AUCH der Ablehnung eines methodischen Werkzeugs. #### Konvergenz "begrenzter Anwendungsbereich"
Eveillard. TDD = max. 30 % der Codebasis (Domain-Code).
Stanford. (zitiert von DORA): 35–40 % Produktivität Greenfield vs. ≤10 % Brownfield — ungleiche Verteilung je nach Kontext.
Ng The Batch #350. (2026-04-24): Frontend > Backend > Infra > Research — kontextabhängige Beschleunigung.
→ Konvergenz: kein methodisches Werkzeug ist universell anwendbar — der relevante Anwendungsbereich muss stets bewertet werden. ### Zu markierende Einschränkungen
Artikel streng genommen außerhalb des KI-Corpus. — Fokus auf Craft / historisches TDD. Nur indirekt relevant.
Keine empirischen Zahlen. — konzeptionelle Argumentation, keine Studie.
Keine Auseinandersetzung mit Coding-Agenten. in der Version von 2025 (die Aktualisierung vom März 2025 scheint die KI-/Agenten-Debatte nicht aufgegriffen zu haben).
Der Anwendungsbereich von 30 % ist eine Schätzung, die von Eveillard nicht belegt wird — je nach Kontext diskutabel (ein Compiler könnte zu 80 % Domain sein).
Stark auf FP/Hexagonal ausgerichteter Rahmen. — kann für Entwickler, die stark in OOP/Rails verwurzelt sind, dogmatisch wirken.
Geht nicht ein. auf die Debatte über die Auswirkung von CI/CD auf die Teststrategie, die andere Autoren (insbesondere DORA) als entscheidend erachten. ### Zu verwenden für
Team-Debatten zu TDD. strukturierte Argumentation zur Klärung von Test-first vs. TDD.
Verknüpfung mit dem Coding-Agenten-Corpus 2026. Einordnung aktueller Debatten (vibe coding, Agenten, KI-augmentiert) in die historische Kontinuität der Craft-Debatten.
Quellenmaterial. der Aphorismus "TDD ist keine Religion, sondern ein Werkzeug" — eine verwendbare, prägnante Formel.
Zugeschriebene Aussagen
TDD ist keine Religion, es ist ein Werkzeug
— Mathieu Eveillard
DHH kritisiert Test-first und nennt es TDD
— Mathieu Eveillard
Systemtests ersetzen keine Unit-Tests
— Mathieu Eveillard
TDD-relevanter Domänencode macht höchstens 30% der Codebase aus
— Mathieu Eveillard
Der aus dieser Fiche extrahierte Wissensgraph — 12 Entitäten, 16 Relationen.
In diesem Graphen :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