基于静态检测的克隆代码检测工具的设计与实现
发布时间:2021-08-08 10:44
伴随着移动互联网时代的到来,各类型软件应用渗透至社会的各个领域。作为提升软件开发效率的重要手段,代码复用技术、设计模式理论、软件开发框架以及集成开源组件等技术在软件开发过程中扮演着越来越重要的角色。上述技术在提升开发效率的同时,也不可避免地在软件系统的源代码中引入了越来越多的克隆代码。因此,如何对源代码中的克隆代码进行有效检测是软件工程领域越发重要的一个问题。软件系统中克隆代码的检测和管理不仅关系到软件系统的维护与升级,同时也越来越多地与软件安全、知识产权保护等问题联系在一起。基于以上背景,本文提出并实现了一个基于静态检测的克隆代码检测工具,其以函数/类作为克隆检测的基本单位,通过使用TXL语言实现了对源代码函数/类的提取与归一化,并通过粗细粒度结合的克隆检测机制实现了对于C、C++、Java、Python和PHP源代码中Type1、Type2、Type3和Type4类型克隆代码的有效检测,同时保证了检测过程的高效性。本文所做的工作分为以下几部分:1.设计并实现了源代码函数提取模块与源代码归一化模块。基于TXL官方提供的编程语言的语法定义文件,使用TXL对函数定义进行重写,并定义提取规...
【文章来源】:电子科技大学四川省 211工程院校 985工程院校 教育部直属院校
【文章页数】:93 页
【学位级别】:硕士
【部分图文】:
克隆代码检测工具的检测流程
代码函数集/类集中函数/类的归一化处理,包括对选择型语句和循环型语句的归一化,使得源代码中的选择型语句和循环型语句分别具有统一形式,这对于实现源代码中 Type4 类型克隆的检测具有重要意义。归一化处理后的源代码函数集作为粗粒度检测模块的输入。c) 粗粒度检测模块:粗粒度检测模块首先提取源代码函数集中每个函数的函数体量化特征,然后比较函数对中两个函数的函数体量化特征,将函数体量化特征差异率高于差异率阈值的函数对判定为非克隆函数对,排除在后续检测流程之外,将特征差异率低于差异率阈值的函数对判定为潜在克隆函数对,并输入到细粒度检测模块进行最终判定。d) 细粒度检测模块:细粒度检测模块基于 LCS 算法计算函数对/类对中两个函数/类的最长公共子序列长度,并以此计算两个函数/类彼此的相似度,彼此相似度均高于相似度阈值的函数对/类对被判定为克隆函数对/克隆类对。源代码中检测到的克隆函数对/克隆类对最终会记录在 XML 文件中,形成克隆代码报告。细粒度检测模块对于 Type1-4 类型的克隆代码均具有良好的检测效果。
电子科技大学硕士学位论文各克隆检测工具对源程序语言的支持情况,测试工作选取.0_141 作为测试对象。为测试工具对于各类型克隆代码的检地在 Linux-4.9.10 和 JDK1.8.0_141 源代码中注入了若干函源代码中的函数进行各种类型的修改得到,因此与源代码ype1-4 类型的克隆函数对。Linux-4.9.10 和 JDK1.8.0_141 源的信息如表 6-7 所示。.3 节对克隆检测模块的测试结果,测试工作设置粗粒度检测特征差异率阈值 T1 和功能量化特征差异率阈值 T2 均为 0数相似度阈值 S 为 0.7,以保证克隆检测工具具有较好的d 的克隆检测粒度为函数级别,并设定检测模式为 Type3-对 Type1-3 三种类型的克隆进行检测),设置 SimCad 的克,检测级别设置为 Type1+Type2+Type3。本工具对 Lin141 的测试结果分别如图 6-7 和图 6-8 所示。
本文编号:3329815
【文章来源】:电子科技大学四川省 211工程院校 985工程院校 教育部直属院校
【文章页数】:93 页
【学位级别】:硕士
【部分图文】:
克隆代码检测工具的检测流程
代码函数集/类集中函数/类的归一化处理,包括对选择型语句和循环型语句的归一化,使得源代码中的选择型语句和循环型语句分别具有统一形式,这对于实现源代码中 Type4 类型克隆的检测具有重要意义。归一化处理后的源代码函数集作为粗粒度检测模块的输入。c) 粗粒度检测模块:粗粒度检测模块首先提取源代码函数集中每个函数的函数体量化特征,然后比较函数对中两个函数的函数体量化特征,将函数体量化特征差异率高于差异率阈值的函数对判定为非克隆函数对,排除在后续检测流程之外,将特征差异率低于差异率阈值的函数对判定为潜在克隆函数对,并输入到细粒度检测模块进行最终判定。d) 细粒度检测模块:细粒度检测模块基于 LCS 算法计算函数对/类对中两个函数/类的最长公共子序列长度,并以此计算两个函数/类彼此的相似度,彼此相似度均高于相似度阈值的函数对/类对被判定为克隆函数对/克隆类对。源代码中检测到的克隆函数对/克隆类对最终会记录在 XML 文件中,形成克隆代码报告。细粒度检测模块对于 Type1-4 类型的克隆代码均具有良好的检测效果。
电子科技大学硕士学位论文各克隆检测工具对源程序语言的支持情况,测试工作选取.0_141 作为测试对象。为测试工具对于各类型克隆代码的检地在 Linux-4.9.10 和 JDK1.8.0_141 源代码中注入了若干函源代码中的函数进行各种类型的修改得到,因此与源代码ype1-4 类型的克隆函数对。Linux-4.9.10 和 JDK1.8.0_141 源的信息如表 6-7 所示。.3 节对克隆检测模块的测试结果,测试工作设置粗粒度检测特征差异率阈值 T1 和功能量化特征差异率阈值 T2 均为 0数相似度阈值 S 为 0.7,以保证克隆检测工具具有较好的d 的克隆检测粒度为函数级别,并设定检测模式为 Type3-对 Type1-3 三种类型的克隆进行检测),设置 SimCad 的克,检测级别设置为 Type1+Type2+Type3。本工具对 Lin141 的测试结果分别如图 6-7 和图 6-8 所示。
本文编号:3329815
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3329815.html