Einführung in Test Driven Development

Einführung in Test Driven Development – Anwendungsentwickler-Podcast #103

Eine Einführung in Test Driven Development (TDD) gibt es in der einhundertdritten Folge des Anwendungsentwickler-Podcasts.

Inhalt

  • Was ist Test Driven Development (TDD)?
    • Beim TDD werden die Tests vor dem Produktivcode geschrieben.
  • Wie läuft der TDD-Zyklus ab?
    • Red, green, refactor. Der Test muss fehlschlagen, dann wird er so einfach wie möglich grün gemacht, dann wird refaktorisiert.
  • Was ist der erweiterte TDD-Zyklus?
    • Red, optimize failure message, green, refactor, refactor tests. Zusätzlich zum normalen Zyklus wird Wert auf sprechende Meldungen bei Fehlschlägen gelegt und auch der Test-Code explizit refaktorisiert.
  • Wie kann man TDD mit Integrationstests kombinieren?
    • Wie in GOOS* beschrieben: Zuerst Integrationstest schreiben, der längere Zeit fehlschlägt, und dann Schritt für Schritt mit Unit-Tests auf grünen Integrationstest hinarbeiten.
  • Warum heißt TDD auch Test Driven Design?
    • Weil sich das Design der Anwendung erst beim Programmieren ergibt.
  • Was sind Vorteile von TDD?
    • Tests werden nicht vergessen.
    • Hohe Testabdeckung des Produktivcodes.
    • Gute Modularisierung des Codes durch Fokussierung der Tests.
    • Hohe Testbarkeit des Codes (wenig Abhängigkeiten).
    • Langfristig Zeiteinsparung bei der Weiterentwicklung, da Regression sofort erkannt wird.
    • Experimente und Refactorings werden durch Testnetz erst ermöglicht.
  • Was sind Nachteile von TDD?
    • Umstellung beim Entwickler nötig.
    • Zunächst höherer Zeitaufwand.
    • Legacy Code ist meist nicht gut testbar.
  • Wie findet man Testfälle?
    • Start mit „Happy Path“
    • übliche Geschäftsvorfälle
    • einfachste Fälle
    • Edge-Cases/Grenzwerte
    • Sonderfälle
  • Was sind Äquivalenzklassen?
    • Werte, deren Verwendung in Tests zum Durchlaufen des gleichen Pfades im Code führen und damit nicht zusätzlich getestet werden müssen (Beispiel „positive Zahl“ 5 und 322).
  • Was ist ein Regressionstest?
    • Regressionstest stellen sicher, dass Abweichungen vom bisherigen Verhalten (Regression) schnellstmöglich erkannt werden.
  • Wie steigt man am besten in TDD ein?
    • Nicht lange schnacken (lesen), Kopp in‘ Nacken (coden)! Einfach machen! Am besten mit Code Katas.

Literaturempfehlungen

Zum Einstig schau dir mal diese perfekt auf die Begleitmusik angepasste Implementierung der Kata „Prime Factors“ von Uncle Bob an:

Prime Factors Kata in Ruby, Flower Duet, Lakme‘ from unclebob on Vimeo.

Zum Thema TDD empfehle ich zunächst das „Original“ Test Driven Development: By Example* von Kent Beck, der TDD erfunden hat. Es ist voll mit Beispielen, gut verständlich und auch nicht allzu lang. Das Buch ist zwar schon ein paar Tage älter, aber immer noch meine Empfehlung zum Einstieg.

Kent Beck - Test Driven Development: By Example (Addison-Wesley Signature) (Affiliate)*

Etwas moderner geht es zu in Professional Test Driven Development with C#*. In den Links habe ich auch meine Rezension des Buches verlinkt. Dort erfährst du noch mehr darüber, warum ich das Buch empfehlen kann.

Professional Test Driven Development with C#: Developing Real World Applications with TDD (Affiliate)*

Zuletzt noch ein modernes Buch zum Thema testen und TDD: Pragmatic Unit Testing in Java 8 with JUnit*. Darüber habe ich schon eine ganze Podcast-Episode aufgenommen und auch eine Rezension geschrieben (siehe Links).

Jeff Langr - Pragmatic Unit Testing in Java 8 with JUnit (Affiliate)*

Falls du schon fortgeschritten bist, kann ich wärmstens Growing Object-Oriented Software, Guided by Tests* empfehlen. Das Buch hat mein Verständnis von TDD noch einmal grundlegend erweitert und mich nachhaltig geprägt. Ein tolles Buch, das auch den erweiterten TDD-Zyklus beschreibt und über einfache Unit-Tests weit hinaus geht.

Growing Object-Oriented Software, Guided by Tests - Amazon (Affiliate)*

Und falls du mal lesen willst, wie ich ein Testframework testgetrieben entwickelt habe, kannst du dir hier den entsprechenden Teil meiner Masterarbeit herunterladen: NUNIT: A Unit-Test-Framework for Natural.

Links

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax