Test Driven Development with Python

Buchtitel Test-Driven Development with Python Ich hatte das Vergnügen das Buch Test-Driven Development with Python von Harry Percival aus dem O’Reilly-Verlag zu lesen (http://www.oreilly.de/catalog/9781449364823/, ebook-Preis € 28,49). Ich bin Python Programmierer mit einigen Jahren Erfahrung. Und mit meiner Django-Erfahrung von gut einem Jahr bin ich ein relativer Frischling in der Django Welt. Zur Zeit arbeite ich mit an einem größeren Django-Projekt. Da wir - natürlich - eine hohe Code-Qualtität erreichen wollen, passte das Experiment TDD mit Django sehr gut. Wir haben zwar eine Code Coverage von größer als 90%. Es ist jedoch nicht Test Driven Development, was wir tun, sondern eher - ähem - Test Supported Development. ;-)

Kernthese des Buches: TDD - so geht es richtig!

Der Autor Harry stellt gleich zu Beginn klar, was TDD wirklich bedeutet. Kernaspekte sind die bekannten Punkte: Test schreiben und scheitern lassen, Mikroschritt coden, um den Test bestehen zu lassen, Refactoring. Wer das schon einmal probiert hat, weiß, wie schwierig es ist, Mikro-Schritte zu coden und sich beim Refactoring nicht zu verhaspeln. Wer programmiert, hat ein Modell im Kopf. Und da geht es halt schnell, dass man mal eben das dutzend Zeilen herunter schreibt, um dann zu gucken, ob der Test besteht. Aber ein dutzend Zeilen sind bei TDD halt 8-10 Zeilen zuviel.

Der Autor schildert genau diese Probleme aus seiner persönlichen Erfahrung und leitet daraus die Notwendigkeit der disziplinierten Anwendung der TDD-Prinzipien her. Er nimmt den Leser bei der Hand, stellt Vor- und Nachteile sehr deutlich heraus und setzt dabei das Buchprojekt Schritt für Schritt um. Für mich war die Darstellung sehr anschaulich und schlüssig, so dass ich der mir über die Schulter schauenden Testing Goat künftig ständig gerne folge. Määääh

Was sollte der Leser mitbringen?

Der Leser - oder besser “Buchdurcharbeiter” - sollte Python-Basics können und mindestens das Django-Tutorial durchgearbeitet haben. Vielleicht noch ein bis zwei kleine Django-Projekte geschrieben haben. Der Auto erläutert zwar sein Vorgehen Schritt für Schritt von Beginn an, die dargestellten Basics werden aber nur angerissen, um den Umfang des Buches nicht unnötig aufzublähen. Zur Hilfe für Einsteiger liefert der Autor häufig Onlinequellen und -querverweise zum Vertiefen von Teilthemen. Wer das Django-Tutorial durch hat, wird auf jeden Fall mit den Inhalten klar kommen.

Und wer bereits umfangreichere Django Erfahrungen hat, dem wird dabei auch nicht langweilig. Zum Einen, weil die Basics knapp gehalten werden und zum Anderen der Autor den Leser zum Ausgleich an seiner umfangreichen praktischen Erfahrung teilhaben lässt. Sogar an seinen Irrwegen, die wir Coder alle aus eigener Erfahrung kennen. Das ist nicht nur sympathisch, sondern auch nützlich. Denn ein Fachbuch, in dem wie durch ein Wunder alles perfekt funktioniert, ist für den praktischen Einsatz recht nutzlos. Dadurch, dass uns der Autor an Fehlern, Irrwegen und deren Lösungen teilhaben lässt, lernt der Leser Strategien, die bei anderer Gelegenheit aus den eigenen Sackgassen führen können. Das ist für mich einer der größten Pluspunkte dieses Buchs.

Inhaltliche Highlights

Folgende Punkt empfand ich ebenfalls als sehr positiv und nützlich:

  • das im Buch beschriebene Projekt wird mit Python 3 entwickelt
  • es wird die Entwickler-Version Django 1.7x mit den neuen migrations genutzt
  • es wird der komplette Arbeitsablauf von Testing, Coding, Committing, Branching, Nutzung von Continuous Integration (Jenkins), Staging und Deployment umgesetzt.
  • der ganze Arbeitsablauf wird mittels fabric und Python auch noch komplett automatisiert.
  • die Integration von Bootstrap und jQuery in Django wird ansatzweise dargestellt.
  • das Logging und die Fehlerausgabe werden thematisiert
  • die Handhabung der Datenbank auf der Entwicklermaschine, auf dem Staging-Server und auf dem Deployment-Server wird diskutiert und gezeigt.
  • es wird auf Aspekte eingegangen, wie das DRY-Prinzip, YAGNI, Code Smells, Testing mit Python (natürlich), Testing von Javascript Code, Schreiben von Userstories als Kommentare in funktionalen Tests und vieles mehr.
  • es wird ein eigenes Django-Backend zur Authentifizierung von Nutzern programmiert
  • Test-Isolierung und Mocking werden ausführlich behandelt

Was hat gefehlt?

Nicht viel. Ich hätte mir mehr zu Clean Code und Code Smells gewünscht. Gerade weil der Autor ein erfahrener Profi ist, wäre mir seine Darstellung und Sichtweise hier sehr nützlich gewesen. Auch hätte ich mir gewünscht, dass statt des Platzhirschs Jenkins ein Python-basiertes Tool für CI dargestellt worden wäre. Aber buildbot und bitten wurden in diesem Buch nicht erwähnt, weil der Autor das ihm bekannte Jenkins nutzt.

Fazit

Ich habe das Buch fast in einem Stück durch gelesen und zum großen Teil durchgearbeitet. Es hat mir die Augen für viele Aspekte von TDD und der praktischen Umsetzung geöffnet und Hintergründe und Zusammenhänge verdeutlicht. Heute ist es für mich auch als Nachschlagewerk nützlich. Dieses Buch ist deshalb ab sofort in meiner Bibliothek auf meinem Entwicklerrechner. Ich empfehle es jedem Einsteiger und fortgeschrittenem Python / Django Entwickler.