基于蜕变测试理论和全对偶测试理论的测试方法研究

(整期优先)网络出版时间:2022-09-21
/ 3

基于蜕变测试理论和全对偶测试理论的测试方法研究

张保国

(第十总体设计部)

摘要在软件测试中,经常会遇到预期输出难以构造的程序,同时,随着输入参数的增多,为了达到尽量充分的测试,构建的测试用例会随着充分性的增加以指数级增长,并且导致效率降低,成本增加。为了解决如上问题,本文提出一种结合蜕变测试理论和全对偶测试理论的测试方法,在测试针对预期输出难于构造的程序时,降低测试用例数量的基础,并尽量达到测试的充分性的测试方法----全对偶蜕变测试方法。本文在介绍全对偶和蜕变测试理论的同时,并给出了全对偶蜕变测试方法的测试步骤,同时说明了该测试方法的局限性。

关键词软件测试;全对偶测试;蜕变测试;蜕变关系;oracle问题

1  引言

在传统软件测试的用例设计过程中,测试人员对测试数据的选择和输入基本依据等价类划分、边界值、猜错法等方法,这些方法中除边界值方法能比较容易的选择数据外,其他的方法主要依据测试人员本身的水平。等价类划分比较宽泛,需要有经验的测试人员在有效等价类和无效等价类中进行梳理,不易操作,而且往往容易漏掉测试数据;猜错法主要依据测试人员对系统分析的敏感性和经验来支持,操作性也不强。同时,在理论研究上,为了达到测试的充分性,往往介绍的测试方法中以正交表方法和输入组合的方式来实现,而这两种方法产生的原始测试用例数目庞大,需要在原始测试用例的基础上进行选择,往往会用去测试的大量时间、精力和财力,作者为了解决如何选择尽可能小的用例集达到尽量大的测试充分性时提出了全对偶测试用例选择方法理论。

传统的软件测试技术均是通过比较测试用例的实际输出与预期输出是否相等或者误差允许来检验待测程序是否正确。但在很多情况下,测试预期结果无法或者难以构造,无法得到预期的测试结果,这样,传统的测试方法将无法进行测试。蜕变测试可以有效的解决这类问题,该方法通过检查程序的多个执行结果之间的关系来测试程序,而且不需要进行预期结果的构造。

但在实现上述两类问题结合的程序时,往往任何一种方法也无法独立实现,为了解决对这类问题的测试,本文提出一种结合全对偶测试用例选择理论与蜕变测试理论相结合的方法--全对偶蜕变测试,实现对预期结果难以构造、并且输入参数庞大程序的测试。

2  蜕变测试原理

软件测试是保证软件质量和可靠性的一种重要手段,用于发现和纠正软件中存在的缺陷和错误,但该技术存在测试用例集可靠性问题和oracle问题。测试用例集可靠性问题即对于测试的某个程序很难构造一个可靠的测试用例集,使得程序的正确性可以由其中所有测试用例的正确执行来保证。oracle问题是指在某些情况下,测试人员无法确定程序的执行结果与期望结果是否相同或者很难构造预期输出结果。

oracle问题导致利用传统的软件测试技术无法完成对软件的测试,针对这类问题,澳大利亚斯威本科大学Chen等人提出了蜕变测试的概念来解决oracle问题,同时该方法提高了测试用例的设计效率和执行效率,该方法认为通过测试的用例同样蕴涵着有用的信息,可以通过它们来构造新的测试用例对程序进行更加深入的检测,蜕变测试技术正是基于这种方式构建的测试用例的执行结果与构造之前的用例执行结果进行比对,以此确定程序的正确性,因此,构造前后的测试用例均无需有预期的输出结果。

程序执行结果之间应当满足的关系输入程序的功能属性,是可以根据程序的规约推导出来的,构造前的测试用例和构造后的测试用例在输入和输出上是遵循某种规约的,否则构造的测试用例是没有意义的,同时是没有价值的。

定义1 (蜕变关系)假设程序P用来计算函数f,x1,x2,xn(n>1)fn组变元,而且f(x1),f(x2), ,f(xn是它们所对应的函数结果。如果x1,x2,xn之间满足关系r时,f(x1),f(x2), ,f(xn应满足关系rf,即:,则称(r,rf)是P的蜕变关系。

显然,如果P是正确的,那么它一定满足下面的推导式:

………………………………….(1)

其中I1,I2,In是程序P的对应于x1,x2,xn的蜕变关系输入,P(I1),P(I2), ,P(In是相对应的输出,因此,可以通过检验(1)式是否成立来检验程序的正确性。

为了提高原始测试用例的设计和使用效率,根据原始测试用例来衍生测试用例进行蜕变测试,故而提出定义2。

定义2 (原始/衍生测试用例)使用蜕变关系(r,rf)测试程序P时,起初给定的测试用例为原始测试用例;由原始测试用例根据蜕变关系蜕变出的测试用例是该原始测试用例基于蜕变关系(r,rf)的衍生测试用例。

蜕变测试技术具有三个显著的特点:1.为了检验程序的执行结果,测试时需要构造蜕变关系;2.为了从多方面判定程序功能的正确性,通常需要为待测程序构造多条蜕变关系;3.为了获得原始测试用例,蜕变测试需要与其他测试用例生成测试策略结合使用。

3  全对偶理论

3.1  全对偶理论使用背景

全对偶理论基于以下条件:(1)软件系统故障往往是由一些难以预料的系统接口参数及相互作用而引起的,为了检测这些故障,必须设计一组测试用例,对系统接口参数的组合情况进行充分的覆盖测试;(2)由于受到时间、经费等资源的限制,我们必须在所有参数组合的笛卡尔积数量的组合情况和有限的资源之间做出一种科学、优化的选择;(3)国外研究机构研究表明,有大约70%~80%的故障是由一个或两个参数的相互作用而引起的;(4)它是一种覆盖任两个参数间组合的方法,没有进行全面的覆盖,同时没有考虑到参数之间存在约束的情况。

假设有一个待测函数有n 个参数v1v2vn,每个参数都有其取值范围Di,有v1D1v2D2vnDn,其中 Di为参数vi的合理取值范围。根据测试经验,可以采用等价类划分、边界值等方法,为每一个参数取一些典型的值,作为其测试值,则测试用例的生成与选择问题就归结为这些参数取值的组合问题。

3.2  步骤

假设有3个参数:v1、v2、v3通过我们常用的测试数据筛选方法进行筛选,它们可能取值的个数分别为3个、2个和2个,其中v1取:a,b,c;v2:x,y;v30,1。我们首先假定v1、v2、v3是相互独立的,则可能的组合为3×2×2=12 种,根据全对偶理论方式进行组合,我们只需要6种即可实现最小的测试用例集实现最大的测试域。全对偶测试用例选择方法按以下步骤进行:

1)在第一行上标出变量的名称,并在变量名后用括号注明可能取值的数量,第一行按照可能取值的数量进行降序排序;

2)如果第1列是v1的可能取值,第2列是v2的可能取值,则表中最少有nvi×nv2行。nvi其中是第i 个参数可能取值的个数

3)填写表格,一次填写一列,第1列每段(v1的每次取值构成一个段)重复其取值nv2次,每段之间用空行隔开,然后再重复下一个取值,直到该列对应变量的所有可能取值都覆盖到;

4)在第2列中,每段列出变量的所有取值,保证取值和第一列的取值构成对偶关系;

5)增加第3列,第3 列的每段要包含v3所有可能取值,这些取值的顺序需要使得该变量v3与变量v2也构成全对偶,即变量v3与变量v2之间形成两个变量的所有组合,如果前面的段已经形成了全对偶,后续的段不需要考虑顺序,任意的组合即可;

6)如果参数继续增加,须保证增加的参数的可能取值数目小于最后的参数可能取值数目,否则重新开始;如果后续增加参数的取值在填充选择表时,现有的测试用例行数的取值不能达到两个参数之间的取值对偶关系时,应该开始进行覆盖性检查。

4  全对偶蜕变测试过程

全对偶蜕变测试过程主要分为以下四个阶段,1. 根据输入参数的情况,同时依据传统的输入数据选择方法(如:等价类划分、边界值分析等)确定比较经典的输入数据,根据全对偶选择理论,确定测试数据的输入队列,构建出原始的测试用例;2. 根据选择并构建的原始测试用例,运行原始测试用例,选取不会导致程序出错的测试用例,结合蜕变测试理论以及待测程序的功能特征,构建蜕变测试策略,即蜕变关系;3. 根据构建的蜕变策略推导出蜕变测试用例,并推导出蜕变后测试用例的测试结果与原始测试用例测试结果之间的蜕变关系;4. 通过比较蜕变测试用例执行结果与原始测试用例执行结果之间是否符合蜕变关系来确定被测试程序功能的正确性。

现以一个简单的例子确定全对偶蜕变测试的过程。假设待测程序为P=sin(x*y/z),输入参数条件约束为xR,y>=0,z>0,根据全对偶测试理论选择原始测试用例,根据传统的数据选择方法确定输入参数。假设x取值范围确定为0,-1,2;y取值范围为0,10;z取值为5,100。根据全对偶测试理论确定测试用例集见表1。

表1  全对偶测试用例集

x

y

z

t

t

0

0

5

0

-PI/2

0

10

100

1000

PI/2 - 1000

-1

0

100

-100

PI/2 + 100

-1

10

5

-50

PI/2 + 50

2

0

100

200

PI/2 - 200

2

10

5

100

PI/2 - 100

原始测试用例集选择完毕,开始构造蜕变关系,根据我们已知的数据公式知道,sin(t) = sin(PI/2 t),我们构造一条蜕变关系MR,且t基于MR的衍生测试用例为t= PI/2 t。

t为输入和以t为输入的结果根据MR蜕变关系进行比较,如果测试结果符合蜕变关系,则待测程序P功能正确,否则,存在功能缺陷。

5.  结束语

在实际的工程实践中出现的问题往往会更复杂,例如连续弹道的计算、飞行控制的计算等,采用全对偶的测试用例选择方法能够选择出比较经典的测试用例集,但构建蜕变策略是非常麻烦,而且需要对被测系统的特性非常熟悉方可,因此,全对偶蜕变测试方法比较适合在开发人员进行内部测试时使用。

参考文献

[1] 董国伟,聂长海,徐宝文. 基于程序路径分析的有效蜕变测试.《计算机学报》2009年5期

[2] 文俊浩,朱灿,张杨.基于全对偶算法的自动化测试方法.《重庆大学学报(自然科学版)》2005年10期