一种基于边不稳定性的软件函数变更预测系统及方法技术方案

技术编号:15540780 阅读:61 留言:0更新日期:2017-06-05 10:29
本发明专利技术为一种基于边不稳定性的软件函数变更预测系统及方法,属于软件工程领域。本发明专利技术基于软件网络函数调用关系图进行计算,首先需要获取整个函数调用关系图,然后对于每个条边计算该条边的不稳定度,通过对相邻版本的函数进行比较获得修改、删除、新增的函数,并得到变更函数子图,去掉变更函数子图中不稳定度小于一定值的边,剩下边连接的函数节点就是预测结果。

Software function change prediction system and method based on edge instability

The invention relates to a software function change prediction system based on edge instability and a method thereof, belonging to the field of software engineering. The invention of software network function call graph based on the calculation, first need to obtain the function call graph, and then for each edge of the edges of the calculation stability, compare function modification and deletion, the new version of the function of the adjacent, and change the function of sub graph, remove the change function graph in stability is less than a certain value, the remaining edge function connection is the prediction results.

【技术实现步骤摘要】
一种基于边不稳定性的软件函数变更预测系统及方法
本专利技术属于软件工程领域,特别涉及一种面向复杂网络基于边不稳定性的软件函数变更预测系统及方法,通过相邻版本变更函数的不稳定度进而预测下一个版本函数的变更情况。
技术介绍
近年来,复杂网络的研究取得了巨大的进步,提出了许多方法和理论。这些理论和研究被用于生物学、物理学等学科,目前在计算机科学领域的应用也越来越广。现代的软件系统无论是从规模还是从结构设计上都发生了巨大的改变,传统的软件工程方法面临着很大挑战。因此,复杂网络的研究方法被引入到软件设计的过程中。由于现代软件函数的变更越来越频繁,软件升级在软件的整个生命周期中不可避免,因此,研究函数的变更传播有其重要的现实意义。除此之外,研究的另一目标是影响软件鲁棒性的相关因素。复杂网络经常伴随着信息、病毒、疾病等的传播,而一个网络的拓扑结构对于变更传播的程度有着显著的影响。在计算机科学领域,大型软件系统中的类图、依赖图、关系图、软件组件图、函数调用图都属于复杂网络。当开发者为了加入一个新功能或者修复一个BUG的时,对软件系统一个部分作出修改后,其他的部分为了适应修改,常常也需要进行更新。量化一个软件网络的传播性有助于节省软件维护产生的开销。在函数调用关系图中,变更传播通常都是单方向的,函数A调用函数B,当B发生修改时,A因为接口需要作出调整因此很可能需要相应作出修改,这叫B传播到A,但当A发生修改时,B一般就不需要作出修改了。关于影响边的变更传播的参数,首先有节点的稳定度,节点的稳定度定义如下:在定义中,和分别代表节点ni的出度和入度。如果Si的值相对较大,那么说明节点的出度相对于入度较小,因此其他节点的改变较难传播到该节点。也就是说该节点较为稳定。从定义可以看出,Si的取值范围是[0,1]。边的不稳定度基于节点的稳定度定义。其具体定义如下所示:Iij=Si-Sj在上面的定义中,Si和Sj分别代表节点i和节点j的节点稳定度。从定义中可以看出,当Iij>0时,节点i的稳定度大于节点j的稳定度,也就是说稳定度大的边调用稳定度小的边。Iij<0时则相反。边的不稳定度的取值范围为[-1,1]。罗伯特·马丁在其论文中提出了稳定性依赖原则(SDP)。论文中指出在软件的设计过程中,一个包应该依赖于比其自身更加稳定的包。节点的稳定度和边的不稳定度可以作为一种衡量节点及边的稳定度的一种度量,通过分析一个节点的稳定度或者边的不稳定度就可以清晰地分析出一个软件在某个区域的设计成功与否。关于变更传播,一条边的边的不稳定度越高,则这条边越不稳定,越可能发生修改,同时,在发生修改的时候,越容易传播到更多的函数。现有的关于函数变更的研究大致基于软件仓库,并没有考虑变更函数的顺序。由于软件仓库的特点,大部分的基于历史数据库的研究都停留在物理层面(系统,目录,文件,行),忽视了本身变更实体(函数、变量)的本身意义。现有的软件仓库分门提供的数据元有差异,不同的研究方法利用不同软件仓库,没有统一的适用标准。
技术实现思路
本专利技术的技术解决问题:利用源代码作为数据源进行研究,避免了不同的数据仓库所引起的问题,具有通用性的特点,且预测结果准确率高于百分之五十。本专利技术技术解决方案:经过大量实验对比发现,边的EI越大,这条边越不稳定,发生修改的可能性更高,修改影响到的函数范围也越大。因此,本专利技术基于边的不稳定度,基于Linux内核源码,设定最小支持度,得到相邻的变更函数,并将子图的边按照边的不稳定度排序,取边的不稳定度大于一定值的边连接的函数节点作为结果输出,即预测的下个版本也会发生修改的函数。本专利技术一种基于边不稳定度的软件函数变更预测系统,包括:函数调用关系图生成模块、变更函数调用关系图获取模块和边的不稳定度生成及函数变更预测模块,其中:函数调用关系图生成模块:根据需要处理相应的软件网络,生成相应软件网络的函数调用关系图;变更函数调用关系图获取模块:对相邻版本的函数源码比较,得到变更函数,在已生成的函数调用关系图中,去掉没有变更的函数,得到每个相邻版本源代码的变更函数调用关系图;边的不稳定度生成及函数变更预测模块:根据已生成的变更函数调用关系图,得到每条边的边的不稳定度,对所有边按照边的不稳定度进行排序,根据输入的阈值,去掉不稳定度低于阈值的边,剩下的边所连接的函数节点作为预测结果进行输出。所述函数调用关系图生成模块实现过程如下:(1)选择需要处理相应的软件网络,包括操作系统软件源代码,然后调用外部工具cdepn,对于所有.c文件,生成相应的cdepn文件;(2)对于生成的.cdepn文件,逐行读取文件,当每一行第一个字符为F时,表示该行函数为call函数,之后的所有开头第一个字符为C的行的直到文件尾或者下一个开头第一个字符为F的行为止,包含在里面的函数都被该函数调用,按照此方法则生成相应整个软件网络的函数调用关系图。所述变更函数调用关系图获取模块实现过程如下:(1)利用ctags获取每个函数在相邻版本中的被定义位置,函数定义总是以‘{’开始,最终以‘}’结束,利用此原理,从函数开始行开始,利用栈的数据结构,去掉注释语句,每读到‘{’入栈,读到‘}’出栈,直到栈为空,这时候的行数为该函数的结束行,按照此方法得到函数被定义的结束行,然后提取各函数在相邻版本的源代码,利用diff命令,比较代码是否发生改变,如果是则是变更函数;(2)得到变更函数后,利用变更函数,对源代码的函数调用关系图进行筛选,去掉没有变更过的函数,剩下的就是变更函数调用关系图。所述边的不稳定度生成及函数变更预测模块实现过程如下:(1)逐行录入变更函数调用关系图,每行分为调用函数(callfunction)和被调用函数(calledfunction),每行录入的时候,调用函数的出度加1,被调用函数入度加1;(2)变更函数调用关系图录入完毕之后,根据公式:计算出函数节点的不稳定度Si,是该节点的入度,是该节点的出度;然后,根据公式Iij=Si-Sj计算出各条边的不稳定度;Iij是节点的不稳定度,Si是调用函数节点的稳定度,Sj是被调用函数节点的稳定度;(3)采用的是快速排序算法,对所有边按照边的不稳定度由高到低排序;(4)输入阈值,所述阈值在(-1,1)之间,去掉边的不稳定度低于所述阈值的边,剩下的边所连接的函数节点作为预测结果进行输出。一种基于边不稳定性的软件函数变更预测方法,实现步骤如下:第一步,生成函数调用关系图,根据需要处理相应的软件网络,生成相应软件网络的函数调用关系图;第二步,获取变更函数,根据已生成的函数调用关系图,去掉图中所有没有发生变更的函数,得到每个相邻版本源代码的变更函数调用关系图;第三步,边的不稳定度生成及函数变更预测:根据已生成的变更函数调用关系图,得到每条边的边的不稳定度,对所有边按照边的不稳定度进行排序,根据输入的阈值,去掉不稳定度低于阈值的边,剩下的边所连接的函数节点作为预测结果进行输出。所述第一步具体如下:在Linux下配置工具生成cdepn图,并通过脚本处理进而生成callpah,具体如下:(1)配置Codeviz工具;(2)编写脚本遍历目录为所有.c文件生成cdepn文件;(3)编写代码,利用cdepn文件生成该网络的函数调用关系图。第本文档来自技高网
...
一种基于边不稳定性的软件函数变更预测系统及方法

【技术保护点】
一种基于边不稳定度的软件函数变更预测系统,其特征在于包括:函数调用关系图生成模块、变更函数调用关系图获取模块和边的不稳定度生成及函数变更预测模块,其中:函数调用关系图生成模块:根据需要处理相应的软件网络,生成相应软件网络的函数调用关系图;变更函数调用关系图获取模块:对相邻版本的函数源码比较,得到变更函数,在已生成的函数调用关系图中,去掉没有变更的函数,得到每个相邻版本源代码的变更函数调用关系图;边的不稳定度生成及函数变更预测模块:根据已生成的变更函数调用关系图,得到每条边的边的不稳定度,对所有边按照边的不稳定度进行排序,根据输入的阈值,去掉不稳定度低于阈值的边,剩下的边所连接的函数节点作为预测结果进行输出。

【技术特征摘要】
1.一种基于边不稳定度的软件函数变更预测系统,其特征在于包括:函数调用关系图生成模块、变更函数调用关系图获取模块和边的不稳定度生成及函数变更预测模块,其中:函数调用关系图生成模块:根据需要处理相应的软件网络,生成相应软件网络的函数调用关系图;变更函数调用关系图获取模块:对相邻版本的函数源码比较,得到变更函数,在已生成的函数调用关系图中,去掉没有变更的函数,得到每个相邻版本源代码的变更函数调用关系图;边的不稳定度生成及函数变更预测模块:根据已生成的变更函数调用关系图,得到每条边的边的不稳定度,对所有边按照边的不稳定度进行排序,根据输入的阈值,去掉不稳定度低于阈值的边,剩下的边所连接的函数节点作为预测结果进行输出。2.根据权利要求1所述的基于边不稳定度的软件函数变更预测系统,其特征在于:所述函数调用关系图生成模块实现过程如下:(1)选择需要处理相应的软件网络,包括操作系统软件源代码,然后调用外部工具cdepn,对于所有.c文件,生成相应的cdepn文件;(2)对于生成的.cdepn文件,逐行读取文件,当每一行第一个字符为F时,表示该行函数为call函数,之后的所有开头第一个字符为C的行的直到文件尾或者下一个开头第一个字符为F的行为止,包含在里面的函数都被该函数调用,按照此方法则生成相应整个软件网络的函数调用关系图。3.根据权利要求1所述的一种基于边不稳定度的软件函数变更预测系统,其特征在于:所述变更函数调用关系图获取模块实现过程如下:(1)利用ctags获取每个函数在相邻版本中的被定义位置,函数定义总是以‘{’开始,最终以‘}’结束,利用此原理,从函数开始行开始,利用栈的数据结构,去掉注释语句,每读到‘{’入栈,读到‘}’出栈,直到栈为空,这时候的行数为该函数的结束行,按照此方法得到函数被定义的结束行,然后提取各函数在相邻版本的源代码,利用diff命令,比较代码是否发生改变,如果是则是变更函数;(2)得到变更函数后,利用变更函数,对源代码的函数调用关系图进行筛选,去掉没有变更过的函数,剩下的就是变更函数调用关系图。4.根据权利要求1所述的一种基于边不稳定性的软件函数变更预测系统,其特征在于:所述边的不稳定度生成及函数变更预测模块实现过程如下:(1)逐行录入变更函数调用关系图,每行分为调用函数(callfunction)和被调用函数(calledfunction),每行录入的时候,调用函数的出度加1,被调用函数入度加1;(2)变更函数调用关系图录入完毕之后,根据公式:计算出函数节点的不稳定度Si,是该节点的入度,是该节点的出度;然后,根据公式Iij=Si-Sj计算出各条边的...

【专利技术属性】
技术研发人员:王雷王新晨李涵
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1