知识点:
1.原理
- 是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径的集合,然后根据可执行路径进行测试用例设计的方法。
- 此方法设计出的测试用例需保证被测程序的每个可执行语句至少执行一次。
2.步骤
(画程序流程图)
(1)画程序控制流图
- 圆—— 为流图的结点,表示一个或多个无分支语/源程序语句。
- 箭头——为边或连接,代表控制流。
- 注意:
a.代码行号——》结点序号
b.选择或分支结构的分支汇聚处又一个汇聚结点
c.边和结点圈定的范围叫做区域。在计算区域数时,图形外的区域也应记为一个区域。
d.若判断结构的表达式包含1/n个逻辑运算符(OR、AND、NAND、NOR)连接的复合
e.条件表达式,则需要修改为一系列只有单条件的嵌套判断。
(2)计算程序环形复杂度a.定义:
从程序的环形复杂度可导出程序基本路径集中的独立路径条数。
确保程序中每个可执行语句至少执行一次的测试用例数目的上界。
b.计算方法:
区域数=环形复杂度
环形复杂度V(G)=E-N+2 (E为控制流图中的边数,N为控制流图中的结点数)
环形复杂度V(G)=P+1 (P为数据流图中的判定结点数)
(3)导出测试用例:根据环形复杂度和程序结构来设计测试用例数据输入和预期结果。
(4)准备测试用例:确保基本路径集中的每一条路径的执行。
3.补充知识点--测试用例
(1)定义:
是为发现软件中存在的问题而编写的一组包含测试输入、执行条件以及预期结果的文档,用来判断软件程序是否工作正确,软件产品是否满足需求。它是有效发现软件缺陷的最小测试执行单元。
(2)8个基本项内容:
测试用例编号、测试项目、用例标题、重要级别、预置条件、输入数据、操作步骤和预期输出。不同公司的测试用例所包含的内容不尽相同。
例题1:
//被测程序 double sumNumber(int m, int n) 1 { 2 int i=0; 3 double sum=1; 4 for(i=1;i<=n;i++) 5 { 6 if(i>100 || sum>200) 7 { break; } 8 else 9 { 10 if(m>200) 11 { m=m+1; } 12 else 13 { sum=sum*i+m; } 14 } 15 } 16 return sum;}
1、绘制程序控制流图:
2、计算环路复杂度(用三种方法计算):
(1)环路复杂度=区域数目
如图所示,5个区域
(2)环路复杂度=E-N+2
11个结点,14条边,V(G)=14-11+2=5
(3)环路复杂度=p+1
四个判定结点,V(G)=4+1=5
3、导出基本(独立)路径集合
路径1: 1->4->6.1->6.2->10->11->14->4->6.1->7->15->16
路径2: 1->4->6.1->6.2->10->13->14->4->6.1->7->15->16
路径3: 1->4->6.1->6.2->7->15->16
路径4: 1->4->6.1->7->15->16
路径5: 1->4->15->16
4、设计测试用例
用例编号
条件
输入
预期输出
实际输出
Case_1
**
** ** ** Case_2
**
** ** ** Case_3
**
** ** ** Case_4
**
** ** ** Case_5 ** ** ** **
例题2:
实验代码如下:
1. 画程序控制流图
2.将程序的流程图转换为控制流图
3.计算程序环形复杂度
环形复杂度有 3 种计算方法 (1)控制流图中的区域数等于环形复杂度
如上图所示,结点4、7、结束形成一个区域;
结点9、10、12、结束形成一个区域;
结点8、9、12、14、结束形成一个区域;
最后一个大区域由结点4、7、14、结束形成。
共有4个区域。
(2)环形复杂度 V(G)=E-N+2, E为控制流图中的边数,N为控制流图中的结点数.
九个结点,十一条边
V(G)=11-9+2=4
(3)环形复杂度 V(G)=P+1, P为数据流图中的判定结点数
判断结点为“出现条件判断”(出现分支)的结点,分别为结点4、8、9。
共有三个判定结点。
V(G)=3+1
4. 导出测试用例
根据环形复杂度的计算可得出基本路径法的 例子的 4 条独立路径 路径1 1→4→7→结束语句 路径2 1→4→8→9→11→结束语句 路径3 1→4→8→9→10→结束语句 路径4 1→4→8→13→结束语句
5. 准备测试用例根据基本路径法的例子中的判断结点给出的条件,选择合适的数据来确保上述 4 条路径均得到执行。
测试用例 输入数据 预期结果 用例1 a=2\b=5\c=3 输出“不能构成三角形!” 用例2 a=6\b=6\c=3 输出“等腰三角形” 用例3 a=6\b=6\c=6 输出“等边三角形” 用例4 a=3\b=4\c=5 输出“普通三角形”