论文部分内容阅读
软件测试是保证软件质量和提高软件可靠性的主要手段,其关键和核心问题之一是测试数据的生成。测试数据自动生成技术可以降低软件的开发成本,大大提高软件测试的效率,是当今软件测试自动化领域的一个研究重点。结构测试是一种重要的软件测试方法,其针对程序内部结构的语句覆盖、分支覆盖和条件覆盖等测试问题都可以归结为面向路径的测试数据生成问题。目前已经提出的面向路径的测试数据自动生成方法主要分三类:基于符号执行的静态方法、基于程序实际执行的动态方法和基于动态符号执行的动静结合的方法。这些方法大部分针对数值型变量的测试数据自动生成。复杂结构体、字符串和数组是C语言中常用的数据类型,并且在实际程序中有广泛的应用。传统的符号执行方法很难模拟这些变量在程序执行过程中的操作语义,而动态方法又很难构造适合这些变量的适应值函数。为此,本文提出一种静态的基于内存建模的测试数据自动生成方法,该方法可以自动生成能执行被测路径的复杂结构体、字符串和数组测试数据。本文主要完成了以下工作:(1)创建了一种由四个抽象内存表构建的抽象内存模型:元变量抽象内存表PMTable、结构变量抽象内存表STMTable、字符串变量抽象内存表SRMTable和数组变量抽象内存表ARMTable。该抽象内存模型可以精准的记录复杂结构体、字符串和数组变量在程序执行过程中的状态。(2)设计了复杂结构体、字符串和数组变量在抽象内存模型中的操作规则:通过对抽象内存模型的操作可以模拟指向复杂结构体和字符串的指针操作;字符串常用的库函数操作可以准确的映射到对抽象内存模型的操作;通过对抽象内存模型的操作可以模拟动态下标对应的数组元素的操作。(3)提出了基于该抽象内存模型的复杂结构体、字符串和数组测试数据自动生成算法。利用此抽象内存模型辅助符号执行被测路径,把路径执行过程中复杂结构体、字符串和数组变量的语义操作映射到对抽象内存的操作,通过抽象内存来精准的记录路径的约束条件。并设计了一种分两步进行字符串和数组路径约束条件求解的方法,首先对字符串长度、字符串中受约束字符的位置、数组长度和数组中动态下标变量进行约束求解,之后再对字符串中确定位置的字符元素和数组中确定下标的元素进行求解,从而提高了求解效率并且解决了数组动态下标问题。(4)对所提算法进行实例分析,并且在自动单元测试系统UATS基础上对该方法进行了实验,实验结果证明了该方法的可行性。