第1章 软件测试入门 1
1.1什么是软件缺陷? 2
1.2什么是软件质量? 5
1.3什么是软件测试? 8
1.4软件测试的主要活动 10
小结 13
思考题1 14
参考文献 14
第2章 需求与设计评审 15
2.1为什么需求和设计评审如此重要? 15
2.2如何做好产品的需求评审? 18
2.2.1如何理解软件需求? 19
2.2.2如何确定传统软件需求的评审标准? 20
2.2.3如何评审敏捷需求——用户故事? 23
2.2.4如何有效地完成需求评审? 24
2.3如何做好软件设计评审? 31
2.3.1软件设计的评审标准 31
2.3.2系统架构设计的评审 34
2.3.3组件设计的审查 34
2.3.4界面设计的评审 35
小结 36
思考题2 37
参考文献 37
实验1需求评审 38
第3章 单元测试 40
3.1如何开始单元测试? 41
3.1.1待测函数 42
3.1.2在研发环境下完成单元测试 43
3.1.3 JUnit的关键组件 45
3.1.4 JUnit的工作原理 50
3.1.5 xUnit家族 51
3.2单元测试用例设计 53
3.2.1测试工作从代码行分析开始 53
3.2.2条件常常会出错 57
3.2.3更充分的测试 59
3.2.4更正式的充分性测试 60
3.2.5执行路径的覆盖测试 61
3.2.6从节点扩展到程序结构 63
3.2.7对循环结构的程序进行测试 66
3.3从函数走向软件包 69
3.3.1待测软件包 69
3.3.2如何测试一个完整的类? 75
3.3.3如何避免非测试对象的影响? 78
3.3.4 Package的测试 84
3.3.5如何完成批量执行测试? 87
3.3.6如何衡量测试效果? 89
3.3.7最常用的覆盖率分析工具有哪些? 90
3.4以逸待劳的测试——代码静态分析 95
3.4.1通过代码评审发现哪类问题? 96
3.4.2常见的代码缺陷模式 98
3.4.3如何借助工具直接发现代码中的错误? 100
3.4.4如何比较好地保证代码的规范性? 108
3.5单元测试的最高境界 110
3.5.1 TDD是最彻底的单元测试 111
3.5.2 TDD与ATDD 114
3.5.3零缺陷质量管理思想应用于编程 115
小结 116
思考题3 117
参考文献 118
实验2用逻辑覆盖法进行JUnit单元测试实验 118
实验3 Mock测试实验 120
实验4单元测试覆盖率分析实验 122
第4章 持续集成测试 126
4.1如何开展集成测试? 127
4.2如何构建持续集成的环境? 128
4.2.1持续集成需求对环境的要求 129
4.2.2源代码管理工具 130
4.2.3版本构建工具 130
4.2.4持续集成管理工具 135
4.3如何完成自动部署和自动集成测试? 139
4.3.1如何在持续集成中实现自动部署? 140
4.3.2如何在构建前实现自动静态分析? 141
4.3.3如何在构建后实现自动验证? 150
小结 151
思考题4 152
参考文献 152
实验5持续集成测试实验 153
第5章 系统功能测试 155
5.1功能测试之前的准备 156
5.1.1系统功能测试究竟测什么? 156
5.1.2系统功能测试应该考虑哪些问题? 156
5.1.3系统功能测试的基本思路 159
5.2 Web应用功能的测试需求分析 162
5.3 Web应用功能的测试设计 167
5.3.1有哪些常用的系统功能测试方法? 168
5.3.2如何减少测试数据量? 170
5.3.3如何完成组合测试? 175
5.3.4组合爆炸如何测试? 178
5.4面向接口的Web测试 182
5.4.1基于SOAP接口的测试 183
5.4.2基于REST接口的测试 189
5.5基于场景的测试方法 191
5.6 Web应用功能的测试执行 193
5.6.1如何避免单调重复的手工测试? 194
5.6.2没有测试用例也可以吗? 201
5.7 Web应用功能的回归测试 204
5.8 功能相关的其他各种类型测试 206
小结 207
思考题5 208
参考文献 209
实验6系统功能测试实验 210
实验7探索式测试实验 211
第6章 系统性能测试 213
6.1什么是性能测试? 213
6.1.1有哪些常见的性能问题? 214
6.1.2如何区分性能测试中不同的目的? 214
6.2如何确定系统的性能需求? 217
6.2.1关键性能指标分析 217
6.2.2关键业务分析 219
6.3如何完成性能测试的设计? 220
6.3.1如何模拟用户操作? 220
6.3.2如何有效地模拟加载过程? 221
6.3.3如何实时准确地控制加载? 224
6.4如何选择合适的性能测试工具? 225
6.4.1性能测试工具需要哪些关键特性? 225
6.4.2有哪些常见的性能测试工具? 233
6.5如何执行性能测试? 235
6.5.1脚本开发 235
6.5.2环境设置 239
6.5.3执行与过程监控 240
6.6如何分析和评估测试结果? 242
6.7客户端的性能测试有何不同? 245
小结 249
思考题6 250
参考文献 250
实验8系统性能测试 251
第7章 系统安全性测试 253
7.1什么是安全性测试? 253
7.1.1如何认识系统的安全性? 253
7.1.2系统存在哪些安全性漏洞? 256
7.1.3清楚安全性测试的目标与任务 259
7.2如何进行安全性测试? 260
7.2.1贯穿研发生命周期的安全性测试 260
7.2.2有哪些安全性测试方法? 263
7.3安全性静态测试 266
7.4渗透测试 269
7.5模糊测试方法 272
7.6 Web安全性测试 273
小结 279
思考题7 280
参考文献 280
实验9安全性测试实验 281
第8章 移动App的测试 283
8.1移动应用测试有哪些特点? 283
8.2如何完成移动App功能的自动化测试? 285
8.2.1优先选择面向接口的自动化测试 286
8.2.2 Android App用户界面自动化测试 292
8.2.3 iOS App用户界面自动化测试 303
8.2.4跨平台的App用户界面自动化测试 310
8.3专项测试 311
8.3.1耗电量测试 312
8.3.2流量测试 315
8.4性能测试 317
8.4.1 Android内存分析 318
8.4.2 iOS内存分析 320
8.5移动App“闪退”的测试 323
8.6安全性测试 323
8.7用户体验测试 325
小结 328
思考题8 328
参考文献 329
实验10移动App自动化测试实验 329
第9章 基于模型的软件测试 331
9.1究竟什么是MBT? 332
9.2目前有哪些有效的MBT方法? 335
9.3基于业务建模的MBT方法 338
9.3.1基于业务流程建模 338
9.3.2基于事件流、应用场景的建模 340
9.3.3因果图法 343
9.4基于UML的MBT方法 348
9.5有限状态机的测试方法 354
9.6定理证明 357
9.7符号执行 360
9.8模型检验 365
9.8.1建模方法 366
9.8.2检测算法 368
9.8.3检测工具 371
9.9模糊测试方法 371
小结 375
思考题9 376
参考文献 377
第10章 测试与缺陷管理 379
10.1测试计划 379
10.1.1测试计划内容 380
10.1.2测试计划过程 381
10.1.3测试目标 382
10.1.4测试策略 383
10.1.5制定有效的测试计划 388
10.2测试风险的控制 389
10.2.1风险的识别与分析 389
10.2.2控制风险的对策 391
10.2.3测试执行策略 393
10.3缺陷的管理 395
10.3.1软件缺陷生命周期 395
10.3.2如何描述软件缺陷? 397
10.3.3有效的缺陷描述可达目标如何? 401
10.3.4 如何跟踪和处理缺陷? 402
10.3.5如何进行缺陷分析? 403
10.3.6有哪些缺陷跟踪系统? 409
10.4软件测试的原则 410
10.5测试报告 413
10.5.1评估测试覆盖率 414
10.5.2基于软件缺陷的质量评估 416
10.5.3测试报告的书写 418
10.6测试管理工具 419
小结 421
思考题10 422
参考文献 422