Coding Kata Fizz Buzz mit Ruby und RSpec

Vor bereits über einem Jahr habe ich das erste mal von Coding Katas und Dojos gelesen und darüber geschrieben. Das Thema hat mich damals wie heute fasziniert. Leider habe ich das regelmäßige Üben kleiner Programmieraufgaben aus den Augen verloren. Doch dank Kai seinem Artikel über Coding Katas und persönlichen Gesprächen, habe ich wieder Blut geleckt.

Am Wochenende habe ich dann mit dem Kata Fizz Buzz als Einstieg begonnen.

Die Wahl der Waffen

Die Wahl der Programmiersprache fiel auf Ruby. Warum? Weil ich gern mit Ruby on Rails Webanwendungen entwickele und dabei doch öfters Ruby-Spezifika nachschlagen muss. Weiterhin nimmt bei mir die testgetriebene Entwicklung eine wichtige Rolle ein. Also musste für das Kata ein Framework her. Bisher habe ich in der Rails-Welt ausschließlich mit Test::Unit gearbeitet. Eine gute Gelegenheit, mal einen Blick auf RSpec zu werfen.

Die Umsetzung

Programmiert wird testgetrieben. Also bestand der erste Schritt darin, eine fizzbuzz_spec.rb Datei zu erstellen und einen ersten, einfachen Testfall zu schreiben. Dabei entschloss ich mich als erstes die Übergabe einer 3 mit dem Resultat „fizz“ zu testen. Danach kam die einfachste Lösung, damit der Test durchläuft: Meine answer-Methode gab immer ein „fizz“ zurück.

Der nächste Schritt bestand nun darin einen Testfall für die Übergabe einer 5 mit der erwarteten Antwort „buzz“ zu schreiben und die Tests lauffähig zu machen. Dabei floß die erste Logik in meine answer-Methode, wenn auch noch recht simpel.

Die nächsten beiden Schritte waren den ersten sehr ähnlich. Ich prüfte bei der Übergabe von 15 auf „fizzbuzz“ und bei der Übergabe von 1 auf die 1 als Antwort.

Nun waren mir die Tests etwas zu fade und zu statisch. Also erstellte ich mir 4 Arrays mit Zahlen. Jeweils ein Array für jede zu erwartende Antwort, „fizz“, „buzz“, „fizzbuzz“ und die übergebene Zahl selber. Die oben implementierten Testfälle stellte ich auf die Nutzung der Arrays um. So habe ich die Möglichkeit, die Arrays jederzeit beliebig zu erweitern.

Die Implementierung der answer-Methode habe ich recht einfach gehalten. Um zu prüfen, ob die übergebene Zahl durch 3, 5 oder durch beide teilbar ist, nutze ich den Modulo-Operator.

Tests und Lösung sind am Ende des Katas wie folgt implementiert:

Die Testfälle in RSpec:

Die Implementierung der Methode answer

Und hier ein Testlauf:
FizzBuzz RSpec

Fazit

Mein erstes Coding Kata habe ich in einer knappen halben Stunde abgeschlossen. Innerhalb dieser 30 Minuten habe ich meine ersten Gehversuche mit RSpec unternommen und einen ersten Einblick in die Arbeitsweise des alternativen Testframeworks bekommen. Mit der Lösung des Katas bin ich zufrieden. Ich habe auch im Nachhinein noch keine elegantere und einfachere Lösung finden können.

Was mir noch nicht gefällt, sind die Tests. Mir sind die Testdaten zu statisch und zu wenige. So prüfen meine RSpecs nur die Zahlen 1 bis 15. Alles was darüber hinaus geht, fehlt. Auch fehlt eine Prüfung und die Fehlerbehandlung für negative Zahlen. Also genug Stoff für die nächste Runde „FizzBuzz“ 🙂

Coding Kata Fizz Buzz mit Ruby und RSpec
Markiert in: