System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 用于检测代码克隆的系统和方法技术方案_技高网

用于检测代码克隆的系统和方法技术方案

技术编号:41129107 阅读:4 留言:0更新日期:2024-04-30 17:57
描述了用于检测软件程序中的代码克隆的方法和设备。所述软件程序的所述源代码被处理成n‑gram表示组。克隆索引是为所述归一化源代码中定义的每个相应代码部分生成的,其中,每个克隆索引包括特征向量,所述特征向量基于对应于所述相应代码部分的所述n‑gram表示对所述相应代码部分的特征进行编码。所述克隆索引的比较用于基于匹配所述克隆索引的所述特征向量来检测代码克隆。

【技术实现步骤摘要】
【国外来华专利技术】

本专利技术涉及用于检测代码克隆的系统和方法,尤其涉及用于在不同抽象级别和/或粒度级别检测代码克隆的系统和方法。


技术介绍

1、代码克隆(也称为重复代码)是指彼此相同或相似的代码片段。代码片段是源代码行的序列。两个代码片段可以被认为是彼此不完全相同的克隆。例如,仅在空格字符和/或注释(或其它非功能性代码行)的使用上不同的两个代码片段可以被认为是彼此的克隆。在较高的抽象级别彼此相似(例如,在功能上彼此相同,而不是在字符级别完全相同)的两个代码片段也可以被认为是代码克隆。

2、检测代码克隆对于代码搜索、重构和缺陷检测等软件任务非常重要。检测代码克隆通常很重要,因为代码克隆可能会降低软件性能(例如,导致代码文件更大,从而需要更多的内存和处理器资源来存储和/或编译代码)。代码克隆还会使软件维护更复杂(例如,更新软件可能需要更新克隆的代码片段的所有实例)。此外,代码克隆存在软件漏洞在软件中重复出现的风险,并且这个风险在尝试修复漏洞时可能会被遗漏。现有的代码克隆检测技术通常被设计为只检测特定类型的代码克隆。此外,现有的技术通常适用于相对较小的软件(例如,有几万行代码),而不可以扩展用于较大的软件(例如,有数百万行代码)。

3、因此,提供一种能够检测软件中的代码克隆的方案将是有用的,该方案对于不同类型的代码克隆和/或不同软件大小都是实用的。


技术实现思路

1、在各种示例中,本专利技术描述了能够在不同抽象级别和不同粒度级别检测代码克隆的系统和方法。

2、本专利技术的示例使得能够在不同抽象级别和不同粒度级别检测代码克隆。克隆索引数据库填充有从代码行的n-gram表示生成的克隆索引。这提供了可以对代码克隆进行行级检测的技术优势,以及所公开的系统和方法可扩展用于分析较大的软件程序的优势。

3、在一些示例中,所公开的系统和方法可以实现为提供代码克隆检测并向客户端生成报告的服务(例如,基于云的服务)。

4、在一些示例中,所公开的系统和方法能够创建和维护克隆索引,该克隆索引可以用于检测例如单个文件中、跨多个文件或跨软件系统的已知代码克隆。

5、所公开的系统和方法可以实现对可能是软件漏洞或可能是恶意代码的代码克隆的检测。所公开的系统和方法还可以实现对代码抄袭或版权侵权的检测。所公开的系统和方法还可以实现对广泛克隆的代码片段的检测,这些代码片段可以是代码库的合适候选者。

6、在示例性方面,本专利技术描述了一种方法,所述方法包括:获得包括源代码的软件程序;将所述源代码处理成n-gram表示组,每个n-gram表示组对应于所述源代码中的相应代码行;为所述源代码中定义的每个相应代码部分生成克隆索引,每个相应代码部分包括定义数量的代码行,其中,每个克隆索引包括特征向量,所述特征向量基于对应于所述相应代码部分的所述n-gram表示对所述相应代码部分的特征进行编码;通过比较所述克隆索引,基于匹配所述克隆索引的所述特征向量,检测代码克隆。

7、在所述方法的上述示例性方面的示例中,所述方法还可以包括:输出代码克隆报告,所述代码克隆报告包括指示检测到的代码克隆的条目。

8、在所述方法的任一上述示例性方面的示例中,将所述源代码处理为所述n-gram表示组可以包括:将所述源代码处理为具有通用格式的格式化源代码;根据抽象级别将所述格式化源代码转换为抽象源代码;将所述抽象源代码归一化为包括词语(token)序列的归一化源代码,其中,每个词语序列对应于所述归一化源代码中的相应代码行,并且其中,所述归一化源代码中的每个代码行对应于所述源代码中的相应代码行;为每个词语序列生成对应于所述相应代码行的所述n-gram表示组。

9、在所述方法的上述示例性方面的示例中,将所述格式化源代码转换为所述抽象源代码可以包括:获得对所述抽象级别的选择,其中,所述抽象级别定义所述格式化源代码中要被替换为相应通用标签的一种或多种类型的标识符;将所述格式化源代码中的所述定义的一种或多种类型的标识符替换为所述相应通用标签,以获得所述抽象源代码。

10、在所述方法的上述示例性方面的示例中,所述抽象级别可通过用户输入选择。

11、在所述方法的任一上述示例性方面的示例中,所述定义数量的代码行可通过用户输入选择。

12、在所述方法的任一上述示例性方面的示例中,为给定代码部分生成所述克隆索引可以包括:生成对所述给定代码部分的特征进行编码的所述特征向量,其中,生成所述特征向量可以包括:基于对应于所述给定代码部分的所述n-gram表示,从所述给定代码部分提取特征;对于每个特征,生成相应的加权哈希向量;将所述加权哈希向量组合为组合向量,用作所述特征向量。

13、在所述方法的上述示例性方面的示例中,从所述给定代码部分提取特征可以包括:通过收集与属于所述给定代码部分的每个代码行相对应的所述n-gram表示组,获得对应于所述给定代码部分的n-gram表示的集合;从所述给定代码部分提取所述特征,其中,所述n-gram表示的集合中的每个n-gram表示是所述给定代码部分的特征,并且其中,所述n-gram表示的集合中的每个特征的计数是相应的权重。

14、在所述方法的任一上述示例性方面的示例中,为每个特征生成所述相应的加权哈希向量可以包括:对于每个特征,使用哈希算法生成相应的哈希向量;对于对应于相应特征的每个哈希向量,应用所述相应的权重,以获得所述相应的加权哈希向量。

15、在所述方法的任一上述示例性方面的示例中,所述组合向量可以被进一步转换为二进制组合向量,以用作所述特征向量。

16、在所述方法的任一上述示例性方面的示例中,给定代码部分的所述克隆索引可以包括所述源代码的标识符、所述给定代码部分在所述源代码中的位置的指示符以及对所述给定代码部分的特征进行编码的所述特征向量。

17、在所述方法的任一上述示例性方面的示例中,所述源代码中定义的每个代码部分可以通过滑动窗口定义,每个代码部分中的所述定义数量的代码行可以由所述滑动窗口的大小定义。

18、在所述方法的任一上述示例性方面的示例中,所述方法可以包括:将所述克隆索引存储在克隆索引数据库中。

19、在所述方法的任一上述示例性方面的示例中,检测所述代码克隆可以包括将和所述软件程序相关联的所述克隆索引与和另一软件程序相关联的克隆索引进行比较。

20、在一些示例性方面中,本专利技术描述了一种设备,所述设备包括:处理单元,用于执行指令以使所述设备进行以下操作:将所述源代码处理成n-gram表示组,每个n-gram表示组对应于所述源代码中的相应代码行;为所述源代码中定义的每个相应代码部分生成克隆索引,每个相应代码部分包括定义数量的代码行,其中,每个克隆索引包括特征向量,所述特征向量基于对应于所述相应代码部分的所述n-gram表示对所述相应代码部分的特征进行编码;通过比较所述克隆索引,基于匹配所述克隆索引的所述特征向量,检测代码克隆。

21、在所述设备的本文档来自技高网...

【技术保护点】

1.一种方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

3.根据权利要求1或2所述的方法,其特征在于,将所述源代码处理为所述n-gram表示组包括:

4.根据权利要求3所述的方法,其特征在于,将所述格式化源代码转换为所述抽象源代码包括:

5.根据权利要求4所述的方法,其特征在于,所述抽象级别可通过用户输入选择。

6.根据权利要求1至5中任一项所述的方法,其特征在于,所述定义数量的代码行可通过用户输入选择。

7.根据权利要求1至6中任一项所述的方法,其特征在于,为给定代码部分生成所述克隆索引包括:生成对所述给定代码部分的特征进行编码的所述特征向量,其中,生成所述特征向量包括:

8.根据权利要求7所述的方法,其特征在于,从所述给定代码部分提取特征包括:

9.根据权利要求7或8所述的方法,其特征在于,为每个特征生成所述相应的加权哈希向量包括:

10.根据权利要求7至9中任一项所述的方法,其特征在于,所述组合向量被进一步转换为二进制组合向量,以用作所述特征向量。

11.根据权利要求1至10中任一项所述的方法,其特征在于,给定代码部分的所述克隆索引包括所述源代码的标识符、所述给定代码部分在所述源代码中的位置的指示符以及对所述给定代码部分的特征进行编码的所述特征向量。

12.根据权利要求1至11中任一项所述的方法,其特征在于,所述源代码中定义的每个代码部分通过滑动窗口定义,每个代码部分中的所述定义数量的代码行由所述滑动窗口的大小定义。

13.根据权利要求1至12中任一项所述的方法,其特征在于,所述方法还包括:

14.根据权利要求1至13中任一项所述的方法,其特征在于,检测所述代码克隆包括将和所述软件程序相关联的所述克隆索引与和另一软件程序相关联的克隆索引进行比较。

15.一种设备,其特征在于,所述设备包括:

16.根据权利要求15所述的设备,其特征在于,所述处理单元用于执行所述指令以进一步使所述设备进行以下操作:

17.根据权利要求15或16所述的设备,其特征在于,所述处理单元用于执行所述指令,以进一步使所述设备通过以下操作将所述源代码处理为所述n-gram表示组:

18.根据权利要求17所述的设备,其特征在于,所述处理单元用于执行所述指令以进一步使所述设备通过以下操作将所述格式化源代码转换为所述抽象源代码:

19.根据权利要求18所述的设备,其特征在于,所述抽象级别可通过用户输入选择。

20.根据权利要求15至19中任一项所述的设备,其特征在于,所述定义数量的代码行可通过用户输入选择。

21.根据权利要求15至20中任一项所述的设备,其特征在于,所述处理单元用于执行所述指令,以进一步使所述设备通过生成对给定代码部分的特征进行编码的所述特征向量来为所述给定代码部分生成所述克隆索引,其中,生成所述特征向量包括:

22.根据权利要求21所述的设备,其特征在于,所述处理单元用于执行所述指令,以进一步使所述设备通过以下操作从所述给定代码部分提取特征:

23.根据权利要求21或22所述的设备,其特征在于,所述处理单元用于执行所述指令,以进一步使所述设备通过以下操作为每个特征生成所述相应的加权哈希向量:

24.根据权利要求21至23中任一项所述的设备,其特征在于,所述组合向量被进一步转换为二进制组合向量,以用作所述特征向量。

25.根据权利要求15至24中任一项所述的设备,其特征在于,给定代码部分的所述克隆索引包括所述源代码的标识符、所述给定代码部分在所述源代码中的位置的指示符以及对所述给定代码部分的特征进行编码的所述特征向量。

26.根据权利要求15至25中任一项所述的设备,其特征在于,所述源代码中定义的每个代码部分通过滑动窗口定义,每个代码部分中的所述定义数量的代码行由所述滑动窗口的大小定义。

27.根据权利要求15至26中任一项所述的设备,其特征在于,所述处理单元用于执行所述指令以进一步使所述设备进行以下操作:

28.根据权利要求15至27中任一项所述的设备,其特征在于,所述处理单元用于执行所述指令以进一步使所述设备通过将和所述软件程序相关联的所述克隆索引与和另一软件程序相关联的克隆索引进行比较来检测所述代码克隆。

29.一种编码有指令的计算机可读介质,其特征在于,所述指令可由设备的处理单元执行,以使所述设备执行根据权利要求1至14中任一项所述的方法。

...

【技术特征摘要】
【国外来华专利技术】

1.一种方法,其特征在于,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

3.根据权利要求1或2所述的方法,其特征在于,将所述源代码处理为所述n-gram表示组包括:

4.根据权利要求3所述的方法,其特征在于,将所述格式化源代码转换为所述抽象源代码包括:

5.根据权利要求4所述的方法,其特征在于,所述抽象级别可通过用户输入选择。

6.根据权利要求1至5中任一项所述的方法,其特征在于,所述定义数量的代码行可通过用户输入选择。

7.根据权利要求1至6中任一项所述的方法,其特征在于,为给定代码部分生成所述克隆索引包括:生成对所述给定代码部分的特征进行编码的所述特征向量,其中,生成所述特征向量包括:

8.根据权利要求7所述的方法,其特征在于,从所述给定代码部分提取特征包括:

9.根据权利要求7或8所述的方法,其特征在于,为每个特征生成所述相应的加权哈希向量包括:

10.根据权利要求7至9中任一项所述的方法,其特征在于,所述组合向量被进一步转换为二进制组合向量,以用作所述特征向量。

11.根据权利要求1至10中任一项所述的方法,其特征在于,给定代码部分的所述克隆索引包括所述源代码的标识符、所述给定代码部分在所述源代码中的位置的指示符以及对所述给定代码部分的特征进行编码的所述特征向量。

12.根据权利要求1至11中任一项所述的方法,其特征在于,所述源代码中定义的每个代码部分通过滑动窗口定义,每个代码部分中的所述定义数量的代码行由所述滑动窗口的大小定义。

13.根据权利要求1至12中任一项所述的方法,其特征在于,所述方法还包括:

14.根据权利要求1至13中任一项所述的方法,其特征在于,检测所述代码克隆包括将和所述软件程序相关联的所述克隆索引与和另一软件程序相关联的克隆索引进行比较。

15.一种设备,其特征在于,所述设备包括:

16.根据权利要求15所述的设备,其特征在于,所述处理单元用于执行所述指令以进一步使所述设备进行以下操作:

17.根据权利要求15或16所述的设备,其特征在于,所述处理单元用于执行所述指令,以进一步使所述设备通过以下操作将所述源代码处理为所述n-gram表示组:

18.根据权利要求17所述的...

【专利技术属性】
技术研发人员:陈金富王原邱栋夏鑫
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1