● 摘要
在软件开发过程中,拷贝代码片段直接复制或简单修改后应用到新的环境中的行为非常普遍。这种被重用的代码片段和被复制的代码片段被称为克隆代码。很多研究表明存在克隆代码的软件系统比没有克隆代码的软件系统更难维护。另外,随着软件应用领域的日益拓展,由代码剽窃行为生成的克隆代码带来的盗版侵权现象日益严重。鉴于克隆代码的巨大危害,程序代码克隆检测技术应运而生,它致力于自动检测软件系统中的克隆现象并协助开发者进行重构,消除克隆代码。本文重点研究如何使用一定的算法来自动检测大规模软件系统中的克隆代码,提高软件质量,保护软件知识产权。本文首先总结和阐述了程序代码克隆检测领域相关的概念模型,深入研究了已有的不同类型的克隆代码检测技术并归纳总结了几大技术流派的特点。然后,提出了一种基于抽象语法树(AST)和后缀树发现程序中克隆代码,并依据程序语法结构信息对克隆代码进行切分合并的克隆代码检测算法。其检测流程为首先将字节码反编译为源代码,对源代码进行语法分析生成源代码的抽象语法树。然后遍历抽象语法树获得包含语法树节点信息的比较单元序列,通过构建此序列的后缀树来发现克隆代码,最后基于二叉线段树和并查集算法对克隆代码进行过滤聚合。另外,本文还提出一种基于程序五种特征向量对程序进行相似性分析的用于代码剽窃检测的算法。本文实现了一个实用的适应源代码和字节码文件的程序代码克隆检测工具CPDetector,实现了该工具与Eclipse开发环境的集成。此外,本文还比较和分析了CPDetector和两款国外的商用工具对一些知名软件进行克隆代码检测获得的结果,并针对CPDetector的代码剽窃检测功能进行了有效性和适应性实验。最后对研究工作做出总结并给出了进一步的工作展望。