测试样本的生成方法及装置与流程

文档序号:11233990阅读:1461来源:国知局
测试样本的生成方法及装置与流程

本发明涉及软件安全领域,具体而言,涉及一种测试样本的生成方法及装置。



背景技术:

在软件测试(fuzz测试)中,评价测试效果的一个重要指标是代码覆盖率,也就是测试样本集合可达的程序执行路径占程序代码所有路径的百分比。

相关技术中的fuzz工具大体上可归为两类,盲测(blindfuzz)和智能测试(smartfuzz)。blindfuzz通过随机修改文件中的数据生成测试样本,smartfuzz通过解析文件格式生成文件模板,根据模板中文件字段的类型进行变异,生成测试样本。

这两类fuzz本质上来讲都是以穷举的方式发现被测试程序的执行路径,在测试的初期可以发现较多的路径,但随着fuzz的进行,样本文件不断增大,随机变异的效果越来越差,越来越难以发现新的执行路径。

相关技术中的fuzz工具使用的样本生成策略,还停留在盲目变异的层次,一次变异产生的样本对程序执行流程的影响是未知的。尽管引入了改良的算法对变异后的样本进行了筛选,在发现新的程序执行路径方面提高有限,这在fuzz的后期样本文件变化很大时尤为明显,代码覆盖率仍然不高。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种测试样本的生成方法及装置,以至少解决相关技术中生成的测试样本存在代码覆盖率低的技术问题。

根据本发明实施例的一个方面,提供了一种测试样本的生成方法,包括:获取指定样本中关键数据的信息;其中,该关键数据为所述指定样本中,污染被测试程序的分支指令的数据;根据关键数据的信息对指定样本中关键数据进行变异,得到变异后的指定样本;将变异后的指定样本确定为测试样本。

根据本发明实施例的另一方面,还提供了一种测试样本的生成装置,包括:获取 模块,用于获取指定样本中关键数据的信息;其中,该关键数据为指定样本中,污染被测试程序的分支指令的数据;变异模块,用于根据关键数据的信息对指定样本中关键数据进行变异,得到变异后的指定样本;确定模块,用于将变异后的指定样本确定为测试样本。

在本发明实施例中,采用根据获取的指定样本中的关键数据的信息,对该关键数据进行变异,得到变异后的指定样本,将该变异后的指定样本确定为测试样本的方式,即通过对指定样本中的关键数据的变异,生成测试样本,实现了对指定样本的精确变异,减少了无意义的样本的生成,进而提高了代码覆盖率,进而解决了相关技术中生成的测试样本存在代码覆盖率低的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本申请实施例的一种测试样本的生成方法的计算机终端的硬件结构框图;

图2是根据本申请实施例1的测试样本的生成方法的流程图;

图3是根据本申请可选实施例的测试样本生成的方法的过程一的流程图;

图4是根据本申请可选实施例的测试样本生成的方法的过程二的流程图;

图5是根据本申请实施例的测试样本的生成装置的结构框图;

图6是根据本申请实施例的一种计算机终端的结构框图。

具体实施方式

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

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在 这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

fuzz测试是挖掘软件安全漏洞的重要技术,其中测试样本的生成直接影响了fuzz的效果,当前fuzz样本的生成技术存在代码覆盖率低的缺陷,如何生成更有效的测试样本,是当前的一个研究重点。

afl-fuzz是lcamtuf所开发的一款fuzz工具,引入了遗传算法的概念,对内置fuzz策略生成的测试样本进行评估,优化测试样本生成过程。afl-fuzz需要对被测试程序重新编译,在程序的分支指令处进行插桩,插桩代码用来记录程序单次执行时的内部执行路径。对于闭源软件,afl-fuzz使用qemu模拟执行被测试程序,获取程序的内部执行路径。结合程序的执行路径信息,afl-fuzz使用遗传算法优化测试样本的生成过程,基本过程如下:

但上述afl-fuzz使用遗传算法优化测试样本是其仍然存在代码覆盖率不高的问题。

在详细说明本申请实施例之前,先介绍一下本申请实施例中所涉及的技术术语:

1,fuzz测试:即模糊测试,是一种通过提供非预期的输入并监视异常结果来发现软件安全漏洞的方法。模糊测试的过程是通过自动的或半自动的方法,反复驱动目标软件运行并为其提供构造的输入数据,同时监控软件运行的异常结果。

2,fuzz样本:被测试程序读入并进行处理的文件。

3,变异:修改样本文件生成新的样本文件的过程。

4,代码覆盖率:被测试程序实际执行代码的数量与程序总的代码数量的比值。

5,afl-fuzz:lcamtuf开发的开源fuzz测试工具。

6,污染传播:对原始数据打上污染标记,确定数据在程序代码中流向的技术。

实施例1

根据本发明实施例,还提供了一种测试样本的生成方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

本申请实施例1所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种测试样本的生成方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的测试样本的生成方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的测试样本的生成方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

在上述运行环境下,本申请提供了如图2所示的测试样本的生成方法。图2是根据本申请实施例1的测试样本的生成方法的流程图。如图2所示,该方法包括:

步骤s202,获取指定样本中关键数据的信息;其中,该关键数据为所述指定样本中,污染被测试程序的分支指令的数据;

需要说明的是,关键数据污染被测试程序的分支指令可以是表现为直接污染和间接污染,比如,该分支指令为ifelse指令,在被测试程序执行到分支指令之前,该关键数据并未做相应运算(比如加减乘除等),而是直接传播至该分支指令,此时可以称之为直接污染;而在被测试程序执行到分支指令之前,该关键数据已经与其他的数据做了相应的运算(比如加减乘除等)得到了运算后的数据,该运算后的数据传播至该分支指令,此时可以称之为间接污染。

需要说明的是,上述关键数据的信息可以用于指示上述关键数据在指定样本中的特征信息,该特征信息可以是上述关键数据的长度和上述关键数据在指定样本中的位置,但并不限于此。通过该关键数据的信息可以在指定样本中找到与该信息匹配的关键数据。

在本申请的一个实施例中,上述步骤s202可以表现为将指定样本标记为污染源;将污染源作为被测试程序的输入,执行被测试程序;获取污染源中污染被测试程序的分支指令的数据在指定样本中的位置和长度,得到关键数据的信息。通过污染传播技术来确定指定样本中哪些数据对被测试程序的执行流程产生影响,即通过污染传播技术来确定指定样本中哪些数据是上述关键数据,即污染源中污染被测试程序的分支指令的数据为关键数据。

进一步地,获取污染源中污染被测试程序的分支指令的数据在指定样本中的位置和长度可以包括:在执行被测试程序的过程中,当执行到分支指令时,检测分支指令是否被污染源污染;如果检测到分支指令被污染源污染,记录污染源中污染分支指令的数据在指定样本中的位置和长度。

需要说明的是,此处分支指令是否被污染源污染的表现形式,与关键数据是否污染被测试程序的表现形式类似,此处不再赘述。

需要说明的是,在记录污染源中污染分支指令的数据在指定样本中的位置和长度之后,还可以继续执行上述被测试程序,并在继续执行上述被测试程序的过程中执行以下处理过程,直至被测试程序执行结束:检测被测试程序中的其他分支指令是否被污染源污染;记录污染源中污染其他分支指令的数据在指定样本中的位置和长度。即可以通过将被测试程序执行结束,记录污染源(指定样本)中所有的关键数据的信息, 以能够获取指定样本中所有的关键数据,进而在后续生成测试样本时,能够生成多个不同的测试样本。

步骤s204,根据关键数据的信息对指定样本中关键数据进行变异,得到变异后的指定样本。

需要说明的是,根据信息对指定样本中关键数据进行变异可以表现为通过该关键数据的信息在指定样本中找到关键数据,在对该关键数据进行变异,但并不限于此。

需要说明的是,此处的变异是指修改关键数据生成新的关键数据,而在指定样本中用生成的新的关键数据代替该变异前的关键数据,进而得到变异后的指定样本。即步骤s204通过只对指定样本中的关键数据进行变异,进而减少了变异的范围,同时减少了无意义的样本的生成。

步骤s206,将变异后的指定样本确定为测试样本。

需要说明的是,上述测试样本可以是能够触发被测试程序出现新的代码执行路径的变异后的指定样本,即通过将变异后的指定样本作为被测试程序的输入,在被测试程序的执行过程中如果检测到新的代码执行路径就认为该变异后的指定样本可以作为该测试样本。具体的,上述步骤s206可以表现为:以变异后的指定样本作为被测试程序的输入,执行被测试程序;在执行被测试程序的过程中,如果检测到新的代码执行路径,则将变异后的指定样本确定为测试样本;其中,新的代码执行路径为指定样本作为被测试程序的输入时,与被测试程序执行的代码执行路径不同的执行路径。

需要说明的是,由于可以通过对指定样本中的关键数据进行变异,变异后的指定样本作为被测试程序的输入,在被测试程序的执行过程中如果发现新的代码执行路径,则该变异后的指定样本可以作为测试样本,因而从该角度上出发,指定样本中的关键数据能够影响被测试程序的代码执行路径,也就能够影响被测试程序的执行流程,进而该关键数据也可以描述为指定样本中对被测试程序的执行流程产生影响的数据。

通过上述步骤,采用根据获取的指定样本中的关键数据的信息,对该关键数据进行变异,得到变异后的指定样本,将该变异后的指定样本确定为测试样本的方式,即通过对指定样本中的关键数据的变异,生成测试样本,实现了对指定样本的精确变异,减少了无意义的样本的生成,进而提高了代码覆盖率,进而解决了相关技术中生成的测试样本存在代码覆盖率低的技术问题。

为了更好的理解本申请,以下结合可选的实施例对本申请实施例作进一步解释。

本申请提供了一种测试样本生成的方法的可选实施例,主要包括两个过程:过程 一:利用污染传播技术确定原始样本(即上述实施例中的指定样本)中哪些数据对被测试程序的执行流程产生影响;过程二:利用过程一确定的原始样本中对被测试程序的执行流程产生影响的数据,对原始样本进行精确变异,生成可触发被测试程序的新的代码执行路径的样本,并加入样本池。

对于过程一,图3是根据本申请可选实施例的测试样本生成的方法的过程一的流程图,如图3所示,该过程一具体包括以下步骤:

步骤s302,挑选样本,将文件标记为污染源,开启污染传播记录:开启指令级别的污染传播记录监控程序,加载被测试程序;将样本文件内容标记为污染源(相当于上述实施例中的将指定样本标记为污染源);需要说明的是,该样本文件内容为原始样本文件的内容;

步骤s304,执行被测试程序;

步骤s306,对当前指令进行检查,如果是分支指令,执行步骤s308,否则执行步骤s312;

步骤s308,检查分支条件是否受到样本文件数据污染,如果是,执行步骤s310,否则执行步骤s312;

步骤s310,记录污染源在样本文件内容中的位置和长度,执行步骤s304;

步骤s312,判断被测试程序是否执行结束,如果是,执行步骤s314,否则,执行步骤s304;

步骤s314,保存样本中影响程序分支的信息。

需要说明的是,该过程一相当于上述实施例中的步骤s202。

对于过程二,图4是根据本申请可选实施例的测试样本生成的方法的过程二的流程图,如图4所示,该过程二具体包括以下步骤:

步骤s402,fuzz程序读入原始样本(相当于上述实施例中的指定样本);

步骤s404,根据过程一得到的信息(相当于上述实施例中的关键数据的信息,即过程一中的污染源在样本文件内容中的位置和长度)对样本的关键数据进行变异;

步骤s406,执行被测试程序,记录执行路径;

步骤s408,是否发现新的代码执行路径,在发现新的代码执行路径的情况下,执行步骤s410,否则执行步骤s404;

步骤s410,将本次变异生成的样本添加到样本池,执行步骤s404。

需要说明的是,上述步骤s402至步骤s404,相当于上述实施例中的步骤s204;步骤s406至步骤s410,相当于上述实施例中的步骤s206。

上述可选实施例利用污染传播技术确定原始样本的文件中影响程序分支的关键数据,针对关键数据进行精确变异,生成fuzz样本,可以更快地发现新的程序执行路径。即引入污染传播技术,通过污染传播追踪样本数据对程序执行流的影响,确定影响程序分支的文件数据,在生成新的测试样本时只对影响程序分支的数据进行变异。本方案的样本生成策略实现了精确变异,可减少无意义的样本生成,在短时间内达到很高的代码覆盖率。

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

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例2

根据本发明实施例,还提供了一种用于实施上述测试样本的生成方法的装置,图5是根据本申请实施例的测试样本的生成装置的结构框图,如图5所示,该装置包括:

获取模块52,用于获取指定样本中关键数据的信息;其中,该关键数据为指定样本中,污染被测试程序的分支指令的数据;

需要说明的是,关键数据污染被测试程序的分支指令可以是表现为直接污染和间接污染,比如,该分支指令为ifelse指令,在被测试程序执行到分支指令之前,该关键数据并未做相应运算(比如加减乘除等),而是直接传播至该分支指令,此时可以称之为直接污染;而在被测试程序执行到分支指令之前,该关键数据已经与其他的数据做了相应的运算(比如加减乘除等)得到了运算后的数据,该运算后的数据传播至 该分支指令,此时可以称之为间接污染。

需要说明的是,上述关键数据的信息可以用于指示上述关键数据在指定样本中的特征信息,该特征信息可以是上述关键数据的长度和上述关键数据在指定样本中的位置,但并不限于此。可以利用该关键数据的信息在指定样本中找到与该信息匹配的关键信息。

可选的,上述关键数据的信息的获取过程可以有一个独立的模块来实现,也可以有多个模块共同来实现,对于前者表现为:上述获取模块52还用于将指定样本标记为污染源;将该污染源作为被测试程序的输入,执行被测试程序;获取污染源中污染被测试程序的分支指令的数据在指定样本中的位置和长度,得到关键数据的信息。对于后者,可表现为:上述获取模块52可以包括标记单元,用于将指定样本标记为污染源;执行单元,用于将该污染源作为被测试程序的输入,执行被测试程序;获取单元,用于获取污染源中污染被测试程序的分支指令的数据在指定样本中的位置和长度,得到关键数据的信息。对于具体的实施例中,采用一个模块来完成还是采用多个模块(单元)来完成上述获得过程,可以根据具体情况进行选择,并不做限定。

在本申请的一个实施例中,上述获取模块52还用于在执行被测试程序的过程中,当执行到所述分支指令时,检测分支指令是否被污染源污染;如果检测到分支指令被污染源污染,记录污染源中污染分支指令的数据在指定样本中的位置和长度。此处也可以通过多个单元来完成检测,记录的过程,比如:检测单元,可以用于在执行被测试程序的过程中,当执行到所述分支指令时,检测分支指令是否被污染源污染,在检测到分支指令被污染源污染,通知记录单元来记录污染源中污染分支指令的数据在指定样本中的位置和长度,但并不限于此。

需要说明的是,此处分支指令是否被污染源污染的表现形式,与关键数据是否污染被测试程序的表现形式类似,此处不再赘述。

需要说明的是,上述获取模块54可以继续执行,直到被测试程序执行结束,具体可以表现为,上述获取模块54在记录污染源中污染分支指令的数据在指定样本中的位置和长度之后,还可以继续执行上述被测试程序,并在继续执行上述被测试程序的过程中执行以下处理过程,直至被测试程序执行结束:检测被测试程序中的其他分支指令是否被污染源污染;记录污染源中污染其他分支指令的数据在指定样本中的位置和长度。

变异模块54,与上述获取模块52连接,用于根据关键数据的信息对指定样本中关键数据进行变异,得到变异后的指定样本;

需要说明的是,上述变异模块54可以通过该关键数据的信息在指定样本中找到关键数据,在对该关键数据进行变异,但并不限于此。

需要说明的是,此处的变异是指修改关键数据生成新的关键数据,而上述变异模块54在指定样本中用生成的新的关键数据代替该变异前的关键数据,进而得到变异后的指定样本,即只对指定样本中的关键数据进行变异,进而减少了变异的范围,同时减少了无意义的样本的生成。

确定模块56,与上述变异模块54连接,用于将变异后的指定样本确定为测试样本。

需要说明的是,上述测试样本可以是能够触发被测试程序出现新的代码执行路径的变异后的指定样本,上述确定模块56还可以用于以变异后的指定样本作为被测试程序的输入,执行被测试程序;在执行被测试程序的过程中,如果检测到新的代码执行路径,则将变异后的指定样本确定为测试样本;其中,该新的代码执行路径为指定样本作为被测试程序的输入时,与被测试程序执行的代码执行路径不同的执行路径。

需要说明的是,由于可以通过对指定样本中的关键数据进行变异,变异后的指定样本作为被测试程序的输入,在被测试程序的执行过程中如果发现新的代码执行路径,则该变异后的指定样本可以作为测试样本,因而从该角度上出发,指定样本中的关键数据能够影响被测试程序的代码执行路径,也就能够影响被测试程序的执行流程,进而该关键数据也可以描述为指定样本中对被测试程序的执行流程产生影响的数据。

通过上述装置,上述变异模块54根据获取模块52获取的指定样本中的关键数据的信息,对该关键数据进行变异,得到变异后的指定样本,确定模块56将该变异后的指定样本确定为测试样本的方式,即上述装置通过对指定样本中的关键数据的变异,生成测试样本,实现了对指定样本的精确变异,减少了无意义的样本的生成,进而提高了代码覆盖率,进而解决了相关技术中生成的测试样本存在代码覆盖率低的技术问题。

需要说明的是,上述各个模块是可以通过软件或者硬件来实现的,对于后者,可以通过以下方式实现,当并不限于此:上述各个模块以任意组合的方式位于不同的处理器中,例如,上述各个模块均位于同一处理器中,或者上述各个模块分别位于不同的处理器中。

实施例3

本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。该计算机终端可以是实施例1中的终端。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。

可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。

在本实施例中,上述计算机终端可以执行测试样本的生成方法中以下步骤的程序代码:获取指定样本中关键数据的信息;其中,该关键数据为所述指定样本中,污染被测试程序的分支指令的数据;根据信息对指定样本中关键数据进行变异,得到变异后的指定样本;将变异后的指定样本确定为测试样本。

可选地,图6是根据本申请实施例的一种计算机终端的结构框图。如图6所示,该计算机终端a可以包括:一个或多个(图中仅示出一个)处理器、存储器、以及传输装置。

其中,存储器可用于存储软件程序以及模块,如本发明实施例中的测试样本的生成方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的测试样本的生成方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端a。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述计算机终端中的处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:将指定样本标记为污染源;将污染源作为被测试程序的输入,执行被测试程序;获取污染源中污染被测试程序的分支指令的数据在指定样本中的位置和长度,得到关键数据的信息。

可选的,上述处理器还可以执行如下步骤的程序代码:在执行被测试程序的过程中,当执行到分支指令时,检测分支指令是否被污染源污染;如果检测到分支指令被污染源污染,记录污染源中污染分支指令的数据在指定样本中的位置和长度。

可选的,上述处理器还可以执行如下步骤的程序代码:在记录污染源中污染分支指令的数据在指定样本中的位置和长度之后,继续执行上述被测试程序,并在继续执行上述被测试程序的过程中执行以下处理过程,直至被测试程序执行结束:检测被测试程序中的其他分支指令是否被污染源污染;记录污染源中污染其他分支指令的数据在指定样本中的位置和长度。

可选的,上述处理器还可以执行如下步骤的程序代码:以变异后的指定样本作为被测试程序的输入,执行被测试程序;在执行被测试程序的过程中,如果检测到新的代码执行路径,则将变异后的指定样本确定为测试样本;其中,新的代码执行路径为指定样本作为被测试程序的输入时,与被测试程序执行的代码执行路径不同的执行路径。

采用本发明实施例,采用根据获取的指定样本中的关键数据的信息,对该关键数据进行变异,得到变异后的指定样本,将该变异后的指定样本确定为测试样本的方式,即通过对指定样本中的关键数据的变异,生成测试样本,实现了对指定样本的精确变异,减少了无意义的样本的生成,进而提高了代码覆盖率,进而解决了相关技术中生成的测试样本存在代码覆盖率低的技术问题。

本领域普通技术人员可以理解,图6所示的结构仅为示意,计算机终端也可以是智能手机(如android手机、ios手机等)、平板电脑、掌声电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图6其并不对上述电子装置的结构造成限定。例如,计算机终端a还可包括比图6中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图6所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-onlymemory,rom)、随机存取器(randomaccessmemory,ram)、磁盘或光盘等。

实施例4

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例1所提供的测试样本的生成方法所执行的程序代码。

可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取指定样本中关键数据的信息;其中,该关键数据为所述指定样本中,污染被测试程序的分支指令的数据;根据信息对指定样本中关键数据进行变异,得到变异后的指定样本;将变异后的指定样本确定为测试样本。

此处需要说明的是,上述计算机终端群中的任意一个可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的值命令。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1