How Do You Spell Testing?

[article]
A Mnemonic to Jump-Start Exploratory Testing
Summary:

Exploratory testing operates fluidly in real time. But that doesn't mean the process has to be random or scattered. The use of heuristics and mnemonics can serve as a road map to follow as you dive into the exploratory process. In this column, James Bach shares the mnemonic he relies on most for testing and how you can use it to make sure you're covering all the bases.

In exploratory testing, we design and execute tests in real time. But how do we organize our minds so that we think of worthwhile tests? One way is through the use of heuristics and mnemonics. A heuristic is "a rule of thumb, simplification, or educated guess." For example, the idea of looking under a welcome mat to find a key is a heuristic. A mnemonic, by contrast, is a "word, rhyme, or other memory aid used to associate a complex or lengthy set of information with something that is simple and easy to remember." Heuristics and mnemonics go together very well to help us solve problems under pressure.

SFDPO Spells Testing
A mnemonic and heuristic I use a lot in testing is "San Francisco Depot," or SFDPO. These letters stand for Structure, Function, Data, Platform, and Operations. Each word represents a different aspect of a software product. By thinking of the product from each of those points of view, I think of many interesting tests. So, when I'm asked to test something I haven't seen before, I say "San Francisco Depot" to myself, recite each of the five product element categories and begin thinking of what I will test.

Structure (what the product is): What files does it have? Do I know anything about how it was built? Is it one program or many? What physical material comes with it? Can I test it module by module?

Function (what the product does): What are its functions? What kind of error handling does it do? What kind of user interface does it have? Does it do anything that is not visible to the user? How does it interface with the operating system?

Data (what it processes): What kinds of input does it process? What does its output look like? What kinds of modes or states can it be in? Does it come packaged with preset data? Is any of its input sensitive to timing or sequencing?

Platform (what it depends upon): What operating systems does it run on? Does the environment have to be configured in any special way? Does it depend on third-party components?

Operations (how it will be used): Who will use it? Where and how will they use it? What will they use it for? Are there certain things that users are more likely to do? Is there user data we could get to help make the tests more realistic?

Bringing Ideas to Light
I can get ideas about any product more quickly by using little tricks like SFDPO. But it isn't just speed I like, it's reliability. Before I discovered SFDPO, I could think of a lot of ideas for tests, but I felt those ideas were random and scattered. I had no way of assessing the completeness of my analysis. Now that I have memorized these heuristics and mnemonics, I know that I still may forget to test something, but at least I have systematically visited the major aspects of the product. I now have heuristics for everything from test techniques to quality criteria.

Just because you know something doesn't mean you'll remember it when the need arises. SFDPO is not a template or a test plan, it's just a way to bring important ideas into your conscious mind while you're testing. It's part of your intellectual toolkit. The key thing if you want to become an excellent and reliable exploratory tester is to begin collecting and creating an inventory of heuristics that work for you. Meanwhile, remember that there is no wisdom in heuristics. The wisdom is in you. Heuristics wake you up to ideas, like a sort of cognitive alarm clock, but can't tell you for sure what the right course of action is here and now. That's where skill and experience come in.

Good testing is a subtle craft. You should have good tools for the job.

About the author

StickyMinds is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.