Rezension: Growing Object Oriented Software Guided by Tests

Um was geht es:

Dieses Buch hat sich zum Ziel gesetzt Test-Driven-Development zu motivieren und zu beschreiben. Eine Besonderheit dieses Buches ist, dass ein recht umfangreiches praktisches Beispiel (Eine „AuctionSniper“ Software) verwendet wird, um TDD zu illustrieren.

Erschienen bei Addison-Wesley 1)

Die Autoren schaffen es meiner Ansicht nach sehr gut, den Einfluss den TDD auf das Software Design hat zu formulieren. Die Testabdeckung und die Tests als Sicherheitsnetz sind da fast nur noch ein (sehr wichtiger) Nebenaspekt.

Zitat:

Testing is no longer just about keeping defects from the users; instead, it is about helping the team to understand the features that the users need and to deliver those features reliably and predictably.

Es geht also primär darum ein System von Beginn an wartbar und änderbar zu gestalten. Die Tests und die Infrastruktur drumherum dienen dann als Werkzeug um schnelles Feedback über meinen Systemzustand zu erhalten und um den Fortschritt der Entwicklung sichtbar zu machen.

In dem Buch werden hin und wieder Ansichten vertreten, für die es, nun ja, vielleicht verschiedene Meinungen gibt (z.B. die Art und Weise wie Interfaces verwendet werden), die Autoren begründen dies aber stets ordentlich, so dass das Buch angenehm zu lesen ist.

Ein paar mehr Details:

Das Buch steigt ein mit einer Motivation von TDD und dem Red/Green/Refactor Zyklus: Schreibe stets einen fehlschlagenden Test, behebe diesen mit so wenig Aufwand wie nötig, dann führe Refactorings durch. Es wird eine sehr kleinschrittige Arbeit vorgeschlagen. Ungewohnt aber durchaus sinnvoll.
Dieser Red/Green/Refactor Zyklus wird umrahmt von einem (fehlschlagenden) End-to-end Akzeptanztest. Dieser stellt den Fortschritt für das Feature dar. End-to-end Tests sind für die Autoren sehr wichtig, um den Blick auf das System als Ganzes nicht zu verlieren.

 

 

Dann geht es aber auch schon los mit OO Design. Die Begriffe kennt man wahrscheinlich schon. Eine Auffrischung in diesem Kontext fand ich gut. Es geht hier primär um Mutability, Separation of Concerns und Tell do not ask und das daraus resultierende Objektnetzwerk. Klingt jetzt ein wenig abstrakt, ist aber wie gesagt gut zu lesen. Ein wenig über Mocking und JUnit rundet diesen Teil ab.

Jetzt geht es ins Eingemachte:
Wie fange ich mit TDD an und arbeite dann mit dem erwähnten Zyklus?

Daraufhin kann ich mithilfe des Red/Green/Refactor Zyklus Stück für Stück mein Feature fertigstellen. Fertig ist es, wenn der Akzeptanztest grün ist. Nun gehen die Autoren recht detailliert (zu detailliert für diesen Artikel) darauf ein, wie ich mit TDD die anfangs erwähnten Systemeigenschaften erreiche.

Hauptpunkt den ich mitnehme ist: Höre auf die Tests! Hört sich ein wenig esoterisch an, macht aber Sinn. Wenn etwas schwer zu testen ist dann folgern die Autoren: Dann ist ein Objekt, eine Komponente, etc. nicht einfach zu benutzen. Die Wartbarkeit leidet also. Hier sind die Tipps und jede Menge Entwicklungserfahrung von Nöten um das System in die „richtige“ Richtung zu lenken.

Es geht also in der Folge sehr viel um OO-Design und weniger um Tests selber. Vielleicht ist gerade dieses Kapitel (Part 2: Process of TDD) ein guter Fundus für TDD-Skeptiker.

Wenn jetzt ein großes Fragezeichen auf der Stirn steht: Wie soll denn das gehen? Entweder das Buch lesen, oder als schnelleren Einstieg in den Red/Green/Refactor Zyklus mal einen Blick auf diese Videos 2)werfen. Das Ganze dann in einem Code-Kata/Code-Retreat auszuprobieren hat mir sehr geholfen.

Im dritten Teil gibt es wie erwähnt ein größeres Beispiel, was schon ein wenig Aufmerksamkeit erfordert, aber lohnenswert ist. Muss ich selber nochmal detailliert lesen um es komplett aufzunehmen.
Schwierig ein so umfangreiches Beispiel adäquat in Buchform zu präsentieren. Es macht allerdings viel mehr Sinn als ein simples „Hello World“.

Abschließend geben die Autoren Tipps zur Testwartbarkeit und einem weiteren Teil gibt es Anregungen für schwierigere Testsituationen wie z.B. asynchrones Verhalten.

Fazit:

Wie bereits angedeutet für mich ein sehr schönes lehrreiches Buch. Viele Dinge kann ich direkt mitnehmen und umsetzen, einige Sachen muss ich erstmal sacken lassen. Durch die Praxisnähe des Buches findet sich aber meiner Ansicht nach jeder Entwickler hier wieder.

Links   [ + ]

1. http://bookshop.pearson.de/main/main.asp?ptgabandon=AW&page=englisch/bookdetails&productid=166868
2. http://www.jamesshore.com/Blog/Lets-Play/Lets-Play-Test-Driven-Development.html

Schreibe einen Kommentar

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