新書推薦:
《
超加工人群:为什么有些食物让人一吃就停不下来
》
售價:NT$
454.0
《
历史的教训(浓缩《文明的故事》精华,总结历史教训的独特见解)
》
售價:NT$
286.0
《
不在场证明谜案(超绝CP陷入冤案!日本文坛超新星推理作家——辻堂梦代表作首次引进!)
》
售價:NT$
265.0
《
明式家具三十年经眼录
》
售價:NT$
2387.0
《
敦煌写本文献学(增订本)
》
售價:NT$
1010.0
《
耕读史
》
售價:NT$
500.0
《
地理计算与R语言
》
售價:NT$
551.0
《
沈括的知识世界:一种闻见主义的实践(中华学术译丛)
》
售價:NT$
398.0
|
編輯推薦: |
《组合测试》是目前软件测试领域第一本专门系统介绍组合测试方法的中文著作, 是计算机相关领域的工作人员, 特别是计算机软件开发和测试人员、软件测试领域的教学、科研以及相关从业人员的重要参考书.
|
內容簡介: |
组合测试是一种重要的软件测试方法. 该方法系统地检测软件系统中各种组合的相互作用, 例如, 软件中不同功能、不同输入、不同配置或环境 等因素的相互作用可能引发的故障. 由于应用场景的广泛性, 组合测试越 来越受到工业界和学术界的研究和重视. 《组合测试》系统介绍组合测试的概念、 特点、应用场景、具体的应用步骤, 以及应用和发展过程中所面临的各种 科学问题和解决方案等. 通过丰富具体的示范性应用实例介绍各种抽象的 概念和过程, 力图简洁清楚、通俗易懂, 尽可能降低对读者专业基础要求. 此外, 《组合测试》还提供了组合测试领域的 300 多篇文献列表下载http:gist.nju.edu.cn, 以供读者学习研究.
|
目錄:
|
序
前言
第1章 组合测试概论
1.1 软件测试在软件工程中的位置
1.2 组合测试在软件测试中的位置
1.3 组合测试的应用场景
1.4 组合测试的概念
1.4.1 组合测试的定义
1.4.2 组合测试的目标
1.4.3 组合测试的原理
1.4.4 组合测试的模型
1.4.5 组合测试的方法与实例
1.4.6 组合测试的关键问题
1.4.7 组合测试的优缺点
1.5 组合测试的历史
1.6 组合测试的演变
1.6.1 正交表
1.6.2 覆盖表
1.6.3 可变力度覆盖表
1.6.4 增量覆盖表
1.6.5 试验设计
1.7 组合测试的度量
1.7.1 组合覆盖率
1.7.2 分散度
1.8 组合测试的过程
1.8.1 建立组合测试模型
1.8.2 生成测试用例集
1.8.3 测试用例执行
1.8.4 故障诊断
1.8.5 测试评估
1.9 本章小结
参考文献
第2章 组合测试的测试用例生成
2.1 贪心算法
2.1.1 AETG系统与TCG算法
2.1.2 PAIRTEST工具:按参数顺序产生组合覆盖测试数据的方法
2.1.3 基于解空间树模型的两两组合覆盖测试用例生成方法
2.1.4 基于网络图模型的两两组合覆盖测试用例生成方法
2.1.5 贪心算法框架优化
2.2 数学方法
2.2.1 Kobayashi等的两两组合覆盖测试用例生成的代数方法
2.2.2 Williams的代数方法
2.2.3 改进的两两组合覆盖测试用例生成的代数方法
2.2.4 二水平多因素系统的测试数据生成
2.3 演化算法
2.3.1 覆盖表生成的遗传算法配置参数优化
2.3.2 覆盖表生成的粒子群算法
2.4 几种特殊的覆盖表生成
2.4.1 单因素覆盖方法
2.4.2 多因素覆盖方法
2.4.3 相邻因素两两组合覆盖测试数据生成
2.5 带约束的组合测试用例生成
2.6 本章小结
参考文献
第3章 组合测试的优化与约简
3.1 回归测试
3.2 组合测试的基本优化规则
3.3 测试配置改变成本优化
3.4 密度算法优化
3.5 综合优化
3.5.1 参数取值的权值分配
3.5.2 偏序覆盖表的生成
3.6 组合测试用例集的约简
3.6.1 基本的约简方法
3.6.2 改进的约简方法
3.7 本章小结
参考文献
第4章 组合测试的故障定位
4.1 排除法
4.1.1 基本概念和术语
4.1.2 基本模型和方法
4.1.3 实例分析
4.2 最小故障模式的理论及应用
4.2.1 最小故障模式理论
4.2.2 基于最小故障模式的组合测试方法学
4.2.3 基于最小故障模式的组合测试方法学实例
4.2.4 基于最小故障模式的组合测试方法学实证
4.2.5 一种基于最小故障模式的故障定位方法
4.3 差异定位算法
4.3.1 基本概念
4.3.2 差异定位算法应用于组合测试的故障定位
4.3.3 算法改进
4.3.4 试验设计与结果分析
4.4 关系树模型法
4.5 故障定位的其他方法
4.5.1 谱分析方法
4.5.2 分类树方法
4.6 本章小结
参考文献
第5章 自适应组合测试
5.1 自适应测试
5.1.1 自适应测试的概念
5.1.2 自适应测试的目标
5.1.3 自适应测试的原理
5.1.4 自适应测试的方法
5.1.5 自适应测试的优缺点
5.2 自适应组合测试
5.2.1 传统组合测试所面临的问题
5.2.2 自适应测试框架
5.2.3 相关研究工作介绍
5.2.4 自适应组合测试
5.3 自适应组合测试的实例研究
5.3.1 测试软件介绍
5.3.2 初始模型设计及测试
5.3.3 改进模型M2及测试
5.3.4 参数扩展——新模型及其改进、测试过程
5.3.5 模型M3的修改模型——M4
5.3.6 试验结果分析和评价
5.4 本章小结
参考文献
第6章 组合测试的应用
6.1 浏览器功能测试
6.1.1 浏览器测试
6.1.2 浏览器自适应组合测试的实证研究
6.1.3 测试结果及分析
6.2 手机功能测试
6.2.1 测试设计
6.2.2 测试结果与分析
6.3 机顶盒测试
6.3.1 时移电视系统及其组合测试模型
6.3.2 时移电视系统的组合测试
6.4 配置测试
6.4.1 研究背景
6.4.2 试验设计方法在配置测试中的应用
6.5 软件系统兼容性测试
6.5.1 测试对象及测试目的
6.5.2 测试过程
6.6 本章小结
参考文献
第7章 组合测试的比较研究及工具
7.1 随机测试
7.1.1 概念
7.1.2 目标
7.1.3 原理
7.1.4 方法
7.1.5 实例
7.1.6 优缺点
7.2 自适应随机测试
7.2.1 概念
7.2.2 目标
7.2.3 原理
7.2.4 方法
7.2.5 实例
7.2.6 优缺点
7.3 几种测试方法的比较
7.4 组合测试的工具
7.5 本章小结
参考文献
第8章 组合测试的研究现状与未来
8.1 研究领域
8.1.1 测试模型
8.1.2 测试用例的生成
8.1.3 测试优化
8.1.4 故障特征化及定位
8.1.5 测试应用及测试过程
8.1.6 测试度量及评估
8.2 未来的研究工作
8.3 本章小结
参考文献
索引
|
內容試閱:
|
第 1 章 组合测试概论
组合测试是一种重要的软件测试方法软件测试是软件工程中必不可少的保证软件质量的重要环节软件工程是计算机领域一个重要的专业方向故组合测试理论与方法的研究和发展对于软件工程, 乃至整个计算机领域的发展都具有重要的意义本章从组合测试的研究背景入手, 介绍组合测试的基本概念、发展历程、基本理论和方法。
1.1 软件测试在软件工程中的位置
计算机软硬件新技术的不断发展, 已经促使计算机领域出现了很多新的专业方向例如, 除了传统的计算机科学、计算机工程和计算机应用专业等方向, 出现了网络工程专业 目前已演变为物联网专业、信息技术专业和软件工程专业 图 1-1,特别是软件工程专业受到空前重视在继我国 30 多所重点高等学校兴办软件学院培养专门人才之后, 软件工程已从原来的二级学科上升为一级学科。
图 1-1 软件工程及其在计算机领域的位置
软件工程是一门研究如何以最经济的方式, 在最短的时间内开发用户最满意的软件产品的学科一般情况下, 软件工程根据软件过程可以分为需求分析、概要设计与详细设计、软件编码、软件测试和软件维护等可以看出, 软件测试是软件工程中一个重要的、必不可少的组成部分, 它其实是贯穿整个软件工程过程的[1]整个软件工程可以说是一个不断与软件错误和缺陷斗争的过程为了生产高 质量的软件, 软件工程为软件质量把好图 1-2 所示的 \四道关""""第一道关是利用形 式化方法、高度集成的软件开发环境和各种支持工具等在软件需求分析、设计和编码阶段预防可能出现的各种问题和错误这一步虽然非常重要和有效, 但一般不可 能消灭所有错误, 仍有很多错误防不胜防地隐藏在软件中第二道关就是通过软件测试方法来发现和纠正这些没有防得住而隐藏在软件中的错误即使软件测试技术已非常成熟, 也很难保证通过软件测试之后, 软件中就不再有错误, 因此, 需要第三 道关通过容错计算技术, 在软件系统中植入容错能力, 使得即使在前两关中没有 防得住或没有检查出来的错误存在于软件系统, 也不至于给系统造成重要损失第 四道关是在前面三道关的基础上, 对软件系统仍然存在错误风险的预测, 即软件可 靠性的研究[2]
图 1-2 软件质量的 四道关
1.2 组合测试在软件测试中的位置
软件测试是指以发现错误、度量和提高软件质量为目的而理解、分析和运行程序的过程软件测试的目标是以最小的成本, 及时准确地发现软件中隐藏的错误,从而提高软件的质量, 降低风险人们根据软件开发的不同阶段、不同的测试对象、基于不同的理论和角度提出了一系列软件测试方法, 形成了图 1-3 所示的软件测试方法体系, 具体可以有如下几类[3;4]
1 软件测试根据是否运行程序可分为静态测试和动态测试静态测试包括桌面检查、代码审查和代码走查等方法动态测试根据测试用例设计是否依据程序内部结构可以分为黑盒测试和白盒测试白盒测试包括语句覆盖、判定覆盖、条件覆图 1-3 软件测试的方法体系。
1.3 组合测试的应用场景覆盖、判定条件覆盖、条件组合覆盖、路径覆盖、线性代码序列和跳转测试等黑盒测试包括等价类划分、边际值分析、因果图分析、错误猜测和状态转换测试等2 根据软件开发的不同阶段, 可以将软件测试划分为单元测试、集成测试、系统测试、验收测试、回归测试、验证测试、确认测试、Alpha 测试、Beta 测试和Gamma 测试等。
3 根据被测试软件的开发方法和应用环境的不同, 可以分为面向对象软件测试、面向方面软件测试、面向服务软件测试、基于构件软件测试、嵌入式软件测试、Web 应用软件测试、网构软件测试等, 后面还要出现普适计算环境软件测试、云计算和物联网环境软件测试等。
4 根据软件不同特性和方面的测试, 可以分为负载测试、压力测试、性能测试、安全性测试、安装测试、可用性测试、稳定性测试、授权测试、用户接受性测试、一致性测试、配置测试、文档测试、兼容性测试和 Playtest 等。
5 根据不同特殊的测试技术, 可以分为组合测试、蜕变测试、变异测试、演化测试、FUZZ 测试、基于性质的测试、基于故障的测试、基于模型的测试、基于操作剖面的测试、基于用例和或用户陈述开发的测试、基于规格说明的测试、统计测试、逻辑测试、随机测试、自适应随机测试、GUI 测试、冒烟测试和探索测试等。
以上各种软件测试方法在文献 [4] 中有较为详细的介绍组合测试属于一种特殊的软件测试技术 图 1-3 中已标出该方法旨在检测软件系统中各种因素及其相互作用引发的故障, 其中, 所谓的各种因素可以是软件系统的各种输入、功能选项、配置等将在 1.3 节具体介绍组合测试的应用场景。
1.3 组合测试的应用场景
软件系统是一个复杂的逻辑体, 它的正常运行受到很多因素的影响例如, 软件系统一般有很多输入, 这些输入以及它们之间的相互作用可能会影响系统的正常运行; 复杂的软件系统一般有很多功能选项, 这些功能选项以及相互之间的作用可能引发软件故障; 构件软件或者面向对象软件都是由多个构件或对象组成的, 这些构件或对象及它们之间的相互作用都可能促发软件错误为了确保软件在这些因素
及其相互作用下正常工作, 需要设计测试用例对影响软件系统正常运行的因素及其相互作用进行系统检测以下列出一些典型的组合测试应用场景[5]场景 1 Word 字体效果测试
图 1-4 中的 Word 字体效果部分有 11 个选项 可以认为 11 个参数, 每个选项可以选择或不选择 即每个参数有两个取值, 可以设为 1选择 和 0不选择如果要系统测试这 11 个效果选项及其相互作用的效果, 完全测试需要进行 2*2*22*2*2*2*2*2*2*2=211=2048 次, 这是一个庞大的测试用例集合然而, 这里的11个选项的效果测试只是 Word 中很小的一个测试场景, 类似的测试场景还有很 多, 将在后面章节中继续研究图 1-4 Word 字体效果测试测试场景。
对图 1-4 中 11 个效果选项进行 2048 次完全测试不仅成本巨大, 而且也根本没有必要只要从这 2048 次测试中抽取少数几次就可以了组合测试方法就可以用来解决这个问题例如, 组合测试选择如图 1-5 所示的 18 条测试用例 每一行是一条测试用例可以检查这 18 条测试用例具有一个非常重要的性质:任意 3 个效果选项的 8 个组合都在这 18 条测试用例中至少出现过一次, 例如, 选项 1、2、3 的8 种组合 线圈标出, 选项 4、7、11 的 8 种组合都可以在这 18 条测试用例中找到线圈标出还有选项 5、6、7 的 8 种组合, 选项 8、9、10 的 8 种组合等任何 3 个选项的 8 种不同组合都在该 18 条测试用例中至少出现了一次图 1-5 18 条测试用例覆盖任意 3 个选项间的 8 种组合场景 2 控制系统的开关测试。
图 1-6 是一个具有 34 个开关的控制系统, 完全测试需要 234大约 1.7*1010 次。
1.3 组合测试的应用场景测试, 这几乎是不可能的在这样一个庞大的测试空间中, 选择少量的测试用例进行科学有效的测试, 显得尤为重要图 1-6 具有 34 个开关的控制系统场景 3 机票预订在网上预订机票时, 一般涉及以下选项:航程类型 可选单程、往返和联程3 个值、出发城市 可以有上百个选择, 这里设为 10、到达城市 可以有上百个选择, 这里设为 10、出发日期 可以有上百个选择, 这里设为 10、返回日期 可以有上百个选择, 这里设为 10、出行人数 1.9 或更多, 这里设为 5、送票城市可以有很多选择, 这里设为 5、航空公司 可以有很多选择, 这里设为 5、舱位等级 经济舱和商务舱 2 个选择图 1-7该机票查询系统的完全测试至少需要10*10*10*10*5*5*5*2=7.5*106 次类似的场景还有酒店预订图 1-7 某网站机票预定界面测场景 4 软件系统配置测试。
假设对某个待测软件进行配置测试时, 经过分析和处理, 最后确定需要测试m类硬件设备, 每类设备分别有 a1; a2; ; am 种硬件 通过商标、型号和驱动程序等来划分的配置测试的任务是检查各种硬件设备在计算机系统内的相互联结和功能分配对待测软件的影响, 检查待测软件能否在这些硬件的组合上正常工作当n = a1 * a2 * ¢ ¢ ¢ * am 较小时, 可以进行全面试验而一般情况下, 这个值非常大,进行全面试验是不可能的因此, 需要设计一种试验次数较少, 效果又能与全面试验相近的试验设计方法。
配置测试场景更具体的例子, 如目前市场上有 300 多种显卡, 200 多种声卡,1500 多种调制解调器,1200 多种打印机完全测试的组合数目至少是 300*200*1500*1200, 总共有上亿种组合规模之大难以想象如果决定进行完整全面的配置测试, 检查所有可能的制造者和型号组合, 就会面临巨大的工作量如果限于排除法测试, 每一种配置单独测试一种板卡只用 30min, 也要近一年的时间这只是配置测试中的一个步骤, 其他工作还有:在软件发布之前要修复软件缺陷, 修复之后还要进行回归测试等因此, 迫切需要找出一种科学有效的方法, 把巨大无比的配置可能性减少到尽可能小的范围。
1.4 组合测试的概念
1.4.1 组合测试的定义
组合测试就是用来测试 “组合” 的这些组合可以是硬件的组合 此时也称为配置测试、软件的组合 此时也称为兼容性测试、软件功能的组合和程序输入的组合等由于任何软件一般都可能存在运行平台 硬件组合 和软件环境 软件组, 都有可能具有很多功能或输入, 以及组成部分等组合问题组合测试就是测试软件在这些组合情况下, 是否可以正常运行, 是否存在与组合相关的问题[4]
1.4.2 组合测试的目标
组合测试旨在从待测试软件面临的庞大组合空间中, 选取少量的测试用例,高效、科学、系统地检测软件系统中各种因素及其相互作用可能促发的故障。
1.4.3 组合测试的原理
一般情况下, 软件系统的某些输入参数、软硬件配置、内外部事件等因素及其相互作用都可能促发软件故障针对这类软件故障普遍存在的情况, 必须设计相应的测试用例对各种因素及其相互间作用进行系统的覆盖性检测但这种测试用例的设计和生成存在以下问题:一是由于影响软件的因素多, 且各个因素的取值情况复杂, 因此, 所有可能的因素组合情况形成了一个数量巨大的测试用例空间, 穷尽测试已不可能; 二是手工设计和选择测试用例难度大, 容易出错。
组合测试是一种充分考虑各种因素及其相互作用的科学实用的软件测试方法。
|
|