一种基于改进GN算法的程序控制流图划分方法与流程

文档序号:16207149发布日期:2018-12-08 07:15阅读:756来源:国知局
一种基于改进GN算法的程序控制流图划分方法与流程

本发明属于软件分析技术领域,具体涉及一种基于改进gn算法的程序控制流图划分方法。

背景技术

程序段划分的本身是为了降低程序分析的复杂度,将较大规模的程序划分为较小的程序段,从而进行后期分析。现实世界中的程序的规模往往非常大,直接分析这样的程序会消耗很大的计算机资源,并且分析效率不高。因此,如果能将一个大规模的程序用合适的方法划分成若干个较小规模的程序段,并对其分别进行分析,然后将分析结果进行合并,得到总体的分析结果,可以有效降低分析过程对计算机软、硬件资源的消耗,提高程序分析的效率。

程序段划分可以采用基于语义分析的方法或基于控制流图的方法。由于获取语义需要根据特定程序制定相应语义规则,很难扩展到语义不同的程序,而通过控制流图则不存在这一问题,因此程序段的划分往往采用分析其控制流图的方法。由于程序的控制流图本质上也是网络图,对其划分即是对特殊网络图的划分。因此,选择较为合适的网络图划分方法,或对现有的网络图划分方法进行改进,成为提升程序控制流图划分效果的关键因素。

接下来将介绍一种用于网络图划分的gn算法,该算法也可以用来划分程序段。

gn算法是一种典型的网络图划分算法,它是在2002年由girvan和newman提出的。gn算法可以高效地对网络图进行划分,并产生相应的划分子图。这里的划分子图简称子图,它是原网络图的一部分,其节点集和边集分别是原网络图中的节点集和边集的子集。gn算法中,将网络图中任意两点间的最短路径上的边赋予边介数值,通过计算每条边的边介数,每次去掉边介数值最高的边,如此迭代从而完成对网络图的划分。gn算法使用边介数betweenness度量边删除的优先级,使用模块度q度量子图的划分结果。接下来将详细说明gn算法的两个重要参数边介数betweenness和模块度q,然后介绍gn算法划分网络图的基本流程。

边介数(betweenness)是一种边的度量指标。对于网络图中的任意一条边,如果是连接两个子图的边,那么该边的边介数较大;如果是子图内部的边,那么该边的边介数较小。具体而言,本发明中的边介数是指网络图中通过该边的最短路径的数量。这里的最短路径是指网络图中两节点间的距离最短的路径。边介数的计算方法如公式1所示。

其中,l表示网络图中的任意一条边,s,t分别表示网络图中的两个不同节点,σst(l)表示经过边l的从节点s到节点t的最短路径数量,σst表示从节点s到节点t的最短路径数量,v表示网络图中所有节点的集合。

模块度q是一种衡量网络图划分优劣的指标。在将一个网络图划分为多个子图后,如果各个子图内的节点具有较高的相似度,不同子图的节点之间具有较低的相似度,那么该网络图就具有较高的模块度,网络图的划分效果较好;反之,模块度则较低,网络图的划分效果也较差。模块度计算方法如公式2所示。

其中,n是网络图中划分子图的总个数,c表示子图的编号,m表示整个网络图中边的数量,lc是子图c内的边的数量,dc是子图c内的所有节点的度数之和,在这里节点的度数是指和该节点相关联的边的数量。

原始的gn算法的流程如下:

(1)计算每一条边的边介数betweenness(计算方法采用公式1);

(2)删除边介数最大的边,并将其加入划分时删除边的集合;

(3)计算当前网络图的模块度q,如果此q值大于最大值bestq,则令bestq等于q,并保存当前的网络图结构为bestg,否则,退回第(1)步;

(4)所有边分割完毕,返回当前的q值和网络图划分的结果。

虽然采用原始的网络图划分方法,包括但不限于gn算法,可以对程序进行划分,但是它们也往往存在着一些缺点,比如会导致划分子图规模的不均衡性和迭代次数过多,而其本质上是由于网络图特点与控制流图的特点不同,从而带来的划分的误差。



技术实现要素:

针对上述不足,本发明采用一种基于改进gn算法的程序控制流图划分方法,将程序划分为多个段,解决了划分子图规模的不均衡性和迭代次数过多的问题。

本发明通过以下技术方案实现:

一种基于改进gn算法的程序控制流图划分方法,首先由程序分析工具获取程序的控制流图;其次,对由节点和有向边构成的控制流图进行处理,为其中的各个节点设置权值;然后采用gn算法结合权值对控制流图进行划分,得到划分后的子图和划分时删除的边的集合。

进一步地,所述控制流图的节点代表程序的基本块;有向边即是跳转信息,表示从一个基本块跳转到另一个基本块;基本块包括了指令的数量,跳转信息包含了源基本块、目标基本块以及跳转类型;节点的权值表示基本块中的指令的数量,用于表示该基本块的大小。

进一步地,采用改进的gn算法对所述控制流图进行划分采用以下方式:

步骤一、比较子图规模的最大值是否小于所设置的阈值,如果超过阈值则进入步骤五,否则进入步骤二,所述子图规模为子图中所有节点的权值之和;

步骤二、计算每一条边的边介数betweenness’;

步骤三、删除边介数最大的边,并将其加入划分时删除的边的集合;

步骤四、计算当前控制流图的模块度q,如果此q值大于最大值bestq,则令bestq等于q,并保存当前的控制流图结构为bestg,否则,退回步骤一;

步骤五、边分割完毕,返回当前的q值和控制流图划分的结果。

所述计算每一条边的边介数betweenness’采用下述公式计算:

其中,l表示控制流图中的任意一条边,s,t分别表示控制流图中的两个不同节点,ω(s)表示节点s的权值,ω(t)表示节点t的权值,σst(l)表示经过节点l的从节点s到节点t的最短路径数量,σst表示从节点s到节点t的最短路径数量,v表示控制流图中所有节点的集合。

本发明的有益效果:

本发明对gn算法进行改进,包括对边介数计算方法和设置阈值以限制子图规模两方面的改进,从而提高划分子图规模的均衡性,同时提高划分的时间效率。具体来说,就是在对边介数进行计算时引入节点权值因素,在计算的过程中更多考虑到子图规模的因素,从而提高控制流图划分的均衡性;同时,原始gn算法未考虑控制流图的语义特性,会对表示节点之间跳转关系的边进行过度删除,这样会使得控制流图划分粒度过细,导致程序段划分失去意义,同时也带来了划分时间过长的问题,因此本发明在分析控制流图特点的基础上,为子图规模设置阈值,限制迭代次数,从而有效提高了gn算法的划分效率。

附图说明

图1为本发明程序控制流图划分的方法流程图。

具体实施方式

如图1所示,本发明是一种基于改进gn算法的程序控制流图划分方法,其中所述的程序控制流图划分是指将规模较大的控制流图划分为一个个小的程序段。

具体包括以下步骤:

第一步,由程序分析工具将程序转换为控制流图;

控制流图(controlflowgraph,cfg)是程序的抽象表现,它用图的形式表示一个程序内所有基本块执行的可能流向。它的节点是程序的基本块,它的边是基本块之间的跳转信息。

本发明首先使用程序分析工具,构造程序的基本控制流图。图中包含了程序的基本块以及各个基本块间的跳转关系。其中,控制流图中的节点是程序的基本块;边即是跳转信息,表示了从一个基本块跳转到另一个基本块。基本块包括了指令的数量,跳转信息则包含了源基本块、目标基本块以及跳转类型。本发明在基本控制流图的基础上,添加节点的权值。节点的权值表示每个基本块中的指令数量,用于表示该基本块的大小。该控制流图将是后续程序段划分方法的输入。

第二步,采用改进的gn算法对程序进行划分,得到划分后的子图和划分时删除的边的集合。

本发明根据程序段划分的特征改进了原始的gn算法,包括改进了边介数betweenness’的计算方法和增加了限制子图规模的阈值。其中对边介数betweenness’的计算方法改进时,引入了节点的权值,使得程序段划分更为均衡;同时根据程序段划分的特性,设置了适当的阈值,使得程序段划分结果更加合理。

1、改进后的边介数计算方法

本发明改进了边介数的计算方法,以解决划分子图规模的不均衡性问题。改进后的边介数计算方法如公式3所示。

其中,l表示控制流图中的任意一条边,s,t分别表示控制流图中的两个不同节点,ω(s)表示节点s的权值,ω(t)表示节点t的权值,σst(l)表示经过节点l的从节点s到节点t的最短路径数量,σst表示从节点s到节点t的最短路径数量,v表示控制流图中所有节点的集合。

2、阈值的设置

设置阈值可以结合控制流图的特点,在合适的时机提前终止划分的进行,从而提高算法的效率。本发明所设置阈值的含义是控制流子图中指令数量的临界值。对于阈值的选取,在具体实施时可以选择一个较小的保守值,也可以根据控制流图的特点选取合适的经验值,判断条件为若最大的子图的子图规模,即子图中的指令数量,小于该值,则终止算法的执行,取此时的最佳状态作为最终的划分结果。这样做的好处是,可以避免后续无意义的划分,减少时间开销,提高算法的效率。

3、改进后的gn算法

改进后的gn算法主要是增加了第(1)条,这一条中添加了对子图规模的阈值判断条件;并修改了第(2)条,这一条中采用改进后边介数betweenness’的计算方式。下面将介绍改进后的gn算法:

(1)比较子图规模的最大值是否小于所设置的阈值。如果超过阈值则进入第(5)步,否则进入第(2)步。

(2)计算每一条边的边介数betweenness’(计算方法采用公式3)。

(3)删除边介数最大的边,并将其加入划分时删除的边的集合。

(4)计算当前控制流图的模块度q,如果此q值大于最大值bestq,则令bestq等于q,并保存此时的控制流图结构为bestg,否则,退回第(1)步;

(5)边分割完毕,返回当前的q值和控制流图划分的结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1