第一篇 软件测试的原理与方法 3
第1章 引论 3
1.1 软件测试的必要性 3
1.1.1 迪斯尼并不总是带来笑声 3
1.1.2 一个缺陷造成了数亿美元损失 4
1.1.3 火星探测飞船坠毁 5
1.1.4 更多的悲剧 5
1.2 为什么要进行软件测试 6
1.3 什么是软件测试 7
1.3.1 软件测试学科的形成 7
1.3.2 正反两方面的争辩 8
1.3.3 软件测试的定义 8
1.3.4 软件测试的其他观点 9
1.4 软件测试和软件开发的关系 10
1.5 测试驱动开发的思想 12
小结 13
思考题 13
第2章 软件测试的基本概念 14
2.1 软件缺陷 14
2.1.1 软件质量的内涵 15
2.1.2 软件缺陷的定义 17
2.1.3 软件缺陷的产生 18
2.1.4 软件缺陷的构成 19
2.1.5 修复软件缺陷的代价 20
2.2 验证和确认 21
2.2.1 验证和确认 21
2.2.2 评审 22
2.2.3 质量保证和测试的关系 22
2.3 软件测试的分类 23
2.4 测试阶段 25
2.5 软件测试的工作范畴 28
小结 29
思考题 29
第3章 软件测试方法 30
3.1 白盒测试方法 30
3.1.1 语句覆盖 31
3.1.2 判定覆盖 33
3.1.3 条件覆盖 34
3.1.4 判定-条件覆盖 34
3.1.5 条件组合覆盖 35
3.1.6 路径覆盖 35
3.1.7 基本路径测试法 36
3.2 黑盒测试方法 38
3.2.1 等价类划分法 39
3.2.2 边界值分析法 41
3.2.3 判定表方法 43
3.2.4 因果图法 45
3.2.5 正交试验法 46
3.2.6 功能图法 48
3.2.7 错误推测法 49
3.3 静态测试和动态测试 50
3.4 主动测试和被动测试 50
3.5 形式化测试方法 51
3.5.1 形式化方法 51
3.5.2 形式化验证 53
3.5.3 基于模型的软件测试 53
3.5.4 扩展有限状态机方法 56
3.6 基于风险的测试 59
3.7 模糊测试方法 60
3.8 ALAC测试和随机测试方法 61
小结 62
思考题 62
第4章 软件测试依据和规范 64
4.1 测试过程模型 64
4.1.1 软件过程模型 64
4.1.2 用V模型诠释软件测试过程 66
4.1.3 W模型 68
4.1.4 TMap 69
4.2 测试过程改进模型 71
4.2.1 TMM 71
4.2.2 TPI 74
4.2.3 CTP 78
4.2.4 STEP 79
4.3 软件测试标准和规范 80
4.3.1 概述 80
4.3.2 ISO/GB软件质量体系标准 82
4.3.3 软件测试规范 86
4.4 软件测试管理和评判体系 89
小结 91
思考题 92
第二篇 软件测试的技术 95
第5章 单元测试 95
5.1 什么是单元测试 95
5.1.1 单元测试的定义 95
5.1.2 为何要进行单元测试 96
5.2 单元测试的目标和任务 97
5.2.1 目标 97
5.2.2 任务 97
5.3 静态测试 99
5.3.1 编码的标准和规范 99
5.3.2 代码评审 102
5.4 驱动程序和桩程序 107
5.5 调试与评估 108
5.6 单元测试的管理 109
5.7 单元测试工具 110
5.7.1 JUnit介绍 110
5.7.2 在Eclipse中JUnit应用举例 112
5.7.3 JUnit+Ant构建自动的单元测试 115
5.7.4 CheckStyle/PMD与FindBug的使用 116
5.7.5 SourceMonitor检测代码复杂度 117
5.7.6 开源的单元测试工具 118
5.7.7 商业的单元测试工具 121
小结 123
思考题 124
第6章 集成测试和系统测试 125
6.1 系统集成的模式与方法 125
6.1.1 集成测试前的准备 125
6.1.2 集成测试的模式 126
6.1.3 自顶向下和自底向上集成方法 127
6.1.4 大棒与三明治集成方法 128
6.1.5 持续集成 130
6.2 功能测试 131
6.3 回归测试 132
6.3.1 目的 132
6.3.2 策略及其方法 133
6.4 非功能性测试 134
6.4.1 性能测试 134
6.4.2 压力测试 137
6.4.3 容量测试 138
6.4.4 安全性测试 139
6.4.5 可靠性测试 140
6.4.6 容错性测试 142
小结 144
思考题 145
第7章 验收测试 146
7.1 验收测试过程 146
7.2 产品规格说明书的验证 148
7.2.1 产品规格说明书的评审 148
7.2.2 产品规格说明书的验证 148
7.3 用户界面和可用性测试 149
7.4 兼容性测试 152
7.4.1 软件兼容性测试 152
7.4.2 数据共享兼容性测试 153
7.4.3 硬件兼容性测试 154
7.5 安装测试和可恢复性测试 155
7.6 文档测试 157
7.6.1 文档的种类 157
7.6.2 怎样进行文档测试 158
小结 158
思考题 158
第8章 面向对象软件的测试 159
8.1 概述 159
8.1.1 类与子类的测试 159
8.1.2 分层与增量 160
8.1.3 面向对象层次结构测试重点 161
8.2 面向对象的单元测试 162
8.2.1 方法层次的测试 162
8.2.2 类层次的测试 162
8.2.3 类树层次的测试 163
8.3 面向对象的集成测试 164
8.3.1 对象及其交互性测试 164
8.3.2 分布式对象测试 165
8.4 基于客户角度的Java测试 167
8.4.1 空指针保护 167
8.4.2 格式化数字错误 168
8.4.3 字符串或数组越界错误 169
8.4.4 资源不合理使用 170
8.4.5 不当使用synchronized导致系统性能下降 171
8.4.6 调用不当方法导致结果出错 172
8.5 基于程序角度的Java测试 172
8.5.1 Action层的单元测试 172
8.5.2 Biz逻辑事务层的单元测试 174
8.5.3 Servlet的单元测试 176
8.5.4 流行框架Struts+Spring+Hibernate的测试 178
小结 180
思考题 180
第9章 基于应用服务器的测试 181
9.1 基于Web服务器应用的测试 181
9.1.1 Web服务器功能测试 181
9.1.2 Web安全性测试 183
9.1.3 Web性能测试 185
9.1.4 性能测试工具Flood 189
9.2 基于数据库应用服务器的测试 192
9.2.1 数据库服务器性能测试 192
9.2.2 数据库并发控制测试 195
9.3 基于Java EE应用服务器的测试 197
9.3.1 用JProfiler完成应用服务器的性能测试 197
9.3.2 Java WebLogic应用服务器测试 202
小结 204
思考题 204
第10章 软件本地化测试 205
10.1 什么是软件本地化 205
10.1.1 软件本地化与国际化 206
10.1.2 字符集问题 207
10.1.3 软件国际化标准 207
10.1.4 软件本地化基本步骤 208
10.1.5 软件本地化测试 209
10.2 翻译验证 210
10.3 本地化测试的技术问题 212
10.3.1 数据格式 212
10.3.2 页面显示和布局 218
10.3.3 配置和兼容性问题 219
10.4 本地化的功能测试 220
小结 221
思考题 221
第11章 软件测试自动化 223
11.1 测试自动化的内涵 223
11.1.1 手工测试的局限性 224
11.1.2 什么是测试自动化 224
11.1.3 软件测试自动化的优势 225
11.2 测试自动化实现的原理 226
11.2.1 代码分析 227
11.2.2 对象识别 228
11.2.3 脚本技术 229
11.2.4 自动比较技术 232
11.2.5 测试自动化系统的构成 233
11.3 测试自动化的实施 234
11.3.1 测试工具的分类 234
11.3.2 测试工具的选择 235
11.3.3 测试自动化普遍存在的问题 236
11.3.4 自动化测试的引入和应用 238
11.4 功能测试工具 239
11.4.1 关键特性 240
11.4.2 Selenium及其应用 243
11.4.3 Web功能测试工具 248
11.4.4 AutoIT及其客户端测试工具 250
11.4.5 嵌入式测试工具 253
11.5 性能测试工具 254
11.5.1 JMeter及其应用 254
11.5.2 性能测试工具的主要特性 256
11.5.3 常见的性能测试工具 257
11.6 安全性测试工具 258
11.7 缺陷跟踪系统 260
11.8 管理工具 262
小结 263
思考题 264
第三篇 软件测试的实践 267
第12章 组建测试团队 267
12.1 测试团队的地位和责任 267
12.1.1 软件测试团队的任务 267
12.1.2 测试团队的规模 269
12.2 测试团队的构成 270
12.2.1 测试团队的基本构成 270
12.2.2 测试人员的责任 271
12.2.3 测试团队的组织模型 274
12.3 如何从零开始 275
12.3.1 对测试人员的要求 275
12.3.2 优秀测试工程师应具备的素质 277
12.3.3 测试人员的招聘 280
12.3.4 测试新人的培训 281
12.4 测试团队的管理和发展 283
12.4.1 测试团队的激励方法 283
12.4.2 知识共享和在岗培训 285
小结 286
思考题 287
第13章 部署测试环境 288
13.1 测试环境的重要性 288
13.2 测试环境要素 289
13.2.1 硬件 290
13.2.2 网络环境 292
13.2.3 软件 292
13.2.4 数据准备 294
13.3 虚拟机的应用 294
13.3.1 虚拟机软件 295
13.3.2 VMware的虚拟机解决方案 295
13.3.3 辅助工具 296
13.4 建立测试实验室 297
13.4.1 实验室建立的评估分析 298
13.4.2 选择和规划实验室 299
13.4.3 集成和配置测试设备 300
13.5 如何建立项目的测试环境 301
13.6 自动部署测试环境 302
13.7 测试环境的维护和管理 305
小结 307
思考题 308
第14章 设计和维护测试用例 309
14.1 测试用例构成及其设计 309
14.1.1 测试用例的重要性 310
14.1.2 测试用例设计书写标准 310
14.1.3 测试用例设计要考虑的因素 312
14.1.4 测试用例设计的基本原则 315
14.2 测试用例的组织和跟踪 316
14.2.1 测试用例的属性 316
14.2.2 测试套件及其构成方法 318
14.2.3 跟踪测试用例 319
14.2.4 维护测试用例 321
14.2.5 测试用例的覆盖率 323
小结 323
思考题 323
第15章 报告所发现的缺陷 324
15.1 软件缺陷的描述 324
15.1.1 软件缺陷的生命周期 324
15.1.2 严重性和优先级 326
15.1.3 缺陷的其他属性 327
15.1.4 完整的缺陷信息 328
15.1.5 缺陷描述的基本要求 329
15.1.6 缺陷报告的示例 330
15.2 软件缺陷相关的信息 331
15.2.1 软件缺陷的图片信息 331
15.2.2 使用WinDbg记录软件缺陷信息 332
15.2.3 使用Soft-ICE记录软件缺陷信息 334
15.2.4 分离和再现软件缺陷 335
15.3 软件缺陷跟踪和分析 336
15.3.1 软件缺陷处理技巧 336
15.3.2 缺陷趋势分析 337
15.3.3 缺陷分布分析 338
15.3.4 缺陷跟踪方法 340
15.4 软件缺陷跟踪系统 341
小结 342
思考题 342
第16章 软件测试和质量分析报告 343
16.1 软件产品的质量度量 343
16.1.1 软件度量及其过程 344
16.1.2 软件质量的度量 345
16.1.3 质量度量的统计方法 346
16.2 评估系统测试的覆盖程度 347
16.2.1 对软件需求的估算 348
16.2.2 基于需求的测试覆盖评估 349
16.2.3 基于代码的测试覆盖评估 349
16.3 基于缺陷分析的产品质量评估 350
16.3.1 缺陷评测的基线 350
16.3.2 经典的种子公式 351
16.3.3 基于缺陷清除率的估算方法 351
16.3.4 软件产品性能评估 352
16.4 测试报告的具体内容 353
小结 354
思考题 354
第17章 软件测试项目管理 355
17.1 测试项目管理的特点 355
17.2 如何做好测试项目管理 357
17.3 软件测试项目的过程管理 358
17.3.1 测试的目标和准则 359
17.3.2 测试计划内容 360
17.3.3 测试项目的计划过程 361
17.3.4 制定有效的测试计划 362
17.3.5 测试策略的确定 363
17.3.6 测试设计和开发 364
17.3.7 测试执行 365
17.4 测试项目的资源管理 367
17.5 测试项目的进度管理 368
17.5.1 测试项目的里程碑和关键路径 368
17.5.2 测试项目进度的特性及外在关系 370
17.5.3 测试项目进度的管理方法和工具 372
17.6 测试项目的风险管理 375
17.7 软件测试文档的管理 377
小结 378
思考题 378
附录A 软件测试中英文术语及中文解释 379
附录B 测试计划中文解释模板 393
附录C 测试用例设计模板 405
附录D 软件缺陷模板 407
附录E 测试报告模板 408
附录F Java Code Inspection Checklist 411
参考文献 414