Behavior-Driven Development for Everyone
There are several frameworks in the BDD space that enable developers to work in such a mindset. Some of those frameworks include RSpec, JBehave, JSSpec, NSpec, and others. One framework however, was designed to make BDD as easy as possible. easyb is,
a behavior driven development framework for the Java platform. By using a specification based Domain Specific Language, easyb aims to enable executable, yet readable documentation.Recently, Rod Coffin (site down as of 9/20/2008), wrote an article titled "Behavior-driven development with easyb". Rod does a nice job of introducing BDD and specifically the easyb framework. Rod summarizes what easyb provides and how it's done by stating,
With easyb, you can write user stories, develop specifications for system components, describe UI interactions, and much more...easyb specifications are represented as Groovy scripts. Because of the nature of the Groovy language, and the leniency afforded to Groovy scripts over classes, easyb specifications are relatively free of programmer-specific syntax, placing the focus instead on communicating behaviors.Throughout the article Rod provides samples of behaviors defined with easyb and his article is worth checking out to learn more. Rather than repeat what has already been covered, InfoQ spoke with the easyb development team to find out what's coming down the pipeline and where the project is headed.
InfoQ: What's the roadmap look like for easyb?
easyb-dev: Easyb is looking forward to a 1.0 release in the near future. It will include a multitude of reporting enhancements, including an html version of all reports. The Intellij plugin has plenty of upgraded features and makes using easyb in our favorite IDE a pleasure. Integration with Junit is also on the horizon. Whether the goal is to use easyb in conjuction with existing library of tests or just to find a way to easily introduce easyb into environments that are often hostile to new concepts, we're hoping to lower those barriers.
A few new components will most likely make their debut in the 1.0 release. Easiness, a web application for building stories and then implementing them, will help bring testing with behaviors to even the non technical among us. Why not marry up the easiest web framework (Grails) with the easiest BDD tool (easyb). Thats exactly what the new Grails plugin will allow and its expected to make at least a beta appearance around the 1.0 timeframe. One big item that is on the (post 1.0) roadmap is an eclipse plugin. The Intellij plugin is so much fun we wouldn't want to leave the other half of the IDE users out in the cold.
InfoQ: Will there be more information the easyb website about integration with Maven and Spring (maybe other frameworks)?
easyb-dev: Keep an eye on the easyb.org page as cookbooks will begin to make appearances. These will cover, with examples, a wide range of common (and even not so common) uses of easyb. Definitely to be included will be hot topics such as Spring, JUnit, and mocking.
InfoQ: Any thoughts on a port of easyb to another language (i.e. ActionScript, Python, Ruby)?
easyb-dev The Ruby community already has a fantastic product quite similar to easyb named rspec. Many of the folks on the dev team all have special places in their hearts for some of the languages you mention but they are currently no plans to bring easyb to anything other than the jvm. It seems to be a consensus among the team members that we wouldn't be allocating enough time and attention to properly bring the same great product to those platforms. We do however encourage anyone who is interested in expanding easyb to other languages to come be a part of the easyb team.
In conclusion, behavior-driven development is a technique for improving collaboration on a software development project between the technical (developers, testers, etc) and typically non-technical (management, clients, etc) participants. easyb aims to deliver a framework to ease the process for all participants and is actively being developed.
Are you using BDD on your software projects? If so, what are your thoughts on how it may have improved the success of the project? If not, why haven't you tried? If you have tried it, why didn't it "stick" for your project?