关键词:等价类划分、边界值分析

一、等价类划分

所谓等价,与离散数学中的等价概念相似,分成自反、对称和传递。而等价类划分即针对每个输入数据需要满足的约束条件的一种方法,每个等价类代表着对输入约束加以满足/违反的有效/无效数据的集合。
基于的假设:相似的输入,将会展示相似的行为。故可从每个等价类中选一个代表作为测试用例即可,从而可以降低测试用例的数量。
Junit测试用例的写法
上图中的BigInteger是Java中的一个类,它所指代的整数类型不像int和long一样有范围限制。
对于两个大整数的乘法,可按不同情况进行等价类划分,例如从正负的角度划分:
(1)a、b皆为正
(2)a、b皆为负
(3)a正b负
(4)a负b正
同时需要考虑一些特殊的情况,如a或b是0, 1, 或-1,又或是编译器认定的最大的数MAX_VALUE( 2^63)。
因此可划分出如下测试类
– (a,b) = (-2, 20) 覆盖了 (small negative, small positive)
– (a,b) = (0, 30) 覆盖了 (0, small positive)
– (a,b) = (2^100, 1) 覆盖了 (large positive, 1)

二、边界值分析

在编写各种具有输入的代码时问题大量的错误发生在输入域的“边界”而非中央,因此就产生了边界值分析这一方法来处理输入域的边界,从而防止代码出错。
实际上,边界值分析是对等价类划分的补充。
Junit测试用例的写法
a和b之间的大小关系:
• a < b
• a = b
• a > b
a的取值:
• a = 0
• a < 0
• a > 0
• a = 编译器认定的最小整数
• a = 编译器认定的最大整数
b的取值:
• b = 0
• b < 0
• b > 0
• b = 编译器认定的最小整数
• b = 编译器认定的最大整数

因此,可以按如下设置测试用例:
– (1, 2) 覆盖了 a < b, a > 0, b > 0
– (-1, -3) 覆盖了 a > b, a < 0, b < 0
– (0, 0) 覆盖了 a = b, a = 0, b = 0
– (Integer.MIN_VALUE, Integer.MAX_VALUE) 覆盖了 a < b, a = 最小整数, b = 最大整数
– (Integer.MAX_VALUE, Integer.MIN_VALUE) 覆盖了 a > b, a = 最大整数, b = 最小整数

多个划分维度上的多个取值,要组合起来,每个组合都要有一个用例.

相关文章: