白盒测试的测试方法有代码检查法 1.docx
《白盒测试的测试方法有代码检查法 1.docx》由会员分享,可在线阅读,更多相关《白盒测试的测试方法有代码检查法 1.docx(11页珍藏版)》请在冰豆网上搜索。
![白盒测试的测试方法有代码检查法 1.docx](https://file1.bdocx.com/fileroot1/2023-5/19/5b095e61-ccff-4a81-a06c-6a8f442601f3/5b095e61-ccff-4a81-a06c-6a8f442601f31.gif)
白盒测试的测试方法有代码检查法1
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程式变异。
其中运用最为广泛的是基本路径测试法。
基本路径测试法是在程式控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要确保在测试中程式的每个可执行语句至少执行一次。
在程式控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
包括以下4个步骤和一个工具方法:
1.程式的控制流图:
描述程式控制流的一种图示方法。
2.程式圈复杂度:
McCabe复杂性度量。
从程式的环路复杂性可导出程式基本路径集合中的单独路径条数,这是确定程式中每个可执行语句至少执行一次所必须的测试用例数目的上界。
3.导出测试用例:
根据圈复杂度和程式结构设计用例数据输入和预期结果。
4.准备测试用例:
确保基本路径集中的每一条路径的执行。
工具方法:
图像矩阵:
是在基本路径测试中起辅助作用的软件工具,利用他能够实现自动地确定一个基本路径集。
程式的控制流图:
描述程式控制流的一种图示方法。
圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程式语句
流图只有二种图像符号:
图中的每一个圆称为流图的结点,代表一条或多条语句。
流图中的箭头称为边或连接,代表控制流
任何过程设计都要被翻译成控制流图。
如何根据程式流程图画出控制流程图?
在将程式流程图简化成控制流图时,应注意:
n在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。
n边和结点圈定的区域叫做区域,当对区域计数时,图像外的区域也应记为一个区域。
如下页图所示
n假如判断中的条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。
例如:
1ifaorb
2x
3else
4y
对应的逻辑为:
单独路径:
至少沿一条新的边移动的路径
基本路径测试法的步骤:
o第一步:
画出控制流图
流程图用来描述程式控制结构。
可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。
在流图中,每一个圆,称为流图的结点,代表一个或多个语句。
一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。
一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:
if-else-then结构)。
由边和结点限定的范围称为区域。
计算区域时应包括图外部的范围。
画出其程式流程图和对应的控制流图如下
o第二步:
计算圈复杂度
圈复杂度是一种为程式逻辑复杂性提供定量测度的软件度量,将该度量用于计算程式的基本的单独路径数目,为确保任何语句至少执行一次的测试数量的上界。
单独路径必须包含一条在定义之前不曾用到的边。
有以下三种方法计算圈复杂度:
流图中区域的数量对应于环型的复杂性;
给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;
给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
o第三步:
导出测试用例
根据上面的计算方法,可得出四个单独的路径。
(一条单独路径是指,和其他的单独路径相比,至少引入一个新处理语句或一个新判断的程式通路。
V(G)值正好等于该程式的单独路径的条数。
)
ü路径1:
4-14
ü路径2:
4-6-7-14
ü路径3:
4-6-8-10-13-4-14
ü路径4:
4-6-8-11-13-4-14
根据上面的单独路径,去设计输入数据,使程式分别执行到上面四条路径。
o第四步:
准备测试用例
为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以确保某一条路径能够被测试到,满足上面例子基本路径集的测试用例是:
举例说明:
例:
下例程式流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。
步骤1:
导出过程的流图。
步骤2:
确定环形复杂性度量V(G):
1)V(G)=6(个区域)
2)V(G)=E–N+2=16–12+2=6
其中E为流图中的边数,N为结点数;
3)V(G)=P+1=5+1=6
其中P为谓词结点的个数。
在流图中,结点2、3、5、6、9是谓词结点。
步骤3:
确定基本路径集合(即单独路径集合)。
于是可确定6条单独的路径:
路径1:
1-2-9-10-12
路径2:
1-2-9-11-12
路径3:
1-2-3-9-10-12
路径4:
1-2-3-4-5-8-2…
路径5:
1-2-3-4-5-6-8-2…
路径6:
1-2-3-4-5-6-7-8-2…
步骤4:
为每一条单独路径各设计一组测试用例,以便强迫程式沿着该路径至少执行一次。
1)路径1(1-2-9-10-12)的测试用例:
score[k]=有效分数值,当k
score[i]=–1,2≤i≤50;
期望结果:
根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
2)路径2(1-2-9-11-12)的测试用例:
score[1]=–1;
期望的结果:
average=–1,其他量保持初值。
3)路径3(1-2-3-9-10-12)的测试用例:
输入多于50个有效分数,即试图处理51个分数,需要前51个为有效分数;
期望结果:
n1=50、且算出正确的总分和平均分。
4)路径4(1-2-3-4-5-8-2…)的测试用例:
score[i]=有效分数,当i<50;
XX文库-让每个人平等地提升自我 score[k]<0,k
期望结果:
根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
5)路径5的测试用例:
score[i]=有效分数,当i<50;
score[k]>100,k
期望结果:
根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
6)路径6(1-2-3-4-5-6-7-8-2…)的测试用例:
score[i]=有效分数,当i<50;
期望结果:
根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
注意事项:
必须注意,一些单独的路径,往往不是完全孤立的,有时他是程式正常的控制流的一部分,这时,这些路径的测试能够是另一条路径测试的一部分。
方法工具:
图像矩阵
o导出控制流图和决定基本测试路径的过程均需要机械化,为了研发辅助基本路径测试的软件工具,称为图像矩阵(graphmatrix)的数据结构很有用。
利用图像矩阵能够实现自动地确定一个基本路径集。
一个图像矩阵是个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。
在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。
假如在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图像矩阵中第i行/第j列有一个非空的元素x。
对每个矩阵项加入连接权值(linkweight),图矩阵就能够用于在测试中评估程式的控制结构,连接权值为控制流提供了另外的信息。
最简单情况下,连接权值是1(存在连接)或0(不存在连接),但是,连接权值能够赋予更有趣的属性:
执行连接(边)的概率。
穿越连接的处理时间。
穿越连接时所需的内存。
穿越连接时所需的资源。
根据上面的方法对例4画出图像矩阵如下:
连接权为“1”表示存在一个连接,在图中假如一行有两个或更多的元素“1”,则这行所代表的结点一定是个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就能够得到确定该图圈复杂度的另一种算法。