CN114138330A - 基于知识图谱的代码克隆检测优化方法、装置和电子设备 - Google Patents
基于知识图谱的代码克隆检测优化方法、装置和电子设备 Download PDFInfo
- 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.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 142
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000005457 optimization Methods 0.000 title claims abstract description 17
- 239000012634 fragment Substances 0.000 claims abstract description 69
- 238000012216 screening Methods 0.000 claims abstract description 63
- 238000010367 cloning Methods 0.000 claims description 20
- 238000004422 calculation algorithm Methods 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 7
- 238000002360 preparation method Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 7
- 238000010276 construction Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/36—Creation of semantic tools, e.g. ontology or thesauri
- G06F16/367—Ontology
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)
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中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111516149.1A CN114138330B (zh) | 2021-12-07 | 2021-12-07 | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111516149.1A CN114138330B (zh) | 2021-12-07 | 2021-12-07 | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114138330A true CN114138330A (zh) | 2022-03-04 |
CN114138330B CN114138330B (zh) | 2024-07-26 |
Family
ID=80385884
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111516149.1A Active CN114138330B (zh) | 2021-12-07 | 2021-12-07 | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138330B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780103A (zh) * | 2022-04-26 | 2022-07-22 | 中国人民解放军国防科技大学 | 一种基于图匹配网络的语义类代码克隆检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110246968A1 (en) * | 2010-04-01 | 2011-10-06 | Microsoft Corporation | Code-Clone Detection and Analysis |
CN107608732A (zh) * | 2017-09-13 | 2018-01-19 | 扬州大学 | 一种基于bug知识图谱的bug搜索定位方法 |
CN111241307A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 面向软件系统的软件项目及第三方库知识图谱构造方法 |
-
2021
- 2021-12-07 CN CN202111516149.1A patent/CN114138330B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110246968A1 (en) * | 2010-04-01 | 2011-10-06 | Microsoft Corporation | Code-Clone Detection and Analysis |
CN107608732A (zh) * | 2017-09-13 | 2018-01-19 | 扬州大学 | 一种基于bug知识图谱的bug搜索定位方法 |
CN111241307A (zh) * | 2020-01-23 | 2020-06-05 | 复旦大学 | 面向软件系统的软件项目及第三方库知识图谱构造方法 |
Non-Patent Citations (1)
Title |
---|
陈秋远: "代码克隆检测研究进展", 《软件学报》, vol. 30, no. 4, 30 April 2019 (2019-04-30), pages 962 - 980 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114780103A (zh) * | 2022-04-26 | 2022-07-22 | 中国人民解放军国防科技大学 | 一种基于图匹配网络的语义类代码克隆检测方法 |
CN114780103B (zh) * | 2022-04-26 | 2022-12-20 | 中国人民解放军国防科技大学 | 一种基于图匹配网络的语义类代码克隆检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114138330B (zh) | 2024-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017096892A1 (zh) | 索引构建方法、查询方法及对应装置、设备、计算机存储介质 | |
US10783163B2 (en) | Instance-based distributed data recovery method and apparatus | |
EP3532949A1 (en) | Change monitoring spanning graph queries | |
US20220005546A1 (en) | Non-redundant gene set clustering method and system, and electronic device | |
WO2022267457A1 (zh) | 电子表格数据处理方法、装置、设备及存储介质 | |
CN107239468B (zh) | 任务节点管理方法及装置 | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
US9697243B2 (en) | Method and apparatus for searching node by using tree index | |
US20200364183A1 (en) | Device and method for managing ledger data on blockchain | |
CN115358308A (zh) | 一种大数据实例约简方法、装置、电子设备及存储介质 | |
CN106776704B (zh) | 统计信息收集方法和装置 | |
CN114138330B (zh) | 基于知识图谱的代码克隆检测优化方法、装置和电子设备 | |
Dai et al. | Core decomposition on uncertain graphs revisited | |
CN110021345B (zh) | 基于spark平台的基因数据分析方法 | |
CN106407233A (zh) | 一种数据处理方法和设备 | |
US20240006026A1 (en) | Genome assembly method, apparatus, device and storage medium | |
CN103761298A (zh) | 一种基于分布式架构的实体匹配方法 | |
CN108108251B (zh) | 一种基于MPI并行化的参考点k近邻分类方法 | |
CN104778088A (zh) | 一种基于减少进程间通信开销的并行i/o优化方法与系统 | |
WO2021012211A1 (zh) | 一种为数据建立索引的方法以及装置 | |
CN111767546A (zh) | 一种基于深度学习的输入结构推断方法和装置 | |
US20160253386A1 (en) | Grid topology change in a distributed data grid when iterating on the contents of the data grid | |
US20200142910A1 (en) | Data clustering apparatus and method based on range query using cf tree | |
Lu et al. | On the auto-tuning of elastic-search based on machine learning | |
CN114896418A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |