软件测试中测试数据的自动生成方法浅析

发表于:2010-10-19来源:作者:点击数: 标签:软件测试自动浅析数据
一、引言 软件 质量 是制约计算机应用领域进一步发展的关键要素之一,保证软件质量、提高软件 可靠性 的重要手段是 软件 测试 。软件测试中最关键的问题是测试数据的设计,它主要涉及两个方面,一是测试 数据生成,是测试数据覆盖全面。对于前者,早期程序评
一、引言

  软件质量是制约计算机应用领域进一步发展的关键要素之一,保证软件质量、提高软件可靠性的重要手段是软件测试。软件测试中最关键的问题是测试数据的设计,它主要涉及两个方面,一是测试 数据生成,是测试数据覆盖全面。对于前者,早期程序评价系统都是通过人工方法设计测试数据的,近年来,有更多研究者为实现更高程度的自动化而采用相关技术来实现测试数据的自动牛成。下面简述测试数据生成技术的分类及其中一些典型的方法。

  二、测试数据自动生成法分类

  相关文献对测试数据自动生成存在不同的分类。Ferguson等1将这些方法所使用的技术划分为随机法、面向目标法和面向路径法三类。这是最恰当的一种分类,但每一类都涉及路径选择问题,且会对测试数据生成全过程产生极大影响,而每一类技术又有多种具体实现方法。近年来出现更多面向日标和面向路径类技术不断发展演变的相关研究,还产生了基于搜索的测试数据自动生成方法。

  1.随机法

  该法是指在输入空间中随机选择输入来生成测试数据,可完全自动化,优点是生成测试数据的开销小且简便。但其生成盲目且缺乏典型性,理论上可根据预先定义的输入随机分布牛成测试数据,但却难以先验的获知该分布函数,缺乏实用性。

  2.面向目标法

  该法是针对程序中~条选定分支求取输入数据,该数据要使该分支被执行。初始时,使用任意的输入来执行程序,再将检测程序的执行流程,而搜索过程将决定程序是否按当前的分支执行还是另选一条分支。若观察到当前分支有不期望的流程,则使用函数最小化搜索算法来自动产牛能够改变分支执行流程的输入。其主要思想是仅关注那些影响到目标节点执行的分支。

  3.面向路径法

  该法是给定一程序和其中一路径,求某一输入数据,使得程序以该数据为输入时将执行该路径。其中用于寻找该执行路径输入数据的方法有,一是对程序进行静态分析转换,不涉及程序的实际运行,包括符号执行和区间算术法等。二是面向程序实际执行的方法,因其整个过程完全基于程序实际执行,数组索引和指针取值在执行时可知,可以克服符号执行的限制。

  4.基于搜索法

  近期研究者对应用超启发式搜索技术于测试数据自动生成的关注目益升温。前期测试数据自动生成的尝试受到软件规模和复杂度的限制,而测试数据生成是个不确定问题。该技术为此带来了希望。

  它属高层次框架,利用其在合理的计算成本前提寻求解决组合犁问题的解。该方法需运行程序,但其生成测试数据的过程不确定,它采用概率论思想,例如遗传和模拟退火算法。

  三、两类方法比较

  1.面向目标法

  其优势是能预先侦测到不可行路径以精简由到达给定分支所有路径构成的搜索空间。对只含指针变晕的程序,该法比面向路径法易扩展。其局限性是处理动态分配能力弱。随着近年来的不断发展,面向路径法有关文献提出一些处理指针数据的措施,文献中提出一种基于约束的方法,它探索了节点内程序式指向分析的研究成果,提供了两种约束连接符用于测试数据生成。

  2.面向路径法

  其优势是基于程序执行的方法可以有效的处理数组和引用指针,因为数组索引和指针地址在执行的每一步是已知的。其中指针关系以有关输入值的约束形式来处理,且指针混淆问题仅仅出现在输入数据结构中。其主要挑战之一是在选择路径时,无法确认是否是可行路径。因此比较适合于只有几条路径的简单程序。另有文献对以上的问题有了进一一步的研究。有Gupta等提出一种迭代张弛法。它基于函数求根等式近似求解数值分析中的张弛技术,在给定值域中任意选择一个输入数据,通过一或多次迭代提取历经给定路径的输入数据。且后期相关文献研究对其进行了有效改进。

  四、结语

  在自动测试系统的实际研发中需要根据实际需求和特点决定方法的选择,还可将各类方法进行有效整合与优势互补。相关研究近年来虽已取得可喜进展,但离全面有效的自动生成测试数据还有一定差距。但我们相信,随着研究的不断深入,真正实用的方法及工具必将出现。

原文转自:http://www.ltesting.net