Day 3 —— 测试用例设计方法(一):等价类划分 + 边界值
等价类划分 + 边界值
这两招是输入框、表单校验类测试的"基本功",几乎每场面试都问,实际工作天天用。
一、为什么需要用例设计方法
一个注册页面,用户名如果盲目测,输入什么算什么,根本测不完。用例设计方法就是帮你在"无穷多的输入"里,挑出最有价值的少数几个——这就是方法的价值。
二、等价类划分法
1. 核心思想
把所有输入划分成若干"等价类",同一类里的任意一个值,效果相同。所以我们每类只挑一个代表测就行。
- 有效等价类:合法的、符合规则的输入 → 测它能不能正常处理
- 无效等价类:非法的、不符合规则的输入 → 测它能不能正确拦截
口诀:有效测通过,无效测拦截。
2. 举例:用户名输入框
需求:"用户名 6-18 位,只能包含字母、数字、下划线。"
先划分等价类:
| 类型 | 等价类 | 编号 |
|---|---|---|
| 有效 | 6-18 位字母数字下划线 | ① |
| 无效 | 长度 < 6 | ② |
| 无效 | 长度 > 18 | ③ |
| 无效 | 为空 | ④ |
| 无效 | 含非法字符(如 @、中文) |
⑤ |
再设计用例(每类挑一个代表):
| 用例 | 数据 | 预期 |
|---|---|---|
| ① 有效 | abc_123 |
校验通过 |
| ② 太短 | abc |
提示"长度不足" |
| ③ 太长 | abcdefghijklmnopqrs(19 位) |
提示"长度超限" |
| ④ 为空 | 空 | 提示"不能为空" |
| ⑤ 非法字符 | abc@123 |
提示"格式错误" |
5 条用例覆盖了所有情况,这就是等价类的威力。
3. 划分步骤(记住三步)
- 读需求,找出输入项和规则
- 按规则划分有效等价类(通常 1 个)和无效等价类(可能有多个)
- 每个等价类挑一个代表值写用例
口诀:找输入、分有效无效、挑代表。
三、边界值分析法
1. 核心思想
大量 Bug 都藏在边界上(比如 <= 写成了 <)。所以除了取中间值,要重点测边界及其两侧。
边界取法:对于范围 a ≤ x ≤ b,取:a-1、a、a+1、b-1、b、b+1(上点、离点、内点)。
- 上点:正好等于边界的值(a、b)
- 离点:刚越过边界的值(a-1、b+1)
- 内点:范围内的普通值
口诀:上点离点加内点,边界两侧都要点。
2. 举例(续用户名 6-18 位)
| 点 | 值 | 长度 | 预期 |
|---|---|---|---|
| 下边界下方 | abcde |
5 | 失败 |
| 下边界上点 | abcdef |
6 | 通过 |
| 下边界内点 | abcdefg |
7 | 通过 |
| 上边界内点 | 17 位 | 17 | 通过 |
| 上边界上点 | 18 位 | 18 | 通过 |
| 上边界上方 | 19 位 | 19 | 失败 |
重点:6、5、18、19 这四个值是必测的——多一位少一位,最容易出 Bug。
3. 常见边界场景(背下来)
| 场景 | 边界值 |
|---|---|
| 输入长度 6-18 | 5、6、18、19 |
| 年龄 1-120 | 0、1、120、121 |
| 金额 0.01-99999.99 | 0、0.01、99999.99、100000 |
| 列表最多 100 条 | 99、100、101 |
| 文件最大 10MB | 9.99MB、10MB、10.01MB |
四、两招一起用(实战最常用)
等价类负责"划范围",边界值负责"抠边角"。实际工作中先等价类、再对"连续区间"类的输入补边界值。
举例:一个金额输入框,要求 0.01 ≤ 金额 ≤ 99999.99:
| 方法 | 用例数据 | 说明 |
|---|---|---|
| 等价类-有效 | 100 | 中间正常值 |
| 等价类-无效 | -1 | 负数 |
| 等价类-无效 | abc | 非数字 |
| 边界值 | 0 | 下边界外 |
| 边界值 | 0.01 | 下边界上点 |
| 边界值 | 0.02 | 下边界内点 |
| 边界值 | 99999.98 | 上边界内点 |
| 边界值 | 99999.99 | 上边界上点 |
| 边界值 | 100000 | 上边界外 |
口诀:等价划分管大面,边界值抓边沿线;两招搭配用,用例少又全。
五、完整示例:密码框
需求:"密码 8-20 位,必须同时包含字母和数字。"
第一步:划等价类
| 类型 | 等价类 |
|---|---|
| 有效 | 8-20 位且字母+数字组合 |
| 无效 | 长度 < 8 |
| 无效 | 长度 > 20 |
| 无效 | 只有字母 |
| 无效 | 只有数字 |
| 无效 | 含特殊字符(如果需求不允许) |
| 无效 | 为空 |
第二步:每类取代表 + 边界补点
| 用例 | 数据 | 预期 |
|---|---|---|
| 有效 | abc12345 |
通过 |
| 太短 | abc123(6 位) |
提示长度不足 |
| 太长 | 21 位字母数字 | 提示超限 |
| 纯字母 | abcdefgh |
提示必须含数字 |
| 纯数字 | 12345678 |
提示必须含字母 |
| 边界-7 位 | abcd123 |
失败 |
| 边界-8 位 | abcd1234 |
通过 |
| 边界-20 位 | 恰好 20 位 | 通过 |
| 边界-21 位 | 恰好 21 位 | 失败 |
六、这两个方法的适用场景
| 方法 | 最适合 | 不适合 |
|---|---|---|
| 等价类 | 输入框、表单校验、有明确取值范围的字段 | 流程、状态类场景 |
| 边界值 | 长度、数值范围、数量限制、时间区间 | 无序、无范围的功能 |
注意:等价类和边界值只解决"输入合法性",流程怎么走、多步骤怎么串,得靠场景法(Day 4 讲)。
七、新手常见错误
- ❌ 只测有效值,不测无效值 → 拦截逻辑没测到
- ❌ 边界只取"9 和 10",漏掉"11"这种溢出点
- ❌ 一个用例塞多个输入错误 → 出问题时不知道是哪个触发的
- ❌ 把"用例多"当成"覆盖全" → 冗余用例不增加价值,反而浪费时间
原则:单条用例尽量只验证一个变量,出问题时定位最快。
📋 小结表(Day 3)
| 主题 | 核心要点 |
|---|---|
| 等价类思想 | 分有效/无效,每类取一个代表 |
| 等价类步骤 | 找输入 → 分有效无效 → 挑代表 |
| 边界值取法 | 上点、离点、内点(a-1、a、a+1、b-1、b、b+1) |
| 重点边界 | 长度、数量、金额、时间的临界值 |
| 搭配使用 | 等价类划大面,边界值抠边角 |
| 用例原则 | 一条用例只验一个变量 |
🔑 口诀
有效测通过,无效测拦截;找输入分两类,每类挑一个;上点离点加内点,边界两侧都要点;等价划大面,边界抓边线,用例少又全。
✍️ 练习题(Day 3)
- 等价类划分分哪有效等价类和无效等价类?它们各自的作用是什么?
- 需求:"手机号 11 位数字"。请划分等价类,并给出至少 4 条用例(含数据 + 预期)。
- 需求:"数量输入 1-100 个"。请用边界值法列出必测的边界值,并说明每个值预期通过还是失败。
- 判断题:用例数量越多,测试越充分。(对/错?为什么)
- 简答:等价类和边界值有什么区别?实际工作中为什么要两个一起用?
参考答案要点(答完可自查):
- 第 1 题:有效测正常通过路径,无效测系统拦截/报错能力。
- 第 3 题:0、1、2、99、100、101 —— 0 和 101 失败,1/2/99/100 通过。
- 第 4 题:错。覆盖的是等价类,不是用例条数;冗余用例不增加价值。
浙公网安备 33010602011771号