NSpecify - Behavior-Driven Development Framework

Community | Vision | Road Map | Known Problems
Getting Started | Installation | Features | Runners | Samples | License | Release Notes
Articles | Blogs | Books
subglobal4 link | subglobal4 link | subglobal4 link | subglobal4 link | subglobal4 link | subglobal4 link | subglobal4 link
subglobal5 link | subglobal5 link | subglobal5 link | subglobal5 link | subglobal5 link | subglobal5 link | subglobal5 link
subglobal6 link | subglobal6 link | subglobal6 link | subglobal6 link | subglobal6 link | subglobal6 link | subglobal6 link
subglobal7 link | subglobal7 link | subglobal7 link | subglobal7 link | subglobal7 link | subglobal7 link | subglobal7 link
subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link | subglobal8 link

Introduction

Test-Driven Development has jumped the chasm to general acceptance. This is a good thing, but like Dave said in the Google video he presented, there are still a high percentage of people who practices Test-Driven Development badly.

On the other side of the coin, there is also people who is practicing Behavior-Driven Development while their doing Test-Driven Development.

So what is the difference?

In my opinion, most people think that Test-Driven Development is about Testing. When you explain that Test-Driven Development is really at its hart a design process, they squawk at you and give you a look like you have lost your mind.

I see Test-Driven Development performing the following roles:

  • Design process
  • Behavior Specification
  • Requirements Capturing
  • Regression Test Suite

For this reason I think we need a Behavior-Driven Development framework and NSpecify is an attempt to bridge this gap.

Here is an example of a Specification for a calculation domain object class:

using NSpecify.Framework;

 

namespace SampleBehaviour

{

    [ Functionality() ]

    public class Calculation

    {

        int one = 1;

        int two = 2;

 

        [ Specification() ]

        public void IntegerBehavior()

        {

            Specify.That( one + one ).Must.Equal( two );

            Specify.That( two ).Must.Be.GreaterThan( one );

            Specify.That( two ).Must.Not.Equal( one );

        }

    }

}

If you would like to get a alpha release of the NSpecify.Framework and a NUnit install that integrates with NSpecify. You can download the framework and NUnit 2.2.8(.NET 2) or NUnit 2.4 Beta 1 (.NET 2) install.

Behavior-Driven Development

From behaviour-driven.org

Behavior-Driven Development (BDD) is an evolution in the thinking behind Test-Driven Development. It pulls together strands from Test-Driven Development and Domain-Driven Design into an integrated whole, making the relationship between these two powerful approaches to software development more evident.

It aims to help focus development on the delivery of prioritized, verifiable business value by providing a common vocabulary (also referred to as a Ubiquitous Language) that spans the divide between Business and Technology.

It presents a framework of activity based on three core principles:

BDD relies on the use of a very specific (and small) vocabulary to minimize miscommunication and to ensure that everyone the business, developers, testers, analysts and managers are not only on the same page but using the same words. For people familiar with the concept of Domain-Driven Design, you could consider BDD to be a Ubiquitous Language for software development.

It must be stressed that BDD is a rephrasing of existing good practice, it is not a radically new departure. Its aim is to bring together existing, well-established techniques under a common banner and with a consistent and unambiguous terminology. BDD is very much focused on Getting the words right and this focus is intended to produce a vocabulary that is accurate, accessible, descriptive and consistent.

In fact “Getting the words right” was the starting point for the development of BDD, and is still very much at its core, but the power of getting the words right has led to some insights and extrapolations that have helped us to better understand our approach and to extend it.

NSpecify Site As you all know, the NSpecify project is the new kid on the block. So please note that most of the pages on this site is still a work in progress. I am working towards getting content onto the site. Thank you in advance for your patience.

About Us | Site Map | Privacy Policy | Contact Me | ©2006 Maruis Marais