本书分为三篇:第一篇为软件测试实践,介绍软件测试的一些方法、工具化与自动化、各类专项测试、测试数据的管理等;第二篇聚焦于交付,探讨了不同的交付模型,并对测试工作进行了解构,给出了制订测试策略以及践行精益软件测试的方法;在第三篇中,作者分享了测试工作中的沟通与团队协调、角色定位方面的经验,探讨了测试工作相关的哲学与伦理等,并以测试策略的应用实战和AI工具的应用探索作为收尾。
本书系统呈现了现代软件测试策略的技术与方法论,可帮助测试人员、开发人员、产品经理等构建或完善自己的测试策略,从而掌握破解各类测试困境的能力。
第一篇 软件测试实践
第1章 测试与测试设计 002
1.1 开始测试 002
1.2 完全测试? 003
1.2.1 EVP需求 004
1.2.2 形成bug根因清单 006
1.2.3 一个测试案例 007
1.3 软件测试方法 013
1.3.1 快速测试:空降测试员 014
1.3.2 测试设计:输入值覆盖 016
1.3.3 等价类划分与边界值 018
1.3.4 决策表 021
1.3.5 决策树 022
1.3.6 全对偶和结对测试 025
1.3.7 高容量自动化测试 028
1.3.8 其他测试方法 030
1.4 数据和可预测性:“先知”问题 031
1.5 本章回顾 033
第2章 工具与自动化的基本问题 034
2.1 技术要求 034
2.2 没有银弹 035
2.3 雷区回归问题:覆盖模型 036
2.4 海战棋问题:测试VS检查 039
2.4.1 将战舰看作bug 040
2.4.2 自动化VS人工 041
2.5 维护问题 042
2.5.1 构建自动化测试 042
2.5.2 全面自动化测试的风险 046
2.6 成本问题 047
2.7 谁来做自动化测试? 047
2.7.1 何时能看到结果? 048
2.7.2 不被理解的自动化测试 049
2.8 自动化测试思想 049
2.9 本章回顾 051
第3章 面向开发人员测试 052
3.1 技术要求 052
3.2 开发人员视角 053
3.2.1 测试和可靠性 054
3.2.2 六边形架构 054
3.3 FizzBuzz 056
3.4 单元测试 058
3.5 TDD 064
3.5.1 TDD编程 064
3.5.2 TDD编程结果 066
3.6 单元测试与单元代码设计 067
3.7 变异测试 070
3.8 测试Web API 073
3.9 测试功能性代码和遗留代码 076
3.10 罗马数字Kata 077
3.11 本章回顾 077
第4章 面向用户测试 079
4.1 技术要求 079
4.2 一项警示 080
4.3 人?还是工具? 081
4.4 GUI自动化测试模式 082
4.4.1 使用特定领域库消除重复 084
4.4.2 使用对象定位器消除重复 086
4.4.3 条件、循环结构和变量 086
4.4.4 断言和图像识别之间的取舍 090
4.5 设计自己的系统 091
4.5.1 引入实例化需求 092
4.5.2 实例化需求 095
4.6 低代码和无代码自动化测试 097
4.7 批处理与模型驱动测试自动化 098
4.8 本章是一个错误 100
4.9 本章回顾 101
第5章 专项测试 102
5.1 技术要求 102
5.2 负载测试和性能测试 102
5.2.1 负载测试基本知识 103
5.2.2 负载测试工具运用 104
5.3 安全测试 106
5.3.1 安全测试概念 106
5.3.2 常见的安全漏洞 107
5.3.3 了解行业标准 108
5.3.4 安全测试工具 108
5.4 无障碍性测试 109
5.4.1 什么是无障碍性? 109
5.4.2 倡导无障碍设计 110
5.4.3 无障碍性和包容性设计 111
5.4.4 了解WCAG标准 111
5.4.5 无障碍性测试工具 111
5.5 国际化和本地化 112
5.5.1 为国际化和本地化做准备 113
5.5.2 国际化和本地化工具 113
5.6 持续集成 114
5.6.1 CI和pipeline 114
5.6.2 测试人员参与构建管理 114
5.6.3 CI工具 115
5.7 合规测试 115
5.8 本章回顾 116
第6章 测试相关技术 117
6.1 技术要求 117
6.2 识别bug 118
6.2.1 软件测试中的“先知” 119
6.2.2 非注意盲视与“先知” 120
6.2.3 关于bug一词 122
6.3 编写bug报告 122
6.3.1 有效的bug报告 123
6.3.2 有效的复现步骤 125
6.4 测试计划和测试用例 128
6.5 度量与测量 130
6.6 项目预测 133
6.7 推动变革 134
6.8 总结信息 134
6.9 本章回顾 137
第7章 测试数据管理 138
7.1 技术要求 138
7.2 测试数据问题 139
7.2.1 数据组合问题 140
7.2.2 测试数据和数据库 141
7.3 标准数据种子 142
7.4 脚本化用户和结构 145
7.5 探索合成用户 146
7.6 利用生产数据 148
7.7 开发、测试和生产环境 149
7.8 测试数据法规 150
7.9 本章回顾 151
第二篇 测试与交付
第8章 交付模型与测试 154
8.1 技术要求 155
8.2 瀑布模型 155
8.2.1 瀑布模型的优势及其适用场景 158
8.2.2 V模型 158
8.2.3 迭代式、增量式和迷你瀑布模型 159
8.3 极限编程(XP) 161
8.4 Scrum和SAFe 163
8.4.1 Scrum的背景 164
8.4.2 SAFe及其背景 165
8.5 定制软件开发方法 167
8.5.1 敏捷宣言 168
8.5.2 语境驱动测试 169
8.5.3 原则实践的体现 170
8.5.4 将看板作为一种定制方法 170
8.6 持续交付和部署 171
8.7 DevOps、SRE和平台工程 172
8.8 本章回顾 173
8.9 扩展阅读 174
第9章 测试的构成元素 175
9.1 技术要求 176
9.2 配方:如何做困难的事情 176
9.2.1 配方的定义 177
9.2.2 配方是否应该全部自动化 179
9.2.3 配方是否与技术文档重合 180
9.3 覆盖程度:是否足够好地进行了测试 181
9.3.1 代码覆盖率的精准衡量 183
9.3.2 结束覆盖率的讨论 185
9.4 缺陷:软件的状态如何 185
9.5 排期和风险:测试想法太多,时间不足 186
9.6 策略:关于风险和优先级 187
9.7 仪表板:如何传达所知道的 189
9.8 本章回顾 191
第10章 制订测试策略 193
10.1 我们现在在做什么 193
10.1.1 填写表格 197
10.1.2 电梯演讲 198
10.2 风险普查 200
10.3 确定优先事项、时间管理和范围 204
10.4 今天的策略与明天的目标 206
10.5 本章回顾 206
第11章 精益软件测试 208
11.1 精益软件测试的定义 208
11.2 七大浪费 211
11.2.1 浪费1—运输 211
11.2.2 浪费2—库存 212
11.2.3 浪费3—动作 213
11.2.4 浪费4—等待 214
11.2.5 浪费5—过度加工 215
11.2.6 浪费6—过度生产 216
11.2.7 浪费7—缺陷 217
11.2.8 (新)浪费8—能力 219
11.2.9 消除测试中的浪费 219
11.3 流程 220
11.3.1 流程可视化 221
11.3.2 多任务处理 222
11.3.3 交付时间与周期时间 223
11.3.4 效率与拥堵 224
11.3.5 接触时间 225
11.3.6 Batch size 225
11.3.7 队列和效率 227
11.3.8 到达时间 227
11.3.9 创建拉式系统:限制在制品数量 228
11.3.10 发布节奏 228
11.4 单件流和持续交付 229
11.5 本章回顾 231
第三篇 职场实践
第12章 案例研究和经验报告 234
12.1 大规模的RCRCRC 235
12.1.1 一天的测试计划 236
12.1.2 RCRCRC分析 236
12.2 测试仪表板 238
12.3 结对编程与三人编程 240
12.3.1 专业能力的悖论 241
12.3.2 递交决策权 242
12.4 测试策略的演变 243
12.5 抵制欺凌行为 245
12.5.1 职场中的权力 246
12.5.2 一种处理方式 247
12.5.3 企业中的边界 248
12.5.4 自恋型沟通 249
12.5.5 捍卫边界 251
12.5.6 如果你选择留下来 252
12.6 本章回顾 253
第13章 测试活动和测试角色 254
13.1 技术要求 254
13.2 测试角色的文化冲突 254
13.2.1 我们是如何走到这一步的:坏消息 255
13.2.2 我们是如何走到这一步的:快速开发 257
13.3 建立风险管理团队 258
13.4 基于信念的测试自动化 261
13.4.1 背后的数字 262
13.4.2 可能的结果 263
13.5 左移和右移 264
13.6 真正的持续测试 264
13.7 本章回顾 266
第14章 软件测试中的哲学与伦理 267
14.1 哲学及其在测试中的重要性 267
14.1.1 迭代周期:视情况而定 268
14.1.2 守破离:循序渐进的学习模式 269
14.1.3 一个棘手的问题:你想要什么 270
14.2 测试中的伦理和伦理推理 272
14.2.1 道德框架 273
14.2.2 经典伦理挑战 275
14.3 测试中的伦理问题 276
14.3.1 跳过测试步骤 277
14.3.2 决策并非在会议中制定 278
14.4 科学思维和逻辑谬误 279
14.5 如何逃离“职场地狱” 281
14.6 本章回顾 283
第15章 词语和表述 284
15.1 语境驱动测试和其他学派 284
15.1.1 敏捷学派 285
15.1.2 DevOps或持续交付学派 285
15.1.3 分析学派 285
15.1.4 工厂学派 286
15.1.5 质量学派 286
15.1.6 语境驱动学派 286
15.2 准确的语言 288
15.3 词语的表述 290
15.4 流程与技能 292
15.4.1 测试和检查 294
15.4.2 质量保证 295
15.5 本章回顾 297
15.6 拓展阅读 297
第16章 测试策略应用 298
16.1 移动应用测试策略案例 298
16.1.1 移动应用程序 300
16.1.2 设计测试程序 300
16.1.3 系统协调与部署 303
16.1.4 人的因素 304
16.2 AI在软件测试中的应用 305
16.2.1 AI工具现状 306
16.2.2 应用AI进行测试 306
16.2.3 测试中其他形式的AI 309
16.2.4 AI测试的核心观点 310
16.3 关于测试的理念 310
16.4 本章回顾 312