目录 1
第1章 概述 1
1.1 回顾测试的发展 1
1.2 什么是软件测试 3
1.2.1 IEEE的定义 3
1.2.2 测试在软件开发中的角色 4
1.3 为什么要进行软件测试 4
1.4 测试的目的 6
1.4.1 证明 6
1.4.2 检测 6
1.4.3 预防 6
1.5 业界的软件测试现状 7
1.6 软件测试中的误区 11
1.7 本章小结 12
第2章 白盒测试和黑盒测试 13
2.1 白盒测试 13
2.1.1 什么是白盒测试 13
2.1.2 为什么要进行白盒测试 14
2.1.3 白盒测试的常用技术 14
2.1.4 一个白盒测试的例子 16
2.2 黑盒测试 18
2.2.1 什么是黑盒测试 18
2.2.3 黑盒测试的常用技术 19
2.2.2 为什么要进行黑盒测试 19
2.2.4 一个黑盒测试的例子 20
2.3 白盒测试和黑盒测试的比较 21
2.3.1 白盒测试的优缺点 22
2.3.2 黑盒测试的优缺点 22
2.3.3 灰盒测试 23
2.4 本章小结 23
第3章 测试覆盖率 24
3.1 覆盖率概念 24
3.2 常见的逻辑覆盖 24
3.2.1 语句覆盖 24
3.2.2 判定覆盖 25
3.2.3 条件覆盖 26
3.2.4 判定条件覆盖 28
3.2.5 路径覆盖 29
3.2.6 逻辑覆盖小结 30
3.3 功能覆盖率 30
3.4 面向对象的覆盖率 31
3.4.1 继承上下文覆盖 32
3.4.2 基于状态的上下文覆盖 33
3.4.3 基于线程的上下文覆盖 35
3.5.2 指令块覆盖 36
3.5.1 函数覆盖 36
3.5 其他覆盖率 36
3.5.3 判定路径覆盖 37
3.5.4 更改条件判定覆盖 37
3.5.5 分支条件组合覆盖 39
3.5.6 过程到过程路径覆盖 39
3.5.7 Z路径覆盖 39
3.5.8 ESTCA覆盖 41
3.5.9 LCSAJ覆盖 42
3.6 如何使用覆盖率 43
3.6.1 基本原则 43
3.6.2 一个选择建议 44
3.6.3 使用最少测试用例来达到覆盖 45
3.7 本章小结 47
第4章 程序分析技术 48
4.1 文本视角 48
4.2 句法视角 49
4.3 控制流视角 54
4.4 数据流视角 55
4.5 计算流视角 58
4.5.1 故障插入 59
4.5.2 变体分析 59
4.5.3 敏感性分析 62
4.6 功能视角 63
4.7 本章小结 64
第5章 测试分析技术 65
5.1 面向规格的测试 65
5.1.1 测试独立于规格技术 66
5.1.2 测试依赖于规格技术 68
5.2 面向实现的测试 75
5.2.1 面向结构的测试 76
5.2.2 面向影响的测试 77
5.2.3 面向传递的测试 79
5.3 面向错误的测试 86
5.3.1 基于错误的测试 87
5.3.2 基于故障的测试 88
5.3.3 基于风险的测试 88
5.3.4 可能的正确性 89
5.4 混合测试技术 89
5.5 本章小结 90
第6章 单元测试 91
6.1 什么是单元测试 91
6.1.1 单元测试的目的 92
6.1.2 单元测试和集成测试的区别 92
6.1.3 单元测试和系统测试的区别 93
6.2 为什么要进行单元测试 93
6.3 单元测试环境 95
6.4.1 【策略一】由顶向下的单元测试策略 97
6.4.2 【策略二】由低到上的单元测试策略 97
6.4 单元测试策略 97
6.4.3 【策略三】孤立测试 98
6.4.4 综合测试 98
6.5 单元测试分析 99
6.5.1 模块接口 99
6.5.2 局部数据结构 99
6.5.3 独立路径 100
6.5.4 出错处理 100
6.5.5 边界条件 100
6.6.2 为正向测试设计用例 101
6.6.3 为逆向测试设计用例 101
6.6 单元测试用例设计思路 101
6.6.1 为系统运行设计用例 101
6.6.4 为满足特殊需求设计用例 102
6.6.5 为代码覆盖设计用例 102
6.6.6 为覆盖率指标完成设计用例 102
6.7 单元测试过程 103
6.7.1 完成测试计划 104
6.7.2 获取测试集 106
6.7.3 度量测试单元 107
6.9 单元测试应坚持的原则 110
6.8 单元测试工具介绍 110
6.10 我们的问题 111
6.11 本章小结 112
第7章 集成测试 113
7.1 什么是集成测试 113
7.1.1 集成测试与系统测试的区别 113
7.1.2 集成测试关注的重点 114
7.1.3 集成测试和开发的关系 114
7.1.4 集成测试的层次 115
7.2 集成测试策略 115
7.2.1 大爆炸集成 116
7.2.2 自顶向下的集成 117
7.2.3 自底向上的集成 119
7.2.4 三明治集成 121
7.2.5 修改过的三明治集成 122
7.2.6 基于集成 123
7.2.7 分层集成 124
7.2.8 基于功能的集成 126
7.2.9 高频集成 127
7.2.10 基于进度的集成 129
7.2.11 基于风险的集成 130
7.2.12 基于事件(消息)的集成 130
7.2.13 基于使用的集成 131
7.2.15 分布式集成 132
7.2.14 客户/服务器的集成 132
7.3 集成测试分析 133
7.3.1 体系结构分析 133
7.3.2 模块分析 134
7.3.3 接口分析 136
7.3.4 风险分析 137
7.3.5 可测试性分析 138
7.3.6 集成测试策略分析 138
7.3.7 常见的集成测试故障 138
7.4.1 为系统运行设计用例 139
7.4 集成测试用例设计思路 139
7.4.2 为正向测试设计用例 140
7.4.3 为逆向测试设计用例 140
7.4.4 为满足特殊需求设计用例 140
7.4.5 为高覆盖设计用例 141
7.4.6 测试用例补充 141
7.4.7 注意事项 141
7.5 集成测试过程 141
7.5.1 计划阶段 141
7.5.2 设计阶段 142
7.5.3 实现阶段 143
7.5.4 执行阶段 144
7.6 集成测试环境 145
7.7 集成测试工具介绍 146
7.8 集成测试应坚持的原则 146
7.9 本章小结 147
第8章 系统测试 148
8.1 系统测试概念 148
8.2 系统测试方法 149
8.2.1 功能测试 149
8.2.2 协议一致性测试 150
8.2.3 性能测试 152
8.2.4 压力测试 154
8.2.6 安全性测试 156
8.2.5 容量测试 156
8.2.7 恢复性测试 159
8.2.8 备份测试 160
8.2.9 GUI测试 160
8.2.10 健壮性测试 163
8.2.11 兼容性测试 166
8.2.12 可用性测试 167
8.2.13 可安装性测试 168
8.2.14 文档测试 171
8.2.15 在线帮助测试 172
8.2.16 数据转换测试 172
8.3 系统测试过程 173
8.3.1 完成系统测试计划 175
8.3.2 完成系统测试用例 178
8.3.3 评审/审批系统测试计划 178
8.3.4 执行系统测试 179
8.4 本章小结 181
第9章 可靠性与可靠性测试 182
9.1 基本概念 182
9.1.1 什么是软件可靠性 182
9.1.2 错误、缺陷、故障和失效 183
9.1.3 软件可靠性指标 184
9.1.4 软件和硬件可靠性区别 186
9.2 可靠性指标分配 187
9.3 可靠性预计 188
9.3.1 计数法 188
9.3.2 应力法 188
9.4 可靠性分析方法 189
9.4.1 FMEA 189
9.4.2 CA 191
9.4.3 FTA 192
9.4.4 ETA 193
9.4.5 SCA 193
9.5 软件可靠性测试 194
9.5.1 可靠性测试流程 195
9.5.2 可靠性模型介绍 198
9.5.3 一个可靠性数据分析例子 202
9.6 软件可靠性工程 205
9.7 可靠性标准和可靠性工具 205
9.7.1 可靠性标准 205
9.7.2 可靠性工具 207
9.8 本章小结 208
第10章 其他专项性测试 210
10.1 可接受性测试 210
10.2 Alpha测试 211
10.3 Beta测试 212
10.4 标杆测试 213
10.5 配置测试 214
10.6 外场测试 214
10.7 SQL测试 215
10.8 2000年测试 215
10.9 回归测试 216
10.10 本章小结 218
第11章 软件质量透视 219
11.1 质量的定义 219
11.2 质量的预防和检测 220
11.3.1 流程对质量的贡献 221
11.3 如何提高软件产品的质量 221
11.3.2 流程与技术 223
11.3.3 全面质量管理 224
11.3.4 关注测试 233
11.3.5 组织、流程和人 234
11.5 本章小结 237
第12章 软件验证和确认 238
12.1 基本概念 238
12.2 软件验证和确认计划 240
12.2.1 SVVP步骤 241
12.2.2 SVVP的7个主题 242
12.3 验证和确认任务分析 248
12.3.1 关键性分析 248
12.3.2 可跟踪性分析 250
12.3.3 评估 251
12.3.4 接口分析 252
12.4 生命周期各阶段活动 253
12.4.1 管理阶段的验证和确认 253
12.3.5 测试 253
12.4.2 概念阶段的验证和确认 255
12.4.3 需求阶段的验证和确认 255
12.4.4 设计阶段的验证和确认 256
12.4.5 实现阶段的验证和确认 257
12.4.6 测试阶段的验证和确认 258
12.4.7 安装和校验阶段的验证和确认 258
12.4.8 运行和维护阶段的验证和确认 260
12.4.9 验证和确认任务总结 261
12.5 验证和确认的报告 274
12.5.1 标准要求的报告 275
12.5.2 标准可选报告 275
12.6 本章小结 275
第13章 软件质量保证 277
13.1 基本概念 277
13.1.1 目标 278
13.1.2 执行的承诺 278
13.1.3 执行的能力 278
13.1.4 执行的活动 279
13.1.6 验证实现 281
13.2 SQA实施过程 281
13.1.5 度量分析 281
13.2.1 建立SQA组织 282
13.2.2 选择SQA任务 283
13.2.3 产生/维护SQA计划 297
13.2.5 产生/维护SQA规程 299
13.2.6 标识SQA培训 299
13.2.4 实施SQA计划 299
13.2.8 改进项目SQA过程 300
13.2.7 标识/选择SQA工具 300
13.3 本章小结 301
第14章 需求测试 302
14.1 需求测试概述 302
14.1.1 什么是需求 302
14.1.2 测试需求 307
14.2 通过评审来测试需求 307
14.2.1 需求评审中的常见风险 307
14.2.2 需求评审检查表 308
14.3 通过用例设计来测试需求 313
14.4 需求建模测试 316
14.4.1 统一建模语言 317
14.4.2 消息顺序图(MSC) 320
14.4.3 分析建模工具介绍 321
14.4.4 需求的形式化描述 324
11.4 质量标准 324
14.5 基于原型的测试 325
14.5.1 原型的目的 325
14.5.2 原型的种类 325
14.5.3 原型的测试方法 326
14.6 本章小结 327
15.1.1 什么是设计 328
15.1 设计测试概述 328
第15章 设计测试 328
15.1.2 软件构架设计 330
15.1.3 概要设计和详细设计 334
15.2 设计的评审 336
15.2.1 设计查检表 336
15.2.2 构架设计评审方法 340
15.2.3 软件构架评价最佳工业实践 345
15.3 SDL 及相关测试 352
15.3.1 SDL介绍 352
15.3.2 SDL基本概念 353
15.3.3 SDL结构 356
15.3.4 SDL测试 358
5.4 本章小结 365
第16章 同行评审 366
16.1 基本概念 366
16.2 同行评审的一般过程 367
16.2.1 计划阶段 367
16.2.2 实施被选择的同行评审过程 370
16.2.3 同行评审过程度量 370
16.2.4 同行评审的评审/审计 370
16.3.5 过程 371
16.3.4 入口标准 371
16.3.3 输入 371
16.3.1 过程目标 371
16.3 走读 371
16.3.2 特定的角色和职责 371
16.3.6 出口标准 372
16.3.7 输出 372
16.4 技术评审 372
16.4.1 过程目标 373
16.4.2 特定的角色和职责 373
16.4.3 输入 373
16.4.4 入口标准 373
16.4.5 过程 373
16.5 正规检视 374
16.4.6 出口标准 374
16.4.7 输出 374
16.5.1 正规检视小组 375
16.5.2 正规检视过程 379
16.5.3 正规检视常用表格 387
16.6 本章小结 393
第17 章测试经验总结 395
17.1 软件测试的10大原则 395
17.1.1 原则1:测试是一个持续进行的过程,而不是一个阶段 395
17.1.2 原则2:测试必须被计划、被控制,并且被提供时间和资源 395
17.1.3 原则3:测试应当分级别 396
17.1.5 原则5:测试不是为了证明程序的正确性,而是为了证明程序不能工作 397
17.1.4 原则4:测试应当有重点 397
17.1.7 原则7:测试是开发的朋友,不是开发的敌人 398
17.1.6 原则6:测试是不可能穷尽的,当测试出口条件满足时就可以停止测试 398
17.1.8 原则8:测试人员应公正地测试,如实地记录和报告缺陷 399
17.1.9 原则9:测试自动化能解决一部分问题,但不是全部 399
17.1.10 原则10:测试不能仅仅包括功能性的验证,还应当包含性能、可靠性、可维护性、安全性等方面的验证 399
17.2 软件测试的10个最佳实践 400
17.2.1 实践1:尽早地、频繁地进行测试是降低项目成本,提高质量的一个好方法 400
17.2.2 实践2:尽早产生一个综合的主测试计划 400
17.2.4 实践4:在每个开发阶段,使用测试和评价的结果作为是否可以通过的标准 401
17.2.5 实践5:开发和维护一个测试需求和目标的风险优先级列表 401
17.2.3 实践3:对质量要求较高或大型复杂的产品成立独立的测试组 401
17.2.6 实践6:把测试件作为产品的一部分等同管理,使用相同的评价标准和过程 402
17.2.7 实践7:提供集成化的测试工具和测试基础支持 402
17.2.8 实践8:加强测试度量工作和缺陷分析工作,不断地改进测试 404
17.2.9 实践9:加强测试的培训并且为测试人员提供技能发展的通道 405
17.2.10 实践10:加强沟通和交流,让项目组内所有人员都了解测试的工作及其重要性 405
17.3本章小结 406
附录A 常见测试术语 407
附录B 测试技术分类 427
附录C 常见的编码错误 430
附录D 经典测试网站 433
附录E 参考资料 437