This is a topic whole generations of software testers have debated about. Test case design is a very subjective matter, depending hugely on the preferences of the test engineer and the requirements of the project. Although exploratory techniques are increasingly popular in the testing world, scripted manual testing used in many projects.
Image © Juja Schneider
When you are in charge of designing test cases you will have to decide which level of detail you want to apply to your test cases. This level of detail reaches from the vague description of a given scenario to a list of every single click a tester should perform. You can cover several actions in one test step or split them up into several ones. The more details you provide, the bigger your test suite will be at the end.
But which approach is the right one? This answer might not really help you, but: It depends!
Let’s talk about some advantages of detailed test cases.
- The test case are very detailed.
- You can ensure that less obvious features and scenarios are covered.
- Even less experienced testers can perform them easily as a precise sequence of steps is specified. It is often stated that this becomes a candidate for outsourcing.
- Testers who are not familiar with the target application will get a detailed overview about the system’s features.
- Complex and critical key features can be tested very thoroughly based on the requirements and specifications.
- There will be no room for interpretation whether a test case is failed or not.
Sounds good? It is… often. However we wouldn’t have started the discussion again if this is the answer. So what are the disadvantages?
- The test case are very detailed. Yes, this sentence is supposed to be here.
- You have to invest much more time and effort into creating the test cases.
- The maintenance of your test cases is a much larger topic. Every time a small detail changes, you have to adjust the test cases.
- You may miss creative testing approaches of skilled testers. Test case extensions while testing are unlikely to happen.
- Re-using test cases in future projects is less likely as test cases are more project specific.
- Testers may develop kind of a tunnel view. You may know this from your own experience: If you are forced to follow a specific path to reach your target, you may lose sight for details along the way.
- The test results depend heavily on the person who created the test cases. If he/she didn’t do a good job, the executing testers won’t make up for this during testing. If the test case designed missed important steps, the testers will miss them too.
- Providing detailed steps without room for alternative paths will magically merge a group of testers into one single tester. While they will follow precisely the steps when detailed test cases are provided, they might use a completely different approach when they have the freedom to look around.
- If the results are precisely defined, nobody will question what he or she sees on the screen, so you miss the testing of testing.
- Or taken to an extreme: Detailed aka step by step test cases will turn your testers into human test automation engines with the advantage of additional pairs of eyes. If you get lucky, your testers will report things they see but which are not stated in the tests, such as broken layouts for instance.
So what is right and what is wrong? Some guidelines would help, wouldn’t they? As there won’t be THE ultimate solution, here are a couple of hints about how to find the right way for your project.
- Keep the subject of your project in mind
If you test a medical device, you probably have to have very detailed test cases to satisfy the regulations and document everything as good as possible, because there are lives at stack. Assuming you test just a DVD player, you might go with 20 relatively free and 5 detailed test cases instead.
- Consider the skills of your testers
Highly skilled testers won’t need detailed instructions for all test areas. You may want to define test cases in a more pragmatic way.
- Think of your future user base
If this is an extremely large group, where all levels of expertise exist, you want to reflect that in your testing without driving up the time needed to test. If your future user base is extremely experienced and have to go by the books anyways, such as pilots, you can reflect that in your testing.
- Specify the goal and not the way
Try to avoid the step by step descriptions. Instead of sending someone down a menu by saying click here, here, here, here, and there, you just state: Navigate to X using the application menu.
- Challenge your application
The later real world user will make mistakes you cannot anticipate, so add that jitter to your testing. Give your team room for creativity and for going individual paths.
Regardless if your project subject requires detailed test cases: Try to harvest the power of randomness, give your testers enough power to question anything anytime while keeping control of what has to be done.