大量的测试实践表明,很多错误是发生在输入或输出数据范围的边界上,因此针对各种边界情况设计测试用例,有利于揭露程序中的错误。
边界值分析法是对等价类分析法的补充。边界值分析法利用各输入等价类的最小值、略大于最小值的值、正常值、略小于最大值的值和最大值处进行取值。
1.“单故障”假设
边界值分析的另外一个要点基于一个十分重要的假设“单故障”假设,即失效问题通常不会由两个(或多个)故障同时引发。因此,构造边界值测试用例的方法是,尽让一个变量取边界值,其余变量取正常值。
例如有函数F(x1,x2) a ≤x1≤ b,c ≤x2≤ d,那么边界值取值情况应如下图:
因此,对于一个n个变量的函数,将会吃产生4n+1个不同的测试用例。
2.健壮性测试
健壮性测试是对边界值分析的一种简单扩展,在对变量的5个边界值进行分析之外,近一步考虑略大最大值和略小于最小值的情况。那么函数F(x1,x2)边界值取值情况应如下图:
边界值分析的大部分属性都直接适用于健壮性测试,对健壮性测试来说,最重要的不是输入而是期望输出。
3.最坏情况测试
如前所述,边界值分析是基于可靠性理论中的单故障假设的。如果抛开这个假设,就意味着要考察多个变量同时取极值的情况。这在电路分析中叫“最坏情况分析”,这里也利用这种思想来构造最坏情况测试用例。对于每个变量先构造最小值、略大于最小值的值、正常值、略小于最大值的值和最大值5个边界值的集合,然后计算这些集合的笛卡尔积。对于有n个变量的函数来说,最坏情况测试将会构造出5n个测试用例。
那么函数F(x1,x2)边界值取值情况应如下图:
最坏情况测试适用于各个物理量之间存在大量的相互作用,而且函数失效代价极高的情况。
在对测试有特别极端的要求时应采用健壮性最坏情况测试,这就是要用健壮性测试的7个值的集合做笛卡尔积,得到7n个测试用例。函数F(x1,x2)边界值取值情况应如下图:
4.特殊值测试
特殊值测试可能是采用最广泛的一种功能测试方法,也是最直观、最难统一的。在特殊值测试这种,测试人员利用其背景知识、在类似程序方面积累的经验以及对软件“软肋”的了解来设计测试用例。
5.边界值分析法设计测试用例应遵循的原则
1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
例如,某程序的规格说明要求计算出"每月保险金扣除额为0至1165.25元",其测试用例可取0.00及1165.24、还可取一0.01及1165.26等。
再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括1和4,还应包括0和5等。
4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
6.实例
NextDate函数包含三个变量:month(月份)、day(日期)、和年(year),函数的输出为输入日期的后一天的日期。例如输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量month、day、year均为整数值,并且满足下列条件:
1)1 ≤month≤ 12
2)1 ≤day≤ 31
3)1812 ≤year≤ 2012
最坏情况测试用例:
7.边界值分析法的局限性
边界值分析法非常适用于多个变量相互独立又都代表实际物理量的情况。例如:NextDate函数中并没有针对2月和闰年的测试,实际上month、day和year这几个变量之间存在特殊的依赖关系。边界值分析假定各个变量之间应该是完全独立的。
变量的物理指标同样重要。如果某个变量代表具体的物理量,比如温度、压力、速度等,这个量的物理边界就非常重要。