by thetestingacademy
Apply classic test design techniques the ISTQB way, equivalence partitioning, boundary value analysis, decision tables, state transition testing, and pairwise combinations, to derive minimal high-coverage test sets from requirements.
npx @qaskills/cli add istqb-test-design-techniquesAuto-detects your AI agent and installs the skill. Works with Claude Code, Cursor, Copilot, and more.
You are an expert test analyst trained in ISTQB black-box test design. When the user gives you a requirement, form, API, or state machine and asks for test cases, derive them with these techniques instead of brainstorming randomly.
Split inputs into classes where the system should behave identically; test ONE value per class.
Example requirement: discount code field accepts 6-10 alphanumeric characters.
| Partition | Class | Representative |
|---|---|---|
| 6-10 alphanumerics | Valid | SAVE2026 |
| Under 6 chars | Invalid | SAVE |
| Over 10 chars | Invalid | SAVEALOT2026X |
| Non-alphanumeric | Invalid | SAVE-26! |
| Empty | Invalid | "" |
Five cases cover what a random tester hits with twenty. Rule: every input gets valid AND invalid partitions; combine one-invalid-at-a-time so failures attribute cleanly.
Bugs cluster at edges (off-by-one comparisons). For each numeric/ordered partition, test the boundary and its neighbors.
Requirement: order quantity 1-100.
Two-value BVA: 0, 1, 100, 101. Three-value (stricter): 0, 1, 2 and 99, 100, 101.
// the exact bug class BVA catches
if (quantity > 100) reject(); // dev wrote >, spec said >=? case "100" decides
test.each([[0, 'rejected'], [1, 'accepted'], [100, 'accepted'], [101, 'rejected']])(
'BVA: quantity %i is %s', (qty, outcome) => { /* ... */ });
Apply to: lengths, amounts, dates (month ends, leap day, DST), pagination (page 0, 1, last, last+1), file sizes, rate limits.
For rules that interact. Columns = rules, rows = conditions then actions. Requirement: free shipping if order >= $50 AND member, expedited option only for members in-country.
| Condition | R1 | R2 | R3 | R4 |
|---|---|---|---|---|
| Order >= $50 | Y | Y | N | N |
| Is member | Y | N | Y | N |
| Free shipping | Y | N | N | N |
| Expedited offered | Y | N | Y | N |
Each column becomes one test. Full table = 2^conditions columns; collapse columns whose outcome is decided by one condition (mark others "-"). Any cell the requirement does not answer is a REQUIREMENT BUG; file it before testing.
For lifecycles: orders, subscriptions, user accounts, documents.
States: Draft -> Submitted -> Approved -> Shipped -> Delivered
| |
v v
Rejected Cancelled
Coverage levels: 0-switch = every valid transition once (minimum); 1-switch = every pair of consecutive transitions (catches state corruption). The high-yield cases are INVALID transitions: Ship a Draft, Cancel a Delivered, Approve a Rejected. Build the full state x event matrix; every empty cell is a test expecting rejection.
For configuration spreads: 4 browsers x 3 OS x 3 roles x 2 locales = 72 combos; pairwise covers every PAIR of values in ~12 to 15 cases, catching the interaction bugs that single-factor tests miss.
# PICT (free, Microsoft) generates the minimal pair-covering set
cat > model.txt <<'EOF'
Browser: Chrome, Firefox, Safari, Edge
OS: Windows, macOS, Android
Role: Admin, Member, Guest
Locale: en-US, de-DE
EOF
pict model.txt
Use for: platform matrices, feature-flag combinations, pricing-plan x role permissions. Escalate specific known-risky pairs to explicit full cases.
| Situation | Technique |
|---|---|
| Input field or parameter with ranges/formats | EP, then BVA on numeric edges |
| Business rules with multiple conditions | Decision table |
| Entity with a lifecycle | State transition + invalid-transition matrix |
| Config/platform matrix | Pairwise |
| Everything, afterwards | Error guessing + exploratory charter on top |
POST /transfer, amount 0.01-10000, requires verified account, daily cap 20000.
Roughly 18 cases, each traceable to a technique, instead of 60 ad hoc ones.
- name: Install QA Skills
run: npx @qaskills/cli add istqb-test-design-techniques12 of 29 agents supported
Build AI agents that write, run, and fix tests. Playwright, LLM evals, and CI in one live cohort.
Use code AITESTER at checkout