[发明专利]一种基于AST的软件版本演化对比分析方法有效
申请号: | 201710258269.3 | 申请日: | 2017-04-19 |
公开(公告)号: | CN107203468B | 公开(公告)日: | 2020-09-25 |
发明(设计)人: | 吴艳霞;刘志江;李晓松;孙彬;卢文祥 | 申请(专利权)人: | 哈尔滨工程大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/71 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 150001 黑龙江省哈尔滨市南岗区*** | 国省代码: | 黑龙江;23 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 ast 软件 版本 演化 对比 分析 方法 | ||
1.一种基于AST的软件版本演化对比分析方法,其特征是:
步骤一:通过Unix的Diff命令对两个软件版本源码进行比对分析,根据分析结果文件Patch获取代码行的增加、删除、改变的情况,将变化的源码分为增加的源码块、删除的源码块和改变的源码块三种源码块;
步骤二:通过语法分析器获取两个软件版本源码的AST信息,针对第一步分析出的三种源码块,分析获取每一种源码块的每一行代码对应的AST信息;
步骤三:通过分析步骤二获取的AST信息取得语法结点信息组合成一个组合信息,使用该组合信息标识步骤一所述三种源码块的每一行,将标识一样的相邻代码行组合成模块;所述的组合信息的获取,是使用标签系统标识,它是类、函数、结构体、枚举类和共用体模块的一个唯一标识,使用多个标识组合成一个标识代码行的组合信息,标签系统设计的方法是:
a)模块的关键字是模块的名字加上相应的属性信息字符;
b)模块的标识是使用多个约定好的字值对组合而成的,每两个字值对之间都使用一个“@”字符来分隔;
c)模块的层级标识之间使用“#”来分隔;
d)全局变量,预编译处理和普通代码行的关键字为stmSource,值为tempty;
步骤四:通过以步骤三组成的模块为单位对比分析两个源码块的标识信息,根据模块演化情况进行分类分析,使用预处理、二次处理方法处理各种演化情况,并将演化信息存入数据库中,并转换成HTML代码;所述的使用预处理、二次处理方法处理各种演化情况是一个递归过程,即每一次处理都需要预处理,所述预处理是一次正常对不同版本的同名源码文件所有变化进行分析并将分析的结果进行存储,如果分析到Diff分析有误,就进入二次处理,如果二次处理也再遇到Diff分析错误,然后再进行预处理、二次处理,直到分析正确。
2.根据权利要求1所述的基于AST的软件版本演化对比分析方法,其特征是步骤二中所述的分析获取每一种源码块的每一行代码对应的AST信息具体包括:
1)使用广度优先的搜索算法,根据行号逐个匹配ANTLR生成的抽象语法树结点;
2)如果行号在结点的所属的范围内,逐个匹配此结点的子结点,直到找到完全匹配的行号结点,否则不进行匹配;
3)使用语法分析器获取当前行的语法元素以及上层语法元素,直到当前分析的源码文件的顶层类或者函数、结构体、枚举类和共用体。
3.根据权利要求2所述的基于AST的软件版本演化对比分析方法,其特征是步骤三中所述的组合成模块,是根据标签系统对Diff划分的源码块,进一步细分模块,具体划分模块的步骤如下:
1)针对Diff分析出的变化的源码块,根据行号获取每一行代码的标签信息;
2)比对相邻行代码的标签信息,根据比对情况分为两种情况,一种是完整模块,此模块的开始行必须和它之前一行的标签不一样,并且模块中间的每一行代码的标签是一样的,另外此模块的结束行必须和它之后的一行的标签也不一样;否则就另外一种,即不是一个完整模块;
3)根据分析出的两种情况,填充模块信息数据结构,所述信息数据结构包括模块的开始行、结束行、模块的类型、模块的标签信息。
4.根据权利要求1所述的基于AST的软件版本演化对比分析方法,其特征是步骤四中所述的根据模块演化情况进行分类分析具体包括:进行类、函数信息的深入匹配分析,将两个不同版本的对应信息和信息的固定格式进行对比,如果两者都存在,而且有所改变,就是改变演化;如果旧版本没有,存在增加演化;如果新版本没有,存在删除演化。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于哈尔滨工程大学,未经哈尔滨工程大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710258269.3/1.html,转载请声明来源钻瓜专利网。