[发明专利]一种基于CPG+图的隐式依赖模式分析方法在审
申请号: | 202210647102.7 | 申请日: | 2022-06-09 |
公开(公告)号: | CN114879974A | 公开(公告)日: | 2022-08-09 |
发明(设计)人: | 晋武侠;周瑞彪;刘烃;范铭;刘杨;钟定洪 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 王艾华 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 cpg 依赖 模式 分析 方法 | ||
本发明公开了一种基于CPG+图的隐式依赖模式分析方法,本发明是条件性的获取程序依赖图,从而降低了生成代码的图结构中间表示形式的复杂度,并且由于添加了隐式依赖信息,从而可以从图中挖掘隐式依赖模式。通过对源代码进行解析和分析,生成抽象语法树,控制流图和程序依赖图,联合构建CPG+图,从而降低了生成代码的图结构中间表示形式的复杂度。可以快速且有效的对项目文件进行分析,并从中挖掘具体的隐式依赖模式,解决了目前隐式依赖模式仍然未知的问题,并且可以快速的从项目中获取具体的隐式依赖模式及数量。
技术领域
本发明属于程序分析领域,特别涉及一种基于CPG+图的隐式依赖模式分析方法。
背景技术
软件实体间的依赖是大部分软件架构分析和架构分析工具研究的基石,包括架构复原、架构问题或反模式检测,缺陷预测和变动影响分析等。然而许多语言因其自身特性导致语法依赖关系在源代码中无法显现,例如动态语言Python、JavaScript和Ruby,由于没有显示的类型引用,使得在对源代码进行静态的语法分析时,某些依赖关系是不可见的,与能够直接被标识的显示依赖相反。像这种由于动态类型引起的不可见的语法依赖称为隐式依赖。
现存架构分析工具通常没有将隐式依赖考虑在内,忽略了隐式依赖对架构分析的影响,然而隐式依赖对架构的影响又很大。有研究表明,隐式依赖关系对架构的影响高于显示依赖,且考虑隐式依赖还能帮助识别以前不可识别的架构反模式实例以及能够检测带有架构连接的严重问题文件。通常,涉及隐式依赖的文件会比涉及显示依赖关系的文件多32%的维护工作。
但是由于隐式依赖关系的“不可见”性,使得找到它们、理解它们和改变它们变得更加困难。事实上,文件级的隐式依赖在所有文件级依赖的中占比超过25%,从而使得我们无法忽视它们。虽然已有工作进行了隐式依赖的抽取方法、对软件结构带来的影响等相关研究,但是代码隐式依赖模式仍然未知,隐式依赖模式又有着怎样的实际意义也依然未知,而且隐式依赖模式天然是一个图,是一种高维数据,因此寄希望于通过图的方式去检测,以及识别隐式依赖。
发明内容
为了解决上述问题,本发明提供了一种基于CPG+图的隐式依赖模式分析方法,在代码属性图(Code Property Graph,CPG)的基础上提出的更加侧重于流程控制及隐式依赖的新型属性图,称为基于隐式依赖的代码属性图(Code Property Graph Plus,CPG+图)。通过对源代码进行解析和分析,生成抽象语法树(Abstract Syntax Tree,AST),控制流图(Control Flow Graph,CFG)和程序依赖图(Program Dependency Graph,PDG),联合构建CPG+图,相比于原始的代码属性图CPG图,条件性的获取程序依赖图PDG,从而降低了生成代码的图结构中间表示形式的复杂度。
为了实现上述目的,本发明采用的技术方案是:
一种基于CPG+图的隐式依赖模式分析方法,包括如下步骤:
S1:通过ENRE获取对象的依赖关系;
S2:获取对象的抽象语法树并转化为需要的格式;
S3:预处理以便后续对图的操作;
S4:获取代码中方法的控制流图,获取节点顺序;
S5:若方法中含有隐式依赖,获得其隐式依赖发生节点的数据流;
S6:合并抽象语法树、控制流图以及基于隐式依赖的数据流图;
S7:对隐式依赖模式处理,使用子图匹配算法进行挖掘分析隐式依赖模式。
本发明进一步的改进在于:步骤S1中,采用ENRE工具分析对象的隐式依赖模式并输出,作为信息输入到程序中。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210647102.7/2.html,转载请声明来源钻瓜专利网。