● 摘要
相似代码(雷同代码、副本代码、剽窃代码)指一份代码或代码中的片段是由另一份代码通过少量的常规变换手段得到的。本质上是一种简单的代码复用机制。由于这种复用机制是非正式和不可控的,会带来一系列的危害。现今,软件的发展达到了一个空前的规模。复杂如大型软件系统,简单如程序设计课程编程作业,其中的抄袭、雷同现象时有发生。人工检测相似性的方法耗时费力,而且代码规模和检测者的经验对检测结果有很大的影响。代码相似性自动检测技术应运而生,它致力于自动地检测代码之间的相似性,给出相似值协助检测者进行分析。 本文重点研究了几种算法来自动地检测代码集合中的相似现象,尽可能地消除抄袭手段对于源代码的影响,给出集合中两两代码之间的相似值,帮助检测人员进行相似、抄袭的判定。本文首先介绍了代码相似性检测技术的研究意义和发展历程,阐述了本领域研究过程中的概念模型,深入分析了已有的几类代码相似性检测技术,并且总结了这几大技术流派各自的优缺点,同时探讨了克隆检测技术、代码天然相似等一些相关研究,然后归纳了目前研究中的问题并展望本领域研究的发展趋势。随后,本文主要研究了中间代码的转化格式问题,提出了四种不同的检测方法,分别是基于词法树、基于BP神经网络、基于抽象语法树和基于串切片的检测方法。其流程均是将源代码预处理和归一化成中间代码的形式,从中提取反映代码固有属性特征的比较单元,然后使用算法或评估公式确定比较单元之间的相似性,实验证明了所提方法的有效性。最后,基于本文的研究方法,实现了一个代码相似性检测工具BUAA_AntiPlagiarism,并实现了该工具与Eclipse开发环境的集成。此工具不仅具有基本的相似性检测功能,还包括聚类、相似片段定位等功能。此外,本文还比较和分析了所研究的方法和国外的JPlag工具对同一份数据样本的相似代码检测结果。