基于扩展调用图的软件系统结点重要度评价方法

文档序号:6549263阅读:148来源:国知局
基于扩展调用图的软件系统结点重要度评价方法
【专利摘要】一种基于扩展调用图的软件系统结点重要度评价方法,涉及软件工程领域,所述方法适用于软件系统,可以给出整个软件系统内函数和数据结点的重要度指标,并按照重要度指标进行排序,从而迅速找到软件系统中的关键结点。方法的主要步骤如下:编译源代码得到目标文件;从目标文件出发,构建软件系统所有本地代码的扩展调用图;对扩展调用图进行分析,利用结点排序算法计算扩展调用图中每个结点的重要度指标,该指标即表明结点在软件系统中的重要度。本发明具有应用范围广、准确度高、评价合理、自动化程度高、使用方便等特点。
【专利说明】基于扩展调用图的软件系统结点重要度评价方法
【技术领域】
[0001]本发明涉及软件工程领域,特别涉及一种软件系统结点重要度的评价方法。
【背景技术】
[0002]当前,随着信息产业革命的持续推进,计算机软件系统的规模和复杂度不断增大。一些重大的软件系统,比如大型游戏,办公软件,编译器或操作系统,其代码量可达几千万行,需要大量的人力和时间来开发和维护这些复杂的软件系统。
[0003]在软件工程领域,当务之急是研究新的方法和工具,以使得软件开发更为快捷高效。重要的方法便是将复杂的软件系统拆分成较小的,相互独立而又相互关联的模块。如何划分模块是一个需要仔细研究的问题。目前在软件工程领域已定义了各种粒度的模块划分:子程序(subroutine),函数(method),类(class),源文件(source file),库(library),包(package)等。
[0004]以软件模块为结点,以模块之间的相互关系作为边,可以建立网络,这种网络抽象了软件系统的拓扑结构。大量研究表明,这样的网络具有复杂网络的诸多属性,例如,无标度(无尺度)特性。无标度网络的特点是网络中的大部分结点只和很少结点连接,同时存在着少量的结点与非常多的结点相连,它们的影响力辐射整个网络,这些结点通常被称为关键结点。对于随机故障无标度网络具有超强的承受能力,但面对蓄意协同性攻击则会非常脆弱。
[0005]在软件系统中,关键结点以及处于关键路径上的结点,对于整个系统的信息传递和整个系统的性能通常有着至关重要的影响。因而,有效的找到软件系统中的重要结点,并对其进行重点开发和防护,是十分有意义的。这就需要对软件系统中的结点进行重要度评价。
[0006]目前用来评估复杂网络结点重要度的指标有很多,比较著名的有度数,介数,紧密度(接近度)等,下面将对其一一介绍。
[0007]度数(degree)是评价复杂网络结点重要度的最简单直接的指标,一个结点k的度数dk是指与该结点相连的边数,在有向图中,度又分为出度和入度,以结点k为源结点的边数为出度,以之为目的结点的边数为入度。结点的度数直观地体现了结点与其他结点的连接关系,一定程度上代表了该结点的重要度。因而,将网络中的结点按照度数进行排序,可以发掘重要结点。但是,度数指标的局限性在于只能反映局部的结点连接关系,比如某结点度数很大,但其相邻结点都不重要,那么该结点也不一定重要,反之,若其度数很小,但是其相邻结点都很重要,那么该结点可能很重要。
[0008]介数(betweenness)是指网络中所有结点对的最短路径中经过该结点的数量比例。它的基本假设是,最短路径通常是信息流通的关键路径,因而处于关键路径上的结点的重要度就比较高。经过计算和排序,介数指标一定程度上可以反映结点的重要程度,可以有效的发掘出网络中某些流量很大的重要结点。但是介数的缺点是时间复杂度特别大,对于一个结点规模为N的网络,其时间复杂度达到0(N3);另外,由于最短路径不通过边缘结点,所以网络中所有边缘结点的介数值都为零,这显然与现实情况存在差距。
[0009]紧密度(接近度closeness)是指网络结点到其他所有结点的距离之和的倒数。结点的紧密度越大,其居于网络中心位置的可能性越大。它的基本假设是,处于网络中心的结点在信息传递方面有较高的效率,因而它们的重要度较高。由于紧密度根据结点的中心化程度评价结点重要度,比较依赖网络的拓扑结构,因此对于集中式网络,能比较准确的找到重要结点,但是对于其他非集中式网络并不合适。
[0010]以上所述的复杂网络结点重要度评价方法,均有特定的使用场景以及局限性。对于由软件模块构成的复杂网络,并不直接适用。
[0011]首先,传统的建模方式并不能对复杂软件系统进行准确建模。大量工具比如doxygen、codeviz或graphviz都是从源码层面分析软件系统以构建复杂网络,面对特殊的编程语言特性时存在局限性,比如动态绑定、函数指针以及随之而来的虚函数等问题,源码分析并不能准确得知目标对象,这就造成建模误差。本发明的软件系统扩展调用图解决了这个问题,从目标代码中提取信息,并经过系统分析,可以准确匹配每个符号所对应的函数或数据对象实体。
[0012]其次,上述的几种评价方法不能充分反映网络的全局拓扑结构以及链接价值(相邻结点重要度)对结点重要度的影响。本发明的步骤(3)则是基于链接的价值对整个网络的结点进行迭代计算。每一个结点的重要度既受到链接数量的影响,又受到链接价值的影响。一个结点的重要度由所有链向它的结点的重要度来决定。那么,入链多的结点会有较高的重要度,同时,入链少但是源结点重要度较高的结点也会有较高的重要度。
[0013]最后,与人际关系网络,万维网络,生态网络等相比,软件系统网络的特点是:软件系统是一个抽象系统,更难以准确建模;软件系统的运行从入口结点开始执行,一般有专门的结束结点,存在着明确的开始和结束标志;因此本发明将初始值仅赋予入口结点,表明软件系统的运行能且只能从入口结点开始,在步骤3的计算中,对入口结点的Rank进行额外处理,将出度为零的结点的Rank平均分配给入口结点,表明软件系统在结束执行后,又要回到入口结点才能进行下一次执行。
[0014]针对这些特点,本发明给出基于扩展调用图的软件系统结点重要度评价方法,从软件系统编译后的目标文件中读取信息,基于这些信息构建软件系统的扩展调用图,在函数的粒度上为软件系统进行精准建模,然后依据结点排序算法为系统所有结点计算重要度指标,最后将结果排序,得出软件系统重要结点序列。本发明使用自动的方法进行软件系统分析,不影响系统的源代码,分析过程不需人工干预,能够准确的为软件系统建模并评价结点的重要度,具有重要的实际意义和应用价值。

【发明内容】

[0015]本发明的目的在于提供一种基于扩展调用图的软件系统结点重要度评价方法。
[0016]一种基于扩展调用图的软件系统结点重要度评价方法,其特征在于,是在计算机中依次按以下步骤实现的:
[0017]步骤(I):编译软件系统的源代码,生成可重定位的目标文件;
[0018]步骤(1.1):获得软件源代码,在编译配置文件中增加编译选项使编译器把每个函数、每个数据对象编译到单独的段中,所述数据对象既包括源代码中定义的全局和静态变量,也至少包括编译器生成的虚函数表,所述函数和数据对象统称为“实体”;
[0019]步骤(1.2)编译所述软件源代码生成可重定位的目标文件;
[0020]步骤⑵:按以下步骤构造有向的所述软件系统的扩展调用图:
[0021]步骤(2.1):对步骤⑴得到的所述目标文件,读取以下信息:
[0022]所述目标文件中所有的内含所述实体的段的名称集合SS,
[0023]所述目标文件中定义的所有符号中包含的全局符号及其名称GS,并以所述全局符号名——段名关联表的形式存储,
[0024]头和尾都属于同一个所述目标文件的有向边形成的集合AF,
[0025]头属于所述的一个目标文件,尾为暂未被解析的符号的有向边,所述有向边中每一个元素表示为(U,sym),其中u属于所属目标文件中所有包含着所述实体的段的集合,sym为一个所述有向边外部符号的名,表示被实体u引用,但所述外部符号sym是一个不在同一个所述目标文件中定义的实体;
[0026]步骤(2.2),根据步骤(2.1)中所得到的全部信息,合并为一个软件系统全局的有向图,从而得到所述软件系统的扩展调用图的V和E,其中:
[0027]V为所有所述目标文件中所有所述实体的段的名称集合SS的并集,是一个结点集,其中,每一个结点V的名称用一个由目标文件名和段名组成的二元组表示,
[0028]E为有向边集E:E = El U E2,其中:
[0029]El为所有所述目标文件的AF的并集,代表头和尾都属于同一个目标文件的所有有向边的集合,
[0030]E2为头和尾属于不同的目标文件的所有有向边形成的集合,按以下方法得到:
[0031]令E2=0,遍历每一个目标文件中,头属于相同目标文件,但尾为暂未解析的全局符号的有向边的集合AU,对有向边中每一个元素(u, sym),查找所有所述目标文件的所有外部符号的名称以及所述全局符号所在段的名称的GS集合,得到所有头和尾不在同一目标文件中的所有名称为sym的全局符号的所述实体集合S[sym],把目标文件中的一个结点u和结点V共同组成的所有二元组(u, v) I V e S [sym]加入所述集合E2,
[0032]再把El与E2两个集合取并集,得到所述有向边集合E,其中,每一个元素是一对结点(U,V),对应于所述软件系统扩展调用图中一条从结点U到结点V的有向边,当且仅当结点U的重定位数据中有相对结点V的重定位记录时,在所述软件系统扩展调用图中才存在一条目标文件之间从结点U指向含有段的名称为结点V的有向边,所述两个目标文件允许是相同的,也允许是不同的;
[0033]步骤(2.3),按以下步骤得到入口结点集R:
[0034]步骤(2.3.1),令 R=0,
[0035]步骤(2.3.2),把与程序启动代码对应的所述实体作为一个结点加入所述入口结点集R,
[0036]步骤(2.3.3),把通过动态绑定使用的所述实体作为一个结点加入所述入口结点集R,
[0037]步骤(2.4),把从步骤(2.1)?步骤(2.3)得到的V、E、R表示为一个所述软件系统的扩展调用图G= (V, E, R);
[0038]步骤(3),按如下结点排序算法分析步骤(2)给出的所述软件系统扩展调用图G,计算所述软件系统中每个结点的重要度,步骤如下:
[0039]定义:NR为入口结点集R中入口结点的数量;
[0040]L(V)为以结点V为源结点的边数,称为结点V的出度;L(u)为以结点u为源结点的边数,称为结点u的出度
[0041 ]集合 Leaf = {v | L(v) = 0,且 v e V},或者 Leaf = {u | L (u) = 0,且 u e V},表示所有出度为O的结点的集合;
[0042]当用结点U表示所处的结点,且结点u为结点V的前驱结点的条件是存在一条源结点为U,目的结点为V的边;
[0043]Bv为结点V的所有前驱结点u的集合;
[0044]Rank(v)为结点V的重要度,Rank(V)为一个在O~I之间的实数;
[0045]ε为容错因子,设Rankt和Rankt+1为相邻的两次迭代时计算得出的Rank值,迭代计算终止计算的条件为:
[0046]
【权利要求】
1.一种基于扩展调用图的软件系统结点重要度评价方法,其特征在于,是在计算机中依次按以下步骤实现的: 步骤(1):编译软件系统的源代码,生成可重定位的目标文件; 步骤(1.1):获得软件源代码,在编译配置文件中增加编译选项使编译器把每个函数、每个数据对象编译到单独的段中,所述数据对象既包括源代码中定义的全局和静态变量,也至少包括编译器生成的虚函数表,所述函数和数据对象统称为“实体”; 步骤(1.2)编译所述软件源代码生成可重定位的目标文件; 步骤(2):按以下步骤构造有向的所述软件系统的扩展调用图: 步骤(2.1):对步骤(1)得到的所述目标文件,读取以下信息: 所述目标文件中所有的内含所述实体的段的名称集合SS, 所述目标文件中定义的所有符号中包含的全局符号及其名称GS,并以所述全局符号名——段名关联表的形式存储, 头和尾都属于同一个所述目标文件的有向边形成的集合AF, 头属于所述的一个目标文件,尾为暂未被解析的符号的有向边,所述有向边中每一个元素表示为(u, sym),其中u属于所属目标文件中所有包含着所述实体的段的集合,sym为一个所述有向边外部符号的名,表示被实体u引用,但所述外部符号sym是一个不在同一个所述目标文件中定义的 实体; 步骤(2.2),根据步骤(2.1)中所得到的全部信息,合并为一个软件系统全局的有向图,从而得到所述软件系统的扩展调用图的V和E,其中: V为所有所述目标文件中所有所述实体的段的名称集合SS的并集,是一个结点集,其中,每一个结点V的名称用一个由目标文件名和段名组成的二元组表示, E为有向边集E:E = El U E2,其中: El为所有所述目标文件的AF的并集,代表头和尾都属于同一个目标文件的所有有向边的集合, E2为头和尾属于不同的目标文件的所有有向边形成的集合,按以下方法得到: 令E2=0,遍历每一个目标文件中,头属于相同目标文件,但尾为暂未解析的全局符号的有向边的集合AU,对有向边中每一个元素(u,sym),查找所有所述目标文件的所有外部符号的名称以及所述全局符号所在段的名称的GS集合,得到所有头和尾不在同一目标文件中的所有名称为sym的全局符号的所述实体集合S[sym],把目标文件中的一个结点u和结点V共同组成的所有二元组(U,V) V e S [sym]加入所述集合E2, 再把El与E2两个集合取并集,得到所述有向边集合E,其中,每一个元素是一对结点(U,V),对应于所述软件系统扩展调用图中一条从结点u到结点V的有向边,当且仅当结点u的重定位数据中有相对结点V的重定位记录时,在所述软件系统扩展调用图中才存在一条目标文件之间从结点u指向含有段的名称为结点V的有向边,所述两个目标文件允许是相同的,也允许是不同的; 步骤(2.3),按以下步骤得到入口结点集R: 步骤(2.3.1),令11=0, 步骤(2.3.2),把与程序启动代码对应的所述实体作为一个结点加入所述入口结点集R, 步骤(2.3.3),把通过动态绑定使用的所述实体作为一个结点加入所述入口结点集R,步骤(2.4),把从步骤(2.1)~步骤(2.3)得到的V、E、R表示为一个所述软件系统的扩展调用图G = (V, E, R); 步骤(3),按如下结点排序算法分析步骤(2)给出的所述软件系统扩展调用图G,计算所述软件系统中每个结点的重要度,步骤如下: 定义:NR为入口结点集R中入口结点的数量; L(v)为以结点V为源结点的边数,称为结点V的出度;L(u)为以结点u为源结点的边数,称为结点u的出度
集合 Leaf = {v I L (V) = O,且 v e V},或者 Leaf = {u | L (u) = O,且 u e V},表示所有出度为O的结点的集合; 当用结点u表示所处的结点,且结点u为结点V的前驱结点的条件是存在一条源结点为U,目的结点为V的边; Bv为结点V的所有前驱结点u的集合; Rank(v)为结点v的重要度,Rank(v)为一个在O~I之间的实数;ε为容错因子,设Rankt和Rankt+1为相邻的两次迭代时计算得出的Rank值,迭代计算终止计算的条件为:
【文档编号】G06F9/44GK104035773SQ201410258628
【公开日】2014年9月10日 申请日期:2014年6月11日 优先权日:2014年6月11日
【发明者】董渊, 骆欢, 王生原 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1