基于强化学习的代码测试方法、装置以及设备与流程

未命名 08-15 阅读:104 评论:0


1.本公开涉及计算机技术领域,尤其涉及网络安全技术领域,具体涉及一种基于强化学习的代码测试方法、装置以及设备。


背景技术:

2.代码质量问题是漏洞产生的主要根源。为了避免漏洞的产生,常用的代码测试方法包括手工测试和自动化测试,但是,基于人工处理的手工测试代码的方式,存在效率和正确率较低的问题;基于固定规则的自动化测试代码的方式,存在处理类型比较有限,且仅限处理静态数据,无法适应动态变化的数据,尤其是复杂的逻辑关系的问题。


技术实现要素:

3.本公开提供了一种基于强化学习的代码测试方法、装置以及设备。
4.根据本公开的第一方面,提供了一种基于强化学习的代码测试方法。该方法包括:获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果,所述测试结果包括所述待测代码中可能出错的代码段,以及所述代码段对应的错误类型、函数名称和代码行号。
5.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,获取待测代码中各关键字及其对应的代码行号、编号包括:提取待测代码中的各关键字和各关键字对应的代码行号;按照预设编号规则对各关键字进行编号,得到各关键字对应的编号。
6.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,获取待测代码中各关键字所在函数的函数名称和嵌套深度包括:按照预设构建规则,构建所述待测代码中的各代码块,并得到各关键字所在函数的函数名称和嵌套深度,其中,各关键字在不同的嵌套层次。
7.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,获取待测代码中各关键字对应的路径包括:根据各关键字对所述待测代码进行拆分,得到多个单词块;将各代码块按照各关键词的嵌套深度进行组织,建立树形关系;将所述树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成各关键字的路径。
8.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,在所述将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果之前,所述方法还包括:提取历史待测代码中的各关键字,并获取所述历史待测代码中各关键字对应的代
码行号;根据所述历史待测代码中各关键字对所述历史待测代码进行拆分,得到多个单词块;按照预设编号规则对所述历史待测代码中各关键字进行编号,得到所述历史待测代码中各关键字对应的编号;按照预设构建规则,构建所述历史待测代码中的各代码块,并得到所述历史待测代码中各关键字所在函数的函数名称和嵌套深度;将所述历史待测代码中各代码块按照嵌套深度进行组织,建立树形关系;将所述树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成所述历史待测代码中各关键字的路径;获取所述历史待测代码对应的测试结果,所述历史待测代码对应的测试结果包括所述历史待测代码中的出错代码段,以及所述出错代码段对应的错误类型、函数名称和代码行号;将所述历史待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径作为样本,所述历史待测代码对应的测试结果作为标注得到的训练集,对预设强化学习模型进行训练;迭代计算测试后的预设强化学习模型输出的测试结果与标注的分类准确度,直至所述分类准确度大于分类准确度阈值,得到训练好的代码测试模型。
9.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述方法还包括:每当所述预设强化学习模型输出一个测试结果时,所述预设强化学习模型的激励函数将根据出错代码段对应的错误类型和代码行号,对出错代码段包括的关键字进行评价,得到关键字所在代码行对应的评分;根据所述评分,按照从高至低的顺序对所述历史待测代码中各关键字所在代码行进行优先级排序,以使所述预设强化学习模型输出下一个测试结果时,优先访问优先级高的代码行。
10.如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述预设强化学习模型为支持向量机、决策树或者邻近算法。
11.根据本公开的第二方面,提供了一种基于强化学习的代码测试装置。该装置包括:获取模块,用于获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;输出模块,用于将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果,所述测试结果包括所述待测代码中可能出错的代码段,以及所述代码段对应的错误类型、函数名称和代码行号。
12.根据本公开的第三方面,提供了一种电子设备。该电子设备包括:存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现如以上所述的方法。
13.根据本公开的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如以上所述的方法。
14.本技术实施例提供的一种基于强化学习的代码测试方法、装置以及设备,能够通过获取并将待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出待测代码的测试结果,其中,测试结果包括待测代码中可能出错的代码段,以及代码段对应的错误类型、函数名称和代码行号,从而在代码测试过程中基于预先训练好的代码测试模型适应动态变化的数据和复杂的逻辑关系,进而提高代码测试的效率和正确率。
15.应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
16.结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。附图用于更好地理解本方案,不构成对本公开的限定在附图中,相同或相似的附图标记表示相同或相似的元素,其中:图1示出了根据本公开的实施例的基于强化学习的代码测试方法的流程图;图2示出了根据本公开的实施例的待测代码的示意图;图3示出了根据本公开的实施例的基于强化学习的代码测试装置的框图;图4示出了能够实施本公开的实施例的示例性电子设备的方框图。
具体实施方式
17.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本公开保护的范围。
18.另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
19.本公开中,可以在代码测试过程中基于预先训练好的代码测试模型适应动态变化的数据和复杂的逻辑关系,进而提高代码测试的效率和正确率。
20.图1示出了根据本公开实施例的基于强化学习的代码测试方法100的流程图。
21.在框110,获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径。
22.在一些实施例中,待测代码可以包括用户需进行检测和错误排查的代码。
23.如图2所示,待测代码可以包括:“public void bool getsum(int count){
ꢀꢀꢀꢀ
int sum = 0;
ꢀꢀꢀꢀ
for(int i = 0; i《count; i ++){
ꢀꢀꢀꢀꢀꢀꢀꢀ
sum += i
ꢀꢀꢀꢀꢀꢀꢀꢀ
}

}”。
24.在一些实施例中,待测代码中各关键字可以包括存储类型关键字、数据类型关键字、控制语句关键字以及其他关键字。
25.例如,存储类型关键字可以包括auto、static、register以及extern;数据类型关键字可以包括int、short、long以及char;控制语句关键字可以包括if、else、switch以及case;其他关键字可以包括const、sizeof、typedef以及volatile。
26.在一些实施例中,可以通过预设关键字表对待测代码中的各关键字进行识别,并获取待测代码中各关键字,如图2中的“void、int、for”。
27.在一些实施例中,在获取待测代码中各关键字的同时,可以通过对各关键字在待测代码中的位置和所在的函数进行识别,获取待测代码中各关键字对应的代码行号和函数名称。
28.例如,代码行号可以是待测代码内容左侧的显示行号,如“1、2、3
……”
。关键字所在的函数是完成一个局部功能的代码集合,函数由函数名称、返回值、参数和函数体等组成,函数名称可以是封装后的代码块的名称,如rank函数、ountif函数、if函数以及and函数。
29.在一些实施例中,可以通过在获取待测代码中各关键字之后,使用统一的编号方式,对所有关键字进行编号,获取待测代码中各关键字对应的编号。其中,统一的编号方式根据预设的编号规则设置,如基于数序编排法对所有关键字进行编号,如“1、2、3
……”
;或者基于摘要算法对所有关键字进行编号,如“68e109f0f40c、a72a15e05cc2、2786f8e627d1
……”

30.在一些实施例中,可以通过对待测代码中各关键字的绝对深度或者相对深度进行识别,得到待测代码中各关键字对应的嵌套深度。其中,绝对深度为相对根节点的深度,相对深度为相对某个父节点的深度。如关键字void、int和for的嵌套深度可以分别为depth(void)=0、depth(int)=2和depth(for)=1。
31.在一些实施例中,待测代码中各关键字对应的路径可以是待测代码中各关键字相对于待测代码的检索路径。
32.在一些实施例中,可以通过遍历待测代码的代码目录,获得待测代码中各关键字对应的路径。还可以通过遍历待测代码对应的预设逻辑结构,获得待测代码中各关键字对应的路径;其中,预设逻辑结构可以是集合结构、线性结构、树桩结构以及网络结构。
33.在框120,将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出待测代码的测试结果,测试结果包括待测代码中可能出错的代码段,以及代码段对应的错误类型、函数名称和代码行号。
34.在一些实施例中,预先训练好的代码测试模型用于表征各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,与待测代码的测试结果之间的映射关系。
35.其中,代码段对应的错误类型可以是数据超出范围、数据溢出、索引为负值或者超出最大长度等。其中,代码段为程序中的可执行部分,直观理解代码段就是函数堆叠组成的。
36.在一些实施例中,可以根据测试结果生成诊断报告,并输出为文件形式,便于用户阅览,并根据输出的诊断报告,对代码进行人工检测和错误排查。
37.在一些实施例中,还可以以关键字为基础,将待测代码拆分成包括关键字的单词块,再将各关键字的单词块、各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径输入至预先训练好的代码测试模型,输出待测代码的测试结果。
38.在一些实施例中,在拆分时,可以忽略一些无意义的符号,如结尾的分号,以提高测试效率。
39.在一些实施例中,基于预先训练好的代码测试模型对待测代码进行代码测试,首先对待测代码进行指定方法的拆分和分类,得到各关键字或者包括关键字的单词块,并各关键字或者包括关键字的单词块,以及各关键字或者包括关键字的单词块分别对应的代码行号、编号、函数名称、嵌套深度以及路径将作为预先训练好的代码测试模型的估计输入,然后通过实际代码和执行出错的位置的执行结果,对实际情况进行预测,以便发现常规的人工检测和自动化测试无法查询的错误,能够有效地将可能出错的代码段选择出来。
40.根据本公开的实施例,实现了以下技术效果:通过获取并将待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出待测代码的测试结果,其中,测试结果包括待测代码中可能出错的代码段,以及代码段对应的错误类型、函数名称和代码行号,从而在代码测试过程中基于预先训练好的代码测试模型适应动态变化的数据和复杂的逻辑关系,进而提高代码测试的效率和正确率。
41.在一些实施例中,获取待测代码中各关键字及其对应的代码行号、编号包括:提取待测代码中的各关键字和各关键字对应的代码行号;按照预设编号规则对各关键字进行编号,得到各关键字对应的编号。
42.在一些实施例中,可以通过根据预设关键字表对待测代码中的各关键字进行识别,根据识别的结果提取待测代码中的各关键字;可以通过对各关键字在待测代码中的位置进行识别,根据识别的结果提取待测代码中的各关键字对应的代码行号。
43.其中,预设关键字表可以根据用户实际需求设置,如可以是java代码中最常见到的关键字表,还可以是c语言中最常见到的关键字表。
44.在一些实施例中,预设编号规则可以根据用户实际需求设置,如数序编排法、摘要算法。其中,摘要算法可以是消息摘要算法(message digest,md)、安全散列算法(secure hash algorithm,sha)或者消息认证码算法(message authentication code,mac)。其中,md包括md2、md4以及md5;sha包括sha-1和sha-2,sha-2包括sha-224、sha-256、sha-384以及sha-512。
45.可选的,从安全性的角度考虑,可以选择md5对各关键字进行编号。
46.根据本公开的实施例,通过上述基于预设关键字表提取待测代码的关键字,可以使得上述代码测试方法适配动态变化的数据,基于预设编号规则对各关键字进行编号,可以提高代码测试的遍历速度,进一步提高代码测试的效率。
47.在一些实施例中,获取待测代码中各关键字所在函数的函数名称和嵌套深度包括:按照预设构建规则,构建待测代码中的各代码块,并得到各关键字所在函数的函数名称和嵌套深度,其中,各关键字在不同的嵌套层次。
48.在一些实施例中,预设构建规则可以根据用户实际需求设置。
49.例如,在markdown中,代码块的构建规则可以包括行内代码块和代码区块,其中,行内代码块可以使用如:`printf()`的形式去定义,代码区块可以使用两个“```”去定义。
50.再例如,在java编程中,代码块的构建规则可以包括局部代码块、初始化代码块、静态代码块,在类中或者方法中,使用“{}”括起来的一段代码用。
51.在一些实施例中,在构建待测代码中的各代码块后,对各代码块进行识别,得到各关键字所在函数的函数名称,并记录各关键字的嵌套深度。其中,各关键字在不同的嵌套层次。
52.根据本公开的实施例,通过预设构建规则构建待测代码中的各代码块,得到各关键字所在函数的函数名称和嵌套深度,可以基于代码块适配更为复杂的逻辑关系,进一步扩展代码测试的适用性。
53.在一些实施例中,获取待测代码中各关键字对应的路径包括:根据各关键字对待测代码进行拆分,得到多个单词块;将各代码块按照各关键词的嵌套深度进行组织,建立树形关系;将树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成各关键字的路径。
54.如图2所示,按照关键“void、int、for”,可以将待测代码拆分为“public、bool getsum、count、sum = 0、i = 0; i《count; i ++、sum += i”。
55.在一些实施例中,在对待测代码进行拆分时,可以主要以关键词为基础,在将待测代码拆分成单词快的过程中,忽略一些无意义的符号,如结尾的分号等,以便提高测试效率。
56.在一些实施例中,可以根据各关键词的嵌套深度,设置代码块对应的树形关系的层次关系。如图2所示,待测代码可分为两层。
57.需要说明的是,树形关系的层次关系还可以根据缩进、空格、换行、行数限制以及控制语句等进行划分,树形关系的具体组织过程,可以根据用户设置构建,以便根据树形关系,生成各单词块的全路径索引。
58.在一些实施例中,基于单词块是根据各关键词对待测代码进行拆分得到的,根据各单词块的全路径索引,可以得到各单词块对应的关键词的的路径。
59.根据本公开的实施例,通过上述过程建立各关键字的路径,以便在测试时提高处理效率和正确率。
60.在一些实施例中,在上述将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出待测代码的测试结果之前,上述方法还包括:提取历史待测代码中的各关键字,并获取历史待测代码中各关键字对应的代码行号;根据历史待测代码中各关键字对历史待测代码进行拆分,得到多个单词块;按照预设编号规则对历史待测代码中各关键字进行编号,得到历史待测代码中各关键字对应的编号;按照预设构建规则,构建历史待测代码中的各代码块,并得到历史待测代码中各关键字所在函数的函数名称和嵌套深度;
将历史待测代码中各代码块按照嵌套深度进行组织,建立树形关系;将树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成历史待测代码中各关键字的路径;获取历史待测代码对应的测试结果,历史待测代码对应的测试结果包括历史待测代码中的出错代码段,以及出错代码段对应的错误类型、函数名称和代码行号;将历史待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径作为样本,历史待测代码对应的测试结果作为标注得到的训练集,对预设强化学习模型进行训练;迭代计算测试后的预设强化学习模型输出的测试结果与标注的分类准确度,直至分类准确度大于分类准确度阈值,得到训练好的代码测试模型。
61.在一些实施例中,历史待测代码对应的测试结果可以通过在运行程序环节对历史待测代码进行预设的测试,在测试出现bug后,即出现历史待测代码中的出错代码段,纪录错误类型、函数名称和代码行号获得。
62.在一些实施例中,预设的测试可以是使用visual studio,pycharm等ide的语法检测。可以通过“单元测试+集成测试+整合测试”对所有历史待测代码进行语法测试,得到历史待测代码对应的测试结果。
63.在一些实施例中,为描述的方便和简洁,描述获得历史待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径的具体过程,可以参考上述实施例中的待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径的对应具体过程,在此不再赘述。
64.在一些实施例中,通过大量样本进行测试并逐渐进行优化,使上述代码测试方法在处理时的精准度不断提高,能够有效地将可能出错的代码段选择出来,并作为诊断报告,输出到文件。
65.根据本公开的实施例,通过上述代码测试模型的具体训练过程,定义了对模型进行分类训练,通过实际代码和执行出错的位置的执行结果,对实际情况进行预测,从而使上述代码测试方法能够灵活有效地对训练结果进行迭代优化,发现常规的人工检测和自动化测试无法查询的错误。
66.在一些实施例中,上述方法还包括:每当预设强化学习模型输出一个测试结果时,预设强化学习模型的激励函数将根据出错代码段对应的错误类型和代码行号,对出错代码段包括的关键字进行评价,得到关键字所在代码行对应的评分;根据评分,按照从高至低的顺序对历史待测代码中各关键字所在代码行进行优先级排序,以使预设强化学习模型输出下一个测试结果时,优先访问优先级高的代码行。
67.在一些实施例中,使用强化学习进行学习训练,机器学习的奖励机制使用代码进行结果,即可以设置出现错误代码段的行加1分,不出错的加0分。每出现一个错误,激励函数就会根据类型和所在行数,对指定的关键字进行评价,并标记评分,随后根据评价的累加值对所在行数的关键字进行优先级排序。
68.根据本公开的实施例,通过上述按照从高至低的顺序对历史待测代码中各关键字所在代码行进行优先级排序,可以优化遍历的访问速度,即影响大的(累计评分高的)代码
段会优先访问,从而减少总的访问时间。
69.在一些实施例中,上述预设强化学习模型为支持向量机、决策树或者邻近算法。
70.在一些实施例中,上述预设强化学习模型可以是支持向量机(support vector machine,svm)、决策树或者邻近算法(k-nearestneighbor,knn)。
71.其中,svm是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
72.knn,或者说k最邻近分类算法,是数据挖掘分类技术中最简单的方法之一。所谓k最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法。
73.根据本公开的实施例,通过上述引入具体神经网络模型的设置,可以提供不同的强化学习模型。
74.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制,因为依据本公开,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本公开所必须的。
75.以上是关于方法实施例的介绍,以下通过装置实施例,对本公开所述方案进行进一步说明。
76.图3示出了根据本公开的实施例的基于强化学习的代码测试装置300的方框图。如图3所示,装置300包括:获取模块310,用于获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;输出模块320,用于将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出待测代码的测试结果,测试结果包括待测代码中可能出错的代码段,以及代码段对应的错误类型、函数名称和代码行号。
77.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,所述描述的模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
78.本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
79.根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
80.图4示出了可以用来实施本公开的实施例的电子设备400的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
81.电子设备400包括计算单元401,其可以根据存储在rom402中的计算机程序或者从
存储单元408加载到ram403中的计算机程序,来执行各种适当的动作和处理。在ram403中,还可存储电子设备400操作所需的各种程序和数据。计算单元401、rom402以及ram403通过总线404彼此相连。i/o接口405也连接至总线404。
82.电子设备400中的多个部件连接至i/o接口405,包括:输入单元406,例如键盘、鼠标等;输出单元407,例如各种类型的显示器、扬声器等;存储单元408,例如磁盘、光盘等;以及通信单元409,例如网卡、调制解调器、无线通信收发机等。通信单元409允许电子设备400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
83.计算单元401可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元401的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元401执行上文所描述的各个方法和处理,例如方法100。例如,在一些实施例中,方法100可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元408。在一些实施例中,计算机程序的部分或者全部可以经由rom402和/或通信单元409而被载入和/或安装到电子设备400上。当计算机程序加载到ram403并由计算单元401执行时,可以执行上文描述的方法100的一个或多个步骤。备选地,在其他实施例中,计算单元401可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法100。
84.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
85.用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
86.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
87.为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机
具有:用于向用户显示信息的显示装置;以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
88.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
89.计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
90.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
91.上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

技术特征:
1.一种基于强化学习的代码测试方法,其特征在于,包括:获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果,所述测试结果包括所述待测代码中可能出错的代码段,以及所述代码段对应的错误类型、函数名称和代码行号。2.根据权利要求1所述的方法,其特征在于,获取待测代码中各关键字及其对应的代码行号、编号包括:提取待测代码中的各关键字和各关键字对应的代码行号;按照预设编号规则对各关键字进行编号,得到各关键字对应的编号。3.根据权利要求2所述的方法,其特征在于,获取待测代码中各关键字对应的函数名称和嵌套深度包括:按照预设构建规则,构建所述待测代码中的各代码块,并得到各关键字所在函数的函数名称和嵌套深度,其中,各关键字在不同的嵌套层次。4.根据权利要求3所述的方法,其特征在于,获取待测代码中各关键字对应的路径包括:根据各关键字对所述待测代码进行拆分,得到多个单词块;将各代码块按照各关键词的嵌套深度进行组织,建立树形关系;将所述树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成各关键字的路径。5.根据权利要求1所述的方法,其特征在于,在所述将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果之前,所述方法还包括:提取历史待测代码中的各关键字,并获取所述历史待测代码中各关键字对应的代码行号;根据所述历史待测代码中各关键字对所述历史待测代码进行拆分,得到多个单词块;按照预设编号规则对所述历史待测代码中各关键字进行编号,得到所述历史待测代码中各关键字对应的编号;按照预设构建规则,构建所述历史待测代码中的各代码块,并得到所述历史待测代码中各关键字所在函数的函数名称和嵌套深度;将所述历史待测代码中各代码块按照嵌套深度进行组织,建立树形关系;将所述树形关系进行全路径遍历,生成各单词块的全路径索引;根据各单词块的全路径索引,生成所述历史待测代码中各关键字的路径;获取所述历史待测代码对应的测试结果,所述历史待测代码对应的测试结果包括所述历史待测代码中的出错代码段,以及所述出错代码段对应的错误类型、函数名称和代码行号;将所述历史待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径作为样本,所述历史待测代码对应的测试结果作为标注得到的训练集,对预设强化学习模型进行训练;迭代计算测试后的预设强化学习模型输出的测试结果与标注的分类准确度,直至所述
分类准确度大于分类准确度阈值,得到训练好的代码测试模型。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:每当所述预设强化学习模型输出一个测试结果时,所述预设强化学习模型的激励函数将根据出错代码段对应的错误类型和代码行号,对出错代码段包括的关键字进行评价,得到关键字所在代码行对应的评分;根据所述评分,按照从高至低的顺序对所述历史待测代码中各关键字所在代码行进行优先级排序,以使所述预设强化学习模型输出下一个测试结果时,优先访问优先级高的代码行。7.根据权利要求5所述的方法,其特征在于,所述预设强化学习模型为支持向量机、决策树或者邻近算法。8.一种基于强化学习的代码测试装置,其特征在于,包括:获取模块,用于获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;输出模块,用于将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果,所述测试结果包括所述待测代码中可能出错的代码段,以及所述代码段对应的错误类型、函数名称和代码行号。9. 一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一权利要求所述的方法。10.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行根据权利要求1-7中任一权利要求所述的方法。

技术总结
本公开的实施例提供了一种基于强化学习的代码测试方法、装置以及设备,应用于网络安全技术领域。所述方法包括获取待测代码中各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径;将各关键字及其对应的代码行号、编号、函数名称、嵌套深度以及路径,输入至预先训练好的代码测试模型,输出所述待测代码的测试结果,所述测试结果包括所述待测代码中可能出错的代码段,以及所述代码段对应的错误类型、函数名称和代码行号。以此方式,可以在代码测试过程中基于预先训练好的代码测试模型适应动态变化的数据和复杂的逻辑关系,进而提高代码测试的效率和正确率。高代码测试的效率和正确率。高代码测试的效率和正确率。


技术研发人员:郝伟 沈传宝 刘加瑞
受保护的技术使用者:安徽华云安科技有限公司
技术研发日:2023.07.14
技术公布日:2023/8/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐