基于LLVM克隆代码检测关键技术研究
发布时间:2022-02-22 10:25
在代码开发过程中需求的快速变化导致代码实现的周期较短。代码的复制、粘贴、模仿等操作已成为加快软件开发周期的普遍方式。尽管克隆代码为开发者提供便利,但也因此降低程序的可维护性。研究克隆代码检测技术在代码开发、代码维护、缺陷查找、软件权益保护等多个方面都有显著的意义。在实际应用中,常用代码克隆检测方法包括:文本对比法、token序列对比法、索引序列匹配法、后缀树与前缀树检测法、抽象语法树距离检测法、基于程序依赖图的检测法等。其中程序依赖图检测方法具有分析全面,精确度高的特点。但其匹配成本较高、匹配信息量大,因而不适用于大规模代码的检测。本文在传统检测方法的研究基础上,提出新的基于LLVM依赖图的克隆代码检测方法。本文主要工作包括:(1)结合LLVM IR代码粒度较细的特性,提出将LLVM复杂程序依赖图简化成为简单依赖图的方法,旨在将LLVM依赖图转化成为与语句依赖图同一级别的简单依赖图,作为所有操作与分析的基础。(2)基于上述生成的简单依赖图,本文提出分割简单依赖图并以分割后产生的分片获取克隆代码段的方法。该方法固定匹配的范围,选取匹配依据,设计并行算法,提升了程序依赖图克隆检测方法的匹配...
【文章来源】:南京邮电大学江苏省
【文章页数】:59 页
【学位级别】:硕士
【文章目录】:
摘要
abstract
第一章 绪论
1.1 发展趋势
1.2 国内外研究现状
1.3 实际意义与研究目的
1.4 研究内容及创新点
1.5 论文结构及安排
第二章 基本概念
2.1 程序切片介绍
2.1.1 静态程序切片介绍
2.1.2 动态程序切片介绍
2.1.3 程序依赖图
2.1.4 系统依赖图
2.2 LLVMIR相关知识
2.3 常用代码克隆检测技术
2.3.1 基于文本的克隆代码检测
2.3.2 基于树的克隆代码检测
2.3.3 基于图的克隆代码检测
2.4 机器学习的基本概念
2.4.1 TensorFlow
2.4.2 Sklearn
2.5 本章小结
第三章 基于简单依赖图的代码匹配方法
3.1 引言
3.2 LLVMIR语法结构
3.3 语句程序依赖图与LLVM依赖图的对比
3.4 LLVM依赖图变更分析
3.4.1 添加注释
3.4.2 交换语句
3.4.3 增加可执行语句
3.4.4 增加不执行语句
3.5 简单依赖图
3.6 基于简单依赖图的分割方法
3.6.1 策略分析
3.7 基于简单依赖图的匹配方法
3.7.1 对比点匹配策略
3.7.2 相似度计算策略
3.8 代码匹配的增量更新方法
3.8.1 行号映射
3.8.2 标准依赖图和待检测依赖图的区别
3.9 本章小结
第四章 基于简单依赖图的合并方法
4.1 引言
4.2 简化复杂依赖图
4.2.1 简单依赖图的基本操作
4.3 克隆代码的合并策略
4.3.1 基于简化图结构的合并策略
4.4 相似度阈值的自动设置
4.4.1 提取特征向量
4.4.2 神经网络学习模型
4.4.3 线性回归模型
4.5 本章小结
第五章 实验验证
5.1 引言
5.2 克隆检测模型参数实验验证
5.3 并行架构实验验证
5.3.1 匹配与简化的并行实验验证
5.3.2 简化流程并行实验验证
5.4 克隆检测模型对比实验验证
5.5 本章小节
第六章 总结与展望
6.1 工作总结
6.2 未来工作展望
参考文献
附录1 程序清单
附录2 攻读硕士学位期间申请的专利
致谢
【参考文献】:
期刊论文
[1]面向管理的克隆代码研究综述[J]. 苏小红,张凡龙. 计算机学报. 2018(03)
[2]基于复用代码检测的缺陷发现方法[J]. 常超,刘克胜,赵军,黄宁. 系统工程与电子技术. 2017(09)
[3]基于bugs的克隆代码稳定性评估方法[J]. 赵玉武,翟晔,刘东升. 计算机应用研究. 2017(04)
[4]基于索引的分布式代码克隆检测[J]. 林婵,李俊杰,饶飞,罗平. 信息安全研究. 2016(03)
[5]基于Token编辑距离检测克隆代码[J]. 张久杰,王春晖,张丽萍,侯敏,刘东升. 计算机应用. 2015(12)
[6]一种基于特征矩阵的软件脆弱性代码克隆检测方法[J]. 甘水滔,秦晓军,陈左宁,王林章. 软件学报. 2015(02)
[7]Hadoop集群下的并行克隆代码检测[J]. 叶林,姚国祥. 微型机与应用. 2014(02)
[8]基于代码克隆检测技术的Android应用重打包检测[J]. 王浩宇,王仲禹,郭耀,陈向群. 中国科学:信息科学. 2014(01)
[9]大规模代码克隆的检测方法[J]. 郭颖,陈峰宏,周明辉. 计算机科学与探索. 2014(04)
[10]基于分组的代码克隆增量检测方法[J]. 王海,林云,彭鑫,赵文耘. 计算机科学与探索. 2014(04)
博士论文
[1]代码克隆扩展分析及管理技术研究[D]. 张刚.复旦大学 2013
硕士论文
[1]Pyreview:一个基于抽象语法树差异提取的Python源代码分析工具[D]. 李清言.南京大学 2016
[2]基于索引和序列匹配的代码克隆检测技术研究[D]. 舒翔.杭州电子科技大学 2015
[3]大型软件系统维护中代码克隆的质量分析和提升[D]. 王楚础.复旦大学 2013
[4]基于支持向量机的克隆代码有害性评价方法研究[D]. 李智超.哈尔滨工业大学 2013
[5]基于后缀数组的克隆代码检测研究[D]. 史庆庆.内蒙古师范大学 2013
[6]基于抽象语法树的程序代码抄袭检测技术研究[D]. 赵彦博.内蒙古师范大学 2010
[7]基于序列匹配的代码克隆分析系统设计与实现[D]. 辛天卿.大连理工大学 2009
[8]Java代码相似性判定方法的研究[D]. 王冠.北京工业大学 2008
本文编号:3639263
【文章来源】:南京邮电大学江苏省
【文章页数】:59 页
【学位级别】:硕士
【文章目录】:
摘要
abstract
第一章 绪论
1.1 发展趋势
1.2 国内外研究现状
1.3 实际意义与研究目的
1.4 研究内容及创新点
1.5 论文结构及安排
第二章 基本概念
2.1 程序切片介绍
2.1.1 静态程序切片介绍
2.1.2 动态程序切片介绍
2.1.3 程序依赖图
2.1.4 系统依赖图
2.2 LLVMIR相关知识
2.3 常用代码克隆检测技术
2.3.1 基于文本的克隆代码检测
2.3.2 基于树的克隆代码检测
2.3.3 基于图的克隆代码检测
2.4 机器学习的基本概念
2.4.1 TensorFlow
2.4.2 Sklearn
2.5 本章小结
第三章 基于简单依赖图的代码匹配方法
3.1 引言
3.2 LLVMIR语法结构
3.3 语句程序依赖图与LLVM依赖图的对比
3.4 LLVM依赖图变更分析
3.4.1 添加注释
3.4.2 交换语句
3.4.3 增加可执行语句
3.4.4 增加不执行语句
3.5 简单依赖图
3.6 基于简单依赖图的分割方法
3.6.1 策略分析
3.7 基于简单依赖图的匹配方法
3.7.1 对比点匹配策略
3.7.2 相似度计算策略
3.8 代码匹配的增量更新方法
3.8.1 行号映射
3.8.2 标准依赖图和待检测依赖图的区别
3.9 本章小结
第四章 基于简单依赖图的合并方法
4.1 引言
4.2 简化复杂依赖图
4.2.1 简单依赖图的基本操作
4.3 克隆代码的合并策略
4.3.1 基于简化图结构的合并策略
4.4 相似度阈值的自动设置
4.4.1 提取特征向量
4.4.2 神经网络学习模型
4.4.3 线性回归模型
4.5 本章小结
第五章 实验验证
5.1 引言
5.2 克隆检测模型参数实验验证
5.3 并行架构实验验证
5.3.1 匹配与简化的并行实验验证
5.3.2 简化流程并行实验验证
5.4 克隆检测模型对比实验验证
5.5 本章小节
第六章 总结与展望
6.1 工作总结
6.2 未来工作展望
参考文献
附录1 程序清单
附录2 攻读硕士学位期间申请的专利
致谢
【参考文献】:
期刊论文
[1]面向管理的克隆代码研究综述[J]. 苏小红,张凡龙. 计算机学报. 2018(03)
[2]基于复用代码检测的缺陷发现方法[J]. 常超,刘克胜,赵军,黄宁. 系统工程与电子技术. 2017(09)
[3]基于bugs的克隆代码稳定性评估方法[J]. 赵玉武,翟晔,刘东升. 计算机应用研究. 2017(04)
[4]基于索引的分布式代码克隆检测[J]. 林婵,李俊杰,饶飞,罗平. 信息安全研究. 2016(03)
[5]基于Token编辑距离检测克隆代码[J]. 张久杰,王春晖,张丽萍,侯敏,刘东升. 计算机应用. 2015(12)
[6]一种基于特征矩阵的软件脆弱性代码克隆检测方法[J]. 甘水滔,秦晓军,陈左宁,王林章. 软件学报. 2015(02)
[7]Hadoop集群下的并行克隆代码检测[J]. 叶林,姚国祥. 微型机与应用. 2014(02)
[8]基于代码克隆检测技术的Android应用重打包检测[J]. 王浩宇,王仲禹,郭耀,陈向群. 中国科学:信息科学. 2014(01)
[9]大规模代码克隆的检测方法[J]. 郭颖,陈峰宏,周明辉. 计算机科学与探索. 2014(04)
[10]基于分组的代码克隆增量检测方法[J]. 王海,林云,彭鑫,赵文耘. 计算机科学与探索. 2014(04)
博士论文
[1]代码克隆扩展分析及管理技术研究[D]. 张刚.复旦大学 2013
硕士论文
[1]Pyreview:一个基于抽象语法树差异提取的Python源代码分析工具[D]. 李清言.南京大学 2016
[2]基于索引和序列匹配的代码克隆检测技术研究[D]. 舒翔.杭州电子科技大学 2015
[3]大型软件系统维护中代码克隆的质量分析和提升[D]. 王楚础.复旦大学 2013
[4]基于支持向量机的克隆代码有害性评价方法研究[D]. 李智超.哈尔滨工业大学 2013
[5]基于后缀数组的克隆代码检测研究[D]. 史庆庆.内蒙古师范大学 2013
[6]基于抽象语法树的程序代码抄袭检测技术研究[D]. 赵彦博.内蒙古师范大学 2010
[7]基于序列匹配的代码克隆分析系统设计与实现[D]. 辛天卿.大连理工大学 2009
[8]Java代码相似性判定方法的研究[D]. 王冠.北京工业大学 2008
本文编号:3639263
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3639263.html