基于索引和序列匹配的代码克隆检测技术研究

来源 :杭州电子科技大学 | 被引量 : 0次 | 上传用户:cw545400
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
在软件开发过程中,各种拷贝-粘贴-修改的编辑操作非常普遍。这种方式的代码重用往往使得代码基中出现很多重复或者相似的代码片段,也就是所谓的克隆代码。它虽然方便了开发者,但是也带来了一定的资源消耗,增加了软件维护的难度。学术界和工业界早在上世纪90年代就开始对代码克隆进行分析并研究代码克隆的检测方法,并且取得了不错的效果。但是随着软件规模的不断增长,先前的方法便出现了资源使用的瓶颈甚至无法在单机上工作。例如,由于需要把由不同公司或者组织开发的上千万行的软件代码进行相似度的比较,如果不能在一个合适的时间范围内获取代码克隆将使检测方法的有效性大打折扣。本文在论述了传统克隆代码检测方法的基本原理和关键技术的基础上,提出了新的基于索引和改进的字符序列匹配的克隆代码检测方法,并通过实验证实了本文方法在大规模软件代码检测中具有较好的效果。主要工作包括:(1)提出了基于索引的克隆代码检测方法。该方法将代码文本依次规范化为lexeme序列和语句段,利用语句段哈希值查找文本以及结构相似的克隆代码。由于在检测过程中lexeme序列被持久化,避免了重复生成中间序列和再次分段从而大大提高了检测速度。(2)提出了基于改进的Smith-Waterman算法的代码克隆检测方法,即在lexeme序列表示的基础上利用序列匹配算法检测文本或者结构相似的克隆代码。该方法通过调整得分矩阵有效解决了传统Smith-Waterman算法中存在的马赛克问题,同时通过改进回溯过程可获取最佳的局部代码相似序列。(3)本文在四个以Java语言开发的软件代码上进行实验。实验证实,与传统方法相比,将基于索引的方法在不牺牲原有精确率和召回率的基础上提高了代码的检测效率;而将改进前和改进后的Smith-Waterman方法分别用于检测克隆代码,则发现改进后的方法的精确率提高了1%左右、召回率提高了2%左右。
其他文献
随着高等教育改革的不断深入和深化,教育体制的不断发展,我国高校的教学管理也面临着新的挑战。多所高校的合并,各个学校又分多层管理,各个部门所使用的数据库数据结构都不尽
跨语言信息检索(Cross Language Information Retrieval, CLIR)即可用一种提问语言检索出用另一种语言书写的信息的检索方法。跨语言信息检索的研究目的在于减少信息检索中语
耳声发射(Otoacoustic Emission,OAEs)是由内耳中外毛细胞产生,经听骨链、鼓膜传导,释放人外耳道的音频能量。它首次由英国人Kemp在1978年通过放人外耳道的耳机—话筒组合探
命名实体识别是自然语言信息处理的一项基础工作。命名实体识别的研究,在自然语言信息处理的许多应用领域如信息抽取、自动分类、机器翻译、问答系统和信息检索等都具有重大
镰刀菌种类多、分类广,其中有不少是导致多种农林植物病害的病原,它可以引起作物的萎蔫、穗腐、腐烂等病害。许多种镰刀菌危害农作物的种子,在菌体生长发育代谢过程中产生毒
当前,软件业正在面临一些新的课题,如复杂的分布环境、灵活的应用模式、广泛的包容性、软件开发的周期越来越短、软件应用领域的扩张速度越来越快、软件开发成本的压力非常大
在传统的公钥密码体制中,利用CA证书来保证公钥和持有对应私钥的身份之间的联系,实现公钥的认证。这使得传统公钥密码体制中必须花费大量的时间和空间来计算和保存这些证书。
现代计算系统应用对计算机提交可信服务的能力提出了巨大的挑战。容错技术作为保证系统高可信性的主要技术,其直接开发是非常困难的。而采用中间件技术,不仅尽可能多地屏蔽容
随着软件需求的激增,软件规模和复杂度的不断增大,传统的软件开发模式面临着前所未有的挑战,人们开始探索新的软件开发技术来适应软件发展的要求。软件复用是解决这一软件危
我们知道张大千有一件与该图(图1)的构图布局、署款位置(包括内容、字数、段落)几乎是一模一样的《巫峡清秋图》(图2),这让我突然想起家乡的一句对这类现象很形象的“口头禅