Earlier this year I got to hear about Behaviour Driven Development from Dan North at the Software Architecture Workshop in Arosa, Switzerland. Since then, I’ve been using BDD to various degrees on various projects, and I have to say that it works for me.A few nights ago, I presented BDD at the July GeekDinner in Cape Town. I had no idea how this approach will be received, but I was quite surprised by the interest and chatter that I had with others after the talk, especially around rbehave. I wonder how the conversation would have turned out had I used JBehave examples instead?The rest of the GeekDinner was, as always, an interesting mix of techie, geeky things. Jonathan Hitchcock has a nice wrap-up of the evening.Download my presentation here (PDF format).
Also, I have to remind myself to not think about waves as email, or tweets or instant messages. It’s just something else! And it has a different spin on the time dimension of communication.
I suspect that Google Wave will force us to be better at the way we communicate, how we express ourselves and the relevance of the content to the conversation. I can imagine a wave growing over time that describes a story started by a domain expert with feedback from a developer and a nice cadence emerging between them. It all is in one nice wave, with playback that tells you how you got there in the first place. I wonder if this will have an influence on effectiveness of remote pairing?
I also have a feeling that if you’re a waterfall type of person, then waves will not have an impact on you. It’s all about feedback and dealing with the changes, which is at the heart of agility.
Now I just need someone to wave with to try out a slightly modified development flow.
I thoroughly enjoyed Karen Greave’s talk on Agile Testing. She had just about 100% coverage (pun intended, groan). Yet, testing is really a pain in the rear. Testing is execution, and Karen was dead-on right, that automation is the path to follow. Computers are very good at testing. A computer does what it is programmed to do, and it can test the way it was programmed to test. It’s simple: if testing is your constraint, move that constraint away from testing by automating.
Now, you have to deal with the constraint that shifted to the next point: test authoring. While testing (i.e. execution) is just a passive, laborious effort, test authoring is a very creative, active exercise. It is actually an exercise in confirming a shared, common understanding. Kristin Nygard said “To program is to understand” and test authoring is a programming exercise. That’s why outside-in, behavior driven development style scenarios are actually tests, coded in a human language. The act of authoring a scenario proves your understanding and the expected working of the software.
This is why I separate test execution (passive) from test authoring (active). And Karen said that early feedback is good (right again), which is why I author my tests very early. I’m extreme about this. I test first.