Kent Beck: Test Driven Development by Example

Kent Beck: Test Driven Development by Example
Kent Beck: Test Driven Development by Example

Wer mit Test-Driven Development beginnen möchte, kommt um Kent Becks Buch nicht herum. Es langweilt nicht mit Theorie, wie es laufen sollte, sondern zeigt an drei sehr klaren Beispielen in Java und Python, wie Test-Driven Development funktioniert.

Im ersten Teil wird anhand des berühmten Money-Beispiels gezeigt, wie Test-Driven Development zu gutem Design und klaren Strukturen führt. Dabei entspricht das Ergebnis den Clean Code-Prinzipien, ohne dass man als Entwickler explizit darüber nachdenken muss. Kent Beck zeigt, wie man mit Test-Driven Development Design-Entscheidungen trifft, Refactorings durchführt und den Mut findet, einen Schritt zurück zu gehen, wenn eine Entscheidung sich als nicht mehr optimal herausstellt, weil sich die Anforderungen geändert haben.
Als Sprache für den ersten Teil kommt Java zum Einsatz und – natürlich – JUnit als Framework für die Tests.

Der zweite Teil zeigt am Beispiel von Python, wie man ein xUnit-Framework mit Test-Driven Development erstellen kann. Es lohnt sich, dieses Kapitel zu lesen, wenn man sich eine Vorstellung davon machen möchte, wie Test-Driven Development unter schwierigen Bedingungen funktioniert. Große Kenntnisse in Python sind ebensowenig erforderlich, wie Kenntnisse in Java für den ersten Teil.

Abgerundet wird das Buch mit einem dem Thema Pattern gewidmeten dritten Teil. Sämtliche Pattern werden im Umfeld des Test-Driven Development angewendet, wobei Kent Beck unterscheidet zwischen Test Pattern und Pattern für die Implementierung, die das Testen lediglich vereinfachen. Es ist interessant, dass Kent Beck in diesem Teil z.B. Mock Objects auf ein Pattern reduziert. Eingefleischte Fans von Mock Objects werden sich da sicherlich ungerecht behandelt fühlen, aber aus der Perspektive des Buches ist die Reduzierung an dieser Stelle sicherlich valide. Beispiele für Pattern zur Implementierung sind das Value Object, das Null Object oder die Factory Method.

Für diese und weitere Pattern gibt Kent Beck Empfehlungen dazu, ob sie beim Schreiben von Tests oder beim Refactoring sinnvoller einzusetzen sind. Den Abschluss des dritten Teils bilden Kapitel über Pattern zum Refactoring und zum Meistern von Test-Driven Development.

Der Stil des Buchs ist außergewöhnlich. Kent Beck schreibt, als würde er in einer Pair Programming Session neben einem sitzen. Das irritiert zu Beginn, hilft aber ungemein in das Thema zu finden. Das Buch ist dadurch extrem locker geschrieben und schnell gelesen. Die Code-Beispiele sind sehr gut verständlich.

Fazit: Wer mit Test-Driven Development beginnen möchte, muss dieses Buch gelesen haben. Für Fortgeschrittene ist es zu trivial.

Unscharfe Hamcrest-Matcher für Elemente in Collections

Hamcrest bietet von Haus aus eine breite Palette von Matchern für verschiedenste Situationen an.

Um zu prüfen, ob ein Elemente oder auch mehrere in einer Collection sind, gibt es z.B. contains() und containsInAnyOrder() sowie hasItem() und hasItems(). Alle vier funktionieren sehr gut, solange man sich auf die mitgelieferten Matcher von Hamcrest beschränkt.

Sobald man aber Objekte unscharf prüfen will, also nicht mit equals(), sondern sich auf einige Attribute beschränken möchte, muss man etwas außenrum denken.
Unscharfe Hamcrest-Matcher für Elemente in Collections weiterlesen

Fragen über Fragen: Test-Werkzeuge in agilen Projekten

Warum testet man Software?
Man will Sicherheit gewinnen, dass die Funktionalitäten, die man realisieren möchte, korrekt umgesetzt sind.

Warum fühlt sich Test Driven Development so gut an?
Es erlaubt, in extrem kurzen Zeitabständen Feedback über die geleistete Arbeit zu erhalten.

Das können, so glaube ich, alle unterschreiben, die in agilen Projekten unterwegs sind.
Fragen über Fragen: Test-Werkzeuge in agilen Projekten weiterlesen