System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于预训练模型的智能合约代码克隆语义相似性检测方法技术_技高网

基于预训练模型的智能合约代码克隆语义相似性检测方法技术

技术编号:41821398 阅读:4 留言:0更新日期:2024-06-24 20:35
本发明专利技术公开了一种基于预训练模型的智能合约代码克隆语义相似性检测方法,涉及代码克隆检测技术领域,包括以下步骤:步骤1、实现智能合约代码的向量化表示;步骤2、完成基于Cosine相似度的代码片段比较;步骤3、进行函数级别的精细检测;步骤4、进行智能合约漏洞关联分析;步骤5、进行聚类分析,并将检测结果可视化。本发明专利技术所提供的技术方案提供高精度检测、有更强的普适性,并且将代码克隆检测细化到函数级别,有利于精准定位代码复用区域。相较于其他高级智能合约检测工具,将检测效率约提高4%的准确率,并针对特定类型的安全漏洞进行针对性检测,增强对已知安全风险的防御能力,有助于提升整个智能合约生态系统的安全性。

【技术实现步骤摘要】

本专利技术涉及代码克隆检测,尤其涉及一种基于预训练模型的智能合约代码克隆语义相似性检测方法


技术介绍

1、代码克隆(code clone)是指在源代码中存在大量相似或完全相同的代码片段。代码克隆广泛存在于软件系统中,主要源于复制-粘贴(copy-paste)等不良编码习惯。过多的代码克隆会导致软件系统的可维护性(maintainability)和可读性(readability)下降,给后续的代码维护和演进带来诸多挑战。因此,及时有效地检测代码克隆对于保证代码质量至关重要。

2、传统的代码克隆检测技术主要基于文本(text-based)、词汇(lexical-based)、语法树(syntax tree-based)或程序依赖图(program dependency graph-based)等代码结构特征进行相似性比对。这些方法虽然在发现类型1(type-1)和类型2(type-2)等语法相似的克隆上效果较好,但在识别类型3(type-3)和类型4(type-4)等语义相似的克隆代码时,准确性往往较低。

3、随着深度学习技术在自然语言处理领域的迅猛发展,代码也开始被视为一种特殊的“语言”,可以借助语义建模技术来学习代码的语义表示。最近,一些基于深度学习的代码表示技术应运而生,如code2vec、code2sequence等。它们通过神经网络模型对代码进行有监督或无监督的嵌入(embedding),使得代码片段之间的语义相似性可以使用连续的向量空间距离来度量,为代码克隆检测提供了新的切入点。

4、特别地,基于transformer的预训练语言模型(pre-trained language model)技术在自然语言处理任务上取得了卓越的成绩。codebert是第一个针对编程语言设计的基于transformer的双模态(bimodal)预训练模型,通过掩码语言模型(masked languagemodeling)和替换词检测(replaced token detection)两个预训练目标,可以同时对自然语言和编程语言进行语义建模,学习到它们之间的关联表征。codebert在多个代码智能任务上展现了优异的性能,为代码语义理解提供了一种有效的表示方式。

5、但是,现有的代码克隆检测方法在识别语义级别的代码相似性时也存在一定的局限性,比如在识别智能合约代码中的重复、近似复制(即代码克隆)以及由此引发的安全隐患方面存在不足。而随着基于预训练语言模型技术在编程语言领域的兴起,通过充分利用代码的上下文语义信息来发现代码克隆,已然成为一种很有前景的新方向。

6、因此,本领域的技术人员致力于开发一种基于预训练模型的智能合约代码克隆语义相似性检测方法,解决现有的代码克隆检测方法中存在的上述问题。


技术实现思路

1、有鉴于现有技术的上述缺陷,本专利技术所要解决的技术问题是如何通过充分利用代码的上下文语义信息来发现代码克隆,从而解决现有技术在识别智能合约代码中的重复、近似复制(即代码克隆)以及由此引发的安全隐患方面的不足。

2、为实现上述目的,本专利技术提供了一种基于预训练模型的智能合约代码克隆语义相似性检测方法,包括以下步骤:

3、步骤1、实现智能合约代码的向量化表示;

4、步骤2、完成基于cosine相似度的代码片段比较;

5、步骤3、进行函数级别的精细检测;

6、步骤4、进行智能合约漏洞关联分析;

7、步骤5、进行聚类分析,并将检测结果可视化。

8、进一步地,所述步骤1中的所述向量化表示是基于预训练模型codebert来实现,具体是将所述智能合约代码映射成连续向量空间中的词嵌入,用公式表达为:

9、

10、其中,代表输入的所述智能合约代码的片段,为其对应的向量表示。

11、进一步地,所述步骤2中的所述代码片段比较是对于所述智能合约代码的任意两个片段和,各自的向量表示为和,计算和的余弦相似度,具体为:

12、

13、根据所述余弦相似度判断所述智能合约代码的片段之间是否构成代码克隆。

14、进一步地,根据所述余弦相似度和预先设定的相似度阈值,可以区分不同类型的代码克隆,包括结构克隆、语义克隆和混合型克隆。

15、进一步地,所述步骤3中会将每个函数视为独立的代码单元,分别计算与其他函数之间的相似度,并预先设定对应的阈值来识别潜在的代码克隆。

16、进一步地,所述步骤4中的所述漏洞关联分析具备包括:收集含有特定类型漏洞的智能合约样本,并通过人工标注建立对照组,然后使用所述步骤1中的方法生成向量,再使用所述步骤2中的方法进行相似度检测。

17、进一步地,所述特定类型漏洞包括时间戳相关漏洞,通过筛选具有相似编码模式和上下文环境的代码片段进行重点排查。

18、进一步地,所述步骤5中是对智能合约函数按长度进行分组并进行所述聚类分析。

19、进一步地,统计所述智能合约函数的长度分布情况,得到不同长度区间内的代码克隆特征,并用红色标记前十大聚类群体。

20、本专利技术还提供了一种基于预训练模型的智能合约代码克隆语义相似性检测系统,包括权利要求1~9中任意一项所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,用于代码克隆检测和代码验证任务。

21、本专利技术提供的一种基于预训练模型的智能合约代码克隆语义相似性检测方法与系统至少具有以下技术效果:

22、1、本专利技术所提供的技术方案提供高精度检测,具体是通过应用预训练模型codebert,生成高质量的代码向量表示,进而利用向量间的余弦相似度进行精确匹配,从而提高克隆代码片段的识别准确率。在实践中,较高的相似度得分意味着更高的检测准确性。

23、2、本专利技术所提供的技术方案有更强的普适性,不受限于特定编程语言,适用于各种智能合约语言(如solidity)的代码克隆检测,无论是简单的文本重复还是复杂的结构性相似,均可有效识别。

24、3、本专利技术所提供的技术方案将代码克隆检测细化到函数级别,有利于精准定位代码复用区域,有助于开发者在实际维护中迅速找到存在问题的部分,减少冗余代码和潜在安全风险。

25、4、本专利技术所提供的技术方案能够优化资源分配,相较于其他高级智能合约检测工具,本专利技术所提供的技术方案的检测效率得到提升,约提高4%的准确率,意味着在相同的条件下,开发者能够更快地找出并修复问题,节省人力和时间成本。

26、5、本专利技术所提供的技术方案能够针对特定类型的安全漏洞(如时间戳漏洞)进行针对性检测,增强对已知安全风险的防御能力,有助于提升整个智能合约生态系统的安全性。

27、以下将结合附图对本专利技术的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本专利技术的目的、特征和效果。

本文档来自技高网...

【技术保护点】

1.一种基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述方法包括以下步骤:

2.如权利要求1所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤1中的所述向量化表示是基于预训练模型CodeBERT来实现,具体是将所述智能合约代码映射成连续向量空间中的词嵌入,用公式表达为:

3.如权利要求2所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤2中的所述代码片段比较是对于所述智能合约代码的任意两个片段和,各自的向量表示为和,计算和的余弦相似度,具体为:

4.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,根据所述余弦相似度和预先设定的相似度阈值,可以区分不同类型的代码克隆,包括结构克隆、语义克隆和混合型克隆。

5.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤3中会将每个函数视为独立的代码单元,分别计算与其他函数之间的相似度,并预先设定对应的阈值来识别潜在的代码克隆。

6.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤4中的所述漏洞关联分析具备包括:收集含有特定类型漏洞的智能合约样本,并通过人工标注建立对照组,然后使用所述步骤1中的方法生成向量,再使用所述步骤2中的方法进行相似度检测。

7.如权利要求6所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述特定类型漏洞包括时间戳相关漏洞,通过筛选具有相似编码模式和上下文环境的代码片段进行重点排查。

8.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤5中是对智能合约函数按长度进行分组并进行所述聚类分析。

9.如权利要求8所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,统计所述智能合约函数的长度分布情况,得到不同长度区间内的代码克隆特征,并用红色标记前十大聚类群体。

10.一种基于预训练模型的智能合约代码克隆语义相似性检测系统,其特征在于,所述系统包括权利要求1~9中任意一项所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,用于代码克隆检测和代码验证任务。

...

【技术特征摘要】

1.一种基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述方法包括以下步骤:

2.如权利要求1所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤1中的所述向量化表示是基于预训练模型codebert来实现,具体是将所述智能合约代码映射成连续向量空间中的词嵌入,用公式表达为:

3.如权利要求2所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤2中的所述代码片段比较是对于所述智能合约代码的任意两个片段和,各自的向量表示为和,计算和的余弦相似度,具体为:

4.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,根据所述余弦相似度和预先设定的相似度阈值,可以区分不同类型的代码克隆,包括结构克隆、语义克隆和混合型克隆。

5.如权利要求3所述的基于预训练模型的智能合约代码克隆语义相似性检测方法,其特征在于,所述步骤3中会将每个函数视为独立的代码单元,分别计算与其他函数之间的相似度,并预先设定对应的阈值来识别潜在的代码克隆。

6.如权利要求3所述的基...

【专利技术属性】
技术研发人员:李雅张卓
申请(专利权)人:上海交通大学宁波人工智能研究院
类型:发明
国别省市:

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

1