test-design-techniques
npx skills add https://github.com/proffesor-for-testing/sentinel-api-testing --skill test-design-techniques
Agent 安装分布
Skill 文档
Test Design Techniques
<default_to_action> When designing test cases systematically:
- APPLY Boundary Value Analysis (test at min, max, edges)
- USE Equivalence Partitioning (one test per partition)
- CREATE Decision Tables (for complex business rules)
- MODEL State Transitions (for stateful behavior)
- REDUCE with Pairwise Testing (for combinations)
Quick Design Selection:
- Numeric ranges â BVA + EP
- Multiple conditions â Decision Tables
- Workflows â State Transition
- Many parameters â Pairwise Testing
Critical Success Factors:
- Systematic design finds more bugs with fewer tests
- Random testing is inefficient
- 40+ years of research backs these techniques </default_to_action>
Quick Reference Card
When to Use
- Designing new test suites
- Optimizing existing tests
- Complex business rules
- Reducing test redundancy
Technique Selection Guide
| Scenario | Technique |
|---|---|
| Numeric input ranges | BVA + EP |
| Multiple conditions | Decision Tables |
| Stateful workflows | State Transition |
| Many parameter combinations | Pairwise |
| All combinations critical | Full Factorial |
Boundary Value Analysis (BVA)
Principle: Bugs cluster at boundaries.
Test at boundaries:
- Minimum valid value
- Just below minimum (invalid)
- Just above minimum (valid)
- Maximum valid value
- Just above maximum (invalid)
// Age field: 18-120 valid
const boundaryTests = [
{ input: 17, expected: 'invalid' }, // Below min
{ input: 18, expected: 'valid' }, // Min boundary
{ input: 19, expected: 'valid' }, // Above min
{ input: 119, expected: 'valid' }, // Below max
{ input: 120, expected: 'valid' }, // Max boundary
{ input: 121, expected: 'invalid' } // Above max
];
Equivalence Partitioning (EP)
Principle: One test per equivalent class.
// Discount rules:
// 1-10: No discount
// 11-100: 10% discount
// 101+: 20% discount
const partitionTests = [
{ quantity: -1, expected: 'invalid' }, // Invalid partition
{ quantity: 5, expected: 0 }, // Partition 1: 1-10
{ quantity: 50, expected: 0.10 }, // Partition 2: 11-100
{ quantity: 200, expected: 0.20 } // Partition 3: 101+
];
// 4 tests cover all behavior (vs 200+ if testing every value)
Decision Tables
Use for: Complex business rules with multiple conditions.
Loan Approval Rules:
ââââââââââââââââ¬ââââââââ¬ââââââââ¬ââââââââ¬ââââââââ¬ââââââââ
â Conditions â R1 â R2 â R3 â R4 â R5 â
ââââââââââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¤
â Age ⥠18 â Yes â Yes â Yes â No â Yes â
â Credit ⥠700 â Yes â Yes â No â Yes â No â
â Income ⥠50k â Yes â No â Yes â Yes â Yes â
ââââââââââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¼ââââââââ¤
â Result âApproveâApproveâReject âReject âReject â
ââââââââââââââââ´ââââââââ´ââââââââ´ââââââââ´ââââââââ´ââââââââ
// 5 tests cover all decision combinations
State Transition Testing
Model state changes:
States: Logged Out â Logged In â Premium â Suspended
Valid Transitions:
- Login: Logged Out â Logged In
- Upgrade: Logged In â Premium
- Payment Fail: Premium â Suspended
- Logout: Any â Logged Out
Invalid Transitions to Test:
- Logged Out â Premium (should reject)
- Suspended â Premium (should reject)
test('cannot upgrade without login', async () => {
const result = await user.upgrade(); // While logged out
expect(result.error).toBe('Login required');
});
Pairwise (Combinatorial) Testing
Problem: All combinations explode exponentially.
// Parameters:
// Browser: Chrome, Firefox, Safari (3)
// OS: Windows, Mac, Linux (3)
// Screen: Desktop, Tablet, Mobile (3)
// All combinations: 3 Ã 3 Ã 3 = 27 tests
// Pairwise: 9 tests cover all pairs
const pairwiseTests = [
{ browser: 'Chrome', os: 'Windows', screen: 'Desktop' },
{ browser: 'Chrome', os: 'Mac', screen: 'Tablet' },
{ browser: 'Chrome', os: 'Linux', screen: 'Mobile' },
{ browser: 'Firefox', os: 'Windows', screen: 'Tablet' },
{ browser: 'Firefox', os: 'Mac', screen: 'Mobile' },
{ browser: 'Firefox', os: 'Linux', screen: 'Desktop' },
{ browser: 'Safari', os: 'Windows', screen: 'Mobile' },
{ browser: 'Safari', os: 'Mac', screen: 'Desktop' },
{ browser: 'Safari', os: 'Linux', screen: 'Tablet' }
];
// Each pair appears at least once
Agent-Driven Test Design
// Auto-generate BVA tests
await Task("Generate BVA Tests", {
field: 'age',
dataType: 'integer',
constraints: { min: 18, max: 120 }
}, "qe-test-generator");
// Returns: 6 boundary test cases
// Auto-generate pairwise tests
await Task("Generate Pairwise Tests", {
parameters: {
browser: ['Chrome', 'Firefox', 'Safari'],
os: ['Windows', 'Mac', 'Linux'],
screen: ['Desktop', 'Tablet', 'Mobile']
}
}, "qe-test-generator");
// Returns: 9-12 tests (vs 27 full combination)
Agent Coordination Hints
Memory Namespace
aqe/test-design/
âââ bva-analysis/* - Boundary value tests
âââ partitions/* - Equivalence partitions
âââ decision-tables/* - Decision table tests
âââ pairwise/* - Combinatorial reduction
Fleet Coordination
const designFleet = await FleetManager.coordinate({
strategy: 'systematic-test-design',
agents: [
'qe-test-generator', // Apply design techniques
'qe-coverage-analyzer', // Analyze coverage
'qe-quality-analyzer' // Assess test quality
],
topology: 'sequential'
});
Related Skills
- agentic-quality-engineering – Agent-driven testing
- risk-based-testing – Prioritize by risk
- mutation-testing – Validate test effectiveness
Remember
Systematic design > Random testing. 40+ years of research shows these techniques find more bugs with fewer tests than ad-hoc approaches.
Combine techniques for comprehensive coverage. BVA for boundaries, EP for partitions, decision tables for rules, pairwise for combinations.
With Agents: qe-test-generator applies these techniques automatically, generating optimal test suites with maximum coverage and minimum redundancy. Agents identify boundaries, partitions, and combinations from code analysis.