In the interview with the Coding QA guys that was the subject of my last post, James Bach refers exploratory testing as parallel learning test design, test execution and learning, and said that exploratory approaches are epitomized by loops.
Where do loops happen in exploratory testing? In fact, exploratory testing includes both looping and branching. When we’re testing in an exploratory way, we may branch away from the current path of our activity at any time. That might happen when we observe a particular test result (output; a single observable value) or other test outcome (anything else that might be happening on the system), or anywhere at all during design, execution or learning. We may get a new idea out of the blue. A distraction or an interruption might prompt a change in tack. We may get some new information about the product or project’s context. Some emotional reactions or feelings—for example, surprise, confusion, curiosity, frustration, or boredom— might act as a trigger for branching, while others might cause us to continue along the same path. Our charters, our specifications, and the like, prompt us to focus; the idea that we might be getting into a rut prompts us to defocus; new information prompts us to refocus. These are alternating heuristics, and they’re important aspects of exploratory skills and dynamics.
As Louis Pasteur pointed out, “In the fields of observation, chance favors only the prepared mind.” In any exploratory process, there’s an element of happenstance, since we never know for sure what we’re going to find. New ideas or an epiphanies don’t exactly follow schedules, so exploratory testers are aware of patterns of alternation and use them: doing vs. thinking; doing vs. describing; gathering data vs. analyzing data; testing quickly vs. testing carefully; generating ideas vs. elaborating ideas; overproducing ideas vs. abandoning ideas vs. recovering ideas; and so forth. We branch when something diverts us or when we divert ourselves from our current line of investigation; the branch turns into a loop when we learn, return and iterate.
The point of all this is that in exploratory testing, it’s the tester—not someone or something else—that is in control of the process of interacting with the product, with the testing mission, and with time. Consequently, self-management is an important skill of exploratory testing.