发布信息

基于抽象语法树及令牌的代码克隆检测的方法及应用

作者:admin      2022-07-30 23:01:19     823



计算;推算;计数设备的制造及其应用技术1.本发明是关于代码克隆检测领域,特别是关于一种基于抽象语法树及令牌的代码克隆检测的方法及应用。背景技术:2.代码克隆,也称为重复代码或相似代码,指的是存在于代码库中两个及以上的相同或者相似的源代码片段。代码克隆产生的原因有很多,主要是开发者为了提高效率而使用的复用技术,包括复制粘贴已有的代码片段并进行修改、使用开发框架、复用设计模式等。3.大量的实证研究表明,代码克隆广泛存在于各个开源与闭源代码仓库之中,并且占据了相当比例,例如,有研究在linux系统中检测到了22.3%的代码克隆,kamiya等人发现在jdk中存在29%的代码克隆,在某些软件系统中代码克隆甚至达到了50%。广泛存在的代码克隆一定程度上帮助了软件系统的开发,能够产生正面的效益,比如可以利用克隆系统测试新增功能对原系统的影响,然而也有许多研究指出数量巨大的代码克隆会对软件系统造成负面的影响。随着软件生命周期的进行,未得到良好克隆管理的软件系统会因为代码克隆造成代码库的不断膨胀,从而增加维护成本。软件缺陷也会因为代码克隆而在系统中被传播,降低了软件系统的可靠性。所以,如果不及时控制代码克隆的增长,对系统的管理、维护、修复等行为都会耗费额外的人力,导致软件维护成本的提高。4.鉴于此,研究者们致力于研究并解决代码克隆衍生问题。其中,如何更快速、更准确、更便捷地发现代码克隆,是代码克隆研究的核心问题,而利用人工的检测代码克隆效率低,成本高,准确率也无法保证。围绕这个问题,软件工程研究者们提出代码克隆检测技术,目的在于自动化定位软件系统中的代码克隆,能够节省成本,减少出错风险。以此帮助开发人员和管理者及时发现代码克隆,并采取修复措施,有助于更好地保证软件质量。代码克隆检测在剽窃检测、版权侵犯调查、代码重构,以及管理代码质量、寻找缺陷、发现复用模式等方面发挥了重要作用。5.公开于该背景技术部分的信息仅仅旨在增加对本发明的总体背景的理解,而不应当被视为承认或以任何形式暗示该信息构成已为本领域一般技术人员所公知的现有技术。技术实现要素:6.本发明的目的在于提供一种基于抽象语法树及令牌的代码克隆检测的方法及应用,解决如何快速准确的发现代码克隆的问题。7.为实现上述目的,本发明的实施例提供了一种基于抽象语法树及令牌的代码克隆检测的方法。8.在本发明的一个或多个实施方式中,所述方法包括:解析所有代码为令牌和抽象语法树;通过所述令牌过滤掉非代码克隆的代码块,并通过所述抽象语法树筛选出与查询块具有相同代码克隆类型的候选块;判断所述候选块与所述查询块的相似度下限是否高于预设阈值;若是,将所述候选块和所述查询块转化为克隆对输出。9.在本发明的一个或多个实施方式中,所述解析所有代码为令牌和抽象语法树,包括:将所有代码拆分为以函数为单位的代码块,并给每个代码块编号,计算对应的哈希值;解析所述代码块的令牌和抽象语法树;以及计算所述代码块对应的令牌及令牌频率,并计算所述代码块对应的抽象语法树的高度和宽度。10.在本发明的一个或多个实施方式中,通过所述令牌过滤掉非代码克隆的代码块,包括:为所述查询块的令牌创建部分索引;以及判断所述代码块是否具有所述查询块索引对应的令牌;若是,将所述代码块设置为第一候选块。11.在本发明的一个或多个实施方式中,通过所述抽象语法树筛选出与查询块具有相同代码克隆类型的候选块,包括:判断所述第一候选块与所述查询块对应的抽象语法树的高度和宽度是否相同;若是,将所述第一候选块设置为第二候选块。12.在本发明的一个或多个实施方式中,所述方法还包括:分别从所述第二候选块中筛选出与所述查询块的相似度下限高于预设阈值范围上限和下限的候选块,并将所述候选块转化为克隆对;将所述预设阈值范围内重复的克隆对删除,以得到满足预设阈值范围的最终克隆对。13.在本发明的另一个方面当中,提供了一种基于抽象语法树及令牌的代码克隆检测的装置,其包括解析模块、筛选模块、判断模块和输出模块。14.解析模块,用于解析所有代码为令牌和抽象语法树。15.筛选模块,用于通过所述令牌过滤掉非代码克隆的代码块,并通过所述抽象语法树筛选出与查询块具有相同代码克隆类型的候选块。16.判断模块,用于判断所述候选块与所述查询块的相似度下限是否高于预设值。17.输出模块,用于将所述候选块和所述查询块转化为克隆对输出。18.在本发明的一个或多个实施方式中,所述解析模块还用于:将所有代码拆分为以函数为单位的代码块,并给每个代码块编号,计算对应的哈希值;解析所述代码块的令牌和抽象语法树;以及计算所述代码块对应的令牌及令牌频率,并计算所述代码块对应的抽象语法树的高度和宽度。19.在本发明的一个或多个实施方式中,所述筛选模块还用于:为所述查询块的令牌创建部分索引;以及判断所述代码块是否具有所述查询块索引对应的令牌;若是,将所述代码块设置为第一候选块。20.在本发明的一个或多个实施方式中,所述筛选模块还用于:判断所述第一候选块与所述查询块对应的抽象语法树的高度和宽度是否相同;若是,将所述第一候选块设置为第二候选块。21.在本发明的一个或多个实施方式中,所述判断模块还用于:分别从所述第二候选块中筛选出与所述查询块的相似度下限高于预设阈值范围上限和下限的候选块,并将所述候选块转化为克隆对;将所述预设阈值范围内重复的克隆对删除,以得到满足预设阈值范围的最终克隆对。22.在本发明的另一个方面当中,提供了一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的基于抽象语法树及令牌的代码克隆检测的方法。23.在本发明的另一个方面当中,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如所述的基于抽象语法树及令牌的代码克隆检测的方法的步骤。24.与现有技术相比,根据本发明实施方式的基于抽象语法树及令牌的代码克隆检测的方法及应用,其能够通过代码块的令牌和抽象语法树过滤非代码克隆的代码块,帮助缩小候选范围,提高判断不同克隆类型时代码片段之间相似度的判断效率,进而提高判断的精确率。附图说明25.图1是根据本发明一实施方式的基于抽象语法树及令牌的代码克隆检测的方法的流程图;26.图2是根据本发明一实施方式的基于抽象语法树及令牌的代码克隆检测的装置的结构图;27.图3是根据本发明一实施方式的基于抽象语法树及令牌的代码克隆检测的计算设备的硬件结构图。具体实施方式28.下面结合附图,对本发明的具体实施方式进行详细描述,但应当理解本发明的保护范围并不受具体实施方式的限制。29.除非另有其它明确表示,否则在整个说明书和权利要求书中,术语“包括”或其变换如“包含”或“包括有”等等将被理解为包括所陈述的元件或组成部分,而并未排除其它元件或其它组成部分。30.以下结合附图,详细说明本发明各实施例提供的技术方案。31.实施例132.如图1所示,介绍本发明的一个实施例中基于抽象语法树及令牌的代码克隆检测的方法,该方法包括如下步骤。33.在步骤s101中,解析所有代码为令牌和抽象语法树。34.将所有代码拆分为以函数为单位的代码块,并给每个代码块编号,计算对应的哈希值;解析每个代码块的令牌和抽象语法树;以及计算代码块对应的令牌及令牌频率,并计算代码块对应的抽象语法树的高度和宽度。35.在步骤s102中,通过令牌过滤掉非代码克隆的代码块,并通过抽象语法树筛选出与查询块具有相同代码克隆类型的候选块。36.根据代码克隆相似程度的不同,一般将代码克隆分为4种类型,即完全相同的代码(类型1)、重命名的代码(类型2)、几乎相同的代码(类型3)和语义相似的代码(类型4),从类型1到类型4,代码克隆的相似程度逐渐降低,检测的难度也逐渐增加。37.代码克隆的类型主要分为两大类,句法克隆和语义克隆。句法克隆指文本相似的代码片段,语义克隆则是指功能相似的代码片段。基于这两大类,代码克隆可以被划分为四小类,其中前三种为句法克隆,第四种为语义克隆。[0038][0039][0040]为查询块的令牌创建部分索引,方便后续的匹配相似度。具体的,在代码块中构建一个倒排索引,将其映射标记到包含它们的代码块,每个代码块中仅包含标记子集的部分索引。[0041]采用过滤启发式为代码块过滤部分非代码克隆的代码块。判断代码块是否具有查询块索引对应的令牌;若是,将代码块设置为第一候选块。利用过滤启发式减少索引,可以减少检测克隆所需的代码块比较的数量。[0042]具体的,过滤启发式指给定代码块bx和by,分别由t个以某种预定义顺序组成的标记,如果|bx∩by|≥i,则bx和by的子块sbx和sby分别由前t-j+1个标记组成,必须至少具有一个匹配的令牌。包括代码块中的标记需要遵循预定义的全局顺序。其中全局顺序按照语料库中令牌的出现频率来排序。[0043]根据经过令牌过滤后的候选块与查询块对应的抽象语法树的高度和宽度再次过滤非代码克隆的代码块,其中,只有经过令牌过滤后的候选块与查询块对应的抽象语法树的高度和宽度都相同的才可以被选为候选块,否则不考虑。[0044]在步骤s103中,判断候选块与查询块的相似度下限是否高于预设阈值。[0045]利用令牌的排序来测量代码块相似性的实时上限和下限,以便拒绝或接受具有较少令牌比较的克隆候选者。[0046]在步骤s104中,将候选块和查询块转化为克隆对输出。[0047]根据克隆对结果再次对输出进行处理,输出阈值范围对应克隆类型。[0048]具体的,分别从第二候选块中筛选出与查询块的相似度下限高于预设阈值范围上限和下限的候选块,并将候选块转化为克隆对;将预设阈值范围内重复的克隆对删除,以得到满足预设阈值范围的最终克隆对。[0049]根据本发明实施方式的基于抽象语法树及令牌的代码克隆检测的方法及应用,其能够通过代码块的令牌和抽象语法树过滤非代码克隆的代码块,帮助缩小候选范围,提高判断不同克隆类型时代码片段之间相似度的判断效率,进而提高判断的精确率。[0050]如图2所示,介绍根据本发明具体实施方式的基于抽象语法树及令牌的代码克隆检测的装置。[0051]在本发明的实施方式中,基于抽象语法树及令牌的代码克隆检测的装置包括解析模块201、筛选模块202、判断模块203和输出模块204。[0052]解析模块201,用于解析所有代码为令牌和抽象语法树。[0053]筛选模块202,用于通过令牌过滤掉非代码克隆的代码块,并通过抽象语法树筛选出与查询块具有相同代码克隆类型的候选块。[0054]判断模块203,用于判断候选块与查询块的相似度下限是否高于预设值。[0055]输出模块204,用于将候选块和查询块转化为克隆对输出。[0056]解析模块201还用于:将所有代码拆分为以函数为单位的代码块,并给每个代码块编号,计算对应的哈希值;解析代码块的令牌和抽象语法树;以及计算代码块对应的令牌及令牌频率,并计算代码块对应的抽象语法树的高度和宽度。[0057]筛选模块202还用于:为查询块的令牌创建部分索引;以及判断代码块是否具有查询块索引对应的令牌;若是,将代码块设置为第一候选块。[0058]筛选模块202还用于:判断第一候选块与查询块对应的抽象语法树的高度和宽度是否相同;若是,将第一候选块设置为第二候选块。[0059]判断模块203还用于:分别从第二候选块中筛选出与查询块的相似度下限高于预设阈值范围上限和下限的候选块,并将候选块转化为克隆对;将预设阈值范围内重复的克隆对删除,以得到满足预设阈值范围的最终克隆对。[0060]图3示出了根据本说明书的实施例的用于基于抽象语法树及令牌的代码克隆检测的计算设备30的硬件结构图。如图3所示,计算设备30可以包括至少一个处理器301、存储器302(例如非易失性存储器)、内存303和通信接口304,并且至少一个处理器301、存储器302、内存303和通信接口304经由总线305连接在一起。至少一个处理器301执行在存储器302中存储或编码的至少一个计算机可读指令。[0061]应该理解,在存储器302中存储的计算机可执行指令当执行时使得至少一个处理器301进行本说明书的各个实施例中以上结合图1-3描述的各种操作和功能。[0062]在本说明书的实施例中,计算设备30可以包括但不限于:个人计算机、服务器计算机、工作站、桌面型计算机、膝上型计算机、笔记本计算机、移动计算设备、智能电话、平板计算机、蜂窝电话、个人数字助理(pda)、手持装置、消息收发设备、可佩戴计算设备、消费电子设备等等。[0063]根据一个实施例,提供了一种比如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-3描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。[0064]根据本发明实施方式的基于抽象语法树及令牌的代码克隆检测的方法及应用,其能够通过代码块的令牌和抽象语法树过滤非代码克隆的代码块,帮助缩小候选范围,提高判断不同克隆类型时代码片段之间相似度的判断效率,进而提高判断的精确率。[0065]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。[0066]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0067]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0068]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0069]前述对本发明的具体示例性实施方案的描述是为了说明和例证的目的。这些描述并非想将本发明限定为所公开的精确形式,并且很显然,根据上述教导,可以进行很多改变和变化。对示例性实施例进行选择和描述的目的在于解释本发明的特定原理及其实际应用,从而使得本领域的技术人员能够实现并利用本发明的各种不同的示例性实施方案以及各种不同的选择和改变。本发明的范围意在由权利要求书及其等同形式所限定。









图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,发布内容不收取任何费用也不接任何广告!




免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

相关内容 查看全部