[发明专利]一种基于图挖掘的软件函数变更预测系统及方法有效
申请号: | 201611122377.X | 申请日: | 2016-12-08 |
公开(公告)号: | CN106648636B | 公开(公告)日: | 2020-01-03 |
发明(设计)人: | 王雷;王新晨;李涵 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F8/71 | 分类号: | G06F8/71 |
代理公司: | 11251 北京科迪生专利代理有限责任公司 | 代理人: | 杨学明;顾炜 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 挖掘 软件 函数 变更 预测 系统 方法 | ||
1.一种基于图挖掘的软件函数变更预测系统,其特征在于:包括函数调用关系图生成模块、变更函数调用关系图获取模块、图挖掘及变更函数预测模块,其中:
函数调用关系图生成模块:根据需要处理的相应的软件网络,生成相应软件网络的函数调用关系图;
变更函数调用关系图获取模块:对相邻版本的函数源码比较,得到变更函数,在已生成的函数调用关系图中,去掉没有变更的函数,得到每个相邻版本源代码的变更函数调用关系图;
图挖掘及变更函数预测模块:利用得到的变更函数调用关系图,通过图挖掘算法,输入参数,再得到挖掘结果,并输出预测函数;
所述函数调用关系图生成模块实现过程如下:
(1)选择需要处理的相应的软件网络,包括操作系统软件源代码,然后调用外部工具cdepn,对于所有.c文件,生成相应的cdepn文件;
(2)对于生成的cdepn文件,逐行读取文件,当某一行第一个字符为F时,表示该行函数为call函数,之后的开头第一个字符为C的行直到文件尾或者下一个开头第一个字符为F的行为止,包含在里面的函数都被该函数调用,按照此方法则生成相应整个软件网络的函数调用关系图;
所述变更函数调用关系图获取模块实现过程如下:
(1)利用ctags获取每个函数在相邻版本中的被定义位置,函数定义总是以‘{’开始,最终以‘}’结束,利用此原理,从函数开始行开始,利用栈的数据结构,去掉注释语句,每读到‘{’入栈,读到‘}’出栈,直到栈为空,这时候的行为该函数的结束行;按照此方法得到函数被定义的结束行,然后提取各函数在相邻版本的源代码,利用diff命令,比较代码是否发生改变,如果是则函数是变更函数;
(2)得到变更函数后,利用变更函数,对源代码的函数调用关系图进行筛选,去掉没有变更过的函数,剩下的就是变更函数调用关系图;
所述图挖掘及变更函数预测模块实现过程如下:
(1)设定参数,包括最小支持度,以及单次挖掘的相邻版本子图数,即跨度,利用修改过的gspan算法进行挖掘,如下:
1)首先逐条边读取相邻版本子图数的连续版本变更函数子图,对于每条边,记录出现次数,读取完毕后,去掉出现次数低于支持度的边;
2)剩余边具有以下属性:(x,x1,y,y1,e),x是为调用函数的编号,x1是调用函数的权值,y是被调用函数的编号,y1是被调用函数的权值,e是边的编号,该属性中五个元素都是数字,按照从左到右优先级顺序对所有边按照五个属性值从低到高进行排序,得到最小DFS编码,从记录的第一个函数开始,按照最小DFS编码的边的顺序,从小到大进行扩展,不断加入新的边,直到得到完整的频繁变更子图;
(2)利用挖掘出的频繁变更子图,得到频繁变更函数即挖掘结果,并作为预测函数输出。
2.一种基于图挖掘的软件函数变更预测方法,其特征在于实现步骤如下:
第一步,生成函数调用关系图,根据需要处理的相应的软件网络,生成相应软件网络的函数调用关系图;
第二步,获取变更函数,根据已生成的函数调用关系图,去掉图中所有没有发生变更的函数,得到每个相邻版本源代码的变更函数调用关系图;
第三步,图挖掘及变更函数预测,利用得到的变更函数调用关系图,通过图挖掘算法,输入参数,得到挖掘结果,并输出预测函数;
所述第一步,具体如下:
在Linux下配置工具生成cdepn图,并通过脚本处理进而生成函数调用关系图,具体如下:(1)配置Codeviz工具;(2)编写脚本遍历目录为所有.c文件生成cdepn文件;(3)编写代码,利用cdepn文件生成该软件网络的函数调用关系图;
所述第二步,具体过程如下:
步骤2.1、利用ctags对某个.c文件下的函数进行检索,并输出该函数的起始行,编写脚本,递归遍历Linux内核代码下所有.c文件生成相应的cdepn文件;
步骤2.2、函数定义总是以‘{’开始,最终以‘}’结束,利用此原理,从函数开始行开始,利用栈的数据结构,去掉注释语句,每读到‘{’入栈,读到‘}’出栈,直到栈为空,这时候的行为该函数的结束行;
步骤2.3、得到结束行后,利用shell命令,sed读取指定行之间的内容,通过diff命令,比较相邻版本间同名函数,知道该函数是被修改、被增加或者被删除;
步骤2.4、在得到相邻版本间的变更函数后,在之前生成的函数调用关系图中,去掉没有发生变更的函数,得到相邻版本变更函数调用关系图;
所述第三步,具体过程如下:
步骤3.1、设定参数,包括最小支持度及单次挖掘的相邻版本子图数N,即跨度,所述跨度是单次挖掘的相邻版本子图数,采用了跨度为3或5或7或10四个值中的一个作为参数,每次选取N个相邻版本子图作为挖掘数据源;所述最小支持度是指设定最小支持度a,表示选取N个版本时,挖掘出的子图在这N个版本中出现次数S比上N,S/N>=a,采用支持度0.4或0.6或0.8或1中的一个作为候选参数;
步骤3.2、利用编写的gspan算法代码,进行挖掘,得到频繁子图,其中支持度大于设定值的函数即为下个版本的预测结果。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611122377.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:拖把(拧水旋转)
- 下一篇:一种虚拟桌面的创建方法及系统