seed-skills/istqb-test-design-techniques/SKILL.md
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 skillsauth add PramodDutta/qaskills ISTQB Test Design TechniquesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
development
Generate test data from the schemas you already have. Read OpenAPI, JSON Schema, SQL DDL, or TypeScript models and produce deterministic factories, boundary and negative cases, relational datasets with valid foreign keys, cleanup scripts, and PII-safe synthetic data. Production records never leave the machine.
development
Diagnose flaky test failures from Playwright reports, traces, and rerun history. Classify each failure as product, test, environment, data, or unknown with cited evidence and a proposed fix. Never auto-modifies code without opt-in.
tools
Test LLM, RAG, MCP, and agentic systems end to end. Build golden datasets, run deterministic checks and LLM judges, score retrieval, probe prompt injection, verify tool use, and gate CI on thresholds. Orchestrates DeepEval, Ragas, promptfoo, and Langfuse.
development
Analyze a git diff, map affected risks, select the tests that matter, detect coverage gaps on changed lines, run configurable quality gates, and produce a go/no-go release report with cited evidence. Recommends only; never merges or deploys.