One year ago I learned about Behaviour-Driven Development (BDD) from Dan North. I really liked the concept and tried it out on a real world project, with what I thought were very pleasing results. I thought I had a decent understanding of the concept.

So far, so good. Then something happened. I started hearing about BDD in another context, and that other context seemed to be the only one... all of a sudden, I wasn't sure I had understood it at all.

Let's take a step back. What are these different types of BDD that I'm talking about? One is about creating a tiny, formal, executable language for describing requirements and acceptance tests at a high level. A language to unite business people, testers and developers. A language for describing a situation, describing what's happening and describing the result. Let's call this high level BDD.

The other type of BDD is to do with changing the wording of ordinary TDD. Instead of tests, we should talk about specifications of behavior. Tests should be named with "Should" as a prefix. Let's call this low level BDD.

I think I have been doing the low level BDD for years and still calling it TDD (OK, my prefix has been "Can", but...), so not much new to me there. And if there is something new, I think it's easy to grasp in a few minutes. On the other hand, the high level BDD is different. It's not something I've done before, at least not as formalized, and not as a tool for bringing business people, testers and developers together. To me, it's high level BDD that should be pushed (and pushed hard), not low level BDD, which seems to be the pushers' current choice.

Can I hope for the return of BDD? The high level one?