CN102508780B - 一种用于软件测试的交叉式动态法和装置 - Google Patents

一种用于软件测试的交叉式动态法和装置 Download PDF

Info

Publication number
CN102508780B
CN102508780B CN201110371268.2A CN201110371268A CN102508780B CN 102508780 B CN102508780 B CN 102508780B CN 201110371268 A CN201110371268 A CN 201110371268A CN 102508780 B CN102508780 B CN 102508780B
Authority
CN
China
Prior art keywords
test
random
dynamic
module
symbol
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.)
Expired - Fee Related
Application number
CN201110371268.2A
Other languages
English (en)
Other versions
CN102508780A (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.)
No54 Inst Headquarters Of General Staff P L A
University of Electronic Science and Technology of China
Original Assignee
No54 Institute Of Headquarters Of General Staff Of Pla
University of Electronic Science and Technology of 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 No54 Institute Of Headquarters Of General Staff Of Pla, University of Electronic Science and Technology of China filed Critical No54 Institute Of Headquarters Of General Staff Of Pla
Priority to CN201110371268.2A priority Critical patent/CN102508780B/zh
Publication of CN102508780A publication Critical patent/CN102508780A/zh
Application granted granted Critical
Publication of CN102508780B publication Critical patent/CN102508780B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种用于软件测试的交叉式动态法和装置,其中,用于软件测试的交叉动态法,包括如下步骤:①通过动态随机测试法对被测程序执行随机检测,检测程序漏洞,如果检测到程序异常则记录异常信息退出测试,否则在本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和,如果饱和则调用符号切换函数,切换到动态符号执行,将该父进程挂起,否则继续进行下次测试,直到检测到代码覆盖率饱和;②通过动态符号执行法搜索新的未被覆盖代码块,如果有新的代码块被检测到则将状态还原到步骤①的随机执行状态,如果所有的基本块都已被覆盖,则退出测试。本发明能全面检测较大应用程序,达到较高的代码覆盖率,缓解动态符号执行路径爆炸的问题。

Description

一种用于软件测试的交叉式动态法和装置
技术领域
本发明涉及软件的测试方法,尤其涉及软件的动态测试法。
背景技术
软件测试主要用于软件正确性分析和软件漏洞检测,可分为静态测试方式和动态测试方式。静态测试指不运行被测程序,通过人工或借助专业软件来对程序的静态特性进行分析,通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。动态测试指实际运行被测程序,提供相应的测试数据,通过检查软件的动态行为或判断运行结果的正确性来检测软件。动态测试方法避免了静态测试方法人工开销大、效率低、误报率高等缺陷,成为了当前主流的软件测试方式,动态测试常用的技术包括动态随机测试和动态符号执行。
动态随机测试方法能随机产生大量的数据作为程序的输入,动态运行程序,从而检测程序漏洞。因其直接运行被测程序,不需了解内部结构细节,也不需要额外的开销,具有良好的扩展性,容易实现,所以被广泛采用。然而,当输入值是特定的字符或数字时,随机测试要随机产生该特定值的概率非常小(示例1详细说明)。另一方面,对于较大应用程序,随机测试虽能迅速深入被测程序内部,但测试具有随机性,只能覆盖局部程序行为,从而不能保证测试的全面性、精确性。如图1所示是针对随机测试特点的模拟图,带箭头的折线表示随机测试的路径,黑色方块表示代码块,折线与方块相交,表示该代码块被执行到。由图1可看出,该方法测试能够深入测试,但也具有随机性、单一性,不能全面覆盖周围的代码块。由于以上不可避免的原因,限制了随机测试的扩展,使其在通常情况下仅被作为其它测试技术的辅助方法使用。
动态符号测试技术通过多次执行被测程序,并且自动产生使被测程序每次执行不同路径的输入值,企图测试到新的代码块。通过全路径的搜索从而达到对整个程序路径状态空间的覆盖,全面检测被测程序。有以下几个执行步骤:
1)将输入数据映射为特定的符号,实际执行程序,同时跟踪输入符号的执行流程,用符号在路径上的操作更新符号,并搜集符号在分支语句上的条件表达式。通过示例1(符号路径约束条件表达式示例)简单说明该过程:
1. int test(int  x){
2.  x=x-1;
3.  if(x>0){
4.  …
5.   }else{…}
6.}
在实际执行过程中,调用test函数时会为x变量提供确定的输入值,但是在符号执行时不用考虑这些确定输入值,而是将x变量映射为符号,如“input0”;执行到第2句时更新x变量对应的符号,形成表达式“input0 -1”;到第三句的if条件语句,根据“x>0”是否成立建立条件表达式,如果成立,则建立符号条件表达式为“input0 -1>0”,且本次执行路径为1-2-3-4-6。反之,沿第5行的else语句执行,条件表达式为“input0 -1≤0”,执行路径为1-2-3-5-6。整体路径上的条件表达式的连接与组成该路径的路径约束条件。如该示例路径1-2-3-4-6对应的路径约束条件为 (input0 -1>0) ∧ξ1,ξ1为第4行内省略的约束条件。
2)对某条路径约束条件取反,通过后继步骤的操作,预使下次执行沿不同的路径,覆盖到新的代码块。
所谓取反就是将条件关系取反,如将“/=”取反得到“=”,将“>”取反为“<=”。对示例1,假设if条件成立,则本次执行路径为1-2-3-4-6,那么第5行的代码块没有被覆盖到(执行到)。如果将第3行将对应的约束条件条件取反为“input0 -1≤0”,就可使下次沿else分支执行,从而覆盖到新的代码块执行。
通过对分支语句的条件表达式取反,使每次执行不同的分支路径,企图通过该方式覆盖到新的代码块,是动态符号执行最本质的特征。
3)对取反的路径约束条件用SMT求解器求解。如果有解,则产生一组实际值,该实际值作为新的输入驱动下一次的符号执行沿该预定的路径执行。这里说明一下,一条有解的路径约束条件必定对应一条路径,两者是一一对应的关系。
4)如此,直到被测程序的所有路径被测试完成。整个测试状态空间是一颗路径二叉树。
如图2所示是针对动态符号执行特点的模拟图。图中黑色方块代表代码块,同心圆代表动态符号执行的测试范围,因为动态符号执行每次都能覆盖邻近的代码块的特征,使其能够全面的覆盖被测程序,因此用同心圆表示执行路线。
符号执行虽比随机执行有多余的开销,但是符号执行保证测试的精确性、全面性,能达到更高的代码覆盖率,使其成为比随机测试更有前景的软件测试技术。但是,动态符号执行有一个不能避免的缺陷,随着被测程序的增大或者循环次数的增加,整条路径的约束条件长度也线性的增加,每增加一条路径约束条件,路径二叉树的高度加1,需要测试的路径增加一倍。如此,随着路径长度的线性增长,需测路径按2的幂级数增加,引起路径爆炸,在有限的时间资源条件下,不可能测试完成,并且路径长度的增加也需要花费更多的求解器求解时间。
受应用程序增大、对本地库函数调用、循环次数不确定性等几个因素影响,引起的路径爆炸问题,使动态符号执行不能实际应用于主流大型软件的测试,如Firefox,OpenOffice,MYSQL等。
发明内容
针对上述现有技术,本发明要解决的技术问题是提供一种结合随机测试和动态符号执行的用于软件测试的交叉式动态法和装置,其能全面检测较大应用程序,且能缓解动态符号执行面临的路径爆炸问题。
为了解决上述技术问题,本发明采用如下技术方案:一种用于软件测试的交叉动态法,包括如下步骤:
(1)通过动态随机测试法对被测程序执行随机检测,检测程序漏洞,如果检测到程序异常则记录异常信息退出测试,否则在本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和,如果饱和则调用符号切换函数,切换到动态符号执行,将该父进程挂起,否则继续进行下次测试,直到检测到代码覆盖率饱和;
(2)通过动态符号执行法搜索新的未被覆盖代码块,如果有新的代码块被检测到则将状态还原到步骤(1)的随机执行状态,如果所有的基本块都已被覆盖,则退出测试。
进一步地,所述代码覆盖率的计算方法为:在测试之前使用一个IDA Pro的插件,用于搜集静态可执行程序的所有基本块,通过动态获取的基本块与静态基本块的比值得出当前的代码覆盖率。
进一步地,所述动态符号执行法包括如下步骤:
①利用随机测试法中的测试用例实际执行被测程序同时动态符号执行,搜集路径约束条件;
②使用Generational算法对每条约束条件都取反,生成该路径邻近的所有路径对应的路径约束条件;
③用求解器对生成的每个路径约束条件分别求解,生成测试用例集合;
④在测试用例集合中选择新代码块增量最大的测试用例作为该模块的返回值,如果本次符号执行没有新的代码块被检测到,那么从测试用例集合中随机选择一个测试用例作为①的输入驱动下一次的符号执行,直到有新的未被覆盖代码块被检测到。
一种用交叉动态法测试软件的装置,包括:
随机测试模块,用于实现随机检测功能,并计算代码覆盖率,检查代码覆盖率是否达到饱和;
动态符号执行模块,根据随机测试模块已测试的程序状态,利用动态符号执行,探索新的未被覆盖的代码块;
插桩模块,用于对被测程序插桩,搜集随机执行和动态符号执行覆盖到的代码块信息,同时在动态符号执行时搜集路径约束条件;
符号切换模块,用快照方式保存被测程序的当前状态,并创建子进程执行动态符号测试,父进程挂起等待子进程唤醒,子进程继承了父进程的当前所有状态,保证从当前状态继续执行;
随机还原模块,用动态符号执行产生的,能覆盖新代码块的测试用例更新父进程的输入,唤醒父进程,子进程退出,从当前状态继续执行随机测试;
状态检测模块,用于检测随机测试模块执行是否达到饱和,从而调用符号切换模块,准备切换到动态符号执行模块执行;同时检测动态符号执行是否检测到新的代码块,从而调用随机还原模块,准备还原到随机测试模块。
进一步地,所述插桩模块采用PIN工具。
与现有技术相比,本发明具有以下有益效果:
本方案提出的交叉式动态符号执行方案,是随机测试和动态符号执行两种技术的结合。开始执行随机测试,当覆盖率达到饱和时(代码覆盖率增量为零),通过符号切换模块保存当前的程序状态,切换到动态符号执行,利用动态符号执行检测新代码块,当有新代码块检测到时,通过随机还原模块又重新切换到随机测试。如此,利用随机测试和动态符号测试交叉执行,利用它们之间的互补关系弥补各自的缺陷,避免随机测试因需生成某一特定值而陷入,避免动态符号执行因循环而陷入。使该测试方案具有随机测试开销小、速度快的特点,又有动态符号执行全面性、精确性的特点。能达到比两者并行执行更高的代码覆盖率,并且能大幅度缓解路径爆炸,具有更好的测试性能。
附图说明
图1为动态随机测试模拟图;
图2为动态符号执行模拟图;
图3为交叉式动态符号执行模拟图;
图4为本发明实施例交叉式动态法执行装置图。
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
交叉式动态符号法执行的模拟图如图3所示,通过对三种技术的模拟图(图1,图2,图3)的比较也可以看出混合式符号执行的优势。图3代表的交叉式动态符号执行利用随机测试可以快速深入程序内部(折线所示),利用动态符号执行能够覆盖邻近的代码块(同心圆所示),与图1,图2相比,明显能覆盖更多的代码块(黑色方块所示)。
下面通过示例2(混合式动态符号测试算法)对以上三种技术作简单的说明及比较:
1.  void  testme() {
2. char  * s, c;
3. int state = 0;
4. s = input();
5. while (1) {
6. c = input();
7. if (c == ’[’ && state == 0) state = 1;
8. if (c == ’(’ && state == 1) state = 2;
9. if (c == ’{’ && state == 2) state = 3;
10.  if (c == ’?’ && state == 3) state = 4;
11.  if (c == ’a’ && state == 4) state = 5;
12.  if (c == ’x’ && state == 5) state = 6;
13.  if (c == ’}’ && state == 6) state = 7;
14.  if (c == ’)’ && state == 7) state = 8;
15.  if (c == ’]’ && state == 8) state = 9;
16.  if (s[0] == ’r’ && s[1] == ’e’&& s[2] == ’s’ && s[3] == ’e’&&
17.  s[4] == ’t’ && s[5] == 0&& state == 9) {
18.  ERROR;
19.  }}}
示例2中,循环每次接受两个输入s、c,s为字符串,c为字符。如果变量state达到9,并且字符串s为“reset”,则触发错误态ERROR,该示例的目的就是要检测出ERROR状态。
如果使用随机测试方式,经过可能几百或几千次循环(这样的开销对当前的计算机执行能力来说并不算大),很容易满足7~15行的if条件,使state的值达到9,但是使s的值为“reset”的概率为1/28*5 (5个字符,每个字符长度为8bit,s[5]为字符串结束符),如此,随机测试要击中ERROR的概率非常小,实际不可行。
如果使用动态符号执行方法,由于对路径约束条件取反,驱使每次执行不同的分支路径,所以能用很少的执行次数(1/2以内)使s的值变成“reset”,驱第16-17行的if语句条件成立。但是,对于该示例的无限循环算法,每次循环产生16条约束条件,至少需要9次循环才能是state的值为9,一次执行的路径约束条件长度为16*9,需要测试的路径数量为216*9 ,更不可能在有限的时间资源条件下触发ERROR。
而本方案实现的交叉式动态符号执行技术,结合以上两种方法的优势,对7~15行使用随机测试,快速使state值为9;对第16-17行使用动态符号执行产生字符串s=“reset”,利用随机测试技术和动态符号测试技术,使整个测试能在很小的时间开销内触发ERROR。
参见图4,一种用交叉动态法测试软件的装置,包括:
1.       随机测试模块
该模块的功能是通过产生随机值,实际执行被测程序,检测程序漏洞,不需要其他额外的操作。本方案利用现有的Fuzzing测试技术来实现该模块的功能。Fuzzing测试,即模糊测试,是一种基于缺陷注入的自动软件测试技术,它利用黑盒测试的思想,使用大量半有效的随机数据作为应用程序的输入,以程序是否出现异常为标志,来发现应用程序中可能存在的安全漏洞。特定类型的应用程序或者协议有不同的Fuzzing工具,如针对浏览器的mangleme、针对文件应用程序的FileFuzzing和SPIKE-file、针对ActiveX的COMRaider和AxMan、针对网络协议的SPIKE等。在本方案中根据被测软件类型来选择不同的工具。
该模块的具体执行流程如下:
1)        分析被测程序类型,选择一款Fuzzing工具,转到2);
2)        利用Fuzzing工具产生随机值,形成输入测试用例,转到3);
3)        对被测程序插桩,将输入测试用例作为输入运行程序,监视程序的运行状态,并且保存该路径覆盖的代码块。如果检测到程序异常则转到6),否则转到4);
4)        本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和。如果达到则转到5),否则转到2)继续进行下次测试;
5)        调用符号切换函数,准备切换到符号执行,该进场将被挂起。
6)        记录异常信息,包括异常的地址、触发异常的测试用例。转到7);
7)        退出测试。
2.       动态符号执行模块
该模块的功能是利用动态符号执行来搜索新的未被覆盖代码块。该模块的输入是当前测试的程序状态,包括已测试路径、已覆盖基本块。为达到高效的新代码块查找功能,该模块没有利用现用的动态符号执行工具,而是自己实现的一套动态符号执行方案,具体执行流程如下:
1)         利用当前的测试用例实际执行被测程序同时符号执行,搜集路径约束条件。例如示例3是对示例2符号执行搜集到的路径约束条件的部分表内容。
(/= (CMP8 input6 91))
(/= (CMP8 input6 40))
 (/= (CMP8 input6 123))
(/= (CMP8 input6 63))
(/= (CMP8 input6 97))
 (/= (CMP8 input6 120))
 (/= (CMP8 input6 125))
(/= (CMP8 input6 41))
(/= (CMP8 input6 93))
(/= (CMP8 (EXT0_7 (CAT8_24 input4 (CAT8_16 input3 (CAT8_8 input2 input1)))) 114))
示例                                                 路径约束条件表达式
其中input6是字符c对应的符号,91,40等值是‘[’、‘(’等字符对应的ASCII码值。该格式是由PIN执行(插桩模块说明)的输出格式。将第一条转换成易理解的格式为“input6/= 91”。
2)          使用Generational算法对每条约束条件都取反,生成该路径邻近的所有路径对应的路径约束条件。Generational算法是微软资深软件测试工程师Patrice Godfroid提出的一种动态符号测试算法。该算法将路径约束条件中的每一条路径都取反,从而生成一堆测试用例,从中选择能覆盖最多代码块的测试用例驱动下次符号执行。
3)        用求解器对生成的每个路径约束条件分别求解,生成测试用例集合。这里说明一下,动态符号执行搜集到的路径约束条件都是SMT问题,而求解器就是用来求解这些问题是否可满足的,并给出一组可满足值。例如,表达式x-y>0,是可满足的,可给出满足该公式的一组值(2,1);x2+y2<0是不可满足的,不能给出一组(i0,i1)值,使该表达式成立。常见的SMT求解器有STP,CVC,OpenSMT,Yices,Z3等,在本模块中选择STP作为SMT的求解器。
4)        在测试用例集合中选择新代码块增量最大的测试用例作为该模块的返回值。如果本次符号执行没有新的代码块被检测到,那么从测试用例集合中随机选择一个测试用例作为1)的输入驱动下一次的符号执行,直到有新的代码块被检测到。
3.       插桩模块
该模块的功能是对运行时的被测程序进行动态二进制插桩,记录已被测试到的代码块,并在符号执行时搜集路径约束条件。对动态程序插桩是动态符号执行的一项基本且不可或缺的措施。现有的二进制插桩工具有ATOM、Dynins、Valgrind、PIN、Nirvana、HDTrans等,在本方案中采用PIN作为插桩工具。PIN是一款开源的动态插桩工具,支持IA-32,Intel(R)64,IA-64指令结构,可用于Windows OS和Linux系列操作系统平台上,PIN可以将任意代码植入处于运行态程序的任意位置,跟踪指令流程,并记录寄存器、内存的数据信息。另外,本方案在测试之前还使用了一个IDA Pro的插件,用来搜集静态可执行程序的所有基本块。通过动态获取的基本块与静态基本块的比值可以得出当前的代码覆盖率。
在动态符号执行时,通过对被测程序插桩,可以监测符号的流动路径、操作运算,从而收集路径约束条件。
4.       状态检测模块
本模块有两个功能,一是检测随机执行是否达到饱和,即代码覆盖率不再增加,从而调用符号切换模块,准备切换到动态符号执行模块执行。该部分功能的实现是在每次随机测试后都检测当前的代码覆盖率增量。若在一定界限内(本示例设置为50)该增量为0,说明当前随机测试因特定值的选取而陷入,使代码覆盖率达到饱和,需要使用动态符号执行来破解该陷入,探索新的代码块。
另一功能是检测动态符号执行是否检测到新的代码块,从而调用随机还原模块,准备还原到随机测试模块。如果动态符号执行检测到新的代码块,则代码覆盖率必定有所增加,根据该增量标志,使动态符号执行退出,切换到随机测试模块继续运行。
该模块的输入是一个布尔值的转换标识符translate,当该值为false时切换到符号执行模块,值为true时切换到随机测试模块。
5.       符号切换模块
该模块的功能是从随机测试切换到符号执行。使用如虚拟机的快照方式保存当前的测试状态(如已执行的路径、已覆盖代码块等),并创建动态符号执行子进程,且将当前父进程挂起。子进程继承父进程的所有资源,所以在动态符号执行时不会重复执行已被测试的路径。
6.       随机还原模块
该模块的功能是从动态符号执行模块还原到随机测试模块。该模块是在动态符号执行检测到新的代码块后,退出动态符号执行子进程,且将随机测试父进程唤醒。并用动态符号子进程产生的新的测试用例更新原来的测试用例,使随机测试模块跳出原来的陷入状态,从不同的代码块继续执行。
下面简单的给出了本发明的实现步骤:
1)      对被测程序执行随机检测,并计算代码覆盖率。如果代码覆盖率的增量为0),即代码覆盖率达到饱和,则转到2),否则继续1)的随机检测。
2)      保存当前的检测状态(已检测的路径、已覆盖的代码块等),创建动态符号执行子进程。
3)      动态符号执行被测程序,探索新的代码块,如果有新的代码块被检测到,则转到4),如果所有的基本块都已被覆盖,则转到5)退出测试,否则继续3)的符号执行。
4)      状态还原到随机执行状态,并将当前的测试用例更替父进程的测试用例,唤醒父进程,退出当前子进程,转到1)。
5)      结束。
其中各个模块之间的衔接并没有明显的分割,如随机还原模块完成后是回到了随机模块的第3)步,利用新的测试用例继续执行,状态检测模块是在随机测试模块和动态符号执行模块的内部展现其功能的。
本发明结合随机测试的快速性、低开销以及符号执行的全面性、探索新代码块的特性,避免了随机测试因需取特定值时面临的小概率性、不确定性以及动态符号执行因程序较大或循环引起的路径爆炸问题,从而能够更全面、更快速的测试软件,并且与完全的动态符号执行相比大大降低了软件测试的开销。能够全面检测较大应用程序,能够缓解动态符号执行面临的路径爆炸问题。

Claims (3)

1.一种用于软件测试的交叉动态法,其特征在于,包括如下步骤:
(1)通过动态随机测试法对被测程序执行随机检测,检测程序漏洞,如果检测到程序异常则记录异常信息退出测试,否则在本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和,如果饱和则调用符号切换函数,切换到动态符号执行,将随机检测进程挂起,否则继续进行下次测试,直到检测到代码覆盖率饱和;
(2)通过动态符号执行法搜索新的未被覆盖代码块,如果有新的代码块被检测到则将状态还原到步骤(1)的随机检测状态,如果所有的基本块都已被覆盖,则退出测试;
所述代码覆盖率的计算方法为:在测试之前使用一个IDA Pro的插件,用于搜集静态可执行程序的所有基本块,通过动态获取的基本块与静态基本块的比值得出当前的代码覆盖率;
所述动态符号执行法包括如下步骤:
①利用随机测试法中的测试用例实际执行被测程序同时进行动态符号执行,搜集路径约束条件;
②使用Generational算法对每条约束条件都取反,生成此次动态符号执行路径邻近的所有路径对应的路径约束条件;
③用求解器对生成的每个路径约束条件分别求解,生成测试用例集合;
④在测试用例集合中选择新代码块增量最大的测试用例作为动态符号执行模块的返回值,如果本次符号执行没有新的代码块被检测到,那么从测试用例集合中随机选择一个测试用例作为①的输入驱动下一次的符号执行,直到有新的未被覆盖代码块被检测到;
随机测试具体执行流程如下:
1)分析被测程序类型,选择一款Fuzzing工具,转到2);
2)利用Fuzzing工具产生随机值,形成输入测试用例,转到3);
3)对被测程序插桩,将输入测试用例作为输入运行程序,监视程序的运行状态,并且保存随机测试路径覆盖的代码块,如果检测到程序异常则转到6),否则转到4);
4)本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和,如果达到则转到5),否则转到2)继续进行下次测试;
5)调用符号切换函数,准备切换到符号执行,随机测试进程将被挂起;
6)记录异常信息,包括异常的地址、触发异常的测试用例,转到7);
7)退出测试。
2. 一种用交叉动态法测试软件的装置,其特征在于,包括:
随机测试模块,用于实现随机检测功能,并计算代码覆盖率,检查代码覆盖率是否达到饱和;
动态符号执行模块,根据随机测试模块已测试的程序状态,利用动态符号执行,探索新的未被覆盖的代码块;
插桩模块,用于对被测程序插桩,搜集随机执行和动态符号执行覆盖到的代码块信息,同时在动态符号执行时搜集路径约束条件;
符号切换模块,用快照方式保存被测程序的当前状态,并创建子进程执行动态符号测试,父进程挂起等待子进程唤醒,子进程继承了父进程的当前所有状态,保证从当前状态继续执行;
随机还原模块,用动态符号执行产生的,能覆盖新代码块的测试用例更新父进程的输入,唤醒父进程,子进程退出,从当前状态继续执行随机测试;
状态检测模块,用于检测随机测试模块执行是否达到饱和,从而调用符号切换模块,准备切换到动态符号执行模块执行;同时检测动态符号执行是否检测到新的代码块,从而调用随机还原模块,准备还原到随机测试模块;
随机测试模块具体执行流程如下:
1)分析被测程序类型,选择一款Fuzzing工具,转到2);
2)利用Fuzzing工具产生随机值,形成输入测试用例,转到3);
3)对被测程序插桩,将输入测试用例作为输入运行程序,监视程序的运行状态,并且保存随机测试模块路径覆盖的代码块,如果检测到程序异常则转到6),否则转到4);
4)本次执行完后,计算代码覆盖率,检查代码覆盖率是否达到饱和,如果达到则转到5),否则转到2)继续进行下次测试;
5)调用符号切换函数,准备切换到符号执行,随机测试进程将被挂起,
6)记录异常信息,包括异常的地址、触发异常的测试用例,转到7);
7)退出测试。
3.根据权利要求2所述的用交叉动态法测试软件的装置,其特征在于:所述插桩模块采用PIN工具。
CN201110371268.2A 2011-11-21 2011-11-21 一种用于软件测试的交叉式动态法和装置 Expired - Fee Related CN102508780B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110371268.2A CN102508780B (zh) 2011-11-21 2011-11-21 一种用于软件测试的交叉式动态法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110371268.2A CN102508780B (zh) 2011-11-21 2011-11-21 一种用于软件测试的交叉式动态法和装置

Publications (2)

Publication Number Publication Date
CN102508780A CN102508780A (zh) 2012-06-20
CN102508780B true CN102508780B (zh) 2014-08-20

Family

ID=46220872

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110371268.2A Expired - Fee Related CN102508780B (zh) 2011-11-21 2011-11-21 一种用于软件测试的交叉式动态法和装置

Country Status (1)

Country Link
CN (1) CN102508780B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106250253A (zh) * 2016-07-19 2016-12-21 努比亚技术有限公司 一种移动终端测试装置及测试方法

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105302707B (zh) * 2014-06-06 2019-01-08 腾讯科技(深圳)有限公司 应用程序的漏洞检测方法和装置
CN104375942B (zh) * 2014-12-11 2017-02-08 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN106325827B (zh) * 2015-06-16 2019-07-19 深圳市中兴微电子技术有限公司 一种随机测试程序生成方法及装置
CN105117341B (zh) * 2015-09-06 2017-11-17 电子科技大学 一种基于动态符号执行的分布式自动测试案例生成方法
CN105281977B (zh) * 2015-10-21 2018-04-03 北京软件产品质量检测检验中心 一种基于二叉树算法的智能性能测试方法及系统
CN105607995A (zh) * 2015-11-11 2016-05-25 北汽福田汽车股份有限公司 一种软件测试系统、方法及装置
CN106341681B (zh) * 2016-08-09 2018-08-07 青岛海信传媒网络技术有限公司 电视应用程序测试方法及装置
CN107168881A (zh) * 2017-06-07 2017-09-15 成都四象联创科技有限公司 代码异常定位与处理方法
CN108334773A (zh) * 2017-09-11 2018-07-27 北京安天网络安全技术有限公司 一种执行文件检测行为的不同分支的方法和装置
CN108459938A (zh) * 2017-12-26 2018-08-28 海南智媒云图科技股份有限公司 一种php代码数据监控收集的方法及装置
US11151018B2 (en) * 2018-04-13 2021-10-19 Baidu Usa Llc Method and apparatus for testing a code file
CN108845944B (zh) * 2018-06-28 2021-10-15 中国人民解放军国防科技大学 一种结合符号执行提高软件模糊测试效率的方法
CN110135165B (zh) * 2019-04-12 2023-06-09 江苏大学 一种动态化的分级多粒度模糊测试漏洞挖掘方法
CN111090586B (zh) * 2019-12-09 2024-02-09 广州品唯软件有限公司 代码覆盖率数据文件的上报方法、装置和计算机设备
CN111581084B (zh) * 2020-04-28 2021-01-26 南方电网数字电网研究院有限公司 基于智能电表操作系统的进程测试方法和装置
CN113486358B (zh) * 2021-07-09 2023-06-02 建信金融科技有限责任公司 一种漏洞检测方法及装置
CN115292206B (zh) * 2022-10-08 2023-03-14 西安深信科创信息技术有限公司 软件漏洞检测方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761408A (en) * 1996-01-16 1998-06-02 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution
CN101833500A (zh) * 2010-04-07 2010-09-15 南京航空航天大学 一种基于Agent的嵌入式软件智能测试方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030188298A1 (en) * 2002-03-29 2003-10-02 Sun Microsystems, Inc., A Delaware Corporation Test coverage framework

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761408A (en) * 1996-01-16 1998-06-02 Parasoft Corporation Method and system for generating a computer program test suite using dynamic symbolic execution
CN101833500A (zh) * 2010-04-07 2010-09-15 南京航空航天大学 一种基于Agent的嵌入式软件智能测试方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于符号测试的FUZZING测试方法;陈建敏等;《计算机工程》;20091130;第35卷(第21期);第33页,图1 *
陈建敏等.基于符号测试的FUZZING测试方法.《计算机工程》.2009,第35卷(第21期),第33页及图1.

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106250253A (zh) * 2016-07-19 2016-12-21 努比亚技术有限公司 一种移动终端测试装置及测试方法
CN106250253B (zh) * 2016-07-19 2019-10-15 努比亚技术有限公司 一种移动终端测试装置及测试方法

Also Published As

Publication number Publication date
CN102508780A (zh) 2012-06-20

Similar Documents

Publication Publication Date Title
CN102508780B (zh) 一种用于软件测试的交叉式动态法和装置
CN102385550B (zh) 一种针对软件缺陷的检测方法
CN102708045B (zh) 一种缓解路径爆炸的动态符号执行方法
CN103116540B (zh) 基于全局超级块支配图的动态符号执行方法
CN104598383A (zh) 一种基于模式的动态漏洞挖掘集成系统和方法
CN104573524A (zh) 一种基于静态检测的模糊测试方法
CN104766015B (zh) 一种基于函数调用的缓冲区溢出漏洞动态检测方法
CN105868116A (zh) 基于语义变异算子的测试用例生成和优化方法
CN106055479B (zh) 一种基于强制执行的Android应用软件测试方法
CN101853200A (zh) 一种高效动态软件漏洞挖掘方法
CN103714000A (zh) 一种面向敏感区域的嵌入式软件测试用例生成方法
CN105446881A (zh) 一种程序不可达路径的自动检测方法
CN104635144A (zh) 一种不依赖基准曲线的硬件木马检测方法
CN106546278A (zh) 验证核安全级仪控平台安全失效率的统计测试装置及方法
CN105260312A (zh) 一种多核实时系统应用数据竞争错误的调试方法
CN101458630B (zh) 一种基于硬件模拟器的自修改代码识别方法
Hao et al. Constructing benchmarks for supporting explainable evaluations of static application security testing tools
Bae et al. On the relative strengths of model-based and dynamic event extraction-based GUI testing techniques: An empirical study
CN105487983A (zh) 基于智能路径引导的敏感点逼近方法
Ren et al. A dynamic taint analysis framework based on entity equipment
Zhang A framework of vulnerable code dataset generation by open-source injection
Han et al. A heuristic model-based test prioritization method for regression testing
Ai et al. A novel concolic execution approach on embedded device
Yuan et al. A method for detecting buffer overflow vulnerabilities
Zhang et al. GoDetector: Detecting concurrent bug in go

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: NO.54 INST., THE HEADQUARTERS OF THE GENERAL STAFF

Effective date: 20130822

C41 Transfer of patent application or patent right or utility model
C53 Correction of patent of invention or patent application
CB03 Change of inventor or designer information

Inventor after: Zhang Xiaosong

Inventor after: Chen Ting

Inventor after: Guo Shize

Inventor after: Ji Xiaoli

Inventor after: Zhu Cong

Inventor after: Wang Yuchao

Inventor before: Chen Ting

Inventor before: Zhang Xiaosong

Inventor before: Ji Xiaoli

Inventor before: Zhu Cong

Inventor before: Wang Yuchao

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: CHEN TING ZHANG XIAOSONG JI XIAOLI ZHU CONG WANG YUCHAO TO: ZHANG XIAOSONG CHEN TING GUO SHIZE JI XIAOLI ZHU CONG WANG YUCHAO

TA01 Transfer of patent application right

Effective date of registration: 20130822

Address after: 611731 Chengdu province high tech Zone (West) West source Avenue, No. 2006

Applicant after: University of Electronic Science and Technology of China

Applicant after: No.54 Inst., The Headquarters of the General Staff, P. L. A.

Address before: 611731 Chengdu province high tech Zone (West) West source Avenue, No. 2006

Applicant before: University of Electronic Science and Technology of China

C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140820

Termination date: 20191121