获取代码片段的方法、装置及存储介质与流程

文档序号:36912674发布日期:2024-02-02 21:41阅读:14来源:国知局
获取代码片段的方法、装置及存储介质与流程

本技术涉及软件工程领域,特别涉及一种获取代码片段的方法、装置及存储介质。


背景技术:

1、一个程序文件中的一个代码片段可能与另一个程序文件中的某个代码片段相似,目前可以获取相似的两个代码片段。获取相似代码片段的技术一直是软件工程领域的一个重要研究方向,在重复代码识别、公共代码挖掘或侵权识别等多个场景都有广泛地应用。

2、对于一个程序文件,从该程序文件中选择一个代码块作为待处理代码块,获取待处理代码块的多个代码语句集合,每个代码语句集合包括待处理代码块中的连续m个代码语句,m为大于1的整数且每个代码语句集合不同。基于该多个代码语句集合,从程序库中获取目标代码块,该程序库包括大量程序文件中的代码块和各代码块的多个代码语句集合,且目标代码块的多个代码语句集合与待处理代码块的多个代码语句集合之间存在超过指定个数的相同代码语句集合。将待处理代码块与目标代码块作为相似的两个代码片段。

3、目前在目标代码块的代码语句集合与待处理代码块的代码语句集合之间存在超过指定个数的相同代码语句集合时,将待处理代码块与目标代码块作为相似的两个代码片段,导致获取相似代码片段的召回率较低。


技术实现思路

1、本技术提供了一种获取代码片段的方法、装置及存储介质,提高获取相似代码片段的召回率。所述技术方案如下:

2、第一方面,本技术提供了一种获取代码片段的方法,在所述方法中,获取待处理代码片段的特征集合,待处理代码片段包括多个代码语句,待处理代码片段的特征集合包括待处理代码片段中的代码语句对应的至少一个内容特征。基于该特征集合获取第一程序文件,第一程序文件包括该特征集合中的内容特征对应的目标代码语句。基于目标代码语句从第一文件中获取目标代码片段,目标代码片段的特征集合与待处理代码片段的特征集合之间满足相似条件,目标代码片段的特征集合包括目标代码片段中的代码语句对应的至少一个内容特征,目标代码片段是与待处理代码片段相似的代码片段。

3、由于待处理代码片段的特征集合包括待处理代码片段中的代码语句对应的至少一个内容特征,通过两个代码语句的内容特征可以准确得出两个代码语句是否相同或相似。这样基于该特征集合获取第一程序文件和第一程序文件包括的该特征集合中的内容特征对应的目标代码语句。基于目标代码语句从第一文件中获取与待处理代码片段相似的目标代码片段,可以提高获取与待处理代码片段相似的代码片段的精度,从而提高了获取相似代码片段的召回率。

4、在一种可能的实现方式中,将待处理代码片段和目标代码片段确定为公共代码片段并保存到公共代码库中,这样可以实现公共代码挖掘。

5、在另一种可能的实现方式中,待处理代码片段是包括漏洞的代码片段,目标代码片段也包括该漏洞,对目标代码片段包括的该漏洞进行修复。由于待处理代码片段包括漏洞,与待处理代码片段相似的目标代码片段也包括该漏洞,通过相似代码片段检测可以快速得到存在该漏洞的第一程序文件,以快速修复第一程序文件中的该漏洞,提高修复效率。

6、在另一种可能的实现方式中,显示侵权提示信息,该侵权提示信息用于提示待处理代码片段侵犯第一程序文件的版权。这样帮助技术人员进行侵权判断。

7、在另一种可能的实现方式中,基于倒排索引映射关系和该特征集合获取第一程序文件,该倒排索引映射关系中的每条记录包括一个内容特征,该内容特征对应的至少一个代码语句的语句标识和该至少一个代码语句中的每个代码语句属于的程序文件的文件标识。由于基于该特征集合中的内容特征,从倒排索引映射关系中直接查找出对应的代码语句和程序文件,这样从查找出的程序文件中寻找与待处理代码片段相似的代码片段,从而减小需要检测的程序文件的数量,能够提高获取相似代码片段的效率。

8、在另一种可能的实现方式中,从第一程序文件中获取第一代码片段,第一代码片段包括至少一个目标代码语句集合,每个目标代码语句集合包括连续的至少一个目标代码语句,在第一代码片段中相邻两个目标代码语句集合之间间隔的代码语句个数不超过第一阈值。获取第一代码片段的特征集合,第一代码片段的特征集合包括第一代码片段中的代码语句对应的至少一个内容特征。在第一代码片段的特征集合和待处理代码片段的特征集合之间满足相似条件时,将第一代码片段确定为与待处理代码片段相似的目标代码片段。

9、如果两个代码语句的内容特征相同,该两个代码语句相同。如果两个代码语句之间存在较多的共同内容特征,则该两个代码语句相似。所以通过代码语句的内容特征,可以得到相同或相似的两个代码语句。第一代码片段的特征集合和待处理代码片段的特征集合之间满足相似条件,实质是待处理代码片段中的代码语句和第一代码片段中的代码语句相似,从而可以将第一代码片段作为与待处理代码片段相似的目标代码片段,这样可以提高获取相似代码片段的召回率。

10、在另一种可能的实现方式中,相似条件是指第一特征集合包括的内容特征个数与待处理代码片段的特征集合包括的内容特征个数之间的比例超过第一比例阈值,以及第一特征集合包括的内容特征个数与目标代码片段的特征集合包括的内容特征个数之间的比例超过第二比例阈值,第一特征集合是目标代码片段的特征集合与待处理代码片段的特征集合之间的交集。这样通过该相似条件提高获取相似代码片段的精度。

11、在另一种可能的实现方式中,待处理代码片段包括的代码语句个数不超过第一个数阈值,和/或,所述目标代码片段包括的代码语句个数不超过第二个数阈值。目前将代码块作为一个代码片段,有时代码块往往包括比较多的代码语句,使用目前方法可能将该两个代码块确定为不相似的代码块,但该两个代码块之间可能有一部分代码语句是相似的。而在该实现方式中对代码片段的长度进行限制,可以检测出该两个代码块之间相似的部分代码语句,从而更能提高召回率。

12、在另一种可能的实现方式中,获取第一代码语句的至少一个标记token序列,待处理代码片段包括第一代码语句,该token序列包括第一代码语句中的连续至少一个token。基于该至少一个token序列,获取第一代码语句的至少一个内容特征。如此实现了获取代码语句的至少一个内容特征。

13、在另一种可能的实现方式中,基于待处理代码片段建立抽象语法树,抽象语法树包括待处理代码片段中的代码语句对应的至少一个节点,至少一节点用于表示该代码语句的语法结构。基于该至少一个节点,获取该代码语句的至少一个内容特征。如此实现了获取代码语句的至少一个内容特征。

14、在另一种可能的实现方式中,获取至少一个程序文件,至少一个程序文件包括第一程序文件。基于该至少一个程序文件,建立倒排索引映射关系。

15、在另一种可能的实现方式中,基于第二代码语句,获取第二代码语句对应的内容特征,第一程序文件包括第二代码语句。向倒排索引映射关系保存第二代码语句对应的内容特征、第一程序文件的文件标识和第二代码语句的语句标识之间的映射关系。

16、第二方面,本技术提供了一种获取代码片段的装置,用于执行第一方面或第一方面的任意一种可能的实现方式中的方法。具体地,所述装置包括用于执行第一方面或第一方面的任意一种可能的实现方式中的方法的单元。

17、第三方面,本技术提供了一种计算机设备,包括至少一个处理器和存储器,所述至少一个处理器用于与存储器耦合,读取并执行所述存储器中的指令,以实现第一方面或第一方面的任意一种可能的实现方式中的方法。

18、第四方面,本技术提供了一种计算机程序产品,所述计算机程序产品包括在计算机可读存储介质中存储的计算机程序,并且所述计算程序通过处理器进行加载来实现上述第一方面或第一方面任意可能的实现方式的方法。

19、第五方面,本技术提供了一种计算机可读存储介质,用于存储计算机程序,所述计算机程序通过处理器进行加载来执行上述第一方面或第一方面任意可能的实现方式的方法。

20、第六方面,本技术提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面或第一方面任意可能的实现方式的方法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1