基于代码克隆检测的重构模式识别
发布时间:2021-08-26 06:16
代码重构技术是指使用一系列重构手法,改进优化软件的内部结构,降低其修改成本,增加它的可拓展性、可理解性和可维护性,同时保持软件的功能不发生改变,这是一种在结构层次上的代码整理技术。重构模式识别指的是对比变更前原代码和变更后代码以寻找符合某种重构模式的代码段。在代码变更中,往往包含着对老版本代码的bug的修复、功能的添加以及重构的变更代码,这几种种类各异的变更代码的混合增加了阅读其代码理解其内容的难度,若能对变更代码中重构相关的变更代码进行自动识别,则可使重构与其他种类的变更行为相互分离,利于代码的阅读和理解,同时有助于研究人员了解代码变更中的重构行为,增加研究者代码修改经验,获取诸如重构的方式、重构的动机以及重构对代码质量的影响等知识,有利于研究者理解软件演化的历程。在几种常用的重构模式之中,有一部分在重构的过程中包含搬移代码行这种操作,在重构实践中,重构前后代码行的搬移并不是简单的一字不改的粘贴和复制,在很多情况下需要按照需求对所搬移的代码行进行一定程度的调整,比如调整搬移代码行中的变量名、常量名、花括号、修饰符、标识符、字符大小写、数字、字符串,或者是添加或删除其中的部分代码。由于...
【文章来源】:齐鲁工业大学山东省
【文章页数】:80 页
【学位级别】:硕士
【文章目录】:
摘要
ABSTRACT
第1章 绪论
1.1 研究背景和意义
1.2 本文的研究内容
1.3 文章结构
第2章 国内外研究现状
2.1 重构和重构模式
2.1.1 什么是重构以及重构的研究现状
2.1.2 重构的作用和缺陷
2.1.3 什么是重构模式
2.2 重构模式识别
2.3 克隆代码和代码克隆检测技术
2.3.1 克隆代码
2.3.2 代码克隆检测
2.4 本章小结
第3章 基于代码克隆检测的重构模式识别方法
3.1 识别方法概述
3.2 代码变更块(hunk)的获取和拆分
3.2.1 代码变更块的获取(hunk识别模块)
3.2.2 代码变更块的分割(split模块)
3.3 基于代码克隆检测技术获取候选hunk集(克隆检测模块)
3.4 基于抽象语法树的重构模式识别(模式识别模块)
3.4.1 使用抽象语法树解析源代码
3.4.2 Java模型
3.4.3 寻找抽象语法树节点的方法
3.4.4 从AST节点中获取信息
3.4.5 本文如何使用抽象语法树完成语法分析
3.5 与常见的重构模式识别方法的对比
3.6 本章小结
第4章 抽取函数和内联函数重构模式的识别
4.1 抽取函数(Extract Method)模式
4.2 抽取函数模式的识别
4.2.1 基于克隆检测对方法的代码搬移进行判断
4.2.2 对新增方法调用的判断
4.2.3 抽取函数算法
4.3 数据来源
4.4 simian参数与阈值设定
4.5 抽取函数实验结果和分析
4.6 内联函数(Inline Method)模式
4.6.1 基于克隆代码检测对函数级代码搬移进行判断
4.6.2 基于抽象语法树对函数引用情况进行判断
4.6.3 内联函数重构模式识别算法
4.7 内联函数实验结果和分析
4.8 本章小结
第5章 替换算法重构模式的识别
5.1 替换算法(Substitute Algorithm)模式
5.2 替换算法模式的识别
5.3 替换算法模式算法
5.4 替换算法实验结果和分析
5.5 本章小结
第6章 函数改名、添加参数以及移除参数重构模式的识别
6.1 函数改名(Rename Method)模式
6.2 函数改名模式的识别
6.2.1 基于代码克隆检测对行变更进行判断
6.2.2 使用基于文本的语法分析判定函数头
6.2.3 判断原函数和修改后函数是否存在函数改名情况
6.2.4 函数改名算法
6.3 函数改名实验结果
6.4 添加参数(Add Parameter)和移除参数(Remove Parameter)模式
6.4.1 添加参数(Add Parameter)模式
6.4.2 移除参数(Remove Parameter)重构模式
6.5 对添加参数和移除参数重构模式的识别
6.6 添加参数和移除参数算法
6.7 添加参数和移除参数实验结果
6.8 本章小结
第7章 抽取类重构模式的识别
7.1 抽取类(Extract Classs)重构模式
7.2 抽取类重构模式识别
7.2.1 基于克隆检测技术对部分代码搬移进行判断
7.2.2 基于抽象语法树对被转移代码中是否有函数进行判断
7.2.3 对变更后文件是否调用了转移代码行中的函数进行判断
7.2.4 抽取类识别算法
7.3 抽取类实验结果
7.4 本章小结
第8章 结论
参考文献
致谢
在学期间主要科研成果
一、发表学术论文
【参考文献】:
期刊论文
[1]面向Java多线程机制的软件重构方法[J]. 张杨,柳晨光,张冬雯,郑琨,郑雅洁. 北京理工大学学报. 2018(11)
[2]基于版本的多重软件重构自动检测技术研究[J]. 钟林辉,黄小明,薛良波,叶海涛. 江西师范大学学报(自然科学版). 2018(05)
[3]代码审查在软件工程实施中的重要性[J]. 井涛. 电子技术与软件工程. 2017(21)
[4]分支语句重构算法的研究与应用[J]. 赵会群,孙雨. 计算机工程与应用. 2018(06)
[5]基于后缀树的相似代码检测方法的研究[J]. 禤静. 信息通信. 2016(10)
[6]基于JavaCC的抽象语法树的构建与实现[J]. 黄松,黄玉,惠战伟. 计算机工程与设计. 2016(04)
[7]函数抽取重构的自动检测方法[J]. 刘阳,刘秋荣,刘辉. 计算机科学. 2015(12)
[8]大规模软件系统日志研究综述[J]. 廖湘科,李姗姗,董威,贾周阳,刘晓东,周书林. 软件学报. 2016(08)
[9]长方法坏味重构选择策略[J]. 马飞飞,吴海涛. 计算机应用. 2014(S1)
[10]基于程序依赖图的克隆检测及改进[J]. 郭婧,吴军华. 计算机工程与设计. 2012(02)
博士论文
[1]面向软件重构的推荐方法研究[D]. 高原.北京理工大学 2015
本文编号:3363713
【文章来源】:齐鲁工业大学山东省
【文章页数】:80 页
【学位级别】:硕士
【文章目录】:
摘要
ABSTRACT
第1章 绪论
1.1 研究背景和意义
1.2 本文的研究内容
1.3 文章结构
第2章 国内外研究现状
2.1 重构和重构模式
2.1.1 什么是重构以及重构的研究现状
2.1.2 重构的作用和缺陷
2.1.3 什么是重构模式
2.2 重构模式识别
2.3 克隆代码和代码克隆检测技术
2.3.1 克隆代码
2.3.2 代码克隆检测
2.4 本章小结
第3章 基于代码克隆检测的重构模式识别方法
3.1 识别方法概述
3.2 代码变更块(hunk)的获取和拆分
3.2.1 代码变更块的获取(hunk识别模块)
3.2.2 代码变更块的分割(split模块)
3.3 基于代码克隆检测技术获取候选hunk集(克隆检测模块)
3.4 基于抽象语法树的重构模式识别(模式识别模块)
3.4.1 使用抽象语法树解析源代码
3.4.2 Java模型
3.4.3 寻找抽象语法树节点的方法
3.4.4 从AST节点中获取信息
3.4.5 本文如何使用抽象语法树完成语法分析
3.5 与常见的重构模式识别方法的对比
3.6 本章小结
第4章 抽取函数和内联函数重构模式的识别
4.1 抽取函数(Extract Method)模式
4.2 抽取函数模式的识别
4.2.1 基于克隆检测对方法的代码搬移进行判断
4.2.2 对新增方法调用的判断
4.2.3 抽取函数算法
4.3 数据来源
4.4 simian参数与阈值设定
4.5 抽取函数实验结果和分析
4.6 内联函数(Inline Method)模式
4.6.1 基于克隆代码检测对函数级代码搬移进行判断
4.6.2 基于抽象语法树对函数引用情况进行判断
4.6.3 内联函数重构模式识别算法
4.7 内联函数实验结果和分析
4.8 本章小结
第5章 替换算法重构模式的识别
5.1 替换算法(Substitute Algorithm)模式
5.2 替换算法模式的识别
5.3 替换算法模式算法
5.4 替换算法实验结果和分析
5.5 本章小结
第6章 函数改名、添加参数以及移除参数重构模式的识别
6.1 函数改名(Rename Method)模式
6.2 函数改名模式的识别
6.2.1 基于代码克隆检测对行变更进行判断
6.2.2 使用基于文本的语法分析判定函数头
6.2.3 判断原函数和修改后函数是否存在函数改名情况
6.2.4 函数改名算法
6.3 函数改名实验结果
6.4 添加参数(Add Parameter)和移除参数(Remove Parameter)模式
6.4.1 添加参数(Add Parameter)模式
6.4.2 移除参数(Remove Parameter)重构模式
6.5 对添加参数和移除参数重构模式的识别
6.6 添加参数和移除参数算法
6.7 添加参数和移除参数实验结果
6.8 本章小结
第7章 抽取类重构模式的识别
7.1 抽取类(Extract Classs)重构模式
7.2 抽取类重构模式识别
7.2.1 基于克隆检测技术对部分代码搬移进行判断
7.2.2 基于抽象语法树对被转移代码中是否有函数进行判断
7.2.3 对变更后文件是否调用了转移代码行中的函数进行判断
7.2.4 抽取类识别算法
7.3 抽取类实验结果
7.4 本章小结
第8章 结论
参考文献
致谢
在学期间主要科研成果
一、发表学术论文
【参考文献】:
期刊论文
[1]面向Java多线程机制的软件重构方法[J]. 张杨,柳晨光,张冬雯,郑琨,郑雅洁. 北京理工大学学报. 2018(11)
[2]基于版本的多重软件重构自动检测技术研究[J]. 钟林辉,黄小明,薛良波,叶海涛. 江西师范大学学报(自然科学版). 2018(05)
[3]代码审查在软件工程实施中的重要性[J]. 井涛. 电子技术与软件工程. 2017(21)
[4]分支语句重构算法的研究与应用[J]. 赵会群,孙雨. 计算机工程与应用. 2018(06)
[5]基于后缀树的相似代码检测方法的研究[J]. 禤静. 信息通信. 2016(10)
[6]基于JavaCC的抽象语法树的构建与实现[J]. 黄松,黄玉,惠战伟. 计算机工程与设计. 2016(04)
[7]函数抽取重构的自动检测方法[J]. 刘阳,刘秋荣,刘辉. 计算机科学. 2015(12)
[8]大规模软件系统日志研究综述[J]. 廖湘科,李姗姗,董威,贾周阳,刘晓东,周书林. 软件学报. 2016(08)
[9]长方法坏味重构选择策略[J]. 马飞飞,吴海涛. 计算机应用. 2014(S1)
[10]基于程序依赖图的克隆检测及改进[J]. 郭婧,吴军华. 计算机工程与设计. 2012(02)
博士论文
[1]面向软件重构的推荐方法研究[D]. 高原.北京理工大学 2015
本文编号:3363713
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3363713.html