黑盒测试用例设计方法笔记(二)-等价类划分
2-等价类划分
1 何为等价类?
- 我们可以用一组元素来说明,比如与其等价的元素集合即为等价类;
- 其中等价的元素其属性是一样的;
- 而不同的等几类之间不会存在相同的元素。
2 测试思想
- 用例设计时以具有相同的预期结果为等价划分原则,将系统的被测试域划分为不同的等价类集合,从中选出代表作为测试用例,以期达到尽可能完备同时又可避免冗余的测试。
- 被测试域可能是输入域、输出域、输入或输出域的部分或任何其它值得测试的范围。
3 分类
分类 | 说明 |
---|---|
有效等价类 | 对系统来说是有效的输入 |
无效等价类 | 所有其它可能存在的情况 |
4 设计测试用例步骤
5 划分等价类说明
- 没有标准的划分等价类的方法,不同的功能说明可能使用不同的方法;
- 不同的等价类得到的测试用例质量不同;
- 划分等价类可参考:
①如果某个输入条件规定值的范围,可以确定一个有效等价类和两个无效等价类
②如果输入条件规定了一个输入值的集合,可以确定一个有效等价类和一个无效等价类。
③如果输入条件是一个布尔表达式的条件,可以确定一个有效等价类和一个无效等价类
④如果输入条件定义了一个“必须”的情况,比如”标识的第一字符必须是字母”那么可以确定一个有效等价类和一个无效等价类。
⑤如果有理由确信,某一等价类中的各元素在程序中的处理有区别,那就把这个等价类分成更小的等价类。
6 确定测试用例
6.1 步骤
- 划分等价类;
- 为每一个有效等价类和无效等价类规定一个唯一的编号;
- 设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步直到所有有效等价类均被测试用例所覆盖;
- 设计一个测试用例,使其只覆盖一个无效等价类,重复这一步,直到所有无效等价类均被覆盖。
6.2 表示法
比如使用以下表格可以帮助快速确定测试用例:
条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
7 案例
7.1 功能说明
- NextDate(年,月,日)是三个变量的函数。函数返回输入日期的下一个日期。变量年份,月份,日期都是整数值,且满足下面的条件:2000≤年≤2021,1≤月≤12, 1≤日≤31.
- 分析和比较两种不同的等价类划分方法以及三种设计的结果
7.2 习题详解1
7.2.1 等价类及其编号
条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
年 | [2000, 2021] | 1 | 年<2000 | 4 |
年>2021 | 5 | |||
月 | [1, 12] | 2 | 月<1 | 6 |
月>12 | 7 | |||
日 | [1, 31] | 3 | 日<1 | 8 |
日>31 | 9 |
7.2.2 测试用例
覆盖等价类 | 测试输入 | 预期结果 |
---|---|---|
1,2,3 | (2021,3,17) | (2021,3,18) |
4,2,3 | (1999,3,17) | (“年输入错误!” ) |
5,2,3 | (2022,3,17) | (“年输入错误!” ) |
1,6,3 | (2021,-1,17) | (“月输入错误!” ) |
1,7,3 | (2021,13,17) | (“月输入错误!” ) |
1,2,8 | (2021,3,0) | (“日输入错误!” ) |
1,2,9 | (2021,3,32) | (“日输入错误!” ) |
7.3 习题详解2
7.3.1 等价类及其编号
条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
年 | 闰年 | 1 | 年<2000 | 11 |
平年 | 2 | 年>2021 | 12 | |
月 | 1,3,5,7,8,10 | 3 | 月<1 | 13 |
4,6,9,11 | 4 | 月>12 | 14 | |
2月 | 5 | |||
12月 | 6 | |||
日 | [1, 28] | 7 | 日<1 | 15 |
29 | 8 | 日>31 | 16 | |
30 | 9 | |||
31 | 10 |
7.3.2 测试用例1
覆盖等价类 | 测试输入 | 预期结果 |
---|---|---|
1,3,7 | (2000,3,17) | (2000,3,18) |
2,4,8 | (2005,6,29) | (2005,6,30 ) |
1,5,9 | (2000,2,30) | (“日输入错误!” ) |
2,6,10 | (2005,12,31) | (2006,1,1) |
11,3,7 | (1999,1,17) | (“年输入错误!” ) |
12,3,7 | (2030,1,17) | (“年输入错误!” ) |
1,13,7 | (2000,-3,17) | (“月输入错误!” ) |
1,14,7 | (2000,13,17) | (“月输入错误!” ) |
1,3,15 | (2000,1,-17) | (“日输入错误!” ) |
1,3,16 | (2000,1,32) | (“日输入错误!” ) |
7.3.3 测试用例2
覆盖等价类 | 测试输入 | 预期结果 |
---|---|---|
2,3,10 | (2005,3,31) | (2005,4,1) |
2,4,9 | (2005,6,30) | (2005,7,1) |
1,5,8 | (2000,2,29) | (2000,3,1) |
2,6,7 | (2005,12,1) | (2005,12,2) |
11,3,7 | (1999,1,17) | (“年输入错误!” ) |
12,3,7 | (2030,1,17) | (“年输入错误!” ) |
1,13,7 | (2000,-3,17) | (“月输入错误!” ) |
1,14,7 | (2000,13,17) | (“月输入错误!” ) |
1,3,15 | (2000,1,-17) | (“日输入错误!” ) |
1,3,16 | (2000,1,32) | (“日输入错误!” ) |
8 其它分类
当然用例还可以再进行补充,真正的用例个数要比以上多的多。等价类从某种程度上还可分为:
- 弱一般等价类;
①尽可能多的覆盖所有的有效等价类,且每个被测变量的等价类至少出现一次;
②用例个数为:各个被测变量中的最大有效等价类个数。
- 强一般等价类;
①覆盖所有被测变量有效等价类的组合;
②用例个数为:Π各个被测变量有效等价类数。
- 弱健壮等价类;
①尽可能多地覆盖尚未覆盖的有效等价类,对于无效等价类,每个测试用例只考虑一个被测变量的无效等价类;
②用例个数为:各个被测变量中的最大有效等价类个数+Σ各个被测变量的无效等价类数。
- 强健壮等价类。
①覆盖所有被测变量的有效等价类和无效等价类的组合;
②用例个数为:Π各个被测变量的(有效等价类数+无效等价类数)。
9 函数表示法
- 函数y = f (x1,x2)输入变量的取值范围分别为:x1 ∈[a,d], x2 ∈[e,g] , 根据规格说明划分得相应的等价类;
- X1:有效等价类[a, b) [b, c) [c, d];无效等价类(-∞,a), (d, +∞);
- X2:有效等价类[e,f) [f,g];无效等价类(-∞,e), (g, +∞);
【特别说明】:笔记来源于网络、各种资料、书本等,本文仅用于学习使用,不做他用,如果涉及版权问题,请联系博主删除,谢谢
【分享、共勉、共进、提升】更多、更全、更新的软件测试领域知识,请关注:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY