论文部分内容阅读
克隆代码是指软件中相同或相似的源代码段,其在软件开发与维护中具有重要的影响。近十年来,克隆代码的检测已成为软件维护中的一项重要研究内容。学者们也相继提出了许多克隆检测方法与技术,也实现了一些优秀的检测工具。然而,随着软件规模不断增大,现有克隆检测技术在时空效率上仍然不高。本文基于后缀数组这一简单而高效的数据结构,结合Type-1和Type-2函数克隆的句法特征,以重点开展具有低时空复杂度的克隆检测技术的设计研究。首先,根据函数克隆的相似性定义,设计相应的词法分析程序以消除源代码表面上的差异,识别并标记其中的函数或方法,进而转换成标准化的Token串。其次,采用前缀倍增算法构造Token串的后缀数组。然后,根据比较单元为函数这一特征,改进现有的计算最长公共前缀算法,以构造出公共函数前缀数组。接着,设计重复函数子串的查找算法,进而检测出Token串中所有的重复函数子串。最后,结合词法分析阶段的位置信息,以克隆群的形式过滤并反馈软件中的函数克隆。基于上述研究成果,本文设计并实现了一款与程序设计语言无关的克隆检测工具FCD。本文也利用FCD检测了24款C语言的开源软件,从多个维度深入地分析了这些系统的克隆特点。通过大量的实验结果验证了FCD具有很低的时空复杂度,能快速地地检测大规模软件系统,同时保证了较为理想的误报率与漏报率。