Wednesday, May 21, 2008

Behaviour-Driven Development - Have a definite edge in the outsourced software development

Behaviour-driven development is an “outside-in” methodology. It starts at the outside by identifying business outcomes, and then drills down into the feature set that will achieve those outcomes. Each feature is captured as a “story”, which defines the scope of the feature along with its acceptance criteria” – DAN NORTH

Behaviour-driven development is the test-first approach agile development which focus on design, documentation and behaviour. "Behaviour" makes more sense than "Test" since developers code for the behaviour rather test.

Challenges in outsourced development


Communication is the major challenge in the outsourced software development.

Developers often complaint that they are not getting the detail requirements and design, and they are doing the requirement analysis and design analysis though it is done already. They back-up their delay in delivery with this reason.

Is it true?

Let's assume the project is extended team model where the requirement analysis and design is done at customer end, and developer needs to follow the design and do the implementation. The customer needs to send the requirements and design in detail. If that doesn't happen, then the developer needs to analyse the requirements and design though it is done already if he needs to deliver what the customer wants.

Let's discuss some other challenges. Customer often complaint that the code is not met the expected behaviours (requirements). This might be because the developer not understood the expected behaviours or it is not communicated to him properly. There should be proper communication between the co-ordinator and the developer. Our experience proves that all the stake holders should be aligned on the requirements and there should be a tool to support that.

Customer expects the working output in short iterations, and the world is moving towards the agile development. They provide the requirements in call/email, and the developers needs to deliver it in short iteration. The project manager needs to pick up the best agile method to deliver the output in short iteration

One common challenge in the software development is delivering the quality output and adding the value to the customer. How can we make sure the code quality is good? One way is doing the code review as per coding standards. The other way is test-first approach. It is imperative to do the test first approach to meet the customer expectations. The TDD and BDD facilitates the test-first approach.

Behaviour-Driven Development Experience

We started exploring the BDD before 5 months and following the practice in one of our Ruby-On-Rails project. We picked up the BDD for the following reasons:

1) We are working on the extended team model. The customer do the requirement analysis and most of the design. Our people needs to do the implementation. Our people do the requirement analysis and the design analysis though it is already done, and create the documentation for the CMMI process. We wanted to come out of the repetition and improve the productivity of the developers. We initially expected the detail requirement document from the customer, but the customer didn't find time to create the detail word document. BDD helps us to communicate the requirements through text stories, and this is also serves as documentation for the CMMI process.

2) We wanted to make sure our code is accepted by the customer by acceptence testing

3) Agile Development

We tried out TDD initially, but that didn't work out. It facilitated the unit testing and acceptence testing but we communicated the requirements and design through basecamp.

Then we tried out BDD text stories. The customer is expected to send the plain text stories with all the scenarios. The developer's work is nailed down here. He just code for the scenarios. We pick up one feature per iteration (Each feature is a RSPEC story). Normaly we deliver in very short iterations (2-3 days). We do SVN check-in the code and the spec. Customer run the spec for acceptence testing

We use RSPEC for BDD development since our technology is Ruby On Rails. There are some other BDD frameworks available for Java, PHP and .NET

Behaviour-Driven Development Lifecyle