第1章 概述 1
1.1 软件测试的发展历程及现状 1
1.1.1 软件测试的发展历程 1
1.1.2 我国软件测试的现状 2
1.2 什么是软件测试 2
1.2.1 软件测试的定义 3
1.2.2 软件测试生命周期 4
1.2.3 软件开发与测试模型 4
1.2.4 与软件测试相关的术语 8
1.3 软件测试技术分类 9
1.4 软件测试的目的 14
1.5 软件测试的原则 16
1.5.1 尽早地和不断地进行软件测试 16
1.5.2 不可能完全的测试 16
1.5.3 增量测试,由小到大 19
1.5.4 避免测试自己的程序 20
1.5.5 设计周密的测试用例 20
1.5.6 注意错误集中的现象 23
1.5.7 确认bug的有效性 23
1.5.8 合理安排测试计划 24
1.5.9 回归测试 24
1.5.10 测试结果的统计和分析 25
1.5.11 及时更新测试 25
1.6 软件测试工作流程 26
1.7 软件测试中的误区 29
1.8 一个贯穿全文的例子——在线测评平台 30
1.8.1 系统概述 31
1.8.2 系统需求 32
1.8.3 系统分析 36
1.8.4 系统设计 40
1.8.5 系统实施 42
1.8.6 系统运行环境及配置 42
1.8.7 系统使用说明 43
本章小结 52
习题 53
第2章 离散数学和图论基础 55
2.1 集合论 55
2.2 函数 57
2.3 关系 58
2.4 命题逻辑 60
2.5 概率论 62
2.6 用于测试的图 63
2.6.1 图 63
2.6.2 程序图 65
2.6.3 有限状态机 66
2.6.4 状态图 67
本章小结 68
习题 68
第3章 白盒测试 69
3.1 白盒测试概述 69
3.1.1 白盒测试与调试的异同 71
3.1.2 白盒测试的分类 72
3.2 白盒测试用例设计技术 73
3.2.1 逻辑覆盖测试 73
3.2.2 边界值分析 77
3.2.3 基本路径测试 77
3.2.4 循环语句测试 80
3.2.5 程序插装 81
3.2.6 其他白盒测试方法 83
本章小结 84
习题 85
第4章 黑盒测试 88
4.1 黑盒测试概述 89
4.1.1 黑盒测试和白盒测试的异同 89
4.1.2 黑盒测试的原则和策略 90
4.2 黑盒测试用例设计技术 91
4.2.1 等价类划分法 91
4.2.2 边界值分析法 95
4.2.3 因果图法 98
4.2.4 决策表法 101
4.2.5 错误推测法 103
本章小结 103
习题 104
第5章 单元测试 105
5.1 单元测试概述 106
5.1.1 单元测试误区 108
5.1.2 单元测试与集成测试区别 110
5.1.3 单元测试与系统测试区别 111
5.2 单元测试环境 111
5.3 单元测试策略 113
5.3.1 自顶向下的单元测试策略 113
5.3.2 自底向上的单元测试 113
5.3.3 孤立测试 114
5.4 单元测试主要任务 114
5.5 单元测试步骤 118
5.6 单元测试用例设计 121
5.7 单元测试案例 131
5.8 单元测试经验总结 139
本章小结 139
习题 139
第6章 集成测试 141
6.1 集成测试概述 141
6.1.1 集成测试与系统测试的区别 142
6.1.2 集成测试与开发的关系 143
6.1.3 集成测试的重点 143
6.1.4 集成测试的层次 144
6.2 如何进行集成测试 144
6.2.1 集成测试分析 144
6.2.2 集成测试策略 149
6.2.3 集成测试环境 166
6.2.4 集成测试用例设计 167
6.2.5 集成测试过程 171
6.2.6 集成测试举例 173
6.3 集成测试经验总结 183
本章小结 184
习题 185
第7章 系统测试 186
7.1 系统测试概述 186
7.1.1 什么是系统测试 186
7.1.2 系统测试的组织和分工 187
7.2 如何进行系统测试 187
7.2.1 系统测试分析 188
7.2.2 系统测试环境 189
7.2.3 系统测试类型 191
7.2.4 系统测试用例设计 206
7.2.5 系统测试执行 207
7.2.6 系统测试案例研究 208
7.3 系统测试经验总结 226
本章小结 227
习题 227
第8章 软件测试自动化 229
8.1 进行自动化测试的适当时机 229
8.1.1 概述 230
8.1.2 自动化测试的成本 231
8.1.3 自动化测试的生命周期 232
8.1.4 自动化测试的价值 234
8.1.5 例子 237
8.1.6 另外一些需要考虑的问题 238
8.2 自动化测试和手工测试 240
8.2.1 自动化测试与手工测试的比较 240
8.2.2 短测试周期中手工测试面临的挑战 240
8.2.3 手工测试的问题 241
8.2.4 自动化测试的问题 242
8.2.5 自动化测试的优点 242
8.2.6 自动化测试的缺点 244
8.3 自动化测试工具的选择和使用 244
8.3.1 应用自动化测试工具的目的 245
8.3.2 自动化测试工具的概要介绍 245
8.3.3 自动化测试工具的选择 249
8.3.4 自动化测试工具在测试过程中的应用 250
8.4 自动化测试工具 251
8.4.1 JUnit 251
8.4.2 C++ Test 266
8.4.3 LoadRunner 275
8.4.4 IBM Rational Functional Tester 297
经验总结 302
本章小结 304
习题 305
第9章 软件bug和管理 306
9.1 软件bug概述 306
9.1.1 bug的影响 307
9.1.2 bug的产生 308
9.2 bug的种类 311
9.2.1 需求阶段的bug 311
9.2.2 分析设计阶段的bug 312
9.2.3 实现阶段的bug 312
9.2.4 配置阶段的bug 315
9.2.5 短视将来的bug 315
9.2.6 静态文档的bug 316
9.3 bug报告单的提交和管理 316
9.3.1 bug报告单的内容 316
9.3.2 bug报告的特点 322
9.3.3 重现bug的分析和方法 324
9.3.4 bug管理流程 331
本章小结 335
习题 335
附录A 软件测试常用术语表 336
附录B 软件常见错误 352
B1 用户界面错误 352
B1.1 功能性 352
B1.2 通信 353
B1.3 命令结构和录入 358
B1.4 遗漏的命令 362
B1.5 程序僵化 364
B1.6 性能 367
B1.7 输出 369
B2 错误处理 370
B3 边界相关错误 372
B4 计算错误 374
B5 初始状态和以后状态 377
B6 控制流错误 379
B6.1 程序失去控制 380
B6.2 程序停止 384
B6.3 循环 385
B6.4 IF、THEN、ELSE或者其他情况 386
B6.5 多种情况 388
B7 处理或解释数据的错误 389
B7.1 在例程之间传递数据时的问题 389
B7.2 数据边界 392
B7.3 超过消息缓冲区的极限读取数据 392
B7.4 消息问题 393
B7.5 数据存储损坏 394
B8 竞争条件 394
B9 负荷情况 397
B10 硬件 400
B11 来源、版本和ID控制 403
B12 测试错误 405
参考文献 409