CN114138330A - 基于知识图谱的代码克隆检测优化方法、装置和电子设备 - Google Patents

基于知识图谱的代码克隆检测优化方法、装置和电子设备 Download PDF

Info

Publication number
CN114138330A
CN114138330A CN202111516149.1A CN202111516149A CN114138330A CN 114138330 A CN114138330 A CN 114138330A CN 202111516149 A CN202111516149 A CN 202111516149A CN 114138330 A CN114138330 A CN 114138330A
Authority
CN
China
Prior art keywords
code segment
detected
clone
candidate
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111516149.1A
Other languages
English (en)
Inventor
王涛
张迅晖
余跃
李志星
张晏芝
钟岩
王怀民
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN202111516149.1A priority Critical patent/CN114138330A/zh
Publication of CN114138330A publication Critical patent/CN114138330A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/36Creation of semantic tools, e.g. ontology or thesauri
    • G06F16/367Ontology

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Animal Behavior & Ethology (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及一种基于知识图谱的代码克隆检测优化方法、装置和电子设备。该方法通过获取多个待检测代码片段,并采用预定筛选策略对其对应的候选代码片段集合进行筛选得到对应初始候选代码片段集合;利用知识图谱的知识对初始获选代码片段进行筛选,得到优化后的候选代码片段集合;采用预设克隆检测方法检测每个待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,并根据得到的克隆检测结果构建优化后的克隆知识图谱;根据克隆知识图谱,得到优化后的所有克隆对集合。本方法未对现有克隆检测方法进行修改,不会改变原有克隆检测方法准确度,同时本方法对开发语言没有依赖性,可以适用于现有所有克隆检测方法。

Description

基于知识图谱的代码克隆检测优化方法、装置和电子设备
技术领域
本申请涉及软件克隆技术领域,特别是涉及一种基于知识图谱的代码克隆检测优化方法、装置和电子设备。
背景技术
代码克隆作为软件复用的重要手段,一方面加速了软件的开发效率,另一方面也带来了软件质量问题,增加了软件缺陷修复的困难,带来了软件知识产权保护的问题。基于这些原因,学术界和工业界涌现出了大量代码克隆检测相关研究和大量克隆检测算法,其中一些算法关注于克隆检测的效率(执行时间)。
然而对于现有开源世界来说,开源项目众多,代码量巨大,且克隆情况严重。因此现有的方法很难快速实现对这种规模代码的克隆检测。
发明内容
基于此,有必要针对上述技术问题,提供一种基于知识图谱的代码克隆检测优化方法、装置和电子设备。该方法现有代码克隆检测算法检测效率无法适应大规模开源代码的问题,在代码检测过程中动态构建克隆关系知识图谱,利用知识图谱对克隆检测的候选代码片段进行筛选,减少克隆检测次数,进而优化现有克隆检测方法,提升克隆检测效率。
一种基于知识图谱的代码克隆检测优化方法,所述方法包括:
获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表。
将所述待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空。
根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合。
采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果。
根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
根据所述克隆知识图谱,得到优化后的所有克隆对集合。
一种基于知识图谱的代码克隆检测优化装置,所述装置包括:
待检测代码片段获取模块,用于获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表;
克隆检测准备模块,用于将所述待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空。
克隆检测模块,用于根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合;采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果。
克隆知识图谱构建模块,用于根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
克隆检测结果确定模块,用于根据所述克隆知识图谱,得到优化后的所有克隆对集合。
上述基于知识图谱的代码克隆检测优化方法、装置和电子设备,所述方法获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合;利用知识图谱的知识对初始获选代码片段进行筛选,得到优化后的候选代码片段集合;采用预设克隆检测方法检测每个待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果;根据克隆检测结果、待检测代码片段以及对应的最优候选代码片段集合构建优化后的克隆知识图谱;根据克隆知识图谱,得到优化后的所有克隆对集合。本方法未对现有克隆检测方法进行修改,而仅利用克隆传递性对克隆检测候选代码集合进行了进一步筛选,因此不会导致原有克隆检测方法在准确度发生变化,同时该技术没有对开发语言的依赖性,因此可以适用于现有所有克隆检测方法。
附图说明
图1为一个实施例中基于知识图谱的代码克隆检测优化方法的流程示意图;
图2为现有代码克隆检测算法流程;
图3为一个实施例中基于知识图谱的代码克隆检测优化技术架构图及对应的各子模块的流程图;
图4为一个实施例中基于知识图谱的代码克隆检测优化装置的结构框图;
图5为一个实施例中电子设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种基于知识图谱的代码克隆检测优化方法,该方包括以下步骤:
步骤100:获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个待检测代码片段组成待检测代码片列表。
具体的:预定筛选策略是自定义筛选策略,以减少克隆检测次数,提升检测效率。
预定筛选策略可以是:根据编程语言筛选无关代码文件中的代码片段来筛选代码片段、根据代码片段是否包含相同子字符串来筛选代码片段。例如:“abcdefg”,“bcduiopl”包含相同子字符串“bcd”,因此它们有可能是克隆的,如果任何子字符串都不相同,则认为两个代码片段不可能存在克隆关系。
步骤102:将待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空。
步骤104:根据初始知识图谱中的聚簇中心节点信息,对当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合。
知识图谱中具有克隆关系的节点会形成聚簇,其中第一个加入网络中的节点被认为是中心节点,用于代表整个聚簇与待检测代码片段进行克隆检测。
步骤106:采用预设克隆检测方法检测每个待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果。
具体的,预设克隆检测方法是现有的克隆检测方法。
步骤108:根据克隆检测结果、当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
步骤110:根据克隆知识图谱,得到优化后的所有克隆对集合。
具体的,克隆对集合用来记录与当前待检测代码片段存在克隆关系的所有代码片段。
上述基于知识图谱的代码克隆检测优化方法中,所述方法获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合;利用知识图谱的知识对初始获选代码片段进行筛选,得到优化后的候选代码片段集合;采用预设克隆检测方法检测每个待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果;根据克隆检测结果、待检测代码片段以及对应的最优候选代码片段集合构建优化后的克隆知识图谱;根据克隆知识图谱,得到优化后的所有克隆对集合。本方法未对现有克隆检测方法进行修改,而仅利用克隆传递性对克隆检测候选代码集合进行了进一步筛选,因此不会导致原有克隆检测方法在准确度发生变化,同时该技术没有对开发语言的依赖性,因此可以适用于现有所有克隆检测方法。
在其中一个实施例中,聚簇是初始知识图谱中具有克隆关系的节点形成的;其中第一个加入每个聚簇的节点是聚簇的中心节点;步骤104包括:查询初始知识图谱中所有的聚簇中心节点,并根据聚簇中心节点信息对当前待检测代码片段对应的候选代码片段集合进行筛选;并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合取交集后,得到优化后的候选代码片段集合。
在其中一个实施例中,步骤106包括:遍历每个优化后候选代码片段集合中的候选代码片段,利用预设克隆检测算法检测每个待检测代码片段与对应的候选代码片段是否存在克隆关系,得到每个待检测代码片段的克隆检测结果。
在其中一个实施例中,克隆检测结果包括待检测代码片段与候选代码片段中存在克隆关系,待检测代码片段与候选代码片段中不存在克隆关系;步骤108包括:当克隆检测结果为当前待检测代码片段与候选代码片段存在克隆关系时,在初始知识图谱中将当前待检测代码片段以新节点的形式插入,并添加候选代码片段对应的聚簇中心节点到该节点的有向边,节点的有向边代表克隆关系;当克隆检测结果为当前待检测代码片段与候选代码片段中不存在克隆关系时,在初始知识图谱中将当前待检测代码片段以新节点的形式插入,同时将该节点作为新的聚簇中心节点;将待检测代码片列表中的下一个元素作为当前待检测代码片段集合,并进行下一次克隆检测,直到待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
在其中一个实施例中,步骤110包括:查询克隆知识图谱中所有聚簇节点,形成聚簇节点列表;其中聚簇节点列表中的元素表示聚簇中心节点对应的代码片段;遍历聚簇节点列表中每个聚簇中心节点,查询与每个聚簇中心节点具有克隆关系的聚簇中所有非中心节点,得到聚簇节点列表,聚簇节点列表中的元素为与聚簇中心节点具有克隆关系的聚簇中所有非中心节点和该聚簇中心节点组成的元素;将聚簇节点列表中的元素两两组合形成元组,得到单个聚簇的克隆对集合;将所有单个聚簇的克隆对集合取并集,得到优化后的所有克隆对集合。
在其中一个实施例中,步骤100中初始候选代码片段集合确定的具体步骤包括:采用预定筛选策略对每个待检测代码片段进行筛选,得到对应的初始候选代码片段集合;其中预定筛选策略为根据编程语言筛选无关代码文件中的代码片段和/或根据代码片段是否包含相同子字符串。
在一个实施例中,提供了一种基于知识图谱的代码克隆检测优化方法,本方法旨在优化候选代码筛选阶段,利用知识图谱和克隆传递性原则,减少代码克隆检测比较次数。克隆传递性原则是指:A与B是克隆关系,B与C是克隆关系,则A与C也是克隆关系。
在介绍本方案之前先介绍现有克隆检测方法的构成,如图2所示,现有代码克隆检测算法主要包括三个步骤:
步骤1、代码抽取:抽取目标检测文件夹中所有的代码片段,形成集合codeSet,其目标是找到目标文件夹中所有克隆的代码对。
步骤2、单个代码片段克隆检测:遍历codeSet中的每个代码片段(code),找到所有与code存在克隆关系的其他代码片段,形成克隆对集合(codeCloneSet)。具体步骤包括:
步骤2.1、候选代码片段筛选:对于每个待检测代码片段(code),筛选候选代码片段集合(candidateSet)。值得注意的是,大量检测工作中会自定义筛选策略,以减少克隆检测次数,提升检测效率。现有的筛选策略举例如下:根据编程语言筛选无关代码文件中的代码片段来筛选代码片段、根据代码片段是否包含相同子字符串来筛选代码片段。
步骤2.2、候选集合检测:遍历每个candidateSet中的元素(candidate),利用自定义克隆检测算法检测code与candidate是否存在克隆关系,如果存在克隆关系,则将code,candidate以元组的形式插入到克隆对集合codeCloneSet中。克隆对集合用来记录与当前代码片段code存在克隆关系的所有代码片段。
步骤3、构建克隆对集合:将步骤2中检测到的克隆对集合(codeCloneSet)
Figure BDA0003396409810000071
codeSet集合大小)。
如图3所示,本实施例的方案包括以下模块:
模块1、克隆检测模块:在原有克隆检测方法筛选候选代码片段的基础上,利用知识图谱中的聚簇中心节点信息,减少候选代码片段数量,完成克隆检测并调用动态构建知识图谱模块完成图的更新。具体步骤见步骤11-步骤13。
模块2、动态构建知识图谱:根据模块1中的检测结果更新知识图谱,主要包括两个子模块来分别处理检测到克隆关系的代码片段和未检测到克隆关系的代码片段。具体描述见模块21-模块22。
模块3、构建克隆检测结果:在克隆检测结束后,形成了完整的克隆知识图谱,根据知识图谱构建最终的克隆对集合。具体步骤见步骤31-步骤34。
模块1所述的具体执行以下步骤:
步骤11、候选代码片段筛选:对于待检测代码片段(code),在原有方法候选代码列表(candidateSet1)的基础上,通过查询克隆关系网络,查询所有聚簇中心节点,作为本方法的候选代码列表(candidateSet2),通过交集计算公式candidateSet1∩candidateSet2得到最终的候选代码片段集合(candidateSet)。
步骤12、克隆检测算法运行:遍历对步骤11中得到的候选代码片段(candidateSet),对每个元素candidate,利用现有克隆检测方法检测code与candidate之间的克隆关系。
步骤13、动态构建知识图谱接口调用:步骤12中如果发现克隆关系,则利用模块21更新知识图谱,将待检测代码片段加入到已有克隆聚簇中,至此完成了模块1的操作,并可退出后续检测;如果未发现克隆关系,则利用模块22更新知识图谱,将待检测代码片段以新聚簇中心的形式加入到知识图谱中。
模块2所述的具体包括以下子模块:
模块21、存在克隆关系代码片段更新子模块:如果待检测代码片段在步骤12中检测到了候选代码片段中存在克隆关系,则在知识图谱中将待检测代码片段以新节点的形式插入,同时添加候选代码片段对应的聚簇中心节点到该节点的有向边;其中聚簇中心节点到该节点的有向边表示克隆关系
模块22、不存在克隆关系代码片段更新子模块:如果待检测代码片段在步骤12中未检测到候选代码片段中存在克隆关系,则在知识图谱中将待检测代码片段以新节点的形式插入,同时将该节点作为新的聚簇中心节点,因为该节点与知识图谱中其他节点不存在克隆关系。
模块3所述的具体执行以下步骤:
步骤31、查询聚簇中心节点:查找所有聚簇中心节点,形成聚簇中心节点列表centralList,列表中的元素表示聚簇中心节点对应的代码片段;
步骤32、克隆节点查询:遍历centralList中每个聚簇中心节点central,查询与该节点具有克隆关系的聚簇中所有非中心节点,与该节点central共同形成聚簇节点列表nodeList;
步骤33、克隆对构建:将centralList中的元素两两组合形成元组,即可形成单个聚簇的克隆对集合centralCloneSet;
步骤34、克隆对列表构建:将步骤32得到的所有centralCloneSet求并集,得到的集合cloneSet,即所有克隆对集合。
该方法基于克隆知识图谱,利用现有的克隆检测结果对候选检测集合进行过滤,从而提升克隆检测速度,该方法充分考虑了开源世界中代码重复性严重这一特点,并且代码规模越大,速度提升效果越明显。该方法没有对开发语言的依赖性,因此可以适用于现有所有克隆检测方法。
应该理解的是,虽然图1-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-3中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图4所示,提供了一种基于知识图谱的代码克隆检测优化装置,包括待检测代码片段获取模块、克隆检测准备模块、克隆检测模块、克隆知识图谱构建模块和克隆检测结果确定模块,其中:
待检测代码片段获取模块,用于获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个待检测代码片段组成待检测代码片列表。
克隆检测准备模块,用于将待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空。
克隆检测模块,用于根据初始知识图谱中的聚簇中心节点信息,对当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合;采用预设克隆检测方法检测每个待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果。
克隆知识图谱构建模块,用于根据克隆检测结果、当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
克隆检测结果确定模块,用于根据克隆知识图谱,得到优化后的所有克隆对集合。
在其中一个实施例中,聚簇是初始知识图谱中具有克隆关系的节点形成的;其中聚簇的中心节点是第一个加入每个聚簇的节点;克隆检测模块,还用于查询初始知识图谱中所有的聚簇中心节点,并根据聚簇中心节点信息对当前待检测代码片段对应的候选代码片段集合进行筛选;并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合取交集后,得到优化后的候选代码片段集合。
在其中一个实施例中,克隆检测模块,还用于遍历每个优化后候选代码片段集合中的候选代码片段,利用预设克隆检测算法检测每个待检测代码片段与对应的候选代码片段是否存在克隆关系,得到每个待检测代码片段的克隆检测结果。
在其中一个实施例中,克隆检测结果包括待检测代码片段与候选代码片段中存在克隆关系,待检测代码片段与候选代码片段中不存在克隆关系;克隆知识图谱构建模块,还用于当克隆检测结果为当前待检测代码片段与候选代码片段存在克隆关系时,在初始知识图谱中将当前待检测代码片段以新节点的形式插入,并添加候选代码片段对应的聚簇中心节点到该节点的有向边,节点的有向边代表克隆关系;当克隆检测结果为当前待检测代码片段与候选代码片段中不存在克隆关系时,在初始知识图谱中将当前待检测代码片段以新节点的形式插入,同时将该节点作为新的聚簇中心节点;将待检测代码片列表中的下一个元素作为当前待检测代码片段集合,并进行下一次克隆检测,直到待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
在其中一个实施例中,克隆检测结果确定模块,还用于查询克隆知识图谱中所有聚簇节点,形成聚簇节点列表;其中聚簇节点列表中的元素表示聚簇中心节点对应的代码片段;遍历聚簇节点列表中每个聚簇中心节点,查询与每个聚簇中心节点具有克隆关系的聚簇中所有非中心节点,得到聚簇节点列表,聚簇节点列表中的元素为与聚簇中心节点具有克隆关系的聚簇中所有非中心节点和该聚簇中心节点组成的元素;将聚簇节点列表中的元素两两组合形成元组,得到单个聚簇的克隆对集合;将所有单个聚簇的克隆对集合取并集,得到优化后的所有克隆对集合。
在其中一个实施例中,待检测代码片段获取模块,还用于采用预定筛选策略对每个待检测代码片段进行筛选,得到对应的初始候选代码片段集合;其中预定筛选策略为根据编程语言筛选无关代码文件中的代码片段和/或根据代码片段是否包含相同子字符串。
关于基于知识图谱的代码克隆检测优化装置的具体限定可以参见上文中对于基于知识图谱的代码克隆检测优化方法的限定,在此不再赘述。上述基于知识图谱的代码克隆检测优化装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于知识图谱的代码克隆检测优化方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种电子设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现上式方法实施例中的步骤。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于知识图谱的代码克隆检测优化方法,其特征在于,所述方法包括:
获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表;
将所述待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空;
根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合;
采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果;
根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱;
根据所述克隆知识图谱,得到优化后的所有克隆对集合。
2.根据权利要求1所述的方法,其特征在于,聚簇是初始知识图谱中具有克隆关系的节点形成的;其中第一个加入每个聚簇的节点是聚簇的中心节点;
根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合,包括:
查询所述初始知识图谱中所有的聚簇中心节点,并根据聚簇中心节点信息对所述当前待检测代码片段对应的候选代码片段集合进行筛选;并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合取交集后,得到优化后的候选代码片段集合。
3.根据权利要求1所述的方法,其特征在于,采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果,包括:
遍历每个优化后候选代码片段集合中的候选代码片段,利用预设克隆检测算法检测每个所述待检测代码片段与对应的候选代码片段是否存在克隆关系,得到每个待检测代码片段的克隆检测结果。
4.根据权利要求1所述的方法,其特征在于,所述克隆检测结果包括待检测代码片段与候选代码片段中存在克隆关系,待检测代码片段与候选代码片段中不存在克隆关系;
根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱,包括:
当克隆检测结果为当前待检测代码片段与候选代码片段存在克隆关系时,在初始知识图谱中将所述当前待检测代码片段以新节点的形式插入,并添加候选代码片段对应的聚簇中心节点到该节点的有向边,所述节点的有向边代表克隆关系;
当克隆检测结果为当前待检测代码片段与候选代码片段中不存在克隆关系时,在所述初始知识图谱中将当前待检测代码片段以新节点的形式插入,同时将该节点作为新的聚簇中心节点;
将所述待检测代码片列表中的下一个元素作为当前待检测代码片段集合,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。
5.根据权利要求1所述的方法,其特征在于,根据所述克隆知识图谱,得到优化后的所有克隆对集合,包括:
查询所述克隆知识图谱中所有聚簇节点,形成聚簇节点列表;其中所述聚簇节点列表中的元素表示聚簇中心节点对应的代码片段;
遍历所述聚簇节点列表中每个聚簇中心节点,查询与每个聚簇中心节点具有克隆关系的聚簇中所有非中心节点,得到聚簇节点列表,所述聚簇节点列表中的元素为与聚簇中心节点具有克隆关系的聚簇中所有非中心节点和该聚簇中心节点组成的元素;
将聚簇节点列表中的元素两两组合形成元组,得到单个聚簇的克隆对集合;
将所有单个聚簇的克隆对集合取并集,得到优化后的所有克隆对集合。
6.根据权利要求1所述的方法,其特征在于,获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表,步骤中初始候选代码片段集合确定的具体步骤包括:
采用预定筛选策略对每个所述待检测代码片段进行筛选,得到对应的初始候选代码片段集合;其中所述预定筛选策略为根据编程语言筛选无关代码文件中的代码片段和/或根据代码片段是否包含相同子字符串。
7.一种基于知识图谱的代码克隆检测优化装置,其特征在于,所述装置包括:
待检测代码片段获取模块,用于获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表;
克隆检测准备模块,用于将所述待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空;
克隆检测模块,用于根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合;采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果;
克隆知识图谱构建模块,用于根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱;
克隆检测结果确定模块,用于根据所述克隆知识图谱,得到优化后的所有克隆对集合。
8.根据权利要求7所述的装置,其特征在于,聚簇是初始知识图谱中具有克隆关系的节点形成的;其中聚簇的中心节点是第一个加入每个聚簇的节点;
克隆检测模块,还用于查询所述初始知识图谱中所有的聚簇中心节点,并根据聚簇中心节点信息对所述当前待检测代码片段对应的候选代码片段集合进行筛选;并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合取交集后,得到优化后的候选代码片段集合。
9.根据权利要求7所述的装置,其特征在于,克隆检测模块,还用于遍历每个优化后候选代码片段集合中的候选代码片段,利用预设克隆检测算法检测每个所述待检测代码片段与对应的候选代码片段是否存在克隆关系,得到每个待检测代码片段的克隆检测结果。
10.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
CN202111516149.1A 2021-12-07 2021-12-07 基于知识图谱的代码克隆检测优化方法、装置和电子设备 Pending CN114138330A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111516149.1A CN114138330A (zh) 2021-12-07 2021-12-07 基于知识图谱的代码克隆检测优化方法、装置和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111516149.1A CN114138330A (zh) 2021-12-07 2021-12-07 基于知识图谱的代码克隆检测优化方法、装置和电子设备

Publications (1)

Publication Number Publication Date
CN114138330A true CN114138330A (zh) 2022-03-04

Family

ID=80385884

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111516149.1A Pending CN114138330A (zh) 2021-12-07 2021-12-07 基于知识图谱的代码克隆检测优化方法、装置和电子设备

Country Status (1)

Country Link
CN (1) CN114138330A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114780103A (zh) * 2022-04-26 2022-07-22 中国人民解放军国防科技大学 一种基于图匹配网络的语义类代码克隆检测方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114780103A (zh) * 2022-04-26 2022-07-22 中国人民解放军国防科技大学 一种基于图匹配网络的语义类代码克隆检测方法
CN114780103B (zh) * 2022-04-26 2022-12-20 中国人民解放军国防科技大学 一种基于图匹配网络的语义类代码克隆检测方法

Similar Documents

Publication Publication Date Title
EP3532949A1 (en) Change monitoring spanning graph queries
US10783163B2 (en) Instance-based distributed data recovery method and apparatus
US9697243B2 (en) Method and apparatus for searching node by using tree index
CN107239468B (zh) 任务节点管理方法及装置
US20220005546A1 (en) Non-redundant gene set clustering method and system, and electronic device
WO2022267457A1 (zh) 电子表格数据处理方法、装置、设备及存储介质
CN109299101B (zh) 数据检索方法、装置、服务器和存储介质
CN110021345B (zh) 基于spark平台的基因数据分析方法
CN114138330A (zh) 基于知识图谱的代码克隆检测优化方法、装置和电子设备
CN106407233A (zh) 一种数据处理方法和设备
CN108108251B (zh) 一种基于MPI并行化的参考点k近邻分类方法
Dai et al. Core decomposition on uncertain graphs revisited
US10970285B2 (en) Grid topology change in a distributed data grid when iterating on the contents of the data grid
CN104778088A (zh) 一种基于减少进程间通信开销的并行i/o优化方法与系统
CN103761298A (zh) 一种基于分布式架构的实体匹配方法
CN111767546A (zh) 一种基于深度学习的输入结构推断方法和装置
US20200142910A1 (en) Data clustering apparatus and method based on range query using cf tree
CN115358308A (zh) 一种大数据实例约简方法、装置、电子设备及存储介质
CN106776704B (zh) 统计信息收集方法和装置
Lu et al. On the auto-tuning of elastic-search based on machine learning
CN112183567B (zh) Birch算法的优化方法、装置、设备及存储介质
CN114896418A (zh) 知识图谱构建方法、装置、电子设备及存储介质
CN115168085A (zh) 一种基于diff代码块匹配的重复冲突方案检测方法
CN115221360A (zh) 树形结构配置方法和系统
WO2021012211A1 (zh) 一种为数据建立索引的方法以及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination