第1章 软件测试基础 1
1.1 软件的复杂度已经超越了人的理解能力 1
1.2 软件测试是获取信息的技术调查 4
1.3 测试是迭代过程 6
1.4 测试人员的工作效率取决于他对软件和项目的理解,而不是他掌握的测试技术 8
1.5 小结 9
第2章 缺陷报告 10
2.1 报告缺陷是为了让缺陷得到修复 10
2.2 高质量的缺陷报告来自于高质量的测试 13
2.2.1 分配测试时间 13
2.2.2 通过技术调查发现更多的信息 14
2.2.3 处理难以重现的缺陷 17
2.3 编写高质量的缺陷报告 22
2.3.1 为每一个缺陷单独提交一份缺陷报告,小缺陷也是如此 22
2.3.2 仔细编写缺陷报告的标题 23
2.3.3 像编写详细测试用例那样编写重现步骤 23
2.3.4 使用缺陷模板来提交缺陷 24
2.3.5 在编写缺陷报告时,要考虑缺陷查询 25
2.3.6 链接相关的缺陷 26
2.3.7 注意缺陷报告的可读性 26
2.3.8 客观中立地书写缺陷报告 26
2.4 对不予修复的缺陷进行上诉 27
2.5 周密地测试缺陷修复 28
2.6 坚持阅读缺陷报告 30
2.7 小结 32
第3章 测试文档 33
3.1 测试文档是持续演化的工具 33
3.1.1 测试文档是提供测试信息的一组文档 33
3.1.2 在测试中演化测试文档 35
3.1.3 注重实效的测试文档 36
3.2 形形色色的测试文档 40
3.2.1 测试计划 40
3.2.2 Google ACC 44
3.2.3 测试设计规约 48
3.2.4 功能列表 49
3.2.5 大纲与思维导图 51
3.2.6 表格(矩阵) 53
3.2.7 测试指南 55
3.2.8 测试想法列表 56
3.2.9 质量特性列表 57
3.2.10 操作文档 58
3.2.11 检查列表 59
3.2.12 缺陷目录 60
3.2.13 测程表 61
3.2.14 移交文档 67
3.3 在测试中发展测试文档 67
3.3.1 初始测试文档 67
3.3.2 发展测试文档 70
3.4 小结 71
第4章 测试建模 73
4.1 从组合测试看建模的重要性 73
4.1.1 组合测试简介 73
4.1.2 根据语境来完善组合测试的模型 76
4.1.3 测试建模的基本点 83
4.2 常用测试建模方法 84
4.2.1 启发式测试策略模型 84
4.2.2 输入与输出模型 91
4.2.3 系统生态图 96
4.2.4 实体关系模型 101
4.2.5 状态机模型 105
4.2.6 多种多样的模型 109
4.3 小结 113
第5章 测试技术 115
5.1 测试技术分类系统 115
5.2 启发式方法 120
5.3 测试先知 122
5.3.1 测试先知的定义 122
5.3.2 FEW HICCUPPS 123
5.3.3 约束检查 129
5.4 漫游测试 133
5.4.1 基本漫游方法 134
5.4.2 基于旅行者隐喻的漫游方法 135
5.4.3 移动测试漫游方法 139
5.4.4 实施漫游测试 142
5.5 快速测试 144
5.5.1 James Bach的方法 145
5.5.2 Cem Kaner的方法 147
5.5.3 James Whittaker的方法 149
5.6 情景测试 154
5.6.1 基本方法 155
5.6.2 设计用户角色 158
5.6.3 情景测试与漫游测试 161
5.6.4 肥皂剧测试 162
5.6.5 虚拟业务 164
5.7 多样地选择测试技术 165
5.8 小结 166
第6章 测试开发 168
6.1 测试开发分类 168
6.2 注重实效的自动化测试 169
6.2.1 自动化测试的基本策略 169
6.2.2 将测试开发视作软件开发 172
6.2.3 利用自动化测试金字塔来指导测试开发 175
6.2.4 面向调试的测试代码 177
6.2.5 系统测试的测试开发 182
6.2.6 让自动化测试服务于项目 190
6.3 计算机辅助测试 193
6.3.1 “交通工具”的隐喻 193
6.3.2 选择合适的开发技术 195
6.4 大规模自动化测试 204
6.4.1 基本概念 204
6.4.2 测试设计 206
6.5 小结 211
第7章 研究产品 213
7.1 静态分析 213
7.1.1 浏览源代码来理解产品实现 213
7.1.2 分析源代码来帮助测试设计 221
7.1.3 黑盒测试并不是基于无知的测试 227
7.2 动态分析 229
7.2.1 用工具分析产品的行为 229
7.2.2 在调试器中观察软件行为 237
7.3 业务研究 241
7.3.1 理解关系人 241
7.3.2 评审需求文档 245
7.3.3 通过测试来研究 251
7.3.4 利用互联网资源 255
7.3.5 领域研究 258
7.4 研究策略 260
7.5 小结 261
第8章 研究项目 262
8.1 项目团队 262
8.1.1 了解团队组织 262
8.1.2 语境独立的启发式问题 264
8.1.3 了解团队成员 268
8.2 面向测试的项目分析 270
8.2.1 软件缺陷 270
8.2.2 源代码 274
8.2.3 构建 277
8.2.4 自动化测试 279
8.3 基于风险的测试 282
8.3.1 通过测试调查风险 282
8.3.2 失败模式 284
8.3.3 项目级别的风险 285
8.4 小结 287
第9章 团队工作 288
9.1 工作风格 288
9.1.1 测试人员通过服务团队来体现自己的价值 288
9.1.2 测试人员应该正直 290
9.1.3 测试人员的影响力来自于出色的工作 292
9.1.4 信任程序员的努力,并用技术调查检验其工作 292
9.2 测试管理 293
9.2.1 个人测试计划应该是项目测试计划的延伸 293
9.2.2 制订个人测试计划时应该综合考虑各种项目元素 294
9.2.3 测试需要动态管理 297
9.3 软件估算 299
9.3.1 测试人员应该估算自己的任务 300
9.3.2 用计数和计算作为估算手段 302
9.3.3 历史数据是估算的重要参考 303
9.3.4 同时估算最差情况和最好情况 305
9.4 度量 305
9.4.1 理解度量方法的基本元素 306
9.4.2 明确度量的目标 307
9.4.3 掌握属性和算法的联系 309
9.4.4 理解度量方法的优点和缺点 311
9.4.5 密切关注度量的副作用 312
9.4.6 注重实效的计算 314
9.5 测试小组 315
9.5.1 价值观 315
9.5.2 团队建设 316
9.6 小结 318
第10章 个人管理 319
10.1 时间管理 319
10.1.1 利用任务清单记录所有工作项 319
10.1.2 坚持周计划和每日回顾 322
10.1.3 专注是高效工作的前提 322
10.1.4 恰到好处的文档化和自动化 324
10.2 持续学习 328
10.2.1 在工作中学习 328
10.2.2 持续阅读 329
10.3 且行且思 330
10.4 成为专家 333
10.5 小结 335
参考文献 336
· · · · · · (
收起)