Nachdem ich am Samstag voller Stolz meine FizzBuzz Speed Kata veröffentlich habe, möchte ich die daraus gewonnen Erkenntnisse natürlich mit euch teilen. Nach der Aufnahme des Videos fühlte ich mich gut und verzierte das Video noch mit ein paar Kommentaren. Schnell auf youtube veröffentlicht (das ganze war ja noch im 15 Minuten Limit) und ab nach nach Kaltbrunn – Hockey und so… Nachdem ich wieder zu Hause war, fielen mir und auch durch die Hilfe von Feedbacks doch einige Schwächen bei meiner Kata auf. Dies scheint aber gut zu sein, um etwas über TDD/BDD lernen zu können. Diese Methode hat nämlich nicht nur Vorteile.
Vorteile/Chancen
- Es ist wirklich cool mit Behaviour Driven Development zu coden (bis jetzt habe ich ja nur TDD gemacht). Insgesamt fühle ich mich mit dem Syntax wohler und habe das Gefühl, die Anforderungen besser formulieren zu können. Ich habe BDD mit Specifications umgesetzt (es gibt ja auch die Variante mit Stories). Welche der 2 Notationen nun besser ist, kann ich momentan noch nicht sagen.
- BDD macht Spass.
- Alle Vorteile, die man mit TDD hat, hat man auch bei BDD – man hört ja auch immer wieder, dass BDD das verbesserte TDD ist.
- Code Katas sind definitiv lehrreich. Man kann mit den Übungen seine Fähigkeiten verbessern. Wenn man eine Kata gelöst hat, kann man sie nochmals lösen, einfach mit einem anderen Fokus (z.B. Speed, BDD üben, Code möglichst kurz, Code ohne IDE schreiben usw.)
Gefahren/Stolpersteine
- Speed tut dem Hirn nicht gut – ich habe Fehler gemacht, die normalerweise nicht passieren. Diese habe ich im Video nachdokumentiert.
- Bei BDD/TDD verlässt man sich teilweise zu fest auf das rot/grün. Wenn es grün ist, ist alles gut!!! (Das es nicht so sein muss, sieht man ja im Video)
- BDD/TDD ersetzt nicht die Planungsphase. Es macht Sinn, zuerst die Architektur zu planen, bevor man mit coden beginnt (in einem so einfachen Beispiel wie FizzBuzz können z.B. einfach die “it” Blöcke, sprich die Requirements vorformuliert werden)
Mal ne Frage – durch deinen Blogeintrag bin ich auf Jasmine gekommen und durch Jasmine auf das Wunder, das BDD ist … also hab ich gedacht, ich schau mich mal um, sowas gibts ja bestimmt auch für PHP. Aber das einzige was ich gefunden habe ist PHPSpec und das scheint seit Ende 2008 nicht mehr angerührt worden zu sein.
Gibt es tatsächlich kein entsprechendes Äquivalent oder bin ich nur zu blöd um es zu finden?
Es ist tatsächlich so, dass es für PHP anscheinend nicht wirklich viel gibt. Das einzige was ich noch gefunden habe ist PHPUnit. Dort gibts auch ein BDD Framework. Der Syntax ist aber ziemlich unangenehm und somit kann man auch gleich TDD machen.
Ist wirklich schade, aber soweit ich gelesen habe, ist es ziemlich schwierig ein vernünftiges BDD Framework für PHP zu machen. Es gibt zahlreiche Schwierigkeiten, die dies schwierig machen.
Ich muss ehrlich gestehen, dass ich mich eh schon länger bezüglich Syntax in Java oder auch PHP nerve. Ich bin schon einige Zeit am überlegen, ob ich nicht lieber auf Ruby oder Python wechseln sollte. Ich muss wohl einfach mal anfangen und schauen, ob sich diese Hype Sprachen auch wirklich gut nutzen lassen. Dort gibt es nämlich auch sehr gute TDD/BDD Frameworks.
Hm. Die Option steht mir leider nicht zur Verfügung, weil meine Kunden nunmal PHP Server haben und sicherlich nicht auf Ruby oder Python umsteigen werden, nur weil das für mich spannender zu programmieren ist…
Aber wenn man ein BDD-Framework für Javascript schreiben kann, dann kann es für PHP doch nicht schwerer sein!?
Naja, diese Frage kann ich nicht beantworten. Aber ich denke es gibt 2 mögliche Erklärungen:
1. Das Bedürfnis für ein PHP BDD Framework ist nicht vorhanden.
2. Es ist sehr kompliziert ein solches Framework für PHP umzusetzen.
… CHALLENGE ACCEPTED!
Nein, der Onkel macht nur Spass… aber ich schreibs mal auf meine “Irgendwann sollte ich mal…” Liste: BDD Framework für PHP bauen.