本公开涉及计算机,尤其涉及网络安全,具体涉及一种基于强化学习的代码测试方法、装置以及设备。
背景技术:
1、代码质量问题是漏洞产生的主要根源。为了避免漏洞的产生,常用的代码测试方法包括手工测试和自动化测试,但是,基于人工处理的手工测试代码的方式,存在效率和正确率较低的问题;基于固定规则的自动化测试代码的方式,存在处理类型比较有限,且仅限处理静态数据,无法适应动态变化的数据,尤其是复杂的逻辑关系的问题。
技术实现思路
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、应当理解,
技术实现要素:
部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
1.一种基于强化学习的代码测试方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,获取待测代码中各关键字及其对应的代码行号、编号包括:
3.根据权利要求2所述的方法,其特征在于,获取待测代码中各关键字对应的函数名称和嵌套深度包括:
4.根据权利要求3所述的方法,其特征在于,获取待测代码中各关键字对应的路径包括:
5.根据权利要求1所述的方法,其特征在于,在所述将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果之前,所述方法还包括:
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求5所述的方法,其特征在于,所述预设强化学习模型为支持向量机、决策树或者邻近算法。
8.一种基于强化学习的代码测试装置,其特征在于,包括:
9. 一种电子设备,其特征在于,包括:
10.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行根据权利要求1-7中任一权利要求所述的方法。