[发明专利]面向C语言的源代码克隆检测方法有效
申请号: | 201811105462.4 | 申请日: | 2018-09-21 |
公开(公告)号: | CN110209425B | 公开(公告)日: | 2022-03-15 |
发明(设计)人: | 桂盛霖;徐参语;陈一凡 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 电子科技大学专利中心 51203 | 代理人: | 周刘英 |
地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 语言 源代码 克隆 检测 方法 | ||
本发明公开了一种面向C语言的源代码克隆检测方法。本发明的技术方案为:采用上下文五官文法对C语言语法进行定义,用于实现对源程序的解析,生成源程序的解析树,再对整个解析树进行转化,得到转化后的解析树,然后再还原为文本形式的源代码。此外还包括对得到的文本形式的源代码进行格式化规范化处理。对得到的C函数通过LCS算法进行克隆检测,得到当前待检测函数的克隆函数检测结果,在克隆检测时,仅将函数的代码序列长度落入其允许的克隆函数的长度范围作为当前待检测函数的克隆比较对象。本发明能够实现对Type3类型克隆的检测,且在一定程度上控制检测的计算量。
技术领域
本发明属于克隆代码检测技术领域,具体涉及面向C语言的源代码克隆检测。
背景技术
目前对于克隆代码检测的研究普遍将克隆代码分为3类:
(1)Type1:除了空格和注释,其他完全相同的克隆代码;
(2)Type2:句法相同,对标识符、常量、类型进行了修改的克隆代码;
(3)Type3:在Type2基础上对语句进行进一步的修改,如增加声明、移除声明修改声明语句等产生的克隆代码。
早期的代码克隆检测思想很直观,直接将代码当做纯粹的文本(字符串)来处理,从文本的相似性上判断代码的相似程度。代表性的技术有Baker的Dup,它如同一般的网页相似度探查工具一样,通过词频的比较来判定代码克隆,具体可参考文献《B.Baker,Onfinding duplication and near-duplication in large software systems,in:Proceedings of the2nd Working Conference on Reverse Engineering,WCRE 1995,1995,pp.86–95.》。但由于代码结构上的特殊性,这种方法和其他技术相比,在Type2类型的代码克隆检测上,准确率和召回率有所不及。
针对基于文本相似性比较的克隆检测技术的不足,Kamiya等人将代码具有语义的部分提取出来,然后再进行相似性的比较,开发出了CCFinder代码检测工具。CCFinder根据源代码的语言,将源代码进行词法分析,抛开注释、空格、缩进等因素,只提取有语法意义的单元。并且在词法分析过程中,对于变量名等因素采取统一标识或者根据距离变量定义的偏移位置进行标记,去除变量名、类型名修改的影响。通过词法单元的提取,CCFinder将源代码转换成为一个仅保留代码语义信息的词法单元序列,然后通过后缀树寻找词法序列的公共子序列,探查代码的克隆。与同类型的工具比较,CCFinder具有很好的性能和准确率,能够检测到Type2类型的克隆代码,但是却很难检测Type-3类代码克隆。
此外,Baxter等人先对代码进行语法分析,提取代码的抽象语法树(abstractsyntax tree,AST),然后根据抽象语法树的最大子树来判定代码是否克隆,开发了CloneDR代码克隆检测工具。与基于词法单元的技术相比,抽象语法树对于高级别的代码克隆有更好的检测效果,但是实现更加复杂,效率和可扩展性有所不如。
近年来,基于程序依赖图(program dependency graph,PDG)的代码克隆检测技术具有更好的抽象性。它通过控制流或者数据流来建立代码依赖图,然后根据代码依赖图的同构子图判定代码克隆,但是该方案中,为了寻找同构子图,需要比较复杂的算法,会消耗巨大的计算资源。
现有的代码克隆检测技术主要有基于文本(Text)、基于Token、基于抽象语法树(AST)、基于程序依赖图(PDG)和基于度量值几类。基于Text的方法不需要对源代码进行转换,其准确率较高但是召回率底;基于Token的方法检测速度较快并且不依赖于开发语言,但是却很难检测Type-3类代码克隆;基于AST和基于PDG的方法需要把源代码转换成AST或者PDG然后再进行相应的比较,这两种方法所花费的代价都比较大;由于不同的代码段对应的度量值可能会相同,所以基于度量值的方法误报率较高。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811105462.4/2.html,转载请声明来源钻瓜专利网。