首页|基于代码克隆检测的重构模式识别

基于代码克隆检测的重构模式识别

张志浩

基于代码克隆检测的重构模式识别

张志浩1
扫码查看

作者信息

  • 1. 齐鲁工业大学
  • 折叠

摘要

代码重构技术是指使用一系列重构手法,改进优化软件的内部结构,降低其修改成本,增加它的可拓展性、可理解性和可维护性,同时保持软件的功能不发生改变,这是一种在结构层次上的代码整理技术。重构模式识别指的是对比变更前原代码和变更后代码以寻找符合某种重构模式的代码段。在代码变更中,往往包含着对老版本代码的bug的修复、功能的添加以及重构的变更代码,这几种种类各异的变更代码的混合增加了阅读其代码理解其内容的难度,若能对变更代码中重构相关的变更代码进行自动识别,则可使重构与其他种类的变更行为相互分离,利于代码的阅读和理解,同时有助于研究人员了解代码变更中的重构行为,增加研究者代码修改经验,获取诸如重构的方式、重构的动机以及重构对代码质量的影响等知识,有利于研究者理解软件演化的历程。 在几种常用的重构模式之中,有一部分在重构的过程中包含搬移代码行这种操作,在重构实践中,重构前后代码行的搬移并不是简单的一字不改的粘贴和复制,在很多情况下需要按照需求对所搬移的代码行进行一定程度的调整,比如调整搬移代码行中的变量名、常量名、花括号、修饰符、标识符、字符大小写、数字、字符串,或者是添加或删除其中的部分代码。由于当前国内外对重构模式识别的研究不是很多,目前还没有有效和准确的识别这种情况下的重构模式的方法,本文针对这一情况,提出了一种基于代码克隆检测的重构模式识别方法:首先用代码克隆检测技术来筛选由基于文本的代码差异性分析工具获取到的两个相邻版本的源文件的代码变更块(hunk)集,由于这些hunk集合涵盖两个源文件的不同之处的所有信息,而所有搬移代码行为都是发生在这些不同之处上的,故使用代码克隆检测方法对它们进行检测就不会遗漏或误判上述的情况,这也是本文算法的意义所在,然后筛选出可能存在重构模式的hunk,再将这些hunk列为候选hunk作为下一步基于文本的语法分析方法或者基于抽象语法树的语法分析方法的输入,精确地判定其中是否存在重构,含有什么种类的重构模式。 本文研究了抽取函数、内联函数这种整体函数层次的代码重构以及抽取类这种类间重构;函数改名、添加参数、移除参数这种函数头层次的代码重构;替换算法这种函数体层次的重构;由于这几种重构行为层次不同、复杂程度不同、结构特点不同,本文分别给出了每种类型的重构模式的基于代码克隆检测的不同算法实现,对于函数改名、添加参数、移除参数这几种较为简单的重构模式,在算法的最后一步对候选hunk集采用基于文本的语法分析方法来判断,对于其他几种较为复杂的重构模式,本文在最后一步采用基于抽象语法树的语法分析方法来判定重构模式。本文在来源于4个开源项目的数据集上进行了实验验证,表明了其具有较高的准确率。

关键词

重构模式识别/代码变更/代码克隆检测

引用本文复制引用

授予学位

硕士

学科专业

计算机应用技术

导师

杨春花/吴晓明

学位年度

2019

学位授予单位

齐鲁工业大学

语种

中文

中图分类号

TP
段落导航相关论文