掌桥专利:专业的专利平台
掌桥专利
首页

测试数据、测试用例生成方法及系统、存储介质

文献发布时间:2023-06-19 11:26:00


测试数据、测试用例生成方法及系统、存储介质

技术领域

本发明涉及软件测试技术领域,尤其涉及测试数据、测试用例生成方法及系统、存储介质。

背景技术

软件测试是软件开发周期中不可或缺的环节,它是提高软件实用性以及保障软件质量的关键性技术之一。测试的目的是通过设计并执行测试集(许多测试用例)来检查和验证需求,而测试用例的设计是最复杂的,也是最关键,最耗时的一步。以用户故事或者用例编写的需求是设计测试用例的基础。传统的方法是由测试人员依据需求文档手工编写测试用例,测试用例质量的高低直接受到测试工程师的知识和能力的影响,且设计大量测试用例并不是一件容易的事情,导致测试阶段时间长,耗费成本高,同时也不适用于需求经常有变更的情况。自动化技术的应用可以降低测试成本并提供有关需求覆盖范围的保证。一些方法如基于模型的测试可以从系统的正式模型中自动地生成测试用例,但由于形式化规范语言复杂度高,不易理解;并且手工建模成本高,无法将软件测试的过程完全自动化,因此实用性不强,无法大规模推广使用。

自然语言在软件需求的描述中被广泛使用,自然语言为用户,开发人员,测试人员等提供了沟通的渠道。另一种方法可以根据自然语言描述的需求来自动生成测试用例。一些策略是基于特定的关键字检测,如需求中的if,else,这些关键字可以识别不同的用例场景。但是生成的测试用例是抽象的,不能确定在测试期间使用的实际输入值。一些策略是基于受控的自然语言(CNL),需要将CNL规范转换为形式规范,然后根据约束求解自动生成测试输入数据,但其也有一定的局限性,例如,该策略仅允许在需求中使用少数的特定动词,对于自然语言的表述有更为严格的限制,从而降低了其可用性;此外,现有的测试用例的测试数据往往需要用户针对测试数据的类型,人工设定测试数据的规则来生成测试数据,这样大大降低了测试的效率。

因此,如何解决现有的测试用例自动生成方法人工设定测试数据的规则来生成测试数据,测试效率低的问题已成为本领域技术人员亟待解决的技术问题。

发明内容

本发明提供了测试数据、测试用例生成方法及系统、存储介质,用于解决现有的测试用例自动生成方法人工设定测试数据的规则来生成测试数据,测试效率低的技术问题。

为解决上述技术问题,本发明提出的技术方案为:

一种测试数据生成方法,应用于测试用例自动生成系统中,包括以下步骤:

读取功能需求规格说明书,从功能需求规格说明书的主事件流中提取测试数据的数据描述,从主事件流对应的备选事件流中提取测试数据的约束条件,结合测试数据的数据描述以及约束条件生成测试数据。

优选的,从主事件流对应的备选事件流中提取测试数据的约束条件,具体包括以下步骤:

对主事件流对应的备选事件流进行语义角色标注,得到的结构化语句信息,其中结构化语句信息包括动词、动作的施力者A0、动作的受力者A1以及含否定意义的词语ADV;

通过预设的文本转换规则,将结构化语句信息转换成表达式<左侧变量,运算符,右侧值>,生成测试数据的约束条件。

优选的,预设的文本转换规则具体为:

将标识为动作的施力者A0的角色与需求用例中的参数信息进行匹配,将匹配得到的参数作为左侧变量;

将动词与预设的动词-运算符字典进行匹配,将动词匹配的结果作为运算符;

将标识为动作的受力者A1的角色中的有效信息作为右侧值;

若有标识为含否定意义的词语ADV的短语,将包含词语ADV的句子添加一个否定标记。

优选的,预设的动词-运算符字典中支持的运算符包括‘=’、‘>’、‘<’、‘*’、‘≈’以及

优选的,约束条件为备选流对应场景的测试数据的取值范围;文本转换规则支持的参数类型包括:整型、浮点型以及字符型;在生成测试数据的约束条件时,对于整型参数,需要处理其最大值,最小值,以及递增倍数;对于浮点型参数,需要处理其最大值,最小值,以及小数位数;对于字符型参数,需要处理其长度以及是否包含数字、字母、特殊符号。

优选的,测试数据包括主事件流对应的成功场景的测试数据和备选流对应场景的测试数据,结合测试数据的数据描述以及约束条件生成测试数据具体包括以下步骤:

对于主事件流对应的成功场景的测试数据,对主事件流对应的所有备选流的约束条件取反,得到各个备选流的取反约束条件,将各个备选流的取反约束条件以及数据描述取交集,得到主事件流对应的成功场景的测试数据的取值范围,根据主事件流对应的成功场景的测试数据的取值范围生成测试数据;

对于备选流对应场景的测试数据,分别根据各个备选流测试数据的取值范围,随机生成各个备选流对应场景的测试数据。

一种基于功能需求规格说明书的测试用例自动生成方法,应用于测试用例自动生成系统中,包括生成抽象测试用例、生成测试数据以及将测试数据与抽象测试用例结合,得到最终的测试用例,生成测试数据步骤执行上述任意一项的测试数据生成方法。

优选的,测试用例的最终的呈现形式为测试用例x:步骤序号-操作描述-输入数据,将测试数据与抽象测试用例结合,得到最终的测试用例,具体包括以下步骤:

将每条抽象测试用例中的步骤序号与生成的测试数据字典中的序号一一匹配,得到该步骤对应的测试数据;其中,测试数据字典由序号和测试数据构成;

将返回的测试数据,添加在对应的事件流步骤的操作描述后,作为输入参数的数据。

一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。

一种计算机存储介质,其上存储有计算机程序,程序被处理器执行时实现上述任一项方法中的步骤。

本发明具有以下有益效果:

1、本发明中的测试数据、测试用例生成方法及系统、存储介质,通过读取功能需求规格说明书,从功能需求规格说明书的主事件流中提取测试数据的数据描述,从主事件流对应的备选事件流中提取测试数据的约束条件,结合测试数据的数据描述以及约束条件生成测试数据。相比现有技术,能根据不同的功能需求规格说明书里的内容自动生成测试用例,从而大大提高测试效率。

2、在优选方案中,本发明能够读取需求用例文本(即功能需求规格说明书),对其信息中包含的隐式控制流进行提取,得到对应的测试模型,根据图搜索算法生成相应的测试路径,即抽象测试用例;同时对备选流的分支条件进行语义分析,将结构化语义信息转换为表达式,再结合需求用例文本中的输入参数的数据描述得到参数的取值范围,生成对应的测试数据;最后将测试数据与抽象测试用例结合得到最终的测试用例。本发明相比现有的基于关键字或者受控自然语言的测试用例自动生成方法而言,引入了一个需求文本模板,为需求提供了统一的规范性表述,让语句不再受限于少量的关键字或者动词,能够更多自由度的编写需求;此外还引入了对于输入参数的数据描述,为生成测试数据提供依据。

3、在优选方案中,本发明中还划分了生成的测试数据的参数类型,包括了整型数据,浮点型数据,字符型数据。此外,还收集了部分常见的字符型数据集,如姓名,联系电话,住址等,可以按字符串匹配算法依据相似度得分查找其对应的数据集,生成测试数据。

4、在优选方案中,本发明能够在需求阶段就得到对应的系统测试用例,不需要额外的系统建模,能够节省人力,同时有助于尽早地发现需求中的错误以及更好的应对需求的变更。

除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照附图,对本发明作进一步详细的说明。

附图说明

构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明优选实施例中的测试用例生成方法的第一种流程图;

图2是本发明优选实施例中的生成测试用例的第一种界面图;

图3是本发明优选实施例中的生成测试用例的第二种界面图;

图4是本发明优选实施例中的测试用例生成方法的第二种流程图;

图5是本发明测试数据生成方法的流程图。

具体实施方式

以下结合附图对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。

实施例一:

如图5所示,本实施例中公开了一种测试数据生成方法,应用于测试用例自动生成系统中,包括以下步骤:

读取功能需求规格说明书,从功能需求规格说明书的主事件流中提取测试数据的数据描述,从主事件流对应的备选事件流中提取测试数据的约束条件,结合测试数据的数据描述以及约束条件生成测试数据。

此外,在本实施例中,还公开一种基于功能需求规格说明书的测试用例自动生成方法,应用于测试用例自动生成系统中,包括生成抽象测试用例、生成测试数据以及将测试数据与抽象测试用例结合,得到最终的测试用例,测试数据生成步骤执行上述中任意一项的测试数据生成方法。

一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。

一种计算机存储介质,其上存储有计算机程序,程序被处理器执行时实现上述任一项方法中的步骤。

本发明中的测试数据、测试用例生成方法及系统、存储介质,通过读取功能需求规格说明书,从功能需求规格说明书的主事件流中提取测试数据的数据描述,从主事件流对应的备选事件流中提取测试数据的约束条件,结合测试数据的数据描述以及约束条件生成测试数据。相比现有技术,能根据不同的功能需求规格说明书里的内容自动生成测试用例,从而大大提高测试效率。

实施例二:

实施例二是实施例一的优选实施例,其与实施例一的不同之处在于,对测试用例生成方法的具体步骤进行了细化:

本发明的测试用例自动生成方法,引入了规范的需求用例文本模板,它规定了需求文本的格式,用于传达需求利益相关者之间的交流,通常是描述系统与用户之间的交互行为,由需求人员组织自然语言编写。需求用例模板的主要内容包括用例名,用例目标,输入参数,主角色,前置条件,主事件流,备选流。需求用例模板的主要内容的具体描述如下:

用例名:<用例名称>

用例目标:<主执行者使工作得以完成的目标,或是用户使用系统的目标>

输入参数:<交互过程中需要输入的参数的数据描述>

<参数名称类型长度>

主角色:<主执行者的角色名称或主执行者的描述>

前置条件:<用例开始时系统处于何种状态>

主事件流:

<执行者与系统之间相互交互或者对话的顺序,当交互结束时,能够达到预期的目的>

1<操作描述>

2...

备选流:

<备选流代表了用于完成任务的途径中的变化部分,基本流程可以在一些决策点上分解成备选流>

2a<备选流发生条件描述>

2a1<操作描述>

2a2...

3a<备选流发生条件描述>

3a1...

其中,在书写需求用例文本时,需要注意的事项如下:

1.使用简单语法。在主事件流和备选流中,每个步骤的语句都描述了执行者的一个活动,为了更方便的进行语义分析,语句应尽可能使用简单结构,如:主语+谓语+宾语。

2.从系统外部的角度来编写用例(用户角度)。例如,不应出现这样的描述:系统读取账号和密码,并从账户余额中扣除一定的金额。应改写为<1>用户输入卡号和密码;<2>系统从账户余额中扣除一定的金额。

3.描述过程向前推进,适当的操作描述,合理的活动集。每一个步骤都要离目标更进一步,不要过于细致或者粗略。

4.主事件流中描述成功的场景,其操作描述(执行步骤)以数字作为序号。

5.备选流分为条件描述和操作描述。条件描述序号格式为:[对应主成功场景]+小写字母;操作描述序号格式为:[对应条件描述序号]+数字。

6.此外,操作描述中要表述“确认”而不是“是否”,即不要出现不确定性词句,例如,不应该这样描述:<1>系统检查密码是否正确;<2>如果密码正确,系统显示主页面。而应改为<1>系统验证密码正确;<2>系统显示主页面。因为对于密码错误的流程,是需要放到备选流中处理的。

特别地,需求用例模版中还引入了输入参数的描述,包括了<参数名称,类型,长度>。其中参数的类型分为三类,包括整型,浮点型,字符型。对于整型数据,长度表示为x位,标明最长数据的位数;对于浮点型数据,长度表示为(x1,x2)位,x1为最长整数长度,x2为最长小数长度;对于字符型数据,长度表示为x位,标明最长数据的位数。

如图1和图4所示,本实施例提供了一种基于功能需求规格说明的测试用例自动生成方法,应用于测试用例自动生成系统中,包括以下步骤:

S1、读入需求用例文本;

S2、提取文本信息,得到测试模型,根据图搜索算法,生成抽象测试用例;

其中,根据图搜索算法,生成抽象测试用例具体包括:自动提取需求用例文本中的事件流信息,并根据事件流的步骤编号得到有向图,为了保证测试用例生成的完整性,提供了两种覆盖标准,即分支覆盖和循环覆盖,确保图搜索算法生成的抽象测试用例(包含步骤序号以及操作描述)能够达到覆盖每个分支,每个循环能够执行一次的效果。

S3、从需求文本的主事件流中提取测试数据的数据描述,对需求文本中的备选流分支条件进行语义分析,结合文本转换规则以及参数的数据描述得到其取值范围,生成测试数据;

S31、从需求文本的主事件流中提取测试数据的数据描述;

S32、对需求文本中的备选流分支条件进行语义分析,即对主事件流对应的备选事件流进行语义角色标注,得到的结构化语句信息):

由于需求都是由自然语言所编写的,因此需要结合语义分析技术对备选流分支条件语句进行处理。本方案采用语义角色标注技术对句子进行浅层语义分析,从而得到句子的结构化信息。

语义角色标注(SRL)是实现浅层语义分析的一种方式,SRL的任务是找出句子中给定谓词的各个论元和它们的语义角色。在一个句子中,谓词是对主语的陈述或说明,指出“做什么”、“是什么”或“怎么样”,代表了一个事件的核心,跟谓词搭配的名词称为论元。

SRL中的语义角色主要包括:

1.核心语义角色:A0(动作的施事者),A1(受事);

2.附属语义角色:ADV(附加/否定标记),TMP(时间),LOC(地点)。

具体的,本方案采用了哈工大提供的pyltp工具对备选流分支语句进行语义角色标注,主要的过程为:分词;词性标注;依存句法分析;语义角色标注。其中每一步都依赖于上一步骤得到的结果。在语义角色标注步骤后,能够得到类似于<动词,A0,A1>的结构化信息。

S33、通过预设的文本转换规则,将结构化语句信息转换成表达式<左侧变量,运算符,右侧值>,生成测试数据的约束条件;

利用语义角色标注(SRL)对备选流分支语句进行语义分析,得到结构化信息<动词,A0,A1>后,根据动词-运算符映射表以及文本转换规则将其转换为表达式<左侧变量,运算符,右侧值>。需要注意的是,若结构化信息中包含额外的语义角色,例如ADV,并且代表的是含否定意义的词时,生成的表达式也需要添加一个否定标记。

具体的,上述步骤具体为:

将标识为动作的施力者A0的角色与需求用例中的参数信息进行匹配,将匹配得到的参数作为左侧变量;

将动词与预设的动词-运算符字典进行匹配,将动词匹配的结果作为运算符;

将标识为动作的受力者A1的角色中的有效信息作为右侧值;

若有标识为含否定意义的词语ADV的短语,将该句子添加一个否定标记。

由于从结构化信息<动词,A0,A1>到表达式<左侧变量,运算符,右侧值>的转换是基于动词的,而对每一个动词进行独立转换是不现实且不必要的。因此为了适用于更广范围,需要将具有相同含义的动词聚类在一起。通过查找中文词性库,收集到了部分动词词库,并且词库也在不断更新中。再将不同语义类型的动词词库与支持的运算符建立动词-运算符映射表。

在本实施例中,约束条件为备选流对应场景的测试数据的取值范围;文本转换规则支持的参数类型包括:整型、浮点型以及字符型;在生成测试数据的约束条件时,对于整型参数,需要处理其最大值,最小值以及递增倍数;对于浮点型参数,需要处理其最大值,最小值以及小数位数;对于字符型参数,需要处理其长度以及是否包含数字、字母、特殊符号。例如,某需求用例文本中描述了取款金额,int,5位,因此可以根据该信息划分取值范围0-99999;其次在备选流的分支语句中,也包含了对该参数的约束条件,例如,某备选流分支条件:取款金额大于5000元,那么根据文本转换规则得到的表达式则也能确定一个取值范围。最终生成的某一条测试用例的测试数据须同时满足以上两个取值范围。若某些参数无对应的备选流分支,则只需考虑其数据描述对应的取值范围即可。

此外,本发明在进行表达式转换时,支持的运算符包括‘=’,‘>’,‘<’,‘*’,‘≈’,

S34、测试数据包括主事件流对应的成功场景的测试数据和备选流对应场景的测试数据,结合测试数据的数据描述以及约束条件生成测试数据具体包括以下步骤:

对于主事件流对应的成功场景的测试数据,对主事件流对应的所有备选流的约束条件取反,得到各个备选流的取反约束条件,将各个备选流的取反约束条件以及数据描述取交集,得到主事件流对应的成功场景的测试数据的取值范围,根据主事件流对应的成功场景的测试数据的取值范围生成测试数据;

对于备选流对应场景的测试数据,分别根据各个备选流测试数据的取值范围,随机生成各个备选流对应场景的测试数据。

由于备选流的存在是主事件流中某步骤条件为假的情况下所发生的,并且主事件流某步骤可拥有多个备选流分支,若该分支条件涉及到某输入参数,那么在主事件流和备选流中生成的该参数的测试数据的取值也会是相反的结果。因此在生成测试数据时,需要分以下情况处理:

每一条备选流对应的测试数据,是根据上述4-8过程得到的相关参数的取值范围随机生成的若干条数据。对于备选流分支对应的测试数据的生成,需要注意的是若表达式中含否定标记,那么该表达式对应的取值范围应该取相反方向。

主事件流对应的成功场景的测试数据,需要依次处理主事件流的步骤,即寻找该步骤拥有的所有备选流分支,再对每一条备选流得到的相关参数范围取反,即根据不同的情况对区间[a,b]做相应处理,对于整型数据,所得的取反结果可以是[0,a),(b,b+x]等,再将所有的取反结果取交集,得到相关参数的取值范围并随机生成若干条数据。由于备选流是对应于主事件流中某步骤的分支情况,那么对于主事件流中测试数据的生成,首先需要对主事件流中某步骤对应的所有分支生成的表达式,一一对其进行取反,再进行整合;其次再结合涉及到的参数的数据描述,根据划分得到的取值范围生成测试数据。

此外,对于字符型的测试数据,为了使得某些字符型数据看起来更具有意义,更贴近现实场景中的案例,因此从faker库、datafaker库、以及搜狗词库中收集了部分常见的字符型参数数据集,涵盖了生活范围(姓名,身份证号,地址),娱乐范围(电影,音乐,动漫),全国范围(地区,大学,医院)等等。将需要生成的字符型参数与已有的数据集名称进行字符匹配,获取匹配得分最高的数据集名称,若其得分大于0.5,那么可直接从该数据集中提取对应符合其取值范围的数据。

对于常见的字符型参数,如姓名,联系电话、居住地址等已经预先收集了部分数据,可以按字符串匹配算法依据相似度得分查找其对应的数据集。此外,某些需要随机生成的字符型数据,例如密码,用户名等还可以通过备选流分支条件来指定其包含的字符类型,包括:数字0-9;字母a-z/A-Z;特殊符号集。

S4、将测试数据与抽象测试用例结合,得到最终的测试用例。

本发明中测试用例自动生成方法能够读取需求用例文本,得到测试模型,并生成不同的测试路径;同时对备选流的分支语句进行语义分析,采用语义角色标注技术,并结合输入参数的数据描述生成测试数据;最后将测试数据与抽象测试用例结合生成最终的测试用例。本发明相比现有的基于需求的测试用例自动生成方法而言,提供了一个规范性的需求用例模板,能够让语句不再受限于少量的关键字或者动词,从而更自由的编写需求规范;此外,模板还引入了输入参数的数据描述,为之后测试数据的生成提供了依据。

在S4步骤中,将经S3步骤后得到的主事件流和每个备选流分支所对应生成的测试数据分别存入字典中,再查找S2步骤中得到的所有抽象测试用例,若某抽象测试用例中包含该主事件流或者备选流分支,则将其对应的字典测试数据,添加在该主事件流或者备选流分支之前,作为输入的数据。最终得到的测试用例如图2和图3所示。

其中,测试用例的最终的呈现形式是测试用例x:步骤序号-操作描述-输入数据,具体实现过程为:

将每条抽象测试用例中的步骤序号与生成的测试数据字典(包含序号和测试数据)中的序号一一匹配,得到该步骤对应的测试数据;

将返回的测试数据,添加在对应的事件流步骤的操作描述后,作为输入参数的数据。

一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法的步骤。

一种计算机存储介质,其上存储有计算机程序,程序被处理器执行时实现上述方法中的步骤。

综上,本发明能够读取需求用例文本(即功能需求规格说明书),对其信息中包含的隐式控制流进行提取,得到对应的测试模型,根据图搜索算法生成相应的测试路径,即抽象测试用例;同时对备选流的分支条件进行语义分析,将结构化语义信息转换为表达式,再结合需求用例文本中的输入参数的数据描述得到参数的取值范围,生成对应的测试数据;最后将测试数据与抽象测试用例结合得到最终的测试用例。本发明相比现有的基于关键字或者受控自然语言的测试用例自动生成方法而言,引入了一个需求文本模板,为需求提供了统一的规范性表述,让语句不再受限于少量的关键字或者动词,能够更多自由度的编写需求;此外还引入了对于输入参数的数据描述,为生成测试数据提供依据。

在优选方案中,本发明中还划分了生成的测试数据的参数类型,包括了整型数据,浮点型数据,字符型数据。此外,还收集了部分常见的字符型数据集,如姓名,联系电话,住址等,可以按字符串匹配算法依据相似度得分查找其对应的数据集,生成测试数据。

在优选方案中,本发明能够在需求阶段就得到对应的系统测试用例,不需要额外的系统建模,能够节省人力,同时有助于尽早地发现需求中的错误以及更好的应对需求的变更。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 测试数据、测试用例生成方法及系统、存储介质
  • 测试用例生成方法、系统及计算机可读存储介质
技术分类

06120112923331