一种基于变异的测试用例自动生成系统

文档序号:33954212发布日期:2023-04-26 14:11阅读:122来源:国知局
一种基于变异的测试用例自动生成系统

本发明属于软件自动化测试领域,尤其涉及一种基于变异的测试用例自动生成系统。


背景技术:

1、软件测试是在规定的条件下对程序进行操作,将实际输出与预期输出进行比较,以发现程序错误或衡量软件质量,评估其是否满足设计要求的过程。在软件测试领域,测试用例自动生成技术是软件测试尤其是黑盒测试的一个重要研究领域。其中黑盒测试指将软件测试环境模拟为不可见的“黑盒”,通过数据输入观察数据输出,检查软件内部功能是否正常。

2、随着当前软件系统在各个领域的广泛应用,软件的正确性和可靠性越来越重要。目前,软件的正确性和可靠性主要靠软件测试来保证。软件测试过程中,需要编写大量测试用例以尽可能覆盖软件的各种行为分支。随着软件系统规模的增加,手工编写测试用例所需的人力越来越多,代价越来越高。因此通过自动化方法获取有效的测试用例的方法不断出现,其中一类方法为基于变异的测试用例自动生成技术,该技术主要通过对若干个初始用例进行变异得到大量测试用例。但现有的基于变异的测试用例自动生成技术有破坏原有测试用例结构、针对特定目标生成测试用例的通用性不够强等问题。

3、具体的,现有的测试用例自动生成方法通常只适用于某种编程语言或编程框架的测试用例生成任务,不具有很强的通用性。但是,现有的软件系统功能越来越强大,组件关系越来越复杂,因此同一种测试用例生成方法往往只能适应软件测试过程中涉及的一部分测试目标,难以迁移到新的应用环境,因而缺乏通用性。再者,现有基于变异的测试用例自动生成方法的变异策略对用例格式的感知不足,变异操作易破坏测试用例格式,从而产生较多无法识别的测试用例。这些无法识别的测试用例都是无效用例,既无法通过被测试程序的检验,更无法触发新的程序路径,降低了软件测试的效率和准确性。


技术实现思路

1、为解决上述问题,本发明提供一种基于变异的测试用例自动生成系统,针对xml和json两种常见数据交换格式设计了基于变异的测试用例生成方法,解决了如何通过基于变异的方法,在不破坏原有测试用例主结构的前提下,生成通用性强的测试用例的问题。

2、一种基于变异的测试用例自动生成系统,包括用例解析模块、用例结构分析模块、内容集合构建模块以及用例生成模块;

3、所述用例解析模块用于根据各个种子测试用例中的节点的从属关系和并列关系生成各个种子测试用例对应的测试用例树,其中,种子测试用例为xml格式或json格式的测试用例;

4、所述用例结构分析模块用于遍历各测试用例树以获取各个种子测试用例的组成结构和字段类型信息;

5、所述内容集合构建模块用于遍历测试用例树以获取对应的各个种子测试用例中出现的所有值,并将所有种子测试用例的所有值按照各自所属字段类型划分为多个集合;

6、所述用例生成模块用于在不改变测试用例树的非叶子节点的基础上,依次基于各测试用例树生成新测试用例。

7、进一步地,所述用例生成模块用于在不改变测试用例树的非叶子节点的基础上,依次基于各测试用例树生成新测试用例具体为:根据当前测试用例树对应的组成结构和字段类型信息所符合的特征,选取对应的变异策略来对当前测试用例树的叶子节点、当前测试用例树的叶子节点值进行变异,其中,值的变异以叶子节点的值为基准进行变异,或者以各内容集合中的随机选取的值为基准进行变异。

8、进一步地,所述用例解析模块对种子测试用例解析生成测试用例树。当种子测试用例为xml格式时,测试用例树的每一个节点映射的信息包括xml种子测试用例中各节点的节点名、节点值以及属性值;当种子测试用例为json格式时,测试用例树的每一个节点映射的信息包括json种子测试用例中各节点的键、值,其中,键为属性名字符串,值为属性值。

9、进一步地,所述用例结构分析模块的工作流程分为字段类型分析和组成结构分析两个步骤;

10、首先进行字段类型分析,此步骤通过遍历测试用例树,针对所有具有值的节点,将所述节点值作为特定类型或特殊值尝试进行解析,其中尝试的特定类型和特殊值包括整数类型、浮点数类型、字符串类型、数组类型、base64编码的字符串类型、布尔类型、为0的值、为1的值、为-1的值;

11、此后进行组成结构分析,此步骤通过从根节点开始遍历测试用例树,对于测试用例树中的每个节点进行计数,所述计数包括:所述节点包含的子节点的总个数、以及所述节点包含的不同类型的子节点的分类计数;其中,所述子节点的类型包括整数类型、浮点数类型、字符串类型,所述分类计数通过对不同类型的子节点的个数进行统计获得,即统计具有特定类型的值的子节点的个数,将其作为分类计数值。

12、进一步地,所述内容集合构建模块读取测试用例树构建用例内容集合,其中,内容集合构建模块的工作流程分为用例内容收集、用例内容集合创建和更新两个步骤;

13、在用例内容收集步骤中,通过从根节点遍历测试用例树,收集测试用例树中出现的所有具有值的节点的值,并将节点的值作为内容,进一步地,按内容的类型,即整数类型、浮点数类型、字符串类型分别收集内容;

14、在用例内容集合创建和更新步骤中,将所述用例内容收集步骤中收集的对应类型的内容加入对应的用例内容集合,其中,用例内容集合包括整数数据集合、浮点数数据集合、字符串数据集合三类,其中字符串数据集合再按照字符串的长度划分为长度步长均为5的m个子集合,且m>4。

15、进一步地,所述用例生成模块的工作流程分为变异策略构建和变异操作执行两个步骤,且所述变异策略构建包括基于随机化的变异策略构建,具体的,基于随机化的变异策略构建在遍历测试用例树过程中有随机的概率执行随机选取的变异策略,且基于随机化的变异策略构建中所使用的变异策略包括节点插入和替换、拼接、添加;

16、所述变异操作执行步骤中执行所述基于随机化的变异策略构建步骤中构建的变异策略,从根节点开始遍历测试用例树,访问测试用例树的叶子节点时根据所述基于随机化的变异策略构建中随机选取的变异策略对当前测试用例树的叶子节点进行变异。

17、进一步地,所述用例生成模块的工作流程分为变异策略构建和变异操作执行两个步骤,且所述变异策略构建包括基于类型推断的变异策略构建;

18、其中,所述基于类型推断的变异策略构建基于用例结构分析的结果,为生成策略集合添加针对节点的语义化的变异策略;具体的,所述基于类型推断的变异策略构建步骤中使用的变异策略均关联一个或多个特定类型,所述特定类型是所述用例结构分析模块中推断得到的字段类型,所述基于类型推断的变异策略包括按位翻转、算数运算、算数特殊值和节点复制,其中所述按位翻转策略适用字符串类型变异,所述算数运算策略适用整数类型和浮点数类型,所述算数特殊值策略适用整数类型和浮点数类型,所述节点复制策略适用数组类型;

19、所述变异操作执行步骤中执行所述基于类型推断的变异策略构建步骤中构建的变异策略,从根节点开始遍历测试用例树,访问测试用例树的叶子节点时执行根据当前叶子节点对应的组成结构和字段类型信息所符合的特征选取的变异策略对当前测试用例树的叶子节点的值进行变异。

20、进一步地,所述用例生成模块通过采用随机化和基于语义的变异,将类型信息和变异结合起来,同时通过随机化变异策略增强通用性。

21、进一步地,系统采用的变异策略在测试用例树节点层次和测试用例树节点值层次进行变异,且变异策略构建方法构建的变异策略符合原有语义,不会损坏测试用例的主结构,也即具有子节点的节点在树形结构中的连接关系不会发生变化,改变的只是叶子节点的值。

22、有益效果:

23、1、本发明提供一种基于变异的测试用例自动生成系统,先对初始测试用例进行解析,然后根据解析得到的用例子节点数据,获取对应的组成结构和字段类型信息,再根据对应的子节点数据类型,应用针对性的具有正确语义的变异操作生成新的测试用例,因此解决了变异操作损坏测试用例格式无法生成有效测试用例的问题;与此同时,本发明使用随机化和基于语义的变异,根据数据类型采用对应语义的变异策略,增强生成的测试用例的针对性和有效性,同时通过随机化的变异策略,增强生成的测试用例的差异性和丰富性,同时,采用多种针对xml和json格式特点设计的变异策略,最大程度消除不同来源的xml和json格式测试用例生成任务的差异性,增强测试用例生成方法的通用性。

24、2、本发明提供一种基于变异的测试用例自动生成系统,根据测试用例树对应的组成结构和字段类型信息所符合的特征,选取对应的变异策略对测试用例执行变异,也即本发明针对不同的数据类型,构建对数据类型具有正确语义的变异策略,并根据随机数概率性地执行变异策略,其中这些变异策略能够大范围的修改测试用例而不损坏测试用例格式。

25、3、本发明提供一种基于变异的测试用例自动生成系统,基于随机化的变异策略随机地选择变异策略,这些变异策略能够大范围的修改测试用例,从而增强了测试用例变异操作中生成的测试用例的差异性和丰富性;同时,基于类型推断的变异策略基于用例结构分析的结果,为生成策略集合添加针对节点的语义化的变异策略,从而增强测试用例变异操作的针对性和有效性。

26、4、本发明提供一种基于变异的测试用例自动生成系统,用例生成模块通过采用随机化和基于语义的变异,将类型信息和变异结合起来,增强生成的测试用例的针对性和有效性,同时通过随机化变异策略增强生成的测试用例的差异性和丰富性,从而使本发明可以抹平不同来源的测试用例的差异性。

27、5、本发明提供一种基于变异的测试用例自动生成系统,所采用的变异策略不会损坏测试用例的主结构,也即具有子节点的节点在树形结构中的连接关系不会发生变化,改变的只是叶子节点的值。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1