Lea*_*ath 3 c testing unit-testing control-flow-graph
int main() {
int i, grade = 0;
printf (" Enter points: \n");
scanf ("%d", &i);
if (i >= 50 && i <= 60) grade = 5;
else if (i > 50 && i <= 60) grade = 6;
else if (i > 60 && i <= 70) grade = 7;
else if (i > 70 && i <= 80) grade = 8;
else if (i > 80 && i <= 90) grade = 9;
else if (i > 90 && i <= 100) grade = 10;
char sign = ' ';
if (grade) {
int p = i % 10;
if (grade != 5) {
if (p >= 1 && p <= 3)
sign = '-';
else if (grade != 10 && (p >= 8 || p == 0))
sign = '+';
}
printf (" The grade is %d%c. \n", grade, sign);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何从此代码中绘制控制流图?如果有人能展示这个过程,我将不胜感激.我能够从一个非常简单的案例中得出CFG,但我不能这样做.此外,我需要确定多条件标准的基本路径和测试.这不是一个家庭作业问题,我只是试着理解课程材料.谢谢.
这是维基百科中CFG的定义,我知道您已经知道了,但是为了完整起见,我将其放在此处
计算机科学中的控制流图(CFG)是使用图形表示法表示程序执行期间可能会遍历的所有路径的表示。
参考:https : //en.wikipedia.org/wiki/Control_flow_graph
以下是路径的定义
路径:CFG(静态)上的节点序列,包括入口节点和出口节点;路径段:沿路径的节点的子序列
参考:http : //web.cs.iastate.edu/~weile/cs513x/4.ControlFlowAnalysis.pdf
因此,绘制一个的原因是确定程序所采用的所有可能路径,这可能有助于我们在不实际运行程序的情况下确定测试覆盖率之类的内容(静态分析)。
以下是绘制CFG时可以遵循的简单规则
if/else if,switch)loops将具有多个输出边缘。这是一个备忘单,可以更好地解释它
现在让我们将程序中的每条语句映射到一个用于表示CFG节点的数字
int main() {
1. int i, grade = 0;
2. printf (" Enter points: \n");
3. scanf ("%d", &i);
4. if (i >= 50 && i <= 60)
5. grade = 5;
6. else if (i > 50 && i <= 60)
7. grade = 6;
8. else if (i > 60 && i <= 70)
9. grade = 7;
10. else if (i > 70 && i <= 80)
11. grade = 8;
12. else if (i > 80 && i <= 90)
13. grade = 9;
14. else if (i > 90 && i <= 100)
15. grade = 10;
16. char sign = ' ';
17. if (grade) {
18. int p = i % 10;
19. if (grade != 5) {
20. if (p >= 1 && p <= 3)
21. sign = '-';
22. else if (grade != 10 && (p >= 8 || p == 0))
23. sign = '+';
}
24. printf (" The grade is %d%c. \n", grade, sign);
}
25. return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是按照上面备忘单图表中的说明创建的输出。注意,之前的节点16和24充当了许多条件节点的加入节点。
信用:我已经使用draw.io创建了上面发布的图像。
注意:绘制CFG的秘诀是对待每个独立于程序的语句,绘制它,然后将其入口和出口链接到图的其余部分。
以下是我遵循的一些初始步骤



依此类推,我们一直在检查备忘单中的适用节点,并单独创建它们,然后将其链接到先前的节点。
| 归档时间: |
|
| 查看次数: |
8684 次 |
| 最近记录: |