论文部分内容阅读
软件测试是保障软件质量的重要手段。传统的手工测试存在效率低,耗费人力、时间资源大,无法有效量化管理等缺点,自动化测试在软件测试中所占比重日益增加。测试自动化就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。测试数据自动生成问题是软件测试自动化中的一个基本问题。能够高效自动生成满足测试需要的测试用例,是提高软件测试工作效率的重要手段。面向路径的测试数据自动生成问题可以描述为:给定一个程序P和一条路径W,设P的输入域为D,求输入x,使得P以x为输入运行时所经过的路径为W。求解该问题可以转化为一个约束系统构建和求解的问题。构建约束系统的主要困难在于分析、化简路径上的各种语句成分和数据类型,尽可能将条件谓词表示成为输入变量的函数。而求解约束系统的主要困难在于路径上的非线性约束。已经证明不存在通用有效的方法求解非线性约束系统。Neelam Gupta等人提出了迭代松弛法自动求解该问题,该方法通过分析路径上各语句之间的静态、动态数据依赖关系,构造程序切片和数据依赖集,用线性算术表示对谓词函数进行线性化,用数值计算的方法去求解该问题。由于该方法需要了解语句之间的静态数据依赖关系,因此该方法仅能用于白盒测试。本文从三个方面对迭代松弛法进行改进,省略了构造谓词切片和数据依赖集的过程,选取主要路径,使用函数的导数来代替均差。改进后的方法无需分析路径上各语句之间的静态、动态数据依赖关系,因此可以应用于黑盒测试。改进后的方法比原方法构造线性约束系统的能力更强,效率更高。本文提出了一个面向路径测试数据自动生成的框架,该框架以改进后的迭代松弛法为核心算法,对于路径上谓词函数均为线性函数的情况,该框架迭代一次即可找到路径的解,或者保证路径不可行。对于路径上谓词函数含有非线性函数的情况,该框架需要迭代多次,或者找到路径的解,或者增加该路径不可行的信心。本文开发了一个以面向路径测试数据自动生成框架为蓝图的原型工具(PTDAG)。该工具采用面向对象的思想进行开发,采用Java语言进行编程,定义了一种简单的语言J用于实验,利用JavaCC为J语言自动生成词法分析器和语法分析器,利用MATLAB为线性约束系统求解。初步实验结果表明本文所提出的面向路径测试数据自动生成框架是正确和有效的。