I almost forgot that before the BDD/DDD presentation, there was a presentation about Selenium. I didn't forget it because it was a bad presentation but because the following presentation was so good...
I've never had any good experiences with tools for automatic testing but I must confess that Selenium looks nice. At least if you want to add regression tests to an existing GUI. And it is a web based GUI. So if those two fact apply to you, you should take a look at Selenium I think.
Selenium is good at recording actions and create test code. And it creates test code for unit tests frameworks such as NUnit and a whole bunch of other languages such as Python, Java, Ruby, PHP and more. However there seems to be some stability problems at the moment. According to the presenter (I have not found a link to verify this); Google have more than 51000 selenium tests in their projects. 96% of the tests run with no problem, 2% have problems due to confirmed bugs in Selenium and the last 2% are tests failing where the reason is unclear (Selenium vs the code tested).
This is a common problem I see when I work with open source. Open source applications are typically quite useful and easy to use 99% of the time. But I always tend to end up needing the last percent which is never implemented or have bugs. And the reason for this is usually that no one have bothered to implement the last tricky advanced feature I end up needing. You probably wanna know why I do not sit down and implement that feature and contribute it back to the open source community. Well that is a whole other topic and I will write about that it the near future.
I've previously written about BDD (in Swedish) and maybe I should translate some of those articles since I've now decided to start writing in English. Anyhow, last night I had the chance to listen to Dan North on the topic: How does DDD and BDD relate? This was the first time I've listened to Dan live and I must say I was surprised - in a good way.
First of all he have that special British humor we tend to like in Sweden. Secondly he was very pragmatic in his thoughts about different theories and how (and why) they should be implemented. Another thing I like since agile evangelists (not saying Dan is an evangelist but...) tend to be less pragmatic than what is healthy for them and their theories.
First part was about describing DDD. I must confess that I've had some troubles understanding what all the fuzz has been all about when it comes to DDD since domain driven design always have been quite obvious to me. That was until this evening. Dan pointed out that there are a lot more domains to consider than even the traditional DDD-evangelists talk about and I think this was an important point. As was the point that some of the domains might be technology related. One interesting trick of the trade I learned where: If some domain is not interesting to one person - it is a domain interesting to someone else. Example: End users don't care about implementation platform - hence it is a domain important to someone else.
Then started a short presentation of BDD. And now it got interesting since I've had a few discussions with other people and I'm a firm believer that BDD is TDD done right. I still agree that TDD is a bad name for Example Driven Development or whatever you want to call it and I have always felt a little uncomfortable with how BDD is often presented, i.e. as something new. I'd rather like to see BDD as a coaching aid in order to explain TDD. But since TDD is such a bad name I'm happy to use BDD since it better describes how I think TDD should be practiced. The good thing is that I don't feel Dan said anything contradicting my beliefs. If anything the opposite, I feel my view on BDD is the same as Dan's which at least makes me feel good when I talk to people about BDD.
So what was the conclusion of the presentation? Well, DDD is about design and DDD helps you design the vocabulary you should use. BDD helps you develop the correct behavior. Together they are a better tool than each of them alone.