CN101859273B - 一种产生测试用例的方法及装置 - Google Patents

一种产生测试用例的方法及装置 Download PDF

Info

Publication number
CN101859273B
CN101859273B CN 200910131169 CN200910131169A CN101859273B CN 101859273 B CN101859273 B CN 101859273B CN 200910131169 CN200910131169 CN 200910131169 CN 200910131169 A CN200910131169 A CN 200910131169A CN 101859273 B CN101859273 B CN 101859273B
Authority
CN
China
Prior art keywords
test case
current
case
test
chained list
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 200910131169
Other languages
English (en)
Other versions
CN101859273A (zh
Inventor
唐文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens Ltd China
Original Assignee
Siemens Ltd China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Siemens Ltd China filed Critical Siemens Ltd China
Priority to CN 200910131169 priority Critical patent/CN101859273B/zh
Publication of CN101859273A publication Critical patent/CN101859273A/zh
Application granted granted Critical
Publication of CN101859273B publication Critical patent/CN101859273B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种产生测试用例的方法,该方法首先根据预先设置的测试用例生成规则进行穷举,得到大量测试用例,然后根据测试用例之间的近似程度删除多余的测试用例,如此得到的测试用例既符合模糊测试对测试用例的数量的要求,又不包含冗余的测试用例,从而能够提高模糊测试的效率。本发明还公开了一种用于产生测试用例的系统。应用本发明能够提高模糊测试的效率。

Description

一种产生测试用例的方法及装置
技术领域
本发明涉及软件安全性测试技术领域,特别涉及一种产生测试用例的方法及装置。
背景技术
软件(包括:应用程序、协议等)的安全性测试实际上是在软件输入空间中的一种探测。软件的输入空间由该软件的所有可能的输入、或所有可能的输入的组合构成。穷举是验证软件行为正确性的一种最极端的方法,然而,穷举对大部分案例来说不具备可操作性,因为通常情况下,软件程序的输入空间非常巨大,甚至可能是无穷大。相比于穷举的方法来说,模糊测试(Fuzz Testing)作为一种随机样本方法,是一种更具可行性的黑盒测试方法。
模糊测试是一种软件测试技术,该技术构造一些随机或半随机的数据(称为fuzz)作为被测试软件程序的输入,并观察被测试软件程序的工作状况。作为一种黑盒测试工具,模糊测试通常用于大型软件开发项目。模糊测试被认为能够提高软件的安全性,这是因为:模糊测试总是能检测出一些测试人员未能发现的缺陷,这些缺陷往往会被软件测试工程师所忽略。
目前,最常用的模糊测试是基于字符的,基于字符的模糊测试提供随机数据流(从文件或其它数据流中提供,例如:从套接字中提供)作为被测软件程序的输入,基于字符的模糊测试正广泛应用于协议或网络服务器的安全性测试。
模糊测试的优势在于:进行测试的成本相对较低、且完全可以自动实现;并且,模糊测试经常能找出比较严重、且可被利用的缺陷(bug),这些bug可被攻击者加以利用。
本质上来说,模糊测试是采用在被测软件程序的输入空间中随机分布的测试用例进行测试的。参与测试的测试用例越多,测试就越彻底;而且,参与测试的测试用例之间的差异越大,找出的安全漏洞也越多,因为相近似的测试用例通常只能找出相同的安全漏洞。然而,现有模糊测试方案通常只是采用随机的方式或根据预先设置的规则产生测试用例,使得要么无法根据用户定义的模式产生数量足够多的测试用例,要么所产生的测试用例之间过于近似(这导致许多不必要的冗余测试)。因此,现有模糊测试方案要有效识别出各种不同安全漏洞,在以下两个方面还存在问题:
1)如何根据被测软件程序所属技术领域的知识、以及特定的模式,产生大量测试用例;
2)如何从大量测试用例中消除相近似的测试用例,以提高模糊测试的效率。
发明内容
有鉴于此,本发明的主要目的在于提供一种产生测试用例的方法,以提高模糊测试的效率。
本发明的另一个目的在于提供一种用于产生测试用例的装置,以提高模糊测试的效率。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种产生测试用例的方法,包括:
根据预先设置的测试用例生成规则进行穷举,得到大量测试用例;
采用近似串匹配算法计算所述测试用例之间的距离,根据所述距离确定所述测试用例之间的近似程度,并根据所述测试用例之间的近似程度删除多余的测试用例;其中,预先设置分组长度阈值L、第一距离阈值μ1、第二距离阈值μ2,...,第m距离阈值μm;其中,L为整数,μ1>μ2>...>μm;根据所述测试用例之间的近似程度删除多余的测试用例进一步包括:
A、构造一个数组,该数组中的每一个元素代表测试用例所属的一个组,所述数组中的每一个元素包含一个链表,该链表中包含该元素所代表的组中所有彼此之间的距离大于μ1的有效测试用例,对于所述链表中的每一个有效测试用例,其他与其自身距离大于μ2的有效测试用例构成其子链表,依此类推;将第一个测试用例作为当前测试用例;
B、按照将所有长度小于等于L的测试用例归为一个组,将所有长度大于L、且小于等于2L的测试用例归为一个组,依此类推的方式,确定当前测试用例所属的组;
C、将μ1作为当前判断标准,将所述组对应的链表作为当前链表;
D、将当前测试用例与当前链表中的每一个有效测试用例进行比较,若当前测试用例与当前链表中的每一个有效测试用例之间的距离均大于当前判断标准,则将当前测试用例插入当前链表,将当前测试用例的下一个测试用例作为当前测试用例,返回B操作;若当前链表中存在与当前测试用例之间的距离小于等于当前判断标准的有效测试用例,则将当前链表的子链表作为当前链表,并将小于当前判断标准的下一个距离阈值作为当前判断标准,返回D操作。
较佳地,所述测试用例生成规则可以包括:正则表达式和用于限制测试用例长度的阈值。
上述方法中,所述进行穷举可以包括:构造有限自动机,所述有限自动机中的每一个状态代表所述正则表达式中的一个元素,对所述有限自动机进行遍历,产生符合所述正则表达式以及用于限制测试用例长度的阈值的测试用例。
一种用于产生测试用例的装置,包括:
测试用例生成模块,用于根据预先设置的测试用例生成规则进行穷举,得到大量测试用例;
测试用例过滤模块,用于采用近似串匹配算法计算所述测试用例之间的距离,根据所述距离确定所述测试用例之间的近似程度,并根据所述测试用例之间的近似程度删除多余的测试用例;其中,预先设置分组长度阈值L、第一距离阈值μ1、第二距离阈值μ2,...,第m距离阈值μm;其中,L为整数,μ1>μ2>...>μm;根据所述测试用例之间的近似程度删除多余的测试用例进一步包括:
A、构造一个数组,该数组中的每一个元素代表测试用例所属的一个组,所述数组中的每一个元素包含一个链表,该链表中包含该元素所代表的组中所有彼此之间的距离大于μ1的有效测试用例,对于所述链表中的每一个有效测试用例,其他与其自身距离大于μ2的有效测试用例构成其子链表,依此类推;将第一个测试用例作为当前测试用例;
B、按照将所有长度小于等于L的测试用例归为一个组,将所有长度大于L、且小于等于2L的测试用例归为一个组,依此类推的方式,确定当前测试用例所属的组;
C、将μ1作为当前判断标准,将所述组对应的链表作为当前链表;
D、将当前测试用例与当前链表中的每一个有效测试用例进行比较,若当前测试用例与当前链表中的每一个有效测试用例之间的距离均大于当前判断标准,则将当前测试用例插入当前链表,将当前测试用例的下一个测试用例作为当前测试用例,返回B操作;若当前链表中存在与当前测试用例之间的距离小于等于当前判断标准的有效测试用例,则将当前链表的子链表作为当前链表,并将小于当前判断标准的下一个距离阈值作为当前判断标准,返回D操作。
该装置中可以进一步包括设置模块,用于接收用户设置的正则表达式和用于限制测试用例长度的阈值;
所述测试用例生成模块,还可以用于根据所述正则表达式构造每一个状态代表所述正则表达式中的一个元素的有限自动机,并对所述有限自动机进行遍历,产生符合所述正则表达式和用于限制测试用例长度的阈值的测试用例。
由上述技术方案可见,本发明提供的产生测试用例的方法和装置首先根据预先设置的测试用例生成规则进行穷举,得到大量测试用例,然后根据测试用例之间的近似程度删除多余的测试用例,如此得到的测试用例既符合模糊测试对测试用例的数量的要求,又不包含冗余的测试用例,从而能够提高模糊测试的效率。
附图说明
下面将通过参照附图详细描述本发明的实施例性实施例,使本领域的普通技术人员更清楚本发明的上述及其他特征和优点,附图中:
图1为本发明产生测试用例的方法的流程示意图;
图2为本发明用于产生测试用例的装置的组成结构示意图;
图3为本发明一实施例中对测试用例进行过滤的方法示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明的主要思想是首先根据预先设置的测试用例生成规则进行穷举,得到大量测试用例,然后根据测试用例之间的近似程度删除多余的测试用例,如此得到的测试用例既符合模糊测试对测试用例的数量的要求,又不包含冗余的测试用例,从而能够提高模糊测试的效率。
图1为本发明产生测试用例的方法的流程示意图。参见图1,该方法包括:
步骤101:根据预先设置的测试用例生成规则进行穷举,得到大量测试用例。
本步骤中的测试用例生成规则可以由用户根据对被测软件程序所属技术领域的知识进行设置。本发明中的被测软件程序可以包括:独立的软件、协议等。以下,将本发明进行模糊测试的对像统称为被测软件程序。
用户可以将希望模糊测试覆盖的所有串(string)的集合表示为相应的正则表达式,并设定用于限制串的长度的阈值。该阈值可以是串的长度阈值,也可以是串中所包含元素个数的阈值,如此,该正则表达式和用于限制串长度的阈值就构成测试用例生成规则,用例生成器将根据给定的正则表达式和长度阈值产生所有符合条件的串。由于本发明所涉及的测试用例是基于字符型的测试用例,该测试用例可以是字符串(character string)型或比特串(bit string)型,因此,如无特殊说明,本实施例中的串就相当于测试用例。
为实现本步骤中的操作,可以构造一个有限自动机,该有限自动机中的每一个状态代表给定正则表达式中的一个元素(例如:符号或短语)。在对该有限自动机进行遍历的过程中,产生并输出符合该正则表达式、以及长度阈值的串。
本步骤的处理纳入了对模糊测试非常有用的两种属性:被测软件程序所属技术领域的知识以及产生大量测试用例。
步骤102:计算上述大量测试用例之间的近似程度,并根据测试用例之间的近似程度删除多余的测试用例。
经步骤101得到的测试用例的数量可能非常巨大,与此同时,这大量的测试用例中存在许多彼此近似的测试用例。由于相近似的测试用例对于模糊测试来说是等价的,因此,直接采用这些测试用例进行测试将导致模糊测试的效率非常低下,在被测系统中以等价测试用例进行尝试将无益于找出任何新的安全漏洞。
为防止重复测试等价测试用例所导致的浪费,可以采用过滤器将相近似的两个测试用例中的其中一个过滤掉。过滤器可以采用近似串匹配算法来比较两个串。这里,近似串匹配算法包括但不限于:海明距离、编辑距离。近似串匹配算法用于计算两个串之间的距离,以确定该两个串之间的近似程度。考虑到采用近似串匹配算法对所有不同的串进行比较的效率非常低,可以对所有不同的串加以组织。例如:可以组织成树型结构,
并将具有不同距离的大于给定标准的串存储于树中的同一层中。
另一种可用于删除等价串的方法是计算串的安全特性索引值。例如:串的长度、串中所包含的特定的字符等。如果两个串具有相同的安全特性索引值,判定这两个串相近似,可以删除其中之一。
在过滤掉多余的串之后,剩下的测试用例将是各不相同的测试用例。这些测试用例对模糊测试来说是有效的测试用例,因为它们是考虑了所属技术领域的知识、数量巨大且近似的多余测试用例已经被删除。
本发明提供了一种用于为模糊测试产生安全测试用例的有效的方法,该方法首先让用户根据被测软件程序所属技术领域的知识设置测试用例生成规则,然后根据该测试用例生成规则生成大量测试用例,最后采用近似串匹配算法删除近似或多余的串以提高测试效率。采用本发明方法可以在以下三个方面提高模糊测试的效率:首先,用户可以为特定的被测软件程序自定义不同的测试用例生成规则;第二,可以根据设置的测试用例生成规则自动生成大量测试用例;第三,可以删除测试用例中相近似或多余的测试用例,从而提高了模糊测试的效率。
此外,采用本发明方法所产生的串可以用于模糊测试以找出被测软件程序的安全漏洞,软件开发人员排除该安全漏洞就可提高被测软件程序的安全性。
对应于上述方法,本发明还提供了一种用于产生测试用例的装置,以下对本发明所提供的装置进行详细说明。
图2为本发明用于产生测试用例的装置的组成结构示意图。参见图2,该装置包括:测试用例生成模块210和测试用例过滤模块220,其中:
测试用例生成模块210,用于根据预先设置的测试用例生成规则进行穷举,得到大量测试用例;
测试用例过滤模块220,用于计算测试用例之间的近似程度,并根据测试用例之间的近似程度删除多余的测试用例。
图2所示装置中可以进一步包括设置模块230,用于接收用户设置的正则表达式和用于限制测试用例长度的阈值;
此时,图2所示测试用例生成模块210,还可以用于根据该正则表达式构造每一个状态代表所述正则表达式中的一个元素的有限自动机,并采用该有限自动机产生符合该正则表达式和用于限制测试用例长度的阈值的测试用例。
较佳地,图2所示装置中的测试用例过滤模块220中可以进一步包括:距离计算子模块221和过滤子模块222,其中:
距离计算子模块221,用于采用近似串匹配算法计算任意两个测试用例之间的距离,根据该距离确定这两个测试用例之间的近似程度;
过滤子模块222,用于根据计算得到的距离删除多余的测试用例。
较佳地,图2所示过滤子模块222中可以进一步包括:初始化单元223、比较单元224和判断单元225,其中:
初始化单元223,用于构造已知有效测试用例集,在初始化时,将第一个测试用例作为已知有效测试用例集中的元素,并将第二个测试用例作为当前测试用例;
比较单元224,用于将当前测试用例与该已知有效测试用例集中的测试用例进行比较,在已知有效测试用例集中存在与当前测试用例相近似的测试用例时,删除当前测试用例,并通知判断单元225进行判断,否则,将当前测试用例加入该已知有效测试用例集,并通知判断单元225进行判断;
判断模块225,用于根据比较单元的通知判断当前测试用例是否为最后一个测试用例,在不是的情况下,将当前测试用例的下一个测试用例作为当前测试用例,通知比较单元224进行比较。
图2所示设置模块(230),可以进一步用于存储预先设置的分组长度阈值L、第一距离阈值μ1、第二距离阈值μ2,...,第m距离阈值μm;其中,L为整数,μ1>μ2>...>μm
此时,图2所示过滤子模块222中可以进一步包括:数组构造单元226、分组单元227、初始配置单元228和过滤单元229,其中:
数组构造单元226,用于构造一个数组,为该数组中的每一个元素创建一个链表,处于该链表中的测试用例为有效测试用例,并用于将当前测试用例置为第一个测试用例;
分组单元227,用于按照将所有长度小于等于L的测试用例归为一个组,将所有长度在大于L、且小于等于2L的串归为一个组,依此类推的方式,确定当前测试用例所属的组;
初始配置单元228,用于当前判断标准设置为μ1,将当前链表设置为所述组对应的链表;
过滤单元229,用于将当前测试用例与当前链表中的每一个有效测试用例进行比较,在当前测试用例与当前链表中的每一个有效测试用例之间的距离均大于当前判断标准时,将当前测试用例插入当前链表,将当前测试用例的下一个测试用例作为当前测试用例,通知初始配置单元228进行相应的设置,并通知分组单元227对当前测试用例进行分组操作;在当前链表中存在与当前测试用例之间的距离小于等于当前判断标准的有效测试用例时,将当前链表的子链表作为当前链表,并将小于当前判断标准的下一个距离阈值作为当前判断标准,对当前测试用例与当前链表中的每一个有效测试用例进行比较。
上述包括“初始化单元223、比较单元224和判断单元225”的方案和“数组构造单元226、分组单元227、初始配置单元228和过滤单元229”的方案均可以实现对测试用例的过滤,在实际应用中,择一实施即可。
以上对本发明产生测试用例的方法及装置进行了详细说明,下面通过一个具体实施例对本发明技术方案的具体实施方式进一步详细说明。
本实施例中提供的方法支持用户为特定的被测目标定义对应的测试用例模式。其他用于产生用例的方法也可以随机使用,并且,还可以预先定义一些测试用例。本实施例中模糊测试所使用的测试用例是字符串型的。本实施例所产生的测试用例用于模糊测试对协议类产品或其他软件产品的输入。
本实施例产生测试用例的方法按照如下步骤进行:
第1步:需要用户根据被测软件程序的特性采用正则表达式的方式定义测试用例的模式。例如:基于对被测软件程序的了解,用户希望产生包含“MMX”、“CF”和“SBO”,且“MMX”、“CF”和“SBO”由字符’$’加以分隔的所有串。串MMX$CF$SBO和串MMX$MMX$CF$CF就符合上述条件。此时,无需用户手工写出这些元素的所有可能的组合,只需定义与之对应的POSIX(Portable Operating System Interface:可移植操作系统接口)或者其扩展形式的正则表达式即可。上述条件可以表示为:
[[MMX|CF|SBO]$]+    (1)
(1)式所示正则表达式表示所有包含“MMX”、“CF”和“SBO”,且“MMX”、“CF”和“SBO”由字符’$’加以分隔的串,这些串可以是任意长度。但是,实际应用中,不可能产生无限长的串,因此,需要用户定义一个整数型值L作为所产生的串中的元素个数阈值。
第2步:测试用例生成器将第1步中的正则表达式作为输入,用以产生相应的串。本实施例中,采用开源工具——YAGG(Yet Another Generator for Generator:又一个产生生成器的生成器)作为测试用例生成器。但是YAGG只能处理LEX(词法分析器)和YACC(Yet Another Compiler for Compiler:用于生成编译器的另一编译器)文件,无法处POSIX风格的正则表达式,因此,需要将正则表达式转换成对应的LEX和YACC文件。以(1)式中的正则表达式为例,其对应的LEX文件如下:
%%
“$”return SEPARATOR;
(“MMX”|“CF”|“SBO”)return ELEMENTS;
其对应的YACC文件如下:
使用LEX和YACC文件,以及设定的元素个数阈值作为输入,YAGG将产生对应的自动机,并自动产生符合条件的串。
本例中,可以获取到所有形如(2)所示的串,这些串中最多包含元素个数阈值个元素。
MMX$CF$SBO$...$MMX$CF$SBO
MMX$CF$SBO$...$MMX$CF$MMX    (2)
本实施例中产生的串的数量将非常大,从而可以比手工定义测试用例覆盖更多的输入空间。
第3步:尽管第2步中的测试用例生成器可以生成大量测试用例,但是,其缺点在于许多测试用例之间非常相近似。例如:串“MMX$CF$SBO$...$MMX$CF$SBO”与串“MMX$CF$SBO$...$MMX$CF$MMX”只有一个元素不同。对于模糊测试来说,这些近似串是等价的。例如:某个测试用例可以导致被测系统出现异常,那么,与该测试用例等价的其他测试用例也能导致被测系统出现异常。因此,直接采用这些原始串作为测试用例将导致测试效率非常低下。所以,在将串作为测试用例之前,需要将其中相近似的串滤除。
为确定两个串的近似程度,可以采用模式匹配领域的近似串匹配算法。在近似串匹配算法中,有两种较佳的算法可以用于计算两个串之间的距离,即:海明距离和编辑距离。
对于两个具有相同长度(记为n)的串A和B来说,它们的海明距离可以按照(3)式进行计算:
Σ i = 1 n | A i - B i | - - - ( 3 )
(3)式中,Ai表示串A中的第i个字符,Bi表示串B中的第i个字符,并且,|Ai-Bi|的取值按照(4)式确定:
Figure GSB00001092308800092
为计算两个串之间的编辑距离,需要填充一个矩阵Ci,j,其中,0≤i≤n,0≤j≤n。Ci,j表示匹配A1..N与B1..N所需的最少的操作数。按照式(5)进行计算:
Ci,0=i
C0,j=j(5)
Ci,j=如果(Ai=Bj)那么Ci1,j-1否则1+min(Ci-1,j,Ci,j-1,Ci-1,j-1)
最后,Cn,n就是串A与串B的编辑距离。
为删除近似的多余串,本实施例中的过滤器将对所产生的所有串进行遍历,并将每一个串与已知的有效测试用例集进行比较。该已知的有效测试用例集是经之前的过滤处理之后得到的测试用例的集合,初始状态下,可以将第一个串作为该已知有效测试用例集中的元素,并从第二个串开始进行比较。如果当前在比较的串与已知有效测试用例集汇总的串相近似,则判定该串为多余串,将其删除,否则,判定该串有效,将其加入已知有效测试用例集中。在对所有串都进行过过滤之后,已知有效测试用例集中包含的串将是不含多余串的有效串,可用于进行有效的模糊测试。
但是上述方法只是一种直接的用例过滤方法。由于采用上述方法进行串的过滤时需要将每一个串与已知有效测试用例集中的每一个串进行比较,这将耗费大量的计算资源。因此,本实施例中提供了一种更为有效的进行测试用例过滤的方法,如图3所示。
由于需要过滤的串可能具有不同的长度,为便于操作,需要将它们分成不同的组。假设L是用户预先定义的一个分组长度阈值,可以将所有长度小于等于L的串归为一个组,将所有长度大于L、且小于等于2L的串归为一组,依此类推。本实施例中,采用一个数组代表不同的组,该数组中的每一个元素包含一个链表,该链表中包含该元素所对应的组中所有彼此之间的距离大于μ1的已知有效测试用例。进一步地,该链表中的每一个用例还可能包含其他与其自身距离大于μ2的有效测试用例的子链表,依此类推。这里,μ1,μ2...,μm可由用户进行设置,且μ1>μ2>...>μm
下面举一个具体示例进行说明:
(a)首先,构造一个数组,为该数组中的每一个元素创建一个链表,处于该链表中的测试用例为有效测试用例;并将第一个测试用例作为当前测试用例S’;
(b)对于当前测试用例S’,首先估算其长度以确定其所属的组。
(c)从第一个距离判断标准μ1以及第一级链表开始判断,也就是:将μ1作为当前判断标准,将该组对应的链表作为当前链表。
(d)采用近似串匹配算法(例如海明距离或编辑距离)将当前测试用例S’与当前链表中的每一个有效测试用例S进行比较。
(d1)如果S’与前链表中的任一有效测试用例S之间的距离均大于当前判断标准,则将S’插入当前链表的末尾作为一个新的有效测试用例,因为S’不相近似于当前链表中的任何已知有效测试用例。并将当前测试用例的下一个测试用例作为当前测试用例,返回(c)。
(d2)如果当前链表中存在一个与当前测试用例之间的距离小于等于当前判断标准的有效测试用例,则判定S’与该有效测试用例相近似,此时,需要进入子链表以判断在下一个距离阈值条件下是否存在相近似的测试用例。此时,需要以当前判断标准的下一个距离阈值作为当前判断标准,并将当前链表的子链表作为当前链表,返回(d)。假设当前判断标准是μ1,那么当前判断标准的下一个距离阈值则为μ2
以μ1,μ2...,μm为判断标准,重复执行上述操作,直至找到一个链表或子链表,其中的每一个串与S’的距离均大于相应的判断标准,则将S’插入该链表或子链表的末尾。
通过采用上述过滤算法,无需将S’与所有有效测试用例进行比较,从而提高了效率。
由上述实施例可见,本发明提供的产生测试用例的方法和装置首先根据预先设置的测试用例生成规则进行穷举,得到大量测试用例,然后根据测试用例之间的近似程度删除多余的测试用例,如此得到的测试用例既符合模糊测试对测试用例的数量的要求,又不包含冗余的测试用例,从而能够提高模糊测试的效率。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.一种产生测试用例的方法,包括:
根据预先设置的测试用例生成规则进行穷举,得到大量测试用例;
采用近似串匹配算法计算所述测试用例之间的距离,根据所述距离确定所述测试用例之间的近似程度,并根据所述测试用例之间的近似程度删除多余的测试用例;其中,预先设置分组长度阈值L、第一距离阈值μ1、第二距离阈值μ2,...,第m距离阈值μm;其中,L为整数,μ1>μ2>...>μm;根据所述测试用例之间的近似程度删除多余的测试用例进一步包括:
A、构造一个数组,该数组中的每一个元素代表测试用例所属的一个组,所述数组中的每一个元素包含一个链表,该链表中包含该元素所代表的组中所有彼此之间的距离大于μ1的有效测试用例,对于所述链表中的每一个有效测试用例,其他与其自身距离大于μ2的有效测试用例构成其子链表,依此类推;将第一个测试用例作为当前测试用例;
B、按照将所有长度小于等于L的测试用例归为一个组,将所有长度大于L、且小于等于2L的测试用例归为一个组,依此类推的方式,确定当前测试用例所属的组;
C、将μ1作为当前判断标准,将所述组对应的链表作为当前链表;
D、将当前测试用例与当前链表中的每一个有效测试用例进行比较,若当前测试用例与当前链表中的每一个有效测试用例之间的距离均大于当前判断标准,则将当前测试用例插入当前链表,将当前测试用例的下一个测试用例作为当前测试用例,返回B操作;若当前链表中存在与当前测试用例之间的距离小于等于当前判断标准的有效测试用例,则将当前链表的子链表作为当前链表,并将小于当前判断标准的下一个距离阈值作为当前判断标准,返回D操作。
2.根据权利要求1所述的方法,其特征在于:
所述测试用例生成规则包括:正则表达式和用于限制测试用例长度的阈值。
3.根据权利要求2所述的方法,其特征在于:
所述进行穷举包括:构造有限自动机,所述有限自动机中的每一个状态代表所述正则表达式中的一个元素,对所述有限自动机进行遍历,产生符合所述正则表达式以及用于限制测试用例长度的阈值的测试用例。
4.一种用于产生测试用例的装置,包括:
测试用例生成模块(210),用于根据预先设置的测试用例生成规则进行穷举,得到大量测试用例;
测试用例过滤模块(220),用于采用近似串匹配算法计算所述测试用例之间的距离,根据所述距离确定所述测试用例之间的近似程度,并根据所述测试用例之间的近似程度删除多余的测试用例;其中,预先设置分组长度阈值L、第一距离阈值μ1、第二距离阈值μ2,...,第m距离阈值μm;其中,L为整数,μ1>μ2>...>μm;根据所述测试用例之间的近似程度删除多余的测试用例进一步包括:
A、构造一个数组,该数组中的每一个元素代表测试用例所属的一个组,所述数组中的每一个元素包含一个链表,该链表中包含该元素所代表的组中所有彼此之间的距离大于μ1的有效测试用例,对于所述链表中的每一个有效测试用例,其他与其自身距离大于μ2的有效测试用例构成其子链表,依此类推;将第一个测试用例作为当前测试用例;
B、按照将所有长度小于等于L的测试用例归为一个组,将所有长度大于L、且小于等于2L的测试用例归为一个组,依此类推的方式,确定当前测试用例所属的组;
C、将μ1作为当前判断标准,将所述组对应的链表作为当前链表;
D、将当前测试用例与当前链表中的每一个有效测试用例进行比较,若当前测试用例与当前链表中的每一个有效测试用例之间的距离均大于当前判断标准,则将当前测试用例插入当前链表,将当前测试用例的下一个测试用例作为当前测试用例,返回B操作;若当前链表中存在与当前测试用例之间的距离小于等于当前判断标准的有效测试用例,则将当前链表的子链表作为当前链表,并将小于当前判断标准的下一个距离阈值作为当前判断标准,返回D操作。
5.根据权利要求4所述的装置,其特征在于,该装置中进一步包括设置模块(230),用于接收用户设置的正则表达式和用于限制测试用例长度的阈值;
所述测试用例生成模块(210),还用于根据所述正则表达式构造每一个状态代表所述正则表达式中的一个元素的有限自动机,并对所述有限自动机进行遍历,产生符合所述正则表达式和用于限制测试用例长度的阈值的测试用例。
CN 200910131169 2009-04-07 2009-04-07 一种产生测试用例的方法及装置 Active CN101859273B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200910131169 CN101859273B (zh) 2009-04-07 2009-04-07 一种产生测试用例的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910131169 CN101859273B (zh) 2009-04-07 2009-04-07 一种产生测试用例的方法及装置

Publications (2)

Publication Number Publication Date
CN101859273A CN101859273A (zh) 2010-10-13
CN101859273B true CN101859273B (zh) 2013-10-02

Family

ID=42945192

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910131169 Active CN101859273B (zh) 2009-04-07 2009-04-07 一种产生测试用例的方法及装置

Country Status (1)

Country Link
CN (1) CN101859273B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102314395A (zh) * 2011-10-12 2012-01-11 中国农业银行股份有限公司 一种测试用例生成方法及系统
CN103699475B (zh) * 2012-09-27 2016-09-28 西门子公司 对模糊测试中的测试用例进行优化的方法,装置和系统
CN104573523B (zh) * 2013-10-24 2018-06-12 深圳市腾讯计算机系统有限公司 文件漏洞挖掘的实现方法和装置
CN104168161A (zh) * 2014-08-18 2014-11-26 国家电网公司 一种基于节点克隆的数据构造变异算法
CN105721230B (zh) * 2014-11-30 2017-03-22 中国科学院沈阳自动化研究所 一种面向Modbus协议的模糊测试方法
CN109408355B (zh) * 2017-08-16 2022-02-22 迈普通信技术股份有限公司 测试用例获取方法及装置
CN109918676B (zh) * 2019-03-18 2023-06-27 广东小天才科技有限公司 一种检测意图正则表达式的方法及装置、终端设备
CN111143195B (zh) * 2019-12-03 2023-07-18 江苏大学 一种基于候选测试用例集迭代的自适应随机测试方法
CN113032253B (zh) * 2021-03-18 2024-04-19 广州虎牙科技有限公司 测试数据特征提取方法、测试方法及相关装置
CN113672503A (zh) * 2021-08-03 2021-11-19 中移(杭州)信息技术有限公司 测试用例的生成方法、系统、终端设备以及存储介质
CN115687158B (zh) * 2022-12-28 2023-03-10 北京邮电大学 一种协议软件的测试方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101231614A (zh) * 2008-02-02 2008-07-30 南京大学 一种基于执行轨迹块相似度的软件缺陷定位方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101231614A (zh) * 2008-02-02 2008-07-30 南京大学 一种基于执行轨迹块相似度的软件缺陷定位方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JP特开平9-97259A 1997.04.08
万松松等.最小测试用例集生成方法改进及应用.《计算机技术与发展》.2008,第18卷(第10期),第181-183页. *

Also Published As

Publication number Publication date
CN101859273A (zh) 2010-10-13

Similar Documents

Publication Publication Date Title
CN101859273B (zh) 一种产生测试用例的方法及装置
Holzmann The model checker SPIN
Nordström On the interplay between proof complexity and SAT solving
CN103036730B (zh) 一种对协议实现进行安全测试的方法及装置
CN102402481B (zh) 异步程序代码的模糊测试
Arnold et al. Stack trace analysis for large scale debugging
CN101859274B (zh) 一种进行模糊测试的方法及系统
Metodi et al. Compiling finite domain constraints to SAT with BEE
Bulychev et al. Rewrite-based statistical model checking of WMTL
CN102799529B (zh) 一种动态的二进制代码测试用例生成方法
CN102624574B (zh) 一种对协议实现进行安全测试的方法及装置
KR20190121373A (ko) 시스템 아키텍처를 표현하는 가중 속성 그래프 데이터 모델
CN108733404A (zh) 一种针对fpga固件的精准逆向工程方法
CN102385551B (zh) 一种筛选测试用例的方法、装置及系统
Yamashita et al. Predictability of network robustness from spectral measures
Luccio et al. Network decontamination in presence of local immunity
Hains et al. Hyperplane initialized local search for MAXSAT
Rintanen Compact representation of sets of binary constraints
Mears et al. Proving symmetries by model transformation
CN109446079A (zh) 一种基于ast突变的浏览器模糊测试方法
Xu et al. Logicalization of MPI communication traces
KR20160138893A (ko) 압축된 검증 테스트 셋을 획득하는 장치 및 그것의 동작 방법
Mariën et al. Satisfiability checking for PC (ID)
Xu et al. Logicalization of communication traces from parallel execution
Moraes et al. Affinity analysis for context-free grammars

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant