Skip to content

Exploratory Testing: What Scripted Test Cases Miss

ILIA KARPENKO4 min read

Exploratory testing is testing where designing the next test, running it, and interpreting the result happen together, in a single pass, guided by what the last result just showed. Nothing is scripted ahead of time. A tester picks a feature and a mission, works it, and lets each observation decide the next action rather than following a checklist written days earlier by someone who hadn't seen the running system yet.

The gap it closes is specific. A scripted case, whether a human wrote it or an AI generator did, only exercises the input combinations someone thought to specify in advance. That covers the paths anyone anticipated. It says nothing about the path nobody anticipated: a state you reach by canceling a form halfway through twice, a permission check that only misfires when two roles are held by one account, a race condition that only a human trying things in an unplanned order stumbles into. Those are exactly the defects that make it to production, because a script that no one wrote never runs.

How it differs from scripted testing

Scripted testingExploratory testing
Test designBefore executionDuring execution
Coverage evidenceA checklist of run casesA session log and a debrief
Best atRegression, compliance, known pathsNovel paths, integration edge cases, usability
RepeatabilityHigh, same steps every runLow, depends on the tester's path that session
Skill dependencyLow once cases are writtenHigh, output tracks tester experience directly

Neither replaces the other. A regression suite proves the paths you already know about still work. Exploratory sessions find the paths you don't know about yet. Skipping either one leaves a real gap, not a redundant one.

Free and open sourceCasely writes these cases for youAttach a spec and one file of your team's existing test cases in Claude. Casely copies your columns, names the gaps it found in the spec, and exports a single Excel file your tracker imports in one pass.Read the install docs

Session-based test management

Unstructured exploratory testing has a real failure mode: two hours pass, a tester found three things worth noting, and nobody, including the tester, can say afterward what was actually covered. Session-based test management (SBTM) fixes that without scripting away the improvisation, using three pieces.

A charter states the mission in one or two sentences: what area, what kind of risk, what's out of scope for this session. A timebox, usually 60 to 120 minutes, keeps a session small enough to plan around and short enough that focus doesn't drift. A session log, written during or immediately after, records what got covered, what bugs and questions came up, and what didn't get tested because the time ran out. The debrief that follows turns the log into the actual coverage record: not a list of steps, but a list of what's now known and what's still open.

A worked charter

Charter: "Explore the discount code field at checkout for interactions with cart state changes, for 90 minutes. Out of scope: payment processing itself."

A tester working this charter doesn't run a fixed script. They apply a valid code, then remove an item and watch whether the discount recalculates or silently keeps the stale total. They apply a code, then add an item that pushes the cart over a free-shipping threshold, and check whether the two promotions stack, cancel each other, or produce a total that matches neither rule. They open a second tab, apply a single-use code in both, and see which one the backend actually honors. None of that sequence exists in any test case, because nobody sat down and specified "test two tabs applying the same single-use code" ahead of time. It's the kind of thing a person notices mid-session and decides to try.

The debrief afterward states what was covered (single-tab code application, three cart-mutation orderings, one concurrency check), what broke (stale total after item removal), and what's still open (the promotion-stacking behavior wasn't fully pinned down and needs another session).

Where it fails

It produces a weaker paper trail than a scripted suite. A session log says what a tester tried and found. It doesn't reproduce as a fixed set of steps a different person can rerun identically next month, which matters for regression tracking and for any compliance process that wants a documented, repeatable test record.

Output quality tracks tester skill directly. A tester who knows the domain and has broken systems like this before finds real bugs in ninety minutes. A tester without that background produces a session log with far less in it, on the same charter, in the same time. Scripted cases don't have this variance problem, because the thinking already happened when the case was written.

It doesn't scale as evidence for "we tested this." A pile of session logs is harder to audit at a glance than a suite with a pass count, and a stakeholder asking "did we test the refund flow" wants a clearer answer than "someone explored it for an hour and found two things."

Coverage gaps hide as easily as they do in any manual process. Nothing about the technique guarantees a tester touches the area that actually matters most. A charter written for the wrong feature wastes the session as thoroughly as a bad test case would.

What's worth automating

Nothing about exploratory testing itself automates well: the judgment of what to try next based on what just happened is the entire technique. What does automate is everything around it. Scripted regression cases, generated from requirements or acceptance criteria, cover the known paths so a tester's exploratory time goes toward the paths nobody specified yet, instead of re-manually-checking a login form for the hundredth sprint in a row.

Open sourceThe skill lives on GitHubMIT licensed, no account, nothing to install on your machine. Star it if it saves you an afternoon.View the repository