Tuesday, 29 March 2011

Behaviour Driven Development with MSpec, SpecFlow, and Friends - Iteration 0

Source code for this series

In this series

Introducing devtracks

devtracks aims to deliver software development videos focusing mainly on the open source .net space. The videos are a combination of software development presentations and tutorials which are already freely available but scattered around the net on various sites. devtracks aims to bring much of this content under one site.


Ubiquitous language

"With a UBIQUITOUS LANGUAGE, the model is not a design artifact. It becomes integral to everything the developers and domain experts do to together. The LANGUAGE carries knowledge in a dynamic form. Discussion in the LANGUAGE brings to life the meaning behind the diagram and code."
Eric Evans

Lets define our ubiquitous language for devtracks; devtracks will use the language of software development conferences:

A software development conference has:
  • Session - a single presentation/tutorial
  • Track - a topic/category relating to software development; contains multiple sessions
  • Speaker - delivers a session


Stories

Lets start our story creation process by defining the stories and their conditions of acceptance.

When writing your conditions of acceptance; ensure you limit the number of domains in a single scenario in order to avoid writing brittle tests.

Read this article by Dan North: Whose domain is it anyway?





Where to start? A Walking Skeleton

Over the years I have seen a few different approaches to getting a project up and running. I have recently settled on the idea of a 'Walking Skeleton'.

"A Walking Skeleton is a tiny implementation of the system that performs a small end-to-end function."
Alistair Cockburn

The idea of a walking skeleton is to select the simplest story available and implement this from the 'outside-in' using BDD. Our simplest story is: 'Navigate to Homepage'. We will drive out this feature putting in place various bits and pieces as we go:

  • Specflow and Selenium infrastructure
  • Bootstrap StructureMap
  • Setup StructureMap registry
  • Source control setup with Git

What comes first BDD or DDD? Well; if you are a single developer or a pair; this is not an issue; with a very simple domain model use BDD to drive out the domain; its probable you will not need a domain model; some simple DTOs/Information Holders will suffice. If you are more than a single pair? with a complex domain model; you run the danger of duplicating effort when driving out the domain model; so keeping things as agile as possible; consider the following:

  • Some minimal up-front design; drive out the model on paper first
  • Schedule the execution of stories so that you minimise duplication of effort
  • Introduce dependencies on a story that will drive out an aggregate root


Iteration 1

Lets Begin!

1 comments:

  1. Thanks. This might help me to start out, which I think is the most difficult part, especially with TDD/BDD.
    Just what to include in the walking skeleton? Should we try to touch (and therefore think about) as much of the infrastructure as we can? It needs to be end-to-end, right?

    ReplyDelete