设计应用

基于改进WL图核的代码克隆检测方法

作者:班必奂1,2,徐 云2,3
发布日期:2022-09-28
来源:网络安全与数据治理 3期

0 引言

在实际的软件系统开发过程中,开发人员出于提高开发效率或者降低软件错误风险的原因,通常会将其他模块中功能相同或者相近的代码片段通过复制—修改(或不修改)—粘贴的模式引入到当前正在开发的模块中,这些粘贴而来的功能相同或相似的代码片段在学术界通常被称为克隆代码[1]。大量的研究表明,过多的克隆代码会给软件系统带来维护成本提高[2]和Bug蔓延[3]等问题。例如,假设某一段代码中存在Bug并且这段代码被复制粘贴在不同的位置,那么这个Bug将会随着这些克隆代码在整个软件中传播,进而增加了维护的难度。因此,检测出软件系统中的克隆代码并对其进行统一管理是非常有必要的。

随着代码克隆检测技术的不断发展,高级别代码克隆(即Type-3和Type-4克隆)的检测成为当前的研究热点之一。由于高级别克隆代码往往在复制粘贴之后还进行了一些修改,因此也更有可能存在Bug[4]。另外,修改所导致的差异性也使得这一类型的克隆更加难以被检测。

得益于程序依赖图(Program Dependency Graph,PDG)中所包含的大量语法结构信息和语义信息,基于PDG的克隆检测方法在检测高级别克隆上更具优势,能够检测出更多的结构相似但文本差异较大的高级别克隆代码。但在已有的方法中,采用精确图匹配算法的CCSharp[5]、GPLAG[6]等克隆检测方法存在时间性能差和召回率低的缺点,而采用Weisfeiler-Lehman(WL)图核进行近似图匹配计算的CCGraph[7],受限于节点初始标签的单一性和WL图核迭代过程中对近似子结构识别能力的缺失,召回率也相对较低。为此,本文针对WL图核算法在PDG克隆检测应用中存在的缺陷,提出了一种改进思路:首先利用语法分析技术将PDG节点所包含的源代码信息解析为特征向量的形式来作为该节点的初始标签,使其能够保留更多的语义信息;然后通过引入局部敏感哈希技术提升PDG中近似子结构的识别能力,进而提升高级别克隆的召回率。





本文详细内容请下载http://www.chinaaet.com/resource/share/2000004907





作者信息:

班必奂1,2,徐  云2,3

(1.中国科学技术大学 大数据学院,安徽 合肥230026;

2.安徽省高性能计算重点实验室,安徽 合肥230026;

3.中国科学技术大学 计算机科学与技术学院,安徽 合肥230026)


微信图片_20210517164139.jpg

此内容为AET网站原创,未经授权禁止转载。
代码克隆检测 程序依赖图 Weisfeiler-Lehman图核