一种针对嵌入式软件的测试用例自动化生成装置及其方法

文档序号:6619830阅读:318来源:国知局
一种针对嵌入式软件的测试用例自动化生成装置及其方法【专利摘要】本发明公开了一种针对嵌入式软件的测试用例自动化生成装置及其方法,属于软件测试【
技术领域
】,包括符号执行核心模块、路径选择模块、求解器、调试器、实际执行核心模块和调试代理模块。被测试软件、测试用例通过调试器和调试代理从主机系统上传到嵌入式系统;实际执行核心模块启动被测软件,符号执行核心模块通过调试器获取被测软件的运行时信息,当被测软件操作符号源时,符号执行核心模块标记符号源、跟踪符号传播、产生路径条件,并将路径条件发送到路径选择模块,再将修改后的路径条件发送给求解器;如果存在解,则产生相应的测试用例。本发明能够自动产生嵌入式软件的测试用例。不需要被测软件的源码便可处理商用软件。【专利说明】一种针对嵌入式软件的测试用例自动化生成装置及其方法【
技术领域
】[0001]本发明属于软件测试【
技术领域
】,具体一种针对嵌入式软件的测试用例自动化生成方法及其装置,其被测试的程序为嵌入式软件,可自动化的产生测试用例。【
背景技术
】[0002]由于搭载嵌入式软件的设备的广泛应用,嵌入式软件质量成为了关乎国民经济和个人生命财产安全的关键。软件测试是一种提高软件质量的常用方式,但传统的方法不能彻底的测试嵌入式软件,其原因在于测试用例不能覆盖所有可能的执行情况。[0003]符号执行技术最早在1970年左右提出,并在近年成为了研究热点。动态符号执行技术是符号执行技术的变种,它将符号执行与实际执行结合起来。通俗来说,动态符号执行将被测试软件运行起来,在执行期间搜集路径条件,通过求解路径条件来产生新的测试用例。在理论上,动态符号执行技术可以彻底地测试被测软件,因为新产生的测试用例能够覆盖未执行的路径。[0004]但由于嵌入式系统的软硬件能力,尤其是处理器的计算能力与存储器的存储空间的限制,导致现有的在通用计算平台运行良好的动态符号执行软件无法直接应用于嵌入式软件。而考虑到求解器与插桩软件等的复杂性,直接将通用平台的动态符号执行软件移植到嵌入式系统上会带来极大的开发工作量。[0005]在文献《SCORE:ascalableconcolictestingtoolforreliableembeddedsoftware》中,Kim等研究者将CREST和KLEE移植到了嵌入式系统上。与之相似的方法在5篇论文中有报道〈〈Concolictestingonembeddedsoftware-casestudiesonmobileplatformprograms))>((Industrialapplicationofconcolictestingonembeddedsoftware:Casestudies》、《Acasestudyon1ibexifbyusingCREST-BVandKLEE》、〈〈Scalabledistributedconcolictesting:acasestudyonaflashstorageplatform〉〉、〈〈Concolictestingofthemulti-sectorreadoperationforflashmemoryfilesystem〉〉。这几篇文献提出的方式是类似的,主要为以下几点:(1)修改现有的通用平台的动态符号执行软件CREST或KLEE;(2)使用修改后的动态符号执行软件对被测软件的源程序插桩;(3)在嵌入式系统上运行被插桩的被测软件;(4)在嵌入式系统上利用修改后的求解器产生新的测试用例。这类方法主要有以下缺点:(1)需要被测软件的C/C++的源程序;(2)需要对通用动态符号执行软件和求解器进行大范围的修改,(3)这类方法的符号执行部分运行在嵌入式系统上,导致极大的资源开销。[0006]在文献《StructuralTestingofExecutables》和《OSMOSE:Automaticstructuraltestingofexecutables》中,Bardin等人提出将被测软件的可执行代码翻译为中间语言,然后在模拟器中符号执行中间语言。这类方法存在以下问题:这类方法针对不同的嵌入式系统,需要开发相应的模拟器;(2)被测软件在模拟器中的执行情况不一定是真实的执行情况。[0007]文献《Unleashingmayhemonbinarycode》提出将动态符号执行分为实际执行进程与符号执行进程,实际执行进程在目标系统上运行,而符号执行进程在任意平台运行。该方法存在以下缺点:(1)该方法的实际执行部分包含污点跟踪、动态二进制插桩、虚拟机等开销很大的功能模块,不适合在嵌入式系统上运行;(2)为了能够在嵌入式系统上运行动态污点分析,该方法需要移植污点跟踪软件、动态二进制插桩软件、虚拟机;(3)该方法采用混合(hybrid)符号执行;(4)该方法设计并实现了跨平台的轻量级的RPC协议,用来连接实际执行进程与符号执行进程但该方法尚未应用于嵌入式软件测试。【
发明内容】[0008]针对上述现有技术问题,本发明的目的在于提供一种针对嵌入式软件的测试用例自动化生成方法及其装置,该方法能够适应嵌入式系统的软硬件能力,能最大程度地利用现有的通用计算平台上的动态符号执行软件,因此代码移植工作量低;该方法还能够获得真实的软件运行情况、避免误报,并且不需要被测软件的源代码,因而能方便地测试商用嵌入式软件。[0009]为了达到上述目的,本发明采用如下技术方案:一种针对嵌入式软件的测试用例自动化生成装置,其特征在于,包括以下器件:主机系统:运行符号执行部分;嵌入式系统:运行实际执行部分;符号执行核心模块:标记符号源、跟踪符号传播、产生路径条件、运行时维护被测软件的执行树;路径选择模块:运行路径选择算法;求解器:判断路径条件是否满足,如果不满足则表示对应的路径不可行,如果满足,产生一组赋值,这组赋值被解释为新的测试用例,该测试用例能够覆盖路径条件对应的路径;测试用例选择器:从测试用例池中选择一个测试用例,作为被测试软件的输入;调试器:是主机系统上唯一与嵌入式系统通信的模块,负责从符号执行核心模块接收被测软件与命令,从测试用例选择器接收测试用例,发送命令、被测软件、测试用例到嵌入式系统,从嵌入式系统接收被测软件运行时信息再发送给符号执行核心模块;中间语言翻译模块:将机器指令翻译为中间语言,根据符号执行核心模块能够处理的中间语言类型和机器指令类型来选择;实际执行核心模块:负责实际执行部分的主要功能,包括:启动和停止被测软件、设置断点、单步调试、继续执行被测软件、获取指定寄存器和内存的值;调试代理模块:是嵌入式系统上唯一与主机系统通信的模块,负责将命令重定向到实际执行核心模块,发送被测软件的运行时信息到主机系统;被测试软件、测试用例通过调试器和调试代理从主机系统上传到嵌入式系统;所述实际执行核心模块启动被测软件;符号执行核心模块通过调试器获取被测软件的运行时信息,当被测软件操作符号源时,符号执行核心模块完成符号源的标记工作并跟踪符号传播,产生路径条件,再将路径条件发送到路径选择模块,路径选择模块根据路径选择算法构造一条或者多条路径条件,再将其发送给求解器;求解器将输入的路径条件求解,如果存在解,则产生相应的测试用例,并全部存放到主机系统上的用例池中。[0010]在本发明中,所述符号源为用户可以直接操作的数据,如磁盘文件、网络数据包、键盘输入。[0011]在本发明中,所述路径选择算法主要包括深度优先、广度优先、generational搜索、随机搜索。[0012]基于上述测试用例自动化生成装置的测试用例自动化生成方法,其特征在于,将动态符号执行分解为实际执行与符号执行两部分,实际执行部分运行在嵌入式系统,符号执行部分运行在主机系统;该方法主要包括以下步骤:51:启动主机系统和嵌入式系统,被测试软件通过调试器和调试代理从主机系统上传到嵌入式系统,初始测试用例也通过调试器和调试代理从主机系统上传到嵌入式系统,初始测试用例通常随机产生;52:实际执行核心模块启动被测软件;53:符号执行核心模块通过调试器获取被测软件的运行时信息,当被测软件操作符号源时,符号执行核心模块完成符号源的标记工作;54:符号执行核心模块跟踪符号传播,并产生路径条件,在此过程中通过调试器获得被测软件的运行时信息;S5:当被测软件停止即运行完正常退出或者发生异常时,符号执行核心模块将路径条件发送到路径选择模块,路径选择模块根据路径选择算法构造一条或者多条路径条件,再将其发送给求解器;56:求解器将输入的路径条件求解,如果存在解,则产生相应的测试用例,并全部存放到用例池中;如果不存在解,则进入步骤S7;57:符号执行核心模块判断是否应该结束,如果是,则停止整个系统,如果不是,测试用例选择器则选择新的测试用例,作为被测软件的输入,并返回步骤S2。[0013]更进一步地,在步骤S7中,停止条件包括被测软件所有路径已经覆盖、达到了预先设定的代码覆盖率、发现被测软件的bug、达到了预先设定的测试预算。[0014]本发明同现有技术相比,其有益效果表现在:一、实际执行部分运行在嵌入式系统能够获得准确的被测软件运行信息,这种方式比运行在模拟器中更准确;只有实际执行发生在嵌入式系统上,不会给嵌入式系统带来额外的开销;二、符号执行部分运行在主机系统,这样将开销巨大的符号执行限制在强大的主机系统上,能够避免嵌入式系统软硬件能力低下的问题;又可以在最大程度上利用现有的通用计算平台的动态符号执行软件,从而大大减少了软件开发工作;三、本发明利用现有的中间代码翻译模块,根据需要,将机器指令翻译为中间语言形式,因此本发明不需要被测软件的源代码;四、能够克服嵌入式系统软硬件能力低下的缺陷,可自动产生嵌入式软件的测试用例。【专利附图】【附图说明】[0015]图1是本发明的总体架构图;图2为本发明实施例采用的SC-UE方法示意图。【具体实施方式】[0016]下面将结合附图及【具体实施方式】对本发明作进一步的描述。实施例[0017]针对风河公司开发的版本号为6.6的嵌入式操作系统VxWorks将前期开发的通用计算平台上的动态符号执行软件SMAFE移植到VxWorks上。SMAFE本身是针对x86/Windows平台的,采用动态二级制插桩软件Pin,求解器采用STP,代码量在1万行C/C++源码左右。采用本专利提出的方法,编码量为1500行C/C++代码就将其移至到x86/VxWorks平台。关于SMAFE的详细资料,可以参考我们之前的学术论文《Designandimplementationofadynamicsymbolicexecutiontoolforwindowsexecutables》。由于SMAFE可以直接符号执行x86机器指令,因此将其移植到x86/VxWorks平台不需要代码翻译过程。[0018]SMAFE中有部分代码直接调用Pin,这部分代码需要进行移植,而其他大量的代码可以不经任何修改直接采用,例如:路径选择模块、求解器、测试用例选择器、跟踪符号传播等。利用风和公司自带的WTX协议来获取被测软件运行时信息,也就是实现符号执行部分与实际执行部分的通信与同步功能。表1列出了本实施例使用到的WTX协议提供的API函数及其使用说明。[0019]表1本实施方式使用的WTX协议API【权利要求】1.一种针对嵌入式软件的测试用例自动化生成装置,其特征在于,包括以下器件:主机系统:运行符号执行部分;嵌入式系统:运行实际执行部分;符号执行核心模块:标记符号源、跟踪符号传播、产生路径条件、运行时维护被测软件的执行树;路径选择模块:运行路径选择算法;求解器:判断路径条件是否满足,如果不满足则表示对应的路径不可行,如果满足,产生一组赋值,这组赋值被解释为新的测试用例,该测试用例能够覆盖路径条件对应的路径;测试用例选择器:从测试用例池中选择一个测试用例,作为被测试软件的输入;调试器:是主机系统上唯一与嵌入式系统通信的模块,负责从符号执行核心模块接收被测软件与命令,从测试用例选择器接收测试用例,发送命令、被测软件、测试用例到嵌入式系统,从嵌入式系统接收被测软件运行时信息再发送给符号执行核心模块;中间语言翻译模块:将机器指令翻译为中间语言,根据符号执行核心模块能够处理的中间语言类型和机器指令类型来选择;实际执行核心模块:负责实际执行部分的主要功能,包括:启动和停止被测软件、设置断点、单步调试、继续执行被测软件、获取指定寄存器和内存的值;调试代理模块:是嵌入式系统上唯一与主机系统通信的模块,负责将命令重定向到实际执行核心模块,发送被测软件的运行时信息到主机系统;被测试软件、测试用例通过调试器和调试代理从主机系统上传到嵌入式系统;所述实际执行核心模块启动被测软件;符号执行核心模块通过调试器获取被测软件的运行时信息,当被测软件操作符号源时,符号执行核心模块完成符号源的标记工作并跟踪符号传播,产生路径条件,再将路径条件发送到路径选择模块,路径选择模块根据路径选择算法构造一条或者多条路径条件,再将其发送给求解器;求解器将输入的路径条件求解,如果存在解,则产生相应的测试用例,并全部存放到主机系统上的用例池中。2.根据权利要求1所述的针对嵌入式软件的测试用例自动化生成装置,其特征在于,所述符号源为用户可以直接操作的数据,如磁盘文件、网络数据包、键盘输入。3.根据权利要求1所述的针对嵌入式软件的测试用例自动化生成装置,其特征在于,所述路径选择算法包括深度优先、广度优先、generational搜索、随机搜索。4.一种针对嵌入式软件的测试用例自动化生成方法,其特征在于,将动态符号执行分解为实际执行与符号执行两部分,实际执行部分运行在嵌入式系统,符号执行部分运行在主机系统;该方法主要包括以下步骤:51:启动主机系统和嵌入式系统,被测试软件通过调试器和调试代理从主机系统上传到嵌入式系统,初始测试用例也通过调试器和调试代理从主机系统上传到嵌入式系统,初始测试用例通常随机产生;52:实际执行核心模块启动被测软件;53:符号执行核心模块通过调试器获取被测软件的运行时信息,当被测软件操作符号源时,符号执行核心模块完成符号源的标记工作;54:符号执行核心模块跟踪符号传播,并产生路径条件,在此过程中通过调试器获得被测软件的运行时信息;S5:当被测软件停止即运行完正常退出或者发生异常时,符号执行核心模块将路径条件发送到路径选择模块,路径选择模块根据路径选择算法构造一条或者多条路径条件,再将其发送给求解器;56:求解器将输入的路径条件求解,如果存在解,则产生相应的测试用例,并全部存放到用例池中;如果不存在解,则进入步骤S7;57:符号执行核心模块判断是否应该结束,如果是,则停止整个系统,如果不是,测试用例选择器则选择新的测试用例,作为被测软件的输入,并返回步骤S2。5.根据权利要求4所述的针对嵌入式软件的测试用例自动化生成方法,其特征在于,在步骤S7中的停止条件包括被测软件所有路径已经覆盖、达到了预先设定的代码覆盖率、发现被测软件的bug、达到了预先设定的测试预算。【文档编号】G06F11/36GK104063325SQ201410329276【公开日】2014年9月24日申请日期:2014年7月11日优先权日:2014年7月11日【发明者】陈厅,张小松,王东,陈瑞东,牛伟纳,汪小芬申请人:电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1