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


黑盒测试
边界值分析
从长期的测试经验可以发现,错误大多发生于输入输出范围的边界上,因此在设计测试用例时,选择正好等于、刚刚大于或刚刚小于边界值的值作为测试数据,其基本思想是在最小值、略高于最小值、正常值、略低于最大值、最大值处选择输入值,为了以下方便表述,我们分别对应以min、min+、nom、max-、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个测试用例。
等价类划分
使用此方法设计测试用例分为两个步骤,一是根据条件划分等价类,二是根据划分的等价类设计测试用例。
等价类分为有效等价类和无效等价类,有效等价类是指对程序合理的、有意义的输入集合;无效等价类是指对程序而言不合理的、无意义的输入集合。例如条件6≤a≤10,则{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);
}
流程图

其中T、F表示逻辑判断结果,a、b、c、d、e表示执行的路径。
语句覆盖
语句覆盖是设计若干个用例,运行程序,使每条可执行都执行一次。对上图使用语句覆盖测试用例设计可以取[2,0,4][2,0,4],即a→b→e可覆盖所有的可执行语句。语句覆盖的缺点是对控制结构和逻辑运算很迟钝,例如循环语句执行一次就算覆盖了此段代码,但是很显然不能反应全部循环完以后的结果;语句覆盖测试用例也不能区分连续的switch语句。语句覆盖是最弱的一种覆盖。
判定覆盖
判定覆盖是设计若干个测试用例,使程序中每个判断的每个分支至少执行一次。对上图使用判定覆盖测试用例设计:[(2,0,4),(2,0,3)]a→c→e、[(1,1,1),(1,1,1)]a→b→d,即可覆盖每个判断的每个分支一次。判定覆盖具有语句覆盖的简单性,同时克服了语句覆盖的问题,但是忽略了分支内部的boolean取值。
条件覆盖
条件覆盖是设计若干个测试用例,使每个判断的每个条件的可能值都取一次。上图中一共有四个条件:A>1为第一个条件,如果A>1则取T1,否则为F1;B=0为第二个条件,如果B=0则取T2,否则为F2……对上图采用条件覆盖测试用例设计:[(1,0,3),(1,0,4)]覆盖条件F1T2F3T4,路径为a→b→e和[(2,1,1),(2,1,2)]覆盖条件T1F2T3F4,路径为a→b→e两个测试用例即可覆盖每个条件的真假。
判定/条件覆盖
指设计足够多用例,使每个条件的所有值都至少执行一次,每个判断中可能值至少取值一次。对上图使用判定/条件覆盖测试用例设计:[(2,0,4),(2,0,3)],路径为a→c→e,覆盖的条件为T1T2T3T3,H和[(111),(111)],路径为a→b→d,覆盖条件为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。
路径覆盖
指设计用例,覆盖程序中所有可能的路径,上图中有四种路径:a→c→e、a→b→d、a→b→e、a→c→d。路径覆盖优点是可以对程序段进行彻底的测试,但也有缺点:其一,路径是随着分支的增加而指数级增加的,10个if语句,就有2^10个测试路径;其二,多个判断语句中,条件之间可能有关系,这样很多路径可能是多余的。
其实最重要的还是把握住测试的几条原则,理解了那几条原则,这些只是对原则的扩展和实例化。
396

被折叠的 条评论
为什么被折叠?



