蜕变测试概述
2018-11-09李晓玉
◆李晓玉 罗 扬
蜕变测试概述
◆李晓玉 罗 扬通讯作者
(南华大学计算机学院 湖南 421001)
近年来,蜕变测试逐渐成为软件工程领域的研究热点并在各个领域取得了巨大的进展。本文归纳了蜕变测试技术的发展过程和主要研究方向,探讨了蜕变测试研究中的不足之处,并给出了未来研究方向的展望。
软件测试;蜕变测试;蜕变关系
0 引言
蜕变测试是一种旨在解决oracle的技术,通过检查多个执行结果之间的关系来测试程序的。早在1998年Chen等人提出,成功的测试用例同样蕴含着有用的信息,在这些成功测试用例的基础上构造新的测试用例来对程序进行更深入地检测。而在成功测试用例和构建新的测试用例之间存在某些必然关系,我们称之为蜕变关系。
定义[1]:一个程序P存在一个函数f,其中输入分别为a1,a2,···,an,输出分别为f(a1),f(a2),···,f(an)。若输入a1,a2,···,an之间满足某种关系r(a1,a2,···,an)时,f(a1),f(a2),···,f(an)同时满足某种关系rf,即:
r(a1,a2,···,an)==>rf(f(a1),f(a2),···,f(an)),
那么我们称(r,rf)为程序p的一个蜕变关系。
一般而言,蜕变测试的基本过程概括为:(1)原测试用例的生成。(2)构建蜕变关系。(3)执行蜕变测试用例。基于构造的蜕变关系计算衍生测试用例,执行原测试用例和衍生测试用例,并检查其关系。该过程如图1所示。
图1 蜕变测试示意图
1 蜕变测试的研究现状
1.1 蜕变测试技术的发展现状
1.1.1良好的蜕变关系的特征研究
蜕变关系的定义需要知道领域知识。陈等人通过对两个案例进行研究,比较了基于问题领域的理论知识(黑盒)与基于程序结构的白盒知识的蜕变关系有效性,认为理论上较强的蜕变关系不一定具有较高的故障检测能力;相反,在基于程序结构的白盒方法后,应该根据程序遵循的算法优先选择良好的蜕变关系。而其他研究也强调了将问题领域的知识作为应用蜕变测试的要求。蜕变关系应使后续测试用例与原测试用例尽可能不同。他将程序执行的所有方面,包括遍历的路径、所运行语句的顺序等定义为“执行之间的差异”,认为良好的蜕变关系选择策略是选择原测试用例和后续测试用例尽可能不同的执行的蜕变关系。从系统的特定部分导出来的蜕变关系比针对整个系统的更加有效。这一发现后来得到了谢等人的证实,他也认为针对被测程序特定部分的蜕变关系比系统层面的蜕变关系更容易构建,更能有效地发现故障。
1.1.2构建蜕变关系
在大多数研究中,蜕变关系是由测试人员以临时方式手动确定的,没有系统的方法来确定蜕变关系。蜕变关系是蜕变测试的核心部分,因为它们不仅用于测试用例生成,还提供了测试结果的验证机制。
可根据一些已经确定的蜕变关系构建新的蜕变关系-蜕变关系组合。结果表明,一组蜕变关系的组成通常产生具有比原始蜕变关系更高的故障检测有效性,同时此方法比传统的蜕变测试具有更高的成本效益,因为它涉及的测试执行更少。
机器学习技术自动预测蜕变关系的方法,即通过提取函数控制流图,从中提取特征,并使用机器学习技术构建预测模型来自动检测程序函数存在的可能的蜕变关系。同样,曾金伟等人[2]提出使用PRF神经网络自动地预测函数可能满足的多个蜕变关系的方法。
1.1.3原测试用例的生成
陈比较了特殊值和随机值作为蜕变测试的原测试用例生成策略的有效性。随机值能够提供更大范围的测试数据集,而特殊值必须手动构建。在相关研究中,一些作者观察到与仅使用随机值策略相比,两者的结合能够达到更快的故障检测效果。
基于遗传算法选择源测试用例,该方法将遗传算法集成到蜕变测试方法中,以检测细微缺陷并优化测试用例集。周红等人[3]针对遗传算法具有较强的全局搜索能力,但局部搜索能力较弱的特点,将遗传算法与粒子群算法结合起来形成新的混合算法(GA-PSO),并成功应用到软件测试数据自动生成过程中。
1.1.4蜕变测试用例的执行
一些学者提出了一种迭代蜕变测试(IMT)方法。在IMT中,通过将每个蜕变关系的后续测试用例作为下一个蜕变关系的源测试用例,以链式的方式应用一系列蜕变关系。董等人[1]受到启发,提出了一个新的迭代蜕变测试算法APCEMSI,即一种整合了迭代蜕变测试和程序路径分析的新算法。
1.2 蜕变测试应用领域研究进展
蜕变测试最初主要应用于数值型程序中,比如测试计算三角函数的程序,测试计算指数函数和行列式的程序等,随着计算机技术的高度发展,蜕变测试技术也被广泛地应用到各个领域,如Web服务和应用程序、机器学习、生物学系统等。
在2005年,面向服务的应用程序(SOA)的蜕变测试方法被首次提出,它依赖于蜕变服务封装被测服务,使用单元测试阶段的测试用例来生成集成测试阶段的后续测试用例。在一组相关文献中,用蜕变测试来检测在线网络搜索的应用程序,并开发出一种完全自动测试和验证的工具来实现该方法并在流行的搜索引擎中检测到故障。之后的相关工作中,又对此类网络搜索引擎进行了大规模的实证研究,提出将蜕变测试扩展为面向用户的软件验证和质量评估方法。
测试机器学习应用程序具有挑战性,这些应用程序旨在学习尚未知道正确答案的数据集的属性。对一些机器学习算法的蜕变属性进行枚举和分类,确定了存在于大多数机器学习应用中的6种蜕变关系,即加法、乘法、置换、反向、包含和排他,为了验证关系的有效性,评估了三种特定的机器学习工具,其中发现了一些真正的错误。
同时,蜕变测试在生物学发展领域中也取得了很好的进展。有学者提出使用蜕变测试来检测疾病传播预测模型中的缺陷。研究了1918年西班牙流感的两种疾病传播模型来验证蜕变测试的有效性。在疾病传播模型的相关研究中,又提出一种方法来量化和验证区域流行病学模型的行为属性。使用蜕变测试,新颖的数据可视化工具和模型检查来深入了解流行病模型的功能。
2 蜕变测试研究存在的不足
现有的蜕变测试技术虽然可以有效地解决oracle问题,但测试过程中会产生大量具有相似性的测试用例,导致成本的提高。今后对于蜕变测试技术研究的重点应该是降低成本,如使用蜕变关系构造技术的研究、原测试用例选取技术的研究、蜕变测试工具的开发等。
蜕变关系的产生可能是要解决的最具有挑战性的问题。如何确定最有效的蜕变关系是至关重要的。我们还面临以下挑战:建立良好蜕变关系准则;产生可能的蜕变关系;蜕变关系的组合等。由于蜕变测试使测试用例的数量成倍地增长,因此选取具有代表性且数量较少的原始测试用例非常重要。关于选取策略和如何更好地约简测试用例来减少测试成本仍然存在的许多未解决的问题。蜕变测试工具可根据用户提供的原始测试用例和蜕变关系,自动地生成衍生用例,并判定输出是否满足相应的蜕变关系。测试工具可以帮助测试人员提高测试效率,避免重复的工作,因此开发高效实用的蜕变测试工具也是今后研究工作的重点。
3 总结
蜕变测试正在逐渐成熟,尽管取得了进展,但是还普遍存在着盲目性大、效率低下等问题。基于以上问题,本文最后对蜕变测试技术未来的挑战进行了大胆地展望,包括蜕变关系的构建、原测试用例的选取和蜕变测试工具等。这些挑战的研究将会增大蜕变测试的功能,拓展其使用范围,提高测试效率,缩减测试成本。
[1]董国伟,徐宝文,陈林,聂长海,王璐璐.蜕变测试技术综述[J].计算机科学与探索,2009.
[2]曾金伟,张鹏程,李雯睿等.基于RBF神经网络的多标签蜕变关系预测方法[J].计算机与现代化,2016.
[3]周红,张胜,刘琳岚等.基于GA-PSO算法的路径测试数据自动生成[J].计算机应用研究,2010.