测试用例的生成方法、系统、终端设备以及存储介质与流程

专利检索2022-05-10  13



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.此外,为实现上述目的,本发明还提供计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上所述的测试用例的生成方法的步骤。
38.本发明提供一种测试用例的生成方法、系统、终端设备、计算机存储介质以及计算机程序产品,通过根据预设的句式模板生成测试用例,其中,所述句式模板基于正则表达式规则设定生成;构造符合测试覆盖准则的适应度函数,并根据所述适应度函数计算所述测试用例针对被测软件程序的适应度值;根据所述适应度值迭代寻找最优解,以确定所述测试用例中的最优测试用例。
39.本发明在针对被测软件程序进行测试以自动化生成测试用例的过程中,先使用预先基于正则表达式设定生成的句式模板,自动化的批量生成测试用例,然后,进一步构造符合对被测软件程序进行测试的测试覆盖准则的适应度函数,并根据该适应度函数计算得到所生成的测试用例对于该被测软件程序的适应度值,最后,根据该适应度值进行迭代以寻找最优解,从而确定出生成的该测试用例当中可全面覆盖被测软件程序的最优测试用例。
40.本发明相比于传统自动化测试用例的生成方式,本发明基于正则表达式设定句式模板,从而可利用该句式模板自动化进行测试用例的批量生成,此外,本发明还通过构造适应度函数来计算所生成测试用例对于被测软件程序的适应度值,从而基于该适应度值进行迭代寻优操作确定出所生成的测试用例中的最优测试用例,如此,能够在极大程度上提高测试用例对于被测软件程序的覆盖率,从而确保了所生成测试用例针对被测软件程序的有效性,进而提升了对被测软件程序的测试准确性。
附图说明
41.图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图;
42.图2为本发明测试用例的生成方法一实施例的流程示意图;
43.图3为本发明测试用例的生成方法一实施例所涉及的一应用场景示意图;
44.图4为本发明测试用例的生成方法一实施例所涉及的句式模型;
45.图5为本发明测试用例的生成方法一实施例所涉及的多轮对话测试用例;
46.图6为本发明测试用例的生成方法一实施例所涉及的一应用流程示意图;
47.图7为本发明测试用例的生成系统一实施例的功能模块示意图。
48.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
49.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
50.参照图1,图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图。
51.本发明实施例终端设备可以是装载有需要进行测试的软件程序的终端设备,或
者,本发明实施例终端设备还可以是专门用于针对该软件程序进行测试从而配置用于自动生成测试用例的终端设备,该设备可以是智能手机、pc(personal computer,个人计算机)、平板电脑、便携计算机等等。
52.如图1所示,该终端设备可以包括:处理器1001,例如cpu,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi

fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non

volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
53.本领域技术人员可以理解,图1中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
54.如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及测试用例的生成程序。
55.在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,并执行以下步骤:
56.根据预设的句式模板生成测试用例,其中,所述句式模板基于正则表达式规则设定生成;
57.构造符合测试覆盖准则的适应度函数,并根据所述适应度函数计算所述测试用例针对被测软件程序的适应度值;
58.根据所述适应度值迭代寻找最优解,以确定所述测试用例中的最优测试用例。
59.优选地,所述句式模板包括主句模板和子句模板,处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,还执行以下步骤:
60.调用所述主句模板匹配符合所述正则表达式规则的字符串句式生成主句测试用例;以及,
61.调用所述子句模板匹配符合所述正则表达式规则的字符串句式生成子句测试用例;
62.针对同一场景下的所述主句测试用例和所述子句测试用例进行排列交叉组合以形成多轮测试用例集。
63.优选地,处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,在执行针对同一场景下的所述主句测试用例和所述子句测试用例进行排列交叉组合以形成多轮测试用例集之前,还执行以下步骤:
64.计算相互两个所述主句测试用例或者相互两个所述字句测试用例的余弦相似度;
65.确定所述余弦相似度是否大于或者等于预设阈值;
66.若是,在所述主句测试用例或者所述子句测试用例中去除任意用例后,继续计算所述余弦相似度直至确定到所述余弦相似度小于所述预设阈值。
67.优选地,处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,还执行以下步骤:
68.获取所述被测软件程序的分支节点;
69.根据所述分支节点结合预设的分支距离函数构造得到符合所述测试覆盖准则的适应度函数。
70.优选地,处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,还执行以下步骤:
71.在所述被测软件程序中输入所述测试用例进行测试运行,以收集所述测试用例针对所述被测软件程序全部的路径覆盖信息;
72.调用所述适应度函数以基于所述路径覆盖信息计算得到所述测试用例针对所述被测软件程序的适应度值。
73.优选地,处理器1001可以用于调用存储器1005中存储的测试用例的生成程序,还执行以下步骤:
74.调用预设的差分进化算法根据所述适应度值进行迭代寻找最优解,以确定所述测试用例中覆盖所述被测软件程序全部分支的最优测试用例。
75.优选地,调用所述差分进化算法针对所述测试用例进行优化操作得到优化更新后的最优解;
76.若判断到所述测试用例的所述适应度值达到预设目标误差,则输出所述最优解;
77.若判断到所述适应度值未达到所述预设目标误差,则针对所述测试用例重新进行优化操作得到新的最优解并计算新的适应度值,直至所述适应度值达到所述预设目标误差后输出所述新的最优解。
78.基于上述硬件结构,提出本发明测试用例的生成方法的各实施例。
79.需要说明的是,随着现代科技的进步以及计算机的快速发展,各种各样的计算机软件成为了生活中的必需品,随之,人们对日常使用的软件质量要求也逐渐变高。软件测试是检验软件质量的重要技术手段,而设计测试用例是软件测试的重要环节和核心难点。设计测试用例自动生成将可以大大提升软件测试的效率,同时可以节约大量的人力和物力。因此,测试用例自动生成问题的研究课题具有重要的理论价值和实用意义。
80.自动化测试用例生成方案一般会考虑两个个方面,一、测试用例集如何自动化生成;二、测试用例的有效率,一般情况下测试用例的覆盖率越高,该测试用例越优越。所以如何通过算法来提高自动化测试用例集的有效性。
81.然而,尽管现有存在一些基于算法的自动化测试用例生成方案,但是,现有方案无法实现测试用例的批量生产,且所生成测试用例对于被测软件来说,覆盖率低导致有效性较差。
82.针对此,本发明提出一种测试用例的生成方法,规范了自动化测试用例生成设计方法,首先根据一种基于正则表达式生成的用例模板,生成批量测试用例,构造多场景、多轮对话用例;然后通过构造适应度函数把如何自动化生成最优测试用例转化成一个函数优化问题;最后在基于搜索的测试用例生成框架的基础上,覆盖准则选取的是路径分支覆盖,即,先是随机选取粒子群,作为测试函数的输入参数,通过差分进化算法(并便于理解和阐述,后文均以de算法代为描述,其中,de的全称为differential evolution)迭代更新粒子群,直至达到终止条件输出最优测试用例。此方法的目的是优化测试用例的路径分支覆盖率,并且实现路径的自适应调整。本发明提出的一种测试用例的生成方法,能够自动批量生
成有效的测试用例(包括单轮、多轮、多场景交互),自动覆盖代码程序分支,有助于快速、精确的找到最优的测试用例。测试效率高,经算法优化过后测试用例覆盖面全,提高测试准确率。
83.针对上述现象和技术构思,提出本发明提供的一种测试用例的生成方法的各个实施例。
84.请参照图2,图2为本发明测试用例的生成方法第一实施例的流程示意图,在本实施例中,该测试用例的生成方法应用于上述终端设备,该测试用例的生成方法包括:
85.步骤s10,根据预设的句式模板生成测试用例,其中,所述句式模板基于正则表达式规则设定生成;
86.终端设备调用预先基于正则表达式规则设定生成的句式模板,并通过随机匹配关键字的方式,自动化生成批量的测试用例。
87.需要说明的是,在本实施例中,句式模板的数量大于或者等于一,且,在句式模板为多个时,各句式模板按照场景进行分类。此外,每一个句式模板由多个关键字

key组成,每个关键字

key对应多个value值。如此,终端设备具体可利用每个句式模板生成随机匹配多个由关键字

key组成的字符串,并分别将value值填充至对应的关键字

key所在的槽位,从而可自动、批量的生成用于进行对被测软件程序进行测试的测试用例。
88.步骤s20,构造符合测试覆盖准则的适应度函数,并根据所述适应度函数计算所述测试用例针对被测软件程序的适应度值;
89.终端设备在自动化生成批量的测试用例之后,进一步构造一符合测试覆盖准则的适应度函数,然后,利用该适应度函数计算输入到被测软件程序进行测试运行的测试用例,针对该被测软件程序的适应度值。
90.具体地,例如,在本实施例中,终端设备将输入被测软件程序进行测试运行的测试用例,作为所构造的符合测试覆盖准则的适应度函数的输入,先筛选输出该测试用例中的有效测试用例,并进一步通过初始化搜索算法,将基于de算法每一次迭代后优化该有效测试用例得到的粒子群作为被测软件程序的输入参数,然后,通过启动运行对该被测软件程序的测试操作,以收集得到该有效测试用例对于该被测软件程序的路径覆盖信息,再由该适应度函数利用该路径覆盖信息计算出当前被作为输入参数的测试用例的适应度值。
91.需要说明的是,在本实施例中,输入被测软件程序进行测试运行的测试用例可以仅为一个,或者还可以为多个测试用例组成的测试用例集。
92.步骤s30,根据所述适应度值迭代寻找最优解,以确定所述测试用例中的最优测试用例。
93.终端设备在利用适应度函数计算得出测试用例针对被测软件程序的适应度值之后,即根据该适应度值进行迭代以寻找最优解,从而确定出生成的该测试用例当中可全面覆盖被测软件程序的最优测试用例。
94.具体地,例如,在本实施例中,终端设备在通过调用适应度函数利用测试用例对于被测软件程序的路径覆盖信息,计算出当前被作为输入参数的测试用例的适应度值之后,进一步通过搜索算法继续自适应地根据该适应度值的优劣进行迭代以寻找更优解,并在最后判断到该迭代过程满足de算法的终止条件时,即可得到可全面覆盖被测软件程序的最优测试用例。
95.需要说明的是,在本实施例中,终端设备通过适应度值的优劣进行迭代,能够使当前的测试用例在de算法每次的迭代过程中不断的向最优位置靠近,如此,通过循环迭代执行优化操作即可找到能够覆盖被测软件程序所有分支的最优测试用例或者最后测试用例集。
96.本发明实施例提供一种测试用例的生成方法,通过终端设备调用预先基于正则表达式规则设定生成的句式模板,并通过随机匹配关键字的方式,自动化生成批量的测试用例;终端设备在自动化生成批量的测试用例之后,进一步构造一符合测试覆盖准则的适应度函数,然后,利用该适应度函数计算输入到被测软件程序进行测试运行的测试用例,针对该被测软件程序的适应度值;终端设备在利用适应度函数计算得出测试用例针对被测软件程序的适应度值之后,即根据该适应度值进行迭代以寻找最优解,从而确定出生成的该测试用例当中可全面覆盖被测软件程序的最优测试用例。
97.本发明相比于传统自动化测试用例的生成方式,本发明基于正则表达式设定句式模板,从而可利用该句式模板自动化进行测试用例的批量生成,此外,本发明还通过构造适应度函数来计算所生成测试用例对于被测软件程序的适应度值,从而基于该适应度值进行迭代寻优操作确定出所生成的测试用例中的最优测试用例,如此,能够在极大程度上提高测试用例对于被测软件程序的覆盖率,从而确保了所生成测试用例针对被测软件程序的有效性,进而提升了对被测软件程序的测试准确性。
98.进一步地,基于上述第一实施例,提出本发明测试用例的生成方法的第二实施例,本实施例与上述第一实施例之间的主要区别在于,在本实施例中,所述句式模板包括主句模板和子句模板,上述第一实施例中的步骤s10,可以包括:
99.步骤s101,调用所述主句模板匹配符合所述正则表达式规则的字符串句式生成主句测试用例;
100.步骤s102,调用所述子句模板匹配符合所述正则表达式规则的字符串句式生成子句测试用例;
101.终端设备预先基于正则表达式来生成句式模板,然后,通过调用该句式模板当中的主句模板,从而基于该主句模板所拥有的关键字进行匹配得到符合该正则表达式规则的字符串句式作为主句测试用例。以及,终端设备通过调用所生成句式模板当中的子句模板,从而基于该子句模板所拥有的关键字进行匹配得到符合该正则表达式规则的字符串句式作为子句测试用例。
102.需要说明的是,在本实施例中,终端设备在设定的句式模板为多个时,各句式模板按照场景进行分类,且,每一个句式模型又分为主句模板和子句模板,该主句模板和子句模板各自所拥有的关键字

key所对应的value值同样也按照场景进行分类。
103.具体地,例如,在本实施例中,请参照图4所示的句式模型(在本实施例以及本文所阐述其它各实施例当中,句式模型即为本发明测试用例的生成方法中所提及的句式模板),假定终端设备基于正则表达式生成的句式模板为s
(1,2,3...n)
,该句式模板s
(1,2,3...n)
包括主句模板:m
(1,2,3...n)
,且该主句模板m
(1,2,3...n)
由主句模板字符串内的关键字

key值:m_key
(1,2,3...n)
组成,而该关键字

key值:m_key
(1,2,3...n)
分别对应有value值:m_value
(1,2,3...n)
。此外,该句式模板s
(1,2,3...n)
还包括字句模板:n
(1,2,3...n)
,同理,该字句模板:n
(1,2,3...n)
由主句模板字符串内的关键字

key值:n_key
(1,2,3...n)
组成,而该关键字

key值:
n_key
(1,2,3...n)
分别对应有value值:n_value
(1,2,3...n)

104.终端设备调用每个主句模板:m
(1,2,3...n)
以基于该主句模板m
(1,2,3...n)
字符串内的关键字

key值:m_key
(1,2,3...n)
随机匹配多个字符串,并分别在该关键字

key值:m_key
(1,2,3...n)
所在的槽位填充对应的value值:m_value
(1,2,3...n)
,从而自动、批量的生成主句测试用例。
105.此外,终端设备还调用每个子句模板:n
(1,2,3...n)
以基于该子句模板n
(1,2,3...n)
字符串内的关键字

key值:n_key
(1,2,3...n)
随机匹配多个字符串,并分别在该关键字

key值:n_key
(1,2,3...n)
所在的槽位填充对应的value值:n_value
(1,2,3...n)
,从而自动、批量的生成子句测试用例。
106.步骤s103,针对同一场景下的所述主句测试用例和所述子句测试用例进行排列交叉组合以形成多轮测试用例集。
107.终端设备在通过分别调用主句模板和子句模板以随机匹配生成批量主句测试用例和字句测试用例之后,进一步针对分类为同一场景下的主句测试用例和字句测试用例进行排列交叉组合,从而形成用于针对被测软件程序进行测试运行的多轮测试用例集。
108.需要说明的是,在本实施例中,请参照如图5所示的多轮对话测试用例。假定终端设备生成的主句测试用例集被表示为{m1,m2,...m
j
,m
n
}、子句测试用例集被表示为{ω1,ω2,...,ω
j
}。则,终端设备通过将同一场景下主句测试用例集与子句用例集进行排列交叉组合形成成多轮测试用例集可以表示为{ο1,ο2,...,ο
j
}。
109.进一步地,在一种可行的实施例中,在上述步骤s103之前,本发明测试用例的生成方法,还可以包括:
110.步骤s104,计算相互两个所述主句测试用例或者相互两个所述字句测试用例的余弦相似度;
111.终端设备在针对分类为同一场景下的主句测试用例和字句测试用例进行排列交叉组合之前,还预先针对该分类为同一场景下的主句测试用例和字句测试用例,分别计算相互两个主句测试用例之间的余弦相似度和相互两个字句测试用例之间的余弦相似度。
112.具体地,例如,在本实施例中,假定终端设备通过调用主句模板m
(1,2,3...n)
自动、批量的生成了n个主句测试用例,且该n个主句测试用例以用例集{p1,p2,...,p
n
}进行表示。如此,终端设备通过将该用例集中测试用例依次两两互相进行余弦相似度计算得到s1=sim(p1,p
n
)、s2=sim(p2,p
n
‑1).....。
113.需要说明的是,在本实施例中,终端设备针对相互两个测试用例进行余弦相似度计算的工作具体如下所示:
[0114][0115]
同理,终端设备采用上述相同的过程计算得到所自动生成的各字句测试用例两两相互之间的余弦相似度。
[0116]
步骤s105,确定所述余弦相似度是否大于或者等于预设阈值;
[0117]
步骤s106,若是,在所述主句测试用例或者所述子句测试用例中去除任意用例后,
继续计算所述余弦相似度直至确定到所述余弦相似度小于所述预设阈值。
[0118]
终端设备在计算得到相互两个主句测试用例之间的余弦相似度,和相互两个字句测试用例之间的余弦相似度之后,进一步将该余弦相似度与预设阈值进行比较,以确定该余弦相似度是否大于或者等于该预设阈值,从而,在通过比对确定该余弦相似度大于或者等于该预设阈值时,在各个主句测试用例或者各个子句测试用例当中,去除任意某个测试用例,然后,终端设备继续计算去除该测试用例之后,剩下的各个主句测试用例或者各个子句测试用例当中,相互两个主句测试用例之间的余弦相似度,和相互两个字句测试用例之间的余弦相似度,以将该余弦相似度进一步与该预设阈值进行比对确定是否大于或者等于该预设阈值,如此循环,直至确定到所计算的余弦相似度小于该预设阈值。
[0119]
具体地,例如,在本实施例中,假定预设阈值为t,若设定阈值t,若终端设备计算得到的相互两个主句测试用户的余弦相似度s1>t,则,终端设备在自动生成的全部主句测试用例中任意去除p1或者p
n
,之后,终端设备进一步计算该全部主句测试用例中去除p1或者p
n
后,剩余的各个主句测试用例两两相互之间的余弦相似度s2,并在该s2>t时,进一步在剩余的该各个主句测试用例中再任意去除p2或者p
n
‑1,如此循环,直至所有的主句测试用例集中两两用例互相的余弦相似度sim都小于阈值t,则形成新的主句测试用例集{m1,m2,...m
j
,m
n
}。
[0120]
此外,相同的,若终端设备计算得到的相互两个子句测试用户的余弦相似度s3>t,则,终端设备在自动生成的全部子句测试用例中任意去除p1或者p
n
,之后,终端设备进一步计算该全部子句测试用例中去除p1或者p
n
后,剩余的各个子句测试用例两两相互之间的余弦相似度s4,并在该s4>t时,进一步在剩余的该各个主句测试用例中再任意去除p2或者p
n
‑1,如此循环,直至所有的子句测试用例集中两两用例互相的余弦相似度sim都小于阈值t,则形成新的子句测试用例集{ω1,ω2,...,ω
j
}。
[0121]
在本实施例中,本发明相比于传统自动化测试用例的生成方式,本发明用正则表达式模板匹配技术,通过模板匹配生成所有符合该规则的字符串句式,字符串句式表达式有若干个key组成,key映射若干个value值,value值自动随机填充中文短语及中文关键词,即可生成批量的测试用例。此外,本发明通过将句式模板按场景、主句、子句进行分类,主句用例集、子句用例集还通过余弦相似度实现用例去重,去重的主句用例集和子句用例集通过排列组合,构造高效的多轮、多场景交互文本对话测试用例集。
[0122]
进一步地,基于上述第一实施例,提出本发明测试用例的生成方法的第三实施例,本实施例与上述第一实施例之间的主要区别在于,在本实施例中,上述第一实施例中的步骤s20中,“构造符合测试覆盖准则的适应度函数”的步骤,可以包括:
[0123]
步骤s201,获取所述被测软件程序的分支节点;
[0124]
终端设备在构造符合测试覆盖准则的适应度函数的过程中,先获取当前需要进行测试的被测软件程序的全部的分支节点。
[0125]
具体地,例如,在本实施例中,假定当前被测软件程序有n个分支,而输入的测试用例总计有m个维度。终端设备通过对被测软件程序进行静态分析后得到相应的接口信息,从而确定该被测软件程序全部的n个分支节点。
[0126]
步骤s202,根据所述分支节点结合预设的分支距离函数构造得到符合所述测试覆盖准则的适应度函数。
[0127]
终端设备在获取得到被测软件程序的全部的分支节点之后,进一步根据该分支节点结合预设的分支距离函数,来构造得到符合测试覆盖准则的适应度函数。
[0128]
需要说明的是,在本实施例中,预设的分支距离函数具体可以为f1=(x1,x2,...,x
m
)、f2=(x1,x2,...,x
m
)

f
n
=(x1,x2,...,x
m
)。
[0129]
具体地,例如,在本实施例中,终端设备在确定被测软件程序全部的n个分支节点之后,再对该被测软件程序中每个分支节点前进行插装操作,并加入与当前分支相对应的分支距离函数f1=(x1,x2,...,x
m
)、f2=(x1,x2,...,x
m
)

f
n
=(x1,x2,...,x
m
),然后将所有的分支函数以叠加的形式构造出适应度函数:f=f1 f2 ... f
n

[0130]
需要说明的是,在本实施例中,当时,表明当前的测试用例己实现针对被测软件程序各个分支的全覆盖,即,覆盖率达到100%。如此,为了让结果值归一标准化,在覆盖率范围在0

100之间时,终端设备构造的适应度函数具体可如下所示公式:
[0131][0132]
进一步地,在一种可行的实施例中,上述步骤s20中,“根据所述适应度函数计算所述测试用例针对被测软件程序的适应度值”的步骤,可以包括:
[0133]
步骤s203,在所述被测软件程序中输入所述测试用例进行测试运行,以收集所述测试用例针对所述被测软件程序全部的路径覆盖信息;
[0134]
终端设备在计算测试用例针对被测软件程序的适应度值的过程当中,先将生成的测试用例输入到该被测软件程序当中进行测试运行,如此,在该被测软件程序基于该测试用例进行测试运行的过程当中,收集该测试用例对于该被测软件程序全部的路径覆盖信息。
[0135]
步骤s204,调用所述适应度函数以基于所述路径覆盖信息计算得到所述测试用例针对所述被测软件程序的适应度值。
[0136]
终端设备在收集得到测试用例对于被测软件程序全部的路径覆盖信息之后,即进一步调用预先构造得到的适应度函数,来利用该路径覆盖信息进行计算,以得到该测试用例针对该被测软件程序的适应度值。
[0137]
进一步地,在一种可行的实施例中,上述第一实施例中的步骤s30,可以包括:
[0138]
步骤s301,调用预设的差分进化算法根据所述适应度值进行迭代寻找最优解,以确定所述测试用例中覆盖所述被测软件程序全部分支的最优测试用例。
[0139]
终端设备在利用适应度函数计算得出测试用例针对被测软件程序的适应度值之后,通过调用预设的差分进化算法来根据该适应度值进行迭代以寻找最优解,从而确定出生成的该测试用例当中可全面覆盖被测软件程序的最优测试用例。
[0140]
需要说明的是,在本实施例中,终端设备通过调用预设的差分进化算法

de算法初始化提供被测软件程序的程序接口的输入参数,并进一步传入测试用例数据以调度接口程序进行测试运行,之后,终端设备收集测试用例针对被测软件程序全部的路径覆盖信息,最后,终端设备进一步基于调用该de算法利用该路径覆盖信息进行分析与判断测试用例是否
已经达到最优位置,若是,则输出该测试用例,反之,则继续迭代运行测试用例的寻优过程。
[0141]
进一步地,在一种可行的实施例中,上述步骤s301,可以包括:
[0142]
步骤s3011,调用所述差分进化算法针对所述测试用例进行优化操作得到优化更新后的最优解;
[0143]
步骤s3012,若判断到所述测试用例的所述适应度值达到预设目标误差,则输出所述最优解;
[0144]
步骤s3013,若判断到所述适应度值未达到所述预设目标误差,则针对所述测试用例重新进行优化操作得到新的最优解并计算新的适应度值,直至所述适应度值达到所述预设目标误差后输出所述新的最优解。
[0145]
具体地,例如,在本实施例中,请参照如图6所示的应用流程。终端设备通过调用de算法进行初始化操作,以初始化de粒子群控制参数:种群大小np、缩放因子f与杂交概率cr,从而随机产生初始种群s。然后,终端设备通过调用预先构造好的适应度函数对该初始种群s进行评价,即,基于该适应度函数计算该初始种群s每个个体的适应度值。再然后,终端设备利用该de算法对该初始种群s逐个进行个体的优化操作,及执行变异、杂交、选择操作,并更新个体最优解:pbest和群体最优解:gbest。最后,终端设备通过判断所计算得到的适应度值是否达到预设目标误差,即,该适应度值是否达到:连续k次迭代算法的最优解之差小于或等于一定的精度值α,若判断到位达到,则终端设备进行混沌搜索转到对初始种群s进行评价的过程,否则,终端设备输出群体最优值gbest到最佳的测试用例集。
[0146]
在本实施例中,终端通过调用de算法,并在该de算法中引入混沌算法,有效地改善了适应度函数极值陷入局部最优的问题,从而能够获取得到针对被测软件程序的覆盖率最优的测试用例集。此外,基于引入混沌算法,还加速了整体的收敛速度,从而减少了自动化测试用例生成时间。
[0147]
进一步地,基于上述本发明测试用例的生成方法的第一实施例、第二实施例和第三实施例,提出本发明测试用例的生成方法的最优实施例。
[0148]
在本实施例中,请参照如图3所示的应用场景。本发明实施例终端设备通过用例模块、驱动模块以及算法模块实现自动化进行测试用例的批量生成,以及提高测试用例对于被测软件程序的覆盖率,从而确保了所生成测试用例针对被测软件程序的有效性,进而提升了对被测软件程序的测试准确性。
[0149]
具体地,例如,在本实施例中,通过用例模块:设定一种基于正则表达式规则生成的句式模板,每个句式模板由多个关键字key组成,每个key对应多的value值,每个句式模板生成随机匹配多个有key组成的字符串,将value值填充对应的key槽位,即可生成批量用例。此外,还通过驱动模块:测试驱动模块首先将算法模块的输出作为输入,运行程序后,收集测试用例的覆盖信息并自动将其反馈给算法模块。以及,通过算法模块:根据驱动模块反馈的覆盖信息,调度适应度函数,获取测试用例的适应值并对其判断。该模块是测试用例自动生成算法整体框架的关键,在算法每次的迭代过程中,使当前用例不断的向最优位置靠近,循环执行,直到找到覆盖程序所有分支的最优测试用例集。
[0150]
进一步地,本发明还提供一种测试用例的生成系统,该测试用例的生成系统包括客户端。请参照图7,图7为本发明测试用例的生成系统一实施例的功能模块示意图。如图7所示,本发明测试用例的生成系统包括:
[0151]
用例生成模块10,用于根据预设的句式模板生成测试用例,其中,所述句式模板基于正则表达式规则设定生成;
[0152]
适应度计算模块20,用于构造符合测试覆盖准则的适应度函数,并根据所述适应度函数计算所述测试用例针对被测软件程序的适应度值;
[0153]
寻优模块30,用于根据所述适应度值迭代寻找最优解,以确定所述测试用例中的最优测试用例。
[0154]
进一步地,所述句式模板包括主句模板和子句模板,用例生成模块10,包括:
[0155]
第一生成单元,用于调用所述主句模板匹配符合所述正则表达式规则的字符串句式生成主句测试用例;以及,
[0156]
第二生成单元,用于调用所述子句模板匹配符合所述正则表达式规则的字符串句式生成子句测试用例;
[0157]
多轮用例组合单元,用于针对同一场景下的所述主句测试用例和所述子句测试用例进行排列交叉组合以形成多轮测试用例集。
[0158]
进一步地,用例生成模块10,还包括:
[0159]
计算单元,用于计算相互两个所述主句测试用例或者相互两个所述字句测试用例的余弦相似度;
[0160]
确定单元,用于确定所述余弦相似度是否大于或者等于预设阈值;
[0161]
去重单元,用于在所述主句测试用例或者所述子句测试用例中去除任意用例后,继续计算所述余弦相似度直至确定到所述余弦相似度小于所述预设阈值。
[0162]
进一步地,适应度计算模块20,包括:
[0163]
获取单元,用于获取所述被测软件程序的分支节点;
[0164]
第一计算单元,用于根据所述分支节点结合预设的分支距离函数构造得到符合所述测试覆盖准则的适应度函数。
[0165]
进一步地,适应度计算模块20,还包括:
[0166]
拟测试单元,用于在所述被测软件程序中输入所述测试用例进行测试运行,以收集所述测试用例针对所述被测软件程序全部的路径覆盖信息;
[0167]
第二计算单元,用于调用所述适应度函数以基于所述路径覆盖信息计算得到所述测试用例针对所述被测软件程序的适应度值。
[0168]
进一步地,寻优模块30,还用于调用预设的差分进化算法根据所述适应度值进行迭代寻找最优解,以确定所述测试用例中覆盖所述被测软件程序全部分支的最优测试用例。
[0169]
进一步地,寻优模块30,包括:
[0170]
优化单元,用于调用所述差分进化算法针对所述测试用例进行优化操作得到优化更新后的最优解;
[0171]
第一寻优单元,用于若判断到所述测试用例的所述适应度值达到预设目标误差,则输出所述最优解;
[0172]
第二寻优单元,用于若判断到所述适应度值未达到所述预设目标误差,则针对所述测试用例重新进行优化操作得到新的最优解并计算新的适应度值,直至所述适应度值达到所述预设目标误差后输出所述新的最优解。
[0173]
其中,上述测试用例的生成系统中各个模块的功能实现与上述测试用例的生成方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
[0174]
本发明还提供一种计算机存储介质,该计算机存储介质上存储有测试用例的生成程序,所述测试用例的生成程序被处理器执行时实现如以上任一项实施例所述的测试用例的生成方法的步骤。
[0175]
本发明计算机存储介质的具体实施例与上述测试用例的生成方法各实施例基本相同,在此不作赘述。
[0176]
本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上任一项实施例所述的测试用例的生成方法的步骤。
[0177]
本发明计算机存储介质的具体实施例与上述测试用例的生成方法各实施例基本相同,在此不作赘述。
[0178]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0179]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0180]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0181]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
转载请注明原文地址:https://win.8miu.com/read-50411.html

最新回复(0)