组合测试技术与方法

时间:2022-06-23 04:28:51

组合测试技术与方法

在设计测试用例时不仅要考虑所有对软件产生影响的可能因素,而且还要考虑存在于这些因素之间的相互作用,因素与因素的组合也要进行充分的测试。

软件是一个复杂的逻辑信息系统,其正常运行可能受到多因素的影响,这些因素包括系统的配置、内部事件、外部输入等。除单个因素之外,上述因素之间的相互作用也可能会影响软件的正常运行。

为了确保在一定的测试成本和测试能力下,尽可能少使用测试用例来有效地检测这些因素以及它们之间的相互作用对系统产生影响,由此人们提出了基于组合覆盖的软件测试方法,即组合测试。组合测试基本原理

首先,笔者将会简单地描述一下组合测试的基本模型。对于一个被测的软件系统而言,假设影响被测软件输出结果的因素有n个,形成了影响因素集合F={f1,f2,,…,fn},每个因素fi经过等价类划分的前期处理之后包含ti个不同取值,构成了集合v={0,1,2,…,t}。于是可以称一个n元组test=(v1,V2…,Vn)(V1∈V1,V2∈V2,…,Vn∈Vn)为被测的软件系统的一条测试用例。多条测试用例就构成了组合测试用例集。在组合测试中,组合测试用例集又被称为组合覆盖表,即覆盖表中的每一行对应着被测的软件系统中的一条测试用例。

对于一个被测的软件系统来说,黑盒测试主要是根据系统的输入的参数和由输入参数的得到的输出结果获得被测系统是否满足测试需求。假如,输入参数的数量为10个,根据等价类划分得到的每个参数的测试数据集规模为6,那么最终得到的组合测试的测试用例集为610=60466176种才能完全满足测试需求。组合测试的目的在于对软件中各个因素之间的相互作用进行测试。不同的组合覆盖标准决定了测试用例集对于因素间交互作用的不同覆盖能力,也决定了其不同的错误检测能力。因此应根据被测软件选择合适的组合覆盖标准,能够在不影响测试效果的基础上提高测试效率。在分析已有工作的基础上,可以将现有组合覆盖标准分为,N维组合覆盖和变力度组合覆盖等两大类,用以描述测试用例集。

研究发现,20%到40%左右的故障由某两个参数的相互作用引发,由此存在大约70%的软件故障是由一个或两个参数的作用引起的。因此,两两组合覆盖测试在组合测试中运用非常广泛。

举例来说,测试一个软件系统在哪种软件配置环境下能够更好的应用。其中,软件配置环境主要是由四个因素构成,如:操作系统、数据库、应用服务器、浏览器,操作系统={Windows,Linux,Macintosh},数据库={SQL Server,DB2,Oracle},应用服务器={WebLogic,WebSphere,Tomcat},浏览器={IE,Firefox,Opera}。

完全测试该系统需要34=81测试用例。而采用两两组合覆盖测试,则仅需要表1中9个测试用例即可覆盖任意两个参数的所有取值集合,即两两组合覆盖数据。任意两个直列的每个数值出现的机会是相等的。

组合测试成功应用的关键在于对被测软件的内部特征的理解,如因素间交互的力度等信息有所了解,并在此基础上利用这些内部特征信息设计合理的测试用例。

基于组合测试的测试用例生成技术

由于N维以及变力度组合测试用例集生成问题是NIP完全的,难以在多项式时间内针对一般情况生成最小组合测试用例集,无法利用计算机使用一般的方法来生成基于组合测试的测试用例集,因此人们往往寻求使用各种近似算法求解。

数学构造方法。在数学构造方法中,比较常用的是构造正交表来实现。正交表主要是基于均衡分散的思想运用组合数学理论在拉丁方和正交拉丁方的基础上构造的一种表格,它的形式和广泛的应用与日本统计学家田口玄一的工作分不开的。不过就目前正交表的发展情况来看,只是有限的正交表被构造了,因此构造两两组合覆盖表能力还是比较有限的,但仍可以用于绝大多数的组合测试的场景。此外还可以通过计算机自动搜索的方法构造组合覆盖数组。

启发式算法。针对NP完全问题,使用启发式算法生成近似最优解是一种常用方法。在使用启发式算法解决组合测试用例生成问题时,逐条生成测试用例的策略得到广泛应用。使用逐条生成测试用策略生成组合测试用例集时,首先需构造一个集合u,使其包含所有需要被覆盖的因素取值组合,然后每次均生成一条测试用例test并将其加入测试用例集T,同时从U中删除已被test覆盖的组合,如此反复直至T覆盖u中所有的组合为止。

贪心算法。使用贪心算法生成N维组合测试用例集,还可以通过逐因素扩展的方式来实现。逐因素扩展策略的主要思想是,将系统看作一个因素数量逐步扩充的系统,首先针对少量的因素生成一个满足覆盖要求的测试用例集,进而在此基础上逐步加入新的因素,同时对原有测试用例集进行扩展和改造,使得改造后的测试用例集覆盖新加入的因素及其相关的所有组合。如此反复,直至所有因素均被加入。这里比较著名的算法是AETG算法。

组合测试方法的应用

组合测试无论是在黑盒测试和白盒测试中都有着比较好的应用效果,不过应用比较多的还是在黑合测试中。在黑盒测试中,组合测试在基础软件平台的兼容性、可靠性测试方面的表现更为出色。基础软件平台是由操作系统、中间件、数据库、安全产品以及其他通用性软件组建的应用支撑平台。它具有自己的一系列特性,它的整体质量并不是简单地把单个基础软件的质量相叠加。实践证明,将基础软件整合到一起可能会凸现出一些质量问题,如兼容性、可维护性、可靠性。因此基础软件平台中软件之间的组合测试问题对于保证整体平台的质量尤为重要。然而,随着软件技术的发展,软件呈现出多种可选择的可用版本,对于平台构造而言,需要面对可能出现的组合爆炸问题。组合数目过多,从而导致测试周期和成本急剧增长。组合测试就可以解决这个问题,通过组合覆盖数组构造后的测试用例可以实现组合是均匀分散的,且能基本真实地反映原来总体的特征。实践表明,组合测试检错能力与随机测试的检错能力相当。

上一篇:新机遇还是无奈选择? 下一篇:内地企业走出去,香港是“门户”