大量实践表明,错误通常在输入定义域或输出值域的边界而不是内部发生,由此催发了采用边界值分析测试的方法。
使用边界值分析方法设计测试用例重要的是确定边界情况,通常选取输入(输出)等价类的边界来测试。对于单个输入(输出)变量来说,以a<=x<=b为例,选取的边界值应为a,a+1,b-1,b四个值来保证边界值测试有效。当变量的取值空间更多样化时则需要更多的边界值来保证测试有效。
而对于多个元素,则需要进行条件假设:
单缺陷假设:软件失效极少是由多个缺陷同时发生引起的。在这种情况下,我们可以将每个变量分开处理,假设函数F(x,y)的变量x,y(整数)满足以下条件
2<=x<=12
3<=y<=9
则边界值分析测试的用例为:
{<2,6>,<3,6>,<11,6>,<12,6>,<7,3>,<7,4>,<7,8>,<7,9>,<7,6>,}
每个变量有四组边界值测试,后一组为所有变量均为正常值的测试,总共会产生4n+1个测试用例。
多缺陷假设:认为软件失效可能由两个或以上的缺陷同时发生引起。此时需要对所有变量的边界值进行测试,通常也称为坏情况测试。此时需采用各变量的笛卡尔积(叉乘)来计算测试用例数,如果各变量间相互独立或者松耦合则可以直接采用各变量所需的测试用例个数简单相乘。假设所有的变量均为单个区间输入,则终会生成5n个测试用例。以下是图表显示2个变量需要生成25个测试用例。
边界值法在满足一定的条件下可以进行扩展(有些情况下是不能用的,比如说在C++等强制语言中扩展可能导致程序崩溃),除了取以上所说的边界值,还可以取略大于大值和略小于小值的取值,从而对程序的健壮性进行测试。此时单区间变量所需的边界值测试用例为6,单缺陷与多缺陷下的测试用例数变为6n+1和7n。
目前较通用的边界值测试原则:
一、如果输入条件规定了值的范围,则应该取刚达到这个范围的边界值,以及刚刚超过这个范围边界的值作为测试输入数据;
二、如果输入条件规定了值的个数,则用大个数、小个数、比大个数多1格、比小个数少1个的数做为测试数据;
三、根据规格说明的每一个输出条件,使用规则一;
四、根据规格说明的每一个输出条件,使用规则二;
五、如果程序的规格说明给出的输入域或输出域是有序集合(如有序表、顺序文件等),则应选取集合的第一个和后一个元素作为测试用例;
六、如果程序用了一个内部结构,应该选取这个内部数据结构的边界值作为测试用例;
七、分析规格说明,找出其他可能的边界条件。
边界值分析测试时还需要注意一些特别的取值,比如说测试非线性变化数据时,需要考虑拐点,测试数据时,大值可能存在的跳变等等。
边界值分析由于是采用对系统输入和输出值域的边界进行检测,本身不需要关注系统内部实现,因此被划分为功能性(黑盒)测试。这种测试方法具有一定的限制条件:如果多个输入输出数据之间存在着比较复杂的逻辑关系时这种测试方法的作用大大降低。另一方面边界值法生成的测试用例通常较其它测试方法要多很多,如果我们仔细分析测试用例会发现其中含有大量的冗余,同时这些用例也不能保证无严重的漏洞。通常这种方法更多的是做为一般等价法或决策表法的补充方法,与其混合组成测试用例。