先决条件–基础路径测试
在上一篇文章中,我们已经看到了使用基本路径测试为程序设计测试用例所涉及的步骤。现在,让我们按照相同的步骤解决一个示例。
问题:考虑给定的程序,该程序检查数字是否为质数。对于以下程序:
- 绘制控制流程图
- 使用所有方法计算环复杂度
- 列出所有独立路径
- 从独立路径设计测试用例
int main()
{
int n, index;
cout << "Enter a number: " << endl;
cin >> n;
index = 2;
while (index <= n - 1) {
if (n % index == 0) {
cout << "It is not a prime number" << endl;
break;
}
index++;
}
if (index == n)
cout << "It is a prime number" << endl;
} // end main
解决方案 :
1.绘制控制流程图–
- 步骤1:
声明变量后,开始为语句编号(如果该语句中未初始化任何变量)。但是,如果变量已在同一行中初始化并声明,则编号应从该行本身开始。对于给定的程序,这是完成编号的方法:
int main() { int n, index; 1 cout << "Enter a number: " <> n; 3 index = 2; 4 while (index <= n - 1) 5 { 6 if (n % index == 0) 7 { 8 cout << "It is not a prime number" << endl; 9 break; 10 } 11 index++; 12 } 13 if (index == n) 14 cout << "It is a prime number" << endl; 15 } // end main
- 第2步:
将顺序语句放入一个节点中。例如,语句1、2和3都是顺序语句,因此应合并为一个节点。对于其他陈述,我们将遵循此处讨论的符号。笔记 –
为简单起见,请在节点上使用字母编号。获得的图形如下:
2.计算环复杂度:
- 方法1:
V(G) = e - n + 2*p
在上面的控制流程图中,
where, e = 10, n = 8 and p = 1 Therefore, Cyclomatic Complexity V(G) = 10 - 8 + 2 * 1 = 4
- 方法2:
V(G) = d + p
在上面的控制流程图中,
where, d = 3 (Node B, C and F) and p = 1 Therefore, Cyclomatic Complexity V(G) = 3 + 1 = 4
- 方法3:
V(G) = Number of Regions
在上面的控制流程图中,有4个区域,如下所示:
Therefore, there are 4 regions: R1, R2, R3 and R4 Cyclomatic Complexity V(G) = 1 + 1 + 1 + 1 = 4
重要的是要注意,这三种方法对于圈复杂度V(G)都给出相同的值。
3.独立途径:
由于该图的圈复杂度V(G)为4,因此有4条独立的路径。
路径1覆盖的边缘(标有红色)是:
Path 1 : A - B - F - G - H
路径1和路径2覆盖的边线如下所示:
Path 2 : A - B - F - H
路径1,路径2和路径3覆盖的边缘为:
Path 3 : A - B - C - E - B - F - G - H
现在仅剩下两个边缘,即边缘CD和边缘DF。因此,路径4必须包括这两个边缘。
Path 4 : A - B - C - D - F - H
这些路径中的每一个都引入了至少一个以前未遍历过的新边缘。
笔记 –
独立路径不一定是唯一的。
4.测试用例:
要导出测试用例,我们必须使用之前获得的独立路径。要设计测试用例,请向程序提供输入,以便执行每个独立的路径。
对于给定的程序,将获得以下测试用例:
Test case ID | Input Number | Output | Independent Path covered |
---|---|---|---|
1 | 1 | No output | A-B-F-H |
2 | 2 | It is a prime number | A-B-F-G-H |
3 | 3 | It is a prime number | A-B-C-E-B-F-G-H |
4 | 4 | It is not a prime number | A-B-C-D-F-H |