第4章 等价类与边界值联合设计:组合策略、覆盖矩阵、示例演练

适用场景

当被测输入包含多个字段或变量,且每个字段既有等价类划分又有明确边界时,单独测试任一字段的边界无法暴露字段间组合引起的缺陷。本方法适用于:

  • 表单输入(注册、筛选、金额录入)
  • API 请求参数多字段校验
  • 配置项组合边界校验
  • 跨字段逻辑规则(如“年龄≥18且金额≤10000”)

前置条件

编号条件说明
1已完成单字段等价类划分各字段的有效/无效等价类已明确
2已识别各字段边界值上点、离点、内点已标注(见第3章)
3确定字段间逻辑约束如条件互斥、依赖关系、取值范围联动
4工具或模板就绪覆盖矩阵模板(Excel/表格)、缺陷管理工具

操作步骤

  1. 罗列所有字段及其等价类/边界值
    为每个字段建立“字段-等价类-边界点”映射表。例如:
    字段A: 年龄
      有效等价类: 18~60
      无效等价类: <18, >60
      边界值: 17,18,19,59,60,61
    字段B: 单笔金额(元)
      有效等价类: 0.01~50000
      无效等价类: 0, <0.01, >50000
      边界值: 0,0.01,0.02,49999.99,50000,50000.01
  2. 确定组合策略
    根据测试资源与风险等级选择策略:
    策略做法适用
    全组合(All-Pairs)每字段取一个值,穷举所有笛卡尔积字段≤3,每个字段值少
    正交表(Orthogonal Array)用正交表裁剪组合数字段≥3,中等资源
    单因素轮换每次只变一个字段,其他固定回归验证、单个边界验证
    约束感知组合只保留满足业务规则的组合强逻辑依赖场景
  3. 构建覆盖矩阵
    行=测试用例编号,列=每个字段的取值,末尾列=预期结果。示例(部分矩阵):
    | TC_ID | 年龄 | 金额(元) | 预期结果 |
    |-------|------|----------|----------|
    | TC01  | 17   | 0.01     | 拒绝     |
    | TC02  | 18   | 0        | 拒绝     |
    | TC03  | 18   | 0.01     | 成功     |
    | TC04  | 18   | 50000    | 成功     |
    | TC05  | 18   | 50000.01 | 拒绝     |
    | TC06  | 60   | 50000    | 成功     |
    | TC07  | 61   | 50000    | 拒绝     |
  4. 验收条件设计
    针对每一条用例,将“预期结果”展开为可测量的验收条件。例如TC03的验收条件:
    • 年龄=18,金额=0.01 → 系统返回状态码200
    • 数据库该订单创建成功
    • 响应体包含“success:true”
  5. 执行与修正
    按矩阵逐条执行,记录实际结果。若发现组合漏洞,补充矩阵并回归。

输入输出物

类型输入物输出物
必须字段等价类划分表、边界值清单覆盖矩阵(Excel/CSV)
可选历史缺陷库、业务规则文档组合策略选择记录、验收条件清单
衍生正交表L9/L16等模板测试执行报告(含通过/失败标记)

责任边界

  • 测试分析员:完成第1步字段映射表,选择组合策略,构造覆盖矩阵。
  • 测试执行员:按矩阵执行测试,记录缺陷。
  • 领域专家/产品经理:确认组合策略中的业务约束(如“当年龄<18时金额必≤100”)。
  • 测试组长:评审覆盖矩阵的完备性与冗余度。

记录材料

  1. 覆盖矩阵源文件(带版本号与变更日期)
  2. 组合策略评审纪要(若使用正交表需附正交表编号)
  3. 每轮执行的测试日志(至少包含TC_ID、实际结果、截图或接口响应)

异常处理

异常处理方式
字段数过多(≥8)导致矩阵膨胀改用正交表+单因素轮换混合;或使用PICT工具自动生成pairwise组合
业务规则临时变更标记受影响的行/列,重新按步骤1~3更新矩阵,并追加回归用例
某个边界值在组合中无法触发预期逻辑检查该边界是否正确映射到等价类,必要时补充更多内点测试
测试环境返回结果不稳定记录为“待重试”,并添加环境快照;排除环境因素后再判断缺陷

验收标准

  1. 覆盖矩阵中至少包含每个字段的每个等价类边界值点(上点/离点)被覆盖一次。
  2. 所有违反业务规则的组合(如年龄17+金额50000)必须被包含且预期为拒绝。
  3. 矩阵行数不超过全组合数(笛卡尔积)的50%,除非资源充足并通过评审。
  4. 每一条验收条件可与对应TC_ID逐一关联,无歧义。
💡 组合技巧:先用“单边界轮换”快速覆盖全部边界点,再用“约束感知组合”补齐跨字段的关键交叉场景,最后用PICT自动补充遗漏对,可大幅减少人工重复劳动。
示例演练:

场景:用户注册时填写“年龄”(整数,1~120)与“推荐码”(6位字母数字,可选)。

字段映射:

年龄边界: 0,1,2,119,120,121(无效:0,121;边界:1,2,119,120)
推荐码: 有效格式(^[A-Za-z0-9]{6}$)、无效格式(空、5位、7位、含特殊字符)
组合策略: 单因素轮换+约束感知(年龄无效时推荐码不必穷举所有无效值,只取1个代表)

覆盖矩阵片段:

TC-A01: 年龄=0(无效), 推荐码=空           → 拒绝(年龄无效)
TC-A02: 年龄=0(无效), 推荐码=ABC123       → 拒绝(年龄无效)
TC-A03: 年龄=1(有效内点), 推荐码=空        → 拒绝(推荐码为空)
TC-A04: 年龄=1(有效内点), 推荐码=ABC123    → 成功
TC-A05: 年龄=120(有效边界上点), 推荐码=ABC123 → 成功
TC-A06: 年龄=121(无效上点), 推荐码=ABC123    → 拒绝(年龄无效)
TC-A07: 年龄=18(有效内点), 推荐码=aa1(5位) → 拒绝(推荐码格式错误)
...

执行结果填入矩阵,若TC-A05实际被拒绝,则可能是边界值偏移,需提交缺陷。

等价类与边界值联合设计流程 等价类与边界值联合设计流程 ① 字段映射 每个字段等价类+边界值 ② 选择组合策略 全组合/正交/轮换/约束感知 ③ 构建覆盖矩阵 行=用例,列=字段取值 ④ 设计验收条件 预期结果→可测量条件 ⑤ 执行与修正 逐条执行,补充漏洞 ⑥ 生成测试报告 通过/失败/缺陷清单 联合覆盖完成 回归补充矩阵 注:每一步的输入输出需记录到覆盖矩阵;反馈环路用于补充被遗漏的组合对
⚠️ 常见错误
  • 只测试了每字段的独立边界,没有组合测试,导致跨字段缺陷泄露到生产。
  • 覆盖矩阵中混入大量冗余组合(如全是有效值重复),浪费执行时间。
  • 验收条件写成“系统正常”等模糊描述,应具体到状态码、数据库记录数、响应字段等。