CN115687158B - 一种协议软件的测试方法及装置 - Google Patents
一种协议软件的测试方法及装置 Download PDFInfo
- Publication number
- CN115687158B CN115687158B CN202211689502.0A CN202211689502A CN115687158B CN 115687158 B CN115687158 B CN 115687158B CN 202211689502 A CN202211689502 A CN 202211689502A CN 115687158 B CN115687158 B CN 115687158B
- Authority
- CN
- China
- Prior art keywords
- mutation operator
- bytes
- seed file
- mutation
- chain
- 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
Links
Images
Abstract
本申请实施例提供一种协议软件的测试方法及装置,包括:利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子;根据所述变异算子链对预设的种子文件进行变异,生成测试用例;在插桩的待测软件中执行所述测试用例,得到执行结果;根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。本申请能够生成有效准确的测试用例,提高协议软件的测试效率。
Description
技术领域
本申请实施例涉及软件技术领域,尤其涉及一种协议软件的测试方法及装置。
背景技术
随着计算机和网络技术的发展,终端所依赖的协议软件的数量和种类日趋丰富庞大,各类协议软件已经广泛应用于社会生活中。随之而来的是协议软件的安全问题,软件存在的漏洞可能会带来无法预估的不利后果。由此,如何对协议软件进行准确有效的测试,从而发现软件可能存在的漏洞,是本领域所需解决的问题。
发明内容
有鉴于此,本申请实施例的目的在于提出一种协议软件的测试方法及装置,能够对协议软件进行准确有效的测试。
基于上述目的,本申请实施例提供了一种协议软件的测试方法,包括:
利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子;
根据所述变异算子链对预设的种子文件进行变异,生成测试用例;
在插桩的待测软件中执行所述测试用例,得到执行结果;
根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。
可选的,所述利用预设的变异算子选取模型选取变异算子链之前,还包括:
在所述待测软件的源代码中插桩;其中,所述插桩用于在所述待测软件执行所述测试用例的过程中,检测代码覆盖率和协议有效性结果。
可选的,所述执行结果包括所述代码覆盖率;
根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数,包括:
当根据所述代码覆盖率判断出现新的覆盖分支时,设置所述变异算子链上各变异算子的奖励值;
根据所述奖励值和本次选取变异算子链的期望值,计算目标期望值;
根据所述目标期望值,确定所述变异算子链上各变异算子的权重。
可选的,所述执行结果还包括协议有效性结果;
根据所述奖励值和本次选取变异算子链的期望值,计算目标期望值之前,还包括:
当根据所述代码覆盖率判断未出现新的覆盖分支时,如果所述协议有效性结果为有效性验证通过,则设置所述变异算子链上各变异算子的奖励值。
可选的,设置所述变异算子链上各变异算子的奖励值,包括:
对于所述变异算子链上从后到前的预定数量的变异算子,按照从大到小的顺序设置奖励值。
可选的,所述方法还包括:
基于更新的变异算子选取模型,确定重新选取的变异算子链的长度;
根据变异算子的权重,选取所述长度的变异算子,并添加于重新选取的变异算子链上。
可选的,所述变异算子包括:bitflip变异算子,用于每间隔1位,将种子文件的数据反转一个或多个连续的位;typeflip变异算子,用于每间隔1个字节,将种子文件的数据反转一个或多个连续的字节;arithmetic inc/dec变异算子,用于对种子文件一个字节或几个连续字节执行加减运算;interesting values变异算子,用于使用硬编码的有趣值替换种子文件中的随机字节;user extras变异算子,用于使用用户提供的令牌覆盖或插入种子文件中的字节;auto extras变异算子,用于保留bitflip变异算子变异后的字节,随机选取这些字节来覆盖种子文件中的随机字节;random bytes变异算子,用于从种子文件中随机选取一个字节并将该字节设置为随机值;delete bytes变异算子,用于从种子文件中随机选取几个连续的字节并删除;insert bytes变异算子,用于从一个种子文件中随机复制一个或几个字节,并将复制的字节插入到该种子文件的另一个位置;overwrite bytes变异算子,用于在种子文件中随机覆盖几个连续的字节;crossover变异算子,用于将一个种子文件的部分数据与另一个种子文件的部分数据拼接在一起,形成新的测试用例。
可选的,所述协议软件为基于网络协议实现的软件;所述利用预设的变异算子选取模型选取变异算子链之前,还包括:
解析所述待测软件的源代码,得到socket方法;
将所述socket方法的描述符重定向为标准输入的描述符。
可选的,所述执行结果为所述待测软件崩溃;
所述在插桩的待测软件中执行所述测试用例,得到执行结果之后,还包括:记录所述测试用例。
本申请实施例还提供一种协议软件的测试装置,包括:
选取模块,用于利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子;
变异模块,用于根据所述变异算子链对预设的种子文件进行变异,生成测试用例;
测试模块,用于在插桩的待测软件中执行所述测试用例,得到执行结果;
更新模块,用于根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。
从上面所述可以看出,本申请实施例提供的协议软件的测试方法及装置,利用预设的变异算子选取模型选取变异算子链,根据述变异算子链对预设的种子文件进行变异,生成测试用例,在插桩的待测软件中执行测试用例,得到执行结果,根据执行结果更新变异算子选取模型用于选取变异算子链的参数,通过模型不断选取有效的变异算子,能够生成有效准确的测试用例,提高协议软件的测试效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的方法流程示意图;
图2为本申请另一实施例的方法流程示意图;
图3为本申请实施例的重定向输入的方法示意图;
图4为本申请实施例的装置结构框图;
图5为本申请实施例的电子设备结构框图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本申请实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本申请实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
本申请中,协议软件是指遵循某种协议的软件,例如,基于网络协议实现的网络协议软件,如基于HTTP协议、Bacnet协议进行网络通信的网络软件,基于应用协议实现的应用软件,如基于mp3、mp4协议实现的播放软件等,协议软件基于特定的编程语言实现,例如C/C++,协议软件例如为nginx,bacnet-satck,wavpack,ffmpeg等。相关技术中,对于协议软件的测试,由于需要校验是否符合协议规则,在自动生成有效的测试用例方面存在困难(随机生成的测试用例如果不符合协议规则,则直接丢弃),尤其是对于复杂的协议软件,需要专业人员编写符合协议的测试用例,要求高,难度大,效率低。而且,没有深入挖掘有效的测试用例,测试效率不高。
有鉴于此,本申请实施例提供一种协议软件的测试方法,利用变异算子选取模型选取变异算子链,并基于变异算子链上的变异算子对种子文件进行变异生成测试用例,由插桩的待测软件执行测试用例得到执行结果,再根据执行结果更新变异算子选取模型的参数,使得模型能够生成更加准确有效的测试用例,提高协议软件的测试效率。
以下,通过具体的实施例进一步详细说明本申请的技术方案。
如图1、2所示,本申请实施例提供一种协议软件的测试方法,包括:
S101:利用预设的变异算子选取模型选取变异算子链;其中,变异算子链包括多个变异算子;
本实施例中,预先构建用于选取多个变异算子的变异算子选取模型,由选取出的多个变异算子构成变异算子链。变异算子选取模型基于强化学习模型实现,通过不断的强化学习使得随机的变异算子趋向能够生成有效测试用例的变异算子,提高测试用例有效性的比例。可选的,变异算子选取模型可基于多臂老虎机模型实现,根据本次测试的执行结果确定奖励值,根据奖励值选取下次测试用的变异算子。
S102:根据变异算子链对预设的种子文件进行变异,生成测试用例;
本实施例中,由变异算子选取模型选取出变异算子选取模型之后,利用变异算子链上的变异算子对种子文件进行变异,得到变异后的文件,该变异后的文件即为测试用的测试用例。
其中,种子文件是符合协议规则的、协议软件可正常处理的正常文件,变异算子是对种子文件中的部分数据进行修改的特定规则,基于不同的变异算子能够生成不同的测试用例,正常的测试用例和局部不正常(变异后)的测试用例能够快速探索待测软件的运行空间。变异算子的选取直接关系到测似用例的有效性,例如,随机生成的变异算子所变异生成的测试用例,很可能难以通过协议软件的有效性验证,而直接丢弃,降低测试效率,而本实施例利用变异算子选取模型在本次执行结果的基础上重新选取更为有效的变异算子,使得重新选取的变异算子所生成的测试用例更为准确有效。
一些方式中,在测试之前准备包括若干种子文件的种子库,合适的种子库能够测试软件的更多代码覆盖分支。可选的,对于应用软件,如wavpack和ffmpeg,使用正常的不同大小的wav格式文件、mp4格式文件以及avi格式文件构建初始种子库;对于网络协议软件,如nginx、bacnet-stack、modbus等,通过抓取正常的不同类型的网络报文构建初始种子库。测试时,使用论询的方式从种子库中选取本次变异的种子文件,保证每个种子文件都能够被选择,并在后续通过对测试用例的覆盖分支是否存在新的之前没用出现的分支,则将该测试用例更新至种子库。
可选的,可将种子库中的种子文件以队列形式存储,每次从对队列中选取一个种子文件,达到轮询效果。读取出一个种子文件后,利用file方法打开种子文件的文件描述符,并通过mmap方法进行内存映射,使得测试进程可以直接读写种子文件,减少数据拷贝操作。
S103:在插桩的待测软件中执行测试用例,得到执行结果;
本实施例中,在生成测试用例之后,即在预先插桩的待测软件中执行测试用例,并得到相应的执行结果。
一些实施方式中,在待测软件的源代码中插桩,利用插桩在待测软件执行测试用例的过程中,检测代码覆盖率和协议有效性结果。其中,插桩是在保证原有软件功能逻辑的基础上,在软件中插入探针,通过探测采集代码中的信息在特定的位置插入代码段,用于收集软件运行时的动态上下文信息。本申请中,在插桩的待测软件中执行测试用例,通过探针的执行收集测试用例的执行路径的控制流和数据流信息,得到代码覆盖率,以及测试用例是否通过了协议有效性验证的结果。
一些方式中,在插桩的待测软件中执行测试用例的过程中,当触发了插入的类似钩子的指令时,利用进程间共享内存的方式将触发的相关信息(例如,产生了新的代码覆盖分支,有效性验证通过或是未通过等)传递给测试主程序,主程序通过shmget函数来获取共享内存的进程间通信,然后通过shmamt函数将主程序的进程内指针指向该共享内存,利用信号量机制控制主程序和插桩程序直接对共享内存进行读写访问。
可选的,协议有效性的判定标准可以是在插桩阶段设置的通过指令或者未通过指令。例如,对于测试用例是测试报文的情况,如果测试报文按照协议类型解析得到相应的解析结果,即可触发通过指令,生成该测试报文的协议有效性验证通过的结果,如果未得到相应的解析结果,即触发未通过指令,生成协议有效性验证未通过的结果。
可选的,可使用afl-clang编译器对待测软件的源代码进行编译,编译过程中,利用LLVM提供的PASS机制编写Pass文件并链接进入编译的文件中,通过LLVM级别的插桩,使得测试控制进程和被测试进程可以在测试过程中通过共享内存的bitmap数据结构(利用比特数组来存储特定数据)来传递触发的代码覆盖率。
S104:根据执行结果更新变异算子选取模型用于选取变异算子链的参数。
本实施例中,在插桩的待测软件中执行测试用例、并得到执行结果之后,根据执行结果更新变异算子选取模型的参数,使得模型所选取出的下次测试用的变异算子更为有效,变异出的测试用例能够提高代码覆盖率,能够最大可能的满足协议软件的有效性检验,并且最大限度的测试软件的功能和发掘软件漏洞。
一些实施例中,执行结果包括代码覆盖率;根据执行结果更新变异算子选取模型用于选取变异算子链的参数,包括:
当根据代码覆盖率判断出现新的覆盖分支时,设置变异算子链上各变异算子的奖励值;
根据奖励值和本次选取变异算子链的期望值,计算目标期望值;
根据目标期望值,确定变异算子链上各变异算子的权重。
本实施例中,在插桩的待测软件中运行测试用例,可得到代码覆盖率,如果根据代码覆盖率判断该测试用例覆盖了待测软件中新的代码分支,则判断该测试用例有效,生成该测试用例的变异算子链有效,对变异算子链上的各变异算子设置相应的奖励值,变异算子选取模型根据各变异算子的奖励值和本次选取变异算子链的期望值,计算下次测试所预期达到的目标期望值,再根据目标期望值,确定变异算子链上各变异算子的权重,并根据各变异算子的权重,重新选取变异算子。
一些方式中,变异算子链上包括按权重值从大到小顺序选取的多个变异算子,变异算子链的长度范围为1-16,即变异算子链上包括的变异算子的数量范围为1-16,具体数值可随机确定,在确定变异算子链的长度之后,将权重值较大的变异算子添加于变异算子链上,权重值更高的变异算子所生成的测试用例更为有效。可选的,选取出的变异算子可以在变异算子链上可以按权重值从大到小排序,或者从小到大排序,或者随机排序,具体不做限定。
一些实施例中,执行结果还包括协议有效性结果;根据奖励值和本次选取变异算子链的期望值,计算目标期望值之前,还包括:
当根据代码覆盖率判断未出现新的覆盖分支时,如果协议有效性结果为有效性验证通过,则设置变异算子链上各变异算子的奖励值。
本实施例中,在测试前期,不同的测试用例可以覆盖软件的不同代码分支,即通过代码覆盖率这一指标作为选取变异算子的标准,使得生成的测试用例能够尽可能覆盖所有的代码分支。到了测试后期,测试用例已经覆盖了尽可能多的代码分支,很难覆盖新的代码分支,代码覆盖率不再变化,此时,利用协议有效性结果这一指标作为选取变异算子的标准,在没有覆盖新的代码分支的情况下,使得生成的测试用例尽可能的通过协议有效性验证。
一些实施例中,设置变异算子链上各变异算子的奖励值,包括:
对于变异算子链上从后到前的预定数量的变异算子,按照从大到小的顺序设置奖励值。
本实施例中,当本次测试用的测试用例覆盖了新的代码分支时,或者没有覆盖新的代码分支但是通过了协议有效性验证,则对变异算子链上的一定数量的变异算子设置奖励值。其中,对于变异算子链上从后向前的一定数量的变异算子,按照奖励值从大到小的顺序分别设置各变异算子的奖励值。考虑到覆盖了新的代码分支比通过协议有效性验证具有更高的价值,可以赋予更高的奖励值;同时,变异算子链上越靠后的变异算子对测试用例生成做出的贡献越多,赋予的奖励值也越高。
举例来说,对于覆盖了新的代码分支的测试用例,对应的变异算子链的长度大于等于八,将该变异算子链上的后八个变异算子,依次设置奖励值为1-8,即最后一个变异算子的奖励值为8,倒数第8个变异算子的奖励值为1;若对应的变异算子链的长度小于八,则最后一个变异算子的奖励值为8,从最后一个向前数,每个变异算子的奖励值依次减1。对于未覆盖新的代码分支,但是通过协议有效性验证的测试用例,且相应的变异算子链的长度大于等于四,将相应的变异算子链上的后四个变异算子依次设置奖励值,依次设置奖励值为1-4,即最后一个变异算子的奖励值为4,倒数第4个变异算子的奖励值为1;若相应的变异算子链的长度小于四,则最后一个变异算子的奖励值为4,从最后一个向前数,每个变异算子的奖励值依次减1。
一些实施例中,根据本次测试的执行结果设置本次使用的变异算子的奖励值之后,变异算子选取模型根据此轮测试的奖励值与本次的期望值(每个变异算子的初始奖励值和初始期望值相同,保证初始被选中的几率相同),计算下次测试所期望达到的目标期望值,再根据目标期望值分配各变异算子的权重。
其中,计算每个变异算子期望值的公式为:
Qn+1(a)= Qn(a)+ c1 (Rn(a)- Qn(a)) (1)
公式中,Qn(a)为变异算子a第n次变异的期望值,Rn(a)为变异算子在第n次变异的奖励值。c1是调整参数,用于调整对奖励值的敏感程度,一般设置为1/n。变异算子的第n+1次变异的期望值Qn+1(a)根据第n次变异的期望值和奖励值计算得出。
为了防止局部最优,避免算法过于收敛于某几个变异算子,计算出本次目标期望值后,再采用上届置信算法计算每个变异算子的权重,表示为:
Wn(a) = Qn(a) + c2*sqrt(ln(n)/Nn(a)) (2)
式中,Wn(a)指变异算子a在第n次变异的权重。Nn(a)表示在第n次变异之前变异算子被选择的次数(初始为1),变异算子的权重随着它被选中的次数增多而减少,避免算法过于收敛于某一个变异算子。c2为控制试探的程度参数,取大于0的整数。 sqrt(ln(n)/Nn(a))是平方根计算项,是对变异算子a估计的不确定性或方差的度量,当Nn(a)增加时,该平方根计算项减小,即不确定性减小,每次选择除变异算子a之外的变异算子时,n增大,而Nn(a)没有变化,不确定性增加。
一些实施例中,提供11种变异算子的变异方式,具体包括:1)bitflip变异算子:每间隔1位,将种子文件的数据反转一个或多个连续的位。2)typeflip变异算子:每间隔1个字节,将种子文件的数据反转一个或多个连续的字节。3)arithmetic inc/dec变异算子:对种子文件一个字节或几个连续字节执行加减运算。4)interesting values变异算子:用硬编码的有趣值替换种子文件中的随机字节,有趣值是指预先确定的在正常的协议报文中经常出现的值,如http协议报文中的“GET”、“HTTP”等字符。5)user extras变异算子:使用用户提供的令牌覆盖或插入种子文件中的字节。6)auto extras变异算子:基于变异算子bitflip,在bitflip阶段使用AFL(American Fuzzy Lop)模糊测试工具保留该阶段变异后的字节,随机选取这些字节来覆盖种子文件中的随机字节。7)random bytes变异算子:从种子文件中随机选取一个字节并将该字节设置为随机值。8)delete bytes变异算子:从种子文件中随机选取几个连续的字节并删除。9)insert bytes变异算子:从一个种子文件中随机复制一个或几个字节,并将赋值的字节插入到该种子文件的另一个位置。10)overwritebytes变异算子:在种子文件中随机覆盖几个连续的字节。11)crossover变异算子:将一个种子文件的部分数据与另一个种子文件的部分数据拼接在一起,形成新的测试用例。
一些实施例中,对于基于网络协议实现的网络协议软件,利用预设的变异算子选取模型选取变异算子链之前,还包括:
解析待测软件的源代码,得到socket方法;
将socket方法的描述符重定向为标准输入的描述符。
如图3所示,本实施例中,考虑到网络协议软件不是从标准输入缓冲区读取报文,而是从套接字端口缓冲区读取报文并解析报文,然而,一般的协议软件测试是将测试用例写入标准输入缓冲区或者文件读取缓冲区,网络协议软件无法从套接字端口缓冲区读取测试用例而无法进行测试。为解决该问题,先对待测软件的源代码进行解析,确定协议软件中的socket方法,然后将socket方法的描述符重定向为标准输入的描述符,使得网络协议软件可以从标准输入缓冲区直接读取测试报文,实现网络协议软件的测试。可选的,基于preeny库实现重新socket方法。
一些方式中,当待测软件为应用软件时,可以通过标准输入缓冲区读取测试用例进行测试。
一些实施例中,在测试过程中,当执行结果为待测软件崩溃时,通过记录本次测试所使用的测试用例,以便后期测试复现软件的问题所在。可选的,测试过程中,当检测到软件输出SIGSEGV等信号时,判断软件崩溃。
本实施例中,提供一种模糊测试工具实现上述用于对协议软件进行模糊测试的方法,工具对软件进行测试的过程包括:准备种子库;对待测软件进行预处理,包括解析、编译、插桩等,第一次测试时,利用随机选取的几个变异算子对从种子库中选取出的种子文件进行变异处理,得到第一次测试的测试用例,在插桩的待测软件中运行测试用例,得到执行结果。基于执行结果,变异算子选取模型更新变异算子链上各变异算子的权重,下次测试时,使用更新后的变异算子链对种子文件进行变异,生成新的测试用例。按照上述过程,轮询选取种子库中的每个种子文件,利用不断优化的变异算子链对选取出的种子文件进行变异生成相应的测试用例,不仅可自动化的生成若干测试用例,而且通过变异算子选取模型不断选取更为有效的变异算子,使得测试用例不断趋向于能够探索更多的代码分支,并通过协议有效性验证,从而利用多样、有效的测试用例对协议软件进行高效的测试。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
如图4所示,本申请实施例还提供一种协议软件的测试装置,包括:
选取模块,用于利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子;
变异模块,用于根据所述变异算子链对预设的种子文件进行变异,生成测试用例;
测试模块,用于在插桩的待测软件中执行所述测试用例,得到执行结果;
更新模块,用于根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图5示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本申请实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本申请实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本申请实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本申请实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本申请实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (9)
1.一种协议软件的测试方法,其特征在于,包括:
利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子,所述变异算子包括:bitflip变异算子,用于每间隔1位,将种子文件的数据反转一个或多个连续的位;typeflip变异算子,用于每间隔1个字节,将种子文件的数据反转一个或多个连续的字节;arithmetic inc/dec变异算子,用于对种子文件一个字节或几个连续字节执行加减运算;interesting values变异算子,用于使用硬编码的有趣值替换种子文件中的随机字节;user extras变异算子,用于使用用户提供的令牌覆盖或插入种子文件中的字节;auto extras变异算子,用于保留bitflip变异算子变异后的字节,随机选取这些字节来覆盖种子文件中的随机字节;random bytes变异算子,用于从种子文件中随机选取一个字节并将该字节设置为随机值;delete bytes变异算子,用于从种子文件中随机选取几个连续的字节并删除;insertbytes变异算子,用于从一个种子文件中随机复制一个或几个字节,并将复制的字节插入到该种子文件的另一个位置;overwrite bytes变异算子,用于在种子文件中随机覆盖几个连续的字节;crossover变异算子,用于将一个种子文件的部分数据与另一个种子文件的部分数据拼接在一起,形成新的测试用例;
根据所述变异算子链对预设的种子文件进行变异,生成测试用例;
在插桩的待测软件中执行所述测试用例,得到执行结果;
根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。
2.根据权利要求1所述的方法,其特征在于,所述利用预设的变异算子选取模型选取变异算子链之前,还包括:
在所述待测软件的源代码中插桩;其中,所述插桩用于在所述待测软件执行所述测试用例的过程中,检测代码覆盖率和协议有效性结果。
3.根据权利要求2所述的方法,其特征在于,所述执行结果包括所述代码覆盖率;
根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数,包括:
当根据所述代码覆盖率判断出现新的覆盖分支时,设置所述变异算子链上各变异算子的奖励值;
根据所述奖励值和本次选取变异算子链的期望值,计算目标期望值;
根据所述目标期望值,确定所述变异算子链上各变异算子的权重。
4.根据权利要求3所述的方法,其特征在于,所述执行结果还包括协议有效性结果;
根据所述奖励值和本次选取变异算子链的期望值,计算目标期望值之前,还包括:
当根据所述代码覆盖率判断未出现新的覆盖分支时,如果所述协议有效性结果为有效性验证通过,则设置所述变异算子链上各变异算子的奖励值。
5.根据权利要求3或4所述的方法,其特征在于,设置所述变异算子链上各变异算子的奖励值,包括:
对于所述变异算子链上从后到前的预定数量的变异算子,按照从大到小的顺序设置奖励值。
6.根据权利要求3所述的方法,其特征在于,还包括:
基于更新的变异算子选取模型,确定重新选取的变异算子链的长度;
根据变异算子的权重,选取所述长度的变异算子,并添加于重新选取的变异算子链上。
7.根据权利要求1所述的方法,其特征在于,所述协议软件为基于网络协议实现的软件;所述利用预设的变异算子选取模型选取变异算子链之前,还包括:
解析所述待测软件的源代码,得到socket方法;
将所述socket方法的描述符重定向为标准输入的描述符。
8.根据权利要求1所述的方法,其特征在于,所述执行结果为所述待测软件崩溃;
所述在插桩的待测软件中执行所述测试用例,得到执行结果之后,还包括:记录所述测试用例。
9.一种协议软件的测试装置,其特征在于,包括:
选取模块,用于利用预设的变异算子选取模型选取变异算子链;其中,所述变异算子链包括多个变异算子,所述变异算子包括:bitflip变异算子,用于每间隔1位,将种子文件的数据反转一个或多个连续的位;typeflip变异算子,用于每间隔1个字节,将种子文件的数据反转一个或多个连续的字节;arithmetic inc/dec变异算子,用于对种子文件一个字节或几个连续字节执行加减运算;interesting values变异算子,用于使用硬编码的有趣值替换种子文件中的随机字节;user extras变异算子,用于使用用户提供的令牌覆盖或插入种子文件中的字节;auto extras变异算子,用于保留bitflip变异算子变异后的字节,随机选取这些字节来覆盖种子文件中的随机字节;random bytes变异算子,用于从种子文件中随机选取一个字节并将该字节设置为随机值;delete bytes变异算子,用于从种子文件中随机选取几个连续的字节并删除;insertbytes变异算子,用于从一个种子文件中随机复制一个或几个字节,并将复制的字节插入到该种子文件的另一个位置;overwrite bytes变异算子,用于在种子文件中随机覆盖几个连续的字节;crossover变异算子,用于将一个种子文件的部分数据与另一个种子文件的部分数据拼接在一起,形成新的测试用例;
变异模块,用于根据所述变异算子链对预设的种子文件进行变异,生成测试用例;
测试模块,用于在插桩的待测软件中执行所述测试用例,得到执行结果;
更新模块,用于根据所述执行结果更新所述变异算子选取模型用于选取变异算子链的参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211689502.0A CN115687158B (zh) | 2022-12-28 | 2022-12-28 | 一种协议软件的测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211689502.0A CN115687158B (zh) | 2022-12-28 | 2022-12-28 | 一种协议软件的测试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115687158A CN115687158A (zh) | 2023-02-03 |
CN115687158B true CN115687158B (zh) | 2023-03-10 |
Family
ID=85055795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211689502.0A Active CN115687158B (zh) | 2022-12-28 | 2022-12-28 | 一种协议软件的测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115687158B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859273A (zh) * | 2009-04-07 | 2010-10-13 | 西门子(中国)有限公司 | 一种产生测试用例的方法及装置 |
CN105868116A (zh) * | 2016-04-15 | 2016-08-17 | 西北工业大学 | 基于语义变异算子的测试用例生成和优化方法 |
CN112597055A (zh) * | 2020-12-30 | 2021-04-02 | 深圳Tcl新技术有限公司 | 测试用例生成方法、装置、设备及计算机可读存储介质 |
CN114265764A (zh) * | 2021-11-30 | 2022-04-01 | 南京大学 | 一种基于带权重采样的深度学习算子测试数据生成方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022022838A1 (en) * | 2020-07-31 | 2022-02-03 | Telefonaktiebolaget Lm Ericsson (Publ) | Machine-learning based software testing technique |
-
2022
- 2022-12-28 CN CN202211689502.0A patent/CN115687158B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859273A (zh) * | 2009-04-07 | 2010-10-13 | 西门子(中国)有限公司 | 一种产生测试用例的方法及装置 |
CN105868116A (zh) * | 2016-04-15 | 2016-08-17 | 西北工业大学 | 基于语义变异算子的测试用例生成和优化方法 |
CN112597055A (zh) * | 2020-12-30 | 2021-04-02 | 深圳Tcl新技术有限公司 | 测试用例生成方法、装置、设备及计算机可读存储介质 |
CN114265764A (zh) * | 2021-11-30 | 2022-04-01 | 南京大学 | 一种基于带权重采样的深度学习算子测试数据生成方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115687158A (zh) | 2023-02-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101473301B (zh) | 迭代静态和动态软件分析 | |
CN110059009B (zh) | 用于测试代码文件的方法和装置 | |
Sambasivan et al. | Principled workflow-centric tracing of distributed systems | |
CN111124926B (zh) | 模糊测试方法、装置、电子设备及存储介质 | |
US11379943B2 (en) | Optimizing compilation of shaders | |
US20100146340A1 (en) | Analyzing Coverage of Code Changes | |
US9582418B2 (en) | Confirming the sensitivity of a data object in a managed object heap | |
CN110231994B (zh) | 内存分析方法、装置和计算机可读存储介质 | |
US20150248343A1 (en) | Method and apparatus for implementing instrumentation code | |
CN109101237A (zh) | 代码的加密编译方法及装置 | |
CN111581106A (zh) | 二进制程序漏洞测试方法、装置及可读存储介质 | |
CN115659358B (zh) | 一种智能合约模糊测试方法及装置 | |
CN109871312B (zh) | 一种接口测试方法、装置、设备及可读存储介质 | |
CN114546868A (zh) | 代码覆盖率测试方法、装置和电子设备 | |
CN111913878A (zh) | 基于程序分析结果的字节码插桩方法、装置及存储介质 | |
CN113778890B (zh) | 代码测试方法、装置、电子设备及存储介质 | |
CN115687158B (zh) | 一种协议软件的测试方法及装置 | |
US20140137083A1 (en) | Instrumenting computer program code by merging template and target code methods | |
EP3692456B1 (en) | Binary image stack cookie protection | |
CN115203061B (zh) | 接口自动化测试方法、装置、电子设备及存储介质 | |
CN112181827A (zh) | 软件图形接口测试方法、装置及软件开发系统 | |
CN113051153B (zh) | 一种应用软件漏洞扫描方法及相关设备 | |
US11775304B2 (en) | Methods and apparatus to insert profiling instructions into a graphics processing unit kernel | |
CN112861134B (zh) | 基于优化变异策略的漏洞检测方法、装置、设备及介质 | |
CN108334313A (zh) | 用于大型soc研发的持续集成方法、装置及代码管理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |