---
title: "Was ist TDD (Test-Driven Development)?"
canonical: https://wavect.io/de/glossary/tdd/
language: de
description: "Test zuerst schreiben. Failen lassen. Den einfachsten Code schreiben, der den Test passieren lässt. Refactoren. Wiederholen."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

METHODE

# TDD

Test-Driven Development

Test zuerst schreiben. Failen lassen. Den einfachsten Code schreiben, der den Test passieren lässt. Refactoren. Wiederholen.

Zuletzt geprüft: 2026-05-24 von [Kevin Riedl](/de/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

Test-Driven Development ist eine Disziplin, keine Methodik. Die Schleife: rot (failing Test schreiben), grün (einfachsten Code schreiben, der grün macht), refactor (sauber machen, ohne den Test zu brechen). Wörtlich umgesetzt produziert es Code mit hoher Testabdeckung und einer Zwangsfunktion gegen Over-Engineering. Die Disziplin zahlt sich nur aus, wenn diese Tests bei jeder Änderung laufen, weshalb TDD und [CI/CD](/de/glossary/ci-cd/) Geschwister sind, keine getrennten Anliegen.

Warum die meisten Teams behaupten TDD zu machen, es aber nicht tun: Den Test zuerst zu schreiben fühlt sich im Moment langsamer an. Der Compounding-Payoff (Refactor-Sicherheit, Regressionsschutz, Designdruck zu kleineren Einheiten) zeigt sich erst Monate später. Bis dahin hat das Team aufgehört, Tests zuerst zu schreiben, und sich eingeredet, es habe nie einen Unterschied gemacht.

Beispiel, wo TDD seine Kosten verdient versus wo es Theater ist: Ein Payments-Reconciliation-Modul hat fiese Edge Cases (Teilrückerstattungen, Währungsrundung, Retries). Den failing Test zuerst zu schreiben zwingt dich, das erwartete Verhalten zu benennen, bevor der Code existiert, und die Suite fängt die Regression sechs Monate später ab, wenn jemand die Rundung „vereinfacht". Das ist TDD, das sich selbst bezahlt. Stell dem ein Wegwerf-Daten-Import-Skript gegenüber, das du in zwei Wochen löschst: Tests zuerst zu schreiben ist dort reiner Overhead. Die ehrliche Regel ist, die logik-lastige, teuer-falsch-zu-machende Code per TDD zu schreiben und den Rest nicht.

Der häufigste Fehler ist, Coverage als Ziel zu behandeln. Jag 90 % nach, und das Team schreibt Tests für Getter und Setter, um die Zahl zu treffen, während es die Integrationstests überspringt, wo die echten Bugs leben. Coverage ist ein nützliches Diagnostikum und ein schreckliches Ziel; es ist eine Metrik, die gegamed wird. Wavect nutzt TDD, wo es sich rechnet: Integrationstests für alles Geldförmige, Contract-Tests für alles Customer-Facing, [BDD](/de/glossary/bdd/) -artige Akzeptanztests, wo Produkt sie lesen können muss, Unit-Tests für nicht-triviale Logik. Wir testen die schweren Teile gut, nicht alle Teile gleich, und behandeln es als eine Praxis innerhalb einer gesunden [Agile](/de/glossary/agile/) -Schleife, nicht als Häkchen.

// FAQ

## Häufige Fragen

### Macht TDD den Code wirklich schneller fertig?

Mittel- und langfristig ja, am ersten Tag nein. Wer TDD nach einer Woche aufgibt, weil es sich langsam anfühlt, sieht den Refactor-Payoff nie. Wer drei Monate durchhält, traut sich Refactors zu, die Non-TDD-Teams nie machen.

### Wo lohnt sich TDD nicht?

Bei Throwaway-Prototypen, UI-Layout-Code und Glue-Code zwischen zwei stabilen APIs. Wer den Test für „componentDidMount" schreibt, verschwendet Zeit. TDD ist Disziplin, nicht Religion.

### Coverage als KPI?

Schlechte Idee. Coverage wird gegamed, sobald sie zum Ziel wird. Tests, die nichts assertieren, treiben die Zahl hoch und prüfen nichts. Lieber Mutation-Testing als Coverage-Quote messen.

Verwandte Begriffe

- [BDD](/de/glossary/bdd/)
- [Agile](/de/glossary/agile/)
- [CI/CD](/de/glossary/ci-cd/)
- [SDLC](/de/glossary/sdlc/)

Passende Leistungen

- [Softwareentwicklung](/de/services/software-development/)

Passende Fallstudien

- [Polity](/de/case-studies/polity/)

Passende Guides

- [Der Softwareentwicklungsprozess, Woche für Woche](/de/software-development-guide/software-development-process/)

Reden wir

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/de/glossary/tdd/#term",
      "@type": "DefinedTerm",
      "alternateName": [],
      "description": "Test zuerst schreiben. Failen lassen. Den einfachsten Code schreiben, der den Test passieren lässt. Refactoren. Wiederholen.",
      "inDefinedTermSet": "https://wavect.io/de/glossary/#termset",
      "name": "TDD",
      "termCode": "tdd",
      "url": "https://wavect.io/de/glossary/tdd/"
    },
    {
      "@id": "https://wavect.io/de/glossary/tdd/#webpage",
      "@type": "WebPage",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-05-24",
      "description": "Test zuerst schreiben. Failen lassen. Den einfachsten Code schreiben, der den Test passieren lässt. Refactoren. Wiederholen.",
      "headline": "TDD",
      "inLanguage": "de",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-05-24",
      "mainEntity": {
        "@id": "https://wavect.io/de/glossary/tdd/#term"
      },
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        }
      ],
      "name": "TDD",
      "reviewedBy": {
        "@id": "https://wavect.io/team/christof-jori/#person",
        "@type": "Person",
        "name": "Christof Jori",
        "url": "https://wavect.io/team/christof-jori/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".gls-single__h1",
          ".gls-single__tldr"
        ]
      },
      "url": "https://wavect.io/de/glossary/tdd/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/de/",
          "name": "Startseite",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/de/glossary/",
          "name": "Tech-, Produkt- & Engagement-Glossar",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/de/glossary/tdd/",
          "name": "TDD",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Mittel- und langfristig ja, am ersten Tag nein. Wer TDD nach einer Woche aufgibt, weil es sich langsam anfühlt, sieht den Refactor-Payoff nie. Wer drei Monate durchhält, traut sich Refactors zu, die Non-TDD-Teams nie machen."
      },
      "name": "Macht TDD den Code wirklich schneller fertig?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Bei Throwaway-Prototypen, UI-Layout-Code und Glue-Code zwischen zwei stabilen APIs. Wer den Test für „componentDidMount\" schreibt, verschwendet Zeit. TDD ist Disziplin, nicht Religion."
      },
      "name": "Wo lohnt sich TDD nicht?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Schlechte Idee. Coverage wird gegamed, sobald sie zum Ziel wird. Tests, die nichts assertieren, treiben die Zahl hoch und prüfen nichts. Lieber Mutation-Testing als Coverage-Quote messen."
      },
      "name": "Coverage als KPI?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
