等价类划分
等价类划分法:测试用例设计方法、有效/无效等价类、边界值结合应用详解。
1. 等价类划分原理
1.1 基本概念
等价类划分是将输入域划分为若干等价类,从每个等价类中选取代表性值作为测试用例。同一等价类中的值对揭露缺陷的效果相同。
1.2 核心假设
如果某个等价类中的一个值能发现缺陷,则该类中其他值也能发现;反之,如果某个值不能发现缺陷,则该类中其他值也不能。
1.3 优势
| 优势 | 描述 |
|---|---|
| 减少用例数 | 每个等价类只取代表值 |
| 提高效率 | 避免冗余测试 |
| 系统化 | 有规律的划分方法 |
| 覆盖全面 | 有效+无效等价类 |
2. 有效等价类与无效等价类
2.1 定义
| 类型 | 定义 | 示例(年龄 1-120) |
|---|---|---|
| 有效等价类 | 符合需求的输入集合 | 25(1 ≤ age ≤ 120) |
| 无效等价类 | 不符合需求的输入集合 | -1, 0, 121, “abc” |
2.2 划分规则
| 输入条件 | 有效等价类 | 无效等价类 |
|---|---|---|
| 范围 | 范围内 | 小于下界、大于上界 |
| 枚举 | 枚举值之一 | 非枚举值 |
| 布尔 | true/false | 非布尔值 |
| 必填 | 有值 | 空值 |
| 格式 | 符合格式 | 不符合格式 |
3. 等价类划分实例
3.1 实例1:用户名注册
需求:用户名长度 6-20 个字符,仅允许字母、数字和下划线。
| 等价类 | 类型 | 值 |
|---|---|---|
| 长度 6-20 | 有效 | ”user01” |
| 长度 < 6 | 无效 | ”usr” |
| 长度 > 20 | 无效 | ”a”*21 |
| 字母数字下划线 | 有效 | ”user_name1” |
| 含特殊字符 | 无效 | ”user@name” |
| 空值 | 无效 | "" |
测试用例:
| 用例 | 输入 | 预期结果 | 覆盖等价类 |
|---|---|---|---|
| TC1 | ”user01” | 注册成功 | 有效长度+有效字符 |
| TC2 | ”usr” | 提示过短 | 无效长度(短) |
| TC3 | 21个a | 提示过长 | 无效长度(长) |
| TC4 | ”user@name” | 提示非法字符 | 无效字符 |
| TC5 | "" | 提示必填 | 空值 |
3.2 实例2:日期输入
需求:输入年份(1900-2100)、月份(1-12)、日期。
| 输入 | 有效等价类 | 无效等价类 |
|---|---|---|
| 年份 | 1900-2100 | <1900, >2100, 非数字 |
| 月份 | 1-12 | 0, 13, 非数字 |
| 日期 | 1-28(通用) | 0, 29+, 非数字 |
| 日期(31天月) | 29-31 | 32+ |
| 日期(30天月) | 29-30 | 31 |
| 日期(2月平年) | 29 | 29(闰年才有效) |
3.3 实例3:购物金额折扣
需求:
- 金额 < 100:无折扣
- 100 ≤ 金额 < 500:9 折
- 500 ≤ 金额 < 1000:8 折
- 金额 ≥ 1000:7 折
| 等价类 | 类型 | 值 | 预期折扣 |
|---|---|---|---|
| 0 < 金额 < 100 | 有效 | 50 | 无 |
| 100 ≤ 金额 < 500 | 有效 | 200 | 9折 |
| 500 ≤ 金额 < 1000 | 有效 | 700 | 8折 |
| 金额 ≥ 1000 | 有效 | 1500 | 7折 |
| 金额 ≤ 0 | 无效 | -10 | 错误 |
| 非数字 | 无效 | ”abc” | 错误 |
4. 等价类与边界值结合
4.1 结合策略
等价类划分确定范围,边界值分析选择具体值。
示例:输入范围 1-100
| 方法 | 选取值 |
|---|---|
| 等价类 | 50(有效), 0(无效), 101(无效) |
| 边界值 | 0, 1, 2, 99, 100, 101 |
| 结合 | 0, 1, 2, 50, 99, 100, 101 |
4.2 完整测试用例设计流程
1. 分析需求 → 提取输入条件
2. 划分等价类 → 有效+无效
3. 边界值补充 → 在边界附近取值
4. 组合测试用例 → 覆盖所有等价类
5. 补充异常场景 → 空值、超时等
5. 多输入组合
5.1 组合策略
| 策略 | 描述 | 用例数 |
|---|---|---|
| 全组合 | 所有等价类组合 | 最多 |
| 正交实验 | 正交表选择组合 | 适中 |
| 成对测试 | 每对参数至少组合一次 | 较少 |
5.2 成对测试示例
两个参数,各有 3 个等价类:
| 参数 | 等价类 |
|---|---|
| 浏览器 | Chrome, Firefox, Safari |
| 操作系统 | Windows, macOS, Linux |
全组合 9 个,成对测试 3 个即可覆盖所有组合对。
6. 最佳实践
| 实践 | 描述 |
|---|---|
| 先有效后无效 | 优先确保正常流程 |
| 每个无效类独立用例 | 避免缺陷掩盖 |
| 结合边界值 | 提高缺陷发现率 |
| 考虑隐含需求 | 非显式约束 |
| 持续更新 | 需求变更时更新等价类 |