基本概念
使用路径来覆盖程序中的各种语句执行情况
程序图(CFG)
节点为程序的语句(可能是一条也有可能语句的一部分),边表示控制流,意思就是能紧跟节点后执行。
If-else:
基本概念
使用路径来覆盖程序中的各种语句执行情况
程序图(CFG)
节点为程序的语句(可能是一条也有可能语句的一部分),边表示控制流,意思就是能紧跟节点后执行。
If-else:
While:
Do-while:
For:
圈复杂度计算:e-n+2
DD-路径图
DD路径是程序图中的一条链,这个链内部没有分支。
DD路径图是将DD路径作为节点,边是DD路径的控制流的图,实际上是对程序图的压缩
基路径测试
- 获取程序图
- 程序图转化DD路径图
- 计算圈复杂度,使用e-n+2或者region(图外也是一个区域),圈复杂度就是独立路径的个数,但不唯一。
- 根据基路径集合给出测试用例
- 翻转法:选定一个最短的基路径,从头开始翻转每个节点
习题
1. void SelectSort( datalist & list ) {
2. for (int i=0; i<list.n-1; i++){
3. int k=i;
4. for (int j=i+1; j<list.n; j++){
5. if (list.V[j].getKey() < list.V[k].getKey())
6. k=j;
7. }
8. if (k!=i)
9. Swap(list.V[i], list.V[k]);
10. }
11. }
请完成:
根据已编号的程序画出相应的程序图;
根据程序图给出相应的DD-路径图;
计算DD-路径图的复杂度;
用翻转法给出全部的基路径。
程序图:
DD路径图
圈复杂度:13 – 10 + 2 = 5
基路径:
- A,B,J
- A,B,C,G,H,I,BJ
- A,B,C,D,F,E,C,G,H,I,B,J
- A,B,C,G,I,B,J
- A,B,C,D,E,G,H,I,B,J