well. For example, Fitnesse (which is built around decision tables), has also been used to roll out BDD. Tooling examples There are several different examples of BDD software tools in use in projects today, for different platforms and programming languages. Possibly the most well-known is JBehave, which was developed by Dan North, Elizabeth Keogh and several others. The following is an example taken from that project: Consider an implementation of the Game of Life. A domain expert (or business analyst) might want to specify what should happen when someone is setting up a starting configuration of the game grid. To do this, he might want to give an example of a number of steps taken by a person who is toggling cells. Skipping over the narrative part, he might do this by writing up the following scenario into a plain text document (which is the type of input document that JBehave reads): Given a 5 by 5 game When I toggle the cell at (3, 2) Then the grid should look like ..... ..... ..... ..X.. ..... When I toggle the cell at (3, 1) Then the grid should look like ..... ..... ..... ..X.. ..X.. When I toggle the cell at (3, 2) Then the grid should look like ..... ..... ..... ..... ..X.. The bold print is not part of the input; it is included here to show which words are recognized as formal language. JBehave recognizes the terms Given (as a precondition which defines the start of a scenario), When (as an event trigger) and Then (as a postcondition which must be verified as the outcome of the action that follows the trigger). Based on this, JBehave is capable of reading the text file containing the scenario and parsing it into clauses (a set-up clause and then three event triggers with verifiable conditions). JBehave then takes these clauses and passes them on to code that is capable of setting a test, responding to the event triggers and verifying the outcome. This code must be written by the developers in the project team (in Java, because that is the platform JBehave is based on). In this case, the code might look like this: private Game game; private StringRenderer renderer; @Given("a $width by $height game") public void theGameIsRunning(int width, int height) { game = new Game(width, height); renderer = new StringRenderer(); game.setObserver(renderer); } @When("I toggle the cell at ($column,