Share ZU:
26 February 2013 @ Bertil Muth

Werkzeuge für “Specification by Example”

This entry is part 2 of 3 in the series Anforderung und Implementierung

Im ersten Teil dieser Artikel-Serie habe ich beschrieben, wie man mit der Technik “Specification by Example” die Kluft zwischen Anforderungs- und Test-Spezifikation überwinden kann. Die Kluft wird überwunden, indem man in einer auch für Nicht-Entwickler verständlichen Sprache Tests spezifiziert und diese dann unmittelbar mit Unit-Tests verbindet.

In diesem Artikel gebe ich Beispiele zur Werkzeugunterstützung von “Specification by Example”. Die Werkzeuge in diesem Bereich unterscheiden sich hauptsächlich in der Grammatik der Spezifikationssprachen und den unterstützten Programmiersprachen, die Grundidee ist aber immer ähnlich. Ich verwende im Folgenden ein Beispiel für das Werkzeug JBehave. Eine Liste mit Links zu Webseiten finden Sie am Ende des Artikels.

In agilen Vorgehensweisen kommen häufig User Stories als Grundlage der Kommunikation über Anforderungen zum Einsatz. Um klar festzulegen, wann eine Story objektiv als korrekt umgesetzt gilt, werden zusätzliche Akzeptanzkriterien formuliert, die einem gewissen Muster folgen. Das Werkzeug JBehave erlaubt es, Akzeptanzkriterien in einer Textdatei in Form von Szenarien zu definieren:

Scenario:  trader is not alerted below threshold
Given a stock of symbol STK1 and a threshold of 10.0
When the stock is traded at 5.0
Then the alert status should be OFF

Scenario:  trader is alerted above threshold
Given a stock of symbol STK1 and a threshold of 10.0
When the stock is traded at 11.0
Then the alert status should be ON

Die Szenarien folgen dem typischen Muster für Akzeptanzkritierien:

Given: welche Ausgangssituation muss herrschen, damit das Kriterium anwendbar ist ?
When: welches Ereignis tritt auf ?
Then: welche Reaktion der Software wird erwartet ?

Bevor diese Spezifikation ausgeführt werden kann, muss sie noch mit dem entsprechenden Unit-Test verbunden werden. JBehave verwendet Java als Programmiersprache:

public class TraderSteps { // look, Ma, I'm a POJO!!
    private Stock stock;
 
    @Given("a stock of symbol $symbol and a threshold of $threshold")
    public void aStock(String symbol, double threshold) {
        stock = new Stock(symbol, threshold);
    }
 
    @When("the stock is traded at $price")
    public void theStockIsTradedAt(double price) {
        stock.tradeAt(price);
    }
 
    @Then("the alert status should be $status")
    public void theAlertStatusShouldBe(String status) {
        ensureThat(stock.getStatus().name(), equalTo(status));
    }
}
 

Die Verbindung zu der textuellen Spezifikation wird über sogenannte Java-Annotationen hergestellt (der Text nach den @-Zeichen). Das hat den Vorteil, dass beliebige Java-Objekte mit der Spezifikation verbunden werden können.

Interessant ist auch, dass Werte aus der Spezifikation im Test weiterverwendet werden können (ausgedrückt durch das Dollarzeichen). Beispiel: durch die Zeile

@Then("the alert status should be $status")
 

wird der Text ON bzw. OFF aus der obigen Testspezifikation unmittelbar in den Test übernommen und kann geprüft werden.

Das Werkzeug JBehave bietet sehr viele Konfigurations- und Integrationsmöglichkeiten, auf die ich hier jedoch nicht näher eingehen will. Wenn Sie vorhaben, das Werkzeug einmal genauer unter die Lupe zu nehmen, gehen Sie am besten auf diese Webseite.

Vergessen Sie jedoch eines nicht: auch “Specification by Example” kann nur funktionieren, wenn die Kommunikation über Stories und Akzeptanzkriterien stimmt – sonst ist schnell wieder die Situation erreicht, dass zwischen Spezifikation und Test eine Kluft besteht. Und natürlich müssen die Stories und Kriterien gut geschnitten und formuliert sein.

Wenn Sie Unterstützung brauchen, werfen Sie einen Blick auf unser Schulungsangebot für agile Themen oder nehmen Sie direkt zu uns Kontakt auf.

—-

Webseiten von Werkzeugen für “Specification by Example”:

Cucumber

Fitnesse

Twist

Series Navigation<< Die Diskrepanz zwischen Anforderung und ImplementierungEs ist Samstagabend… >>

Tags

Bertil Muth

Kontaktieren Sie Bertil Muth

Bertil Muth arbeitet als Agiler Coach, Scrum Master und Trainer. Mit Leidenschaft setzt er sich für konstruktive Zusammenarbeit, dezentralisierte Entscheidungsfindung und technische Exzellenz in der Produktentwicklung ein.