- Posted by liammclennan on October 16, 2009
Executable specifications are the holy grail of software development. The idea is to specify the behaviour of a system in some structured way that can be automatically verified. It is something that I am interested in so I have been keeping an eye on the options that are available for .NET.
Cucumber with IronRuby
Cucumber is a popular ruby tool. Specifications are written as plain text files and made executable by writing regular expressions for each line of the text file. Cucumber has a strong BDD flavour, encouraging users to write their specifications in the given, when, then style. I have not tried it myself but I know a number of people have indicated that getting cucumber to work in ironruby is difficult.
NGourd
NGourd is a native .NET project inspired by Cucumber and written largely by Mike Minutillo. Again, regular expressions are used to extract the parameters from the specifications, but this time the regular expressions are written as attributes. I contributed some code to this project to log its the output in a format that can be used by build servers such as Team City and Cruise Control .NET. NGourd is rudimentary but it does work and I have used it in some of my projects. As a developer, this type of tool is my first choice. I like that the specifications are plain text files that can be easily processed and versioned. However, if the aim is to have non-programmers working on the specifications then I fear that plain text may not offer them enough support.
StoryTeller
StoryTeller is a tool by Jeremy Miller, inspired by FitNesse. In StoryTeller, developers define a grammer for tests and then non-developer users can build specifications using a GUI. Because the GUI assists the user with the grammer StoryTeller is probably easier to use for non-technical people.
Executable specifications are an exciting idea, and I hope that one day it will be the way that we all build software. At this moment the tooling is rapidly improving. I like the text based tools for use by developers with BDD style functional testing, and I like StoryTeller for its improved support for customer involvement.