Test cases are getting a very bad press of late. There is a perception that they are a wasteful practice, built carefully and slowly in a dark corner away from all collaboration, sprung on unsuspecting programmers to expose the unanticipated obscure edges of their code.
I don’t believe it has to be like that, and I haven’t practiced building test cases in that fashion for a long time. I prefer:
Test Ideas – your team are delivering a piece of functionality. You have basic understanding of its aims, maybe a few acceptance criteria. Its time to brainstorm. Grab the people who you think are useful (and perhaps some who are not directly involved), have a time-boxed brainstorm. Thirty minutes should do it. An all round view is required, stay away from the detail. FIBLOTS is an excellent heuristic here. Lets say we’ve walked away with 40 ideas of areas to test.
Test Scenarios – Time has passed, the team has made discoveries, you’ve had your first bit of the new functionality. You’ve realised that of your 40 ideas, there might be 20 you actually really, really need, plus another 10 that you didn’t think of in your ideas stage. Give them a bit of care and attention now, adding personas, descriptions, pre-conditions, post-conditions, however you wish to flesh them out. Not too much detail and no steps!
Test Cases – right, now we get down it. You have an idea. You have a resulting scenario. If there are any key tests (hint – attached to acceptance criteria), you can add further details, even a few steps. I personally use this to automate my acceptance tests, rather than creating a manual script, where I think the value of a test case begins to drop dramatically.
In addition, you can show your decisions about what to cover and when in a meaningful way. Always treat your test assets as something which can be iterated on, and bring your test cases out of the ‘dark ages.’