首页> 中国专利> 一种基于变异的测试用例自动生成系统

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

摘要

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

著录项

  • 公开/公告号CN116010245A

    专利类型发明专利

  • 公开/公告日2023-04-25

    原文格式PDF

  • 申请/专利权人 北京理工大学;

    申请/专利号CN202211571967.6

  • 申请日2022-12-08

  • 分类号G06F11/36(2006.01);

  • 代理机构北京正阳理工知识产权代理事务所(普通合伙) 11639;

  • 代理人周蜜

  • 地址 100081 北京市海淀区中关村南大街5号

  • 入库时间 2023-06-19 19:25:17

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-05-12

    实质审查的生效 IPC(主分类):G06F11/36 专利申请号:2022115719676 申请日:20221208

    实质审查的生效

  • 2023-04-25

    公开

    发明专利申请公布

说明书

技术领域

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

背景技术

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

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

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

发明内容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

有益效果:

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

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

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

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

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

附图说明

图1为基于变异的测试用例自动生成系统的总体框架;

图2为用例解析模块工作流程;

图3为用例结构分析模块的工作流程;

图4为内容集合构建模块的工作流程;

图5为用例生成模块工作流程。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。

首先进行术语解释:

软件测试:软件测试是通过将实际输出与预期输出进行审核或者比较,从而鉴定软件的正确性、完整性、安全性和质量的过程。在软件测试中,测试者在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估。

测试用例:测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。

测试用例自动生成:测试用例自动生成是自动测试的重要步骤,是通过程序或规则自动生成新测试用例的过程。测试用例自动生成技术主要分为基于规则的生成方法和基于变异的生成方法。基于规则的生成方法通过对具体的待测程序进行建模,根据模型或语法规范构造测试用例;基于变异的生成方法通过修改格式良好的种子输入来生成新的测试用例。基于规则的生成方法可以生成容易通过完整性检查或语法检查的输入;基于变异的生成方法可以有效地测试具有紧凑和非结构化数据格式的程序。

种子测试用例:种子测试用例指在测试用例变异过程中执行变异操作的当前测试用例,种子测试用例是新测试用例的基础。在本发明中,种子测试用例包括人工提供的初始测试用例(第一轮生成)和在变异时得到的新测试用例集中随机抽取的若干个测试用例(第二轮及之后的生成)。

测试用例变异:测试用例变异指在基于变异的测试用例生成中通过对种子测试用例执行变异操作生成新测试用例的过程。该过程对选取的种子测试用例采取随机或指定的变异操作,即翻转、复制、替换以及增删改等变异操作,以期得到能够触发新路径、提高程序测试覆盖率的新测试用例。在基于变异的测试用例生成方法中,测试用例的变异策略的选择决定了得到的新测试用例集的质量,高质量的测试用例集对被检测程序的路径覆盖能力强,能够检测出更多的程序缺陷和漏洞。

黑盒测试:黑盒测试指将软件测试环境模拟为不可见的“黑盒”,通过数据输入观察数据输出,检查软件内部功能是否正常。

XML格式:XML指可扩展标记语言(eXtensible Markup Language),是一种结构化的标记语言,常用于描述和存储数据,是描述程序数据内容和结构的标准格式之一,大量用于各种配置文档、数据文档和网络接口中。XML格式文件由若干个可嵌套的单个XML片段组成,其中每个XML片段称为一个XML节点。

JSON格式:JSON指JavaScript对象表示(JavaScript Object Notation),是一种轻量级的数据交换格式。JSON基于JavaScript的子集构建,采用完全独立于编程语言的文本格式来存储和表示数据,具有简洁和清晰的层次结构。JSON格式是一种理想的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,能够有效地提升网络传输效率,大量用于各种配置文档、数据文档和网络接口中。JSON格式文件由若干个键值对组成,每个键值对为一个JSON节点,其中键为字符串,值为JavaScript对象或数组。

测试用例树:测试用例树指本发明中对XML格式和JSON格式测试用例解析后生成的统一的树状数据结构,该结构是程序内部使用的逻辑上的树状表示,能够表示测试用例信息。

内容集合:内容集合指本发明中包含测试用例树中所有具有值的叶子节点的值(即内容)的集合。

本发明提供了一个面向XML格式和JSON格式文件的基于变异的测试用例自动生成系统,如图1所示,包括用例解析模块、用例结构分析模块、内容集合构建模块以及用例生成模块;

所述用例解析模块用于根据各个种子测试用例中的从属关系和并列关系分别生成各个种子测试用例对应的测试用例树,其中,种子测试用例为XML格式或JSON格式的测试用例;当种子测试用例为XML格式时,测试用例树的每一个叶子节点映射的信息包括种子测试用例中各XML节点的节点名、节点值以及属性值;当种子测试用例为JSON格式时,测试用例树的每一个叶子节点映射的信息包括种子测试用例中各JSON节点的键、值,其中,键为属性名字符串,值为属性值。

所述用例结构分析模块用于遍历各测试用例树以获取各个种子测试用例的组成结构和所有值的字段类型信息。其中,组成结构信息指测试用例树的组成结构,包括字段结构、字段包含关系;字段类型信息指测试用例树叶子节点的值的数据类型,如整数类型、浮点数类型等。

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

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

进一步的,用例生成模块读取用例结构分析模块和内容集合模块对用例的分析结果,根据分析结果针对用例的每个节点选取符合语义的变异策略,此后根据构建的生成策略,在测试用例树叶子节点执行变异操作,执行完成后,将变异后的测试用例树还原为XML或JSON格式,从而生成新的测试用例。

进一步的,测试用例变异操作通过前述用例结构分析模块和内容集合模块提供的反馈信息能够自动识别测试用例树的语法标记和高层语义,能够检测内容是否构成某种特定的有效语法,使用例生成模块可以基于测试用例的内容和结构执行针对性的变异操作。

由此可见,测试用例自动生成的整个流程从若干人工提供的初始输入用例开始,经过用例解析模块解析用例,然后用例结构分析模块和内容集合构建模块并行工作,对用例整体结构进行分析,此后将分析得到的信息交由用例生成模块,构建变异策略并执行,生成新的测试用例。系统整体采用循环结构,在将初始用例全部执行一轮变异之后,从变异生成的新的测试用例中随机抽取若干个测试用例,作为种子测试用例再次送入用例解析模块,作为新一轮测试用例生成的开始。系统生成的测试用例数量达到用户指定的测试用例生成数量后,系统的测试用例生成循环结构结束,系统将生成的新测试用例返回给用户。

下面结合附图对测试用例自动生成系统的各个模块进行详细说明。

用例解析模块的工作流程如图2所示,用例解析模块解析种子测试用例,将文本形式的XML或JSON格式的测试用例解析成测试用例树,这是解决测试用例自动生成通用性弱问题的基础。

针对XML用例,用例解析模块使用XML解析器将XML文本格式的种子测试用例解析成可操作的树状结构的XML文档对象模型,其中XML解析器由标准库提供。用例解析模块从XML文本生成树状结构的XML文档对象模型后,所述测试用例自动生成系统的其他模块可以通过树形结构访问XML文档对象的各个子节点,包括节点名(nodeName)、节点值(nodeValue)、属性值(attributes),且能够从文档对象模型的某个节点出发,访问其父节点和子节点,从而从文档对象模型的任意节点出发可以遍历整个文档对象模型。用例解析模块处理后的树状结构是后续对XML测试用例结构分析和内容集合构建的基础数据结构。

针对JSON用例,用例解析模块使用JSON解析器将JSON文本格式的种子测试用例解析成可操作的JSON对象,其中JSON解析器由标准库提供。JSON对象是一个以属性名为键,以属性值为值的字典,且属性值可以是嵌套的JSON对象,从而其结构为树状结构。用例解析模块将文本格式的JSON对象解析为类似树的结构后,所述测试用例自动生成系统的其他模块能够访问JSON对象中的叶子节点并能够从某个节点出发,访问其父节点和子节点,从而从JSON对象的任意节点出发可以遍历整个JSON对象。用例解析模块处理后的JSON对象是后续对JSON测试用例结构进行分析和内容集合构建的基础数据结构。

由此可见,用例解析模块将XML和JSON均抽象成树状结构,因此在后文中统一称为测试用例树结构。

用例结构分析模块的工作流程如图3所示,用例结构分析分为字段类型分析和组成结构分析两个步骤。

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

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

由此可见,用例结构分析模块分析测试用例结构,生成包含字段类型和组成结构的用例结构信息,为后续构建变异策略提供足够的信息。

内容集合构建模块的工作流程如图4所示,分为用例内容收集和用例内容集合创建和更新两个步骤。

在用例内容收集步骤中,通过从根节点遍历测试用例树,收集测试用例树中出现的所有具有值的节点的值(即内容),此后按内容的类型,即整数类型、浮点数类型、字符串类型,分别收集内容。

在用例内容集合创建和更新步骤中,将所述用例内容收集步骤中收集的对应类型的内容加入对应的用例内容集合。其中,用例内容集合包括整数数据集合、浮点数数据集合、字符串数据集合三类,其中字符串数据集合按照字符串的长度划分为长度步长为5的m(m>4)个子集合,所述划分后的子集合如公式{str|(i*5+1)≤str.length<(i*5+5)},i∈N所示。

所述测试用例生成系统会使用不同的种子测试用例变异生成新测试用例,因此所述内容集合模块中构建的内容集合会不断根据新的种子测试用例进行增量更新,不断向集合中添加新的内容,且在单次循环结束后原有内容不会删除。

所述内容集合构建模块通过构建内容集合,将测试用例中的内容分类储存,从而实现在变异策略中快速查询所需内容值的功能。所述内容集合在下文中的部分变异策略中使用。

用例生成模块的工作流程如图5所示,其中包含变异策略构建和变异操作执行两个步骤。

所述变异策略构建步骤包括基于随机化的变异策略构建和基于类型推断的变异策略构建。

所述基于随机化的变异策略构建随机地选择变异策略,这些变异策略能够大范围的修改测试用例,从而增强了生成的测试用例的差异性和丰富性。

所述基于类型推断的变异策略构建基于用例结构分析的结果,为生成策略集合添加针对节点的语义化的变异策略,从而增强测试用例变异操作的针对性。

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

所述基于类型推断的变异策略描述如下:

(1)按位翻转:按位翻转策略对字符串的随机位置执行按位翻转,所述按位翻转是对字符串中字符的编码的值执行二进制位级别的操作,所述按位翻转操作的翻转长度从1bit到32bit随机选取。当字符串符合Base64编码格式时,首先对字符串进行Base64解码,解码后将按位翻转操作应用至Base64解码后的字符串上,此后将变异后的字符串重新使用Base64编码。

(2)算数运算:算数运算对整数和浮点数执行加减操作,所述加减操作的操作数的值根据被变异的字段确定,操作数的值将设定为基础值的k%(10<=k<=50)大小范围内,防止值被设置为明显无效的值。

(3)算数特殊值:特殊值可能在整数和浮点数类型的子节点中有特殊含义,因此将子节点的值设置为特殊值可能会使得程序进入特殊行为。所述特殊值包括1,0,-1,-1.0,0.0,1.0和所述内容集合中整数集合和浮点数集合中出现次数大于10次的值。

(4)节点复制:将数组类型中的随机选取的随机个数的元素值复制随机份,然后将新值插入数组。

具体的,所述基于随机化的变异策略构建步骤中使用的变异策略在遍历测试用例树过程中有随机的概率执行随机选取的变异策略。其中所述的变异策略描述如下:

(1)节点插入和替换:将所述内容集合构建模块中构建的内容集合中的节点的值插入或替换用例中节点的值,其中针对数组类型插入节点值,针对整数、浮点数和字符串替换节点值。

(2)拼接:通过将两个测试用例树节点进行拼接,得到一个新节点,其中拼接的节点的值的是从先前构建的内容集合中选取的随机个数的随机的值。本策略只在子节点数大于10的节点上执行。

(3)添加:从所述内容集合构建模块中构建的内容集合中随机选取一个值,添加到测试用例树中的随机节点位置,包含新值的节点作为该节点的子节点。本策略只在子节点数小于5的节点上执行。

所述变异操作执行步骤执行基于所述变异策略构建步骤中构建的变异策略。所述变异操作执行步骤针对所述基于类型推断的变异策略构建步骤中构建的变异策略,从根节点开始遍历测试用例树,访问测试用例树的叶子节点时执行根据当前叶子节点对应的组成结构和字段类型信息所符合的特征选取的变异策略对当前测试用例树的叶子节点的值进行变异,变异操作执行完成后,将变异后的测试用例树还原为XML或JSON格式,从而生成新的测试用例。所述变异操作执行步骤针对所述基于随机化的变异策略构建步骤中构建的变异策略,从根节点开始遍历测试用例树,访问测试用例树的叶子节点时执行根据所述基于随机化的变异策略构建中随机选取的变异策略对当前测试用例树的叶子节点进行变异,变异操作执行完成后,将变异后的测试用例树还原为XML或JSON格式,从而生成新的测试用例。

由此可见,用例生成模块通过采用随机化和基于语义的变异,将类型信息和变异结合起来,增强生成的测试用例的针对性和有效性,同时通过随机化变异策略增强生成的测试用例的差异性和丰富性,从而使本发明可以抹平不同来源的测试用例的差异性,基于JSON格式和XML格式这两种通用的数据交换格式,为多种来源的软件生成测试用例,解决了测试用例自动生成通用性的问题。

与此同时,本发明中采用的变异策略在测试用例树节点层次和测试用例树节点值层次进行变异,本发明提出的变异策略构建方法构建的变异策略符合原有语义,不会损坏测试用例的主结构,也即具有子节点的节点在树形结构中的连接关系不会发生变化,改变的只是叶子节点的值,因此解决了基于变异的测试用例生成方案会破坏测试用例结构的问题。

由此可见,本发明针对XML和JSON两种常见数据交换格式设计了基于变异的测试用例生成方法。这两种格式均大量用于各种配置文档、数据文档和网络接口中,不局限于某种特定的编程语言、编程框架和特定生成目标,因此本发明生成的测试用例具有通用性。与此同时,本发明使用随机化和基于语义的变异,将类型信息和变异结合起来增强针对性和有效性,同时通过随机化变异策略增强差异性和丰富性,能够最大程度抹平不同来源的测试用例生成任务的差异性。

同时,本发明针对基于变异的方法破坏测试用例的格式问题,设计了针对性的变异策略,先对初始测试用例进行解析,然后根据解析得到的用例子节点数据,推测对应的数据类型,再根据对应的子节点数据类型,应用针对性的具有正确语义的变异操作,因此解决了变异破坏用例格式的问题。

当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当然可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号