软件学报

北大核心,INSPEC,JST,Pж(AJ),EI

国内刊号:11-2560/TP

国际刊号:1000-9825

软件学报杂志2025年第11期:最长公共子序列嵌入支持下的代码相似性检测

发布日期:

作者:弓媛君,黄建军,游伟,石文昌,梁彬,边攀,张健

单位:弓媛君,中国人民大学 信息学院, 北京 10087211,黄建军,中国人民大学 信息学院, 北京 10087202,游伟,中国人民大学 信息学院, 北京 10087203,石文昌,中国人民大学 信息学院, 北京 10087204,梁彬,中国人民大学 信息学院, 北京 10087205,边攀,华为技术有限公司, 北京 10008506,张健,计算机科学国家重点实验室(中国科学院 软件研究所), 北京 10019007

关键词:最长公共子序列(LCS);代码相似性检测;代码嵌入;缺陷检测;克隆检测

基金:国家自然科学基金(62272465, 62441206, 62002361, 62272464); CCF-华为胡杨林基金(CCF-HuaweiSE202310)

最长公共子序列(longest common subsequence, LCS)是一种衡量代码相似度的可行指标. 然而, 经典LCS算法的时间复杂度较高, 难以应对大型数据集, 并且, 由于代码文本序列中的词(token)本质为一种基于离散表示的编码, 直接使用LCS算法无法有效识别文本不同但语义相似的代码片段中的关键语义. 针对这两方面的不足, 提出一种面向LCS的嵌入方法, 将代码间的LCS计算转换为代码低维稠密嵌入向量间的数值运算, 并可以利用近似最近邻算法进一步加速其计算. 为此, 设计了一个可嵌入的基于LCS的距离度量方法, 实验证明这种代码度量在提取函数关键语义的表现上优于对比嵌入工具使用的基于文本的距离或基于树的距离. 同时, 为了在嵌入过程中有重点地保留代码的关键语义, 构建了两种损失函数和相应的训练集, 识别文本上不同但语义上相似的代码元素, 使模型在检测复杂代码克隆时有更好的表现. 实验证明了该方法拥有很强的可扩展性, 且其对复杂克隆的检测能力也保持在很高水平. 将该技术应用于相似缺陷的识别, 上报了23个未知缺陷, 这些缺陷已被开发人员在实际项目中确认, 其中有些复杂缺陷是难以被基于文本的LCS算法检出的.

来源:2025年第11期

《软件学报》期刊编辑部

查看软件学报杂志2025年第11期

联系我们

  • 地址:北京8718信箱
  • 电话:010-62562563
  • E-mail:jos (a) iscas. ac. cn

咨询工作人员