[论文解读]Adaptive Random Testing: The ART of test case diversity

Adaptive Random Testing: The ART of test case diversity

简介

论文标题

  • Adaptive Random Testing: The ART of test case diversity
  • 自适应随机测试:测试用例多样性的ART
  • 2009.02.022

贡献

  • ART的一系列理论与应用

故障模式 : failure patterns

自适应随机测试 : Adaptive Random Testing

摘要

随机测试不仅本身是一种有用的测试技术,而且在许多其他测试方法中也起着核心作用。因此,对随机测试的任何重大改进都会对整个软件测试社区产生影响。最近,自适应随机测试(ART)被提出作为随机测试的一种有效替代方案。本文综述了与ART相关的最重要的研究成果。在我们的研究过程中,通过进一步的思考,我们已经意识到ART的技术和概念如何能够在更广泛的背景下应用,这是我们在这里介绍的。我们相信这样的想法可以应用于软件测试的各个领域,甚至可以超越软件测试。在这些想法中,我们特别注意到多样性在测试用例选择策略中的基础作用。我们希望这篇论文能引起对这些想法的进一步讨论和研究

故障模式 --> 基于故障的测试

ART应用于数字程序 --> 扩展ART

ART的思想与AR序列

均匀分布与测试用例多样性(输入多样性)

介绍

尽管几十年来一直在努力开发替代技术,但软件测试仍然是验证软件系统质量的主要方式。然而,这仍然是一个劳动密集型、缓慢和不完善的过程。因此,重要的是要考虑如何通过使用系统化、自动化的方法,以更低的成本更有效地执行测试。

自20世纪60年代初(Renfer,1962)以来,试图通过各种形式的随机选择日期自动生成测试数据,并一直是研究文献和工业实践的常规特征。随机测试在概念上很简单,通常很容易实现,已经证明可以有效地检测故障,擅长以意想不到的方式运行系统(人类测试人员可能不会想到),并且当源代码和规范不可用或不完整时,可能是唯一实际的选择。它本身作为一种测试方法被广泛使用;而且,它构成了许多其他测试方法的核心部分。另一方面,经常有人争辩说,这种随机测试是低效的,因为没有尝试利用任何可用的信息来指导测试。这项工作现在包含了一系列方法,在这些方法中,随机选择可以起到或多或少的作用。

越来越多的研究已经检验了自适应随机测试(ART)的概念,这是一种试图提高随机测试的故障检测有效性的尝试。ART基于各种经验观察,这些观察表明许多程序故障导致输入域的连续区域出现故障,称为故障模式ART系统地引导或过滤随机生成的候选对象,以利用可能存在的此类模式。在这篇文章中,我们试图提供一个ART领域日益增长的零散研究机构的综合。我们通过明确地在各个研究结果之间勾勒出新的联系,提供了新的见解和解释。我们报告ART如何适用于测试各种类型的软件,以及它是如何激发理论分析的,这些理论分析揭示了软件故障行为和最大测试效率之间的基本联系。我们相信,从整体上看,这项工作对软件测试的研究人员和实践者都有重要意义。

第2节介绍了故障模式的概念,它提供了ART的主要灵感,第3节描述了ART的基本原理。在某些条件下,ART接近最佳有效的测试用例选择策略,正如我们在第4节中概述的那样。第5节描述了如何通过开发适当的“距离度量”将ART应用于广泛的软件。在第6节,我们的注意力从总结已经进行的工作转向通过应用从ART中学到的教训来探索扩大研究的可能性。最后,我们在第7节做一个简短的总结。

关于“随机性”的一点注记

通常,当在研究和现实生活实践中进行“随机测试”时,使用由标准确定性方法生成的伪随机序列,而不是真正的非确定性随机数。而伪随机序列根据定义,不是真正随机的,迄今为止发表的所有关于随机测试的文章都将这种伪随机序列等同于随机。因此,为简单起见,在本文中,我们将称为根据伪随机序列进行的测试,该伪随机序列称为“随机”。

在进行随机测试时,测试人员可以选择合适的抽样分布来满足他们的要求。例如,当试图准确估计软件交付的可靠性时,测试人员可能会选择根据反映软件预期使用情况的配置文件(称为操作配置文件)进行抽样。另一方面,作为一种测试策略的随机测试的分析通常假定为统一的抽样分布。在本文中,除非另有说明,否则我们也假定抽样剖面是均匀的

故障模式

从本质上讲,测试过程可以看作是从被测软件(称为输入域)的所有可能输入的集合中抽取样本,逐个执行样本,并确定每个样本的输出是否与软件规范匹配。如果输出与规范不匹配,则会显示软件故障。软件故障的存在意味着故障的存在-相关软件中的实际代码缺陷。(显然,许多软件故障可能与同一故障有关。)。测试器试图选择测试数据,以最大化检测到的不同故障的数量。为了帮助测试人员执行此任务,自然需要考虑故障如何导致输入域的不同部分在执行时产生错误输出-换句话说,揭示故障。

这一领域的开创性工作是怀特和科恩(1980)的工作,他们分析了数值程序中某些类型的程序错误。他们观察到,当谓词的内容(源代码中的决策点)错误时,将采用不正确的计算路径(称为域错误 domain errors)。因此,这通常会导致显示故障的输入域的连续区域。怀特和科恩随后提出了一种检测此类错误的系统技术。

更多的实证研究得出了类似的结论,即软件故障在输入域中导致连续的“故障区域”的趋势。Ammann和Knight(1988)分析了一些样本数值程序,以确定由各种故障引起的故障分布。在他们的小样本中,他们发现断层导致了“局部连续”的故障区。毕晓普(1993)进行了一项更全面的研究,他检查了核反应堆控制功能中的程序故障。他发现几乎所有的故障都是“BLOB”故障-也就是说,每个故障都显示输入域的一个连续区域中的故障

Chan等人。(1996)还指出,数值软件中的某些常见故障类型也会导致导致故障的输入在整个输入域中的典型分布,他们称之为故障模式。他们将三种这样的模式分类:(I)块模式,其中故障形成输入域的局部紧凑的连续区域;(II)类似于由White和Cohen的域错误引起的模式的条形模式,其中连续但沿一个或多个维度拉长的“条”将揭示故障;以及(III)点模式,其中故障将以不连续的方式传播到整个输入域。他们认为,条状和块状故障模式比点模式更常见

所有这些完全不同的研究都导致了一个更普遍的结论:在数值程序中,许多程序错误导致程序输入域的连续故障区域。

故障模式 ≈ 程序故障导致输入域的连续故障区域

自适应随机测试

如果连续的故障区确实很常见,这将表明提高随机测试的故障检测有效性的一种方法是以某种方式利用这一现象。

存在连续故障区的一个推论是“非故障区”,即软件根据规范产生输出的输入域的区域也将是连续的。因此,假设有一组先前执行的测试用例没有显示任何故障,则远离这些旧测试用例的新测试用例更有可能显示故障-换句话说,测试用例应该更均匀地分布在整个输入域中。基于这种直觉,自适应随机测试(ART)应运而生,以提高随机测试的故障检测有效性。

图1描述了提出的第一个ART方法,固定大小候选集ART算法(FSCS-ART)(Chen等人,2004b)。基本上,为了选择新的测试用例,随机生成k个候选。对于每个候选Ci,定位最接近的先前执行的测试,并确定距离Di。选择具有最大Di的候选人,并丢弃其他候选人。重复该过程,直到达到所需的停止标准,无论是测试资源耗尽还是检测到足够的故障

每次先选几个用例,再从几个用例里选个与先前执行的测试距离最大的,重复上述步骤

图2显示了在具有二维输入空间的程序上运行的FSCS-ART,使得k=3。在图2A中,我们显示了四个先前执行的测试用例,t1到t4。我们希望选择一个额外的测试用例,因此随机生成三个候选者c1到c3,如下所示。为了在候选人中进行选择,我们必须计算出每个候选人的得失。图2B描述了候选C1的这一过程,而图2C显示了每个候选的最近TID。图2C中的虚线表示各个候选者的分数。我们选择具有最大di的候选者,在本例中是C2。因此,我们丢弃候选c1和c3,将c2视为测试用例t5,并执行它。我们重复这个过程,直到达到停止标准

图例: FSCS-ART正在运行。以前执行的测试用例用叉号表示,随机生成的候选用例用三角形表示。为了选择新的测试用例,(A)随机生成多个候选;(B)确定与每个候选最近的先前执行的测试用例;(C )在所有候选中比较这些最近距离;以及(D)选择具有最长这种距离的候选

为了评估FSCS-ART方法的有效性,Chen等人。比较了FSCS-ART与随机测试(即通过均匀随机抽样和替换进行测试)在12个错误播种的数值程序样本上的故障检测有效性。原始的、未经修改的程序被用作测试预言,以检查输出的正确性。用于比较这两种方法的统计数据是检测第一次失败所需的平均测试次数,这通常称为F-Measure。在大多数情况下,FSCS-ART的F测量比随机测试低30-50%。使用具有不同故障率和几何形状的各种故障模式的模拟结果与实验结果一致

F-Measure:检测第一次失败所需的平均测试次数

需要的测试次数少,但成本未必低,因为算法中进行距离计算等式有成本代价的

虽然这样的改进是显著的,但我们有理由推测,可能还有其他更有效的方法来利用连续的故障区域,这将导致更小的F-度量。许多不同的方法,使用不同的直觉来实现“均匀传播”,已经在文献中进行了调查。**限制性随机测试(RRT)**就是一个例子,它基于排除的概念,以实现ART的均匀传播基础(Chan等人,2006年)。它涉及到在已经执行的测试用例周围创建“排除区”。如果随机生成的输入位于所有排除区域之外,则将其用作下一个测试用例;否则将丢弃该输入,并重复该过程。RRT的疗效与FSCS-ART非常相似。ART by Partitioning(Chen等人,2004a)使用了一种相当不同的直觉–在本质上,对输入域进行分区,并将测试用例均匀地分配到分区,将实现均匀的传播。其他利用故障区邻接性的尝试,但使用各种其他直觉来实现测试用例的“均匀传播”,包括Quasi-Random Testing(Chen和Merkel,2007)和基于格子的ART(Mayer,2005)。

Restricted Random Testing:限制性随机测试,在已经执行的测试用例周围创建“排除区”。如果随机生成的输入位于所有排除区域之外,则将其用作下一个测试用例;否则将丢弃该输入,并重复该过程

ART by Partitioning 分区随机测试,对输入域进行分区,并将测试用例均匀地分配到分区,将实现均匀的传播

其他 : Quasi-Random Testing 拟随机测试 与 Lattice-Based ART基于网格的ART

有趣的是,所有这些方法都具有相似的故障检测性能范围,与随机测试相比,最大改进约为50%。然而,不同的方法在不同的情况下执行得最好。例如,一些方法提供较低的选择开销,或者在输入域的维度较大时工作得很好。

Antirandom testing反随机测试(Malaiya,1995)是另一种使用“距离”的相关概念来分发测试用例的测试方法。然而,它与ART之间有几个主要的不同之处。反随机测试几乎完全是确定性的;唯一的不确定性来自于选择集合中的第一个测试用例。此外,与ART提供的增量生成的灵活性不同,该方法需要提前选择测试用例的数量。

Antirandom testing 反随机测试

理论极限

如果这么多不同的利用故障邻接性的方法都能得到相似的结果,一个有趣的问题就出现了–没有做出进一步的改进是不是研究人员在寻找更好的方法方面缺乏想象力?现有的ART方法是不是太相似了–完全不同的方法会不会取得更好的效果?或者现有的解决方案已经接近最佳效果了吗?在计算机科学界,这样的问题传统上是通过问题的理论复杂性分析来回答的。我们开始对这个问题应用相同的方法-通过使用故障邻接性信息,我们可以在多大程度上改进随机测试?我们已经证明(Chen和Merkel,2008),当单独使用故障邻接性信息时,可以提高故障检测有效性的程度确实是有基本限制的。

我们这样做的方法原则上很简单。我们首先考虑这样一种情况,其中测试人员拥有比实际可用的更多关于故障模式的信息-本质上,测试人员知道输入域有一个单一的、连续的故障区域。测试仪知道这个单一故障区域的大小、形状和方向-除了它在输入域中的位置之外的所有信息。事实上,测试仪没有关于输入域中故障区域位置的任何信息。拉普拉斯的冷漠原则(Keynes,2006)指出,如果决策者知道世界上可能的状态,并且确实没有关于每个可能状态的似是而非的信息,那么他们应该表现得好像每个国家的可能性都是平等的。在这种情况下,由于测试仪没有关于故障区位置的信息,他们应该假设它同样可能位于输入域内的任何可能位置。与各种ART算法所假设的相比,测试器具有严格更多的关于故障邻接性的信息,并且绝对没有关于故障区位置的信息,这在ART中也是假设的。

给定这些假设,然后我们设计一个选择测试用例的最优策略,并明确地表明它将有一个低于或等于任何其他策略的F-度量(回想一下,F-度量是一个平均值)。本质上,我们在整个输入域中规则间隔的位置创建测试用例的“网格”,并以任意顺序执行结果测试。在特定情况下,这样的策略可能会“走运”,并在第一个测试用例中显示失败。然而,在许多试验中,在给定相同失败率的情况下,这种策略的F度量将至少是随机测试替换的F度量的一半

也就是说,与随机测试相比,除了关于故障模式信息的位置信息之外,没有任何使用故障模式信息的策略可以减少50%以上的F-MEASURES。

即使存在多个连续的故障区,这一结果仍然有效。证明是复杂的,但基于与单一故障区情况相同的原理。感兴趣的读者可以参考(Chen和Merkel,2008)。

我们结果的含义是相当清楚的。ART使用的信息严格较少,但仍然经常实现与理论上可能的最大值相当接近的有效性改进。因此,ART测试有效性的任何进一步改进都必须考虑到有关程序故障位置的附加信息。或者,研究人员可以开发在均匀分布测试用例方面具有较低管理费用的ART方法,而不是试图提高故障检测有效性,以便提高总体成本效益。此外,ART的表现性与理论界限的贴近性表明,这个界限确实很紧。

ART的多种变体的效率提高都接近50%,一方面说明了不同的方法都已经接近理论最好效果,另一方面也表明错误模式连续性确实是一个紧密连续的区域。

之后研究也就不该聚焦于进一步提高随机测试有效性的F值,而是研究开销更低的自动测试方法,或是推广到更广泛的类别

数字程序以外的ART

TODO:

ART的初步研究表明,它可以大大提高随机测试的故障检测有效性,而且这种改进确实接近理论上可能的最大值(在没有关于故障位置的进一步信息的情况下)。然而,这些最初的研究仅限于具有数字输入的软件。许多,也许是大多数实际感兴趣的软件没有这样简单的输入参数。因此,研究如何将ART应用到更广泛的课程类别中是相当重要的。

作为ART更广泛应用的例证,我们再次考虑FSCS-ART。要在给定的情况下应用FSCS-ART,必须首先解决两个问题:从被测软件的输入域中随机抽样的方法以及比较输入域的任意两个成员并确定它们之间的“距离”的方法。第一个问题并不是ART独有的:根据定义,纯随机测试还需要能够从输入域随机采样!在实践中,随机生成测试用例可能是一个具有挑战性的问题。然而,已经在许多应用领域,例如SQL服务器(Slutz,1998;Bati等人,2007)和Java虚拟机(Yoshikawa等人,2003)等许多应用领域中彻底研究和演示了足以揭示重大软件故障的随机测试用例的生成。因此,我们不会在本文中进一步讨论这个问题。

相比之下,第二个问题–“距离”衡量标准–是ART独有的。该算法将在给定任何微不足道的距离度量的情况下执行-例如,简单地返回距离零,而不管所讨论的输入域的成员的位置。然而,在这种情况下,算法会退化为成本更高的纯随机测试版本。因此,在设计适当的距离度量时,我们需要考虑为什么在数值程序中会出现连续的故障模式,以及如何将这一概念推广到更广泛的软件中。

ART推广面临的两个问题如何随机抽样 , 如何度量两个输入间距离,前者很成熟,只关注后者

本质上,“距离”度量需要估计两个输入具有共同故障行为的可能性: 距离越小,它们触发相同故障行为的可能性就越大。事实上,“距离”的量度其实是一种差异量度。揭示数字输入域中连续故障模式的研究表明,相邻的测试用例(如笛卡尔距离度量所反映的)可能导致类似的计算。反过来,我们的直觉是,计算的相似性很好地预测了失效行为的相似性。因此,为了在非数字上下文中有效地应用ART,需要替代的方法来度量由两个测试用例的执行所产生的计算的相似性。

“距离”度量需要估计两个输入具有共同故障行为的可能性: 距离越小,它们触发相同故障行为的可能性就越大

我们已经提出了一种差异度量(Kuo,2006;Merkel,2005),该度量可以应用于广泛的软件输入类型,该度量基于Ostrand和Balcer(1988)为类别划分方法提出的类别和选择的概念。类别划分方法是一种基于规范的测试方法。测试人员必须首先确定决定被测软件行为的参数和环境条件,这些参数和环境条件称为类别。对于每个类别,选择被定义为期望触发类似计算的互斥的值集。

我们的工作利用类别和选择的概念作为ART的差异度量的基础,允许ART适用于更广泛的软件。直观地说,两个输入有不同选择的类别越多,它们触发的计算就越不同。因此,具有不同选择的类别计数可以用作差异度量

举个例子,考虑一个简单的物体识别系统,它可以区分形状、大小和颜色。假设物体的颜色只能是浅红色、红色、深红色、浅蓝色、蓝色、深蓝色、浅绿色、绿色和深绿色,物体的形状是球体、立方体或金字塔。尺寸在(0,10](M3)的范围内。系统性能仅取决于物体形状、红、蓝或绿的“基色”,以及物体是否大于1立方米。在这种情况下,我们可以定义三个类别:颜色、形状和大小;颜色类别的三个选择:[红色]、[蓝色]和[绿色];形状类别的三个选择:[球体]、[立方体]和[棱锥体];以及两个大小类别的选择:[大]和[小]。某些选项包含多个可能的值。例如,[红色]选项的可能值为浅红色、红色和深红色,而[大型]的任何大小都超过1立方米。

考虑两个程序输入T1和T2,其中T1是大小为3.2m3的浅红色球体,而T2是大小为2.7m3的深蓝色球体。T1有[红色]、[球体]和[大]选项,而T2有[蓝色]、[球体]和[大]选项。因此,在这种情况下,只有一个类别-颜色-T1和T2不同,所以使用我们的测量方法,两个输入之间的差值是1。

离散化,不同的差值为1,再求差值和

我们已经使用这个距离度量作为为非数字软件开发新的ART算法的基础。我们已经在几个案例研究中使用了这些新算法,包括Unix命令行实用程序“grep”,以及来自UNL软件-工件基础设施存储库的其他程序(Rothermel等人,2009年)。详情可以在Barus等人的文章中找到。(正在准备中)。

虽然我们已经证明了为广泛的输入类型构建有意义的差异度量是可能的,但这并不是唯一可行的方法。最近,Ciupa et al.。(2008)在面向对象软件的背景下提出了另一种类型的差异度量。它们提供了一种计算两个任意对象之间的对象距离的方法。它们首先定义了相关类型的距离,如数字、布尔值、字符串和引用。接下来,他们描述如何测量复合对象之间的距离,该距离由三个元素组成:类型距离,基于两个对象类型之间的差异;字段距离,匹配域之间的距离;递归距离,匹配参考属性之间的距离。该方法的优点是完全规定了差度量的计算方法,支持了该方法的完全自动化,但其有效性还需要进一步的实证研究来确定。

进一步的影响

在大多数以前发表的作品中,ART主要被设想为纯随机测试的增强替代;研究已经证明了可以有效地做到这一点的各种方法,并表明它可以应用于广泛的软件。我们相信,抗逆转录病毒疗法现已足够成熟,可作为随机测试的有效替代方法,我们希望透过总结现有的结果,引起更广泛的关注,并鼓励其应用和进一步提升。

然而,在我们的研究过程中,通过反思的过程,我们认识到如何将ART技术和概念应用于更广泛、更广泛的背景中。在本节中,我们将重点介绍这些想法,我们相信这些想法可以应用于软件测试的各个方面,也可能应用于测试之外的其他环境中。

自适应随机序列

在工业测试实践和研究文献中,随机序列的使用在许多情况下都非常常见。随机序列的生成非常简单,并且从排序中消除了任何人为偏见。因此,随机测试,或测试套件元素的随机排序,通常用作与更复杂的策略进行比较的基线。通常,这样的策略是基于选择测试以达到研究人员认为与测试有效性很好相关的某个标准;然后,与随机测试或测试套件的随机排序进行比较,以支持这一直觉。

在测试用例选择的上下文中,ART被设计为更有效地替代随机测试。鉴于ART保留了随机测试的大部分优点,并提供了近乎最佳的效果,因此研究ART作为一种基线方法而不是随机测试的使用是很有吸引力的。因此,鉴于随机排序也通常用作基线,ART也可用于排序目的。也就是说,除了使用ART来生成自己的测试用例序列之外,ART还可以用于对给定的测试套件进行排序,旨在增加更早发现故障的机会。我们将所谓的有序序列定义为自适应随机序列,或AR序列 AR sequence。

自适应随机序列 : Adaptive random sequences

测试用例通过ART排序后就有序了,为AR序列

AR序列的一个明显应用是用于回归测试。在回归测试中,可能会随着时间的推移积累大量的测试套件,即使不是所有的测试套件都必须在每次进行更改时运行。因此,基于许多不同的标准,已经开发了各种技术来确定测试套件的元素的优先级。我们认为AR序列可能是一种简单、有效且开销相对较低的替代方案。此外,还有许多其他测试技术(例如路径测试技术)可以生成比使用可用资源运行的测试用例集更大的测试用例;AR序列在这些情况下可能非常有用。

甚至可能AR序列具有测试之外的用途。准随机序列Quasi-random sequences(Chen和Merkel,2007)已被建议作为ART的替代方案用于测试目的,在广泛的上下文中使用。AR序列可能具有类似的广泛应用。准随机序列生成与浮点数的二进制表示的属性密切相关(Bratley等人,1992);AR序列实际上更容易适用于更广泛的数据类型。此外,标准的准随机序列生成算法只生成极少的不同序列;AR序列可以平凡地用于生成大量不同的序列。

基于故障的测试

Failure-based testing

ART基于这样的概念,即软件故障在输入域中的连续区域中显露出来。因此,我们将ART视为基于失败的测试技术的一个例子。一些较早的技术,如White和Cohen的域测试(1980),隐含地利用了故障模式信息,尽管其最初的概念是基于故障的技术。然而,据我们所知,ART是第一种明确设计为基于故障的测试方法的测试技术。

我们将基于故障的测试方法定义为基于有关故障模式的各个方面的知识(如形状、大小、位置和数量)来选择测试用例的方法。ART是一种相对简单的基于故障的测试方法,因为它只利用关于故障模式的一种形式的知识-它们通常在程序输入域内是连续的。不难设想利用其他信息作为邻接信息的替代或补充的其他基于故障的测试方法。作为一个简单的例子,众所周知,故障很可能在子域之间的边界上或附近表现出来。因此,选择子域边界附近或子域边界上的测试用例的测试策略也可以被视为基于故障的测试技术。`

以下对比fault-based testing

这里应该对比基于故障的测试failure-based testing和公认的基于故障的测试概念fault-based testing。基于故障的测试fault-based testing描述了一类测试策略,旨在证明程序中不存在或存在某种类型的故障。例如,White和Cohen(1980)的域测试策略就是基于故障的测试技术的经典示例。域测试策略保证了在数值软件中发现谓词的错误。Failure-based testing基于故障的测试并不直接查看故障本身,而是将其表现为程序输入域内的故障。因此,它必然是一个比基于故障的测试更宽松的概念。

然而,对于这两种测试策略,实证研究都起着重要的作用。在基于故障的测试中fault-based testing,经验研究可以提供必要的信息来优先搜索特定的故障类别;如果某类故障在实践中非常常见,搜索它们显然是更高的优先级。同样,有效的基于故障的测试failure-based testing必须基于对典型故障模式 failure patterns的实证研究,包括它们的几何形状和分布。我们相信,这样的研究可以作为开发新的基于故障failure-based testing的测试技术的基础,并对现有的测试技术进行改进。

fault-based testing,优先搜索特定的故障类别

failure-based testing对典型故障模式 failure patterns的实证研究,包括它们的几何形状和分布

从另一个角度来看,基于故障模式的测试Failure-based testing可以被视为一种特殊的搜索问题。在此视图中,测试执行时的反馈将指导继续搜索导致失败的输入。ART是对这一概念的简单而成功的实现。许多测试方法认为没有显示失败的测试本质上是浪费的,但我们的工作并不是唯一不同意这一观点的工作。例如,变形测试(Chen等人,1998)使用先前执行的“原始”测试用例来构造“后续”测试用例。然后检查原始测试用例和后续测试用例的输出之间的关系,以验证程序的正确性。此方法是专门为缓解Oracle问题而设计的。Pacheco等人。(2007)利用不会导致失败的测试用例作为“反馈”,使用过去没有显示失败的测试用例作为构建块来构建更复杂的测试用例。基于搜索的测试还寻求使用来自过去测试用例的反馈来指导未来的测试用例选择,但通常更有选择性。到目前为止,大多数这样的工作都考虑了来自测试执行的附加信息,如执行路径,以帮助指导搜索,并且通常只考虑最新的几个测试用例,而不是整个测试用例。如果没有这样的指导,传统的搜索算法将无法知道下一步该往哪里走,因此将这些技术应用于基于故障的测试将是非常具有挑战性的。研究故障模式的几何和分布将有助于设计合适的搜索算法。这些算法可以考虑许多先前测试用例的结果,从而最大限度地利用来自每个测试用例的有限信息。

Failure-based testing 利用已有的测试结果信息,来指导接下来的测试选择

一种软件测试理论

我们的理论分析表明,ART的表现接近理论的最大值,这本身就是有意义的。然而,用来表明这一点的方法也值得进一步考虑。虽然已经针对不同的测试策略进行了不同类型的理论分析,但我们相信我们的方法是新颖的,可以作为一个模型来更深入地理解故障信息和软件测试之间的关系。

对各种复盖标准进行了大量的理论分析。这些分析表明,实现一种类型的复盖可能意味着另一种复盖-一个微不足道的例子是分支复盖率意味着语句复盖率。这样的分析是有用的,但它们与故障检测能力并不直接相关。相反,在基于故障的测试中,已经针对某些故障类别建立了故障包含关系(Kapoor和Bowen,2007)。因此,描述了特定故障类型的层次结构,并探讨了基于故障的测试策略之间的包含关系。也有一些论文评估单个测试技术的故障检测有效性,或者比较两种测试技术。这些方法往往在适用性上非常具体,例如证明一种测试技术比另一种测试技术更有效的充分条件(Chen和Yu,1996;Morasca和SerraCapizzano,2004)。

我们的方法与上面所有的方法都有很大的不同。我们显式地开发了关于测试人员关于故障的先验知识的模型,并且仅使用该信息来确定任何测试策略可以实现的最佳性能。这不仅可以评估已知策略的性能,还可以应用于测试尚未发明的策略。以这种方式,它可以帮助识别方法论研究应该在哪里最好地应用于改善技术水平,类似于时间和空间复杂性分析对于计算机科学中的算法研究人员是如何有用的

很有可能使用这种通用方法来确定可用信息和测试有效性之间的其他关系。最终,将关于被测软件的各种类型的信息与一类测试策略相关联的复杂性层次结构是可能的。对于这样的一门课,可以确定到目前为止开发的最好的实用策略,以及理论上的有效性界限。我们的工作是迈向这种等级制度的第一步。我们还注意到,任何这样的层次结构都不太可能像理论计算机科学中复杂的问题类层次结构那样优雅或全面。尽管如此,我们相信这种层次结构的发展将对软件测试理论产生重大影响,并将确定方法学研究的最佳方向。

测试用例多样性的作用

even spreading 均匀分布

引导我们发展ART的关键直觉是“均匀分布even spreading ”整个输入领域的概念。我们开始意识到,“均匀分布even spreading”可以更好地描述为多样性的一种形式。至少对于数值情况,相邻的输入往往会导致类似的计算。因此,测试用例均匀分布在整个输入域中,会导致计算的多样性。

虽然多样性的重要性很难说是一个新的或令人惊讶的洞察力,但ART实现了一种非常简单的形式-可能是最简单的形式-测试案例多样性。多年来,在一些测试方法中存在各种不同的测试用例多样性概念;例如,不同类型的控件覆盖和数据流覆盖标准会产生具有不同多样性概念的测试集。最终,在测试中,测试人员在失败行为中寻求多样性,以便测试用例揭示程序在给定测试资源下可能失败的多种不同方式。由于故障行为信息在测试用例执行之前不可能完全可用,所以测试人员必须找到与故障行为密切相关的各种其他多样性模型

在分区测试的研究中,比例抽样(PS)策略(Chen and Yu,1996)规定,从每个分区中随机选择的测试用例数量应该与相应的分区大小成正比。该策略为分区测试提供了一个充分条件,使其检测到至少一个故障的概率不小于带替换的随机测试的概率。

PS proportional sampling 比例抽样

Chen等人。(2001)观察到,ART与PS策略的比较显示出一个有趣的相似之处,PS策略可以被认为是一种ART形式。PS策略和ART之间的如此相似之处令人震惊。这两种策略最初提出的原因截然不同。PS策略的动机是需要提供一种普遍安全的策略(保证优于随机测试),而ART则试图在导致故障的输入趋于聚集的情况下改进随机测试。在推导PS策略时,没有假设导致故障的输入的分布。这种有趣的相似性现在可以解释为由于它们在输入域上的共同“多样性”。因此,我们认为一种新的分类测试用例选择策略的方法可能是基于各种形式的多样性

ART不仅在整个测试套件的上下文中实现多样性,而且在任何时候执行的测试用例的子集内实现多样性。当AR序列用于根据某个特定标准对已经表现出多样性的测试套件进行排序时,在测试的任何阶段,执行的测试的当前子集都表现出附加的局部多样性。这种局部多样性将提高更早发现故障的机会。

ART --> 测试同理多样性

结论

基于连续故障区域常见的经验观察,自适应随机测试将随机候选选择与过滤过程相结合,以鼓励测试用例在整个输入域中均匀分布。实验研究表明,与随机测试相比,ART可以使用多达50%的更少的测试用例来检测故障。事实上,ART方法通过使用相同信息的任何可能的测试方法实现了接近理论上的最大测试用例有效性。早期关于ART的工作主要集中在数字输入领域;然而,最近的研究表明,它也可以应用于广泛的软件。因此,我们相信,在许多应用程序中,它代表了随机测试的一种有效、高效的替代方案。

另一方面,对ART的研究可能会有更广泛的意义,我们在本文中讨论了其中的一些问题。AR序列是一种很有前途的、通用的增量排序方法。ART的成功说明了基于失败的测试方法的潜力,以及多样性对测试套件有效性的影响和重要性。我们的理论工作在ART的推动下,为更严格和科学地分析软件测试人员可用的信息和测试策略家族的有效性之间的关系铺平了道路-包括那些尚未开发的策略。我们相信这样的分析方法将对软件测试的基础做出重大贡献。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值