最近写了一本关于测试的书,已交付出版社审稿,近期会出版,目录如下:
第一篇 软件测试的基础
第1章 软件测试行业 1
1.1 软件测试的起源 1
1.1.1 第一个BUG的故事 1
1.1.2 最近的几个导致严重错误的Bug 1
1.1.3 软件测试的起源 2
1.2 软件测试的发展 2
1.2.1 软件调试 3
1.2.2 独立的软件测试 3
1.2.3 软件测试的第一次定义 3
1.2.4 软件测试成为专门的学科 4
1.2.5 开发与测试的融合趋势 4
1.2.6 为什么软件测试发展比较缓慢 4
1.3 软件测试行业的现状和前景 5
1.3.1 国内测试行业现状 5
1.3.2 测试人员的现状 6
1.3.3 软件测试的前景 6
1.4 小结 7
1.5 新手入门须知 8
1.6 模拟面试问答 8
第2章 软件测试的组织 10
2.1 测试的组织形式 10
2.1.1 微软的经验教训 10
2.1.2 最简单的软件测试组织 10
2.1.3 组织形式的分类方式 11
2.1.3 综合型的测试组织 12
2.2 融入测试组织 13
2.2.1 根据开发的模式判断自己的测试角色定位 13
2.2.2 如何融入一个项目团队 15
2.3 软件测试的团队建设 16
2.3.1 学习型团队的组建 16
2.3.2 让每一位测试人员找到适合自己的位置 17
2.3.3 “无规矩则不成方圆” 18
2.4 小结 20
2.5 新手入门须知 20
2.6 模拟面试问答 20
第3章 软件测试的人员要求 22
3.1 测试人员的素质要求 22
3.1.1 你对测试感兴趣吗? 22
3.1.2 你有适合做软件测试的性格特征吗? 23
3.1.3 测试的正确态度-责任感 25
3.2 测试人员的技能要求 26
3.2.1 业务知识 26
3.2.2 产品设计知识 27
3.2.3 测试人员的“武器” 27
3.2.4 用户心理学 28
3.2.5 测试人员是否需要编程技能? 29
3.2.6 文档能力 33
3.3 小结 34
3.4 新手入门须知 34
3.5 模拟面试问答 35
第二篇 软件测试基本理论
第4章 软件工程与软件测试 36
4.1 软件工程简介 36
4.1.1 什么是软件工程? 36
4.1.2 软件工程的发展历史 38
4.1.3 软件工程的目的 39
4.2 软件开发模式 39
4.2.1 常见的软件开发模式 39
4.2.2 敏捷开发模式 42
4.3 不同软件开发模式下的软件测试 43
4.3.1 CMM和ISO中的软件测试 43
4.3.2 敏捷开发中的软件测试 45
4.3.3 QA与QC的区别 46
4.4 配置管理与软件测试 47
4.4.1 什么是配置管理? 47
4.4.2 测试人员参与的配置管理活动 50
4.5 小结 51
4.6 新手入门须知 51
4.7 模拟面试问答 52
第5章 软件测试的目的与原则 54
5.1 软件测试的目的 54
5.1.1 测试是为了建立软件的信心 54
5.1.2 测试是一种服务 57
5.2 软件测试应该遵循的几个原则 57
5.2.1 Good enough原则 58
5.2.2 Pareto原则 58
5.2.3 尽可能早开展测试 59
5.2.4 在发现比较多错误的地方需要投入更多的测试 59
5.2.5 同化效应 60
5.3 小结 60
5.4 新手入门须知 60
5.5 模拟面试问答 61
第6章 软件测试的方法论 63
6.1 软件测试的5大流派 63
6.2 软件测试的方法应用 66
6.2.1 微软的软件测试方法 66
6.2.2 IBM的软件测试方法 68
6.2.3 自动错误预防(AEP)方法 71
6.3 小结 74
6.4 新手入门须知 74
6.5 模拟面试问答 76
第7章 软件测试的过程管理 78
7.1 软件测试的各个阶段 78
7.2 测试需求 79
7.2.1 需求规格说明书的检查要点 79
7.2.2 需求文档的检查步骤 79
7.2.3 通过编写测试用例来检查需求 82
7.3 测试的计划 83
7.3.1 我们为什么要制定测试计划? 83
7.3.2 测试计划是对测试过程的整体设计 84
7.3.3 确定测试范围 84
7.3.4 制定测试策略 85
7.3.5 安排好测试资源 85
7.3.6 安排好进度 85
7.3.7 计划风险 85
7.4 测试的设计及测试用例 86
7.4.1 等价类划分法 86
7.4.2 边界值分析法 87
7.4.3 基本路径分析法 89
7.4.4 因果图法 90
7.4.5 场景设计法 91
7.4.6 错误猜测法 92
7.4.7 利用正交试验法设计测试用例 92
7.4.8 利用均匀试验法设计测试用例 93
7.4.9 利用组合覆盖法设计测试用例 94
7.4.10 利用分类树方法设计测试用例 96
7.4.11 测试用例设计的自动化 97
7.4.12 敏捷测试用例设计 99
7.5 测试的执行 100
7.5.1 测试用例的合理选择 100
7.5.2 测试的分工与资源利用 101
7.5.3 测试环境的搭建 101
7.5.4 BVT测试与冒烟测试 102
7.5.5 每日构建的基本流程 102
7.5.6 通过每日构建来规范源代码管理 103
7.5.7 通过每日构建来控制版本风险 103
7.6 测试的记录和跟踪 104
7.6.1 Bug的质量衡量 104
7.6.2 如何录入一个合格的Bug? 104
7.6.3 Bug报告应该注意的几个问题 105
7.6.4 如何跟踪一个Bug的生命周期? 106
7.6.5 如何与开发人员沟通一个Bug 107
7.6.6 Bug评审要注意的问题 107
7.6.7 基于TestDirector的缺陷管理 108
7.7 回归测试 108
7.7.1 为什么会回归? 108
7.7.2 回归测试的难度 109
7.7.3 基于风险的回归测试 109
7.8 测试总结和报告 110
7.8.1 缺陷分类报告 111
7.8.2 缺陷趋势报告 112
7.8.3 典型缺陷与Bug模式 113
7.8.4 测试中的PDCA循环 114
7.8.5 客观全面的测试报告 115
7.8.6 实用测试经验的总结 115
7.9 小结 116
7.10 新手入门须知 116
7.11 模拟面试问答 116
第8章 软件测试的度量 119
8.1 软件测试度量的目的 119
8.1.1 测试度量的难度 119
8.1.2 谁来衡量测试人员的工作质量 121
8.1.3 度量的目的 122
8.2 软件测试的度量方法及其应用 123
8.2.1 Bug的数量能说明什么? 123
8.2.2 测试覆盖率统计 126
8.2.3 考核测试人员的硬指标和软指标 129
8.3 小结 131
8.4 新手入门须知 132
8.5 模拟面试问答 132
第三篇 实用软件测试技术与工具
第9章 实用软件测试技术 134
9.1 软件测试技术的发展 134
9.2 软件测试技术 135
9.2.1 不管黑盒、白盒,找到bug就行 136
9.2.2 手工测试、自动化测试,一个都不能少 137
9.2.3 探索性测试的“技术” 138
9.2.4 结对单元测试 140
9.2.5 单元级别的性能测试 142
9.2.6 软件的容量如何? 146
9.2.7 安全性测试 151
9.2.8 安装测试 153
9.2.9 环境测试 156
9.3 实用软件测试技术的综合应用 157
9.3.1 跟踪法测试 157
9.3.2 C/S结构软件系统的测试 161
9.3.3 B/S结构软件系统的测试 162
9.3.4 手机应用测试的要点 163
9.3.5 游戏软件系统的测试重点是“玩” 163
9.3.6 界面交互及用户体验测试 164
9.3.7 数据库测试 166
9.3.8 Web Services的测试 170
9.3.9 内存泄漏测试 172
9.3.10 检查程序员的编码规范 173
9.3.11 报表测试 175
9.3.12 联机帮助和用户手册的测试 176
9.3.13 缺乏工具支持的性能测试 178
9.3.14 本地化测试与国际化测试 182
9.3.15 可访问性测试(Accessibility Testing) 183
9.4 小结 185
9.5 新手入门须知 185
9.6 模拟面试问答 186
第10章 实用软件测试工具 189
10.1 软件测试工具的作用 189
10.2 软件测试工具的分类 189
10.2.1 按测试工具的用途分类 189
10.2.2 按测试工具的收费方式分类 190
10.3 如何在测试组中引入测试工具 190
10.3.1 测试工具的选型 191
10.3.2 测试工具的试用 191
10.3.3 测试工具的培训 192
10.3.4 测试工具的使用 192
10.4 测试管理工具TestDirector 193
10.4.1 测试管理工具与缺陷管理工具的区别 193
10.4.2 测试需求管理 194
10.4.3 测试用例管理 196
10.4.4 测试过程管理 197
10.4.5 缺陷跟踪管理 199
10.4.6 测试管理各大功能之间的关联 202
10.4.7 利用TestDirector生成测试报告 206
10.4.8 TestDirector数据库的备份和恢复 208
10.4.9 TestDirector的个性化定制 211
10.4.10 TestDirector的使用技巧 221
10.5 自动化功能测试工具TestComplete 223
10.5.1 脚本语言的选择 223
10.5.2 脚本编写的基本步骤 224
10.5.3 TestComplete如何模拟用户动作 231
10.5.4 TestComplete的Stores对象的使用 234
10.5.5 TestComplete的数据驱动测试方法 238
10.5.6 TestComplete的对象驱动测试方法 241
10.5.7 利用TestComplete测试Open的应用程序 243
10.5.8 利用TestComplete测试分布式应用程序 245
10.5.9 TestComplete的一些常用技巧 248
10.5.10 TestComplete的一些常用内建函数 250
10.6 性能测试工具LoadRunner 252
10.6.1 协议的选择与录制 253
10.6.2 脚本参数化和添加事务 259
10.6.3 性能参数的选择和监视 264
10.6.4 性能测试报告与性能瓶颈分析 268
10.7 内存问题测试工具BoundsChecker 269
10.7.1 在Delphi项目中设置好编译选项 270
10.7.2 BoundsChecker使用简介 271
10.7.3 如何判断内存问题? 272
10.8 微软的单元测试工具MSTest 274
10.8.1 建立单元测试项目 274
10.8.2 巧用NMock对象 276
10.8.3 单元测试的执行 278
10.9 测试用例设计工具CTE XL 279
10.9.1 分类树设计 279
10.9.2 选择组合测试用例 281
10.9.3 测试用例的自动生成 283
10.9.4 统计分析和报告 284
10.13 小结 286
10.14 新手入门须知 286
10.15 模拟面试问答 287
第11章 开源测试工具 289
11.1 开源测试工具简介 289
11.1.1 开源的背景 289
11.1.2 开源测试工具的发展现状 289
11.2 常用开源测试工具介绍 - 测试管理类 291
11.2.1 Bugzilla 291
11.2.2 Mantis 292
11.2.3 BugFree 293
11.2.4 综合比较 293
11.3 常用开源测试工具介绍 - 单元测试类 294
11.3.1 NUnit 294
11.3.2 NMock 295
11.3.3 NUnitForms 296
11.4 常用开源测试工具介绍 - 性能测试类 298
11.4.1 OpenSTA 298
11.4.2 TestMaker 299
11.4.3 DBMonster 300
11.5 常用开源测试工具介绍 - 自动化功能测试类 302
11.5.1 Abbot Java GUI Test Framework 302
11.5.2 SharpRobo 303
11.5.3 Samie 305
11.6 如何在测试组中引入开源测试工具 307
11.6.1 开源测试工具的成本考虑 307
11.6.2 引入开源测试工具的步骤 308
11.6.3 引入开源测试工具可能碰到的问题 309
11.7 小结 309
11.8 新手入门须知 309
11.9 模拟面试问答 310
第12章 测试工具的原理及制作 312
12.1 自制测试工具的优势 312
12.2 辅助工具的制作 313
12.2.1 测试工具的开发策划 313
12.2.2 测试语言的选择 313
12.2.3 测试工具开发的各种实现技术 314
12.3 利用Windows脚本辅助测试 316
12.3.1 利用JScript进行简单的GUI自动化测试 317
12.3.2 利用JScript检查注册表 317
12.3.3 利用JScript的FileSystemObject对象处理文件 318
12.3.4 利用JScript操作Excel 319
12.3.5 在JScript中运行应用程序 320
12.3.6 在JScript中使用WMI 321
12.3.7 在JScript中访问网络 322
12.3.8 在JScipt中使用正则表达式 322
12.3.9 使用JScript发送邮件 323
12.3.10 JScript脚本的调试方法 324
12.4 利用Windows脚本搭建一个每日构建框架 324
12.4.1 每日构建框架的基本要素 325
12.4.2 获取源代码 326
12.4.3 编译源代码 327
12.4.4 分析编译结果 328
12.4.5 处理编译结果 330
12.4.6 发送编译报告 330
12.4.7 利用Windows任务计划来定时启动脚本 331
12.4.8 每日构建框架的扩展1 – 单元测试 333
12.4.9 每日构建框架的扩展2 - 自动化功能测试 339
12.4.10 每日构建框架的扩展3 – 每日缺陷简报 340
12.4.11 每日构建框架的扩展4 – 每日配置管理简报 347
12.4.12 每日构建框架的扩展5 – 每日里程碑预报 350
12.4.13 每日构建框架的其它扩展思路 352
12.5 利用Windows脚本整合一个自动错误预防系统 356
12.5.1 轻量级的AEP框架 356
12.5.2 把AEP系统整合到每日构建框架中 356
12.5.3 整合FxCop 357
12.5.4 整合SQL BPA 358
12.5.5 测试结果检查和发送 359
12.6 设计一个性能测试框架 359
12.6.1 性能测试的基本原理 359
12.6.2 Controller的简单设计 360
12.6.3 Agent的简单设计 362
12.6.4 虚拟用户的产生 364
12.7 正交表测试用例自动生成工具的设计 365
12.7.1 正交表类的设计 366
12.7.2 加载正交表文件 368
12.7.3 解释输入 370
12.7.4 查找正交表 371
12.7.5 改进方向 378
12.8 数据库比较工具的制作 379
12.8.1 “三库”的问题 379
12.8.2 SQLServer表结构原理 379
12.8.3 数据库比较工具的设计 380
12.9 Oracle的SQL语句跟踪工具的制作 383
12.9.1 设置Oracle的SQL跟踪参数 383
12.9.2 打开SQL跟踪 384
12.9.3 关闭SQL跟踪 385
12.9.4 改进方向 385
12.10 一个简单的猴子测试工具的制作 386
12.10.1 猴子测试工具应该具备的功能 386
12.10.2 Windows API的调用 386
12.10.3 截屏功能的实现 390
12.10.4 猴子测试工具的设计 392
12.10.5 扩展 403
12.11 测试覆盖率辅助管理工具的制作 403
12.11.1 测试覆盖率管理 403
12.11.2 测试覆盖率辅助管理工具的设计 409
12.11.3 测试覆盖率辅助管理工具的使用 413
12.12 小结 415
12.13 新手入门须知 416
12.14 模拟面试问答 416
第13章 小工具的使用 418
13.1 巧用Windows自带的小工具 418
13.1.1 Windows的任务管理器 418
13.1.2 Perfmon的性能监控 421
13.1.3 NetStat的网络监视 425
13.2 一些免费小工具的妙用 427
13.2.1 SQLServer数据库的SQL事件探查器 427
13.2.2 Visual Studio开发工具的Spy++ 430
13.2.3 Visual SourceSafe的文件比较器 431
13.3 小结 432
13.4 新手入门须知 433
13.5 模拟面试问答 433
第14章 单元测试管理 434
14.1 单元测试范围管理 434
14.1.1 狭义的单元测试与广义的单元测试 434
14.1.2 单元测试是一把“双刃剑” 436
14.2 单元测试的过程管理 436
14.2.1 单元测试过程策划 436
14.2.2 单元测试管理规范 438
14.2.3 单元测试与每日构建的结合 440
14.3 单元测试的质量度量 442
14.3.1 单元测试覆盖率 442
14.3.2 单元测试评审 443
14.4 小结 443
14.5 新手入门须知 444
14.6 模拟面试问答 444
第15章 自动化功能测试管理 446
15.1 是否应该进行自动化功能测试? 446
15.1.1 “猴子”测试技术 446
15.1.2 自动化功能测试的原则 447
15.2 自动化功能测试的过程策划 448
15.2.1 什么时候开始自动化测试? 448
15.2.2 自动化功能测试的设计 449
15.2.3 自动化功能测试的编码 450
15.2.4 自动化功能测试的验证 453
15.2.5 自动化功能测试的管理规范 453
15.2.6 自动化功能测试与每日构建的结合 454
15.3 自动化功能测试的质量度量 455
15.3.1 自动化功能测试项目成功了吗? 455
15.3.2 为可测性设计 457
15.3.3 投入与回报 459
15.3.4 敏捷的自动化测试 459
15.4 小结 462
15.5 新手入门须知 462
15.6 模拟面试问答 462
第16章 性能测试管理 465
16.1 性能测试的需求管理 465
16.1.1 性能测试的代价 465
16.1.2 性能指标的确定 466
16.2 性能测试的过程管理 466
16.2.1 性能测试的方案选择 466
16.2.2 性能测试的资源安排 467
16.2.3 应该记录哪些性能参数? 468
16.2.4 性能测试报告与瓶颈分析 470
16.3 性能测试的质量度量 472
16.3.1 性能测试是否全面? 472
16.3.2 性能测试的投入与回报 474
16.4 小结 474
16.5 新手入门须知 474
16.6 模拟面试问答 475
第17章 探索性测试管理 477
17.1 探索性测试的必要性 477
17.2 如何进行探索性测试? 478
17.2.1 优秀探索性测试人员的基本素质 478
17.2.2 测试就是向程序提问 479
17.3 探索性测试的过程管理和度量 480
17.3.1 测试组长是“教练” 480
17.3.2 基于探索任务的测试计划 481
17.3.3 探索性测试的“碰头会议” 481
17.4 小结 484
17.5 新手入门须知 484
17.6 模拟面试问答 484
第18章 用户界面测试管理 486
18.1 用户界面测试的必要性 486
18.2 如何进行用户界面测试? 487
18.2.1 用户界面测试的时机 487
18.2.2 用户界面测试的要点 488
18.3 用户界面测试原则 489
18.3.1 亲和力 489
18.3.2 协助 490
18.3.3 有效 492
18.3.4 鼓励 492
18.3.5 熟悉 493
18.3.6 明显 493
18.3.7 个性化 494
18.3.8 安全 494
18.3.9 满意 495
18.3.10 简单 495
18.3.11 支持 496
18.3.12 多样性 496
18.4 小结 497
18.5 新手入门须知 497
18.6 模拟面试问答 497
第四篇 软件测试的学习和研究
第19章 软件测试的学习环境 499
19.1 学习氛围的建立 499
19.1.1 培训导师制度 500
19.1.2 读书会 502
19.1.3 找个师傅学习软件测试 503
19.2 软件测试经验的总结 504
19.2.1 测试知识库的建立 504
19.2.2 办一份内部期刊 506
19.2.3 测试管理经验的总结 507
19.3 软件测试的交流 509
19.3.1 技术日活动 510
19.3.2 与开发人员的交流 510
19.3.3 与管理层的交流 512
19.3.4 外部交流 513
19.4 小结 513
19.5 新手入门须知 513
19.6 模拟面试问答 514
第20章 软件测试的研究方向与个人发展 516
20.1 软件测试角色与其他项目角色的可转换性 516
20.1.1 转向售前 516
20.1.2 转向售后 517
20.1.3 转向开发 518
20.1.4 转向QA 519
20.2 测试人员的发展路线 520
20.2.1 管理路线 521
20.2.2 技术路线 522
20.3 软件测试的研究方向 523
20.3.1 软件测试中的数学 523
20.3.2 软件测试工具设计 524
20.4 小结 525
20.5 新手入门须知 525
20.6 模拟面试问答 525