Requirements Capture Markup Language - Part 1: BDD WorkItem Editor?

It seems odd that in 2011 there is no such thing as a requirements capture language.

Martin Fowler describes this as the yawning crevice of doom in software - http://martinfowler.com/bliki/BusinessReadableDSL.html  , http://www.infoq.com/news/2008/08/Fowler-North-Crevasse-of-Doom

When I am building code it is ludicrous that I need to read a perpetually changing 50 page Word document or Excel spreadsheet, or worse a set of UML diagrams that are totally disconnected from reality.

We need a standardized language which is simple and unambiguous, human readable, editable and tool-able, that hooks into an entity dictionary, and that supports traceability. Even better would be something I could use as a loose set of constraints that I could compile against, but I am not interested in the complexity and unwieldiness of a Formal Specification language – I don’t need to run a theorem prover over my code.

so what are my options for requirements capture?

TFS Work Items – Create a parent Scenario work item which links to many task work items. Analysts need a tool to capture requirements, not a development or QA environment - can use TFS Excel or Project integration. Although a Scenario Work Item could be considered a requirement, and does provide tracability, the actual requirement text is not structured.

The IBM rational suite and Doors (http://www-142.ibm.com/software/products/us/en/subcategory/SW740 ), - essentially templated document managers with a content management tools (blah)

RavenFlow (http://www.ravenflow.com ) - uses NLP to parse a document and guess what UML to generate (innovative, but immature)

RQML (Requirements Markup Language)– it is essentially dead. See http://rambutan.sourceforge.net/index.html for an Indonesian university project built around it. I could find no working examples.

Drools -  - an XML based syntax for Rete Rule Engine rules. I suppose part of the system could be captured as a rule engine, but there is more to requirments than this.

BDD (Given... When... Then) - at first glance, seems immature and Ruby centric. NGourd for C# (http://code.google.com/p/ngourd/ ) requires svn client to get source from github and compile, and then you run from command line - immature. Can you imagine a non-technical analyst writing requirements like this?

I was about to move on when I stumbled accross the BDD tool SpecFlow (http://specflow.org/home.aspx ) - See

http://blog.stevensanderson.com/2010/03/03/behavior-driven-development-bdd-with-specflow-and-aspnet-mvc/

and

.

SpecFlow is a VSIX that installs project templates and seems capable of generating BDD tests from .feature files.

I also found WipFlash - BDD  for WPF,but it appears immature: http://code.google.com/p/wipflash/source/browse/Example.PetShop.Scenarios/PetRegistrationAndPurchase.cs

So BDD to the rescue - My goal is to generate GWTs from TFS Work Items, and let SpecFlow do the rest.  I could see a simple markup syntax, with Regex input prefixes for guidance: E for Entity, A for Action, P for Property and V for Value:

I added an XML file to my scratchpad solution:

**

<Scenario> <Givens> <Given> the  [E:Account] [P:Status] is in [V:Credit]  </Given> <Given> the [E:Card] is [V:Valid] </Given> <Given> the [E:Dispenser] Has [P:Cash] </Given> </Givens> <Whens> <When> [E:Customer] [A:Request]s [P:Cash] </When> </Whens> <Thens> <Then>Ensure [E:Account] is [A:Debit]ed </Then> <Then>Ensure [E:Cash] is [A:Dispense]d </Then> <Then>Ensure [E:Card] is [A:Return]ed </Then> </Thens> </Scenario>

** 

I generated a schema from this using the Visual Studio XML > Create Schema menu:

xs:schema attributeFormDefault\="unqualified" elementFormDefault\="qualified" xmlns:xs\="http://www.w3.org/2001/XMLSchema"\ xs:element name\="Scenario"\ xs:complexType\ xs:sequence\ xs:element name\="Givens"\ xs:complexType\ xs:sequence\ xs:element maxOccurs\="unbounded" name\="Given" type\="xs:string" / </xs:sequence> </xs:complexType> </xs:element> xs:element name\="Whens"\ xs:complexType\ xs:sequence\ xs:element name\="When" type\="xs:string" / </xs:sequence> </xs:complexType> </xs:element> xs:element name\="Thens"\ xs:complexType\ xs:sequence\ xs:element maxOccurs\="unbounded" name\="Then" type\="xs:string" / </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

In part 2 of this post I will look into:

  • a TFS Work Item Type (WIT) to contain this GWT data
  • an Editor Tool for analysts to add BDD Scenario WITs to TFS
  • a T4 for extracting data from GWT WITs and generating SpecFlow  .feature files   - so that SpecFlow can generate the tests (and using T4, possibly the Models)
This article is part of the GWB Archives. Original Author: JoshReuben

New on Geeks with Blogs