Coding-Katas: Steigerung der Produktivität und höhere Code-Qualität

Zurzeit experimentieren einige //SEIBERT/MEDIA-Entwickler gewinnbringend mit Coding-Katas. Diesen Begriff hat Dave Thomas in Anlehnung an asiatische Kampfsportarten geprägt: Das Training bestimmter Bewegungsabläufe durch ständige Wiederholung wird etwa bei Karate als Kata bezeichnet. Durch die andauernde Wiederholung sollen die Bewegungen in Fleisch und Blut übergehen. Dieses überzeugend schlichte Prinzip ist in der Programmierung angekommen.

Auch bei Coding-Katas wird entsprechend durch ständige Wiederholung trainiert. Dabei versucht der Entwickler, dieselben Aufgaben immer effektiver und effizienter zu erledigen, bis er seine Lösungsansätze schließlich perfektioniert. Konsequent betrieben, garantieren Coding-Katas eine sichere Methode, um sich als Entwickler kontinuierlich zu verbessern.

Der Ablauf von Coding-Katas

Grundsätzlich kann das Coding-Kata alleine oder im Rahmen von Pair Programming durchgeführt werden. Bei der Entscheidung für den gemeinsamen Ansatz ist jedoch zu beachten, dass sich die Skills der Entwickler auf einer Ebene bewegen.

Zunächst gilt es, eine passende Aufgabe zu wählen, die nicht zu umfangreich, aber auch nicht zu klein ausfallen darf. Welcher Aufgabenumfang angemessen ist, lässt sich  z.B. mithilfe der Seite http://codingkata.org/ leicht ermitteln, auf der auch Beispielaufgaben für jeden Fähigkeitsgrad zu finden sind.

Anschließend empfiehlt es sich, eine Timebox zu starten, wobei 20 Minuten als ideale Zeitspanne gelten. Sobald die Timebox abgelaufen ist, werden alle Ergebnisse gelöscht. Schließlich soll jeder Anlauf neu bei Null beginnen.

Um den optimalen Lerneffekt zu erzielen, sollte die gleiche Kata mit den gleichen Teilnehmern mindestens drei Mal wiederholt werden. Dabei darf die Zeitspanne zwischen den einzelnen Durchläufen aber nicht zu lang sein. Empfehlenswert ist die Durchführung von Coding-Katas an drei aufeinander folgenden Tagen.

Die Durchführung

In der testgetriebenen Entwicklung ist zunächst das Schreiben eines Tests erforderlich. Die Erweiterung des Codes erfolgt dann in kleinstmöglichen Schritten. Falls etwas nicht richtig funktioniert, fällt es dank dieser kleinen Schritte leicht, die falsche Implementierung schnell zu finden. Werden hingegen größere Funktionen in einem Schritt geschrieben, kann es mitunter sehr lange dauern, bis der Fehler sichtbar wird.

Feedback durch automatische Test-Suite

Besonders hilfreich ist die automatische Ausführung eines Tests. So erhält der Entwickler nach dem Speichern sofort ein aussagekräftiges Feedback. Hier hat sich die Übernahme von Zyklen aus der testgetriebenen Entwicklung als sinnvoll erwiesen: red, green, refactor.

Zunächst wird ein Unit-Test geschrieben, der aber noch nicht funktioniert, da der eigentliche Code noch nicht implementiert ist - der Test ist daher rot. Sobald das geschehen ist, wird der Test grün. Beim Refactoring wird die erste Implementierung schließlich neu und sauber umgeschrieben; der Test bleibt dabei grün.

Kleine Schritte im Beispiel

Tests in der testgetriebenen Entwicklung folgen dem Prinzip Fake it till you make it, das Kent Beck in diesem Zusammenhang eingeführt hat. Die hier folgenden Beispiele sollen das Prinzip der kleinen Schritte in Test und Code veranschaulichen. Um einen Text mit Zahlen zu summieren, die durch Kommas getrennt sind, wird eine Funktion geschrieben:

Wir beginnen mit Schritt 1:

Der Test wird grün, wir erweitern um den zweiten Fall:

Der Test ist grün, es folgt Schritt 1 des Refactorings:

Der Test ist grün, wir kommen zu Schritt 2 des Refactorings:

Fertig. Die Funktion ist nun vollständig und kann durch weitere Testfälle belegt werden:

Der Nutzen von Katas

Durch das hier beschriebene Verfahren lernen Entwickler schnell die Methoden der testgesteuerten Programmierung  und erkennen rasch ihre grundlegenden Vorteile:

  • Der Code wird automatisch testbar.
  • Es entsteht von selbst eine Abdeckung des Codes durch automatische Tests.

Führen Entwickler Katas zu zweit durch, kommt es zu weiteren Lerneffekten, die nicht zu unterschätzen sind:

  • Shortcuts der Entwicklungsumgebung werden ausgetauscht.
  • Es kommt zum Austausch von Herangehens- und Denkweisen.
  • Die Zusammenarbeit im Team wird gefördert, was sich schnell auf das Projekt überträgt.

Fazit

Die Einführung von Katas ist eine effektive Möglichkeit, die Qualifikationen der Entwickler voranzutreiben und zugleich testgetriebene Entwicklung zu etablieren. Insbesondere sind die so gewonnenen Erkenntnisse deutlich überzeugender als jeder theoretische Vortrag. Zudem wird hier eine Herangehensweise praktisch erlernt, die sich anschließend gewinnbringend und nutzenstiftend auf Projekte übertragen lässt. Ein weiterer großer Nutzen besteht im Austausch von Wissen und Fertigkeiten und der damit einhergehenden Verbesserung der Zusammenarbeit im Team. Ich hoffe, das Coding-Katas sich bei //SEIBERT/MEDIA tatsächlich etablieren!

Weiterführende Informationen

Agile Software-Entwicklung mit //SEIBERT/MEDIA
Java-Entwicklung mit //SEIBERT/MEDIA
Agile Software-Entwicklung erfordert viel Disziplin

Die CodeKata von Dave Thomas
Das CodeKata Manifest
Code-Katas und Coding-Dojos


Mehr über die Creative-Commons-Lizenz erfahren