一种基于动态符号执行的分布式自动测试案例生成方法

文档序号:9396807阅读:311来源:国知局
一种基于动态符号执行的分布式自动测试案例生成方法
【技术领域】
[0001] 本发明属于软件测试案例自动生成技术领域,该方法以路径覆盖为目标生成测试 案例集,每一个测试案例触发的被测程序执行路径都是不同的,进而实现在有限的时间内 能够生成具有高路径覆盖度的测试案例集。
【背景技术】
[0002] 程序的一次执行过程对应着程序的一条执行路径,程序的输入参数决定程序执行 的路径,一组输入参数值称为一个测试案例。测试案例生成是软件测试过程中的重要环 节,测试案例自动生成可有效地减轻测试人员的劳动强度,降低软件开发成本,同时提高测 试效率。符号执行是一种典型的测试案例自动生成技术,主要用于测试中在给定的时间内 尽可能充分地执行程序所有可能的路径,使用满足性判定和定理证明约束求解器(以下简 称 SMT(Satisfiability Modulo Theories)求解器,如 YICES、STP、Z3、CVC 等)自动生成 对应于这些路径的输入参数的值。传统符号执行也叫静态符号执行,是一种有效的基于程 序执行路径的静态程序分析技术。传统符号执行不真实执行程序,它使用符号变量代替程 序变量的输入值,然后基于符号变量模拟程序执行即符号执行,在执行过程中收集程序执 行路径中各个分支(if (条件表达式)then语句I else语句2)处包含符号输入的条件表 达式称为符号约束条件,程序执行结束时,符号执行就可以获得对应于每个分支点的符号 约束条件,所有约束条件的集合称为该次执行过程的路径约束条件,然后使用SMT求解器 为每条执行路径所对应的约束条件集计算满足解,生成该程序路径的一个测试案例。传统 符号执行存在很多不足:一是由于使用符号值代替真实值执行程序,当遇到二进制代码或 者没有源代码的库函数时,无法得到精确的约束条件,这样就会造成所求结果不准确,进而 导致误报现象;二是在处理大规模的或者较为复杂的程序时,由于计算复杂度过高导致无 法生成具有较高路径覆盖度的测试案例集。
[0003] 动态符号执行则解决了传统方法的不足,其基本思想是使用测试案例输入参数的 真实值和符号值让程序同时进行真实执行和符号执行,真实执行反应程序的实际执行过 程,符号执行收集关于符号变量的符号约束条件,程序执行结束时,得到本次执行路径的路 径约束条件。由于被测程序真实地执行了,所以收集到的路径约束条件能够真实反映程序 本身的语义,因而在动态符号执行中不会出现如静态符号执行的误报,并且也有助于对复 杂数据结构进行分析处理。另外,由于程序的真实执行状态被记录,一旦遇到SMT求解器不 可判定的路径约束条件时便可使用程序变量的实际值替代符号值,使后续的路径搜索过程 可以继续进行,因此相比传统符号执行,动态符号执行可达到更高的覆盖率,所以被广泛的 应用于程序测试与验证中。动态符号执行使用插粧的方式来实现约束条件的提取,即在被 测程序中插入一些程序片段(函数),这些函数可以在程序执行时提取路径约束条件并记 录程序状态。目前动态符号执行的实现方式是测试案例自动生成工具与被测程序运行在同 一机器中,要求两者使用同样的操作系统运行平台,当被测程序和工具的平台不一致时,就 需要对被测程序的平台进行仿真。目前大多只支持X86平台,然而被测程序的平台多种多 样,例如仅硬件关联度较高的嵌入式平台就有很多种,进行仿真的工作量很大,不易实现, 适用性有限。同时,它使用串行的方式,即被测程序运行一次,将收集到的路径约束条件信 息传给动态符号执行工具,工具为其生成测试案例再调用被测程序执行,如此反复,直到达 到终止条件。这样,测试案例自动生成工具中的SMT求解器进行可满足解计算时被测程序 要等待SMT求解器计算结果,程序运行时SMT求解器也要等待被测程序的执行结果,二者不 可同时进行。另外,目前各工具支持的SMT求解器很有限,且SMT求解器与测试案例自动生 成工具需紧耦合,不同的SMT求解器擅长的约束条件求解类型不同,不同类型的约束条件 的最优求解器也不同,紧耦合的方式不利于进行SMT求解器扩展。

【发明内容】

[0004] 本发明的目的是针对【背景技术】存在的缺陷,研究开发一种基于动态符号执行的分 布式自动测试案例生成方法,该方法将被测程序和测试案例自动生成工具进行平台分离, 使被测程序在真实环境中执行,支持平台多样的程序测试,同时提供不同的测试覆盖标准, 以提高测试效率及满足不同的测试需求。从而达到可同时进行多个测试,并有效提高测试 的可靠性和有效性、测试工具的利用率及测试效率等目的。
[0005] 本发明的解决方案是:首先将被测程序进行插粧并交叉编译为被测程序对应平台 的可执行程序,在被测程序运行的过程中通过网络标准化接口将路径约束条件传输到测试 案例自动生成工具,测试案例自动生成工具基于路径约束条件生成对应路径的测试案例, 再通过网络标准化接口将测试案例传递给被测程序继续执行,将被测程序与测试案例自动 生成工具分离,使被测程序在测试中可在真实平台上运行,从而克服了被测程序和测试案 例自动生成工具的运行平台必须一致的弊病;另外,本发明中测试案例自动生成工具采用 服务器集群或云服务平台,采用并行处技术确定多条路径约束条件的满足解,以提高测试 案例自动生成的效率;同时,提供多种遍历方法以满足不同的测试需求,除了常用的随机 遍历、深度优先搜索遍历外,还提供多种高效遍历策略,主要包括:1.并行深度优先搜索遍 历,将路径决定参数的所有取值可能分为多个范围,这些范围完全并行进行深度优先搜索 遍历,既保证了执行程序的所有路径,又可以在有限的时间内较快地获得高分支覆盖并缩 短测试时间;2.基于程序CFG(Control flow graph,控制流图)的并行遍历,并行地以最 快的方式覆盖控制流图中的每个分支,实现程序的分支全覆盖;3.并行的随机搜索与深度 优先搜索相结合的遍历,以综合两者的优点(即随机测试的分散性和深度优先搜索的彻底 性);4.根据CFG将其中相似度较高的路径丢弃的深度优先遍迈,用以在测试大规模程序无 法实现完全路径覆盖时,根据CFG丢弃一些相似度较高的路径,在保证分支全覆盖的前提 下进行非完全路径覆盖。因此,本发明方法包括:
[0006] 步骤1.测试设备配置:采用带操作系统的微机(个人电脑)、小型机作为预处理 机,带有CPU、内存和数据通信接口及操作系统的嵌入式设备作为被测程序运行装置,采用 带操作系统的服务器作为测试案例自动生成装置;预处理机与被测程序运行装置及服务器 之间、被测程序运行装置与服务器之间均分别通过通信接口连接,待用;
[0007] 步骤2.被测程序的预处理:当预处理机收到被测程序后,首先采用动态符号执行 技术对被测程序中确定路径的参数变量进行符号化标识,再对源码或格式化的中间代码进 行插粧处理并在程序的每个语句前插入符号执行函数的同时提取程序的分支信息、控制流 图信息,然后将插粧处理后的被测程序交叉编译成(被测程序运行装置)嵌入式操作系统 的可执行文件,最后将可执行文件发送给被测程序运行装置、将程序的分支信息和控制流 图信息发送给测试案例自动生成装置(服务器);
[0008] 步骤3.路径约束条件的提取:被测程序运行装置在收到步骤2发送来的可执行文 件后,执行可执行文件并提取路径约束条件;
[0009] 3-1.首先提取被测程序运行设备的操作系统平台基本数据类型的长度参数和包 括本次测试的被测程序名、测试类型,最大运行次数、路径选择方法在内的测试参数,发送 给测试案例生成装置(服务器)以执行步骤4、并转步骤3-2 ;
[0010] 3-2.运行从步骤2所得可执行文件,首次运行的测试案例由步骤2插入到可执行 文件中的符号执行函数的处理符号输入语句函数(HandleSymbolic)自动随机生
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1