名称:测试设计技术 描述:“使用边界值分析、等价类划分、决策表、状态转移测试和组合测试进行系统化测试设计。适用于设计全面测试用例、减少冗余测试或确保系统化覆盖。” 类别:专业化测试 优先级:高 令牌估计:900 代理:[qe-test-generator, qe-coverage-analyzer, qe-quality-analyzer] 实施状态:优化 优化版本:1.0 最后优化时间:2025-12-02 依赖项:[] 快速参考卡:true 标签:[test-design, bva, equivalence-partitioning, decision-tables, pairwise, state-transition] 信任层级:3 验证: 模式路径:schemas/output.json 验证器路径:scripts/validate-config.json 评估路径:evals/test-design-techniques.yaml
测试设计技术
<默认操作> 当系统化设计测试用例时:
- 应用边界值分析(测试最小值、最大值、边界)
- 使用等价类划分(每个分区一个测试)
- 创建决策表(针对复杂业务规则)
- 建模状态转移(针对状态行为)
- 使用成对测试减少(针对组合)
快速设计选择:
- 数字范围 → BVA + EP
- 多条件 → 决策表
- 工作流 → 状态转移
- 多参数 → 成对测试
关键成功因素:
- 系统化设计用更少的测试发现更多错误
- 随机测试效率低
- 40多年的研究支持这些技术 </默认操作>
快速参考卡
何时使用
- 设计新测试套件
- 优化现有测试
- 复杂业务规则
- 减少测试冗余
技术选择指南
| 场景 | 技术 |
|---|---|
| 数字输入范围 | BVA + EP |
| 多条件 | 决策表 |
| 状态工作流 | 状态转移 |
| 多参数组合 | 成对测试 |
| 所有组合关键 | 全因子测试 |
边界值分析(BVA)
原理: 错误在边界处聚集。
测试边界:
- 最小有效值
- 略低于最小(无效)
- 略高于最小(有效)
- 最大有效值
- 略高于最大(无效)
// 年龄字段:18-120有效
const boundaryTests = [
{ input: 17, expected: '无效' }, // 低于最小
{ input: 18, expected: '有效' }, // 最小边界
{ input: 19, expected: '有效' }, // 高于最小
{ input: 119, expected: '有效' }, // 低于最大
{ input: 120, expected: '有效' }, // 最大边界
{ input: 121, expected: '无效' } // 高于最大
];
等价类划分(EP)
原理: 每个等价类一个测试。
// 折扣规则:
// 1-10:无折扣
// 11-100:10%折扣
// 101+:20%折扣
const partitionTests = [
{ quantity: -1, expected: '无效' }, // 无效分区
{ quantity: 5, expected: 0 }, // 分区1:1-10
{ quantity: 50, expected: 0.10 }, // 分区2:11-100
{ quantity: 200, expected: 0.20 } // 分区3:101+
];
// 4个测试覆盖所有行为(vs 如果测试每个值的200+个测试)
决策表
用于: 多条件的复杂业务规则。
贷款审批规则:
┌──────────────┬───────┬───────┬───────┬───────┬───────┐
│ 条件 │ R1 │ R2 │ R3 │ R4 │ R5 │
├──────────────┼───────┼───────┼───────┼───────┼───────┤
│ 年龄 ≥ 18 │ 是 │ 是 │ 是 │ 否 │ 是 │
│ 信用 ≥ 700 │ 是 │ 是 │ 否 │ 是 │ 否 │
│ 收入 ≥ 50k │ 是 │ 否 │ 是 │ 是 │ 是 │
├──────────────┼───────┼───────┼───────┼───────┼───────┤
│ 结果 │批准 │批准 │拒绝 │拒绝 │拒绝 │
└──────────────┴───────┴───────┴───────┴───────┴───────┘
// 5个测试覆盖所有决策组合
状态转移测试
建模状态变化:
状态:已注销 → 已登录 → 高级 → 已暂停
有效转移:
- 登录:已注销 → 已登录
- 升级:已登录 → 高级
- 支付失败:高级 → 已暂停
- 注销:任何 → 已注销
要测试的无效转移:
- 已注销 → 高级(应拒绝)
- 已暂停 → 高级(应拒绝)
test('没有登录不能升级', async () => {
const result = await user.upgrade(); // 当已注销时
expect(result.error).toBe('需要登录');
});
成对(组合)测试
问题: 所有组合呈指数增长。
// 参数:
// 浏览器:Chrome、Firefox、Safari(3)
// 操作系统:Windows、Mac、Linux(3)
// 屏幕:桌面、平板、移动(3)
// 所有组合:3 × 3 × 3 = 27个测试
// 成对测试:9个测试覆盖所有对
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' }
];
// 每个对至少出现一次
代理驱动测试设计
// 自动生成BVA测试
await Task("生成BVA测试", {
field: 'age',
dataType: 'integer',
constraints: { min: 18, max: 120 }
}, "qe-test-generator");
// 返回:6个边界测试用例
// 自动生成成对测试
await Task("生成成对测试", {
parameters: {
browser: ['Chrome', 'Firefox', 'Safari'],
os: ['Windows', 'Mac', 'Linux'],
screen: ['Desktop', 'Tablet', 'Mobile']
}
}, "qe-test-generator");
// 返回:9-12个测试(vs 27个全组合)
代理协调提示
内存命名空间
aqe/test-design/
├── bva-analysis/* - 边界值测试
├── partitions/* - 等价分区
├── decision-tables/* - 决策表测试
└── pairwise/* - 组合减少
车队协调
const designFleet = await FleetManager.coordinate({
strategy: 'systematic-test-design',
agents: [
'qe-test-generator', // 应用设计技术
'qe-coverage-analyzer', // 分析覆盖
'qe-quality-analyzer' // 评估测试质量
],
topology: 'sequential'
});
相关技能
- agentic-quality-engineering - 代理驱动测试
- risk-based-testing - 按风险优先排序
- mutation-testing - 验证测试有效性
记住
系统化设计 > 随机测试。 40多年的研究表明,这些技术比临时方法用更少的测试发现更多错误。
结合技术实现全面覆盖。 BVA用于边界,EP用于分区,决策表用于规则,成对测试用于组合。
使用代理: qe-test-generator 自动应用这些技术,生成具有最大覆盖和最小冗余的最优测试套件。代理通过代码分析识别边界、分区和组合。