基于LLVM克隆代码检测关键技术研究
摘要 | 第4-5页 |
abstract | 第5页 |
第一章 绪论 | 第8-13页 |
1.1 发展趋势 | 第8页 |
1.2 国内外研究现状 | 第8-9页 |
1.3 实际意义与研究目的 | 第9-10页 |
1.4 研究内容及创新点 | 第10-11页 |
1.5 论文结构及安排 | 第11-13页 |
第二章 基本概念 | 第13-21页 |
2.1 程序切片介绍 | 第13-16页 |
2.1.1 静态程序切片介绍 | 第13-14页 |
2.1.2 动态程序切片介绍 | 第14-15页 |
2.1.3 程序依赖图 | 第15页 |
2.1.4 系统依赖图 | 第15-16页 |
2.2 LLVMIR相关知识 | 第16-17页 |
2.3 常用代码克隆检测技术 | 第17-18页 |
2.3.1 基于文本的克隆代码检测 | 第17-18页 |
2.3.2 基于树的克隆代码检测 | 第18页 |
2.3.3 基于图的克隆代码检测 | 第18页 |
2.4 机器学习的基本概念 | 第18-19页 |
2.4.1 TensorFlow | 第19页 |
2.4.2 Sklearn | 第19页 |
2.5 本章小结 | 第19-21页 |
第三章 基于简单依赖图的代码匹配方法 | 第21-35页 |
3.1 引言 | 第21-22页 |
3.2 LLVMIR语法结构 | 第22-23页 |
3.3 语句程序依赖图与LLVM依赖图的对比 | 第23-24页 |
3.4 LLVM依赖图变更分析 | 第24-25页 |
3.4.1 添加注释 | 第24页 |
3.4.2 交换语句 | 第24页 |
3.4.3 增加可执行语句 | 第24页 |
3.4.4 增加不执行语句 | 第24-25页 |
3.5 简单依赖图 | 第25页 |
3.6 基于简单依赖图的分割方法 | 第25-27页 |
3.6.1 策略分析 | 第26-27页 |
3.7 基于简单依赖图的匹配方法 | 第27-31页 |
3.7.1 对比点匹配策略 | 第28-29页 |
3.7.2 相似度计算策略 | 第29-31页 |
3.8 代码匹配的增量更新方法 | 第31-33页 |
3.8.1 行号映射 | 第31-33页 |
3.8.2 标准依赖图和待检测依赖图的区别 | 第33页 |
3.9 本章小结 | 第33-35页 |
第四章 基于简单依赖图的合并方法 | 第35-45页 |
4.1 引言 | 第35页 |
4.2 简化复杂依赖图 | 第35-38页 |
4.2.1 简单依赖图的基本操作 | 第35-38页 |
4.3 克隆代码的合并策略 | 第38-41页 |
4.3.1 基于简化图结构的合并策略 | 第39-41页 |
4.4 相似度阈值的自动设置 | 第41-44页 |
4.4.1 提取特征向量 | 第42页 |
4.4.2 神经网络学习模型 | 第42-43页 |
4.4.3 线性回归模型 | 第43-44页 |
4.5 本章小结 | 第44-45页 |
第五章 实验验证 | 第45-53页 |
5.1 引言 | 第45页 |
5.2 克隆检测模型参数实验验证 | 第45-47页 |
5.3 并行架构实验验证 | 第47-49页 |
5.3.1 匹配与简化的并行实验验证 | 第47-48页 |
5.3.2 简化流程并行实验验证 | 第48-49页 |
5.4 克隆检测模型对比实验验证 | 第49-51页 |
5.5 本章小节 | 第51-53页 |
第六章 总结与展望 | 第53-55页 |
6.1 工作总结 | 第53-54页 |
6.2 未来工作展望 | 第54-55页 |
参考文献 | 第55-57页 |
附录1 程序清单 | 第57-58页 |
附录2 攻读硕士学位期间申请的专利 | 第58-59页 |
致谢 | 第59页 |