【技术实现步骤摘要】
基于知识图谱的代码克隆检测优化方法、装置和电子设备
[0001]本申请涉及软件克隆
,特别是涉及一种基于知识图谱的代码克隆检测优化方法、装置和电子设备。
技术介绍
[0002]代码克隆作为软件复用的重要手段,一方面加速了软件的开发效率,另一方面也带来了软件质量问题,增加了软件缺陷修复的困难,带来了软件知识产权保护的问题。基于这些原因,学术界和工业界涌现出了大量代码克隆检测相关研究和大量克隆检测算法,其中一些算法关注于克隆检测的效率(执行时间)。
[0003]然而对于现有开源世界来说,开源项目众多,代码量巨大,且克隆情况严重。因此现有的方法很难快速实现对这种规模代码的克隆检测。
技术实现思路
[0004]基于此,有必要针对上述技术问题,提供一种基于知识图谱的代码克隆检测优化方法、装置和电子设备。该方法现有代码克隆检测算法检测效率无法适应大规模开源代码的问题,在代码检测过程中动态构建克隆关系知识图谱,利用知识图谱对克隆检测的候选代码片段进行筛选,减少克隆检测次数,进而优化现有克隆检测方法,提升克隆检 ...
【技术保护点】
【技术特征摘要】
1.一种基于知识图谱的代码克隆检测优化方法,其特征在于,所述方法包括:获取多个待检测代码片段以及采用预定筛选策略对每个待检测代码片段对应的候选代码片段集合进行筛选得到的对应初始候选代码片段集合,并将多个所述待检测代码片段组成待检测代码片列表;将所述待检测代码片列表中的第一个元素作为当前待检测代码片段;并设置初始知识图谱为空;根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合;采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果;根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱;根据所述克隆知识图谱,得到优化后的所有克隆对集合。2.根据权利要求1所述的方法,其特征在于,聚簇是初始知识图谱中具有克隆关系的节点形成的;其中第一个加入每个聚簇的节点是聚簇的中心节点;根据所述初始知识图谱中的聚簇中心节点信息,对所述当前待检测代码片段对应的候选代码片段集合进行筛选,并根据得到的筛选结果和当前待检测代码片段所对应的初始候选代码片段集合,得到当前待检测代码片段对应的优化后的候选代码片段集合,包括:查询所述初始知识图谱中所有的聚簇中心节点,并根据聚簇中心节点信息对所述当前待检测代码片段对应的候选代码片段集合进行筛选;并根据得到的筛选结果和当前待检测代码片段对应的初始候选代码片段集合取交集后,得到优化后的候选代码片段集合。3.根据权利要求1所述的方法,其特征在于,采用预设克隆检测方法检测每个所述待检测代码片段与对应的优化后的候选代码片段集合中的每个候选代码片段之间的克隆关系,得到克隆检测结果,包括:遍历每个优化后候选代码片段集合中的候选代码片段,利用预设克隆检测算法检测每个所述待检测代码片段与对应的候选代码片段是否存在克隆关系,得到每个待检测代码片段的克隆检测结果。4.根据权利要求1所述的方法,其特征在于,所述克隆检测结果包括待检测代码片段与候选代码片段中存在克隆关系,待检测代码片段与候选代码片段中不存在克隆关系;根据所述克隆检测结果、所述当前待检测代码片段以及对应的最优候选代码片段集合对初始知识图谱进行动态更新,将所述待检测代码片列表中的下一个元素作为当前待检测代码片段,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱,包括:当克隆检测结果为当前待检测代码片段与候选代码片段存在克隆关系时,在初始知识图谱中将所述当前待检测代码片段以新节点的形式插入,并添加候选代码片段对应的聚簇中心节点到该节点的有向边,所述节点的有向边代表克隆关系;
当克隆检测结果为当前待检测代码片段与候选代码片段中不存在克隆关系时,在所述初始知识图谱中将当前待检测代码片段以新节点的形式插入,同时将该节点作为新的聚簇中心节点;将所述待检测代码片列表中的下一个元素作为当前待检测代码片段集合,并进行下一次克隆检测,直到所述待检测代码片列表中所有元素检测完为止,得到优化后的克隆知识图谱。5.根据权...
【专利技术属性】
技术研发人员:王涛,张迅晖,余跃,李志星,张晏芝,钟岩,王怀民,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。