I came across Elisabeth Hendrickson's "Test Heuristics Cheat Sheet" yesterday and developed some pairwise testing (AKA 2-way combinatorial) test cases using many of the good ideas contained in it. I would highly recommend it, I'd recommend you send it (or email a link to this blog post) to everyone on your QA team.
As an indication that the Hendrikson's Test Heuristics Cheat Sheet works well to uncover defects,
I wanted to create a set of pairwise tests that could be broadly applicable to test thousands of different applications, I incorporated many ideas from the Test Heuristics Cheat Sheet.
I intend to use those inputs to test our test design tool, Hexawise.
The way Hexawise works is that users enter "things they want to test" into Hexawise on the first of three screens, the "Define Inputs" screen, then click on "Create Tests." Hexawise then uses a scientific approach to maximizing coverage of the combinations of all the "stuff to be tested" in the fewest possible number of tests. This scientific approach is based on the >40 years of Design of Experiments lessons and includes both pairwise / AllPairs methods as well as more thorough 3-way, 4-way, 5-way and 6-way tests (as well
Ironically, even before starting to execute the test conditions suggested by Hexawise, I discovered that the special characters that I had input into the "Define Inputs" screen (which I took from the Test Heuristics Cheat Sheet) triggered a previously unidentified defect in Hexawise itself.
The fact that it was triggered so quickly in an application that has been live for a year and used thousands of times is a strong indication that using checklists and cheat sheets can be a great way to efficiently find defects.
Why is using checklists to guide your testing often such an efficient and effective way of finding defects? Here's my top ten list:
- The "bad ideas" have already been weeded out.
- The ideas on the list have found enough defects to make the author of the checklist think there is value in testing the particular idea.
- If you've got a checklist or "cheat sheet" put together by someone as thoughtful and experienced as the Bachs, Bolton, and Hendrickson, you're getting a highly-condensed executive summary version of many of their valuable insights.
- All testers go through many, many, "I wonder what would happen if we did this or considered that?" scenarios.
The checklists referenced above represent expertise culled from thousands of testing projects.
- Checklists are directly actionable. You can apply them in almost no time at all.
- They work well. See Cem Kaner's slides on the Value of Checklists (11 Mb pdf file).
- They can easily evolve into some of your most powerful test artifacts.
Checklists include useful, defect-triggering ideas that you may not have thought of on your own.
- Start with the lists above. See if each of the ideas for tests trigger defects in your Systems Under Test.
- Find a lot of defects from certain test ideas? Create your own checklist of ideas that worked and iterate them over time.. Consider expanding upon the checklist items and concepts that do bear fruit.
- Don't ever find defects from certain of the test ideas? Consider dropping those items from the checklists if they don't bear fruit for you (or put tests for those ideas at the back of your lists and only include tests for them if you have extra time).
Using checklists mitigate the risk that you will forget to test for things that you know you should be testing for (but could well forget to test for in any specific instance).
- No software or books to buy.
- No courses or conferences to attend.
Software testing checklists are an efficient way to communicate actionable information.
Software testing checklists are widely applicable to all kinds of software testing.
- As humans, we're naturally forgetful as a species despite our best efforts.
- Checklists are widely used with good results by doctors, lawyers, pilots, software testers, and people going to grocery stores to minimize the effects of these shortcomings.
Software testing checklists can be easily used in pairwise and combinatorial testing.
- Checklists can be used in creating Unit Tests, Assembly Tests, Product Tests, System Tests, Functional Tests, Load Tests, Performance Tests, User Acceptance Tests, etc.
- Checklists can be used by Exploratory Testers and "script-everything-in-advance" test-case-centric testers.
- Checklists can be used in Agile projects as well as Waterfall projects.
- Using elements from the checklists in a pairwise test will have the added benefit that not only will you test for every one of the testing ideas on the checklist (e.g., XXX) but also, you can easily test for every idea on the checklist **in combination with** every other test idea on the checklist in at least one test case.