© saicle/Shutterstock.com
Mit Behaviour-driven Development Verhalten beschreiben und testen

Wie verhält es sich mit ...


Automatisierte Tests in Form von Unit oder Integration Tests sind aus den meisten Projekten nicht mehr wegzudenken und gehören zum Alltag eines jeden PHP-Entwicklers. Neben dem klassischen Test-driven Development können Entwickler aber auch auf das gewissermaßen weiterentwickelte Behaviour-driven Development zurückgreifen und zahlreiche Vorteile vor allem zur Analyse des Verhaltens einzelner Sys­tembestandteile nutzen.

Test-driven Development (TDD) ist ein gängiges Mittel für die Qualitätssicherung von Entwicklungsprojekten. Im PHP-Umfeld wird dabei oft PHPUnit [1] für die Erstellung von Unit Tests eingesetzt. Beim TDD überprüfen Unit Tests normalerweise die korrekte Umsetzung einzelner Methoden oder Klassen und sind eher technisch orientiert, was für Auftraggeber beziehungsweise Endbenutzer der Software wenig verständlich ist. Sie interessieren sich vielmehr für die korrekte Umsetzung einzelner Funktionen beziehungsweise für das Verhalten einzelner Systembestandteile. Das Behaviour-driven Development (BDD) bietet für genau diese Ansprüche eine Umgebung, mit der das Verhalten von einzelnen Komponenten, Klassen und Seiten beschrieben und getestet werden kann. Behaviour-driven Development wird dabei oft als Evolutionsstufe von TDD bezeichnet. Denn die grundlegende Arbeitsweise bleibt dieselbe. Auch hier werden Tests geschrieben, bevor die eigentliche Implementierung einer Funktion stattfindet. Der bei TDD übliche red/green/refactor-Zyklus wird auch bei BDD beibehalten. Der große Unterschied ist die Art und Weise, wie die Tests geschrieben werden. BDD ist dabei keine wirklich brandneue Technik. Bereits 2003 wurde dieser Ansatz von Dan North als Teststrategie vorgestellt. Es wurde in der Ruby-on-Rails-Welt populär, wo die dort bekannten Werkzeuge RSpec [2] und Cucumber [3] den Weg zur weiten Verbreitung ebneten. Auch im PHP-Umfeld existieren mittlerweile Tools, mit denen sich hervorragend arbeiten lässt. Die meisten Tools versuchen, mit einer DSL (Domain Specific Language) zu arbeiten, die möglichst nahe an der natürlichen Sprache ist. Bei einigen dieser Programme wird auf den Einsatz einer Programmiersprache zum Schreiben der Tests komplett verzichtet. Natürlich verstehen die Parser der entsprechenden BDD-Tools keine natürliche Sprache, sondern sind auf einen gewissen Satz von Syntax und Semantik angewiesen. Eine Featurebeschreibung wird durch das jeweilige BDD-Tool geparst, in die entsprechende Programmiersprache umgewandelt und im zugrunde liegenden Testwerkzeug ausgeführt.

Behat

Behaviour-driven Development ist eine Testart, die außerhalb der PHP-Welt entstanden ist und erst seit kurzer Zeit Einzug in PHP-Projekte hält. Deshalb ist die Tool­auswahl im Moment noch etwas klein. Das bedeutet jedoch nicht, dass BDD unausgereift ist. Mit Behat [4] gibt es nämlich ein durchaus ausgereiftes Tool, das seit Kurzem bereits in einer zweiten Version vorliegt. Behat wurde stark von Cucumber aus der Ruby-Welt inspiriert (Abb. 1). Das macht sich besonders in der Syntax der Featurebeschreibungen bemerkbar, die sehr stark an die Gherkin-Spezifikation angelehnt ist. Listing 1 zeigt eine Beispielspezifikation.

behat_website.tif_fmt1.jpgAbb. 1: Behat ist ein BDD-Tool, das sich an Cucumber aus der Ruby-Welt orientiert

Behat setzt wie die meisten modernen Libraries PHP 5.3.1 (oder neuer) als Basis voraus. Die Installation kann auf unterschiedliche Art und Weise erfolgen. Neben dem obligatorischen PEAR-Download steht auch eine PHAR-Datei zur Verfügung. Die Entwicklung der Software findet auf GitHub statt. Dort kann man sich auch an der Weiterentwicklung von Behat beteiligen. Dank einer aktiven Community legt das Projekt in den letzten Monaten ein beachtliches Entwicklungstempo vor. Daher sind sowohl der Funktionsumfang als auch die Stabilität und die Dokumentation schon gut genug für den Alltagsgebrauch.

Listing 1: Beispielspezifikation für Behat

Feature: greeter says hello As a sample for PHPMag I want the greeter say hello to the readers Scenario: greeter says hello Given a greeter When I send it the greet ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang