测试用例自动生成方法及装置与流程

文档序号:11582542阅读:222来源:国知局
测试用例自动生成方法及装置与流程

本发明涉及计算机领域,尤其涉及一种测试用例自动生成方法及装置。



背景技术:

在程序开发的过程中,需要确保编译器具有较高的可靠性,尤其针对自主开发的编译器,更需要验证其可靠性。在验证编译器的可靠性时,通常使用大量的测试用例来覆盖编译器的功能和性能的各个方面。若通过人工手动编写测试用例,所耗费的时间和工作量较大,无法满足对编译器进行测试的质量和效率的需求。

由于对编译器进行测试时,主要的工作量为编写测试用例输出至被测编译器进行编译,测试用例的可复用程度较高。在现有技术中,可以采用程序自动生成测试代码技术来自动生成测试用例,以解决同类型的编译器的测试工作。

在测试用例中,变量是测试用例代码中最基本的组成元素。变量在测试用例代码中的每个位置的正确应用与否,是判断编译器是否能够正确工作的条件之一。因此,在自动生成测试用例时,所生成的变量是否能够在其有效的作用域中被正确引用,对生成正确的测试用例起着至关重要的作用。

目前,自动生成的测试用例的正确率较低,导致编译器对测试用例的编译经常出错,对编译器进行测试的质量和效率较低。



技术实现要素:

本发明实施例解决的技术问题是如何提高自动生成的测试用例的正确率,提高对编译器进行测试的质量和效率。

为解决上述技术问题,本发明实施例提供一种测试用例自动生成方法,包括:获取存在变量需求的作用域的标识;根据所述作用域的标识,获取所述作用域对应的作用域集合;从所述作用域集合中,筛选出所述作用域属性的标识包含于所述作用域集合的变量集合;从所筛选出的所述变量集合中筛选出与所述变量需求对应的变量;根据筛选出的所述变量构建表达式,生成所述测试用例。

可选的,所述从筛选出的变量集合中筛选出所述变量,包括:根据所述变量的数据类型,从所述所筛选出的变量集合中筛选出与所述变量需求对应的变量。

可选的,所述筛选出所属作用域属性包含于所述作用域集合的变量集合,包括:从预先生成的作用域类中,读取所述作用域集合对应的作用域集合属性;从预先生成的变量类中,读取所述变量对应的作用域属性;从所述作用域集合属性中,筛选出所述变量对应的作用域属性包含于所述作用域集合属性的变量集合。

可选的,所述作用域类为适于管理所述生成的作用域的类;所述作用域类中的信息包括:所述生成的作用域的标识及对应的作用域集合。

可选的,采用如下方法生成所述作用域类:生成作用域,以及所述生成的作用域对应的标识和作用域集合;判断所述生成的作用域是否存在父作用域;当所述生成的作用域不存在所述父作用域时,将所述生成的作用域的标识添加到所述生成的作用域对应的作用域集合中;当所述生成的作用域存在所述父作用域时,读取所述父作用域对应的作用域集合中的所有数据,并添加至所述生成的作用域对应的作用域集合中。

可选的,所述变量类为适于管理所述生成的变量的类;所述变量类中的信息包括:所述生成的变量的标识、所述生成的变量的数据类型、所述生成的变量的数据值以及所述生成的变量的所属作用域。

本发明实施例还提供了一种测试用例自动生成装置,包括:作用域标识获取单元,用于获取存在变量需求的作用域的标识;作用域集合获取单元,用于根据所述作用域的标识,获取所述作用域对应的作用域集合;变量集合筛选单元,用于从所述作用域集合中,筛选出所属作用域属性的标识包含于所述作用域集合的变量集合;变量筛选单元,用于从所筛选出的所述变量集合中筛选出与所述变量需求对应的变量;测试用例生成单元,用于根据筛选出的所述变量构建表达式,生成所述测试用例。

可选的,所述变量筛选单元,用于根据所述变量的数据类型,从所述所筛选出的变量集合中筛选出与所述变量需求对应的变量。

可选的,所述变量集合筛选单元,用于从预先生成的作用域类中读取所述作用域集合对应的作用域集合属性;从预先生成的变量类中读取所述变量对应的作用域属性;从所述作用域集合属性中,筛选出所述变量对应的作用与属性包含于所述作用域集合属性的变量集合。

可选的,所述作用域类为适于管理所述生成的作用域的类;所述作用域类中的信息包括:所述生成的作用域的标识及对应的作用域集合。

可选的,采用如下方法生成所述作用域类:生成作用域,以及所述生成的作用域对应的标识和作用域集合;判断所述生成的作用域是否存在父作用域;当所述生成的作用域不存在所述父作用域时,将所述生成的作用域的标识添加到所述生成的作用域对应的作用域集合中;当所述生成的作用域存在所述父作用域时,读取所述父作用域对应的作用域集合中的所有数据,并添加至所述生成的作用域对应的作用域集合中。

可选的,所述变量类为适于管理所述生成的变量的类;所述变量类中的信息包括:所述生成的变量的标识、所述生成的变量的数据类型、所述生成的变量的数据值以及所述生成的变量的所属作用域。

与现有技术相比,本发明实施例的技术方案具有以下有益效果:

当某一个作用域存在变量需求时,根据作用域的标识选取对应的作用域集合;从作用域集合中,选取所属作用域属性的标识包含于作用域集合的变量集合,再从变量集合中选取出与变量需求对应的变量。也就是说,作用域集合包含作用域所引用的已生成的变量对应的所属作用域属性,换句话说,作用域所引用的已生成的变量为合法有效的变量,因此生成的测试用例的正确率较高,进而提高了对编译器进行测试的质量和效率。

进一步,根据变量的数据类型,从筛选出的变量集合中筛选出变量,可以更进一步地提高生成的测试用例的正确率。

附图说明

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

图2是本发明实施例中的一种生成作用域类的流程图;

图3是本发明实施例中的一种测试用例自动生成装置的结构示意图。

具体实施方式

在测试用例中,变量是测试用例代码中最基本的组成元素。变量在测试用例代码中的每个位置的正确应用与否,是判断编译器是否能够正确工作的条件之一。因此,在自动生成测试用例时,所生成的变量是否能够在其有效的作用域中被正确引用,对生成正确的测试用例起着至关重要的作用。目前,自动生成的测试用例的正确率较低,导致编译器对测试用例的编译经常出错,进而导致对编译器进行测试的质量和效率较低。

在本发明实施例中,当某一个作用域存在变量需求时,根据作用域的标识选取对应的作用域集合;从作用域集合中,选取所属作用域属性的标识包含于作用域集合的变量集合,再从变量集合中选取出与变量需求对应的变量。也就是说,作用域集合包含作用域所引用的已生成的变量对应的所属作用域属性,换句话说,作用域所引用的已生成的变量为合法有效的变量,因此生成的测试用例的正确率较高,进而提高了对编译器进行测试的质量和效率。

为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。

本发明实施例提供了一种测试用例自动生成方法,参照图1,以下通过具体步骤进行详细说明。

步骤s101,获取存在变量需求的作用域的标识。

在实际应用中,可以在上位机中运行适于完成程序自动生成测试用例的应用软件,来测试用例的自动生成。为便于描述,本发明下述实施例中所称的应用软件均为能够完成程序自动生成测试用例的软件。

应用软件在生成测试用例时,需要使用已生成的变量构建表达式,进而根据表达式生成测试用例。在构建表达式的过程中,作用域需要引用已生成的变量。在构建表达式时,可以先获取存在变量需求的作用域的标识。

在具体实施中,获取到的存在变量需求的作用域的标识可以是存在变量需求的作用域的名称。例如,获取到的存在变量需求的作用域的名称为“for_001”。

步骤s102,根据所述作用域的标识,获取所述作用域对应的作用域集合。

在具体实施中,应用软件可以预先生成作用域类,作用域类为适于管理生成的作用域的类,作用域类中的信息包括:生成的作用域的标识以及对应的作用域集合,作用域集合属性用于保存所有可对当前作用域有效的作用域的集合。

应用软件在获取到作用域的标识之后,即可根据作用域的标识,在作用域类中查找作用域的标识所对应的作用域集合。

在本发明实施例中,作用域类可以为actionscope类,actionscope类的基本信息包括生成的作用域的名称(name)以及对应的作用域集合(effectiveactionscope)等,actionscope类的作用域集合属性用于保存所有可对当前作用域有效的作用域的集合。

下面对本发明实施例中作用域类的生成方法进行详细说明。

步骤s201,生成作用域,以及所述生成的作用域对应的标识和作用域集合。

在具体实施中,由于测试用例是由应用软件自动生成的,因此应用软件在生成作用域时,所生成的作用域的标识可以是随机生成的。应用软件在生成作用域的标识时,可以同时生成与生成的作用域的标识对应的作用域集合。此时,与生成的作用域的标识对应的作用域集合为空的集合。

步骤s202,判断所述生成的作用域是否存在父作用域。

在具体实施中,当所述生成的作用域存在父作用域时,执行步骤s204;当所述生成的作用域不存在父作用域时,执行步骤s203。

在具体实施中,生成的作用域可能是一个单独的作用域,也可能是一个嵌套的作用域。

在本发明实施例中,单独的作用域是指该作用域不包含其他的作用域,在该作用域中生成的变量,只能在该作用域中被访问,在其他作用域中无效。

嵌套的作用域是指作用域可以互相包含,被包含的是内层作用域,包含该内层作用域的作用域是外层作用域,外层作用域也可称之为内层作用域的父作用域。在父作用域中定义的变量,在它所包含的内层作用域中都能够被访问。在内层作用域中定义的变量不能被父作用域访问,只能被内层作用域自身访问,或者被内层作用域所包含的作用域访问。

步骤s203,将所述生成的作用域的标识添加到所述生成的作用域对应的作用域集合中。

在具体实施中,当生成的作用域不存在父作用域时,生成的作用域的标识适于标识该生成的作用域,作用域的作用域集合属性用于保存所有对该生成的作用域有效的作用域,每个作用域都至少包括其自身的有效作用域,因此,可以将生成的作用域的标识添加到对应的作用域集合中。

例如,生成的作用域为main函数对应的作用域。main函数对应的作用域的标识为“main”,对应的作用域集合为{“main”},{“main”}表示为所有作用域为“main”的变量才能在main作用域内被引用。

步骤s204,读取所述父作用域对应的作用域集合中的所有数据,并添加至所述生成的作用域对应的作用域集合中。

在具体实施中,如果两个作用域形成作用域嵌套,也可以生成对应的作用域类。例如,作用域b对应的代码段b嵌套于作用域a对应的代码段a,则称作用域a为外层作用域,作用域b为内层作用域,也即作用域a为作用域b的父作用域。外层作用域a内的有效变量在内层作用域b中同样为有效变量,内层作用域b中的有效变量不一定是外层作用域a的有效变量。

由于外层作用域内的有效变量在内层作用域中同样为有效变量,因此在生成内层作用域的作用类时,可以将外层作用域的作用域集合中的所有数据都添加到内层作用域的作用域集合中,以此来表示对外层作用域有效的变量同样对内层作用域有效。

例如,main作用域中包括if代码段,为if代码段生成一个新的作用域类。生成的新的作用域的标识为“if_001”,作用域集合为{“if_001”}。之后,将main作用域的作用域集合中所有的数据都添加到“if_001”的作用域集合中。新生成的作用域集合为{“main”,“if_001”},表示所有作用域为“main”、“if_001”的变量能够在if_001的作用域内被引用。

如果多个作用域形成作用域嵌套,也可以生成对应的作用域类。

继续参照上述举例,设定main作用域中包括的if代码段中,又嵌套了for循环语句,为for循环语句代码段生成一个新的作用域类。生成的新的作用域的标识为“for_001”,作用域集合为{“for_001”}。由于for循环语句嵌套在if代码段中,因此,需要把作用域集合{“if_001”}中的所有数据都添加到作用域集合{“for_001”}中,新生成的作用域集合为{“main”,“if_001”,“for_001”},表示所有作用域为“main”、“if_001”、“for_001”的变量能在for_001的作用域内被引用。

通过步骤s201~步骤s204,即可实现作用域类的生成。

步骤s103,从所述作用域集合中,筛选出所属作用域属性的标识包含于所述作用域集合的变量集合。

在具体实施中,应用软件可以预先生成变量类,变量类为适于管理生成的变量的类,变量类中的基本信息可以包括:生成的变量的标识、生成的变量的数据类型、生成的变量的数据值以及生成的变量的所属作用域。

在具体实施中,应用软件可以根据所需变量的所属作用域,从作用域集合中,筛选出变量集合。

在本发明实施例中,变量类可以为variable类。生成的变量的标识为生成的变量的名称(name),生成的变量的所属作用域为actionscopezone。变量类的actionscopezone属性保存为该变量生成时所述的actionscope类,也即该变量生成时所述的作用域类。

例如,main作用域下生成的字符串变量,标识为“string001”,数据类型为“string”,数值为“abc”,所属作用域保存为“main”作用域。字符串变量的actionscopezone属性保存为“main”作用域,表示该变量的作用域为main,任何作用域属性集合属性包括“main”的作用域都可以有效地引用该变量。

在筛选变量集合时,若变量m的actionscopezone属性的名称包含于存在变量需求的作用域n的effectiveactionscope属性中时,则可以判定变量m可以作用于作用域n,也即作用域n可以使用变量m构建表达式。

若变量m的actionscopezone属性的名称未包含于存在变量需求的作用域n的effectiveactionscope属性中时,则可以判定变量m不可作用于作用域n,也即作用域n不可以使用变量m构建表达式。

步骤s104,从所筛选出的所述变量集合中筛选出与变量需求对应的变量。

在具体实施中,应用软件可以根据变量的数据类型,从筛选出的变量集合中筛选出与变量需求对应的变量。

在实际应用中可知,变量的数据类型可以包括数字型、字节型、文本型等。因此,当所需变量为数字型时,即可从变量集合中筛选出数据类型为数字型的变量。

步骤s105,根据筛选出的所述变量构建表达式,生成所述测试用例。

在具体实施中,应用软件在筛选出变量之后,即可根据筛选出的变量构建相应的表达式,从而生成测试用例。

下面通过举例,对本发明实施例中提供的测试用例自动生成方法进行说明。

设定main作用域中包含if语句的代码段中,又嵌套了for循环语句。在自动生成测试用例时,需要为for语句代码段筛选出一个字符串变量来构造表达式。

第一步,获取存在变量需求的作用域的标识为“for_001”。

第二步,根据作用域的标识“for_001”,获取作用域对应的作用域集合{“main”,“if_001”,“for_001”}。

第三步,从作用域集合{“main”,“if_001”,“for_001”}中,筛选出所属作用域属性为“main”、“if_001”或“for_001”的变量集合,筛选出的变量集合对“for_001”代码段均有效。

第四步,从变量集合中,筛选出数据类型为字符串类型的变量。筛选出的变量为及符合作用域要求,又符合数据类型要求的合法变量,可以用于构建表达式。

在现有技术中,在自动生成测试用例时,作用域所引用的变量可能位于其他作用域内,不能被当前作用域所引用,导致自动生成的测试用例的正确率较低,进而导致编译器对测试用例的编译经常出错,对编译器进行测试的质量和效率较低。

由此可见,当某一个作用域存在变量需求时,根据作用域的标识选取对应的作用域集合;从作用域集合中,选取所属作用域属性的标识包含于作用域集合的变量集合,再从变量集合中选取出所需的变量。也就是说,作用域集合包含作用域所引用的已生成的变量对应的所属作用域属性,换句话说,作用域所引用的已生成的变量为合法有效的变量,因此生成的测试用例的正确率较高,进而提高了对编译器进行测试的质量和效率。

参照图3,给出了本发明实施例中的一种测试用例自动生成装置30,包括:作用域标识获取单元301、作用域集合获取单元302、变量集合筛选单元303、变量筛选单元304以及测试用例生成单元305,其中:

作用域标识获取单元301,用于获取存在变量需求的作用域的标识;

作用域集合获取单元302,用于根据所述作用域的标识,获取所述作用域对应的作用域集合;

变量集合筛选单元303,用于从所述作用域集合中,筛选出所属作用域属性的标识包含于所述作用域集合的变量集合;

变量筛选单元304,用于从所筛选出的变量集合中筛选出与所述变量需求对应的变量;

测试用例生成单元305,用于根据筛选出的所述变量构建表达式,生成所述测试用例。

在具体实施中,所述变量筛选单元304,可以用于根据所述变量的数据类型,从所述所筛选出的变量集合中筛选出与所述变量需求对应的变量。

在具体实施中,所述变量集合筛选单元303,可以用于从预先生成的作用域类中读取所述作用域集合对应的作用域集合属性;从预先生成的变量类中读取所述变量对应的作用域属性;从所述作用域集合属性中,筛选出所述变量对应的作用与属性包含于所述作用域集合属性的变量集合。

在具体实施中,所述作用域类为适于管理所述生成的作用域的类;所述作用域类中的信息包括:所述作用域的标识及作用域集合。

在具体实施中,可以采用如下方法生成所述作用域类:生成作用域,以及所述生成的作用域对应的标识和作用域集合;判断所述生成的作用域是否存在父作用域;当所述生成的作用域不存在所述父作用域时,将所述生成的作用域的标识添加到所述生成的作用域对应的作用域集合中;当所述生成的作用域存在所述父作用域时,读取所述父作用域对应的作用域集合中的所有数据,并添加至所述生成的作用域对应的作用域集合中。

在具体实施中,所述变量类为适于管理所述生成的变量的类;所述变量类中的信息包括:所述生成的变量的标识、所述生成的变量的数据类型、所述生成的变量的数据值以及所述生成的变量的所属作用域。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:rom、ram、磁盘或光盘等。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

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