国内刊号:11-2560/TP
国际刊号:1000-9825
发布日期:
作者:李玫,高庆,马森,张世琨,胡文蕙,张兴明
单位:李玫,高可信软件技术教育部重点实验室(北京大学), 北京 100871;北京大学 软件工程国家工程研究中心, 北京 100871;北京大学 软件与微电子学院, 北京 10260011,高庆,高可信软件技术教育部重点实验室(北京大学), 北京 100871;北京大学 软件工程国家工程研究中心, 北京 10087102,马森,高可信软件技术教育部重点实验室(北京大学), 北京 100871;北京大学 软件工程国家工程研究中心, 北京 10087103,张世琨,高可信软件技术教育部重点实验室(北京大学), 北京 100871;北京大学 软件工程国家工程研究中心, 北京 10087104,胡文蕙,高可信软件技术教育部重点实验室(北京大学), 北京 100871;北京大学 软件工程国家工程研究中心, 北京 10087105,张兴明,之江实验室, 浙江 杭州 31112106
关键词:代码相似性检测;代码同源分析;大数据;相似哈希;代码指纹生成
基金:2019年工业互联网创新发展工程-工业软件源代码安全检测工具项目;之江实验室“先进工业互联网安全平台”项目(2018FD0ZX01)
代码相似性检测(code similarity detection)是软件工程领域的基本任务之一,其在剽窃检测、许可证违反检测、软件复用分析以及漏洞发现等方向均起着重要作用.随着软件开源化的普及以及开源代码量的高速增长,开源代码在各个领域的应用日益频繁,给传统的代码相似性检测方法带来了新的挑战.现有的一些基于词法、语法、语义的检测方法存在算法较为复杂、对解析工具有依赖性、消耗资源高、可移植性差、候选对比项数量较多等问题,在大规模代码库上有一定的局限性.基于相似哈希(simhash)指纹的代码相似性检测算法将代码降维至1个指纹,能够在数据集规模较大的情况下实现快速相似文件检索,并通过海明距离阈值控制匹配结果的相似度范围.通过实验对现有的基于代码行粒度的相似哈希算法进行验证,发现其在大规模数据集下存在行覆盖问题,即高频行特征对低频行特征的覆盖现象,导致结果精确度较低.受TF-IDF算法思想启发,针对上述问题创新性地提出了分语言行筛选优化方法,通过各种语言的行筛选器对代码文件行序列进行筛选,从而消除高频出现但语义信息包含较少的行对结果的影响.对改进前后方法进行一系列对比实验,结果表明,改进后的方法在海明距离阈值为0~8的情况下都能够实现高精确度的相似文件对检索,当阈值为8时在两个数据集下的精确度较改进前的方法分别提升了98.6%和52.2%.在所建立的130万个开源项目、386 486 112个项目文件的大规模代码库上进行了实验,结果表明所提方法能够快速检测出待测文件的相似文件结果,平均单个文件检测时间为0.43s,并取得了97%以上的检测精度.
来源:2021年第7期
《软件学报》期刊编辑部