CN104035773B - 基于扩展调用图的软件系统结点重要度评价方法 - Google Patents
基于扩展调用图的软件系统结点重要度评价方法 Download PDFInfo
- Publication number
- CN104035773B CN104035773B CN201410258628.1A CN201410258628A CN104035773B CN 104035773 B CN104035773 B CN 104035773B CN 201410258628 A CN201410258628 A CN 201410258628A CN 104035773 B CN104035773 B CN 104035773B
- Authority
- CN
- China
- Prior art keywords
- node
- rank
- file
- importance
- file destination
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Abstract
一种基于扩展调用图的软件系统结点重要度评价方法,涉及软件工程领域,所述方法适用于软件系统,可以给出整个软件系统内函数和数据结点的重要度指标,并按照重要度指标进行排序,从而迅速找到软件系统中的关键结点。方法的主要步骤如下:编译源代码得到目标文件;从目标文件出发,构建软件系统所有本地代码的扩展调用图;对扩展调用图进行分析,利用结点排序算法计算扩展调用图中每个结点的重要度指标,该指标即表明结点在软件系统中的重要度。本发明具有应用范围广、准确度高、评价合理、自动化程度高、使用方便等特点。
Description
技术领域
本发明涉及软件工程领域,特别涉及一种软件系统结点重要度的评价方法。
背景技术
当前,随着信息产业革命的持续推进,计算机软件系统的规模和复杂度不断增大。一些重大的软件系统,比如大型游戏,办公软件,编译器或操作系统,其代码量可达几千万行,需要大量的人力和时间来开发和维护这些复杂的软件系统。
在软件工程领域,当务之急是研究新的方法和工具,以使得软件开发更为快捷高效。重要的方法便是将复杂的软件系统拆分成较小的,相互独立而又相互关联的模块。如何划分模块是一个需要仔细研究的问题。目前在软件工程领域已定义了各种粒度的模块划分:子程序(subroutine),函数(method),类(class),源文件(source file),库(library),包(package)等。
以软件模块为结点,以模块之间的相互关系作为边,可以建立网络,这种网络抽象了软件系统的拓扑结构。大量研究表明,这样的网络具有复杂网络的诸多属性,例如,无标度(无尺度)特性。无标度网络的特点是网络中的大部分结点只和很少结点连接,同时存在着少量的结点与非常多的结点相连,它们的影响力辐射整个网络,这些结点通常被称为关键结点。对于随机故障无标度网络具有超强的承受能力,但面对蓄意协同性攻击则会非常脆弱。
在软件系统中,关键结点以及处于关键路径上的结点,对于整个系统的信息传递和整个系统的性能通常有着至关重要的影响。因而,有效的找到软件系统中的重要结点,并对其进行重点开发和防护,是十分有意义的。这就需要对软件系统中的结点进行重要度评价。
目前用来评估复杂网络结点重要度的指标有很多,比较著名的有度数,介数,紧密度(接近度)等,下面将对其一一介绍。
度数(degree)是评价复杂网络结点重要度的最简单直接的指标,一个结点k的度数dk是指与该结点相连的边数,在有向图中,度又分为出度和入度,以结点k为源结点的边数为出度,以之为目的结点的边数为入度。结点的度数直观地体现了结点与其他结点的连接关系,一定程度上代表了该结点的重要度。因而,将网络中的结点按照度数进行排序,可以发掘重要结点。但是,度数指标的局限性在于只能反映局部的结点连接关系,比如某结点度数很大,但其相邻结点都不重要,那么该结点也不一定重要,反之,若其度数很小,但是其相邻结点都很重要,那么该结点可能很重要。
介数(betweenness)是指网络中所有结点对的最短路径中经过该结点的数量比例。它的基本假设是,最短路径通常是信息流通的关键路径,因而处于关键路径上的结点的重要度就比较高。经过计算和排序,介数指标一定程度上可以反映结点的重要程度,可以有效的发掘出网络中某些流量很大的重要结点。但是介数的缺点是时间复杂度特别大,对于一个结点规模为N的网络,其时间复杂度达到O(N3);另外,由于最短路径不通过边缘结点,所以网络中所有边缘结点的介数值都为零,这显然与现实情况存在差距。
紧密度(接近度closeness)是指网络结点到其他所有结点的距离之和的倒数。结点的紧密度越大,其居于网络中心位置的可能性越大。它的基本假设是,处于网络中心的结点在信息传递方面有较高的效率,因而它们的重要度较高。由于紧密度根据结点的中心化程度评价结点重要度,比较依赖网络的拓扑结构,因此对于集中式网络,能比较准确的找到重要结点,但是对于其他非集中式网络并不合适。
以上所述的复杂网络结点重要度评价方法,均有特定的使用场景以及局限性。对于由软件模块构成的复杂网络,并不直接适用。
首先,传统的建模方式并不能对复杂软件系统进行准确建模。大量工具比如doxygen、codeviz或graphviz都是从源码层面分析软件系统以构建复杂网络,面对特殊的编程语言特性时存在局限性,比如动态绑定、函数指针以及随之而来的虚函数等问题,源码分析并不能准确得知目标对象,这就造成建模误差。本发明的软件系统扩展调用图解决了这个问题,从目标代码中提取信息,并经过系统分析,可以准确匹配每个符号所对应的函数或数据对象实体。
其次,上述的几种评价方法不能充分反映网络的全局拓扑结构以及链接价值(相邻结点重要度)对结点重要度的影响。本发明的步骤(3)则是基于链接的价值对整个网络的结点进行迭代计算。每一个结点的重要度既受到链接数量的影响,又受到链接价值的影响。一个结点的重要度由所有链向它的结点的重要度来决定。那么,入链多的结点会有较高的重要度,同时,入链少但是源结点重要度较高的结点也会有较高的重要度。
最后,与人际关系网络,万维网络,生态网络等相比,软件系统网络的特点是:软件系统是一个抽象系统,更难以准确建模;软件系统的运行从入口结点开始执行,一般有专门的结束结点,存在着明确的开始和结束标志;因此本发明将初始值仅赋予入口结点,表明软件系统的运行能且只能从入口结点开始,在步骤3的计算中,对入口结点的Rank进行额外处理,将出度为零的结点的Rank平均分配给入口结点,表明软件系统在结束执行后,又要回到入口结点才能进行下一次执行。
针对这些特点,本发明给出基于扩展调用图的软件系统结点重要度评价方法,从软件系统编译后的目标文件中读取信息,基于这些信息构建软件系统的扩展调用图,在函数的粒度上为软件系统进行精准建模,然后依据结点排序算法为系统所有结点计算重要度指标,最后将结果排序,得出软件系统重要结点序列。本发明使用自动的方法进行软件系统分析,不影响系统的源代码,分析过程不需人工干预,能够准确的为软件系统建模并评价结点的重要度,具有重要的实际意义和应用价值。
发明内容
本发明的目的在于提供一种基于扩展调用图的软件系统结点重要度评价方法。
一种基于扩展调用图的软件系统结点重要度评价方法,其特征在于,是在计算机中依次按以下步骤实现的:
步骤(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=E1∪E2,其中:
E1为所有所述目标文件的AF的并集,代表头和尾都属于同一个目标文件的所有有向边的集合,
E2为头和尾属于不同的目标文件的所有有向边形成的集合,按以下方法得到:
令遍历每一个目标文件中,头属于相同目标文件,但尾为暂未解析的全局符号的有向边的集合AU,对有向边中每一个元素(u,sym),查找所有所述目标文件的所有外部符号的名称以及所述全局符号所在段的名称的GS集合,得到所有头和尾不在同一目标文件中的所有名称为sym的全局符号的所述实体集合S[sym],把目标文件中的一个结点u和结点v共同组成的所有二元组(u,v)|v∈S[sym]加入所述集合E2,
再把E1与E2两个集合取并集,得到所述有向边集合E,其中,每一个元素是一对结点(u,v),对应于所述软件系统扩展调用图中一条从结点u到结点v的有向边,当且仅当结点u的重定位数据中有相对结点v的重定位记录时,在所述软件系统扩展调用图中才存在一条目标文件之间从结点u指向含有段的名称为结点v的有向边,所述两个目标文件允许是相同的,也允许是不同的;
步骤(2.3),按以下步骤得到入口结点集R:
步骤(2.3.1),令
步骤(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|L(v)=0,且v∈V},或者Leaf={u|L(u)=0,且u∈V},表示所有出度为0的结点的集合;
当用结点u表示所处的结点,且结点u为结点v的前驱结点的条件是存在一条源结点为u,目的结点为v的边;
Bv为结点v的所有前驱结点u的集合;
Rank(v)为结点v的重要度,Rank(v)为一个在0~1之间的实数;
ε为容错因子,设Rankt和Rankt+1为相邻的两次迭代时计算得出的Rank值,迭代计算终止计算的条件为:
步骤(3.1),赋予结点集V中的每个结点一个初始Rank值,对入口结点赋值1/NR,非入口结点赋予为0;
步骤(3.2),对于不包括所有所述入口结点在内的结点集中的每个结点v,计算t+1时刻的重要度值:
对于所述入口结点集R中的每个结点r,Rankt+1(r)为所有所述前驱结点u的重要度之和再加上所有所述出度为零的节点的重要度之和,表示为:
步骤(3.3),按下如公式计算重要度误差
步骤(3.4)判断步骤(3.3)得到的重要度误差是否小于容错因子ε,若误差不小于ε,返回步骤(3.2),直到满足误差小于ε,若误差小于ε,则终止计算;
步骤(3.4),排序并输出每个结点的最终Rank值,即结点的重要度。
本发明的优点在于:应用范围广,大多数软件系统都可以使用本发明的方法进行结点重要度评价;准确度高,本发明的方法是基于软件系统扩展调用图的,系统扩展调用图的一个重要特征就是能够对软件系统进行准确建模;评价合理,充分考虑软件系统的生命周期的特点;自动化程度高;使用方便。
附图说明
图1,示出示例程序Stack系统的源代码。
图2,示出示例程序Stack系统的扩展调用图。
图3,示出示例程序Stack的扩展调用图结点重要度计算过程。
图4,示出示例程序Stack的扩展调用图结点重要度最终结果。
图5,示出结点重要度评价方法流程示意图。
具体实施方式
本发明所述方法采取以下步骤进行:
步骤(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=E1∪E2,其中:
E1为所有所述目标文件的AF的并集,代表头和尾都属于同一个目标文件的所有有向边的集合,
E2为头和尾属于不同的目标文件的所有有向边形成的集合,按以下方法得到:
令遍历每一个目标文件中,头属于相同目标文件,但尾为暂未解析的全局符号的有向边的集合AU,对有向边中每一个元素(u,sym),查找所有所述目标文件的所有外部符号的名称以及所述全局符号所在段的名称的GS集合,得到所有头和尾不在同一目标文件中的所有名称为sym的全局符号的所述实体集合S[sym],把目标文件中的一个结点u和结点v共同组成的所有二元组(u,v)|v∈S[sym]加入所述集合E2,
再把E1与E2两个集合取并集,得到所述有向边集合E,其中,每一个元素是一对结点(u,v),对应于所述软件系统扩展调用图中一条从结点u到结点v的有向边,当且仅当结点u的重定位数据中有相对结点v的重定位记录时,在所述软件系统扩展调用图中才存在一条目标文件之间从结点u指向含有段的名称为结点v的有向边,所述两个目标文件允许是相同的,也允许是不同的;
步骤(2.3),按以下步骤得到入口结点集R:
步骤(2.3.1),令
步骤(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|L(v)=0,且v∈V},或者Leaf={u|L(u)=0,且u∈V},表示所有出度为0的结点的集合;
当用结点u表示所处的结点,且结点u为结点v的前驱结点的条件是存在一条源结点为u,目的结点为v的边;
Bv为结点v的所有前驱结点u的集合;
Rank(v)为结点v的重要度,Rank(v)为一个在0~1之间的实数;
ε为容错因子,设Rankt和Rankt+1为相邻的两次迭代时计算得出的Rank值,迭代计算终止计算的条件为:
步骤(3.1),赋予结点集V中的每个结点一个初始Rank值,对入口结点赋值1/NR,非入口结点赋予为0;
步骤(3.2),对于不包括所有所述入口结点在内的结点集中的每个结点v,计算t+1时刻的重要度值:
对于所述入口结点集R中的每个结点r,Rankt+1(r)为所有所述前驱结点u的重要度之和再加上所有所述出度为零的节点的重要度之和,表示为:
步骤(3.3),按下如公式计算重要度误差
步骤(3.4)判断步骤(3.3)得到的重要度误差是否小于容错因子ε,若误差不小于ε,返回步骤(3.2),直到满足误差小于ε,若误差小于ε,则终止计算;
步骤(3.4),排序并输出每个结点的最终Rank值,即结点的重要度。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图,以示例程序List_stack作为实例对本发明的实施方式作进一步地详细描述。
1)准备工作。获取示例程序Stack的源代码。在进行编译和分析前,首先确定未经修改过的系统可以正常编译和运行。
Stack的源代码如图1所示:
示例程序Stack实现了一个较简单的栈的功能。基类Stack中定义了两个虚函数,在派生类List_stack中实现。在主函数main函数中将派生类对象赋予基类指针,利用多态机制调用派生类的成员函数。同时弹出函数List_stack::pop函数调用了c文件print.c中的输出字符函数print_char,实现跨语言编程。
2)添加适当的编译、链接选项。具体操作为:修改相关的编译配置文件Makefile,向预定义变量CFLAGS添加函数单独分段参数“-ffunction-sections”以便使编译器把每个函数编译到单独的段中,添加数据对象单独分段参数“-fdata-sections”以便使编译器将每个数据对象编译到单独的段中,添加选项垃圾回收指令“-Wl,--gc-sections”到链接预定义变量LDFLAGS。
3)运行编译命令make命令,编译所有源代码,完成步骤(1)。
4)从目标文件中读取信息,分析后并建立软件系统扩展调用图,完成步骤(2)。建成之后的系统扩展调用图如图2所示:
其中,深色结点是入口结点集R,包括主函数main和系统默认的入口结点startupcode。
各个节点的说明如下:
1.print_char函数:用于打印一个字符,
2.print_int函数:用于打印一个整数,
3.handler一个全局变量,无类型指针,
4.obj一个全局变量,Stack类型的指针,
5.List_stack::List_stack List_stack类的构造函数,
6.Stack::Stack Stack类的构造函数,
7.vtable of List_stack List_stack类的虚函数表,
8.vtable of Stack Stack类的虚函数表,
9.startup code系统默认的入口结点,
10.f一个函数,对Stack对象进行操作,
11.List_stack::pop List_stack的成员函数,弹出一个元素,
12.List_stack::push List_stack的成员函数,入栈一个元素,
13.main主函数,也是本程序的一个入口结点。
5)使用结点重要度评价算法计算软件系统扩展调用图中的每个结点的重要度指标,并排序输出,完成步骤(3)。
整个计算过程如图3所示,第1列表示迭代次数,第2~14列表示结点1~13在每一次迭代计算之后的重要度指标的值,第15列sum表示当次迭代后所有结点的重要度指标之和,理论上sum值应保持为1,第16列err表示当次迭代后的结点重要度指标与上次迭代的结点重要度指标的二范数,也即各元素重要度之差的平方和再开方,此指标指示迭代计算的收敛性,当两次迭代间收敛到小于0.001时,可停止计算,输出结果。
那么,最终结果展示如图4。
以上实施方式仅用于说明本发明,而非对本发明的限制,相关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
本发明具有如下优点:
1.应用范围广:上文的说明中虽使用Stack作为例子,事实上本发明的用户很广泛,大多数软件系统都可以使用本发明的方法进行结点重要度评价。由于本发明的方法在目标文件的层面上进行操作,因此评价方法不依赖于具体的程序设计语言,在Stack示例程序中中,本地代码由C、C++语言编译而来,在使用其他程序设计语言的系统中本发明也可同样有效使用。
2.准确度高:本发明的方法是基于软件系统扩展调用图的,系统扩展调用图的一个重要特征就是能够对软件系统进行准确建模。传统的软件系统分析建模工具,比如doxygen,codeviz或graphviz,它们大都是从软件源代码层面进行分析,在一些比较复杂的编程语言特性面前有较大的局限性,如在源码层面无法确定目标对象的动态绑定、函数指针,以及随之而来的虚函数。本发明中的软件系统扩展调用图,则是分析软件系统的目标文件,本发明提出的工具可以准确定位每一个符号所对应的实体,因而具有更好的建模能力。
3.评价合理:本发明从传统的复杂网络结点评价算法出发,提出新的结点重要度评价算法,充分考虑了结点本身的属性,比如度的大小,又考虑了全局的连接属性,依据周围结点的重要度来综合评价。同时,针对软件系统存在生命周期的特点,将初始值仅赋予入口结点,表明软件系统的生命周期仅仅从入口结点开始,在步骤3的计算中,对入口结点的Rank进行额外处理,将出度为零的结点的Rank平均分配给入口结点,表明软件系统在结束执行后,又要回到入口结点才能进行下一次执行。因而本方法对软件系统结点重要度的评价更为合理。
4.自动化程度高:根据本发明编写的工具可以无需修改或者只需很少修改就用于不同的系统,对被评价的系统,只需对其构建环境和过程进行很小的改动就可应用本发明的方法,大多数操作都可完全自动完成。
5.使用方便:使用本发明的方法对系统进行评价时,所有修改都在目标代码上进行,无需对源代码作任何修改,可保证不会因为评价而影响系统源代码的可维护性,这对实际的系统开发具有重要意义。
Claims (1)
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=E1∪E2,其中:
E1为所有所述目标文件的AF的并集,代表头和尾都属于同一个目标文件的所有有向边的集合,
E2为头和尾属于不同的目标文件的所有有向边形成的集合,按以下方法得到:
令遍历每一个目标文件中,头属于相同目标文件,但尾为暂未解析的全局符号的有向边的集合AU,对有向边中每一个元素(u,sym),查找所有所述目标文件的所有外部符号的名称以及所述全局符号所在段的名称的GS集合,得到所有头和尾不在同一目标文件中的所有名称为sym的全局符号的所述实体集合S[sym],把目标文件中的一个结点u和结点v共同组成的所有二元组(u,v)|v∈S[sym]加入所述集合E2,
再把E1与E2两个集合取并集,得到所述有向边集合E,其中,每一个元素是一对结点(u,v),对应于所述软件系统扩展调用图中一条从结点u到结点v的有向边,当且仅当结点u的重定位数据中有相对结点v的重定位记录时,在所述软件系统扩展调用图中才存在一条目标文件之间从结点u指向含有段的名称为结点v的有向边,所述两个目标文件允许是相同的,也允许是不同的;
步骤(2.3),按以下步骤得到入口结点集R:
步骤(2.3.1),令
步骤(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|L(v)=0,且v∈V},或者Leaf={u|L(u)=0,且u∈V},表示所有出度为0的结点的集合;
当用结点u表示所处的结点,且结点u为结点v的前驱结点的条件是存在一条源结点为u,目的结点为v的边;
Bv为结点v的所有前驱结点u的集合;
Rank(v)为结点v的重要度,Rank(v)为一个在0~1之间的实数;
ε为容错因子,设Rankt和Rankt+1为相邻的两次迭代时计算得出的Rank值,迭代计算终止计算的条件为:
步骤(3.1),赋予结点集V中的每个结点一个初始Rank值,对入口结点赋值1/NR,非入口结点赋予为0;
步骤(3.2),对于不包括所有所述入口结点在内的结点集中的每个结点v,计算t+1时刻的重要度值:
对于所述入口结点集R中的每个结点r,Rankt+1(r)为所有所述前驱结点u的重要度之和再加上所有所述出度为零的节点的重要度之和,表示为:
步骤(3.3),按下如公式计算重要度误差
步骤(3.4)判断步骤(3.3)得到的重要度误差是否小于容错因子ε,若误差不小于ε,返回步骤(3.2),直到满足误差小于ε,若误差小于ε,则终止计算;
步骤(3.4),排序并输出每个结点的最终Rank值,即结点的重要度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410258628.1A CN104035773B (zh) | 2014-06-11 | 2014-06-11 | 基于扩展调用图的软件系统结点重要度评价方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410258628.1A CN104035773B (zh) | 2014-06-11 | 2014-06-11 | 基于扩展调用图的软件系统结点重要度评价方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104035773A CN104035773A (zh) | 2014-09-10 |
CN104035773B true CN104035773B (zh) | 2017-04-12 |
Family
ID=51466548
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410258628.1A Expired - Fee Related CN104035773B (zh) | 2014-06-11 | 2014-06-11 | 基于扩展调用图的软件系统结点重要度评价方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104035773B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317773B (zh) * | 2014-10-28 | 2017-05-24 | 南京大学 | 一种递归最大执行频度与深度的静态估计方法 |
US9619283B2 (en) * | 2015-07-28 | 2017-04-11 | TCL Research America Inc. | Function-based action sequence derivation for personal assistant system |
CN106951365B (zh) * | 2016-03-01 | 2020-04-03 | 北京航空航天大学 | 一种基于面向对象软件代码的软件复杂网络模型构建方法 |
CN106020950B (zh) * | 2016-05-12 | 2019-08-16 | 中国科学院软件研究所 | 基于复杂网络分析的函数调用图关键节点识别和标识方法 |
CN108874470B (zh) * | 2017-05-11 | 2023-04-07 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及服务器、计算机存储介质 |
CN109828925B (zh) * | 2018-06-25 | 2021-02-09 | 北京航空航天大学 | 一种基于软件网络结构特征的软件可靠性度量方法 |
CN111934937B (zh) * | 2020-09-14 | 2020-12-22 | 中国人民解放军国防科技大学 | 基于重要性迭代的相依网络节点重要度评估方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040028408A (ko) * | 2002-09-30 | 2004-04-03 | 주식회사 케이티 | 신경망을 이용한 변수 중요도 측정방법 |
JP2006146424A (ja) * | 2004-11-17 | 2006-06-08 | Toshiba Corp | ノード重要度計算装置、ノード重要度計算プログラム及びノード重要度計算方法 |
CN102004641A (zh) * | 2010-11-23 | 2011-04-06 | 武汉大学 | 一种基于拓扑势的软件需求用例优先级排序方法 |
CN103034486A (zh) * | 2012-11-28 | 2013-04-10 | 清华大学 | 移动终端操作系统基于全系统扩展调用图的自动优化方法 |
CN103116514A (zh) * | 2013-03-15 | 2013-05-22 | 清华大学 | 基于系统扩展调用图的操作系统自动优化方法和系统 |
CN103227731A (zh) * | 2013-04-23 | 2013-07-31 | 西北工业大学 | 基于改进“结构洞”的复杂网络节点重要性局部计算方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006091971A (ja) * | 2004-09-21 | 2006-04-06 | Hewlett-Packard Development Co Lp | ネットワークデータ表示方法・装置・プログラム |
-
2014
- 2014-06-11 CN CN201410258628.1A patent/CN104035773B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040028408A (ko) * | 2002-09-30 | 2004-04-03 | 주식회사 케이티 | 신경망을 이용한 변수 중요도 측정방법 |
JP2006146424A (ja) * | 2004-11-17 | 2006-06-08 | Toshiba Corp | ノード重要度計算装置、ノード重要度計算プログラム及びノード重要度計算方法 |
CN102004641A (zh) * | 2010-11-23 | 2011-04-06 | 武汉大学 | 一种基于拓扑势的软件需求用例优先级排序方法 |
CN103034486A (zh) * | 2012-11-28 | 2013-04-10 | 清华大学 | 移动终端操作系统基于全系统扩展调用图的自动优化方法 |
CN103116514A (zh) * | 2013-03-15 | 2013-05-22 | 清华大学 | 基于系统扩展调用图的操作系统自动优化方法和系统 |
CN103227731A (zh) * | 2013-04-23 | 2013-07-31 | 西北工业大学 | 基于改进“结构洞”的复杂网络节点重要性局部计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104035773A (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104035773B (zh) | 基于扩展调用图的软件系统结点重要度评价方法 | |
Bouajjani et al. | Abstract regular (tree) model checking | |
Ananieva et al. | Implicit constraints in partial feature models | |
Le Hanh et al. | Selecting an efficient OO integration testing strategy: an experimental comparison of actual strategies | |
CN104699883A (zh) | 采用紧凑多波形表示的电路设计评估 | |
Le et al. | Validating consistency between a feature model and its implementation | |
Khamespanah et al. | An efficient TCTL model checking algorithm and a reduction technique for verification of timed actor models | |
Habel et al. | On context-free graph languages generated by edge replacement | |
Geyer et al. | Efficient mode enumeration of compositional hybrid systems | |
CN104267936A (zh) | 基于树语义的异步动态下推网络可达性分析方法 | |
Scornavacca et al. | Fast algorithm for the reconciliation of gene trees and LGT networks | |
Balbo et al. | First passage time computation in tagged GSPNs with queue places | |
Kerkouche et al. | On the Use of Graph Transformation in the Modeling and Verification of Dynamic Behavior in UML Models. | |
Averbakh et al. | Tree optimization based heuristics and metaheuristics in network construction problems | |
Benedetti et al. | Incremental compilation-to-SAT procedures | |
Cirstea et al. | Production systems and rete algorithm formalisation | |
Doczkal et al. | Completeness and decidability results for CTL in Coq | |
Veras et al. | A topological application of labelled natural deduction | |
Bransen | On the Incremental Evaluation of Higher-Order Attribute Grammars | |
Wang et al. | TAGER: Transition-labeled graph edit distance similarity measure on process models | |
Bera et al. | Modeling hybrid systems with petri nets | |
Pérez Morago | BDD algorithms to perform hard analysis operations on variability models | |
Zhang et al. | Constraint-based automatic symmetry detection | |
Castejon et al. | Multi-agent planning by distributed constraint satisfaction | |
Donins | Formal Analysis of Problem Domain Workflows |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170412 |