第1章 软件测试基础知识 1
1.1 软件测试的数学理论基础 1
1.1.1 集合论 1
1.1.2 函数 3
1.1.3 关系 4
1.1.4 命题逻辑 6
1.1.5 概率论 8
1.1.6 图论 9
1.2 软件测试的现状与发展 13
1.2.1 软件测试的现状 13
1.2.2 软件测试的发展趋势 15
1.3 软件测试和软件质量 16
1.3.1 什么是软件测试 16
1.3.2 什么是软件质量 17
1.3.3 软件测试和软件质量保证的区别 17
1.3.4 进行多少测试才终止 18
1.4 为什么需要软件测试 19
1.4.1 导致软件缺陷的原因 19
1.4.2 软件测试在软件开发、维护和使用中的角色 19
1.4.3 软件测试心理学 20
1.5 软件测试的目的 20
1.6 软件测试的原则 22
1.6.1 所有的软件测试都应追溯到用户需求 22
1.6.2 尽早地和不断地进行软件测试 22
1.6.3 不可能完全地测试 23
1.6.4 增量测试,由小到大 25
1.6.5 避免测试自己的程序 25
1.6.6 设计完善的测试用例 26
1.6.7 注意测试中的群集现象 27
1.6.8 确认缺陷的有效性 27
1.6.9 合理安排测试计划 27
1.6.10 进行回归测试 28
1.6.11 测试结果的统计和分析 28
1.6.12 及时更新测试 29
1.7 软件测试级别和模型 29
1.7.1 软件测试级别 29
1.7.2 软件测试生命周期 32
1.7.3 开发和测试模型 33
1.8 软件测试的类型 38
1.8.1 功能性测试 39
1.8.2 非功能性测试 39
1.8.3 软件结构性测试 40
1.8.4 变更相关的测试(再测试和回归测试) 41
1.9 基本的软件测试过程 42
练习 43
第2章 静态测试技术 44
2.1 静态测试技术概要 44
2.2 评审技术概述 44
2.2.1 评审的定义和类型 44
2.2.2 评审过程 45
2.2.3 责任和角色 45
2.3 代码检查 45
2.3.1 代码检查类型 45
2.3.2 代码检查内容 47
2.3.3 编码规范 47
2.3.4 代码缺陷检查表 55
2.4 正规技术评审 57
2.4.1 定义 57
2.4.2 技术评审的目的 57
2.4.3 评审小组成员 57
2.4.4 技术评审活动过程 58
2.4.5 技术评审注意事项 58
练习 59
第3章 动态测试技术 60
3.1 黑盒测试技术 60
3.1.1 边界值分析法 60
3.1.2 等价类测试法 63
3.1.3 错误推测法 69
3.1.4 因果图法 72
3.1.5 决策表测试法 76
3.1.6 Use Case法(场景法) 80
3.1.7 正交实验法 84
3.1.8 黑盒测试方法选择的策略 97
3.2 白盒测试技术 97
3.2.1 白盒测试概念 97
3.2.2 程序结构分析 99
3.2.3 逻辑覆盖测试法 104
3.2.4 程序插装 115
3.2.5 其他白盒测试方法简介 120
3.2.6 白盒测试方法选择的策略 122
练习 122
第4章 单元测试 124
4.1 单元测试概述 124
4.2 单元测试环境及过程 126
4.3 单元测试策略 135
4.4 单元测试的分析和用例设计 138
4.5 单元测试实例 142
练习 158
第5章 集成测试 159
5.1 集成测试概述 159
5.2 集成测试环境及过程 161
5.3 集成测试方法 169
5.4 集成测试的分析和用例设计 180
5.5 集成测试实例 185
练习 197
第6章 系统测试 198
6.1 系统测试概述 198
6.2 系统测试环境及过程 198
6.3 系统测试类型 201
6.4 系统测试的分析和用例设计 208
6.5 系统测试实例 212
练习 221
第7章 验收测试 222
7.1 验收测试概述 222
7.2 验收测试过程 223
7.3 验收测试实例 225
练习 228
第8章 面向对象软件测试 229
8.1 面向对象技术简介 229
8.1.1 面向对象的概念 229
8.1.2 面向对象的开发模式 230
8.1.3 统一建模语言 230
8.2 面向对象测试模型 232
8.3 面向对象的用例设计方法 232
8.3.1 基于缺陷的测试 232
8.3.2 OO类的随机测试 233
8.3.3 类层次的划分测试 234
8.3.4 类行为模型测试 234
8.4 面向对象测试的策略 235
8.4.1 面向对象分析的测试 235
8.4.2 面向对象设计的测试 237
8.4.3 面向对象编程的测试 239
8.4.4 面向对象的单元测试 240
8.4.5 面向对象的集成测试 245
8.4.6 面向对象的系统测试 247
练习 249
第9章 专用应用系统测试 250
9.1 GUI测试 250
9.1.1 GUI测试概述 250
9.1.2 GUI测试原则 250
9.1.3 GUI测试内容 256
9.1.4 GUI测试的设计及自动化 256
9.2 Web应用系统测试 260
9.2.1 Web系统基本组成 260
9.2.2 Web应用系统测试综述 261
9.2.3 Web应用系统测试的实施 262
9.3 数据库测试 278
9.3.1 数据库测试概述 278
9.3.2 数据库功能性测试 279
9.3.3 数据库性能测试与原因分析 281
9.3.4 数据库可靠及安全性测试 288
9.4 嵌入式系统测试 291
9.4.1 嵌入式系统介绍及测试基础 291
9.4.2 嵌入式测试策略 297
9.4.3 嵌入式测试环境的创建与实施 301
9.4.4 嵌入式测试的工具 306
9.4.5 嵌入式测试应用——手机测试 307
9.5 负载压力测试 312
9.5.1 负载压力测试基础 312
9.5.2 负载压力测试的策略 314
9.5.3 负载压力测试的解决方案和实施 315
9.5.4 负载压力测试结果分析 337
9.5.5 系统性能调优 341
9.6 游戏测试 345
9.6.1 游戏测试的基本概念 345
9.6.2 游戏测试的主要内容 347
9.6.3 游戏测试的实施 348
练习 357
第10章 软件测试管理 358
10.1 测试计划的制定与估算 358
10.2 测试的组织 361
10.3 测试过程监控 364
10.4 测试文档 369
10.5 软件配置管理 369
10.6 测试与风险 373
10.7 缺陷管理 375
练习 380
第11章 软件测试工具 381
11.1 测试工具的类型 381
11.1.1 测试管理工具 381
11.1.2 静态测试工具 382
11.1.3 功能测试执行工具 384
11.1.4 覆盖工具(结构性测试工具) 385
11.1.5 性能和压力测试工具 385
11.1.6 其他工具 386
11.1.7 测试工具的选择 387
11.2 测试自动化与手工测试 388
11.2.1 手动测试的不足 388
11.2.2 自动测试的优点 389
11.2.3 自动测试的局限性 389
练习 390
第12章 开源测试工具应用 391
12.1 单元开源测试工具JUnit 391
12.1.1 JUnit简介 391
12.1.2 安装 393
12.1.3 使用 393
12.2 开源负载压力测试工具Jmeter 403
12.2.1 Jmeter的基本框架 403
12.2.2 常用测试范围 404
12.2.3 Web服务器测试 404
附录A 部分正交实验表 408
附录B 软件测试中英文术语对照表 415
参考文献 442