掌桥专利:专业的专利平台
掌桥专利
首页

一种用于灰盒模糊测试的测试驱动自动生成方法及装置

文献发布时间:2024-04-18 20:00:50


一种用于灰盒模糊测试的测试驱动自动生成方法及装置

技术领域

本申请属于软件测试技术领域,尤其涉及一种用于灰盒模糊测试的测试驱动自动生成方法及装置。

背景技术

软件(包括应用程序、协议、操作系统等)安全性可以基于软件的安全性测试进行评定,软件的安全性测试是在软件的被测对象中的一种探测。软件的被测对象包括软件的所有输入及输入组合。根据测试方式的不同,软件的被测对象的探测包括自动化测试、手工渗透测试和模糊测试。完全自动化测试是对每一个被测对象的穷举测试,手工渗透测试是用户选取漏洞相关的被测对象进行测试。模糊测试是一种介于自动化测试和手工渗透测试之间的安全性测试,模糊测试可以将测试数据(无效数据、格式错误数据或随机数据)注入软件的程序中,在程序运行的同时监控测试数据可能导致的崩溃或异常情况,从而对软件的安全性进行有效测试。

根据对软件的程序分析的程度,模糊测试包括黑盒、白盒和灰盒等三类模糊测试方法,相比黑盒模糊测试和白盒模糊测试,灰盒模糊测试具有更高的效率和更好的实用性。其中,灰盒模糊测试可以根据被测对象的测试入口的类型,向被测对象的测试入口注入测试数据。因为测试数据是基于被测对象的测试入口确定,缺少对被测对象的内部组成的了解,出现测试数据造成软件的程序无法运行的情况,从而无法对程序进行深层次探索,降低了模糊测试的覆盖率和测试效率。

发明内容

有鉴于此,本申请的目的在于提供一种用于灰盒模糊测试的测试驱动自动生成方法及装置,用于提高模糊测试的覆盖率和测试效率。

第一方面,本申请提供一种用于灰盒模糊测试的测试驱动自动生成方法,所述方法包括:

解析待测软件的程序中的所有数据对象,以从所述所有数据对象中获取被测对象和所述被测对象的使用规范;

解析所述被测对象中的每个参数变量,以确定组成所述参数变量的基本变量,所述基本变量是所述待测软件接收测试的最小对象;

根据所述被测对象的使用规范,至少对所述被测对象中的基本变量进行可变异数据接口的替换,以使所述被测对象包括所述可变异数据接口,所述可变异数据接口用于在对所述待测软件进行模糊测试时注入测试数据;

根据被测对象之间存在相同类型的变量,对存在相同类型的变量的被测对象进行组合,以得到所述待测软件的测试驱动。

可选的,所述解析待测软件的程序中的所有数据对象,以从所述所有数据对象中获取被测对象和所述被测对象的使用规范,包括:

解析所述待测软件的程序中用于存储数据对象的文件,以获取到预设类型文件;

根据所述数据对象的语法特征,从所述预设类型文件中获取宏变量和函数,所述宏变量和所述函数分别为所述被测对象,所述函数包括函数声明和函数定义中的至少一种;

从所述预设类型文件中获取所述宏变量的使用规范和所述函数的使用规范。

可选的,所述解析所述被测对象中的每个参数变量,以确定组成所述参数变量的基本变量,包括:

从所述待测软件的程序中获取所述被测对象所在行数,利用所述被测对象所在行数,从所述待测软件的程序中截取出所述被测对象;

根据所述被测对象的参数开始位置、参数结束位置、所述参数开始位置和所述参数结束位置之间的分隔符,获取所述被测对象中的所有参数变量;

若所述参数变量的类型为基本类型,确定所述参数变量为基本变量;

若所述参数变量的类型为非基本类型,获取组成所述参数变量的每个成员变量的类型;

若所述成员变量的类型为基本类型,确定所述成员变量为基本变量,若所述成员变量的类型为非基本类型,根据组成所述成员变量的每个成员变量的类型对所述成员变量进行解析,直至每个成员变量为基本变量。

可选的,所述根据所述被测对象的使用规范,至少对所述被测对象中的基本变量进行可变异数据接口的替换,以得到被测对象,包括:

如果所述被测对象为函数,从所述函数的调用使用规范中确定与所述函数的调用关系相匹配的可变异调用关系,利用所述可变异调用关系替换所述函数的调用关系,以及从所述函数的参数使用规范中确定与所述函数中的基本变量的类型相同的可变异变量接口,利用所述可变异变量接口替换所述基本变量,所述函数的使用规范包括所述调用使用规范和所述参数使用规范,所述函数的可变异数据接口包括所述可变异调用关系和所述可变异变量接口;

如果所述被测对象为宏变量,从所述宏变量的使用规范中确定与所述宏变量中基本变量的类型相同的可变异变量接口,利用所述可变异变量接口替换所述基本变量,所述宏变量的可变异数据接口包括所述可变异变量接口。

可选的,所述根据被测对象之间存在相同类型的变量,对存在相同类型的变量的被测对象进行组合,以得到所述待测软件的测试驱动,包括:

如果第一函数的返回值的类型与第二函数的输入参数的类型相同,则将所述第一函数的返回值作为所述第二函数的输入参数的输入,所述第一函数和所述第二函数是对所述待测软件中任意两个作为被测对象的函数进行可变异数据接口替换后得到的函数;

如果所述宏变量的成员变量的类型与函数的输入参数的类型相同,则将所述宏变量中的成员变量作为所述函数的输入参数。

可选的,所述方法还包括:

将所述待测软件的测试驱动编译成可执行文件;

在运行所述可执行文件过程中,将所述被测对象中的每个可变异数据接口作为模糊测试的入口点,在每个可变异数据接口上注入测试数据,以完成对所述待测软件的模糊测试。

第二方面,本申请提供一种用于灰盒模糊测试的测试驱动自动生成装置,所述装置包括:

第一解析单元,用于解析待测软件的程序中的所有数据对象,以从所述所有数据对象中获取被测对象和所述被测对象的使用规范;

第二解析单元,用于解析所述被测对象中的每个参数变量,以确定组成所述参数变量的基本变量,所述基本变量是所述待测软件接收测试的最小对象;

替换单元,用于根据所述被测对象的使用规范,至少对所述被测对象中的基本变量进行可变异数据接口的替换,以使所述被测对象包括所述可变异数据接口,所述可变异数据接口用于在对所述待测软件进行模糊测试时注入测试数据;

测试驱动生成单元,用于根据被测对象之间存在相同类型的变量,对存在相同类型的变量的被测对象进行组合,以得到所述待测软件的测试驱动。

可选的,所述替换单元,用于如果所述被测对象为函数,从所述函数的调用使用规范中确定与所述函数的调用关系相匹配的可变异调用关系,利用所述可变异调用关系替换所述函数的调用关系,以及从所述函数的参数使用规范中确定与所述函数中的基本变量的类型相同的可变异变量接口,利用所述可变异变量接口替换所述基本变量,所述函数的使用规范包括所述调用使用规范和所述参数使用规范,所述函数的可变异数据接口包括所述可变异调用关系和所述可变异变量接口;

如果所述被测对象为宏变量,从所述宏变量的使用规范中确定与所述宏变量中基本变量的类型相同的可变异变量接口,利用所述可变异变量接口替换所述基本变量,所述宏变量的可变异数据接口包括所述可变异变量接口。

第三方面,本申请提供一种电子设备,所述电子设备包括处理器以及存储器;所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,当所述处理器执行所述计算机指令时,使得所述处理器执行上述用于灰盒模糊测试的测试驱动自动生成方法。

第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序被执行时实现上述用于灰盒模糊测试的测试驱动自动生成方法。

与现有技术相比,本申请提供的上述技术方案具有如下优点:

在从待测软件中获取被测对象和被测对象的使用规范后,解析被测对象中的每个参数变量,以确定组成参数变量的基本变量,根据被测对象的使用规范,至少对被测对象中的基本变量进行可变异数据接口的替换,以使被测对象包括可变异数据接口,根据被测对象之间存在相同的变量,对存在相同的变量的被测对象进行组合,以得到待测软件的测试驱动。其中,基本变量是待测软件使用的编程语言中的最小对象,通过对参数变量的解析,实现对待测软件的程序的深层次探索(如对参数变量的组成的深层次探索),这样在进行模糊测试时可以在可变异数据接口上注入测试数据以提高程序正常运行的可能性,从而提高模糊测试的覆盖率和测试效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种用于灰盒模糊测试的测试驱动自动生成方法的流程图;

图2是本申请实施例提供的另一种用于灰盒模糊测试的测试驱动自动生成方法的流程图;

图3是本申请实施例提供的生成测试驱动和运行测试驱动的示意图;

图4是本申请实施例提供的一种用于灰盒模糊测试的测试驱动自动生成装置的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参见图1,其示出了本申请实施例提供的一种用于灰盒模糊测试的测试驱动自动生成方法,可以包括以下步骤:

S101、解析待测软件的程序中的所有数据对象,以从所有数据对象中获取被测对象和被测对象的使用规范。

可以理解的是:待测软件的程序可以是由编程语言编写的一款软件的源代码,编程语言可以是C/C++、Java、Python中的任意一种编程语言。数据对象是待测软件的程序中的组成,如待测软件的程序包括宏变量、函数和注释等数据对象。

其中,宏变量包括一到多个成员变量,函数可以包括函数声明和函数定义中的至少一种。不同的数据对象有不同的语法特征,例如宏变量可以是以#define定义的一个成员变量或由多成员变量组成的表达式等,函数声明可以声明函数名、函数返回值,但函数声明通常不包括函数体等;函数定义可以包括函数体的函数声明,由此,本实施例可以根据数据对象的语法特征,对待测软件的程序中的所有数据对象进行解析。一种可选过程如下:

解析待测软件的程序中用于存储数据对象的文件,以获取到预设类型文件;根据数据对象的语法特征,从预设类型文件中获取宏变量和函数,宏变量和函数分别为被测对象;从预设类型文件中获取宏变量的使用规范和函数的使用规范。

预设类型文件是用于存储宏变量和函数的文件,宏变量和函数为本实施例需要获取的被测对象。不同编程语言下预设类型文件不同,例如编程语言为C/C++时,预设类型文件为头文件;编程语言为Java语言时,预设类型文件可以是Class文件,编程语言为Python时,预设类型文件为py文件。在获取到预设类型文件后,分别根据宏变量的语法特征和函数的语法特征,从预设类型文件中获取宏变量和函数。预设类型文件中不单单存储了宏变量和函数,还存储了宏变量的使用规范和函数的使用规范,在获取宏变量和函数后本实施例还需要获取宏变量的使用规范和函数的使用规范。

宏变量的使用规范用于对宏变量进行变形,函数的使用规范用于对函数的调用(如函数体)和函数的输入参数进行变形。变形后的宏变量和函数可以写入到待测软件的程序中,以替换掉变形前的宏变量和函数,并且利用使用规范变形后的宏变量和函数是可以保证待测软件的程序的正常运行的。在一些示例中,变形可以是进行可变异数据接口的替换,具体过程请参见下述步骤S103中的相关说明,此处不再赘述。

S102、解析被测对象中的每个参数变量,以确定组成参数变量的基本变量。基本变量是待测软件接收测试的最小对象,基本变量是相对非基本变量而言的,基本变量和非基本变量是从变量的类型进行划分,且基本变量在编程语言中不可被拆分,非基本变量可以被拆分成多个基本变量。例如基本变量可以是类型为bool、int、char、string、short、long、float、double等的变量,非基本变量可以是类型为数组、结构体和指针等的变量。

参数变量是被测对象的组成,被测对象中的参数变量可以是基本变量、也可以是非基本变量、或者是基本变量和非基本变量的组合等。在本实施例中,针对被测对象中的每个参数变量,对参数变量进行解析以确定该参数变量包括的所有基本变量,通过基本变量来了解参数变量的内部组成。例如被测对象是宏变量时,确定组成宏变量的基本变量;被测对象是函数时,确定组成函数的输入参数的基本变量和/或组成函数的输出参数(也叫返回值)的基本变量。

而基本变量和非基本变量在编程语言中的定义(语法特征)不同,本实施例可以根据基本变量和非基本变量的定义,确定参数变量的类型。例如根据基本变量和非基本变量的定义,确定参数变量仅包括基本变量,则参数变量的类型为基本类型,通过一次解析就可以获取到组成该参数变量的所有基本变量;如果确定参数变量包括非基本变量,则参数变量的类型为非基本变量,需要经过多次解析(递归解析)该参数变量中成员变量的类型,直至解析出所有基本变量,成员变量是参数变量中的一个组成,成员变量和参数变量形成一至多层的依赖关系。

在本实施例中,解析被测对象中的每个参数变量包括从被测对象中提取到参数变量、识别出组成参数变量的所有基本变量,其可选过程如下:

a)从待测软件的程序中获取被测对象所在行数,利用被测对象所在行数,从待测软件的程序中截取出被测对象。

b)根据被测对象的参数开始位置、参数结束位置、参数开始位置和参数结束位置之间的分隔符,获取被测对象中的所有参数变量。其中,参数开始位置可以是参数变量的起始点,参数结束位置可以是参数变量的终点,分隔符可以是在两个相邻的参数变量之间用于分开两个相邻的参数变量的符号。例如,参数开始位置可以是左括号,参数结束位置可以是右括号,分隔符可以是逗号,左括号和右括号形成一个括号,该括号中逗号数量决定了该括号中参数变量的数量,具体的,一个括号中逗号数量为N,则该括号包括(N+1)个参数变量,N为大于等于0的正整数。以函数声明uint8_t*hex_string_to_bin(const char*hex_string);,该函数声明需要一个参数变量hex_string_to_bin,且该参数变量的类型是char*(字符指针),是一个非基本变量。

c)若参数变量的类型为基本类型,确定参数变量为基本变量。

d)若参数变量的类型为非基本类型,获取组成参数变量的每个成员变量的类型。

e)若成员变量的类型为基本类型,确定成员变量为基本变量,若成员变量的类型为非基本类型,根据组成成员变量的每个成员变量的类型对成员变量进行解析,直至每个成员变量为基本变量,以尽可能地解析出参数变量中的所有基本变量,从而在替换过程中,尽可能多地对能解析到的基本变量进行替换。

在本实施例中,若参数变量的类型为基本类型,说明该参数变量仅包括基本变量,对该参数变量进行一次解析即可获取到该参数变量包括的所有基本变量,在一次解析完成后记录该参数变量为已完成解析的参数变量,结束对该参数变量的解析。

若参数变量的类型为非基本类型,说明该参数变量至少包括非基本变量,一次解析可以确定该参数变量包括非基本变量,但是无法获取到该参数变量中非基本变量包括的所有成员变量,因此在一次解析完成后将该参数变量记录为未完成解析的参数变量。

对于任一未完成解析的参数变量,确定该参数变量中未完成解析的成员变量数量(即该参数变量中非基本变量的数量)。根据基本变量和非基本变量的定义,逐一解析该参数变量中未完成解析的成员变量的类型,若确定成员变量的类型为基本类型,将基本类型的成员变量记录为已完成解析的成员变量,若确定成员变量的类型为非基本类型,将非基本类型的成员变量记录为未完成解析的成员变量;针对未完成解析的成员变量,继续根据基本变量和非基本变量的定义进行解析,直至解析到所有成员变量都是基本变量为止,以通过解析来了解被测对象中参数变量的组成。

在这里需要说明的一点是:若被测对象的参数变量的解析被意外中止,则该被测对象不再进行可变异数据接口的替换,在生成待测软件的测试驱动过程中也不再使用该被测对象,以防止测试驱动出错。

S103、根据被测对象的使用规范,至少对被测对象中的基本变量进行可变异数据接口的替换,以使被测对象包括可变异数据接口,可变异数据接口用于在对待测软件进行模糊测试时注入测试数据。

在本实施例中,被测对象的使用规范的作用是为了对被测对象进行变形,并能够保证待测软件的程序中含有变形后的被测对象是可以正常运行的。变形可以是进行可变异数据接口的替换,被测对象的使用规范中可以记录被测对象可用的可变异数据接口,本实施例可以从使用规范中查找被测对象可用的可变异数据接口,利用该可变异数据接口替换即可。

例如在对被测对象中的基本变量进行可变异数据接口替换时,从使用规范中查找基本变量可用的可变异数据接口,利用可用的可变异数据接口替换基本变量以形成可变异赋值关系。其中,可用的可变异数据接口是可被操作系统有效识别且使得待测软件的程序的正常运行的数据接口,并且可变异数据接口是为了在进行模糊测试时作为入口点使用,以在该可变异数据接口中注入测试数据。

因为作为被测对象的函数和宏变量的组成和运行方式不同,如函数包括参数变量的赋值关系和调用关系,宏变量仅包括成员变量的赋值关系,所以函数和宏变量进行可变异数据接口的替换过程不同,下面分别针对函数和宏变量进行说明:

如果被测对象为函数,从函数的调用使用规范中确定与函数的调用关系相匹配的可变异调用关系,利用可变异调用关系替换函数的调用关系,以及从函数的参数使用规范中确定与函数中的基本变量的类型相同的可变异变量接口,利用可变异变量接口替换基本变量,以形成可变异赋值关系,函数的使用规范包括调用使用规范和参数使用规范,函数的可变异数据接口包括可变异调用关系和可变异变量接口。

如果被测对象为宏变量,从宏变量的使用规范中确定与宏变量中基本变量的类型相同的可变异变量接口,利用可变异变量接口替换基本变量,以形成可变异赋值关系,宏变量的可变异数据接口包括可变异变量接口。

例如,一个函数是一条调用语句,该调用语句表示为获取任意字符串值,char*hex_string=”just demonstrate one ascii string”,利用该调用语句相匹配的可变异调用关系替换后,得到的调用语句为:

char*hex_string=fuzzstring();

uint8_t*result_bin=hex_string_to_bin(hex_string)。

一个函数声明为int send_data_request(Networking_Core*net,const Onion_Path*path,IP_Port dest,const uint8_t*public_key,const uint8_t*encrypt_public_key,const uint8_t*nonce,const uint8_t*data,uint16_t length),该函数声明中的第三个参数变量IP_Port是一个结构体变量,定义为:

则该参数变量及其成员变量的赋值语句形如IP ip_var=“127.0.0.1”;port_var=fuzzuint();IP_Port ip_port;ip_port->ip=ip_var;ip_port->port=port_var;。

S104、根据被测对象之间存在相同类型的变量,对存在相同类型的变量的被测对象进行组合,以得到待测软件的测试驱动。

对于存在相同类型的变量的被测对象可以随机组合,以形成多样化的测试驱动,从而可以对待测软件进行多次测试挖掘,以测试不同组合下待测软件是否存在漏洞等安全性问题。

在对存在相同类型的变量的被测对象进行随机组合时,可以参照如下规则进行组合,通过被测对象之间相同类型的调用依赖和关联关系完成随机组合,以保证随机组合后是可正常运行的:

存在相同类型的变量的被测对象是进行可变异数据接口替换后得到的任意两个函数,任意两个函数记为第一函数和第二函数,如果第一函数的返回值的类型与第二函数的输入参数的类型相同,则将第一函数的返回值作为第二函数的输入参数的输入。

存在相同类型的变量的被测对象是进行可变异数据接口替换得到的宏变量和函数,如果宏变量的参数变量的类型与函数的输入参数的类型相同,则将宏变量的参数变量作为函数的输入参数。

从上述技术方案可知,在从待测软件中获取被测对象和被测对象的使用规范后,解析被测对象中的每个参数变量,以确定组成参数变量的基本变量,根据被测对象的使用规范,至少对被测对象中的基本变量进行可变异数据接口的替换,以使被测对象包括可变异数据接口,根据被测对象之间存在相同的变量,对存在相同的变量的被测对象进行组合,以得到待测软件的测试驱动。其中,基本变量是待测软件使用的编程语言中的最小对象,通过对参数变量的解析,实现对待测软件的程序的深层次探索(如对参数变量的组成的深层次探索),这样在进行模糊测试时可以在可变异数据接口上注入测试数据以提高程序正常运行的可能性,从而提高模糊测试的覆盖率和测试效率。

并且在得到测试驱动过程中,通过存在相同类型的变量的被测对象的组合拟合了程序使用时的语义,形成有效的测试驱动,从而缓解了不定长度变异导致的盲目性,最终提高模糊测试的测试效率,其中不定长度变异导致的盲目性可以是不根据参数变量的类型、对被测对象盲目变异。

在生成待测软件的测试驱动后,可利用该待测软件的测试驱动对待测软件的安全性进行评估,其过程如图2所示,图2示出了本申请实施例提供的另一种用于灰盒模糊测试的测试驱动自动生成方法的可选流程,在图1基础上还可以包括:

S105、将待测软件的测试驱动编译成可执行文件。在本实施例中,使用编译器对待测软件的测试驱动进行编译,以生成可执行文件。

S106、在运行可执行文件过程中,将被测对象中的每个可变异数据接口作为模糊测试的入口点,在每个可变异数据接口上注入测试数据,以完成对待测软件的模糊测试。因为在对被测对象进行可变异数据接口替换时,可变异数据接口可深入替换组成参数变量的基本变量,实现深层次探索,所以在在模糊测试过程中可利用可变异数据接口进行深层次感知,以提高模糊测试的覆盖率。

上述生成测试驱动和利用测试驱动对软件的安全性进行模糊测试的过程可应用到不同编程语言编写的待测软件的程序,如图3所示可以应用到C/C++编程语言编写的待测软件的程序中。通过对C/C++编程语言编写的待测软件的程序进行头文件解析,得到位于头文件中的宏变量和函数;对宏变量和函数进行参数变量的递归解析,得到组成参数变量的基本变量,然后利用宏变量的使用规范和函数的使用规范、借助上述获得的可变异赋值关系和可变异调用关系,对宏变量和函数分别进行可变异数据接口的替换,得到替换接口的赋值语句和调用语句;对赋值语句和调用语句进行随机组合,得到待测软件的测试驱动,然后生成测试驱动的可执行文件,运行可执行文件进行模糊测试,以得到软件的安全性的评估结果。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

与上述方法实施例相对应,本申请实施例还提供一种用于灰盒模糊测试的测试驱动自动生成装置,其可选结构如图4所示,可以包括:第一解析单元10、第二解析单元20、替换单元30和测试驱动生成单元40。

第一解析单元10,用于解析待测软件的程序中的所有数据对象,以从所有数据对象中获取被测对象和被测对象的使用规范。如第一解析单元10解析待测软件的程序中用于存储数据对象的文件,以获取到预设类型文件;根据数据对象的语法特征,从预设类型文件中获取宏变量和函数,宏变量和函数分别为被测对象,函数包括函数声明和函数定义中的至少一种;从预设类型文件中获取宏变量的使用规范和函数的使用规范。

第二解析单元20,用于解析被测对象中的每个参数变量,以确定组成参数变量的基本变量,基本变量是待测软件接收测试的最小对象。

在一些示例中,第二解析单元20从待测软件的程序中获取被测对象所在行数,利用被测对象所在行数,从待测软件的程序中截取出被测对象;根据被测对象的参数开始位置、参数结束位置、参数开始位置和参数结束位置之间的分隔符,获取被测对象中的所有参数变量;若参数变量的类型为基本类型,确定参数变量为基本变量;若参数变量的类型为非基本类型,获取组成参数变量的每个成员变量的类型;若成员变量的类型为基本类型,确定成员变量为基本变量,若成员变量的类型为非基本类型,根据组成成员变量的每个成员变量的类型对成员变量进行解析,直至每个成员变量为基本变量。

替换单元30,用于根据被测对象的使用规范,至少对被测对象中的基本变量进行可变异数据接口的替换,以使被测对象包括可变异数据接口,可变异数据接口用于在对待测软件进行模糊测试时注入测试数据。

在一些示例中,替换单元30,用于如果被测对象为函数,从函数的调用使用规范中确定与函数的调用关系相匹配的可变异调用关系,利用可变异调用关系替换函数的调用关系,以及从函数的参数使用规范中确定与函数中的基本变量的类型相同的可变异变量接口,利用可变异变量接口替换基本变量,函数的使用规范包括调用使用规范和参数使用规范,函数的可变异数据接口包括可变异调用关系和可变异变量接口;如果被测对象为宏变量,从宏变量的使用规范中确定与宏变量中基本变量的类型相同的可变异变量接口,利用可变异变量接口替换基本变量,宏变量的可变异数据接口包括可变异变量接口。

测试驱动生成单元40,用于根据被测对象之间存在相同类型的变量,对存在相同类型的变量的被测对象进行组合,以得到待测软件的测试驱动。例如如果第一函数的返回值的类型与第二函数的输入参数的类型相同,则将第一函数的返回值作为第二函数的输入参数的输入,第一函数和第二函数是对待测软件中任意两个作为被测对象的函数进行可变异数据接口替换后得到的函数;如果宏变量的成员变量的类型与函数的输入参数的类型相同,则将宏变量中的成员变量作为函数的输入参数。

此外,本申请实施例提供的用于灰盒模糊测试的测试驱动自动生成装置还可以包括测试单元,用于将待测软件的测试驱动编译成可执行文件;在运行可执行文件过程中,将被测对象中的每个可变异数据接口作为模糊测试的入口点,在每个可变异数据接口上注入测试数据,以完成对待测软件的模糊测试。

本申请实施例还提供一种电子设备,电子设备包括处理器以及存储器;存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当处理器执行计算机指令时,使得处理器执行上述用于灰盒模糊测试的测试驱动自动生成方法。

本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质用于存储计算机程序,计算机程序被执行时实现上述用于灰盒模糊测试的测试驱动自动生成方法。

需要说明的是,本说明书中的各个实施例可以采用递进的方式描述、本说明书中各实施例中记载的特征可以相互替换或者组合,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 一种具有润肠通便作用的益生菌组合物及其制备方法和应用
  • 具有润肠通便功能的组合物及其制备方法
  • 一种具有调节脂代谢功能的益生菌JT6骆驼乳粉组合物
  • 一种具有眼部护理功能的组合物及其制备方法和应用
  • 一种具有通便功能的豆腐柴组合物
  • 一种具有通便功能的豆腐柴提取物
技术分类

06120116542678