[发明专利]一种基于语法结构变更分析的软件缺陷溯源方法有效
申请号: | 202010574986.9 | 申请日: | 2020-06-22 |
公开(公告)号: | CN111913874B | 公开(公告)日: | 2021-12-28 |
发明(设计)人: | 刘烃;郑庆华;贺安成;崔笛;马雪;池剑磊 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 王艾华 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 语法 结构 变更 分析 软件 缺陷 溯源 方法 | ||
1.一种基于语法结构变更分析的软件缺陷溯源方法,其特征在于,包括如下步骤:
S1:通过对缺陷修复提交使用语法结构变更分析,解析出缺陷修复提交FixCommit修改的源文件在完成缺陷修复过程中的语法结构变更模块CUSet;
S2:根据修复提交中解析出的源文件语法结构变更模块内容,从中识别出导致缺陷产生的缺陷代码集合BuggyRowSet;
S3:提取修改过缺陷文件的历史提交,使用语法结构变更分析解析缺陷文件的历史提交,得到缺陷文件在被修复之前演化过程中的语法结构变更模块集合FHCUSeti;
S4:解析缺陷文件在被修复之前演化过程中的语法结构变更模块集合FHCUSeti中的插入模块,然后在缺陷文件对应的历史版本中定位插入模块,提取缺陷文件在每次历史提交中插入代码的内容;
S5:通过相似性分析比较缺陷代码和缺陷文件历史提交中插入代码的相似性,如果相似性为1,则缺陷文件历史提交为缺陷潜在引入提交,否则不是缺陷潜在引入提交;
S6:比较历史提交创建时间与缺陷报告时间,如果历史提交创建时间在缺陷报告时间之前,则历史提交是缺陷引入提交,否则不是;
S7:在给定输入下,判断一次缺陷修复提交中是否存在缺陷代码还未找到其对应引入提交,如果存在,则回到S4继续算法,否则,停止算法。
2.根据权利要求1所述基于语法结构变更分析的软件缺陷溯源方法,其特征在于,所述步骤S1中,通过对缺陷修复提交FixCommit使用语法结构变更分析,解析出缺陷修复提交修改的源文件在完成缺陷修复过程中的语法结构变更模块CUSet;步骤S1具体包括:
S101:修改源文件提取;通过解析版本控制系统记录,提取出缺陷修复提交FixCommit中修改的源文件集合FileSet,表示如下:
其中f表示本次提交中修改的源文件;在元组(fip,fic)中,fip表示缺陷修复提交修改之前的源文件内容,fic表示缺陷修复提交修改之后的源文件内容;k表示缺陷修复提交修改源文件的总数;
S102:源文件语法树解析;使用语法解析工具Spoon,将缺陷修复提交FixCommit中修改的源文件集合FileSet解析为抽象语法树形式ASTSet,表示如下:
其中k表示缺陷修复提交中修改源文件的个数;在元组中,表示缺陷修复提交修改之前源文件fi对应的抽象语法树,ASTic表示缺陷修复提交修改之后源文件fi对应的抽象语法树;
S103:语法树映射和编辑动作推导;使用语法树差异分析工具分别在ASTSet中的抽象语法树元组进行映射匹配,在两颗语法树相似节点之间建立映射关系,然后根据建立的映射关系推导出两棵语法树转换需要完成的编辑动作集合EASet,表示如下:
EASet={EA1,EA2,EA3,...,EAn}
其中EAk表示一个编辑动作,表示如下:
EAk={op,(na,linea,typea),(nb,lineb,typeb)}
其中op表示编辑动作类型,包括Add,Delete两种类型,分别表示插入和删除动作;(na,linea,typea)中的na表示抽象语法树中被移除的节点,linea表示被移除节点在源文件中所在的行号,typea表示移除节点的结构类型;(nb,lineb,typeb)中的nb表示抽象语法树中新插入的节点,lineb表示插入节点在源文件中所在的行号,typeb表示插入节点的结构类型;
S104:编辑动作聚簇;为了获取源代码的语法结构变更模块,通过分析编辑动作集合EASet中编辑动作的类型和编辑动作所在语法树节点位置,然后在编辑动作集合上使用聚簇规则,将相同类型的编辑动作聚簇,从而获取缺陷提交中源文件的语法结构变更模块CUSet,使用的聚簇规则有两条,分别如下:
1)如果相同类型的编辑动作作用于源文件同一行代码的语法树节点,则源文件语法变更结构被识别为该代码行对应的语法树根节点的结构类型;
2)如果相同类型的编辑动作作用于源文件中相邻代码行的抽象语法树节点,则源文件语法变更结构被识别为这些代码行对应的语法树根节点的结构类型;
通过对编辑动作集合EASet使用聚簇上述聚簇规则,获取缺陷修复提交中源文件语法结构变更模块CUSet,表示如下:
CUSet={CU1,CU2,...,CUm}
其中CUk表示一个语法结构变更模块;表示如下:
CUk={op,utype,file,bline,eline}
其中op表示当前变更模块的编辑动作类型,有Add和Delete两种类型,分别表示插入和删除动作;utype表示变更模块的结构类型;file表示变更模块所在的源文件;bline表示变更模块在源文件中的起始行;eline表示变更模块在源文件中的结束行,当编辑动作为Add时,bline和eline表示修改后的源代码的位置信息,当编辑动作为Delete时,bline和eline表示修改前的源代码的位置信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010574986.9/1.html,转载请声明来源钻瓜专利网。