第一部分 写作线索 2
第1章 测试原理 2
1.1 生产软件中的测试背景 2
1.2 本章介绍 3
1.3 不完善的车 4
1.4 Dijkstra定律 4
1.5 及时测试 5
1.6 圣人和猫 6
1.7 首先测试测试用例 7
1.8 杀虫剂悖论 7
1.9 护航舰队与破布 8
1.10 桥上的警察 9
1.11 钟摆的终结 9
1.12 黑衣人 11
1.13 自动化综合症 12
1.14 小结 13
第2章 软件开发生存周期模型 15
2.1 软件项目的阶段 15
2.1.1 需求获取和分析 15
2.1.2 策划 15
2.1.3 设计 15
2.1.4 开发或编码 15
2.1.5 测试 16
2.1.6 部署和维护 16
2.2 质量、质量保证和质量控制 16
2.3 测试、验证和确认 17
2.4 表示不同阶段的过程模型 18
2.5 生存周期模型 19
2.5.1 瀑布模型 19
2.5.2 原型和快速应用开发模型 20
2.5.3 螺旋或迭代模型 22
2.5.4 V字模型 22
2.5.5 改进型V字模型 24
2.5.6 各种生存周期模型的比较 26
第二部 分测试类型 30
第3章 白盒测试 30
3.1 白盒测试的定义 30
3.2 静态测试 30
3.2.1 人工静态测试 31
3.2.2 静态分析工具 33
3.3 结构测试 35
3.3.1 单元/代码功能测试 35
3.3.2 代码覆盖测试 36
3.3.3 代码复杂度测试 40
3.4 白盒测试中的挑战 43
第4章 黑盒测试 47
4.1 黑盒测试的定义 47
4.2 黑盒测试的意义 48
4.3 黑盒测试的时机 48
4.4 黑盒测试的方法 48
4.4.1 基于需求的测试 49
4.4.2 正面和负面测试 52
4.4.3 边界值分析 53
4.4.4 决策表 56
4.4.5 等价划分 57
4.4.6 基于状态或基于图的测试 59
4.4.7 兼容性测试 61
4.4.8 用户文档测试 63
4.4.9 领域测试 64
4.5 小结 66
第5章 集成测试 68
5.1 集成测试的定义 68
5.2 集成测试作为一种测试类型 68
5.2.1 自顶向下集成 70
5.2.2 自底向上集成 71
5.2.3 双向集成 72
5.2.4 系统集成 73
5.2.5 选择集成方法 73
5.3 集成测试作为一个测试阶段 74
5.4 场景测试 74
5.4.1 系统场景 74
5.4.2 用例场景 75
5.5 缺陷围歼 77
5.5.1 选择缺陷围歼的频度和持续时间 77
5.5.2 选择合适的产品版本 77
5.5.3 对缺陷围歼的目标进行沟通 78
5.5.4 建立和监视实验室 78
5.5.5 采取行动解决问题 78
5.5.6 优化缺陷围歼所涉及的工作 78
5.6 小结 79
第6章 系统测试和确认测试 80
6.1 系统测试概述 80
6.2 实施系统测试的原因 81
6.3 功能测试与非功能测试 82
6.4 功能系统测试 83
6.4.1 设计/体系结构验证 84
6.4.2 业务垂直测试 84
6.4.3 部署测试 85
6.4.4 贝塔测试 86
6.4.5 符合性的认证、标准和测试 87
6.5 非功能系统测试 88
6.5.1 设置配置 88
6.5.2 提出进入与退出准则 89
6.5.3 平衡关键资源 89
6.5.4 可伸缩性测试 90
6.5.5 可靠性测试 92
6.5.6 压力测试 95
6.5.7 互操作性测试 97
6.6 确认测试 98
6.6.1 确认准则 99
6.6.2 选择确认测试的测试用例 99
6.6.3 执行确认测试 100
6.7 测试阶段小结 101
6.7.1 多阶段测试模型 101
6.7.2 多个发布版本的处理 103
6.7.3 谁负责实施与何时实施 103
第7章 性能测试 106
7.1 引论 106
7.2 决定性能测试的要素 106
7.3 性能测试的方法论 108
7.3.1 收集需求 108
7.3.2 编写测试用例 110
7.3.3 自动化性能测试用例 110
7.3.4 执行性能测试用例 111
7.3.5 分析性能测试结果 112
7.3.6 性能调谐 113
7.3.7 性能基准测试 115
7.3.8 能力策划 116
7.4 性能测试工具 116
7.5 性能测试的过程 117
7.6 挑战 118
第8章 回归测试 120
8.1 回归测试的定义 120
8.2 回归测试的类型 120
8.3 回归测试的时机 121
8.4 回归测试的方法 122
8.4.1 实施第一次“冒烟”或“摸底”测试 123
8.4.2 理解选择测试用例的准则 123
8.4.3 测试用例分类 124
8.4.4 选择测试用例的方法论 125
8.4.5 重新设置测试用例以进行回归测试 126
8.4.6 总结回归测试的结果 128
8.5 回归测试的最佳实践 128
第9章 国际化〔I18n〕测试 131
9.1 引言 131
9.2 国际化介绍 131
9.2.1 语言的定义 131
9.2.2 字符集 131
9.2.3 属地 132
9.2.4 本章使用的术语 132
9.3 国际化测试的测试阶段 133
9.4 有效化测试 134
9.5 属地测试 135
9.6 国际化确认 136
9.7 假语言测试 137
9.8 语言测试 138
9.9 本地化测试 138
9.10 国际化使用的工具 140
9.11 挑战与问题 140
第10章 即兴测试 142
10.1 即兴测试概述 142
10.2 伙伴测试 144
10.3 结对测试 145
10.4 探索式测试 146
10.5 迭代式测试 148
10.6 敏捷与极限测试 149
10.6.1 XP工作流 150
10.6.2 通过例子进行小结 152
10.7 缺陷播种 153
10.8 小结 153
第三部分 特殊测试专题 156
第11章 面向对象系统的测试 156
11.1 引言 156
11.2 面向对象软件入门 156
11.3 面向对象测试的差别 161
11.3.1 一组类的单元测试 161
11.3.2 将类组合在一起—集成测试 164
11.3.3 面向对象系统的系统测试与互操作 165
11.3.4 面向对象系统的回归测试 165
11.3.5 面向对象系统的测试工具 165
11.3.6 小结 167
第12章 可使用性与易获得性测试 169
12.1 可使用性测试的定义 169
12.2 可使用性测试的途径 170
12.3 可使用性测试的时机 171
12.4 实现可使用性的方法 173
12.5 可使用性的质量因素 174
12.6 美感测试 175
12.7 易获得性测试 175
12.7.1 基本易获得性 176
12.7.2 产品易获得性 177
12.8 可使用性工具 179
12.9 可使用性实验室的建立 180
12.10 可使用性的测试角色 181
12.11 小结 182
第四部分 测试中的人员和组织问题 184
第13章 常见人员问题 184
13.1 关于测试的感觉和错误概念 184
13.1.1 “测试没有什么技术挑战” 184
13.1.2 “测试没有为我提供职业成长道路” 185
13.1.3 “我被派来测试—我到底怎么了?!” 186
13.1.4 “这些人是我的对手” 186
13.1.5 “测试是如果我有时间最终会做的工作” 186
13.1.6 “测试的拥有者毫无意义” 187
13.1.7 “测试只是破坏” 187
13.2 测试与开发工作的比较 188
13.3 为测试人员提供职业发展道路 188
13.4 生态系统的角色与行动要求 192
13.4.1 教育系统的角色 192
13.4.2 高级管理层的角色 193
13.4.3 测试界的角色 194
第14章 测试团队的组织结构 196
14.1 组织结构的要素 196
14.2 单产品公司的结构 196
14.2.1 单产品公司的测试团队结构 197
14.2.2 按组件组织的测试团队 199
14.3 多产品公司的结构 199
14.3.1 测试团队作为“首席技术官办公室”的一部分 200
14.3.2 针对所有产品的单一测试团队 201
14.3.3 按产品组织的测试团队 201
14.3.4 针对不同测试阶段的独立测试团队 201
14.3.5 混合模型 202
14.4 全球化与地域分散的团队对产品测试的影响 202
14.4.1 全球化的业务影响 202
14.4.2 全时区开发/测试团队模型 203
14.4.3 测试能力中心模型 204
14.4.4 全球团队面临的挑战 205
14.5 测试服务公司 206
14.5.1 测试服务的业务需求 206
14.5.2 测试作为一种服务与产品测试公司之间的差别 207
14.5.3 测试服务公司的典型角色和责任 208
14.5.4 测试服务公司面临的挑战与问题 209
14.6 测试公司的成功因素 211
第五部分 测试管理与自动化 214
第15章 测试策划、管理、执行与报告 214
15.1 引言 214
15.2 测试策划 214
15.2.1 准备测试计划 214
15.2.2 范围管理:决定要测试和不测试的特性 214
15.2.3 确定测试方法和策略 215
15.2.4 确定测试准则 216
15.2.5 确定责任、人员和培训计划 216
15.2.6 确定资源需求 216
15.2.7 确定测试的可交付产品 217
15.2.8 测试任务:规模与工作量估计 217
15.2.9 活动分解与进度估计 219
15.2.10 沟通管理 220
15.2.11 风险管理 220
15.3 测试管理 223
15.3.1 标准的选择 223
15.3.2 测试基础设施管理 225
15.3.3 测试人员管理 227
15.3.4 与产品发布集成 227
15.4 测试过程 228
15.4.1 把各种要素放在一起并确定测试计划基线 228
15.4.2 测试用例规格说明 228
15.4.3 可跟踪性矩阵的更新 229
15.4.4 确定有可能实现自动化的测试用例 229
15.4.5 测试用例的开发和基线确立 229
15.4.6 测试用例的执行与可跟踪性矩阵的更新 229
15.4.7 指标的采集与分析 230
15.4.8 准备测试总结报告 230
15.4.9 推荐产品发布准则 230
15.5 测试报告 230
15.6 最佳实践 231
15.6.1 与过程相关的最佳实践 232
15.6.2 与人员相关的最佳实践 232
15.6.3 与技术相关的最佳实践 232
附录A:测试策划检查单 233
附录B:测试计划模板 234
第16章 软件测试自动化 237
16.1 测试自动化的定义 237
16.2 自动化使用的术语 238
16.3 自动化所需的技能 239
16.4 自动化的对象与范围 240
16.4.1 确定自动化负责的测试类型 241
16.4.2 自动化不太可能变更的部分 241
16.4.3 自动化测试符合标准 241
16.4.4 自动化的管理问题 242
16.5 自动化的设计和体系结构 242
16.5.1 外部模块 243
16.5.2 场景与配置文件模块 243
16.5.3 测试用例与测试框架模块 243
16.5.4 工具与结果模块 244
16.5.5 报告生成器与报告/指标模块 244
16.6 测试工具/框架的一般需求 244
16.7 自动化的过程模型 250
16.8 测试工具的选择 252
16.8.1 选择测试工具的准则 253
16.8.2 工具选择与部署步骤 254
16.9 极限编程模型的自动化 255
16.10 自动化中的挑战 255
16.11 小结 255
第17章 测试指标和度量 258
17.1 指标和度量的定义 258
17.2 测试中指标的意义 260
17.3 指标类型 262
17.4 项目指标 262
17.4.1 投入偏差(计划投入与实际投入) 263
17.4.2 计划偏差(计划与实际) 264
17.4.3 不同阶段内的投入分布 265
17.5 进度指标 266
17.5.1 测试缺陷指标 267
17.5.2 开发缺陷指标 273
17.6 生产力指标 277
17.6.1 每100小时测试发现的缺陷数 277
17.6.2 每100小时的测试用例执行数 278
17.6.3 每100小时的测试开发测试用例数 278
17.6.4 每100个测试用例发现的缺陷数 279
17.6.5 每100个失败的测试用例缺陷数 279
17.6.6 测试阶段有效性 280
17.6.7 已关闭缺陷的分布 280
17.7 发布指标 281
17.8 小结 282
参考文献 284