源代码缺陷检测方法及相关装置与流程
未命名
09-13
阅读:103
评论:0

1.本发明涉及机器学习领域,特别涉及一种源代码缺陷检测方法及相关装置。
背景技术:
2.目前,传统的源代码缺陷分析主要依赖于分析人员对安全问题的认识以及长期积累的经验,进行相应的缺陷检测,这种方式效率低下且准确率较低。
技术实现要素:
3.鉴于上述问题,本发明提供一种克服上述问题或者至少部分地解决上述问题的一种源代码缺陷检测方法及相关装置。
4.第一方面,一种源代码缺陷检测方法,包括:
5.获得源代码缺陷的特征信息;
6.对所述特征信息进行向量化,从而得到对应的特征向量;
7.将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。
8.结合第一方面,在某些可选的实施方式中,所述获得源代码缺陷的特征信息,包括:
9.获得目标源代码;
10.根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征,其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。
11.结合第一方面,在某些可选的实施方式中,所述对所述特征信息进行向量化,从而得到对应的特征向量,包括:
12.基于独热编码技术one-hot,对所述特征信息中的各特征词进行编码,从而得到二进制的所述特征向量。
13.结合第一方面,在某些可选的实施方式中,所述对所述特征信息进行向量化,从而得到对应的特征向量,包括:
14.基于word2vec编码技术,对所述特征信息中的各特征词进行编码,从而得到述特征向量。
15.结合第一方面,在某些可选的实施方式中,所述神经网络模型的训练过程,包括:
16.获得多个源代码的源代码缺陷的特征信息;
17.针对任一所述源代码的特征信息,将所述特征信息进行向量化,映射至向量空间,从而得到对应特征向量;
18.将各所述特征向量划分为训练集和测试集;
19.根据所述训练集,对所述神经网络模型进行训练;
20.根据所述测试集,对所述神经网络模型进行测试;
21.若所述神经网络模型的测试结果未达到预设要求,则调整所述神经网络模型的参数,并继续对所述神经网络模型进行训练和预测,直到所述神经网络模型的测试结果达到所述预设要求为止。
22.结合上一个实施方式,在某些可选的实施方式中,在所述根据所述测试集,对所述神经网络模型进行测试之后,所述方法还包括:
23.获得相应的测试信息;
24.根据所述测试信息,计算所述神经网络模型的准确率或者错误率。
25.第二方面,一种源代码缺陷检测装置,包括:特征信息获得单元、特征向量获得单元和缺陷检测单元;
26.所述特征信息获得单元,用于获得源代码缺陷的特征信息;
27.所述特征向量获得单元,用于对所述特征信息进行向量化,从而得到对应的特征向量;
28.所述缺陷检测单元,用于将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。
29.结合第二方面,在某些可选的实施方式中,所述特征信息获得单元,包括:源代码获得子单元和特征抽取子单元;
30.所述源代码获得子单元,用于获得目标源代码;
31.所述特征抽取子单元,用于根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征,其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。
32.第三方面,一种计算机可读存储介质,其上存储有程序,所述程序被处理器执行时实现上述任一项所述的源代码缺陷检测方法。
33.第四方面,一种电子设备,所述电子设备包括至少一个处理器、以及与所述处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行上述任一项所述的源代码缺陷检测方法。
34.借由上述技术方案,本发明提供的一种源代码缺陷检测方法及相关装置,可以通过获得源代码缺陷的特征信息;对所述特征信息进行向量化,从而得到对应的特征向量;将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。由此可以看出,本发明可以通过神经网络模型检测源代码缺陷,无需人工参与,效率较高且准确率较高。
35.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
36.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明
的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
37.图1示出了本发明提供的第一种源代码缺陷检测方法的流程图;
38.图2示出了本发明提供的第二种源代码缺陷检测方法的流程图;
39.图3示出了本发明提供的第三种源代码缺陷检测方法的流程图;
40.图4示出了本发明提供的第四种源代码缺陷检测方法的流程图;
41.图5示出了本发明提供的第五种源代码缺陷检测方法的流程图;
42.图6示出了本发明提供的第六种源代码缺陷检测方法的流程图;
43.图7示出了本发明提供的一种源代码缺陷检测装置的结构示意图;
44.图8示出了本发明提供的一种电子设备的结构示意图。
具体实施方式
45.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
46.如图1所示,本发明提供了一种源代码缺陷检测方法,包括:s100、s200和s300;
47.s100、获得源代码缺陷的特征信息;
48.可选的,源代码缺陷是指在软件开发生命周期的编码阶段产生的有意或者无意的缺陷,具体请参见本领域相关说明,本发明对此不做过多描述。
49.可选的,本发明对于获取特征信息的方式以及特征信息所包括的内容不做限制。例如,如图2所示,结合图1所示的实施方式,在某些可选的实施方式中,所述s100,包括:s110和s120;
50.s110、获得目标源代码;
51.可选的,本发明所说的目标源代码指的是待进行源代码缺陷检测的代码段,本发明对此不做限制。
52.可选的,本发明对于编写目标源代码的程序语言不做具体限制,任何可行的方式均属于本发明的保护范围。
53.可选的,本发明对于目标源代码的代码量和代码行数等参数均不做具体限制。
54.s120、根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征;
55.其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。
56.可选的,本发明可以对目标源代码进行文本识别和语义识别,从而识别得到目标源代码的浅层特征和潜在特征,本发明对此不做限制。
57.可选的,本发明所说的代码行数指的是目标源代码的代码行的数量;每条数据流中的符号数量指的是代码中的分割符等特定语言的编码规范所需要用到的符号数量;用于表达数据的向量维度指的是代码的行数、个数和关键词的数量等各个数据指标;上下文之间的语义联系指的是通过transformer技术对文本做向量编码,根据欧式距离等计算方法求出两段文本中的相似程度;数据中符号之间的语义语法关联指的是根据transformer向
量化的数据来分析确认不同符号之前的关联程度,本发明对此不做限制。
58.s200、对所述特征信息进行向量化,从而得到对应的特征向量;
59.可选的,如前所述,前述提取到的是原始的特征信息,需要进行处理后才能用于神经网络模型。因为,本发明可以对上述提取到的特征信息进行向量化,从而得到对应的特征向量。
60.可选的,向量化和特征向量属于本领域的公知概念,本发明对此不做过多描述,具体请参见本领域的相关说明。
61.可选的,本发明对于向量化的具体过程不做限制,任何可行的方式均属于本发明的保护范围。例如,如图3所示,结合图1所示的实施方式,在某些可选的实施方式中,所述s200,包括:s210;
62.s210、基于独热编码技术one-hot,对所述特征信息中的各特征词进行编码,从而得到二进制的所述特征向量。
63.可选的,独热编码技术也称为one-hot技术,该技术属于本领域的公知技术,本发明对此不做过多描述。需要说明的是:特征信息中可以通过特征词或者特征字段表征相应的特征,本发明可以针对特征词或者特征字段进行one-hot编码,从而将各特征词或者特征字段转化为由“0”和“1”构成的二进制字符串,从而得到二进制的特征向量,本发明对此不做限制。
64.可选的,本发明还可以采用其他方式进行向量化。例如,如图4所示,结合图1所示的实施方式,在某些可选的实施方式中,所述s200,包括:s220;
65.s220、基于word2vec编码技术,对所述特征信息中的各特征词进行编码,从而得到述特征向量。
66.可选的,word2vec编码技术属于本领域的公知技术,本发明对此不做过多描述,具体请参见本领域的相关说明。需要说明的是:word2vec可以将文档转化为向量,以便于后续输入至神经网络模型。
67.s300、将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。
68.可选的,神经网络模型对输入的特征向量进行计算,并输出相应的计算结果属于本领域的公知技术过程。但是,需要说明的是:本发明输入的是源代码缺陷的特征信息对应的特征向量,因此,本发明的神经网络模型在对特征向量进行计算时,与其他应用场景的计算过程有不同之处。
69.可选的,本发明所说的缺陷检测结果可以包括:ip硬编码、重复率、圈复杂度、漏洞等信息,本发明对此不做限制。
70.如图5所示,结合图1所示的实施方式,在某些可选的实施方式中,所述神经网络模型的训练过程,包括:s400、s500、s600、s700、s800和s900;
71.s400、获得多个源代码的源代码缺陷的特征信息;
72.可选的,为了提高本发明的神经网络模型的准确率,本发明可以增加训练所使用的样本,获得多个源代码的源代码缺陷的特征信息,本发明对此不做具体限制。
73.s500、针对任一所述源代码的特征信息,将所述特征信息进行向量化,映射至向量空间,从而得到对应特征向量;
74.可选的,对应任一源代码而言,本发明均可以将对应的特征信息进行向量化,从而得到对应的特征向量,以便于后续用于训练和测试神经网络模型。
75.s600、将各所述特征向量划分为训练集和测试集;
76.可选的,本发明对于划分训练集和测试集的方式不做具体限制。例如,本发明可以采用十字交叉验证的训练方法,即,将各特征向量划分为10等份,其中,9份作为训练集,1份作为测试集,本发明对此不做限制。
77.s700、根据所述训练集,对所述神经网络模型进行训练;
78.s800、根据所述测试集,对所述神经网络模型进行测试;
79.可选的,对神经网络模型进行测试是为了不断检测神经网络模型的性能,以判断神经网络模型是否已训练达到预期要求,本发明对此不做限制。
80.s900、若所述神经网络模型的测试结果未达到预设要求,则调整所述神经网络模型的参数,并继续对所述神经网络模型进行训练和预测,直到所述神经网络模型的测试结果达到所述预设要求为止。
81.可选的,在训练神经网络模型的过程中或者在使用神经网路模型检测源代码缺陷的过程中,本发明可以测试神经网络模型的准确率或者错误率,从而评估神经网络模型输出的缺陷检测结果的可信度,本发明对此不做限制。
82.如图6所示,结合图5所示的实施方式,在某些可选的实施方式中,在所述s800之后,所述方法还包括:s1000和s1100;
83.s1000、获得相应的测试信息;
84.可选的,本发明对于获得测试信息的过程不做具体限制。例如,本发明可以在过程中,从jar包等获取代码等信息作为测试信息,本发明对此不做限制。
85.s1100、根据所述测试信息,计算所述神经网络模型的准确率或者错误率。
86.可选的,本发明对于计算准确率或者计算错误率的过程不做具体限制。例如,对cpu及内存等资源的限制和具体的计算程序等。
87.如图7所示,本发明提供了一种源代码缺陷检测装置,包括:特征信息获得单元100、特征向量获得单元200和缺陷检测单元300;
88.所述特征信息获得单元100,用于获得源代码缺陷的特征信息;
89.所述特征向量获得单元200,用于对所述特征信息进行向量化,从而得到对应的特征向量;
90.所述缺陷检测单元300,用于将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。
91.结合图7所示的实施方式,在某些可选的实施方式中,所述特征信息获得单元100,包括:源代码获得子单元和特征抽取子单元;
92.所述源代码获得子单元,用于获得目标源代码;
93.所述特征抽取子单元,用于根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征,其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。
94.结合图7所示的实施方式,在某些可选的实施方式中,所述特征向量获得单元200,
包括:one-hot编码子单元;
95.所述one-hot编码子单元,用于基于独热编码技术one-hot,对所述特征信息中的各特征词进行编码,从而得到二进制的所述特征向量。
96.结合图7所示的实施方式,在某些可选的实施方式中,所述特征向量获得单元200,包括:word2vec编码子单元;
97.所述word2vec编码子单元,用于基于word2vec编码技术,对所述特征信息中的各特征词进行编码,从而得到述特征向量。
98.结合图7所示的实施方式,在某些可选的实施方式中,所述装置还包括:训练单元;
99.所述训练单元,包括:特征信息采集子单元、特征映射子单元、特征划分子单元、训练子单元、测试子单元和调整子单元;
100.所述训练单元,用于执行所述神经网络模型的训练过程,包括:
101.所述特征信息采集子单元,用于获得多个源代码的源代码缺陷的特征信息;
102.所述特征映射子单元,用于针对任一所述源代码的特征信息,将所述特征信息进行向量化,映射至向量空间,从而得到对应特征向量;
103.所述特征划分子单元,用于将各所述特征向量划分为训练集和测试集;
104.所述训练子单元,用于根据所述训练集,对所述神经网络模型进行训练;
105.所述测试子单元,用于根据所述测试集,对所述神经网络模型进行测试;
106.所述调整子单元,用于若所述神经网络模型的测试结果未达到预设要求,则调整所述神经网络模型的参数,并继续对所述神经网络模型进行训练和预测,直到所述神经网络模型的测试结果达到所述预设要求为止。
107.结合上一个实施方式,在某些可选的实施方式中,所述装置还包括:测试信息获得子单元和计算子单元;
108.所述测试信息获得子单元,用于在所述根据所述测试集,对所述神经网络模型进行测试之后,获得相应的测试信息;
109.所述计算子单元,用于根据所述测试信息,计算所述神经网络模型的准确率或者错误率。
110.本发明提供了一种计算机可读存储介质,其上存储有程序,所述程序被处理器执行时实现上述任一项所述的源代码缺陷检测方法。
111.如图8所示,本发明提供了一种电子设备70,所述电子设备70包括至少一个处理器701、以及与所述处理器701连接的至少一个存储器702、总线703;其中,所述处理器701、所述存储器702通过所述总线703完成相互间的通信;所述处理器701用于调用所述存储器702中的程序指令,以执行上述任一项所述的源代码缺陷检测方法。
112.在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
113.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
114.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本发明中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本发明所示的这些实施例,而是要符合与本发明所公开的原理和新颖特点相一致的最宽的范围。
115.以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
技术特征:
1.一种源代码缺陷检测方法,其特征在于,包括:获得源代码缺陷的特征信息;对所述特征信息进行向量化,从而得到对应的特征向量;将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。2.根据权利要求1所述的方法,其特征在于,所述获得源代码缺陷的特征信息,包括:获得目标源代码;根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征,其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。3.根据权利要求1所述的方法,其特征在于,所述对所述特征信息进行向量化,从而得到对应的特征向量,包括:基于独热编码技术one-hot,对所述特征信息中的各特征词进行编码,从而得到二进制的所述特征向量。4.根据权利要求1所述的方法,其特征在于,所述对所述特征信息进行向量化,从而得到对应的特征向量,包括:基于word2vec编码技术,对所述特征信息中的各特征词进行编码,从而得到述特征向量。5.根据权利要求1所述的方法,其特征在于,所述神经网络模型的训练过程,包括:获得多个源代码的源代码缺陷的特征信息;针对任一所述源代码的特征信息,将所述特征信息进行向量化,映射至向量空间,从而得到对应特征向量;将各所述特征向量划分为训练集和测试集;根据所述训练集,对所述神经网络模型进行训练;根据所述测试集,对所述神经网络模型进行测试;若所述神经网络模型的测试结果未达到预设要求,则调整所述神经网络模型的参数,并继续对所述神经网络模型进行训练和预测,直到所述神经网络模型的测试结果达到所述预设要求为止。6.根据权利要求5所述的方法,其特征在于,在所述根据所述测试集,对所述神经网络模型进行测试之后,所述方法还包括:获得相应的测试信息;根据所述测试信息,计算所述神经网络模型的准确率或者错误率。7.一种源代码缺陷检测装置,其特征在于,包括:特征信息获得单元、特征向量获得单元和缺陷检测单元;所述特征信息获得单元,用于获得源代码缺陷的特征信息;所述特征向量获得单元,用于对所述特征信息进行向量化,从而得到对应的特征向量;所述缺陷检测单元,用于将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。8.根据权利要求7所述的装置,其特征在于,所述特征信息获得单元,包括:源代码获得
子单元和特征抽取子单元;所述源代码获得子单元,用于获得目标源代码;所述特征抽取子单元,用于根据所述目标源代码,提取得到所述目标源代码的浅层特征和潜在特征,其中,所述浅层特征表征代码行数、每条数据流中的符号数量和用于表达数据的向量维度,所述潜在特征表征上下文之间的语义联系和每条数据中符号之间的语义语法关联。9.一种计算机可读存储介质,其上存储有程序,其特征在于,所述程序被处理器执行时实现如权利要求1至6中任一项所述的源代码缺陷检测方法。10.一种电子设备,其特征在于,所述电子设备包括至少一个处理器、以及与所述处理器连接的至少一个存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行如权利要求1至6中任一项所述的源代码缺陷检测方法。
技术总结
本发明公开了一种源代码缺陷检测方法及相关装置,可以通过获得源代码缺陷的特征信息;对所述特征信息进行向量化,从而得到对应的特征向量;将所述特征向量输入至预先训练好的神经网络模型,从而获得所述神经网络模型输出的缺陷检测结果。由此可以看出,本发明可以通过神经网络模型检测源代码缺陷,无需人工参与,效率较高且准确率较高。效率较高且准确率较高。效率较高且准确率较高。
技术研发人员:简苡霖 陈婕
受保护的技术使用者:中国银行股份有限公司
技术研发日:2023.05.26
技术公布日:2023/8/24
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/