做白盒测试调研走查代码时,感觉算法的空间复杂度太复杂了怎么办?

白盒测试方法 【范文十篇】
白盒测试方法
范文一:白盒测试:基路径测试方法、插桩测试法
例子:已知公元1年1月1日是星期一,只要输入年月日,能自动回复当天是星期几;计算被输入日期是星期几;
A程序思路:计算输入日期与公元1年1月1日所相差的天数,具体如下:总天数=公元1年到输入日期上一年年底天数+输入年份的1月到上月月底天数+输入日期的天数
B闰年满足条件(year%4==0)&&(year%100!=0)||(year%400==0)
(1)分析各种输入情况,结合程序输出结果,并给出详细测试用例;
(2)根据(1)所划分的等价类,进行边界值分析,并给出具体的测试用例;
(3)决策表测试法;
①列出输入变量month、 day、 year的有效等价类;(条件桩)
②分析程序的规格说明,给出问题规定的可能采取操作;(动作桩)
③画出决策表(简化);
④根据决策表,给出详细测试用例。
代码:(被测部分为while循环内部语句)
int main()
int x=1,year, month,
1.int i, num=0,total, total1, total2;
2.cout<<"请输入年份: ";
4.cout<<"请输入月份: ";
6.cout<<"请输入日期: ";
//求得输入年份之前一年末的总天数
8.for(i=1; i< i++)
9.if((i%4==0)&&(i%100!=0)||(i%400==0))
11.total1 = 365*(year-num-1) + 366*
//求得输入年份的总天数
12.if((year%4==0)&&(year%100!=0)||(year%400==0))
//求得输入月份之前一月末的总天数
13.switch(month)
case 1:total2 = 0;
case 2:total2 = 31;
case 3:total2 = 60;
case 4:total2 = 91;
case 5:total2 = 121;
case 6:total2 = 152;
case 7:total2 = 182;
case 8:total2 = 213;
case 9:total2 = 244;
case 10:total2 = 274;
case 11:total2 = 305;
case 12:total2 = 335;
14.switch(month)
case 1:total2 = 0;
case 2:total2 = 31;
case 3:total2 = 59;
case 4:total2 = 90;
case 5:total2 = 120;
case 6:total2 = 151;
case 7:total2 = 181;
case 8:total2 = 212;
case 9:total2 = 243;
case 10:total2 = 273;
case 11:total2 = 304;
case 12:total2 = 334;
//在加上输入的日,求其总和可得到从公元1年1月1日到输入日期当天的总天数
15.total = total1 + total2 +
17. week = total % 7;
18.cout<<"您输入的日期是";
19.switch(week)
case 0:cout<<"星期天"<<
case 1:cout<<"星期一"<<
case 2:cout<<"星期二"<<
case 3:cout<<"星期三"<<
case 4:cout<<"星期四"<<
case 5:cout<<"星期五"<<
case 6:cout<<"星期六"<<
cout<<"**********退出程序请输入0,否则任一输入继续**********"<>x;
2、测试用例设计
1)控制流图
2)环路复杂度计算
由图可知,图中的环路有六条,故环路复杂度为六。
3)基本路径集设计
基本路径集为:
A.1、2、3、4、5、6、7、8、11、12、14、15、16、17、18、19
B.1、2、3、4、5、6、7、8、9、11、12、14、15、16、17、18、19
C.1、2、3、4、5、6、7、8、9、10、11、12、13、15、16、17、18、19
D.1、2、3、4、5、6、7、8、9、10、11、12、14、15、16、17、18、19
注:由源程序代码可知,未走路径10则必定不通过路径13,故省去两条检测路径。
4)测试用例集设计
测试用例集为:
A路径:1-2-26
预期输出:星期一
B路径:2-2-2
预期输出:星期六
预期输出:星期二
预期输出:星期三
3、插桩后源程序清单与判定覆盖率分析结果
int main()
int x=1,year, month,
int m1=0,m2=0,m3=0,m4=0,m=15,n=0,f=0;
while(x) {
cout<<"=====请输入测试用例====="<<
int i, num=0,total, total1, total2, cout<> cout<> cout<>
cout<<"请输入预期输出结果(星期一到星期天,对应输入1~7):";
cout<2->3->4->5->6->7->8"; for(i=1; i1) if((i%4==0)&&(i%100!=0)||(i%400==0))
if(m1==0){m++;m1=1;}
if(m2==0){m++;m2=1;}
total1 = 365*(year-num-1) + 366* cout<11->12"; if((year%4==0)&&(year%100!=0)||(year%400==0))
cout<13";if(m3==0){m++;m3=1;}
switch(month)
case 1:total2 = 0;
case 2:total2 = 31;
case 3:total2 = 60;
case 4:total2 = 91;
case 5:total2 = 121;
case 6:total2 = 152;
case 7:total2 = 182;
case 8:total2 = 213;
case 9:total2 = 244;
case 10:total2 = 274;
case 11:total2 = 305;
case 12:total2 = 335;
cout<14";if(m4==0){m++;m4=1;}
} switch(month) {
} case 1:total2 = 0; case 2:total2 = 31; case 3:total2 = 59; case 4:total2 = 90; case 5:total2 = 120; case 6:total2 = 151; case 7:total2 = 181; case 8:total2 = 212; case 9:total2 = 243; case 10:total2 = 273; case 11:total2 = 304; case 12:total2 = 334;
cout<15->16->17->18->19"<<
total = total1 + total2 +
week = total % 7;
cout<<"-----该测试用例测试结果-----"<<
cout<<"测试用例"<<n<<" : 输入"<<year<<"."<<month<<"."<<day<<", 预期输出为:"; switch(qw%7) {
case 0:cout<<"星期天, ";
case 1:cout<<"星期一, ";
case 2:cout<<"星期二, ";
case 3:cout<<"星期三, ";
case 4:cout<<"星期四, ";
case 5:cout<<"星期五, ";
case 6:cout<<"星期六, ";
} cout<<"实际输出为:";
switch(week) {
case 0:cout<<"星期天, ";
case 1:cout<<"星期一, ";
case 2:cout<<"星期二, ";
case 3:cout<<"星期三, ";
case 4:cout<<"星期四, ";
case 5:cout<<"星期五, ";
case 6:cout<<"星期六, ";
} if(week==qw%7) cout<<"成功!"<<
cout<<"失败!"<<
cout<<"=====本次测试用例测试已结束,退出测试请输入0,否则任一输入继续测试====="<<
cout<<"最终对main函数中while内循环语句单元测试结果统计:"<<;
cout<<"共执行"<<n<<"个测试用例, 总的路径覆盖率:"<<m*100/19<<"%, 其中通过"<<n-f<<"个, 失败"<<f<<"个"<<
测试结果:
白盒作为测试人员常用的一种测试越来越受到测试工程师的重视。白盒测试并不是简单的按照代码设计用例,而是需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。因为对于不同复杂度的代码逻辑,可以衍生出许多种执行路径,只有适当的测试方法,才能帮助我们从代码的迷雾森林中找到正确的方向。本文介绍六种白盒子测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
白盒测试的概述
由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我们经常相信某逻辑路径不可能被执行, 而事实上,它可能在正常的情况下被执行。由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
白盒的测试用例需要做到:
·保证一个模块中的所有独立路径至少 被使用一次
·对所有逻辑值均需测试 true 和 false
·在上下边界及可操作范围内运行所有循环
·检查内部数据结构以确保其有效性
白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
白盒测试的实施步骤:
1.测试计划阶段:根据需求说明书,制定测试进度。
2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。
3.测试执行阶段:输入测试用例,得到测试结果。
4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。
白盒测试的方法:总体上分为静态方法和动态方法两大类。
静态分析是一种不通过执行程序而进行测试的技术。静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后 , 对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。
白盒测试的优缺点
·迫使测试人员去仔细思考软件的实现
·可以检测代码中的每条分支和路径
·揭示隐藏在代码中的错误
·对代码的测试比较彻底
·无法检测代码中遗漏的路径和数据敏感性错误
·不验证规格的正确性 六种覆盖方法
首先为了下文的举例描述方便,这里先给出一张程序流程图。(本文以1995年软件设计师考试的一道考试题目为例,图中红色字母代表程序执行路径)。
1、语句覆盖
1)主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。
2)用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)
3)优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
4)缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。
2、判定覆盖
1)主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,
即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。
2)用例设计:
3)优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
4)缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
3、条件覆盖
1)主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。
2)用例设计:
3)优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。
4)缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
4、判定/条件覆盖
1)主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。
2)用例设计:
3)优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。
4)缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。
5、组合覆盖
1)主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。
2)用例设计:
3)优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
4)缺点:线性地增加了测试用例的数量。
6、路径覆盖
1)主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。
2)用例设计:
3)优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
4)缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:
If (!A)B++;
If (!A)D--;
这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。
白盒测试是一种被广泛使用的逻辑测试方法,是由程序内部逻辑驱动的一种单元测试方法。只有对程序内部十分了解才能进行适度有效的白盒测试。但是贯穿在程序内部的逻辑存在着不确定性和无穷性,
尤其对于大规模复杂软件。因此我们不能穷举所有的逻辑路径,即使穷举也未必会带来好运(穷举不能查出程序逻辑规则错误,不能查出数据相关错误,不能查出程序遗漏的路径)。
那么正确使用白盒测试,就要先从代码分析入手,根据不同的代码逻辑规则、语句执行情况,选用适合的覆盖方法。任何一个高效的测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路径。
范文三:黑盒和白盒测试方法
黑盒测试介绍
黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。用这种方法进行测试时,被测程序被当作看不见内部的黑盒。在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试首先是程序通常的功能性测试。要求:
每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。
不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。这些情况包括数据类型和数据值的异常等等。下述几种方法:(a)等价类划分,(b)因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。
1.等价类划分
等价类划分是一种典型的黑盒测试方法。等价类是指某个输入域的集合。它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。因此我们只要在一个集合中选取一个测试数据即可。等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。这样就可使用少数测试用例检验程序在一大类情况下的反映。
在考虑等价类时,应该注意区别以下两种不同的情况:
有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。
无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
确定等价类有以下几条原则:
如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。例如,程序的规范中提到的输入条包括“,,,,项数可以从1到999,,,,”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”。
输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。如某程序涉及标识符,其输入条件规定“标识符应以字母开头,,,,”则“以字母开头者”作为有效等价类,“以非字母开头”作为无
效等价类。
如果我们确知,已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分成更小等价类。
输入条件 有效等价类 无效等价类
。。。。。。
。。。。。。 。。。。。。
。。。。。。 。。。。。。
。。。。。。
根据已列出的等价类表,按以下步骤确定测试用例:
为每个等价类规定一个唯一的编号;
设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖;
设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步,使所有无效等价类均被覆盖。这里强调每次只覆盖一个无效等价类。这是因为一个测试用例中如果含有多个缺陷,有可能在测试中只发现其中的一个,另一些被忽视。等价类划分法能够全面、系统地考虑黑盒测试的测试用例设计问题,但是没有注意选用一些“高效的”、“有针对性的”测试用例。后面介绍的边值分析法可以弥补这一缺点。 2.因果图
等价类划分法并没有考虑到输入情况的各种组合。这样虽然各个输入条件单独可能出错的情况已经看到了,但多个输入情况组合起来可能出错的情况却被忽略。采用因果图方法能帮助我们按一定步骤选择一组高效的测试用例,同时,还能为我们指出程序规范的描述中存在什么问题。
利用因果图导出测试用例需要经过以下几个步骤:
分析程序规范的描述中哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类。结果是输出条件。
分析程序规范的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。
由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用持殊的符号标明约束条件。把因果图转换成判定表。把判定表的每一列写成一个测试用例。
3.边值分析法
边值分析法是列出单元功能、输入、状态及控制的合法边界值和非法边界值,设计测试用例,包含全部边界值的方法。典型地包括IF语句中的判别值,定义域、值域边界,空或畸形输入,末受控状态等。边值分析法不是一类找一个例子的方法,而是以边界情况的处理作为主要目标专门设计测试用例的方法。另外,边值分析不仅考查输入的边值,也要考虑输出的边值。这是从人们的经验得出的一种有效方法。人们发现许多软件错误只是在下标、数据结构和标量值的边界值及其上、下出现,运行这个区域的测试用例发现错误的概率很高。
用边值分析法设计测试用例时,有以下几条原则:
如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小及稍小于最小、稍大于最大个数作为测试用例。如有规范“某文件可包含l至255”个记录,,,,“,则测试用例
可选1和255及0和256等。
针对规范的每个输出条件使用原则〔a〕。
如果程序规范中提到的输入或输出域是个有序的集合(如顺序文件、表格等)就应注意选取有序集的第一个和最后一个元素作为测试用例。
分析规范,尽可能找出可能的边界条件。一个典型的边值分析例子是三角形分类程序。选取a,b,c构成三角形三边,“任意两边之和大于第三边”为边界条件。边值分析相等价类划分侧重不同,对等价类划分是一个补充。如上述三角形问题,选取a=3,b=4,c=5,a=2,b=4,c=7则覆盖有效和无效等价类。如果能在等价类划分中注入边值分析的思想。在每个等价类中不只选取一个覆盖用例,而是进而选取该等价类的边界值等价类划分法将更有效,最后可以用边值分析法再补充一些测试用例。
猜错法在很大程度上是凭经验进行的,是凭人们对过去所作的测试工作结果的分析,对所揭示的缺陷的规律性作直觉的推测来发现缺陷的。
一个采用两分法的检索程序,典型地可以列出下面几种测试情况:
被检索的表只有一项或为空表;
表的项数恰好是2的幂次;
表的项数比2的幂次多1等。
猜错法充分发挥人的经验,在一个测试小组中集思广益,方便实用,特别在软件测试基础较差的情况下,很好地组织测试小组 (也可以有外来人员)进行错误猜测,是有效的测试方法。
5.随机数法
即测试用例的参数是随机数。它可以自动生成,因此自动化程度高。使用大量随机测试用例测试通过的程序会提高用户对程序的信心。但其关键在于随机 白盒测试中的六种覆盖方法 六种覆盖方法
首先为了下文的举例描述方便,这里先给出一张程序流程图。(本文以1995年软件设计师考试的一道考试题目为例,图中红色字母代表程序执行路径)。
1、语句覆盖
1)主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。
2)用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)
路径 OBDE OBCE
3)优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
4)缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。
2、判定覆盖
1)主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。
2)用例设计:
X 90 50 90
Y 90 50 70
路径 OAE OBDE OBCE
3)优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
4)缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
3、条件覆盖
1)主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。
2)用例设计:
路径 OBC OBD
3)优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。
4)缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
4、判定/条件覆盖
1)主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。
2)用例设计:
路径 OAE OBDE
3)优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。
4)缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。
5、组合覆盖
1)主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的所有可能组合至少出现一次。
2)用例设计:
1 2 3 4 5 6 7
X 90 90 90 70 30 70 50
Y 90 70 30 90 90 70 50
路径 OAE OBCE OBDE OBCE OBDE OBDE OBDE
3)优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
4)缺点:线性地增加了测试用例的数量。
6、路径覆盖
1)主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。
2)用例设计:
路径 OAE OBDE
3)优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
4)缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:
If (!A)B++;
If (!A)D--;
这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦。 任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。
/%DD%DD%BF%A8%B6%F9/blog/item/b04c43a9adb1.html
范文四:单元试的测试测数可据以两个基用的方法本系地构建。第统个一是格规明测试说,这技术个称也为盒测黑试行,为试,测据数动驱测,试能功试以测及输/输出入驱动测。在这试方法中,个考虑代码本身,不拟在测试制用中使例的用有的仅息是规格信明说档。文另个极一是端代测码,试在它择测选用例时试不理会规格说文明档这。技个也称为术璃盒测试,白盒测玻试,结构测试,辑逻驱动试以测及向面径测试。路
明说试的测行可:性
下面例的子。定某假个数据处产理品的格规说明出指,须必包5类佣含金7类和扣折。测仅试佣和折金扣的个可能的每组就需合要5个测试3用例说,佣金折扣和是两在个全完独立模块的中因,可而以立独试测是有用的没因为在黑,盒测试中将产品作当盒对黑,它待内的部构因此结完是无全关。的此因,彻底规的说明格测在试实际中不是可能的,为因它的组合式方爆会炸式增长。
码代测试的可行:性
码试测常最的见式形求对模块要过通每条的径路最少执行一。试次验品中全产路径是不可部靠的因为存在,这的样产,某些数品试验一个给定路径将据测到错检,而不同的误数试验同一个据径路将会不出错检。误而,面向然路的测径试是效有,的为因没有它固有将可地揭能错误示测的试据数选的排择除在。 外

为合组炸爆彻,的规底格说测明试或底的代彻测码试是不可行的都为。此在,用将尽使可多能揭示错的误技术的时同也,认没有方法保证承已经检出测部错全,误一个继下去的合续的办法是理首先使用黑盒试用测,然后使例用玻璃测盒开试额发的测试用例外。
盒元单测技术:试
彻底的 盒黑试通测要求常成百千上的亿试用测例因此,测的技试巧设是计一个小,可管理的测较试例集,是用检测一出错个的误会最机,大同时过通相让同错的由误多测个试用检例从出使而浪费个一测试例用的会机最小。一这样的个盒黑技是术结了边合值分界析等价的测。 试
1
. 等测试价边界值测试 和
定假一个数据库产的品格规说明指,出该产品须必够处能理何从任1到1683个3录,如记该果产品能够处理3个4记录和48710记录,个那么它在如比说8 252记录个时作工良好可的性很能大因此,该。产能品处理的记录数够规定范的围可以定义三等价个类比:1记录小个从1,到13638个录记和多于 61833个记。录
一成个功测的用例试检测出能前未先检到的错测,为误使发了现这一的错的机误最会,大一高个效技术的是界值分析边。
综,因上,此测这个数试库产品据的候时应
选择个测7试例用:
0个&录记:价等类的1成,临员边近界。
2&值 个记录1:界值边。
3&个记2:临录近界值边。
4&273记个录等:类2的价员。成
&5gt 163;28个录:临记边界近值 。
6g&t;1638 3个记录:界值边。
t;1 6348记个录:等价类的3员,成近边临值。 界
价等试测的程过括概如下
对于输:入和输规格说明 出
于每个范对(围,LU) :
择5个测选试例用小于L:等,于,比L大但LU比,等小于以及U于U。 大
对于
个集每S合:
选2择个试测用例:一S个的素和元个非一的元S素。
范文五:单元测试测试的据数以可用两基本的方法系统个构地。建第个是规格说一明测,试这技个术称也黑盒为测,行试测为试,据数动驱测试功,能测试以输入及输出驱动/试。测在这个法中,不方虑考码本代,在身制拟试用测中例使的仅有的信用息规是说格明文档。一另极端是个码代测试,它在选择试用测例时理不规会说格文档明这。个技也术称为玻盒璃测试白盒,试测结,构测,逻辑试驱测动试以及面路向径试。测
格说明测试的行可性:
虑面下的例子假。定个某数处据产品的规格说理指明,出必须包5类含佣和金类折扣。仅测7佣金和试扣的每折个能的可合组就要需3个5测用例,试说佣和折金扣在是两完全独个立的块中模因,可以独立而试测没是用有,的因为在盒测试中将黑品产作黑当盒对,待的它内结部因此构是全无关完的因。,彻底此的规格说测明试在实际是中不能可,的为因它组的合式方爆会式的炸增。长
代测码的可行试:性
代码测 试最常见的式形求对要块模过通每条路的最少执行径次。试一验产品中全部径路是可靠不的因为存在,这样产的品某些数据,试验个给一路定将检测径到误,错不同而的数试据同验一路个径不会将出检误。错而然,向面路的测径试是有效的,因它为没有固地有可将揭示能误错测的数据的选试排择除外。在
组为爆合炸,彻的底规格明测试说彻或底代码的测试是不都可行的。为此,使在将用可尽能揭多示错误技术的同时的,承认也有方法保证没已检测出经全错误部,一继续个去下的合理办的是首先使法用盒黑测用试,例然使后用璃盒测试玻开发额的外测用试例。
黑盒元测单试术技:
的底盒测黑试常通求成百要上亿的测试用千例,此测因的技巧是设试一个较小计,管理的可试测例集用,检测是出一个误的机会最大错同,时通让相同的错误过由多个试测用例检出从而浪费使一个试用例的测会最小。一机个这的黑样盒术技结是了边界值分合析的等测试价。
1.等 测价试边界值测试和
假 一个定据数库产的品格规明说指,该出品必产须能够处理何从1到任13638个记,录如果该品能够处理34产个记录1和874个0记,那么它录在如说比8 225记录时工个良作的好可性很大能。因此,该产能品够处理的记数录的定规围范可以定三个义价类等:1比个记小录从,到16183个3录记多于 和6383个1录。 记
个一成功的测用试例检测能出先未前测检到错的误,为使发了现这的一误的机错最大会,一高效个的技术是界边分析。
综上,因此值,试测个数这库产据品时的,应候
选择7个试用测:
> 01个录记:等类价1成的,临近边界值员。
>1个录记:边界值
。3 >个2记录临近:界边值 。
4 >723个记:等录价类的2员。 成
> 15682个3录:临记近界值。边
> 16383个6记录:界边值 。
7 1638>个记录:4价类等的3成,临员近边界。 值

价测的过程概试括如下:
输和输入规格出明 说

于每个范(围L,)U
择个测试用5:例于L小,等于L,L比大比但U,小于等U及大于U。以
于每个集合:S
选2个择试测用例:一个的元S和一素非S个的元素

范文六:[试题分类]: [04]白盒测试方法/[0400][综合]白盒测试方法
1. 下面不属于白盒测试能保证的是。 A.模块中所有独立途径至少测试一次 B.测试所以逻辑决策真和假两个方面
C.在所有循环的边界内部和边界上执行循环体 D.不正确或漏掉的功能 答案:D 分数:1
题型:单选题 难度:1
2.因果图方法是根据(
)之间的因果关系来设计测试用例的。
A.输入与输出 B.设计与实现 C.条件与结果
D.主程序与子程序 答案:A 分数:1
题型:单选题 难度:1
3.使用白盒测试方法时,确定测试数据应根据(
)和指定的覆盖标准。
A.程序的内部逻辑 B.程序的复杂程度 C.使用说明书 D.程序的功能 答案:A 分数:1
题型:单选题 难度:1
4.软件测试中常用的静态分析方法是(
)和接口分析。
A.引用分析 B.算法分析 C.可靠性分析 D.效率分析 答案:A 分数:1
题型:单选题 难度:1
5.软件测试中常用的静态分析方法是引用分析和(
A.引用分析 B.算法分析 C.可靠性分析 D.接口分析 答案:D 分数:1
题型:单选题 难度:1
6.白盒方法中常用的方法是(
A.路径测试 B.等价类 C.因果图 D.归纳测试 答案:A 分数:1
题型:单选题
7.在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看作是(
) A.路径的集合 B.循环的集合 C.目标的集合 D.地址的集合 答案:A 分数:1
题型:单选题 难度:1
8.软件测试白箱测试是对软件的结构进行测试,下述: Ⅰ.边缘值分析
Ⅱ.语句测试
Ⅲ.分值测试
Ⅳ.路经测试 (
)是其应包括的内容。 A.Ⅰ B.Ⅱ和Ⅲ C.Ⅲ和Ⅳ D.Ⅱ.Ⅲ和Ⅳ 答案:D 分数:1
题型:单选题 难度:1
9.在进行单元测试时,常用的方法是(
)。 A.采用白盒测试,辅之以黑盒测试 B.采用黑盒测试,辅之以白盒测试 C.只适用白盒测试 D.只适用黑盒测试 答案:A 分数:1
题型:单选题 难度:1
10.白盒测试法一般使用于(
)测试。 A.单元 B.系统 C.集成 D.确认 答案:A 分数:1
题型:单选题 难度:1
[试题分类]: [04]白盒测试方法/[0401]逻辑覆盖法
11.关于条件测试错误的是(
A.可以检查程序中所包含的逻辑条件 B.条件中包含的错误有布尔算子错误 C.条件中包含的错误有布尔变量错误 D.条件中包含的错误有接口错误 答案:D 分数:1
题型:单选题 难度:1
12.关于条件中包含的错误类型说法错误的是(
A.关系算子错误 B.算术表达式错误
C.条件中包含的错误有布尔变量错误 D.条件中包含的错误有接口错误
题型:单选题 难度:1
13.语句覆盖.判定覆盖.条件覆盖和路径覆盖都是白盒测试法设计测试用例的覆盖准则,在这些覆盖准则中最弱的准则是(
A.语句覆盖 B.条件覆盖 C.路径覆盖 D.判定覆盖 答案:A 分数:1
题型:单选题 难度:1
14.语句覆盖.判定覆盖.条件覆盖和路径覆盖都是白盒测试法设计测试用例的覆盖准则,在这些覆盖准则中最强的准则是(
A.语句覆盖 B.条件覆盖 C.路径覆盖 D.判定覆盖 答案:C 分数:1
题型:单选题 难度:1
15.在下面所列举的逻辑测试覆盖中,测试覆盖程度最强的是()
A.条件覆盖 B.条件组合覆盖 C.语句覆盖
D.条件及判定覆盖 答案:B 分数:1
题型:单选题 难度:1
16.在下面所列举的逻辑测试覆盖中,测试覆盖程度最弱的是()
A.条件覆盖 B.条件组合覆盖 C.语句覆盖
D.条件及判定覆盖 答案:C 分数:1
题型:单选题 难度:1
17.对下面的个人所得税程序中满足语句覆盖测试用例的是(
If(income < 800)
taxrate = 0;
else if(income <= 1500)
taxrate = 0.05; else if(income < 2000)
taxrate = 0.08; else taxrate = 0.1;
A.income = (800,01) B.income = (800,801,) C.income = (799,01) D.income = (799,00) 答案:D 分数:1
题型:单选题 难度:1
18.对下面的个人所得税程序中满足判定覆盖测试用例的是(
If(income < 800)
taxrate = 0;
else if(income < 2000)
taxrate = 0.08; else taxrate = 0.1;
A.income = (799,01) B.income = (799,00) C.income = (800,01) D.income = (800,01) 答案:A 分数:1
题型:单选题 难度:1
19.下列陈述中正确的是(
) A.结构测试中不包括循环测试 B.猜测错误也是一种测试方法
C.如果能做到穷举测试,便可发现程序中的全部错误
D.语句覆盖达到100%,则分支(判定)覆盖也应达到100% 答案:D 分数:1
题型:单选题 难度:1
20.在下列逻辑覆盖测试法中,覆盖程度最高的是(
)。 A.语句覆盖 B.判定覆盖 C.路径覆盖
D.条件组合覆盖 答案:C 分数:1
题型:单选题 难度:1
21. 在下列逻辑覆盖测试法中,覆盖程度最低的是(
)。 A.判定覆盖 B.条件覆盖 C.语句覆盖 D.路径覆盖 答案:C 分数:1
题型:单选题 难度:1
22.以下四种逻辑覆盖中,发现错误能力最强的是(
A.语句覆盖
B.条件覆盖
C.判定覆盖
D.条件组合覆盖 答案:B 分数:1
题型:单选题 难度:1
[试题分类]: [04]白盒测试方法/[0402]基本路径法
23.路径测试是整个结构测试的重要组成部分,但在研究路经测试时,通常又是使用程序控制流图来代替(A.程序框图 B.结构图 C.数据流图 D.程序流程图 答案:A 分数:1
题型:单选题
1、判定覆盖设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支_至少被执行一次。 5、根据覆盖目标的不同,逻辑覆盖又可分为:________________,_____________,_______________,__________________,条件组合覆盖,判断/条件覆盖。 语句覆盖,判定覆盖,条件覆盖,路径覆盖
9、白盒测试又称为______________,可以分为______________和______________两大类。 结构测试,静态测试,动态测试
16、代码复审属于____________,不实际运行程序。 静态测试
1. 下列哪一项不是白盒测试?(C)
A.单元测试
B.集成测试
C.系统测试
D.回归测试
6.有一组测试用例使得每一个被测试用例的分支覆盖至少被执行一次,它满足的覆盖标准___________。(B) A. 语句覆盖
B.判定覆盖
C.条件覆盖
D.路径覆盖
9.关于白盒测试与黑盒测试的最主要区别,正确的是___________。(A) A.白盒测试侧重于程序结构,黑盒测试侧重于功能
B.白盒测试可以使用测试工具,黑盒测试不能使用工具
C.白盒测试需要程序参与,黑盒测试不需要
D.黑盒测试比白盒测试应用更广泛
12.在下面所列举中的逻辑测试覆盖中,测试覆盖最强的是__________。(B) A.条件覆盖
B.条件组合覆盖
C.语句覆盖
D.判定覆盖
13.在下面所列举中的逻辑测试覆盖中,测试覆盖最弱的是__________。(C) A.条件覆盖
B.条件组合覆盖
C.语句覆盖
D.判定覆盖
30.代码检查法有桌面检查法,走查和__________。(B) A.静态测试
B. 代码审查
C.动态测试
D.白盒测试
1.计算环路复杂度方法有哪三种? 答:(1)V(G)=判定节点数+ 1 ;
(2)V(G) = E-N+2 ;
(3)V(G)=区域数 2.白盒测试有几种方法?
答:白盒测试方法分为两大类:静态测试方法和动态测试方法。
静态测试方法:检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。 4.比较白盒测试和黑盒测试?
答:使用白盒测试方法时,测试根据程序的内部逻辑和指定的覆盖标准;
黑盒测试法是通过分析程序的接口功能设计测试用例的。
5.为以下程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖。
int test(int A,int B) {
if((A>1) AND (B<10))
if((A=2) OR (B>20))
答:语句覆盖测试用例:A=2,B=0;
判定覆盖测试用例:A=3,B=0;A=2,B=20;
条件覆盖测试用例:A=2,B=0;A=0,B=21;
6. 为以下程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖。 void
DoWork (int x,int y,int z) {
if ( (x>3)&&(z<10) )
j=sqrt(k);
if ( (x==4)||(y>5) )
//语句块3 }
答:语句覆盖测试用例:x=4、y=5、z=5;
判定覆盖测试用例::x=4、y=5、z=5;x=2、y=5、z=5; 条件覆盖测试用例:x=4、y=6、z=5 ;x=2、y=5、 z=15 ;
8.看代码程序:
Sort ( int
iRecordNum, int iType ) 1 {
while ( iRecordNum> 0 ) 5
If ( iType==0 ) 7
If ( iType==1 ) 10
x=y+10; 11
要求(1)给以上代码画出控制流图(2)控制流图的环复杂度V(G),写出独立路径。
控制流图: (2)V(G)= 4
路径1:4→14
路径2:4→6→7→13 → 4 → 14
路径3:4→6→9→10→13→4→14
路径4:4→6→9→12→13→4→14
1.如图显示某程序的逻辑结构。试为它设计足够的测试用例,分别实现对程序的判定覆盖、条件覆盖和条件组合覆盖。(20分)(每空
3.设一个控制流图如下,请给出环形复杂度和基本测试路径。(20分)
根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目。 公式1:V(G)=11-9+2,其中10是控制流图G中边的数量,8是控制流图中节点的数目。
因此,控制流图G的环形复杂度是4。
(2) 根据上面环形复杂度的计算结果,源程序的基本路径集合中有4条独立路径: 路径1:5->22
路径2:5->7, 8->11, 12->21->5->22
路径3:5->7, 8->16->17->19->21->5->22 路径4:5->7, 8->16->18->19->21->5->22
1、使用基本路径测试方法,为以下程序段设计测试用例。 (1)画出程序的控制流图,编号已经给出。
(2)计算程序的循环复杂度,导出程序基本路径集中的独立路径条数。 (3)导出基本路径集,确定程序的独立路径。
(4)根据(3)中的独立路径,设计测试用例(确保基本路径集中的每一条路径的执行)的输入数据和预期输出。
void Do (int X,int A,int B)
if ( (A>1)&&(B=0) )
if ( (A=2)||(X>1) )
由于控制流图假设的是单条件,因此对于复合条件,可将其分解为多个单个条件,并映射成控制流图。
A>1;2: B=0 ;3: X = X/A ;4: A=2 ;5:X>1 ;6: X = X+1;7: } 1、画出控制流图:
如右图所示
计算环形复杂度:
10(条边)- 7(个节点)+ 2 = 5
导出独立路径(用语句编号表示)
路径1:1→2→3→4→5→6→7
路径2:1→4→5→6→7
路径3:1→2→4→6→7
范文七:白盒测试用例方法实例
示例:程序源代码分析
Dim a, b As Integer
Dim c As Double
If (a>0 And b>0) Then
If (a>1 Or c>1) Then
示例:程序源代码分析程序流程图
示例:程序源代码分析
o由上述的流程图1可以看出,该程序模块有4条不同的路径:
–P1(1-2-4)
–P2(1-2-5)
–P3(1-3-4)
–P4(1-3-5)
o将里面的判定条件和过程记录为图2
–条件M={a>0 and b>0}
–条件N={a>1 or c>1}
示例:程序源代码分析
o程序的4条路径可以表示为:(
–P1(1-2-4)=M and N
–P2(1-2-5)=M and /N
–P3(1-3-4)=/M and N
–P4(1-3-5)=/M and /N
示例:语句覆盖
o语句覆盖,就是要满足条件M和条件N,那么按照语句覆盖的原则,测试用例为:{a=2,b=1,c=6}
对应输出为:{a=2,b=1,c=5}
语句覆盖优缺点
o优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
o缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。
o判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
o判定覆盖又称为分支覆盖。
示例:判定覆盖
o按照判定覆盖的基本思路,将前面提到的代码示例进行测试用例设计:
–P1和P4可以作为测试用例
–其中P1作为取真的路径,P4作为取反的路径,那么
输入{a=2,b=1,c=6}和输出{a=2,b=1,c=5}覆盖了路径P1
输入{a=-1,b=2,c=1}和输出{a=-1,b=2,c=3}覆盖了路径P4
判定覆盖优缺点
o优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
o缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。
o条件覆盖就是设计若干个测试用例,运行
被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
示例:条件覆盖
o根据条件覆盖的基本思想,将前面的代码示例可以进行分解:
–对于第一个判定条件M,可以分解为:
o条件a>0:取真时为T1,取假时为F1
o条件b>0:取真时为T2,取假时为F2
–对于第二个判定条件N,可以分解为:
o条件a>1:取真时为T3,取假时为F3
o条件c>1:取真时为T4,取假时为F4
示例:条件覆盖
o采用条件覆盖设计的测试用例:
条件覆盖优缺点
o优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。o缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
判定-条件覆盖
o判定-条件覆盖实际上时判定和条件覆盖设计方法的交集。
o判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断中的每个条件的可能取值至少执行一次。
示例:判定-条件覆盖o按照判定-条件覆盖的基本思想,在前面的代码示例中,应该至少保证判定条件M和N各取真/假一次,同时要保证8个条件取值(T1、T2、T3、T4、F1、F2、F3和F4)至少执行一次。
示例:判定-条件覆盖o采用判定-条件覆盖设计
的测试用例
判定-条件覆盖优缺点o优点:判定-条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。o缺点:判定-条件覆盖准则的缺点是未考虑条件的组合情况。
条件组合覆盖
o条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次,并且每个判断本身的判定结果也至少出现一次。o与条件覆盖的差别时他不是简单的要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合至少出现一次。
示例:条件组合覆盖
o按照条件组合覆盖的基本思想,根据前面代码示例采用条件组合覆盖设计的测试用例:
示例:条件组合覆盖
o采用8种组合条件设计的测试用例:
条件组合覆盖优缺点
o优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定-条件覆盖准则。更改的判定-条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。
o缺点:线性地增加了测试用例的数量。
o路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
示例:路径覆盖
o完全覆盖路径P1、P2、P3、P4的测试用例:
示例:条件组合和路径覆盖o采用条件组合和路径覆盖设计的测试用例:
路径覆盖优缺点
o优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。
o缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,某些执行路径是不可能被执行的。
范文八:2009年第2期
gaoxta哪ld掣uyan.1tu
白盒测试的六种方法比较分析
(湖南农业大学资产管理处
410128)
l摘要l白盒测试是测试人l常用的一种测试方法.越来越受到测试工程师的重视。白盒潮试并不是一单的按腻代码霞计用饲.而走需要根据不同的测试需求,蛄舍不同的洲试对象,使用适合的方法进行测试。奉文介绍六种白盍子测试方法t语句量工.判定t玉.备件童盖.判定条件童盖.条件担合曩盖.路径覆盖。
潮试方法【关键词】白奎测试测试需求执行路径
【中图分类号】TN06I文献标识码】A【文章编号l1009—9646(2009)02(a)一0224—02
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试A、保证一个模块中的所有独立路径至B.对所有逻辑值均需测试Lrue和falseC、在上下边界及可操作范围内运行所有D、检查内部数据结构以确保其有效性通过检查软件内部的逻辑结构,对软件中下面这些规则也可以看作是测试的目标(1)测试是为了发现程序中的错误而执行
(2)好的测试方案是极可能发现迄今为止(3)成功的测试是发现了至今为止尚未发从上述规则可以看出,测试的正确定义是万 
方数据由于测试的目标是暴露程序中的错误,从试结果。
4)测试总结阶段:对比测试的结果和代码
的预期结果,分析错误原因,找到并解决错误。
1.5白盒测试的方法:
总体上分为静态方法和动态方法两大
静态分析是一种不通过执行程序而进行
测试的技术。静态分析的关键功能是检查软
件的表示和描述是否一致.没有冲突或者没有歧义。
依据软件设计说明书进行测试、对程序动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后.对软件系统行为的分析。动态分析包含了程
序在受控的环境下使用特定的期望结果进行
正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。1.6白盒测试的优缺点:
1)铡试计划阶段:根据需求说明书,制定A.优点:使得测试人员去仔细思考软件的实现。可以检测代码中的每条分支和路径t能2)测试设计阶段:依据程序设计说明书,尽量揭示隐藏在代码中的错误?对代码的测试比较彻底-
B.缺点:昂贵,费时。很难检测代码中遗3)测试执行阶段:输入测试用例,得到测
漏的路径和数据?见图1。
来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。常崩的软件测试方法有两大类:静态测试方法和动态测试方法。其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试-而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。白盒测试是一种测试用例设讣方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
1.1白盒的测试用例需要做到:
少被使用一次
1.2白盒测试的目标:
的逻辑路径进行覆盖测试,在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
心理学角度看.由程序的编写者自己进行测试
是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试工作。此外,应该认识到测试决不能证明程序是正确的。即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。测试只能查找出程序中的错误,不能证明程序中没有错误。
1.3白盒测试的特点:
内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。是把测试对象看作一个打开的盒子,测试人员依
据程序内部逻辑结构相关信息,设计或选择测
试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态.确定实际的状态是否与预期的状态一致。
1.4白盒测试的实施步骤:
测试进度。
按照一定规范化的方法进行软件结构划分和设计测试用例。
程序的过程,
尚未发现的错误的测试方案;
现的错误的损4试。
“为了发现程序中的错误而执行程序的过程”。这和某些人通常想象的“测试是为了表明程序是正确的”,。成功的测试是没有发现错误的测试”等等是完全相反的。正确认识测试的目标是十分重要的,测试目标决定了测试方案的设计。如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案?
相反.如果测试是为了发现程序中的错误,就
会力求设计出最能暴露错误的测试方案。
一224一
条件覆盖只能保证每个条件至少有一次为真。而不考虑所有的判定结果。2.4判定/条件覆盖
皇∞删w毋..。^4Wm
即flag为真或假时候对x和y的处理.真或假
不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测2009年第2期
2六种覆盖方法分析
2.1语句覆盖
1)主要特点:语句覆盖是最基本的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。2)用例设计:(如果此时将A路径上的隐式语句l—Print去掉,那么用例如下)
3)优点:可以很直观地从源代码得到铡试用例,无须细分每条判定表达式。
4)缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1一Print去掉,那么就少了一条测试路径。在if结构中若源代码没有给
出else后面的执行分支。那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种
以外的分支不会被执行,而往往这种错误会经
常出现。再如,在Do-While结构中,语句覆
盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。2.2判定覆盖
1)主要特点;又称分支覆盖,设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。即:程序中的每个分支至少执行一次。每个判断的取真、取假至少执行一次。
2)用例设计:
厂R|r—陬
r阿阿『|i石一F『『『两磊一f丁阿『■r
3)优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
4)缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE)。若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。2.3条件覆盖
1)主要特点:条件覆盖要隶设计足够多的测试用例,使得判定中的每个条件获得各种可
能的结果,即每个条件至少有一次为真值,有
一次为假值。
2)用例设计:
3)优点:显然条件覆盖比判定覆盖,增加
了对符合判定情况的测试,增加了测试路径。
4)缺点:要达到条件覆盖,需要足够多的
方数据1)主要特点:设计足够多的测试用例,使
试效率,而且大量的测试结果的累积,也为排得判定中每个条件的所有可能结果至少出现错带来麻烦。
一次,每个判定本身所有可能结果也至少出现
2)用例设计
自盒测试是一种被广泛使用的逻辑测试
Y路径方法,是由程序内部逻辑驱动的一种单元测试
l120120oAE方法。只有对程序内部十分了解才能进行适
OBDE度有效的白盒测试.但是贯穿在程序内部的
逻辑存在着不确定性和无穷性,尤其对于大规,
0BcE模复杂软件。因此我们不能穷举所有的逻辑{4
路径。即使穷举也未必会带来好运(穷举不能查3)优点:判定/条件覆盖满足手Ⅱ定覆盖准出程序逻辑规则错误,不能查出数据相关错则和条件覆盖准则,弥}FT-:-者的不足。
误,不能查出程序遗漏的路径).
4)缺点:判定/条件覆盖准则的缺点是未
那么正确使用自盒测试,就要先从代码分
考虑条件的组合情况。
析人手.根据不同的代码逻辑规则、语句执行
情况,选用适合的覆盖方法。任何一个高效的1)主要特点:要求设计足够多的测试用测试用例,都是针对具体测试场景的。逻辑测试不是片面的测试正确的结果或是测试错误的结果,而是尽可能全面地覆盖每一个逻辑路2)用例设计
120oAE
【l】(美)梅尔斯等著.壬峰,陈杰译.软件测试
40oBCE
的艺术(原书第2版)【M】.机械工业出版社.
3.50BDE2006.
47090
【2】贺平.软件测试技术【M】.机械工业出版杜.
2004.
67075OBDEf3】古乐.软件测试技术概论fM】.清华大学出版社.2004.
【4】RonPatton(美).软件测试(英文版第2版).
3)优点:多重条件覆盖准则满足判定覆
[M】机械工业出版社.2006.
【5】崔启亮.国际化软件测试[M】.电子工业出
版社.2003.[6】【美]ElfriedeDustin.有效软件测试【M】.清
华大学出版社.2005.
4)缺点:线性地增加了测试用例的数量。
1)主要特点:设计足够的测试用例,覆盖2)用例设计:
1120120OAE250.50oBDE3
10040OBCE
3)优点:这种测试方法可以对程序进行彻4)缺点:由于路径覆盖需要对所有可能的
If([flag)x++l
If(!flag)y一一I
这两个语句实际只包括了2条执行路径,
一225—
2.5组合覆盖
例,使得每个判定中条件结果的所有可能组合至少出现一次。
盖、条件覆盖和判定/条件覆盖准则。更改
的判定/条件覆盖要求设计足够多的测试用
例,使得判定中每个条件的所有可能结果至少
出现一次。每个判定本身的所有可能结果也至
少出现一次。并且每个条件都显示能单独影
响判定结呆。
2。6路径覆盖
程序中所有可能的路径。
底的测试,比前面五种的覆盖面都广。
路径进行测试(包括循环,条件组合.分支
选择等).那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情
况下,一些执行路径是不可能被执行的,如:
测试用例.但条件覆盖并不能保证判定覆盖。
白盒测试的六种方法比较分析
作者:作者单位:刊名:英文刊名:年,卷(期):
湖南农业大学资产管理处,湖南长沙,410128
世界华商经济年鉴·高校教育研究
WORLD CHINESE ENTREPRENEUR ECONOMIC YEARBOOK·GAOXIAO JIAOYU YANJIU2009(2)
参考文献(6条)
1.梅尔斯;等;王峰;陈杰 软件测试的艺术(原书第2版) 20062.贺平 软件测试技术 20043.古乐 软件测试技术概论 20044.Ron Patton 软件测试 20065.崔启亮 国际化软件测试 20036.Elfriede Dustin 有效软件测试 2005
本文读者也读过(10条)
1. 洪新峰.HONG Xin-feng 浅谈白盒测试技术[期刊论文]-电脑知识与技术)2. 刘洋.LIU Yang 白盒测试技术概述[期刊论文]-广西大学学报(自然科学版))3. 丁蕾.方木云 简述软件测试的白盒测试法[期刊论文]-安徽科技2007(10)
4. 王静.Wang Jing 判定覆盖和条件覆盖的比较研究[期刊论文]-软件导刊)5. 张玉中.唐熠 白盒测试中基于遗传算法的测试用例优化问题[期刊论文]-科技展望. 向华 关于白盒测试基本方法的分析[期刊论文]-江汉大学学报(自然科学版))7. 丁蕾.方木云 第四代白盒测试法的研究[期刊论文]-科技资讯2007(32)
8. 贾晓强.JIA Xiao-qiang 基于白盒测试的基本路径测试[期刊论文]-渭南师范学院学报)9. 徐青翠.柴政.XU Qing-cui.CHAI Zheng 白盒测试方法分析与研究[期刊论文]-电脑知识与技术)10. 彭浩.贾国柱 大型应用软件白盒测试的组织与管理模式研究[期刊论文]-中国科技信息2007(4)
本文链接:.cn/Periodical_gxjyyj.aspx
范文九:1. 白盒测试用例设计方法
1.1. 白盒测试概述
由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。由于我们经常相信某逻辑路径不可能被执行,而事实上,它可能在正常的情况下被执行。由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
1. 白盒的测试用例需要做到
? 保证一个模块中的所有独立路径至少被使用一次; ? 对所有逻辑值均需测试 true 和 false; ? 在上下边界及可操作范围内运行所有循环; ? 检查内部数据结构以确保其有效性。 2. 白盒测试的目的
通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
3. 白盒测试的特点
依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
4. 白盒测试的实施步骤
1)测试计划阶段:根据需求说明书,制定测试进度。
2)测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件
结构划分和设计测试用例。
3)测试执行阶段:输入测试用例,得到测试结果。
4)测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找
到并解决错误。
5. 白盒测试的方法
总体上分为静态方法和动态方法两大类。
? 静态分析:是一种不通过执行程序而进行测试的技术。静态分析的关键
功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。 ? 动态分析:主要特点是当软件系统在模拟的或真实的环境中执行之前、
之中和之后 , 对软件系统行为的分析。动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。 6. 白盒测试的优缺点
? 优点:迫使测试人员去仔细思考软件的实现;可以检测代码中的每
条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底;最优化
? 缺点:费用昂贵;无法检测代码中遗漏的路径和数据敏感性错误;
不验证规格的正确性。
1.2. 白盒测试基本技术 1.2.1. 控制流图 1.2.1.1. 定义
程序流程图是软件开发过程中进行详细设计时,表示模块内部逻辑的一个常用的、也非常有效的图示法。程序流程图详细地反映了程序内部控制流的处理和转移过程,它一般是进行模块编码的参考依据。在程序流程图中,通常拥有很多种图示元素,例如,“矩形框”表示一个计算处理过程,而“菱形框”表示一个判断条件等。通常测试人员为某个程序模块做白盒测试过程中,在做与路径相关的各种分析的时候,这些非常细节的信息往往是不太重要。因此,为了更清晰突出地显示出程序的控制结构,反映控制流的转移过程,一种简化了的程序流程图便出现了,就是程序的控制流图。在控制流图中一般只有两种简单的图示符号:
节点和控制流。
1)节点。以标有编号的圆圈表示。它一般代表了程序流程图中矩形框所表示的处理、以及领形框所表示的判定条件,以及两条活多条节点的汇合点等。一个节点就是一个基本的程序块,它可以是一个单独的语句(如if条件判断语句,或循环语句),也可以是多个顺序执行的语句块。
2)控制流。以带箭头的弧线表示,用来连接相关的两个节点。它与程序流程图中的控制流所表示的意义是一致的,都是知识了程序控制的转移过程。为了便于处理,每个控制流也可以标有名字,这是继就相当于向图中的边。每条边必须要终止某一节点。
1.2.1.2. 控制流图的基本控制结构的图形符号
在控制流图中,其基本的控制结构所对应的图形符号如下图。
(a)顺序结构
(b)IF ELSE结构
(c)多分支结构
(d)循环结构
1.2.2. 六种覆盖方法
首先为了下文的举例描述方便,这里先给出一张程序流程图。
1. 语句覆盖
1)主要特点:语句覆盖是最起码的结构覆盖要求,语句覆盖要求设计足够多的测试用例,使得程序中每条语句至少被执行一次。 2)用例设计:(如果此时将A路径上的语句1—〉T去掉,那么用例如下)
3)优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。
4)缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。
2. 判定覆盖
1)主要特点:判定覆盖又称为分支覆盖,它要求设计足够多的测试用例,
使得程序中每个判定至少有一次为真值,有一次为假值,即:程序中的
每个分支至少执行一次。每个判断的取真、取假至少执行一次。 2)用例设计:
3)优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比
语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。
4)缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语
句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。 3. 条件覆盖
1)主要特点:条件覆盖要求设计足够多的测试用例,使得判定中的每个条
件获得各种可能的结果,即每个条件至少有一次为真值,有一次为假值。 2)用例设计:
3)优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加
了测试路径。
4)缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保
证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。 4. 判定/条件覆盖
1)主要特点:设计足够多的测试用例,使得判定中每个条件的所有可能结
果至少出现一次,每个判定本身所有可能结果也至少出现一次。 2)用例设计:
3)优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的
4)缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。 5. 组合覆盖
1) 主要特点:要求设计足够多的测试用例,使得每个判定中条件结果的
所有可能组合至少出现一次。 2)用例设计:
3)优点:多重条件覆盖准则满足判定覆盖、条件覆盖和判定/条件覆盖准则。
更改的判定/条件覆盖要求设计足够多的测试用例,使得判定中每个条件的所有可能结果至少出现一次,每个判定本身的所有可能结果也至少出现一次。并且每个条件都显示能单独影响判定结果。 4)缺点:线性地增加了测试用例的数量。 6. 路径覆盖
1)主要特点:设计足够的测试用例,覆盖程序中所有可能的路径。
2)用例设计:
3)优点:这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面
4)缺点:由于路径覆盖需要对所有可能的路径进行测试(包括循环、条件
组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。而在有些情况下,一些执行路径是不可能被执行的,如:
(!A)B++;
(!A)D--;
这两个语句实际只包括了2条执行路径,即A为真或假时候对B和D的处
理,真或假不可能都存在,而路径覆盖测试则认为是包含了真与假的4条执行路径。这样不仅降低了测试效率,而且大量的测试结果的累积,也为排错带来麻烦
范文十:1 白盒测试用例设计方法
1.1 白盒测试简介
白盒测试又称结构测试、逻辑驱动测试或基于程序的测试,一般多发生在单元测试阶段。白盒测试方法主要包括逻辑覆盖法,基本路径法,程序插装等。
这里重点介绍一下常用的基本路径法,对于逻辑覆盖简单介绍一下覆盖准则。
1.2 基本路径法
在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出独立路径集合,从而设计测试用例,设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。
在介绍基本路径测试方法(又称独立路径测试)之前,先介绍流图符号:
如图1所示,每一个圆,称为流图的节点,代表一个或多个语句,流程图中的处理方框序列和菱形决策框可映射为一个节点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个节点,即使该节点并不代表任何语句,例如,图2中两个处理方框交汇处是一个节点,边和节点限定的范围称为区域。
任何过程设计表示法都可被翻译成流图,下面显示了一段流程图以及相应的流图。
注意,程序设计中遇到复合条件时(逻辑or, and, nor 等),生成的流图变得更为复杂,如(c)流图所示。此时必须为语句IF a OR b 中的每一个a 和b 创建一个独立的节点。
独立路径是指程序中至少引进一个新的处理语句集合,采用流图的术语,即独立路径必须至少包含一条在定义路径之前不曾用到的边。例如图(b)中所示流图的一个独立路径集合为:
路径1:1-11
路径2:1-2-3-4-5-10-1-11
路径3:1-2-3-6-8-9-10-1-11
路径4:1-2-3-6-7-9-10-1-11
上面定义的路径1,2,3 和4 包含了(b)流图的一个基本集,如果能将测试设计为强迫运行这些路径, 那么程序中的每一条语句将至少被执行一次,每一个条件执行时都将分别取true 和false(分支覆盖)。应该注意到基本集并不唯一,实际上,给定的过程设计可派生出任意数量的不同基本集。如何才能知道需要寻找多少条路径呢?可以通过如下三种方法之一来计算独立路径的上界:
1. V=E-N+2,E 是流图中边的数量,N 是流图节点数量。
2. V=P+1,P 是流图中判定节点的数量
3. V=R,R 是流图中区域的数量
例如,(b)流图可以采用上述任意一种算法来计算独立路径的数量
1. V=11 条边-9 个节点+2=4
2. V=3 个判定节点+1=4 3. 流图有4 个区域,所以V=4
由此为了覆盖所有程序语句,必须设计至少4 个测试用例使程序运行于这4 条路径。 在采用基本路径测试方法中,获取测试用例可参考以下方式:
? ? ? ? ? ? ?
通过非路径分析得到的测试用例;
找到尚未测试过的路径并生成相应的测试用例; 指定特定路径生成相应的测试用例。
对程序中的循环作了执行了零次和一次的限制,这样程序路径的数目就是有限的。 如果程序的数目有限,就可采用枚举法得到所有的路径。
完成若干测试用例后,就可以知道所测路径是哪些,尚有哪些待测路径。 在指出要测试的路径以后,可以自动生成相应的测试用例。
1.3 逻辑覆盖 1.3.1 循环测试简介
逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它的主要方法有:语
句覆盖;判定覆盖;条件覆盖;判定—条件覆盖;条件组合覆盖;路径覆盖。举例如下:
1.3.2 语句覆盖
语句覆盖:语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。
在图例中,正好所有的可执行语句都在路径L1上,所以选择路径 L1设计测试用例,就可以覆盖所有的可执行语句。
测试用例的设计格式如下: 【输入的(A, B, X),输出的(A, B, X)】 为图例设计满足语句覆盖的测试用例是: 【(2, 0, 4),(2, 0, 3)】
覆盖 ace【L1】
1.3.3 判定覆盖
判定覆盖:判定覆盖又称为分支覆盖。就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。 对于图例,如果选择路径L1和L2,就可得满足要求的测试用例:
?A?1? and ?X?1? or
?B?0? and ?A?2? and ?X?1?
【(2, 0, 4),(2, 0, 3)】覆盖 ace【L1】 【(1, 1, 1),(1, 1, 1)】覆盖 abd【L2】
如果选择路径L3和L4,还可得另一组可用的测试用例:
【(2, 1, 1),(2, 1, 2)】覆盖 abe【L3】 【(3, 0, 3),(3, 0, 1)】覆盖 acd【L4】
1.3.4 条件覆盖
条件覆盖:条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
在图例中,我们事先可对所有条件的取值加以标记。例如, 对于第一个判断:
条件 A>1 取真为 T 1 ,取假为T1;
条件 B=0 取真为 T 2 ,取假为 T 2 。 对于第二个判断:
条件A=2 取真为 T 3 ,取假为 T 3 ;
条件X>1 取真为 T 4 ,取假为 T 4 。
【(2, 0, 4),(2, 0, 3)】
【(1, 0, 1),(1, 0, 1)】
1T3T【(2, 1, 1),(2, 1, 2)】
【(1, 0, 3),(1, 0, 4)】
【(2, 1, 1),(2, 1, 2)】
T 1 T 2 T 3 T 4
1.3.5 判定-条件覆盖
判定-条件覆盖:判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断中的所有可能取值至少执行一次。
【(2, 0, 4),(2, 0, 3)】
【(1, 1, 1),(1, 1, 1)】
T 1 T 2 T 3 T
(A=2)and(B=0)or (A>1)and (B=0)and (X/A>1); (A≤1)and (X≤1)or (B≠0)and (A≠2)and (X≤1)
1.3.6 条件组合覆盖
条件组合覆盖:条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。
例: ① A>1, B=0
② A>1, B≠0
③ A≯1, B=0
④ A≯1, B≠0
⑤ A=2, X>1
⑥ A=2, X≯1
⑦ A≠2, X>1
⑧ A≠2, X≯1
测 试 用 例
T1T【(2, 0, 4),
(2, 0, 3)】
【(2, 1, 1),
(2, 1, 2)】
(L3)T1T2T3T4
【(1, 0, 3),
(1, 0, 4)】
(L3)T1T2T3T4
【(1, 1, 1),
(1, 1, 1)】
(L2)T1T2T3T4
1.3.7 路径覆盖
路径覆盖:路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
测 试 用 例
覆盖条件 【(2, 0, 4),
(2, 0, 3)】
【(1, 1, 1),
(1, 1, 1)】
【(1, 1, 2),
(1, 1, 3)】
【(3, 0, 3),
(3, 0, 1)】
1.4 循环测试
循环测试主要关注循环体结构的正确性,对循环变量运用类似于边界值测试的方法以验证循环体结构的正确性。
循环测试主要由四种不同类型的循环结构
简单循环; 嵌套循环; 连接循环; 非结构循环
1.4.1 简单循环
如果n 是循环次数, 那么测试用例应包括
? 直接跳过循环体; ? 只执行一遍循环体; ? 连续执行两遍循环体;
? 如果循环次数为n,执行m( m < n)遍循环体; ? 如果循环次数为n,那么执行n -1遍循环体; ? 如果循环次数为n,那么执行n遍循环体; ? 如果循环次数为n,那么执行n + 1遍循环体。
Beizer’s 的方法:
? 从最内层测试开始,其它层的循环变量置为最小值
? 按照简单循环的测试方法测试最内层的循环体,外层循环仍旧取最小值
? 向外扩展循环体,测试下一个循环
1. 所有外层循环变量取最小值;
2. 其余内层嵌套的循环体取典型值 ;
3. 继续本步骤直到所有的循环体均测试完毕。
1.4.3 连接循环
? 如果相连接的循环体互相独立,按照简单循环测试每一个循环体;
? 如果相连接的循环体1的循环变量的最终结果是循环体2循环变量的初始值,那么采用
嵌套循环的方法来测试(靠前认为是内层循环)。
? 测试非结构循环是一件令人头痛的事情
? 最好的方法是重新设计循环体结构
1.5 程序插桩
程序插装是一种基本的测试手段。它是在程序特定部位插入“探针”,以便把程序执行过程中发生的一些重要历史事件记录下来(如语句执行次数、某些变量值的变化情况等),只有借助于插装技术,才能了解程序执行时的语句覆盖、分支覆盖及路径覆盖等结构覆盖情况。在被测程序中插入的操作(语句)称为“探测器”或“探针”。
求取两个整数X和Y的最大公约数程序如下:
gsd (int X, int Y)
while(Q!=R)
else R=R-Q;
为了记录改程序中语句的执行次数,我们使用插桩技术插入如下语句:
C(i)=C(i)+1,i=1,2,…6
插桩之后的流程图如下:
图中虚线框中的内容并不是源程序的内容,而是我们为了记录语句的执行次数而插入的。虚线框中的程序就是为了完成计数。形式就是
C(n)=C(n)+1
; n = 1,2,3,……,n ;
该程序从入口开始,到出口执行结束。凡经历的计数语句都能记录下该程序点的执行次数。
如果我们在程序的入口处还插入了对计数器C(i)初始化的语句,在出口处插入了打印这些计数器的语句,就构成了完整的插桩程序。它就能记录并输出在各程序点上语句的实际执行次数。
下图为插桩之后的程序,箭头所指为插入的语句。源程序的语句已略去。
设计插桩程序时需要考虑的问题包括:
(1) 探测哪些信息。
这个问题需要具体问题具体分析。
(2) 在程序的什么部位设置探测点。
针对这个问题,在手机测试中,通常在下列一些部位设置探测点:
? 程序块的第1个可执行语句之前 for,do ,do-while,do until 等循环语句处。 if, else if, else及end if等条件语句各分支处。 输入/输出语句之后。
? 函数、过程、子程序调用语句之后。
? return语句之后。
? goto语句之后。
(3) 需要设置多少个探测点。
这个问题需要考虑如何设置最少探测点方案。
(4) 程序中特定部位插入某些用以判断变量特性的语句。
在应用程序插桩技术时,可在程序中特定部位插入某些用以判断变量特性的语句,
使得程序执行中这些语句得以证实。

我要回帖

更多关于 算法时间复杂度 的文章

 

随机推荐