白盒测试概念
白盒测试又叫结构测试,逻辑驱动测试,或基于程序本身的测试。
白盒测试的主要方法
1.控制流测试
- 逻辑覆盖
- 路径测试
2.循环测试
3.数据流测试
控制流测试
1、逻辑覆盖
不同的覆盖方式目的也不同,根据字面理解就可以。
2、路径测试
程序的环路复杂性即McCabe复杂性度量,简单地定义为控制流程图的区域数。
程序环路复杂性又叫圈复杂度。
控制流图是退化的程序流程图,图中每个处理都退化成一个节点,流线变成连接不同节点的有向弧。
控制流图将程序流程图中结构化构件改用一般有向图的形式表示。
圈复杂度:是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目。
独立路径:必须包含一条在定义之前不曾用到的边。(每一条新的路径都包含了一条新边)
计算圈复杂度的三种方法:
- 1、V(G)=e-n+2p;
e是边数,n是节点数,p是连接(通)区域数。当p=1时,V(G)=e-n+2; - 2、V(G)=P+1;
P视图中判定节点的数量(有多个出向量) - 3、区域数量=圈复杂度;
数有几个圈。
比如上图。
e=10;n=7;p=1;P=4(分别是ABCD);圈=5;
所以,V(G)=5;
独立路径:
ABCG
ABEFG
ABCBG???
ADFG
ADEFG
基本路径测试
如果把覆盖的路径数压缩到一定限度内,例如程序中的循环体只执行0次或1次,就成为基本路径测试。
通过分析控制流图的环路复杂性,得出基本路径集合,依据此设计测试用例,保证这些路径至少通过一次。
*基本路径测试步骤:
- 1.导出程序的控制流图;
- 2.计算控制流图的环路复杂度V(G);
- 3.确定只包含独立路径的基本路径集;
- 4.设计测试用例;
实例
public void f (int RecordNum, int Type ){
int x = 0;
int y = 8;
while ( RecordNum > 0) {
if( Type = = 0)
x = y + 2;
else {
if( Type = = 1 )
x = y + 5;
else
x = y + 10;
}
RecordNum - -;
}
}
请用基本路径法测试上述代码。
-
1.画控制流图
-
2.计算V(G)
V(G)=10-8+2=4;
V(G)=(1,2,4)+1=4;
V(G)=数圈=4; -
3、找出基本路径集。
1-8
1-2-3-7-8
1-2-4-5-7-8
1-2-4-6-7-8 -
4、设计测试用例
路径1:RecordNum=0;Type=0;
路径2:RecordNum=1;Type=0;
路径3:RecordNum=1;Type=1;
路径4:RecordNum=1;Type=-1;
有不对的地方欢迎指出,共同进步。 比如关于画控制流图这一块的内容,还是有些模糊。
THE END