本书深入浅出地介绍了软件测试的基本概念与方法,提供成为一个成功的测试专家所必须具备的技术与知识体系。全书中选择丰富有趣的例子贯穿全书,由简单到复杂,让读者可以轻松地掌握测试的关键技术。书中不仅涉及了软件测试的基础知识与基本技术,同时还介绍了一些普通的测试教程中很少涉及的内容,其中主要包括跨越整个软件开发生命周期的测试方法,以及用统计学的方法来进行测试结果的分析等。这些测试相关的理论有比较高的学术价值,可以为测试实践活动提供更好的指导。
该书适合从事软件测试与软件开发的IT从业人员或者高等院校计算机专业的高年级本科生以及研究生阅读。
第1章 测试概述/1
1.1 概述/1
1.2 测试的目标与局限性/2
1.2.1 测试人员的思维/2
1.2.2 用户级别的非软件测试——买车/3
1.2.3 开发人员级别的非软件测试——造车/4
1.2.4 测试的4个主要目标/7
1.2.5 开发公理——质量必须在开发时考虑,而不是测试时/9
1.3 测试的价值与开销/9
1.3.1 市场级别的非软件测试——车辆安全与销售额/10
1.3.2 估算失败的开销/10
1.3.3 Basili和Boehm的指数定律/11
1.3.4 Internet上的“淘金潮”/13
1.3.5 电子商务的致命弱点/13
1.4 测试与软件开发生命周期的关系/13
1.4.1 软件测试作为一项技术职业的发展史/13
1.4.2 好的软件测试的10个准则/14
1.4.3 “GOSSIP”游戏/18
1.5 软件测试中的测试人员和开发人员的角色/19
1.5.1 软件质量期望的简史——“天堂的迷失”/19
1.5.2 测试人员在软件开发中的角色/20
1.5.3 测试工具专家在软件开发中的角色/20
1.5.4 测试组中都有谁/21
1.6 关于软件测试的观点讨论/21
1.7 本章小结/21
1.7.1 4个主要的测试目标/21
1.7.2 开发公理——质量必须在开发时而不是测试时考虑/22
1.7.3 软件测试作为一项技术职业的发展史/22
1.7.4 好的软件测试的10个准则/22
第2章 软件开发生命周期/24
2.1 概述/24
2.2 方法和工具/24
2.3 软件开发生命周期的发展/25
2.3.1 经典的SDLC/25
2.3.2 原型化方法/25
2.3.3 快速应用程序开发/26
2.4 逐步开发方法/27
2.4.1 生命周期阶段/27
2.4.2 系统开发步骤/28
2.4.3 在各阶段中的软件测试/28
2.5 初始调研阶段/30
2.5.1 进行企业分析/30
2.5.2 定义系统目的、目标和性能标准/31
2.5.3 评估系统和项目风险/32
2.5.4 评估系统和项目的可行性/33
2.5.5 通过JAD会议确认初始结论/33
2.5.6 获得批准/34
2.6 分析阶段/34
2.6.1 分析功能需求/34
2.6.2 分析已有系统文档/34
2.6.3 访谈/34
2.6.4 调查研究/35
2.6.5 举行JAD会议/35
2.6.6 观察现有系统/35
2.6.7 记录功能需求/35
2.7 设计阶段/36
2.7.1 寻找可行的设计方案/37
2.7.2 评估可行的设计方案/38
2.7.3 举行JAD会议确定并评估设计方案/39
2.7.4 选取最优的设计方案/39
2.8 初始构建阶段/39
2.8.1 构建每个模块的软件/40
2.8.2 向用户和项目投资方演示新的系统模块/42
2.9 最终构建阶段/42
2.9.1 构建并测试可投产的软件/42
2.9.2 构建并测试可投产的数据库或数据仓库/43
2.9.3 安装必要的新硬件和网络连接/43
2.9.4 准备好所需的物理设施/43
2.9.5 测试硬件配置/43
2.9.6 完成所有文档/43
2.9.7 争取用户同意开始运行/43
2.9.8 培训参与人员和用户/44
2.10 安装阶段/44
2.10.1 安装系统组件/44
2.10.2 移交新系统/44
2.10.3 进行实施后评估/44
2.11 关于PDM的观点讨论/45
2.12 本章小结/45
第3章 结构化测试概述/47
3.1 概述/47
3.2 软件测试人员的清单/48
3.3 SPRAE——一个通用的结构化测试方法/49
3.3.1 规约/50
3.3.2 预先策划/50
3.3.3 可重复性/50
3.3.4 责任说明/50
3.3.5 经济性/51
3.4 关于结构化测试的观点讨论/52
第4章 测试策略/53
4.1 概述/53
4.2 测试策略中的“棋子”/53
4.2.1 静态测试/53
4.2.2 白盒测试/54
4.2.3 黑盒测试/55
4.2.4 性能测试/55
4.3 二维测试策略棋盘/56
4.4 三维测试策略棋盘/60
4.5 关于测试策略的观点讨论/62
第5章 测试计划/63
5.1 概述/63
5.2 测试计划/63
5.3 测试用例/66
5.3.1 测试用例细节/67
5.3.2 动作/70
5.4 在现实世界中编写测试计划与测试用例/71
5.5 测试文档标准/72
5.6 关于测试计划的观点讨论/73
第6章 静态测试/74
6.1 概述/74
6.2 静态测试的目标/74
6.3 静态测试的备选文档/74
6.3.1 软件开发管理人员文档/75
6.3.2 软件开发人员文档/76
6.3.3 测试人员文档/76
6.3.4 管理员文档/76
6.3.5 最终用户文档/77
6.4 静态测试技术/77
6.5 跟踪静态测试所发现的错误/78
6.6 关于静态测试的观点讨论/78
第7章 功能测试/80
7.1 概述/80
7.2 从用况到功能测试用例/80
7.3 功能测试方法/83
7.3.1 用户导航测试/83
7.3.2 事务界面测试/83
7.3.3 事务流程测试/84
7.3.4 报告界面测试/84
7.3.5 报告流程测试/85
7.3.6 数据库测试/85
7.4 回归测试的方法/86
7.5 白盒测试技术/86
7.5.1 语句覆盖技术/87
7.5.2 分支(简单条件)覆盖技术/87
7.5.3 复合条件覆盖技术/87
7.5.4 路径覆盖技术/88
7.5.5 循环覆盖技术/89
7.5.6 直觉和经验/89
7.6 黑盒测试技术/91
7.6.1 等价类技术/91
7.6.2 边界值分析技术/92
7.6.3 预期结果覆盖技术/93
7.6.4 直觉和经验/95
7.7 本章小结/96
7.8 关于功能测试的观点讨论/98
第8章 结构(非功能)测试/99
8.1 概述/99
8.2 接口测试/99
8.3 安全测试/100
8.4 安装测试/101
8.5 冒烟测试/101
8.6 管理测试/102
8.7 备份和恢复测试/102
8.8 关于结构测试的观点讨论/103
8.9 本章小结/103
第9章 性能测试/105
9.1 概述/105
9.2 负载规划技术/105
9.2.1 性能负载需求文档/106
9.2.2 性能负载峰值文档/107
9.3 负载执行技术/108
9.3.1 负载上行到峰值/109
9.3.2 负载从峰值下行/109
9.3.3 峰值性能的度量/110
9.4 构件性能测试/110
9.5 往返性能/110
9.5.1 一个典型的性能响应曲线/112
9.5.2 空测试系统中的周六峰值负载/114
9.5.3 周六的峰值负载组合/115
9.5.4 周六负载的致命缺陷/116
9.5.5 周六负载的致命缺陷的修正/116
9.5.6 工作日负载性能计划的执行/119
9.6 关于性能测试的观点讨论/119
9.7 本章小结/120
第10章 测试环境/122
10.1 概述/122
10.2 模拟/122
10.3 基准/123
10.4 测试环境/123
10.5 测试环境的目标/124
10.6 好的测试环境及使用它们的原因/126
10.7 不好的测试环境及避免它们的原因/127
10.8 关于测试环境的观点讨论/128
10.9 本章小结/128
第11章 自动化测试工具/130
11.1 概述/130
11.2 软件自动化测试工具简史/130
11.3 测试工具记录/回放范型/132
11.4 测试工具触点范型/134
11.4.1 功能测试工具的触点范型/134
11.4.2 性能测试工具的触点范型/135
11.5 测试工具执行范型/137
11.6 测试工具带来的好处/138
11.6.1 可重复性——投资回报问题/138
11.6.2 可重复性的精度——技术问题/138
11.6.3 隐藏动作和结果的验证——技术问题/139
11.6.4 时间点精度和分布——技术问题/139
11.6.5 完成手动测试不可能完成的任务——投资回报问题/140
11.6.6 可复用性(回归测试)——投资回报问题/140
11.7 测试工具带来的问题/140
11.7.1 测试工具成本——财务、资源和技巧问题/140
11.7.2 一次性的测试安装成本/141
11.7.3 测试工具的能力范围/141
11.8 关于自动化测试工具的观点讨论/142
11.9 本章小结/142
第12章 分析并解读测试结果/144
12.1 概述/144
12.2 尝试过的测试用例与成功的测试用例/144
12.3 关注单个缺陷的发现/147
12.4 关注缺陷积压日志的发现/148
12.5 关注缺陷集群的发现/149
12.6 以往错误发现模式的作用/153
12.6.1 使用以往项目缺陷历史作为出发点/154
12.6.2 在启动新项目之前利用以往项目的缺陷历史/156
12.6.3 在开始新项目时利用以往项目的缺陷历史/157
12.6.4 在新项目过程中利用以往项目的缺陷历史/159
12.7 Rayleigh曲线——缺陷发现模式的瞄准线/161
12.8 更多的缺陷跟踪度量指标/164
12.9 关于测试结果的观点讨论/165
12.10 本章小结/165
第13章 一个全软件开发生命周期的测试项目/167
13.1 概述/167
13.2 初始调研阶段/168
13.3 分析阶段/169
13.3.1 初始会议和结论/169
13.3.2 需求撰写和复审——用况/171
13.3.3 需求静态测试/172
13.3.4 使用静态测试的结果修正和改进需求/172
13.3.5 完成测试策略/174
13.4 设计阶段/175
13.4.1 支持系统的设计/175
13.4.2 应用软件的逻辑设计/176
13.4.3 逻辑设计的静态测试/177
13.4.4 设计测试计划/177
13.5 初始构建阶段/180
13.5.1 静态测试/180
13.5.2 测试环境搭建和测试数据准备/181
13.5.3 功能测试/182
13.5.4 结构测试/183
13.5.5 性能测试/184
13.5.6 缺陷追踪和分析/185
13.5.7 初始构建阶段的结束/187
13.6 最终构建阶段/188
13.6.1 静态测试/188
13.6.2 功能测试/189
13.6.3 结构测试/189
13.6.4 性能测试/189
13.6.5 缺陷跟踪和分析/190
13.7 实施阶段/191
13.8 实施后阶段/191
13.9 案例结束/191
13.9.1 小结/192
13.9.2 案例声明/192
第14章 复杂应用测试/193
14.1 概述/193
14.2 单级应用/193
14.3 两级应用/195
14.4 三级应用/198
14.5 多级应用/201
14.6 关于复杂应用测试的观点讨论/206
14.7 本章小结/206
第15章 测试的未来发展方向/208
15.1 概述/208
15.2 会增加对专业软件测试人员需求的软件开发的未来发展方向/208
15.3 软件测试目前面临的挑战/209
15.4 软件测试近期面临的挑战/209
15.5 软件测试将要面临的挑战/210
15.6 关于未来测试方向的观点讨论/211
15.7 本章小结/211
参考文献/213