中文

源代码注释:在代码克隆检测领域中被忽视的部分

软件工程 2020-06-26 v1

摘要

复用代码会在代码仓库中产生重复或近似重复的克隆代码。当前的代码克隆检测技术(如程序依赖图)依赖代码结构及其依赖关系来检测克隆。这些技术代价高昂,消耗大量算力、时间与内存。在实践中,程序员常利用代码注释来理解和复用代码,因为注释承载重要的领域知识。但当前的代码检测技术忽略代码注释,主要由于自然语言的歧义性。信息检索技术的最新进展可能具备利用代码注释进行克隆检测的潜力。我们通过实证比较仅用注释与仅用源代码(不含注释)检测克隆的准确率来研究这一点,所用数据为包含 315 个类和 27K 行代码的 JHotDraw 包。为在文件级检测克隆,我们使用主题建模技术 Latent Dirichlet Allocation 分析代码注释,并使用 GRAPLE(基于程序依赖图)分析代码。我们的结果显示 Latent Dirichlet Allocation 的召回率为 94.86、精确率为 84.21,而 GRAPLE 的召回率为 28.7、精确率为 55.39。我们发现 Latent Dirichlet Allocation 在程序缺乏高质量注释时产生假阳性。但该局限可通过混合方法解决:在文件级利用代码注释缩减克隆集,再在方法级使用基于程序依赖图的技术检测精确克隆。我们对 Java 与 Python 包(Java Swing 和 PyGUI)的进一步分析发现召回率为 74.86% 且精确率为 84.21%。我们的发现呼吁重新审视当前克隆检测技术中关于使用代码注释的假设。

关键词

引用

@article{arxiv.2006.14505,
  title  = {Source Code Comments: Overlooked in the Realm of Code Clone Detection},
  author = {Sandeep Kaur Kuttal and Akash Ghosh},
  journal= {arXiv preprint arXiv:2006.14505},
  year   = {2020}
}