对模糊测试中的测试用例进行优化的方法,装置和系统的制作方法

文档序号:6489307阅读:249来源:国知局
对模糊测试中的测试用例进行优化的方法,装置和系统的制作方法
【专利摘要】本发明提供一种对测试用例进行排序的方法,装置和系统。所述方法包括:执行以下步骤一轮或多轮:按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试,监视每个测试用例的攻击效果,并且根据相应于每个测试用例的攻击效果来确定每个测试用例的优先级;根据所确定的每个测试用例的优先级,对所述测试用例集合中的多个测试用例重新排序;其中,在当前轮次中得到的重新排序后的测试用例的集合能够作为在下一轮次的执行中使用的初始测试用例集合。
【专利说明】对模糊测试中的测试用例进行优化的方法,装置和系统
【技术领域】
[0001]本发明总体上涉及软件测试【技术领域】,更具体地涉及对模糊测试中使用的测试用例进行优化。
【背景技术】
[0002]软件(包括应用程序、通信软件等)的安全性测试实际上是在软件输入空间中的一种探测。软件的输入空间由该软件的所有可能的输入或所有可能的输入的组合构成。穷举是验证软件行为正确性的一种最极端的方法,然而,穷举对大部分案例来说不具备可操作性,因为通常情况下,软件程序的输入空间非常巨大,甚至可能是无穷大。
[0003]相比于穷举的方法来说,模糊测试(Fuzz Testing)作为一种随机样本方法,是一种更具可行性的黑盒测试方法。模糊测试通过以下方式来工作:自动地为测试对象(即应用程序、通信软件等)提供随机的或半有效的输入(即测试用例(Test Case)),以尝试触发故障指示以及使测试对象崩溃。这种程序故障或错误可以指示存在安全脆弱性。作为一种黑盒测试方法,模糊测试通常用于大型软件开发项目。目前,最常用的模糊测试是基于字符的,基于字符的模糊测试提供随机数据流(从文件或其他数据流中提供,例如,从套接字中提供)作为被测软件程序的输入。基于字符的模糊测试正广泛应用于协议或网络服务的安全性测试。模糊测试被认为能够提高软件的安全性,这是因为:模糊测试总是能检测出一些测试人员未能发现的漏洞(bug),这些漏洞往往会被软件测试工程师所忽略。模糊测试的主要优势在于:进行测试的成本相对较低,并且完全可以自动实现;此外,模糊测试经常能找出比较严重的且可被利用的漏洞,这些漏洞可以被攻击者加以利用。
[0004]使用模糊测试的一个挑战是,如何利用有限的测试资源来选择能够有效地检测漏洞的测试用例。有许多方法用来选择用于模糊测试的测试用例。一个简单的方法叫作随机模糊测试(RFT),该方法随机地从输入域(S卩,所有可能的输入的集合)中选择测试用例。RFT具有以下优点:成本低;能够自动地生成大量测试用例;以及在无需软件规范和源代码的情况下生成测试用例。除此以外,RFT将“随机性”引入测试过程。这种随机性能够最好地反映系统运行环境的混乱。因此,RFT能够检测到通过确定性的方法所不能暴露的某些漏洞。所有这些优点使得RFT在发现软件漏洞的行业中被广泛的使用。
[0005]然而,在RFT中,并不尝试使用任何可用的信息来引导测试。由于现在的软件至少具有基本的机制来检查输入的有效性,所以与合法输入显著不同的过于特别的“模糊”数据将被容易地检测到并被丢弃。此外,在RFT中,非常可能具有重复的测试用例,因为一些测试用例对于目标软件具有相同的攻击效果。因此,RFT的主要缺点是效率差。

【发明内容】

[0006]根据本发明的一个方面,提供了一种用于对测试用例进行排序的方法,包括:执行以下步骤一轮或多轮:按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试,监视每个测试用例的攻击效果,并且根据相应于每个测试用例的攻击效果来确定每个测试用例的优先级;根据所确定的每个测试用例的优先级,对所述测试用例集合中的多个测试用例重新排序;其中,在当前轮次中得到的重新排序后的测试用例的集合能够作为在下一轮次的执行中使用的初始测试用例集合。
[0007]进一步地,在所述方法中,所述一个或多个标准至少包括以下各项之一:测试用例能够单独地导致测试对象发生故障,测试用例能够与其他测试用例共同地导致测试对象发生故障,测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度,以及测试用例导致测试对象响应延迟。
[0008]进一步地,在所述方法中,通过优先级值来表示优先级,当测试用例的攻击效果满足所述一个或多个标准时,在测试用例的当前优先级值上增加相应的优先级值。
[0009]进一步地,在所述方法中,增加相应的优先级值包括:当一测试用例能够单独地导致测试对象发生故障时,为该测试用例增加第一高的优先级值;当一测试用例能够与其他测试用例共同地导致测试对象发生故障时,为该测试用例增加第二高的优先级值;当一测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度时,为该测试用例增加第三高的优先级值;当一测试用例导致测试对象响应延迟时,为该测试用例增加第四高的优先级值。
[0010]进一步地,在所述方法中,按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试具体为:按照初始测试用例集合中多个测试用例的排列顺序连续应用测试用例对测试对象进行测试,直至应用一个测试用例后所述测试对象发生故障,则重新所述启动测试对象并使用应用的最后一个所述测试用例重新测试该测试对象,如果所述测试对象再次发生故障,则判断所述应用的最后一个测试用例能够单独地导致测试对象发生故障,否则判断所述应用的最后一个测试用例能够与其他测试用例共同地导致测试对象发生故障。
[0011]进一步地,在所述方法中,所述判断该测试用例能够与其他测试用例共同地导致测试对象发生故障包括:(a)重新启动测试对象;(b)使用该测试用例之前的j个测试用例以及该测试用例重新测试该测试对象;循环执行以上步骤(a)和(b),直到测试对象发生故障为止,此时判断该测试用例以及该测试用例之前的j个测试用例能够共同地导致测试对象发生故障,其中,j的初始值为1,并且每次循环后j的值加I。
[0012]进一步地,在所述方法中,在向测试对象应用测试用例后,如果没有接收到测试对象的响应,则向测试对象发送正常输入,如果仍然没有接收到响应,则判断测试对象发生故障;如果接收到相应,则根据响应时间来判断当前测试用例是否导致响应延迟。
[0013]进一步地,在所述方法中,所述测试对象是通信软件。
[0014]根据本发明的另一个方面,提供了一种用于对测试用例进行排序的装置,包括:故障监视模块,用于监视按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行的测试的攻击效果,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例的优先级;优化模块,用于根据所确定的每个测试用例的优先级,对所述多个测试用例重新排序。
[0015]进一步地,在所述装置中,所述一个或多个标准至少包括以下各项之一:测试用例能够单独地导致测试对象发生故障,测试用例能够与其他测试用例共同地导致测试对象发生故障,测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度,以及测试用例导致测试对象响应延迟。
[0016]进一步地,在所述装置中,通过优先级值来表示优先级,当测试用例的攻击效果满足所述一个或多个标准中的一个标准时,在测试用例的当前优先级值上增加相应的优先级值。
[0017]进一步地,在所述装置中,增加相应的优先级值包括:当一测试用例能够单独地导致测试对象发生故障时,为该测试用例增加第一高的优先级值;当一测试用例能够与其他测试用例共同地导致测试对象发生故障时,为该测试用例增加第二高的优先级值;当一测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度时,为该测试用例增加第三高的优先级值;当一测试用例导致测试对象响应延迟时,为该测试用例增加第四高的优先级值。
[0018]进一步地,在所述装置中,所述故障监视模块包括:自动重启模块,用于当测试对象发生故障时,重新启动测试对象;其中,当应用一测试用例时测试对象发生故障,则在通过所述自动重启模块重新启动测试对象并使用该测试用例重新测试该测试对象后,如果该测试对象再次发生故障,则所述故障监视模块判断该测试用例能够单独地导致测试对象发生故障,否则判断该测试用例能够与其他测试用例共同地导致测试对象发生故障。
[0019]进一步地,在所述装置中,所述判断该测试用例能够与其他测试用例共同地导致测试对象发生故障包括:(a)重新启动测试对象;(b)使用该测试用例之前的j个测试用例以及该测试用例重新测试该测试对象;循环执行以上步骤(a)和(b),直到测试对象发生故障为止,此时判断该测试用例以及该测试用例之前的j个测试用例能够共同地导致测试对象发生故障,其中,j的初始值为1,并且每次循环后j的值加I。
[0020]进一步地,在所述装置中,所述故障监视模块包括存活性探测模块,用于在向测试对象应用测试用例后,如果没有接收到测试对象的响应,则向测试对象发送正常输入,如果仍然没有接收到响应,则判断测试对象发生故障;如果接收到响应,则根据响应时间来判断当前测试用例是否导致响应延迟。
[0021]进一步地,在所述装置中,所述测试对象是通信软件。
[0022]根据本发明的又一个方面,提供了一种用于模糊测试的方法,包括:生成多个测试用例;执行以下步骤一轮或多轮:监视按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行的测试的攻击效果,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例的优先级;根据所确定的每个测试用例的优先级,对所述多个测试用例重新排序;其中,在当前轮次中得到的重新排序后的测试用例的集合能够作为在下一轮次的执行中使用的初始测试用例集合。
[0023]根据本发明的另一个方面,提供了一种用于模糊测试的系统,包括:测试用例生成器,用于随机地生成多个测试用例;测试用例存储器,用于按顺序存储生成的所述多个测试用例;模糊测试器,用于按照所述多个测试用例的存储顺序,使用所述多个测试用例中的每个测试用例来对测试对象进行测试;故障监视器,用于监视测试过程,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例的优先级;优化器,用于根据所确定的所述多个测试用例中的每个测试用例的优先级,对所述多个测试用例重新排序,并且将重新排序后的所述多个测试用例存储回所述测试用例存储器。
[0024]通过使用本发明提供的方法,能够自动地优化随机生成的测试用例,以使得能够极大地改进RFT的漏洞检测效率。本申请的优化方法的优化过程是自适应的,并且能够根据攻击效果来优化测试用例。
[0025]本发明的这些及其他特性、特征和优势将在参考附图描述的说明书中变得明显,其中附图以示例的方式图示说明了本发明的原理。说明书仅是出于示例目的,而不限制本发明的范围。下文所引用的参考图都是指附图。
【专利附图】

【附图说明】
[0026]通过参考下面结合附图给出的说明,本文描述的各个方面将变得更加显而易见,其中:
[0027]图1是根据本发明的一个实施例的方法的流程图;
[0028]图2是根据本发明的一个实施例的装置的示意图;
[0029]图3是根据本发明的一个实施例的方法的流程图;
[0030]图4是根据本发明的一个实施例的回溯测试的方法的流程图;
[0031]图5是根据本发明的一个实施例的系统的示意图。
[0032]应当理解的是,在所有上述附图中,同样的附图标记指代同样、相似或对应的特征或功能。
【具体实施方式】
[0033]本申请将针对具体实施例并且参考特定附图进行描述,但是本申请并不局限于此,本申请仅是通过权利要求进行限定。所描述的附图仅为示意性的而非限制性的。在附图中,为便于说明,一些元件的尺寸可能被放大而未按比例绘制。对于在提到单数名词时使用的不定冠词或定冠词,例如“一”、“一个”和“该/所述”,除另有明确规定外,这包括该名词的复数形式。
[0034]在以前的对随机模糊测试的研究中,最经常使用两种尺度来评估测试用例集合的有效性,一种尺度是检测到至少一个漏洞的可能性(称为PF尺度),另一种是预计检测到的漏洞的数量(称为EF尺度)。尽管这两种尺度非常流行,但是他们仍有许多不足。例如,对于EF尺度来说,更高的EF尺度并不必然意味着可以检测到更多的失效或更多不同的漏洞;对于PF尺度来说,其没有反映能够检测到不同数量的漏洞的用例之间的区别。因此,上述两种评估有效性的尺度在许多情况下并不很理想。
[0035]在本发明中,使用一种与前述两种有效性尺度不同的尺度来评估有效性,即,使用“检测到第一个漏洞所需的测试用例的预计数量”这一有效性尺度(称为FF尺度)。FF尺度能够更自然地、更直接地反映测试策略的有效性。如果FF尺度的值越低,则意味着相应的测试策略更有效,这是因为只需要更少的测试用例就可以揭露出第一个漏洞。在实际中,当检测到漏洞时,通常会停止测试并开始进行调试,只有当修复所述漏洞后才重新开始测试阶段。因此,在实际的模糊测试中,能够更快的检测到第一个漏洞的测试用例集合往往是更有效的。
[0036]本发明提供了一种自适应方法,对于随机模糊测试,该方法能够实现更小的FF。本发明的总体构思是:基于随机测试用例的攻击效果来对这些测试用例进行排序,从而使得在随后的测试中能够尽快使用最可能揭露软件脆弱性的测试用例来进行测试。[0037]图1示出了根据本发明的一个实施例的对测试用例进行排序的方法100的流程图。给定包含随机生成的多个测试用例的一个集合,以及作为测试对象的软件程序,例如测试对象可以为一个通信协议,通过图1所示的方法来对测试用例进行排序。
[0038]在步骤SlOl中,按照测试用例的排列顺序(第一次时测试用例的排列顺序是随机生成时的排列顺序),使用所有测试用例来对待测软件程序进行测试,检测每个测试用例的攻击效果,并且根据相应于每个测试用例的攻击效果为集合中的每个测试用例确定相应的优先级。可以使用一种或多种标准来评估攻击效果,例如,一个测试用例是否能够单独地导致被测软件的发生故障(例如对请求无响应),以及一个测试用例是否能够与其他测试用例共同导致被测软件的发生故障。另外,可以将测试用例划分为两个或更多个优先级。
[0039]在步骤S102中,根据所确定的每个测试用例的优先级,对测试用例重新排序,从而得到重新排序后的测试用例的集合。当按照重新排序后的顺序,使用所述生成的测试用例来测试同类型的软件程序时,将能够更快地发现第一处漏洞。例如,当使用排序后的测试用例集合对运行在另一台机器上的同一个软件程序或者另一个版本的软件程序进行测试时,将能够更快地发现第一处漏洞。。
[0040]在以上实施例中,只描述了对测试用例进行一轮排序的步骤。在另一个实施例中,可以对测试用例进行两轮或更多轮的排序,并且在每一轮排序中执行相同的步骤。也就是说,可以循环地执行步骤SlOl和S102,在每一次循环中,将前一轮次中得到的重新排序后的测试用例的集合作为在下一轮次的排序中使用的初始的测试用例的集合,来对另一个被测软件程序进行测试,并依据测试结果再次排序。通常,如果循环的轮次越多,则对初始生成的测试用例的集合的优化越准确,即使得越可能导致被测软件发生故障的测试用例将排在越靠前的位置。使用由此得到的按顺序排列的测试用例来对软件程序进行测试时,将能够通过更少数量的测试用例、更快地揭露漏洞。
[0041]图2示出了根据本发明的一个实施例的对测试用例进行排序的装置200,其能够实现如图1所示的方法。如图所示,装置200包括故障监视模块201和优化模块202。故障监视模块201用于监视按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每一个测试用例对测试对象进行测试的攻击效果,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例的优先级。优化模块202用于根据所确定的所述多个测试用例中的每个测试用例的优先级,对所述多个测试用例重新排序。
[0042]图3示出了根据本发明的一个实施例的对测试用例进行排序的方法300。在图3中,示出了使用m个随机测试用例的集合T=Itpt2,…,tm}进行第& (j≥I)轮测试的具体流程。在测试过程中,将根据测试用例的攻击效果,为每一个测试用例ti确定相应的优先级。可以使用优先级值来表示优先级,并且可以采用多个标准来衡量测试用例的攻击效果。在该实施例的每一轮测试中,可以为各个测试用例分配对应于如下所述的四种标准的优先级值:
[0043](1)单独地导致发生故障:能够单独的导致被测软件发生故障的测试用例被分配最高优先级值PRI_IDV ;
[0044](2)共同地导致发生故障:有时软件故障是由多个个测试用例共同导致的,为这些测试用例分配对应的第二高优先级值PRI_CLB ;
[0045](3)与单独地导致发生故障的测试用例类似:具有与能够单独地导致发生故障的测试用例类似的内容的测试用例将被分配对应的第三高优先级值PRI_IDV_SM (可以将所有的测试用例看作是字符串,因此可以采用例如序列对齐算法来测量两个测试用例之间的相似度,如果相似度达到预定的阈值,那么测试用例可以被标记为该优先级);
[0046](4)响应延迟:导致延迟的响应的测试用例被认为有可能触发故障,为该测试用例分配对应的第四高优先级值PRI_RSP (当被测程序是通信协议软件时,这一标准特别有用,例如,如果软件程序的响应时间超过了上一轮测试的平均响应时间,那么可以认为发生了响应延迟)。
[0047]在一轮测试中为一个测试用例分配的优先级值可以被累加到该测试用例当前具有的优先级值上,每个测试用例的初始优先级值可以被设置为相同的数值,例如O。可以采用不同的数值来表示不同的优先级,在图3的实施例中,为每个测试用例分配对应的优先级值 Pi,Pi 值?1?1_10¥、?1?1_0^、?1?1_10¥_5頂以及 PRI_RSP 可以分别为 4、3、2、1,也可以为
8、6、4、2 等等。
[0048]如图3所示,每一轮测试开始于步骤S301,例如当前测试为第Rj轮。在步骤S301,从其中具有按Pi值大小排序的多个测试用例的测试用例集合τ中,按顺序选择一个测试用例\来应用于被测软件程序,然后执行步骤S302。
[0049]在步骤S302判断应用了测试用例的被测软件程序是否还在活动状态,例如通过向被测软件程序发送正常输入(例如标准的文件或数据包),来观察被测软件程序是否有响应。如果没有响应,则表明被测软件程序发生故障并且继续执行步骤S305 ;如果有响应,则表明被测软件程序未发生故障并且继续执行步骤S303。正常输入是只要被测软件存活着就必然会做出响应的输入,获得正常输入的方法很多,一种方法是使用一个合法的、标准的软件(除被测软件外)与被测软件通讯。这期间,他们的通讯肯定是正常的(因为符合协议规范)。使用量Wireshark或者Tcpdump等工具可以捕捉到正常的输入。另外还可以手工构造符合被测软件协议规范的正常 输入。
[0050]在步骤S305,判断被测软件程序的故障是否由单独的测试用例引起的。如果是的话,则将当前测试用例\的优先级值Pi更新为Pi=Pi+PRI_IDV,然后执行步骤S310 ;如果不是的话,则将当前测试用例\的优先级值Pi更新为Pi=Pi+PRI_CLB,然后执行步骤S310。例如,可以通过如下方式来判断故障是否由单独的测试用例引起:按照初始测试用例集合中多个测试用例的排列顺序连续应用测试用例对测试对象进行测试,直至应用一个测试用例后所述测试对象发生故障。此时,重新所述启动测试对象并使用应用的最后一个所述测试用例重新测试该测试对象,如果所述测试对象再次发生故障,则判断所述应用的最后一个测试用例能够单独地导致测试对象发生故障,否则判断所述应用的最后一个测试用例能够与其他测试用例共同地导致测试对象发生故障。
[0051]在步骤S303,判断当前测试用例是否与能够单独地触发故障的测试用例类似。如果类似,则执行步骤S308,否则执行步骤S304。
[0052]在步骤S308,将当前测试用例\的优先级值Pi更新为Pi=Pi+PRI_SM_CLB,然后执行步骤S310。
[0053]在步骤S304,判断响应时间是否超过阈值RIVlt5例如,值RIV1可以是上一轮测试中计算的测试用例的平均响应时间。如果超过了阈值RIV1,则在步骤S309将当前测试用例
的优先级Pi更新为Pi=Pi+PRI_RSP,然后执行步骤S310。如果未超过阈值,则直接执行步骤 S310。
[0054]在步骤S310,判断当前测试用例是否是集合T中的、在本轮测试中应用的最后一个测试用例。如果不是最后一个测试用例,则返回到步骤S301,以选择下一个测试用例进行测试;如果是最后一个测试用例,则执行步骤S311。
[0055]在步骤S311,计算在本轮测试中集合T中的所有测试用例\的平均响应时间RIr然后执行步骤S312。在实际计算时,例如可以只根据产生了响应的测试用例的响应时间来计算RTj。
[0056]在步骤S312,根据每个测试用例\的当前的优先级值Pi,将集合T中的测试用例重新排序,然后结束第&轮的测试。
[0057]以上描述了对测试用例集合T应用一轮测试的详细方法流程,但是在其他实施例中,可以对测试用例集合T应用多轮测试。当进行第&轮的测试时,将按照在第Rp1轮测试后对T中的测试用例重新排序后得到的顺序来应用T中的测试用例。
[0058]在执行图3所示方法的一个实施例中,启动测试对象,然后向运行中的测试对象应用测试用例,如果在应用一个测试用例后测试对象没有发生故障,则可以在保持测试对象运行的情况下继续应用下一个测试用例,而无须重启该测试对象。如果在应用一个测试用例后测试对象发生故障,则重新启动该测试对象,并使用该测试用例重新测试该测试对象,如果该测试对象再次发生故障,则判断该测试用例能够单独地导致测试对象发生故障,否则判断该测试用例能够与其他先前使用的测试用例共同地导致测试对象发生故障。也可以回溯多个测试用例来确定共同导致测试对象发生故障的测试用例,下面结合图4用一个例子来说明回溯多个测试用例的测试过程。
[0059]例如,用一个测试用例集合中的第i个测试用例测试一个通信软件,如果通信软件有响应,则应用第i+Ι个测试用例继续运行该通信软件进行测试。如果应用第i个测试用例后软件无响应,则向该软件发送正常的输入,如果软件对发送的正常输入无响应,则确定软件产生故障。
[0060]在此情况下,重新启动该被测通信软件,再单独应用第i个测试用例测试软件。此时,如果通信软件无响应,则向该软件发送正常的输入,如果软件对发送的正常输入无响应,则确定软件产生故障,并且得出结论当前故障是由第i个测试用例单独地触发的,因此为其增加第一高的优先级值。反之,如果单独应用第i个测试用例时,通信软件对第i个测试用例有响应,则重新启动软件连续应用第i_l个和第i个测试用例。如果软件无响应,则发送正常的输入,如果软件对发送的正常输入无响应,则确定软件产生故障,并且得出结论当前故障是由第i_l个和第i个测试用例共同触发的,因此为二者都增加第二高的优先级值。
[0061]如果软件对第i_l个和第i个测试用例有响应,则重新启动软件,并连续应用第1-2个、第1-Ι个和第i个测试用例。如果软件无响应,则发送正常的输入,如果软件对正常的输入也无响应,则确定软件产生故障,并且确定当前故障是由第i_2个、第1-Ι个和第i个测试用例共同触发的,从而赋予第i_2个、第1-Ι个和第i个测试用例第二高的优先级值。
[0062]反之,如果软件对第i_2个、第1-Ι个和第i个测试用例有响应,则重新启动软件,从第i_3个测试用例开始重新应用测试用例,重复上述步骤,直至找到共同触发故障的所有测试用例,并赋予他们第二高的优先级值。但是,为防止测试循环太长,兼顾到测试效率,可以设定此循环的上限数目。例如如果将循环的上限数目设定为10,则在上述例子中,仅仅回溯到第1-ΙΟ个测试用例。
[0063]在结合图3描述的实施例中,采用如上所述的四个标准来评估所述测试用例的攻击效果,从而分配对应的优先级值。但是,评估标准并不限于以上四种类型。在其他实施例中,可以采用其他数量或其他类型的标准来评估攻击效果,因而所划分的优先级的数量也可以不同。
[0064]在结合图3描述的实施例中,通过向被测软件程序发送正常输入,来确定被测软件程序是否真正地发生了故障。但是,在其他实施例中,可以采用其他方式来判断被测对象是否发生故障。
[0065]在结合图3描述的实施例中,利用上一轮测试中计算的测试用例的平均响应时间作为响应时间的阈值。但是,在其他实施例中,可以采用其他值作为阈值。
[0066]下面以集合T=为例,说明应用图3所示的方法后所可能得到的结果。h至t6的顺序是这些测试用例初始生成的顺序,在使用它们进行测试前,它们各自的优先级值Pi都为O。在第一轮测试时,按照它们初始生成的顺序来将这些测试用例逐个应用于被测软件程序。在经过一轮测试后,测试用例至t6的优先级值分别变为P1 = O,P2=O, ps=3, p4=4, p5=2, p6 = 1也就是说,当使用h和t2,测试第一个被测软件程序时,它们都无法导致如上所述的四种标准中的任意一种情况发生;当使用t3测试第一个被测软件程序时,程序发生故障,并且该故障可能与之前运行的测试用例有关;当使用t4测试第一个被测软件程序时,会单独地导致程序发生故障;而测试用例t5与t4非常类似;当使用t6测试第一个被测软件程序时,导致被测程序响应延迟。因此,按照上述优先级值,测试用例集合T中的测试用例将被重新排序为{t4,t3, t5, t6, t1; t2}。使用重新排序后的测试用例来对其他测试对象进行测试时,将有可能更快地发现第一个漏洞,从而提高了测试效率。
[0067]在对上述测试集合T进行第一轮测试并排序后,还可以在其基础上,再次应用集合T进行第二轮测试。在第二轮测试中,按照t4,t3, t5, t6, t1; t2的顺序向第二个被测软件程序(例如通过修改第一个被测软件程序得到的程序,或与第一个被测软件程序版本不同的程序等)应用测试用例。在第二轮测试中,分配给测试用例t4,t3, t5, t6, t1; t2的优先级值将分别为4,0,2,4,0,1。也就是说,在第二轮测试中,当使用14和16测试第二个被测软件程序时,都会单独地导致程序发生故障;而测试用例t5与t4非常类似;当使用t3和h测试第二个被测软件程序时,都无法导致如上所述的四种标准中的任意一种情况发生;当使用t2测试第二个被测软件程序时,导致被测程序响应延迟。从而,在经过两轮测试后,对应于各个测试用例的总的优先级值将变为P1=O, P2=I, p3=3, p4=8, p5=4, p6=5o因此,在经过两轮测试后,各个测试用例的优先级的顺序将对应于如上的总的优先级值的大小的顺序。因此,此时,对测试用例集合T中的测试用例按优先级重新排序后的顺序将为{t4,t6, t5, t3, t2, tj。使用重新排序后的测试用例来对其他测试对象进行测试时,将可能比使用第一轮排序后的测试用例更快地发现第一个漏洞,从而提高了测试效率。
[0068]以上描述了两轮测试或排序,在实践中,可以对测试用例集合T进行更多轮的排序。
[0069]图5不出了根据本发明的一个实施例的用于模糊测试的系统500的不意图。如图5所示,系统500包括测试用例生成器510,用于随机地生成多个测试用例,该多个测试用例构成测试用例集合T,例如在上述各个实施例中描述的测试用例集合T。
[0070]系统500还包括测试用例存储器520,用于按顺序来存储所述生成的多个测试用例。
[0071 ] 系统500还包括模糊测试器530,用于按照测试用例存储器520中的多个测试用例的存储顺序,逐个使用所述多个测试用例中的每一个测试用例来对测试对象进行测试,例如,运行被测软件程序,并向被测软件程序输入上述测试用例。
[0072]系统500还包括故障监视器540,用于监视模糊测试过程,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例相应的优先级。所述故障监视器540可以进一步包括存活性探测模块541和自动重启模块542。其中,自动重启模块542用于当测试对象发生故障时(例如,被测软件程序没有任何响应时),重新启动测试对象。存活性探测模块541用于在所述测试期间(例如向测试对象输入了测试用例之后),向测试对象发送正常输入,并且如果接收到响应,则根据响应时间来判断当前测试用例是否导致响应延迟;如果没有接收到响应,则判断当前测试用例导致测试对象发生故障。当应用一测试用例时测试对象发生故障,则可以使用自动重启模块542来重新启动测试对象,并使用该测试用例重新测试该测试对象,如果该测试对象再次发生故障,则判断该测试用例能够单独地导致测试对象发生故障,否则判断该测试用例能够与其他测试用例共同地导致测试对象发生故障。
[0073]此外,系统500还包括优化器550,用于根据分配给所述多个测试用例中的每个测试用例的优先级,对所述多个测试用例重新排序,并且将重新排序后的所述多个测试用例存储回所述测试用例存储器520,从而完成一轮对测试用例排列顺序的更新。下一次使用更新后的顺序排列的测试用例来对测试对象进行测试,并且还可以对存储器520中存储的测试用例进行更多轮的更新。
[0074]以上结合具体实施例描述了本发明。本领域的技术人员还应认识到,可以将结合本文公开的各方面描述的各种示例性逻辑框、模块、单元、装置、电路和算法步骤实现为电子硬件、由处理器执行的各种形式的包含指令的程序或设计代码(本文为了方便起见可以将其称为“软件”或“软件模块”)或两者的组合。为了清楚地说明硬件和软件的这种可互换性,上文一般从它们功能性的角度来描述各种示例性部件、框、模块、单元和步骤。将这些功能实现为硬件、固件还是软件取决于特定的应用和施加在整个系统上的设计约束条件。技术人员可以针对每种特定应用以不同的方式实现所述的功能,但不应将这种实现决定解释为导致脱离本公开的范围。
[0075]应该注意的是,给出上述实施例是为了描述本发明而非限制本发明,在上述各个实施例中包括的特定特征并不限于仅包括在该特定实施例中,对于不同实施例中的特征可以进行适当组合,而不脱离本发明的范围。并且要理解的是,本领域技术人员很容易想到在不脱离本发明的精神和范围的情况下可以采取修改和变更。这种修改和变更被视为在本发明和权利要求书的范围内。本发明的保护范围由权利要求书进行限定。另外,权利要求书中的任何附图标记均不应被解释为对权利要求的限制。
【权利要求】
1.一种用于对测试用例进行排序的方法,包括: 执行以下步骤一轮或多轮: 按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试,监视每个测试用例的攻击效果,并且根据相应于每个测试用例的攻击效果来确定每个测试用例的优先级; 根据所确定的每个测试用例的优先级,对所述测试用例集合中的多个测试用例重新排序; 其中,在当前轮次中得到的重新排序后的测试用 例的集合能够作为在下一轮次的执行中使用的初始测试用例集合。
2.如权利要求1所述的方法,其中,采用一个或多个标准来评估所述攻击效果,所述一个或多个标准至少包括以下各项之一:测试用例能够单独地导致测试对象发生故障,测试用例能够与其他测试用例共同地导致测试对象发生故障,测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度,以及测试用例导致测试对象响应延迟。
3.如权利要求2所述的方法,其中,通过优先级值来表示优先级,当测试用例的攻击效果满足所述一个或多个标准时,在测试用例的当前优先级值上增加相应的优先级值。
4.如权利要求3所述的方法,其中,在测试用例的当前优先级值上增加相应的优先级值包括: 当一测试用例能够单独地导致测试对象发生故障时,为该测试用例增加第一高的优先级值; 当一测试用例能够与其他测试用例共同地导致测试对象发生故障时,为该测试用例增加第二高的优先级值; 当一测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度时,为该测试用例增加第三高的优先级值; 当一测试用例导致测试对象响应延迟时,为该测试用例增加第四高的优先级值。
5.如权利要求2-4中任一项所述的方法,其中,按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试具体为:按照初始测试用例集合中多个测试用例的排列顺序连续应用测试用例对测试对象进行测试,直至应用一个测试用例后所述测试对象发生故障,则重新所述启动测试对象并使用应用的最后一个所述测试用例重新测试该测试对象,如果所述测试对象再次发生故障,则判断所述应用的最后一个测试用例能够单独地导致测试对象发生故障,否则判断所述应用的最后一个测试用例能够与其他测试用例共同地导致测试对象发生故障。
6.如权利要求5所述的方法,其中,所述判断应用的最后一个测试用例能够与其他测试用例共同地导致测试对象发生故障进一步包括: (a)重新启动测试对象; (b)使用所述应用的最后一个测试用例和其之前的j个测试用例测试所述测试对象; 循环执行以上步骤(a)和(b),直到测试对象发生故障为止,此时判断所述应用的最后一个测试用例以及其之前的j个测试用例能够共同地导致测试对象发生故障,其中,j的初始值为I,并且每次循环后j的值加I。
7.如权利要求2所述的方法,其中,在向测试对象应用测试用例后,如果没有接收到测试对象的响应,则向测试对象发送正常输入,如果仍然没有接收到响应,则判断测试对象发生故障;如果接收到响应,则根据响应时间来判断当前测试用例是否导致响应延迟。
8.如权利要求1所述的方法,其中,所述测试对象是通信软件。
9.一种用于对测试用例进行排序的装置,包括: 故障监视模块,用于监视按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中每个测试用例对测试对象进行测试的攻击效果,并且根据相应于每个测试用例的攻击效果,来确定每个测试用例的优先级; 优化模块,用于根据所确定的每个测试用例的优先级,对所述测试用例集合中的多个测试用例重新排序。
10.如权利要求9所述的装置,其中,采用一个或多个标准来评估所述攻击效果,所述一个或多个标准至少包括以下各项之一:测试用例能够单独地导致测试对象发生故障,测试用例能够与其他测试用例共同地导致测试对象发生故障,测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度,以及测试用例导致测试对象响应延迟。
11.如权利要求9或10所述的装置,其中,通过优先级值来表示优先级,当测试用例的攻击效果满足所述一个或多个标准时,在测试用例的当前优先级值上增加相应的优先级值。
12.如权利要求11所述的装置,其中,增加相应的优先级值包括: 当一测试用例能够单独地导致测试对象发生故障时,为该测试用例增加第一高的优先级值; 当一测试用例能够与其他测试用例共同地导致测试对象发生故障时,为该测试用例增加第二高的优先级值; 当一测试用例与能够单独地导致测试对象发生故障的测试用例的类似度达到预定程度时,为该测试用例增加第三高的优先级值; 当一测试用例导致测试对象响应延迟时,为该测试用例增加第四高的优先级值。
13.如权利要求9所述的装置,所述故障监视模块包括自动重启模块,其用于当测试对象发生故障时,重新启动测试对象;所述故障监视模块按照初始测试用例集合中多个测试用例的排列顺序使用所述多个测试用例中的每个测试用例对测试对象进行测试具体为,按照初始测试用例集合中多个测试用例的排列顺序连续应用测试用例对测试对象进行测试,直至应用一个测试用例后所述测试对象发生故障,则利用自动重启模块重新所述启动测试对象,并使用应用的最后一个所述测试用例重新测试该测试对象,如果所述测试对象再次发生故障,则判断所述应用的最后一个测试用例能够单独地导致测试对象发生故障,否则判断所述应用的最后一个测试用例能够与其他测试用例共同地导致测试对象发生故障。
14.如权利要求13所述的装置,其中,所述判断该测试用例能够与其他测试用例共同地导致测试对象发生故障包括: Ca)重新启动测试对象;, (b)使用该测试用例和其之前的j个测试用例测试该测试对象; 循环执行以上步骤(a)和(b),直到测试对象发生故障为止,此时判断该测试用例以及该测试用例之前的j个测试用例能够共同地导致测试对象发生故障,其中,j的初始值为1,并且每次循环后j的值加1。
15.如权利要求9所述的装置,所述故障监视模块包括: 存活性探测模块,用于在向测试对象应用测试用例后,如果没有接收到测试对象的响应,则向测试对象发送正常输入,如果仍然没有接收到响应,则判断测试对象发生故障;如果接收到响应,则根据响应时间来判断当前测试用例是否导致响应延迟。
16.如权利要求9所述的装置,其中,所述测试对象是通信软件。
17.—种用于模糊测试的方法,包括: 生成多个测试用例; 执行以下步骤一轮或多轮: 按照初始测试用例集合中多个测试用例的排列顺序,使用所述多个测试用例中的每个测试用例对测试对象进行测试,监视每个测试用例的攻击效果,并且根据相应于每个测试用例的攻击效果来确定每个测试用例的优先级; 根据所确定的每个测试用例的优先级,对所述测试用例集合中的多个测试用例重新排序; 其中,在当前轮次中得到的重新排序后的测试用例的集合能够作为在下一轮次的执行中使用的初始测试用例集合。
18.—种用于模糊测试的系统,包括: 测试用例生成器,用于随机地生成多个测试用例; 测试用例存储器,用于按顺序存储生成的所述多个测试用例; 模糊测试器,用于按照所述多个测试用例的存储顺序,使用所述多个测试用例中的每个测试用例来对测试对象进行测试; 故障监视器,用于监视测试过程,并且根据相应于每个测试用例的攻击效果确定每个测试用例的优先级; 优化器,用于根据所确定的所述多个测试用例中的每个测试用例的优先级,对所述多个测试用例重新排序,并且将重新排序后的所述多个测试用例存储回所述测试用例存储器。
【文档编号】G06F11/36GK103699475SQ201210365720
【公开日】2014年4月2日 申请日期:2012年9月27日 优先权日:2012年9月27日
【发明者】刘玉恒 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1