一、引言

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

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

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

1.随机法

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

2.面向目标法

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

3.面向路径法

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

4.基于搜索法

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

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

三、两类方法比较

1.面向目标法

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

2.面向路径法

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

四、结语

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

软件测试自动生成测试数据,软件测试中测试数据的自动生成方法浅析相关推荐

  1. ef mysql自动更新_EF Core中怎么实现自动更新实体的属性值到数据库

    我们在开发系统的时候,经常会遇到这种需求数据库表中的行被更新时需要自动更新某些列. 数据库 比如下面的Person表有一列UpdateTime,这列数据要求在行被更新后自动更新为系统的当前时间. Pe ...

  2. php自动维护,window_Win7系统中的一些自动维护计划、任务关闭、禁用方法图文教程,  windows自动维护功能会在计 - phpStudy...

    Win7系统中的一些自动维护计划.任务关闭.禁用方法图文教程 windows自动维护功能会在计划任务时间中执行对系统安全扫描.系统诊断和软件更新等等,在这些过程中也需要一定的时间来完成,如果用户在设置 ...

  3. mybatis 自动生成integer_Intellij IDEA 中使用 MyBatis-generator 自动生成 MyBatis代码

    1.IDEA创建maven工程(略) 2. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件和MySQL数据库驱动依赖 build>< ...

  4. html5代码自动生成,vs code中设置html5 快速生成模板

    按英文的!和h:5都可以快速生成html模板,但是找了半天都找不到如何修改模板设置.只好自己从snippets里重新编写了一个html5的模板,以免自己以后忘了. 首先打开 snippets 然后输入 ...

  5. c语言拓扑多边形自动生成,GIS系统中多边形矢量数据自动拓扑的算法

    (1)建立GIS多边形拓扑关系的概念 顺时针方向构多边形 所谓顺时针方向构多边形是指多边形在链的右侧(图a),多边形在闭合曲线内.逆时针方向构多边形是指多边形在链的左侧(图b),多边形在闭合曲线外. ...

  6. linux设置系统自动开机,Linux系统中设置开机自动运行的两种方法

    有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本.我们要怎样做呢?本文中我们就对此进行讨论. 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系 ...

  7. python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析

    对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章 <扫雷与 ...

  8. 随机洗牌算法+matlab,洗牌算法及 random 中 shuffle 方法和 sample 方法浅析

    对于算法书买了一本又一本却没一本读完超过 10%,Leetcode 刷题从来没坚持超过 3 天的我来说,算法能力真的是渣渣.但是,今天决定写一篇跟算法有关的文章.起因是读了吴师兄的文章<扫雷与算 ...

  9. java实体类没有映射文件_MyBatis自动生成实体类、DAO和XML映射文件,并去掉实体类中的getter和setter方法...

    今天花了3个多小时搞定了这个事情,写个Blog记录一下,先看一下最终生成的实体类吧. packagecom.mybatis.pojo;importlombok.AllArgsConstructor;i ...

  10. NOMAO软件测试工资,基于混合遗传算法的测试数据自动生成研究

    为了提高软件测试中测试数据自动生成的效率,提出了一种基于混合遗传算法的测试数据自动生成的方法.在传统的遗传算法中引入模拟退火的思想,先利用遗传算法快速搜索到近优解,再使用模拟退火算法局部寻优,实现两种 ...

最新文章

  1. mysql wait_timeout 8小时问题解决,tomcat数据源的配置
  2. 怎样才能正确的挑选和建立关键词词库?
  3. poj1190深搜 生日蛋糕
  4. 常用 API 函数(10): 硬件与系统函数
  5. python高阶函数filter_Python进阶系列连载(13)——Python内置高阶函数filter(上)...
  6. (十七)用JAVA编写MP3解码器——解码Layer1
  7. Python3.5(十三)迭代器生成器
  8. sql生成(查询数据的存储过程)代码的存储过程
  9. 疯狂的程序员 31-40
  10. mmgrid cols表头列隐藏
  11. JS学习笔记——APIS
  12. 安装PL-2303驱动
  13. faster rcnn 代码与原理结合详解
  14. 在毕业设计论文Word中交叉引用参考文献
  15. Clone Graph问题及解法
  16. Windows CMD命令大全(值得收藏)
  17. LeetCode——1737. 满足三条件之一需改变的最少字符数(Change Minimum Characters to Satisfy One of Three...)——分析及代码(Java)
  18. 【Axure高保真原型】文字模板——删除线
  19. Lingoes翻译家tips弹窗的解决方法
  20. 《Splunk智能运维实战》——1.2 索引文件和目录

热门文章

  1. SQL-Server 零基础入门教程[下]
  2. 【CSS】绘制一个任意角度的扇形
  3. Vue的渐进式怎么理解
  4. 针织毛衫的概念及设计
  5. 手机python3.0编程软件-怎么用手机编写Python程序?
  6. Xshell7免费学生、家庭版分享
  7. 快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力
  8. Linux - 部署node项目
  9. leetcode之Isomorphic strings
  10. 服务号和订阅号之间的区别,企业适合选择哪一个?