测试用例设计

测试的重要性和必要性,以及测试分类已经在前面的文章中提及,本文不再重提,直接转至测试用例设计问题。

文章脉络如下:


黑盒测试

边界值分析

    从长期的测试经验可以发现,错误大多发生于输入输出范围的边界上,因此在设计测试用例时,选择正好等于、刚刚大于或刚刚小于边界值的值作为测试数据,其基本思想是在最小值、略高于最小值、正常值、略低于最大值、最大值处选择输入值,为了以下方便表述,我们分别对应以minmin+nommax-max

    为什么选择这几个点?边界值基于的是“单缺陷”假设,即失效很少是由多个缺陷同时引起的,所以边界值分析:可以通过使一个变量取极值,其它变量取正常值来得到测试用例。

例如某个函数中有这个分支

If(2≤x≤8||25≤y≤69)
{//……}

使用边界值分析法设计,我们可以得到的测试用例为:{(6,25),(6,26),(6,40),(6,68),(6,69)(2,40),(3,40),(7,40),(8,40)}{(xnom,ymin),(xnom,ymin+)(xnom,ynom),(xnom,ymax-),(xnom,ymax)(xmin,ynom),(xmin+,ynom),(xmax-,ynom),(xmax,ynom)}

n变量函数的最坏情况测试,会产生4n+1个测试用例。

等价类划分

    使用此方法设计测试用例分为两个步骤,一是根据条件划分等价类,二是根据划分的等价类设计测试用例。

    等价类分为有效等价类和无效等价类,有效等价类是指对程序合理的、有意义的输入集合;无效等价类是指对程序而言不合理的、无意义的输入集合。例如条件6a10,则{6,7,8,9,10}为有效等价类,小于6的和大于10的为两个无效等价类。

    用例设计的原则是让用例尽可能多的覆盖有效等价类和无效等价类,直到所有效等价类和无效等价类被覆盖为止。

白盒测试

以以下程序为例

            public voidTest(int A, int B,int X)
               {
            if (A>1&& B == 0)
            {
                X = X / A;
            }
            if (A == 2 ||X > 1)
            {
                X = X + 1;
            }
           Console.WriteLine("A:{0}\nB:{1}\nX:{2}",A,B,X);
               }

流程图


    其中TF表示逻辑判断结果,abcde表示执行的路径。

语句覆盖

    语句覆盖是设计若干个用例,运行程序,使每条可执行都执行一次。对上图使用语句覆盖测试用例设计可以取[2,0,4][2,0,4],即abe可覆盖所有的可执行语句。语句覆盖的缺点是对控制结构和逻辑运算很迟钝,例如循环语句执行一次就算覆盖了此段代码,但是很显然不能反应全部循环完以后的结果;语句覆盖测试用例也不能区分连续的switch语句。语句覆盖是最弱的一种覆盖。

判定覆盖

    判定覆盖是设计若干个测试用例,使程序中每个判断的每个分支至少执行一次。对上图使用判定覆盖测试用例设计:[(2,0,4),(2,0,3)]ace[(1,1,1),(1,1,1)]abd,即可覆盖每个判断的每个分支一次。判定覆盖具有语句覆盖的简单性,同时克服了语句覆盖的问题,但是忽略了分支内部的boolean取值

条件覆盖

    条件覆盖是设计若干个测试用例,使每个判断的每个条件的可能值都取一次。上图中一共有四个条件:A>1为第一个条件,如果A>1则取T1,否则为F1B=0为第二个条件,如果B=0则取T2,否则为F2……对上图采用条件覆盖测试用例设计:[(1,0,3),(1,0,4)]覆盖条件F1T2F3T4,路径为abe[(2,1,1),(2,1,2)]覆盖条件T1F2T3F4,路径为abe两个测试用例即可覆盖每个条件的真假。

判定/条件覆盖

    指设计足够多用例,使每个条件的所有值都至少执行一次,每个判断中可能值至少取值一次。对上图使用判定/条件覆盖测试用例设计:[(2,0,4),(2,0,3)],路径为ace,覆盖的条件为T1T2T3T3H[(111),(111)],路径为abd,覆盖条件为F1F2F3F4即可。判定条件覆盖既满足判定覆盖又满足条件覆盖。

条件组合覆盖

    指设计用例,使每个判断的所有的条件取值组合至少执行一次。对上图进行条件组合覆盖测试用例设计:[(2,0,4),(2,0,3)]覆盖条件T1T2T3T4[(2,1,1),(2,1,2)]覆盖条件T1F2T3F4[(1,0,3),(1,0,4)]覆盖条件F1T2F3T4[(1,1,1),(1,1,1)]覆盖条件F1F2F3F4

路径覆盖

    指设计用例,覆盖程序中所有可能的路径,上图中有四种路径:aceabdabeacd。路径覆盖优点是可以对程序段进行彻底的测试,但也有缺点:其一,路径是随着分支的增加而指数级增加的,10if语句,就有2^10个测试路径;其二,多个判断语句中,条件之间可能有关系,这样很多路径可能是多余的。

    其实最重要的还是把握住测试的几条原则,理解了那几条原则,这些只是对原则的扩展和实例化。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值