软件分析技术全面解析
1. 控制流模型构建
在软件开发和分析中,控制流模型的构建是一个重要的进步。控制流会因为条件语句和控制流跳转而改变。基本块是一系列语句的集合,只要其中一条语句被执行,那么该块内的所有语句都会被执行。基本块通过控制流语句、过程调用和无条件语句相互连接,通常以有向图的形式呈现,还有一种相关形式是展示调用结构的调用图。
当控制流图构建完成后,我们可以进行以下活动:
- 路径计数 :通常路径数量是无限的,因为图中目前没有变量信息,循环可能没有终止条件。
- 路径长度计算 :可以用不同的单位来衡量,如代码行数、基本块数量。
- 路径生成 :通常起始节点和每个终止节点是最受关注的。可能是最短或最长路径,以初始化开始或终止结束的路径,从特定点向前或向后的路径。
控制流模型的图论性质让我们可以衡量程序中的路径数量。例如,McCabe 的圈复杂度度量直接测量程序源代码中线性独立路径的数量。结构化程序的圈复杂度可以用有向图 G 来描述,图中包含程序的基本块,如果控制可以从一个基本块传递到另一个基本块,则它们之间有一条边。程序的圈复杂度定义为:
[V (G) = e - n + 2]
其中:
- (e) 是图的边数
- (n) 是图的节点数
假设每个出口点都连接回入口点,此时图被描述为强连通图。(V (G)) 计算图中存在的线性独立循环的数量,即那些自身不包含其他循环的循环,因此 (V (G)) 衡量的是平面有向图的大小。由于每个出口点都循环回到入口点,每个出口点至少有一个这样的
超级会员免费看
订阅专栏 解锁全文
16万+

被折叠的 条评论
为什么被折叠?



