《软件测试基础教程》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)马瑟著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2011
  • ISBN:9787111351887
  • 页数:382 页
图书介绍:本书全面介绍了软件测试的相关理论、测试方法、测试生成技术等内容。全书分为三个部分,第一部分是预备知识,介绍软件测试技术的相关术语等基础知识;第二部分介绍软件测试的生成技术,不仅包括基本的等价类划分、边界值分析、因果图、谓词测试等技术,还涵盖了从有穷状态模型自动生成测试的技、基于组合设计的测试生成技术,以及用于回归测试中测试选择、优先级排序、最小化的一些基本技术;第三部分介绍软件测试中既重要又广泛适用的理论,即通过测试充分性的度量来加强测试,包括基于控制流、数据流的代码覆盖标准,以及最有效的基于程序变异的测试充分性度量标准。每章的结尾都有参考文献注释和练习题,帮助读者深入体会软件测试的过程,并熟练掌握测试生成的方法。 本书适合作为计算机、软件工程及相关专业软件测试课程的教材,也可作为软件测试技术人员的参考书。

第一部分 预备知识 2

第1章 软件测试的基本知识 2

1.1 人、错误和测试 2

1.1.1 错误、故障和失效 3

1.1.2 测试自动化 3

1.1.3 开发人员与测试人员是两种角色 4

1.2 软件质量 5

1.2.1 软件质量特性 5

1.2.2 软件可靠性 5

1.3 需求、运行结果和正确性 6

1.3.1 输入域与软件正确性 7

1.3.2 有效输入与无效输入 7

1.4 正确性与可靠性 8

1.4.1 正确性 8

1.4.2 可靠性 9

1.4.3 软件使用与操作剖面 9

1.5 测试与调试 10

1.5.1 制订测试计划 11

1.5.2 构造测试数据 11

1.5.3 运行被测软件 12

1.5.4 指定被测软件的行为 12

1.5.5 评价被测软件运行结果的正确性 14

1.5.6 测试预言的构造 15

1.6 测试度量 16

1.6.1 组织级度量 17

1.6.2 项目级度量 17

1.6.3 过程级度量 17

1.6.4 产品级度量:通用度量 18

1.6.5 产品级度量:面向对象软件 19

1.6.6 进度跟踪与趋势 19

1.6.7 静态度量与动态度量 20

1.6.8 可测试性 20

1.7 软件测试与硬件测试 20

1.8 测试与验证 22

1.9 缺陷管理 22

1.10 执行历史 23

1.11 测试生成策略 24

1.12 静态测试 25

1.12.1 走查 26

1.12.2 审查 26

1.12.3 在静态测试中使用静态代码分析工具 26

1.12.4 软件复杂性与静态测试 27

1.13 基于模型的测试与模型检测 27

1.14 控制流图 28

1.14.1 基本块 29

1.14.2 流图的定义与图形表示 30

1.14.3 路径 31

1.15 决定者与后决定者 34

1.16 程序依赖图 35

1.16.1 数据依赖性 35

1.16.2 控制依赖性 36

1.17 字符串、语言与正则表达式 37

1.18 测试的类型 38

1.18.1 分类因子C1:测试生成的依据 39

1.18.2 分类因子C2:软件生命周期阶段 40

1.18.3 分类因子C3:目标导向的测试 41

1.18.4 分类因子C4:被测软件制品 43

1.18.5 分类因子C5:测试过程模型 44

1.19 饱和效应 46

1.19.1 信赖度与真实可靠性 47

1.19.2 饱和区间 47

1.19.3 信赖度的错觉 48

1.19.4 降低偏差△ 48

1.19.5 对测试过程的影响 48

小结 49

参考文献注释 49

练习 52

第二部分 测试生成 56

第2章 基于需求的测试生成 56

2.1 引言 56

2.2 测试用例选择问题 57

2.3 等价类划分 58

2.3.1 缺陷定位 59

2.3.2 关系与等价类划分 60

2.3.3 变量的等价类 62

2.3.4 一元化分与多元化分 65

2.3.5 等价类划分的完整过程 66

2.3.6 基于等价类的测试用例设计 69

2.3.7 GUI设计与等价类 71

2.4 边界值分析 73

2.5 类别划分法 76

2.6 因果图分析 81

2.6.1 因果图中的基本符号 82

2.6.2 创建因果图 84

2.6.3 从因果图生成判定表 86

2.6.4 避免组合爆炸的启发式方法 90

2.6.5 从判定表生成测试用例 92

2.7 基于谓词的测试生成 92

2.7.1 谓词和布尔表达式 92

2.7.2 谓词测试中的故障模型 94

2.7.3 谓词约束 95

2.7.4 谓词测试准则 96

2.7.5 生成BOR、BRO和BRE充分性测试用例 97

2.7.6 因果图与谓词测试 108

2.7.7 故障传播 108

2.7.8 谓词测试实践 110

小结 112

参考文献注释 112

练习 114

第3章 基于有穷状态模型的测试生成 119

3.1 软件设计与测试 119

3.2 有穷状态机 120

3.2.1 用输入序列激活FSM 122

3.2.2 转换函数和输出函数的表格表示 123

3.2.3 FSM的特征 123

3.3 符合性测试 125

3.3.1 重置输入 126

3.3.2 测试的难题 127

3.4 故障模型 127

3.4.1 FSM的变体 129

3.4.2 故障覆盖率 130

3.5 特征集 131

3.5.1 k等价划分的构造 132

3.5.2 特征集的构造 134

3.5.3 等价集 135

3.6 W方法 136

3.6.1 假设 136

3.6.2 最大状态数 136

3.6.3 转换覆盖集的计算 136

3.6.4 构造集合Z 137

3.6.5 导出测试集 138

3.6.6 采用W方法测试 139

3.6.7 错误检测过程 141

3.7 部分W方法 142

3.7.1 采用m=n的Wp方法测试 142

3.7.2 采用m>n的Wp方法测试 144

3.8 UIO串方法 148

3.8.1 假设 148

3.8.2 UIO串 149

3.8.3 核心行为与非核心行为 150

3.8.4 生成UIO串 151

3.8.5 区分符号 160

3.8.6 测试生成 162

3.8.7 测试优化 163

3.8.8 故障检测 164

3.9 自动机理论与基于控制流的技术 166

3.9.1 n路径覆盖 168

3.9.2 自动机理论方法的比较 169

小结 169

参考文献注释 170

练习 171

第4章 基于组合设计的测试生成技术 175

4.1 组合设计 175

4.1.1 测试配置和测试集 175

4.1.2 输入空间与配置空间建模 176

4.2 组合测试设计过程 179

4.3 故障模型 180

4.4 拉丁方阵 182

4.5 相互正交的拉丁方阵 183

4.6 对偶设计:二值参数 184

4.7 对偶设计:多值参数 188

4.8 正交矩阵 193

4.9 覆盖矩阵与混合取值覆盖矩阵 196

4.9.1 覆盖矩阵 196

4.9.2 混合取值覆盖矩阵 197

4.10 强度大于2的矩阵 198

4.11 生成覆盖矩阵 198

小结 204

参考文献注释 204

练习 206

第5章 回归测试的选择、最小化和优先级排序 209

5.1 什么是回归测试 209

5.2 回归测试过程 210

5.2.1 测试重确认、选择、最小化和优先级排序 210

5.2.2 测试准备 211

5.2.3 测试排序 211

5.2.4 测试执行 212

5.2.5 输出比较 213

5.3 回归测试选择问题 213

5.4 回归测试选择方法集 214

5.4.1 全测试策略 214

5.4.2 随机选择测试 214

5.4.3 选择遍历修改测试用例 214

5.4.4 测试最小化 214

5.4.5 测试优先级排序 215

5.5 利用执行轨迹进行回归测试的选择 215

5.5.1 获取执行轨迹 216

5.5.2 选择回归测试用例 217

5.5.3 处理函数调用 220

5.5.4 处理声明中的变化 220

5.6 利用动态切片进行回归测试的选择 222

5.6.1 动态切片 223

5.6.2 计算动态切片 223

5.6.3 选择测试用例 225

5.6.4 潜在依赖 225

5.6.5 计算相关切片 228

5.6.6 语句的添加和删除 228

5.6.7 标识切片变量 229

5.6.8 简化的动态依赖图 229

5.7 测试选择算法的可扩展性 230

5.8 测试最小化 232

5.8.1 集合覆盖问题 232

5.8.2 测试最小化过程 233

5.9 测试优先级排序 234

5.10 回归测试工具 237

小结 238

参考文献注释 238

练习 242

第三部分 测试充分性评价与测试增强 248

第6章 基于控制流和数据流的测试充分性评价 248

6.1 测试充分性基础 248

6.1.1 什么是测试充分性 248

6.1.2 测试充分性的度量 249

6.1.3 通过度量充分性来增强测试 250

6.1.4 无效性和测试充分性 252

6.1.5 错误检测和测试增强 254

6.1.6 单次和多次执行 255

6.2 基于控制流的测试充分性准则 256

6.2.1 语句覆盖和块覆盖 256

6.2.2 条件和判定 258

6.2.3 判定覆盖 259

6.2.4 条件覆盖 260

6.2.5 条件/判定覆盖 262

6.2.6 多重条件覆盖 263

6.2.7 线性代码序列和跳转覆盖 265

6.2.8 改进的条件/判定覆盖 267

6.2.9 复合条件的MC/DC充分测试 269

6.2.10 MC/DC覆盖的定义 272

6.2.11 最小MC/DC测试 276

6.2.12 错误检测和MC/DC充分性 276

6.2.13 短路计算和无效性 278

6.2.14 测试集对需求的追踪 279

6.3 数据流概念 280

6.3.1 定义和使用 281

6.3.2 c-use和p-use 282

6.3.3 全局和局部的定义与使用 282

6.3.4 数据流图 282

6.3.5 def-clear路径 284

6.3.6 def-use对 285

6.3.7 def-use链 286

6.3.8 优化 286

6.3.9 数据上下文和有序的数据上下文 287

6.4 基于数据流的测试充分性准则 289

6.4.1 c-use覆盖 289

6.4.2 p-use覆盖 290

6.4.3 all-use覆盖 291

6.4.4 k-dr链覆盖 292

6.4.5 使用k-dr链覆盖 293

6.4.6 无效的c-use和p-use 293

6.4.7 上下文覆盖 294

6.5 控制流与数据流 296

6.6 包含关系 297

6.7 结构性测试与功能性测试 298

6.8 覆盖度量的可量测性 299

小结 300

参考文献注释 300

练习 305

第7章 基于程序变异的测试充分性评价 310

7.1 导引 310

7.2 变异和变体 310

7.2.1 一阶变体与高阶变体 311

7.2.2 变体的语法与语义 312

7.2.3 强变异和弱变异 314

7.2.4 为什么要变异 315

7.3 用变异技术进行测试评价 316

7.3.1 测试充分性评价的步骤 316

7.3.2 测试充分性评价的替代过程 321

7.3.3 被区分的变体与被杀掉的变体 322

7.3.4 区分变体的条件 322

7.4 变异算子 323

7.4.1 算子类型 324

7.4.2 变异算子的语言依赖性 325

7.5 变异算子的设计 326

7.5.1 评判变异算子优良的准则 326

7.5.2 指导准则 327

7.6 变异测试的基本原则 327

7.6.1 称职程序员假设 327

7.6.2 耦合效应 328

7.7 等价变体 328

7.8 通过变异进行错误检测 329

7.9 变体的类型 331

7.10 C语言的变异算子 331

7.10.1 什么没有被变异 331

7.10.2 线性化 332

7.10.3 执行序列 334

7.10.4 执行序列的影响 336

7.10.5 全局标识符集和局部标识符集 336

7.10.6 全局引用集与局部引用集 336

7.10.7 程序常量变异 339

7.10.8 运算符变异 340

7.10.9 语句变异 344

7.10.10 程序变量变异 354

7.11 Java语言变异算子 357

7.11.1 传统变异算子 358

7.11.2 继承 359

7.11.3 多态与动态绑定 361

7.11.4 方法重载 362

7.11.5 Java特有的变异算子 363

7.12 综合比较:Fortran 77、C与Java变异算子 364

7.13 变异测试工具 366

7.14 低成本变异测试 366

7.14.1 划分变异函数的优先级 367

7.14.2 选择使用部分变异算子 367

小结 368

参考文献注释 369

练习 377