第一部分 软件测试概述 2
第1章 软件测试的历史 2
1.1最早的计算机程序员和最早发现的计算机Bug 2
1.2软件测试的发展历程 3
1.2.1面向调试的测试(1956年前) 3
1.2.2面向证明的测试(1957~1978) 4
1.2.3面向查错的测试(1979~1982) 5
1.2.4面向评估的测试(1983~1987) 5
1.2.5面向预防的测试(1988~2000) 6
1.3小结 7
习题1 7
第2章 软件测试在软件工程中的地位 8
2.1为什么引入软件工程 8
2.2软件测试在软件工程中的位置 9
2.3软件测试在软件工程知识体系中的内容 10
2.3.1软件测试基础 11
2.3.2软件测试级别 11
2.3.3软件测试技术 12
2.3.4测试相关的度量 12
2.3.5测试过程 13
2.4小结 13
习题2 14
第3章 软件测试基础 15
3.1为什么要引入软件测试 15
3.1.1引发软件错误的原因 15
3.1.2软件故障造成的危害 19
3.1.3引入软件测试的真正原因 20
3.2什么是软件测试 21
3.2.1软件测试的概念 22
3.2.2软件测试的分类 23
3.2.3软件测试的成熟度 23
3.2.4软件测试活动及其目标 23
3.3软件测试相关的术语 24
3.4软件测试的基本原则 26
3.5软件测试的心理学 30
3.5.1确立正确的测试目标 30
3.5.2自行测试和独立测试之间的平衡 31
3.5.3测试员和程序员的不同心理 32
3.5.4良好的沟通在测试中起到积极的作用 32
3.6软件测试的经济学 32
3.6.1制定的测试工作量要恰当 32
3.6.2尽早的发现缺陷尽早地修复缺陷 33
3.7软件测试的基本模型 34
3.7.1软件测试的V模型 34
3.7.2软件测试的W模型 35
3.7.3软件测试的H模型 36
3.7.4软件测试的X模型 36
3.8软件测试与软件质量 37
3.8.1软件质量的定义和常见的软件质量模型 37
3.8.2软件测试和软件质量是不同层级的概念 38
3.8.3软件测试有利于提高软件质量 38
3.9软件测试员应该具备的基本素质 39
3.10小结 39
习题3 40
第二部分 开始软件测试 42
第4章 建立软件测试系统 42
4.1最简单的软件测试过程 42
4.2完整的软件测试系统 44
4.3完整的软件测试流程 46
4.3.1一种实用的软件测试流程 46
4.3.2 Perry的7步软件测试流程 47
4.4小结 50
习题4 51
第三部分软件测试基本技术 54
第5章 静态测试 54
5.1静态测试概述 54
5.1.1为什么需要静态测试 54
5.1.2静态测试的重要性 55
5.2评审 56
5.2.1评审成功的因素 57
5.2.2评审的基本术语 57
5.2.3评审的软件产品 57
5.2.4评审的分类 59
5.2.5非正式评审 59
5.3正式评审 60
5.3.1正式评审的最小可接受条件 60
5.3.2正式评审的脚色 61
5.3.3正式评审的基本过程 62
5.4管理评审 63
5.4.1管理评审的目的和内容 63
5.4.2管理评审的团队 63
5.4.3管理评审过程 63
5.4.4输出 64
5.4.5举例 65
5.5技术评审 66
5.5.1技术评审的目的和内容 66
5.5.2技术评审团队 66
5.5.3技术评审会议 66
5.6审查 67
5.6.1审查的目的和内容 67
5.6.2审查团队 67
5.6.3审查的前提条件 68
5.6.4审查会议过程 69
5.6.5审查输出 71
5.6.6数据收集 71
5.6.7审查的检查表 71
5.6.8审查的注意事项 72
5.7走查 72
5.7.1走查的目的和内容 72
5.7.2走查团队 73
5.7.3走查会议 73
5.7.4走查与审查 73
5.8审计 74
5.8.1审计的目的和内容 74
5.8.2审计团队 74
5.8.3审计会议过程 75
5.9 5种正式评审的比较 76
5.10小结 77
习题5 77
第6章 白盒测试(基于结构的测试) 78
6.1白盒测试概述 78
6.1.1白盒测试定义 78
6.1.2为什么要进行白盒测试 78
6.1.3白盒测试的分类 80
6.1.4白盒测试的适应范围 80
6.1.5白盒测试过程 81
6.1.6白盒测试的优缺点 82
6.2基于数据流的白盒测试 82
6.3基于控制流的白盒测试 85
6.3.1控制流图 85
6.3.2基于控制流的几种白盒测试方式 89
6.3.3几种基于控制流的白盒测试技术 91
6.3.4基本路径测试(McCabe圈覆盖) 98
6.3.5测试覆盖准则 103
6.4其他白盒测试技术 106
6.4.1程序插桩 106
6.4.2域测试 106
6.4.3符号测试 106
6.4.4 Z路径测试 106
6.4.5程序变异 107
6.5小结 107
习题6 107
第7章 黑盒测试(基于规格说明的测试) 109
7.1黑盒测试概述 109
7.1.1黑盒测试定义 109
7.1.2黑盒测试和白盒测试之间的关系 109
7.1.3黑盒测试方法的有效性及方法选择的指导方针 113
7.1.4黑盒测试的优缺点 113
7.2等价划分 114
7.2.1为什么要引入等价划分 114
7.2.2等价划分的概念 114
7.2.3等价划分的依据 115
7.3边界值测试 117
7.3.1边界值测试概述 117
7.3.2边界值测试的步骤 118
7.3.3数值型变量的边界测试 118
7.3.4字符串变量的边界测试 119
7.3.5特殊等价类的测试 120
7.4决策表测试 121
7.4.1决策表概述 121
7.4.2决策表测试方法 122
7.5因果图 124
7.5.1因果图概述 124
7.5.2因果图测试方法 125
7.6场景或用例测试 127
7.6.1采用场景或用例测试方法的原因 127
7.6.2按照场景来设计测试用例 128
7.7状态转换图测试 129
7.7.1状态转换图概述 129
7.7.2利用状态转换图进行测试案例的设计 130
7.8基于经验的测试技术 131
7.8.1基于经验测试技术概述 131
7.8.2错误推测 132
7.8.3探索性测试 133
7.8.4基于经验测试技术的总结 134
7.9小结 134
习题7 135
第四部分 软件测试级别 138
第8章 单元测试 138
8.1单元测试概述 138
8.2单元测试现状和作用 139
8.3单元测试的方法 140
8.3.1白盒方法的单元测试 140
8.3.2黑盒方法的单元测试 141
8.3.3测试驱动模块与桩模块 142
8.4单元测试工具JUnit简介 142
8.4.1 JUnit框架组成 143
8.4.2利用JUnit进行单元测试的步骤 146
8.4.3 Eclipse中JUnit的使用 148
8.5小结 149
习题8 149
第9章 集成测试 150
9.1集成测试概述 150
9.2结构化软件的集成测试 151
9.2.1自顶向下集成测试 152
9.2.2自底向上集成测试 153
9.2.3核心系统先行集成测试 154
9.2.4高频集成测试 154
9.3小结 155
习题9 155
第10章 系统测试 156
10.1系统测试概述 156
10.2功能性测试 158
10.2.1正常功能测试 158
10.2.2健壮性测试 158
10.3非功能性测试 159
10.3.1大数据量测试 159
10.3.2负荷测试 160
10.3.3可用性测试 160
10.3.4文档测试 162
10.4小结 163
习题10 163
第11章 确认测试 164
11.1确认测试概述 164
11.2α测试 165
11.3 β测试 166
11.4小结 166
习题11 167
第12章 回归测试 168
12.1回归测试概述 168
12.2回归测试的几种策略 168
12.2.1测试用例库的维护 169
12.2.2回归测试集的选择 169
12.2.3回归测试的基本过程 170
12.3回归测试与自动化 170
12.4小结 171
习题12 172
第五部分 软件测试管理 174
第13章 构建测试环境(测试准备) 174
13.1测试环境概述 174
13.2测试环境要素 174
13.3测试的组织结构 175
13.3.1测试组织的独立性 175
13.3.2测试组织的几种结构 175
13.3.3与测试工作相关的人员 177
13.4构建标准的测试流程 177
13.5构建标准的测试文档 179
13.6测试人员的培训 180
13.6.1测试员能力的评估 180
13.6.2 CSTE CBOK公共知识体系 181
13.7测试工具 182
13.8测试的其他管理 183
13.8.1配置管理 183
13.8.2风险管理 183
13.9小结 184
习题13 184
第14章 测试计划 185
14.1测试计划概述 185
14.1.1为什么要引入测试计划 185
14.1.2测试计划的目的 185
14.2测试计划的相关术语 185
14.3测试计划的多样性 186
14.4测试计划的注意事项 186
14.5测试计划的内容 186
14.5.1测试计划标识符 187
14.5.2简介 187
14.5.3测试项 187
14.5.4被测试的特征 188
14.5.5不被测试的特征 189
14.5.6测试策略(方法) 189
14.5.7测试出口准则 189
14.5.8挂起准则以及重启要求 189
14.5.9测试交付文档 190
14.5.10测试任务 190
14.5.11测试团队的责任 190
14.5.12环境需求 191
14.5.13进度 192
14.5.14风险和应变计划 192
14.5.15批准 192
14.6小结 192
习题14 193
第15章 测试设计 194
15.1测试设计概述 194
15.2测试设计与测试计划之间的关系 194
15.3测试设计的目标 196
15.4测试设计说明 196
15.4.1目的 196
15.4.2内容 196
15.5测试案例说明 197
15.5.1目的 197
15.5.2内容 198
15.6测试过程说明 199
15.6.1目的 199
15.6.2内容 199
15.7小结 200
习题15 201
第16章 测试执行 202
16.1测试执行概述 202
16.2测试日志 203
16.2.1目的 203
16.2.2内容 203
16.2.3状态 203
16.2.4批准 203
16.2.5举例 204
16.3软件缺陷 204
16.3.1软件缺陷属性 204
16.3.2软件缺陷的严重性和优先级 204
16.4测试事故报告 205
16.4.1目的 206
16.4.2内容 206
16.5软件缺陷的管理 206
16.5.1软件缺陷的生命周期 207
16.5.2软件缺陷的数据库跟踪管理 208
16.5.3并非所有的缺陷都可以修复 209
16.6小结 211
习题16 211
第17章 测试评估 212
17.1测试评估概述 212
17.2软件测试评估的分类 213
17.2.1覆盖评估 213
17.2.2质量评估 215
17.3软件测试总结报告 219
17.3.1目的 219
17.3.2内容 219
17.4小结 219
习题17 220
第六部分 软件测试工具 222
第18章 测试自动化及测试工具 222
18.1测试自动化基础 222
18.1.1测试自动化的引入 222
18.1.2测试自动化的基本概念 223
18.1.3测试自动化的方法和过程 224
18.1.4自动化测试框架 228
18.2常见的自动化测试工具介绍 230
18.2.1测试工具分类 230
18.2.2常用测试工具介绍 231
18.2.3功能测试工具简介 232
18.2.4性能测试工具简介 233
18.2.5测试管理工具简介 234
18.2.6单元测试工具简介 235
18.2.7自动化测试环境简介 237
18.3小结 238
习题18 239
第七部分 软件测试的应用 242
第19章 配置测试 242
19.1配置测试概述 242
19.2如何判定配置缺陷 242
19.3谁来修复配置缺陷 243
19.4计算工作量 243
19.5执行配置测试 243
19.6获得硬件 245
19.7小结 246
习题19 246
第20章 兼容性测试 247
20.1兼容性测试概述 247
20.2与操作系统的兼容性 247
20.3与浏览器的兼容性 248
20.4软件版本的兼容性 248
20.5数据共享时的兼容性问题 249
20.6兼容性测试的一个案例 250
20.7小结 250
习题20 250
第21章 本地化测试 251
21.1本地化测试概述 251
21.2本地化测试的内容 251
21.2.1用户界面问题 251
21.2.2翻译质量问题 252
21.2.3由于本地化出现的功能错误 252
21.2.4源语言国际化缺陷 253
21.2.5安装/卸载性能测试 253
21.3本地化测试的特点 254
21.4小结 254
习题21 255
第22章 网站测试 256
22.1网站测试的基本概念 256
22.2网站测试的步骤 257
22.3用户界面测试 257
22.4网站功能测试 258
22.5网站性能测试 259
22.6网站兼容性测试 260
22.7小结 260
习题22 260
第23章 安全性测试 261
23.1安全测试的概念 261
23.2安全测试分类 262
23.3安全性测试技术 262
23.3.1软件安全分析方法——故障树分析 263
23.3.2软件安全测试计划 264
23.4小结 266
习题23 266
第24章 面向对象测试 267
24.1面向对象软件测试概述 267
24.2面向对象测试模型 267
24.3面向对象的单元测试 268
24.3.1单元的定义 268
24.3.2单元测试方法 269
24.3.3面向对象单元测试的特殊性 270
24.4面向对象的集成测试 270
24.5面向对象的系统测试 271
24.6小结 272
习题24 272
第八部分 软件维护 274
第25章 软件维护 274
25.1软件维护概述 274
25.2软件维护定义 274
25.3软件维护分类 275
25.4软件维护的开销和挑战 276
25.5软件维护模型 277
25.5.1快速解决模型 277
25.5.2迭代增强模型 277
25.5.3完全重用模型 277
25.6软件维护过程 278
25.6.1 IEEE-1219 278
25.6.2 ISO-12207 279
25.7软件维护管理 280
25.8小结 282
习题25 282
附录 习题答案 283
参考文献 314