目录
第一部分软件测试基础
第1章软件测试概述3
【导读案例】CPU为什么很少会坏?3
1.1软件的开发过程5
1.1.1软件产品的组成5
1.1.2软件项目成员7
1.1.3软件开发生命周期7
1.2软件错误典型案例9
1.3软件缺陷及其影响11
1.3.1软件缺陷定义12
1.3.2产生缺陷的原因12
1.4软件测试的概念13
1.4.1软件测试定义13
1.4.2测试在软件开发中的角色14
1.4.3验证和确认14
1.4.4质量和可靠性15
1.5软件测试基本原则15
1.6软件测试分类17
1.6.1按测试级别分类17
1.6.2按测试技术分类17
1.6.3按测试类型分类18
1.6.4其他测试活动分类18
1.6.5基于软件活动的测试级别18
【习题】20
【实验与思考】对Windows计算器进行“完全测试”22第2章测试过程与测试用例24
【导读案例】与其他应用交互的Bug的原因分析示例24
2.1软件测试的基本流程24
2.2测试过程模型26
2.2.1软件过程模型26
2.2.2V模型28
2.2.3W模型29
2.2.4TMap模型29
2.2.5测试过程改进模型31
2.3测试用例计划32
2.3.1计划测试用例32
2.3.2测试用例的重要性32
2.3.3测试用例设计的考虑因素33
2.3.4测试用例设计的基本原则33
2.4测试用例设计34
2.4.1测试用例编写标准34
2.4.2测试用例标识要素36
2.5测试用例的组织和跟踪37
2.5.1测试用例的属性38
2.5.2测试套件及其构成方法39
2.5.3跟踪测试用例41
2.5.4维护测试用例42
2.6测试用例的覆盖率42
【习题】42
【实验与思考】测试用例设计示例44第3章软件质量与质量保证49
【导读案例】在软件测试计划中确定测试需求49
3.1质量是免费的50
3.2软件质量的困境50
3.2.1“足够好”的软件50
3.2.2质量成本51
3.2.3质量和安全52
3.2.4管理活动的影响52
3.3质量与软件质量52
3.3.1关于质量的观点53
3.3.2软件质量的定义53
3.3.3加文的质量维度54
3.3.4麦卡尔的质量因素54
3.3.5WebApp设计质量55
3.4软件质量保证57
3.4.1关于质量保证57
3.4.2SQA的要素58
3.4.3SQA的任务59
3.4.4SQA计划60
3.4.5统计软件质量保证61
3.4.6软件安全与可靠性61
3.4.7ISO 9000质量标准62
3.5能力成熟度模型62
3.5.1软件能力成熟度模型62
3.5.2测试成熟度模型63
【习题】64
【实验与思考】软件质量维度的新思考66第4章软件测试的职业69
【导读案例】大厂的产品质量之道69
4.1软件测试的组织70
4.1.1测试的高级期望71
4.1.2哪些要测试,哪些不要测试71
4.1.3测试的阶段与进度71
4.1.4测试策略72
4.1.5资源需求72
4.1.6度量和统计72
4.1.7风险和问题73
4.2软件测试的团队73
4.2.1测试团队的地位73
4.2.2测试团队的构成75
4.2.3测试团队组织模型76
4.2.4测试团队中的岗位77
4.2.5测试员的任务分配81
4.3测试员的职业素养82
4.3.1测试员的工作82
4.3.2测试员的职业道德83
4.3.3测试员的职业素质84
4.4管理测试团队86
【习题】88
【实验与思考】测试员的职业认同与培养途径90
第二部分测试技术与方法
第5章软件测试策略95
【导读案例】软件测试文档的深度与广度95
5.1软件测试的策略性方法96
5.1.1测试策略的特征96
5.1.2测试的宏观策略97
5.1.3测试完成的标准98
5.1.4策略问题98
5.2传统软件的测试策略99
5.2.1单元测试策略99
5.2.2集成测试策略100
5.2.3冒烟测试策略102
5.2.4回归测试策略103
5.2.5确认测试策略103
5.2.6系统测试策略104
5.3测试的标准与规范104
5.3.1标准化基础104
5.3.2GB/T 8567规定的测试文件105
5.3.3GB/T 9386计算机软件测试文档编制规范106
5.3.4GB/T 15532计算机软件测试规范106
5.4调试技巧109
5.4.1调试过程110
5.4.2心理因素110
5.4.3调试策略111
5.4.4纠正错误111
【习题】112
【实验与思考】测试的控制流程与状态图114第6章静态测试116
【导读案例】代码评审的8条准则116
6.1关于静态测试117
6.1.1错误和缺陷118
6.1.2缺陷放大模型118
6.1.3静态测试的过程119
6.2代码评审120
6.2.1检查代码120
6.2.2流图分析121
6.3非正式评审121
6.3.1桌面检查121
6.3.2结对编程122
6.3.3走查123
6.3.4同事评审123
6.4正式技术评审124
6.4.1FTR的基本要素124
6.4.2评审指导原则124
6.4.3评审会议125
6.4.4检查表126
6.4.5评审报告和记录保存127
6.4.6样本驱动评审127
6.5软件文档测试128
6.5.1软件文档的类型128
6.5.2文档测试的重要性128
6.5.3评审文档时要找什么129
6.5.4文档测试的实质129
6.5.5检查产品说明书130
6.6评审和测试类似软件131
【习题】132
【实验与思考】熟悉软件评审技术134第7章单元测试136
【导读案例】在微软当软件测试工程师136
7.1单元测试方法137
7.1.1单元测试的定义138
7.1.2单元测试的内容138
7.1.3驱动程序和桩程序139
7.2状态迁移图139
7.3单元测试过程141
7.3.1测试策划141
7.3.2测试设计142
7.3.3测试执行142
7.3.4测试总结143
7.3.5测试文档143
7.4单元测试的评估143
7.5单元测试工具144
【习题】146
【实验与思考】熟悉单元测试及其工具148第8章动态测试152
【导读案例】单元级和系统级的典型测试案例152
8.1动态测试技术153
8.1.1动态测试过程153
8.1.2分析和非分析方法153
8.1.3主动和被动测试153
8.2白盒测试方法154
8.2.1语句覆盖155
8.2.2判定覆盖156
8.2.3条件覆盖156
8.2.4判定条件覆盖157
8.2.5条件组合覆盖157
8.2.6路径覆盖158
8.3黑盒测试方法159
8.3.1等价类划分法160
8.3.2边界值分析法161
8.3.3组合分析162
8.3.4判定表方法162
8.3.5因果图法163
8.3.6错误推测法164
8.4增量测试与大突击测试164
8.5基于风险的测试165
【习题】166
【实验与思考】划分等价类与设计测试用例168第9章集成测试与配置测试170
【导读案例】我所了解的手机测试170
9.1集成测试的技术要求171
9.2集成的模式与方法172
9.2.1测试前的准备172
9.2.2集成测试的内容173
9.3集成测试过程174
9.3.1测试策划175
9.3.2测试设计175
9.3.3测试执行176
9.3.4测试总结176
9.3.5集成测试工具176
9.4配置测试的要求177
9.4.1配置测试的技术要求177
9.4.2配置测试的内容178
9.4.3配置测试过程181
9.5确认测试181
【习题】182
【实验与思考】绘制测试控制流程185第10章系统测试188
【导读案例】手机基本功能测试188
10.1什么是系统测试190
10.1.1系统测试的定义191
10.1.2功能性测试192
10.1.3可靠性测试192
10.1.4系统测试过程195
10.2功能测试195
10.3性能测试196
10.3.1系统负载196
10.3.2系统性能指标196
10.3.3性能测试基本过程197
10.3.4使用性能测试工具197
10.4易用性测试199
10.4.1用户界面测试199
10.4.2优秀UI的构成199
10.4.3辅助选项测试202
【习题】203
【实验与思考】熟悉C代码的测试覆盖率205第11章验收测试与回归测试208
【导读案例】再测试和回归测试208
11.1验收测试的定义209
11.1.1验收测试标准209
11.1.2正式验收测试209
11.1.3非正式验收测试210
11.1.4α测试与β测试210
11.1.5测试共享211
11.1.6外包测试211
11.2验收测试的内容与过程212
11.3回归测试的定义212
11.3.1技术要求213
11.3.2测试环境213
11.3.3测试方法213
11.3.4准入条件214
11.3.5准出条件214
11.4回归测试的内容与过程214
11.5回归测试的实施215
11.5.1单元回归测试215
11.5.2配置项回归测试215
11.5.3系统回归测试216
11.6回归测试的效率和有效性217
【习题】217
【实验与思考】熟悉验收测试与回归测试219第12章安全性测试223
【导读案例】提高软件系统的鲁棒性223
12.1软件的安全性224
12.1.1应用程序级别和系统级别的安全性224
12.1.2安全威胁模型224
12.1.3安全编码准则225
12.2安全性测试226
12.2.1安全性测试的目标226
12.2.2安全性测试的类型227
12.3性能测试中的压力、负载与容量229
12.3.1压力测试229
12.3.2负载测试230
12.3.3负载测试与压力测试的关系231
12.3.4容量规划232
12.4可靠性测试233
12.4.1可靠性测试方法233
12.4.2可靠性数据收集234
12.4.3可靠性测试结果评估234
12.5容错性测试234
12.5.1故障转移与数据恢复235
12.5.2测试目标235
12.5.3测试范围235
12.5.4完成标准236
【习题】236
【实验与思考】熟悉安全性测试示例238第13章自动化测试240
【导读案例】初识“猴子测试”240
13.1持续集成与持续部署241
13.2自动化测试原理244
13.2.1自动化测试基本结构244
13.2.2断言及其运用245
13.2.3自动化测试的限制246
13.3自动化测试工具247
13.3.1测试工具的类别248
13.3.2测试工具的选择248
13.4构建自动化测试框架250
13.5自动化测试的执行251
13.5.1前处理251
13.5.2后处理252
13.5.3测试过程252
13.5.4测试结果比较253
13.6随机测试的猴子256
13.6.1笨拙的猴子256
13.6.2半聪明的猴子256
13.6.3聪明的猴子257
【习题】258
【实验与思考】使用Selenium进行Web UI自动化测试260
第三部分进 阶 主 题
第14章敏捷、测试驱动与行为驱动开发测试267
【导读案例】提高软件项目产品的质量267
14.1极限测试方法268
14.1.1极限编程的主要特征268
14.1.2极限测试的过程269
14.1.3极限测试的实施270
14.2场景测试270
14.3测试驱动开发271
14.3.1TDD的基本流程271
14.3.2TDD的关键概念272
14.4行为驱动开发273
14.4.1BDD的核心原则273
14.4.2BDD的基本流程274
14.4.3BDD的测试276
14.5模糊测试方法277
14.6敏捷开发中的测试277
14.6.1敏捷开发的原则与价值观277
14.6.2敏捷测试的特点278
14.6.3敏捷测试的实践279
14.6.4用户故事驱动的测试279
【习题】280
【实验与思考】熟悉BDD与测试方法282第15章面向对象应用系统测试285
【导读案例】数据库测试的种类和方法285
15.1扩展测试的视野286
15.2测试OOA和OOD模型287
15.2.1面向对象软件的构造287
15.2.2OOA和OOD模型的正确性288
15.2.3面向对象模型的一致性288
15.3面向对象软件的测试策略289
15.3.1面向对象环境中的单元测试289
15.3.2面向对象环境中的集成测试290
15.3.3面向对象环境中的确认测试290
15.4面向对象测试方法290
15.4.1面向对象测试用例的设计含义291
15.4.2传统测试用例设计方法的可应用性291
15.4.3基于故障的测试291
15.4.4测试用例与类层次292
15.4.5基于场景的测试设计292
15.4.6表层结构和深层结构的测试293
15.5类级可用的测试方法294
15.5.1面向对象类的随机测试294
15.5.2类级的划分测试294
15.6类间测试用例设计295
15.6.1多类测试295
15.6.2从行为模型导出的测试296
【习题】297
【实验与思考】面向对象软件测试活动299第16章移动与Web应用测试302
【导读案例】基于TRIZ方法组织软件开发测试302
16.1移动应用测试303
16.1.1移动应用的主要类型303
16.1.2移动应用测试与类型304
16.1.3测试策略与环境305
16.2Web应用测试概念305
16.2.1测试的一般问题306
16.2.2质量维度306
16.2.3环境的错误307
16.2.4测试策略307
16.3Web应用测试类型307
16.4内容测试309
16.4.1内容测试的目标310
16.4.2数据库测试310
16.5界面测试311
16.5.1界面测试策略312
16.5.2测试界面机制312
16.5.3测试界面语义314
16.5.4可用性测试314
16.5.5导航测试315
16.6功能测试与性能测试316
16.6.1构件测试316
16.6.2性能测试317
16.6.3配置测试318
16.6.4易用性测试318
16.7Web安全测试319
【习题】320
【实验与思考】熟悉Web应用系统测试322第17章人工智能测试的挑战324
【导读案例】批判性思维与软件测试324
17.1DevOps文化与实践325
17.1.1DevOps生命周期326
17.1.2DevOps与测试327
17.1.3DevOps流水线集成测试328
17.1.4监控与反馈循环329
17.1.5蓝绿部署331
17.1.6金丝雀发布332
17.2大数据软件测试334
17.2.1大数据对测试的影响334
17.2.2大数据测试策略335
17.2.3大数据生态系统337
17.3云端软件测试337
17.3.1云计算与软件测试337
17.3.2云安全338
17.3.3合规性339
17.4人工智能与软件测试339
17.4.1人工智能用于测试339
17.4.2模型验证与评估340
【习题】341
【实验与思考】制定元宇宙软件测试策略343
第四部分测试的管理与发展
第18章问题报告与成效评价349
【导读案例】项目管理是“艺术”349
18.1设法修复软件缺陷350
18.1.1设法修复软件缺陷351
18.1.2分离和再现软件缺陷353
18.1.3软件缺陷之间的平等性354
18.1.4软件缺陷的生命周期355
18.2报告和跟踪软件缺陷355
18.2.1标准: 测试事件报告355
18.2.2软件缺陷报告和跟踪356
18.3成效评价356
18.3.1使用软件缺陷跟踪数据库356
18.3.2在日常测试中使用的度量357
【习题】358
【实验与思考】规划一个软件测试项目360第19章软件测试管理364
【导读案例】从程序员到软件测试工程师364
19.1软件测试的管理366
19.1.1软件测试管理的特点366
19.1.2软件测试过程管理367
19.2软件测试资源管理367
19.2.1工作量的估算368
19.2.2人力资源管理368
19.2.3测试环境资源368
19.2.4测试文档管理369
19.3软件测试进度管理369
19.3.1测试的里程碑和关键路径369
19.3.2测试进度的特性及外在关系370
19.3.3测试进度管理的S曲线法370
19.3.4测试进度NOB曲线法371
19.4软件测试风险管理372
19.5部署测试环境373
19.5.1测试环境的定义374
19.5.2测试环境要素375
19.5.3数据准备376
19.5.4虚拟机应用376
19.6测试环境的维护和管理377
19.6.1测试环境管理员的职责377
19.6.2测试环境管理所需的文档377
19.6.3测试环境访问权限的管理378
19.6.4测试环境的变更管理378
19.6.5测试环境的备份和恢复378
19.7软件测试的未来发展378
【习题】379
【课程学习与实验总结】381附录A习题及部分实验参考答案386参考文献400
ⅩⅦ
