第1部分 软件测试基础篇 3
第1章 软件与软件危机 3
1.1 软件的概念 3
1.1.1 软件特性 3
1.1.2 软件种类 5
1.2 软件危机 5
1.2.1 软件危机原因分析 5
1.2.2 软件危机现象 7
1.2.3 避免软件危机的方法 8
1.3 软件工程 9
1.3.1 软件工程定义 9
1.3.2 软件生命周期 12
1.3.3 敏捷开发过程 15
习题 19
第2章 软件测试基本概念 20
2.1 软件测试概述 20
2.1.1 软件测试发展史 20
2.1.2 软件测试定义 22
2.1.3 软件测试目的 23
2.1.4 软件测试原则 25
2.1.5 软件测试质量度量 28
2.1.6 软件测试与软件开发各阶段的关系 29
2.2 软件测试工作 30
2.2.1 软件测试工作流程 30
2.2.2 软件测试工具对测试工作的支持 31
2.2.3 软件测试工作的几个认识误区 32
2.3 软件测试职业 35
2.3.1 软件测试职业发展 36
2.3.2 软件测试人员应具备的素质 39
2.3.3 软件测试的就业前景 42
习题 43
第3章 生命周期软件测试方法 44
3.1 生命周期测试的概念 44
3.1.1 生命周期测试的工作划分 44
3.1.2 生命周期测试的主要任务 45
3.1.3 基于风险的软件测试方法 50
3.2 生命周期各个阶段的测试要求 52
3.2.1 需求阶段测试 52
3.2.2 设计阶段测试 53
3.2.3 编码阶段测试 54
3.2.4 测试阶段 54
3.2.5 安装阶段测试 55
3.2.6 验收阶段测试 56
3.2.7 维护阶段 56
3.3 支持生命周期软件测试的工具 57
3.3.1 全生命周期质量管理平台Panorama++ 57
3.3.2 应用生命周期管理系统HP ALM11 59
习题 62
第4章 软件测试分类与分级 63
4.1 软件测试分类 63
4.1.1 计算机软件配置项 63
4.1.2 基于CSCI的软件测试分类 64
4.2 软件测试分级 68
4.2.1 软件生命周期的测试分级 69
4.2.2 软件测试中的错误分级及其应用 71
习题 73
第2部分 软件测试方法与技术基础篇 77
第5章 软件静态测试 77
5.1 各阶段评审 77
5.1.1 同行评审 77
5.1.2 需求规格说明书的测试 80
5.2 代码检查 81
5.2.1 代码检查方法 82
5.2.2 代码编程规范检查 86
5.2.3 代码的自动分析 89
5.2.4 代码结构分析 91
5.2.5 代码安全性检查 93
5.3 软件复杂性分析 95
5.3.1 软件复杂性度量与控制 95
5.3.2 软件复杂性度量元 99
5.3.3 面向对象的软件复杂性度量 105
5.4 软件质量模型 111
5.4.1 软件质量概念 111
5.4.2 软件质量分层模型 113
5.4.3 软件质量度量与评价 119
5.5 静态分析工具 124
5.5.1 IBM Rational Logiscope RuleCheck/Audit介绍 125
5.5.2 HP FortifySCA介绍 130
习题 133
第6章 软件动态测试 135
6.1 “白盒”测试 135
6.1.1 逻辑覆盖 136
6.1.2 路径测试 138
6.1.3 数据流测试 142
6.1.4 信息流分析 144
6.1.5 覆盖率分析及测试覆盖准则 145
6.2 “黑盒”测试 148
6.2.1 等价类划分 149
6.2.2 边界值分析 152
6.2.3 因果图 153
6.2.4 随机测试 156
6.2.5 猜错法 156
6.3 “灰盒”测试 156
6.3.1 “灰盒”测试概念 157
6.3.2 “灰盒”测试步骤与应用举例 158
6.4 测试用例设计 160
6.4.1 测试用例设计概念 160
6.4.2 测试用例编写要素与模板 163
6.4.3 测试用例的设计步骤 166
6.4.4 测试用例分级 168
6.4.5 软件测试用例设计的误区 169
6.5 单元测试 171
6.5.1 单元测试的意义 172
6.5.2 单元测试的内容 174
6.5.3 单元测试方法和步骤 177
6.6 集成测试 179
6.6.1 集成测试的概念 179
6.6.2 集成测试方法 182
6.6.3 集成测试过程 186
6.7 确认测试 188
6.7.1 确认测试基本概念 188
6.7.2 确认测试过程 189
6.8 系统测试 191
6.8.1 系统测试概念 191
6.8.2 系统测试中关注的重要问题 192
6.8.3 系统测试的要求和主要内容 195
6.8.4 系统测试设计 200
6.8.5 系统测试手段 202
6.9 动态测试工具介绍 208
6.9.1 国产单元测试工具Visual Unit 208
6.9.2 开源集成测试工具Selenium 210
6.9.3 系统测试工具 210
习题 212
第3部分 软件测试管理方法与技术篇 215
第7章 软件缺陷与缺陷管理 215
7.1 软件缺陷 215
7.1.1 软件缺陷定义 215
7.1.2 软件缺陷描述 218
7.1.3 软件缺陷分类 219
7.1.4 软件缺陷管理流程 224
7.2 软件缺陷度量、分析与统计 227
7.2.1 软件缺陷度量 227
7.2.2 软件缺陷分析 230
7.2.3 软件缺陷统计 232
7.3 软件缺陷报告 235
7.3.1 缺陷报告内容 236
7.3.2 缺陷报告撰写标准 238
7.4 缺陷管理工具 239
7.4.1 TrackRecord(商用) 240
7.4.2 ClearQuest(商用) 240
7.4.3 Bugzilla(开源) 241
7.4.4 BMS(国内商业软件) 242
7.4.5 其他 242
习题 242
第8章 软件测试过程及测试过程管理 243
8.1 软件测试过程 243
8.1.1 软件测试过程模型 244
8.1.2 软件测试过程中的活动及内容 247
8.1.3 软件测试过程度量 248
8.1.4 软件测试过程成熟度 250
8.1.5 软件测试过程改进 254
8.2 软件测试过程管理 256
8.2.1 软件测试过程管理的理念 258
8.2.2 软件测试计划与测试需求 259
8.2.3 软件测试设计和开发 264
8.2.4 软件测试执行 266
8.2.5 软件测试文档 269
8.2.6 软件测试用例、测试数据与测试脚本 272
8.2.7 软件测试过程中的配置管理 276
8.2.8 软件测试过程中的组织管理 279
8.3 测试过程管理工具 283
8.3.1 HP Quality Center介绍 283
8.3.2 北航软件所QESuite 285
8.3.3 TestLink(开源免费) 286
习题 286
第4部分 高级软件测试方法与技术篇 289
第9章 软件测试自动化 289
9.1 软件测试自动化概念 289
9.1.1 自动化测试的定义 289
9.1.2 适合于自动化测试的相关活动 290
9.1.3 自动化测试的优点 290
9.1.4 自动化测试的局限性 291
9.2 软件测试自动化框架 292
9.2.1 自动化测试框架概念 292
9.2.2 常用的自动化测试框架 294
9.2.3 基于API测试的分布式测试框架 295
9.3 自动化测试技术 299
9.3.1 脚本技术 299
9.3.2 录制/回放技术 301
9.3.3 基于数据驱动的自动化测试技术 303
9.3.4 基于关键字驱动的自动化测试技术 304
9.3.5 基于测试预期的结果分析比较技术 305
9.4 自动化测试工具应用举例 307
9.4.1 测试中常用的自动化测试工具 307
9.4.2 基于STAF/STAX的自动化测试框架 308
习题 312
第10章 软件可靠性测试 313
10.1 操作剖面与统计测试 313
10.2 基于操作剖面的软件可靠性测试 314
10.2.1 基于操作剖面的统计测试 314
10.2.2 操作剖面的构造 315
10.2.3 操作剖面的使用 319
10.2.4 基于操作剖面的软件可靠性疲劳测试 320
10.2.5 结论 320
10.3 软件可靠性测试工具 321
习题 322
第11章 软件安全性/软件安全测试 323
11.1 软件安全性测试 323
11.1.1 软件安全性概念 323
11.1.2 软件安全性分析 325
11.1.3 软件安全性测试方法与技术 329
11.2 软件安全测试 332
11.2.1 安全漏洞的概念 332
11.2.2 网络安全相关技术 335
11.2.3 解决软件安全问题的方法 337
11.2.4 软件安全测试方法与技术 338
11.3 应用软件安全性/安全测试工具 344
11.3.1 IBM Rational AppScan 344
11.3.2 JSky 344
11.3.3 WebPecker 344
习题 345
第12章 软件国际化与本地化测试 346
12.1 软件国际化与本地化 346
12.1.1 软件国际化及本地化概念 346
12.1.2 常用字符集编码及UTF-8 349
12.2 软件本地化测试 352
12.2.1 本地化之前的国际化测试 352
12.2.2 软件本地化测试方法 353
习题 358
第13章 面向对象软件测试 359
13.1 面向对象程序设计语言对软件测试的影响 359
13.1.1 信息隐蔽对测试的影响 360
13.1.2 封装和继承对测试的影响 360
13.1.3 集成测试 360
13.1.4 多态性和动态绑定对测试的影响 361
13.2 面向对象测试模型 361
13.2.1 面向对象分析的测试 363
13.2.2 面向对象设计的测试 364
13.2.3 面向对象编程的测试 365
13.2.4 面向对象的单元测试 366
13.2.5 面向对象的集成测试 368
13.2.6 面向对象的系统测试 369
13.2.7 面向对象软件的回归测试 369
13.2.8 基于UML的面向对象软件测试 370
13.3 面向对象软件测试用例的设计 373
13.3.1 基于故障的测试 373
13.3.2 基于脚本的测试 373
13.3.3 面向对象类的随机测试 374
习题 374
第14章 客户端应用软件测试 375
14.1 C/S、B/S应用模式概述 375
14.1.1 C/S、B/S技术特点 375
14.1.2 C/S和B/S的比较 377
14.1.3 C/S与B/S的区别 378
14.2 C/S系统测试 379
14.2.1 C/S系统测试对传统测试的影响 379
14.2.2 C/S系统测试的目标 381
14.2.3 C/S系统测试的内容和步骤 382
14.3 B/S系统测试 385
14.3.1 Web应用测试 385
14.3.2 Web应用性能测试方法 390
14.4 SOA应用软件测试 391
14.4.1 基于SOA的Web服务 392
14.4.2 SOA应用测试 393
14.4.3 Web服务测试 397
习题 400
第5部分 典型应用软件测试 405
第15章 移动应用软件测试 405
15.1 移动应用测试的困难 405
15.2 移动应用App测试方法和技术 406
15.2.1 App测试概念 406
15.2.2 移动App测试类型 407
15.2.3 如何开展移动App测试 412
习题 415
第16章 云应用软件测试 416
16.1 云测试基本概念 416
16.1.1 云测试特点 416
16.1.2 云测试优点 417
16.2 云测试方法和技术 418
16.2.1 云环境中的测试和针对“云”的测试 419
16.2.2 云测试抽象模型 421
16.2.3 云测试现状及挑战 421
16.2.4 云测试平台 422
习题 426
第17章 游戏软件测试 427
17.1 游戏软件测试基本概念 427
17.1.1 游戏软件测试的特性 428
17.1.2 常见的游戏软件错误 428
17.2 游戏软件测试与游戏开发过程 429
17.2.1 游戏开发过程 429
17.2.2 游戏测试与开发过程的关系 430
17.3 网络游戏测试 434
17.3.1 网络游戏的平衡性测试 434
17.3.2 魔兽世界的平衡性测试 436
17.3.3 网络游戏的性能测试 437
17.3.4 网络游戏的压力测试 438
17.4 手机游戏测试 439
17.4.1 手机游戏软件的测试内容 439
17.4.2 手机游戏软件测试的自身特性 439
习题 441
第18章 嵌入式软件测试 442
18.1 嵌入式软件测试概念 443
18.1.1 嵌入式软件开发及应用特点 443
18.1.2 嵌入式软件测试问题及传统测试方法 443
18.1.3 嵌入式软件测试策略及测试流程 444
18.2 嵌入式软件测试工具 446
18.2.1 嵌入式软件测试的典型工具 446
18.2.2 嵌入式软件测试工具举例 447
18.2.3 传统测试工具的局限性 449
18.3 全数字仿真测试方案 450
18.3.1 全数字仿真的概念 450
18.3.2 北京奥吉通的CRESTS/ATAT和CRESTS/TESS介绍 450
习题 452