● 摘要
克隆代码(重复代码)通常是指软件系统中存在的相同或相似的代码片段,本质上是一种最简单的代码复用机制, 主要来源于程序员对程序源代码的拷贝粘贴。几乎所有的软件系统都需要通过持续的改进和维护来扩充功能和修改错误,而克隆代码会导致此类软件维护活动非常困难。鉴于克隆代码的巨大危害,近年来流行的软件重构技术把克隆代码视为重构的首要目标。由于克隆代码在大的软件系统中普遍存在,克隆代码自动检测技术应运而生,它致力于自动检测软件系统中的克隆现象并协助开发者重构代码、消除克隆。本文重点研究如何使用一定的算法来自动搜索和检测大规模软件系统中的重复代码(包括完全重复及近似重复),从重构的角度评估检测到的重复代码的价值并给出重构建议,帮助开发人员重构软件,消除重复代码,提高软件质量。本文首先总结和阐述了本领域相关的概念模型,深入研究了已有的自动检测克隆代码的不同思路并归纳总结了几大技术流派各自的优缺点,探讨了基于克隆检测技术的软件重构与再工程,软件维护改进,方面挖掘等相关应用。然后,本文提出并实现了以基于文本的检测为主进行快速检测,以词法语法信息为辅进行检测结果分类和排序的克隆代码自动检测算法。其检测流程为先进行源代码预处理和归一化,以语句为基本比较单位,使用倒排表和文本匹配快速确定语句和语句之间是否存在克隆关系,然后使用比较矩阵遍历算法发现克隆代码对,基于并查集算法将克隆对聚合成克隆类,并以源代码词法、语法分析信息,一系列评价指标对检测结果进行分类和排序。最后,本文实现了一个实用的克隆代码检测工具CloneFinder,实现了该工具与Eclipse开发环境的集成。此外,本文比较和分析了CloneFinder和一个国外的商用工具Simian对一些知名软件的克隆代码检测结果。