System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本公开涉及计算机,具体而言,涉及一种代码缺陷检测方法、装置、计算机设备及存储介质。
技术介绍
1、随着计算机技术的快速发展,各行各业对计算机软件的需求不断增加。软件中存在的安全缺陷给计算机系统留下了巨大的安全隐患。
2、随着软件规模和复杂度逐渐增加,常规的代码缺陷检测方法难以保证代码缺陷检测的效率和准确性。因此,如何实现代码缺陷的快速定位是计算机安全领域的重要问题。
技术实现思路
1、本公开实施例至少提供一种代码缺陷检测方法、装置、计算机设备及存储介质。
2、第一方面,本公开实施例提供了一种代码缺陷检测方法,包括:
3、获取待检测代码;
4、将所述待检测代码输入至训练好的缺陷检测模型中,得到所述待检测代码的缺陷检测结果;
5、所述缺陷检测模型是按照以下步骤训练得到的:
6、获取目标代码,以及所述目标代码的历史缺陷信息;
7、确定所述目标代码中各个代码语句之间的控制依赖关系,以及各个变量之间的数据依赖关系;
8、根据所述各个代码语句之间的控制依赖关系和所述各个变量之间的数据依赖关系,对所述目标代码进行切片处理,得到各个代码片段,并确定各个所述代码片段的特征信息;
9、基于所述历史缺陷信息和所述代码片段的特征信息,对待训练的缺陷检测模型进行调参,直至得到训练好的缺陷检测模型。
10、一种可选的实施方式中,根据所述各个代码语句之间的控制依赖关系和各个变量之间的数据依赖关
11、根据所述各个代码语句之间的控制依赖关系和所述各个变量之间的数据依赖关系,构建程序依赖图;所述程序依赖图中包含的节点为代码语句或变量;所述程序依赖图中包含的节点之间的边为代码语句之间的控制依赖关系或变量之间的数据依赖关系;
12、根据所述程序依赖图,确定各个节点的属性特征;
13、根据所述各个节点的属性特征,对所述节点进行聚类,得到多个节点簇,并按照所述节点簇对所述目标代码进行切分处理,得到各个代码块;
14、针对每个代码块,以该代码块对应的节点簇的中心点为关键节点,对所述代码块进行双向切片处理,得到代码片段,并确定所述代码片段中包含的节点的属性特征。
15、一种可选的实施方式中,根据所述各个节点的属性特征,对所述节点进行聚类,得到多个节点簇,包括:
16、根据所述各个节点的属性特征,生成所述目标代码对应的邻接矩阵和度矩阵;所述邻接矩阵用于表示各个节点之间的连通关系;所述度矩阵用于表示每个节点连接的节点的数量;
17、对所述邻接矩阵和所述度矩阵进行归一化处理,得到拉普拉斯矩阵,并计算得到所述拉普拉斯矩阵的特征值和特征向量;
18、基于所述拉普拉斯矩阵的前预设数量个特征值对应的特征向量,生成特征向量矩阵;
19、对所述特征向量矩阵的行向量进行基于无监督学习算法的聚类,得到多个节点簇。
20、一种可选的实施方式中,针对每个代码块,以该代码块对应的节点簇的中心点为关键节点,对所述代码块进行双向切片处理,得到代码片段,包括:
21、针对每个代码块,以该代码块对应的节点簇的中心点为关键节点,从所述关键节点出发,沿着所述程序依赖图向前遍历,确定与所述关键节点具有关联关系的第一目标节点,以及沿着所述程序依赖图向后遍历,确定与所述关键节点具有关联关系的第二目标节点;
22、基于所述关键节点、所述第一目标节点、以及所述关键节点与所述第一目标节点之间的边,生成前向代码切片;基于所述关键节点、所述第二目标节点、以及所述关键节点与所述第二目标节点之间的边,生成后向代码切片;
23、基于所述前向代码切片和所述后向代码切片,得到代码片段。
24、一种可选的实施方式中,基于所述历史缺陷信息和所述代码片段的特征信息,对待训练的缺陷检测模型进行调参,包括:
25、对所述历史缺陷信息进行特征表示,得到历史缺陷特征向量;
26、根据所述代码片段中包含的节点的属性特征,得到代码片段特征向量;
27、对所述历史缺陷特征向量和所述代码片段特征向量进行特征融合处理,得到融合特征向量;
28、基于所述融合特征向量,对待训练的缺陷检测模型进行调参。
29、一种可选的实施方式中,所述历史缺陷信息包括缺陷类型、缺陷频率和缺陷严重性;
30、对所述历史缺陷信息进行特征表示,得到历史缺陷特征向量,包括:
31、对所述缺陷类型进行独热编码,得到缺陷类型特征向量;
32、对所述缺陷频率进行归一化处理,得到缺陷频率特征向量;
33、对所述缺陷严重性进行独热编码,得到缺陷严重性特征向量;
34、基于所述缺陷类型特征向量、所述缺陷频率特征向量和所述缺陷严重性特征向量,得到历史缺陷特征向量。
35、一种可选的实施方式中,所述缺陷检测模型包括多头自注意力模块、第一残差网络模块、前馈网络模块和第二残差网络模块;
36、基于所述历史缺陷信息和所述代码片段的特征信息,对待训练的缺陷检测模型进行调参,直至得到训练好的缺陷检测模型,包括:
37、将所述融合特征向量进行输入嵌入表示,得到查询query矩阵、键key矩阵和值value矩阵;所述查询query矩阵和所述键key矩阵包含所述融合特征向量中的位置信息;所述值value矩阵包含所述融合特征向量中的数值信息;
38、将所述查询query矩阵、键key矩阵和值value矩阵输入至所述多头自注意力模块,得到多头自注意力结果;
39、将所述多头自注意力结果和所述融合特征向量输入至所述第一残差网络模块,得到第一处理结果;
40、将所述第一处理结果输入至所述前馈网络模块,得到第二处理结果;
41、将所述第一处理结果和所述第二处理结果输入至所述第二残差网络模块,得到第三处理结果,并对所述第三处理结果进行解码,得到所述代码片段的缺陷检测结果;
42、基于所述第三处理结果,对待训练的缺陷检测模型进行调参,直至得到训练好的缺陷检测模型。
43、第二方面,本公开实施例还提供一种代码缺陷检测装置,包括:
44、获取模块,用于获取待检测代码;
45、输入模块,用于将所述待检测代码输入至训练好的缺陷检测模型中,得到所述待检测代码的缺陷检测结果;所述缺陷检测模型是按照以下步骤训练得到的:获取目标代码,以及所述目标代码的历史缺陷信息;确定所述目标代码中各个代码语句之间的控制依赖关系,以及各个变量之间的数据依赖关系;根据所述各个代码语句之间的控制依赖关系和所述各个变量之间的数据依赖关系,对所述目标代码进行切片处理,得到各个代码片段,并确定各个所述代码片段的特征信息;基于所述历史缺陷信息本文档来自技高网...
【技术保护点】
1.一种代码缺陷检测方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据所述各个代码语句之间的控制依赖关系和各个变量之间的数据依赖关系,对所述目标代码进行切片处理,得到各个代码片段,并确定各个所述代码片段的特征信息,包括:
3.根据权利要求2所述的方法,其特征在于,根据所述各个节点的属性特征,对所述节点进行聚类,得到多个节点簇,包括:
4.根据权利要求2或3所述的方法,其特征在于,针对每个代码块,以该代码块对应的节点簇的中心点为关键节点,对所述代码块进行双向切片处理,得到代码片段,包括:
5.根据权利要求2所述的方法,其特征在于,基于所述历史缺陷信息和所述代码片段的特征信息,对待训练的缺陷检测模型进行调参,包括:
6.根据权利要求5所述的方法,其特征在于,所述历史缺陷信息包括缺陷类型、缺陷频率和缺陷严重性;
7.根据权利要求5或6所述的方法,其特征在于,所述缺陷检测模型包括多头自注意力模块、第一残差网络模块、前馈网络模块和第二残差网络模块;
8.一种代码缺陷检测装置,其特征在于
9.一种计算机设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至7任一项所述的代码缺陷检测方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至7任一项所述的代码缺陷检测方法的步骤。
...【技术特征摘要】
1.一种代码缺陷检测方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,根据所述各个代码语句之间的控制依赖关系和各个变量之间的数据依赖关系,对所述目标代码进行切片处理,得到各个代码片段,并确定各个所述代码片段的特征信息,包括:
3.根据权利要求2所述的方法,其特征在于,根据所述各个节点的属性特征,对所述节点进行聚类,得到多个节点簇,包括:
4.根据权利要求2或3所述的方法,其特征在于,针对每个代码块,以该代码块对应的节点簇的中心点为关键节点,对所述代码块进行双向切片处理,得到代码片段,包括:
5.根据权利要求2所述的方法,其特征在于,基于所述历史缺陷信息和所述代码片段的特征信息,对待训练的缺陷检测模型进行调参,包括:
6.根据权利要求5所述的...
【专利技术属性】
技术研发人员:苑舒斌,刘晨昱,施建衡,韩宇,周晓宇,刘欣宇,张开,
申请(专利权)人:中海油信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。