目录 1
第1章 引言 1
1.1 读者对象 1
1.2 编码语言 2
1.3 软件测试方法快速浏览 2
1.4 联机文档 4
1.5 本书包含章节 4
1.6 源代码 6
1.7 样式 6
1.8 错吴 7
1.9 作者联系方法 8
1.10 建议与评论 8
1.11 致谢 8
第2章 测试进阶 9
2.1 什么是软件测试 9
2.2 为什么需要软件测试 11
2.3 软件测试目的 12
2.4 软件测试原则 13
2.4.1 尽早和不断地测试 13
2.4.3 由小到大的测试范围 14
2.4.2 彻底的测试不可能 14
2.4.4 避免检查自己的代码 15
2.4.5 追溯至用户需求 16
2.4.6 考虑到各种输入 18
2.4.7 错误集中发生现象 20
2.4.8 跟踪测试错误结果 21
2.4.9 合理安排测试计划 22
2.4.10 错误的关联和依赖 23
2.4.11 测试结果的全面检查 23
2.4.12 及时更新测试 24
2.5 软件的可测试性 25
2.6 测试人员的素质 26
2.7 如何成为测试专家 28
2.8 测试人员最好拥有编程或者项目经验 29
2.9 本章总结 30
第3章 认识和理解 31
3.1 什么是软件BUG 31
3.2 测试团队的构成 32
3.3.1 测试工具和有效测试 33
3.3.2 测试天生是矮子 33
3.3 测试认识的误区 33
3.3.3 随意的测试 35
3.3.4 测试是一种想象 35
3.3.5 非专业人员做测试 35
3.3.6 测试是简单的事情 36
3.3.7 测试能保证软件质量 36
3.4 单元测试概论 37
3.4.1 单元测试提高开发速度和质量 37
3.4.4 哪些代码呼唤单元测试 38
3.4.2 单元测试是一种设计 38
3.4.3 单元测试的重要性 38
3.4.5 初试单元测试 40
3.5 单元测试的误区 42
3.5.1 单元测试不是规范 42
3.5.2 它浪费了太多的时间 43
3.5.3 它仅仅是证明这些代码做了什么 43
3.5.4 是不是可以不进行单元测试 43
3.6 持续集成和测试 44
3.6.1 持续集成的优点 44
3.5.5 集成测试将会抓住所有的Bug 44
3.5.6 成本效率不高 44
3.6.2 集成越频繁效果越好 45
3.6.3 使用配置管理工具 45
3.6.4 自动化创建过程 45
3.6.5 自测试的代码 46
3.7 测试用例 46
3.7.1 测试用例构成 47
3.7.2 测试用例范例 47
3.8 软件复审 49
3.8.2 软件评审误区 50
3.8.1 软件复审内容 50
3.8.3 流程图 51
3.8.4 复审参与角色 52
3.8.5 流程规约 52
3.9 测试自动化 54
3.9.1 使用测试工具的前提 54
3.9.2 测试自动化的绩效 55
3.10 自动化测试的存活周期 56
3.10.1 中介代码的变化 56
3.10.2 被测试代码的变化 57
3.10.3 更深入的测试探讨和研究 57
3.11 商业测试工具实现方式 62
3.11.1 对象识别模式 63
3.11.2 动作识别模式 64
3.11.3 两种模式的缺陷 65
3.12 本章总结 65
第4章 敏捷测试 66
4.1 软件的开发模式 66
4.1.1 瀑布模型 66
4.1.2 迭代模型 67
4.1.3 螺旋迭代模型 68
4.2.1 敏捷测试的价值观 69
4.2 敏捷测试的存在理由 69
4.2.2 敏捷测试的原则 70
4.2.3 敏捷测试的实践 72
4.2.4 敏捷测试是(不是)什么 74
4.2.5 测试何时是敏捷的 75
4.2.6 敏捷测试何时是有(没有)意义的 76
4.2.7 想成为一个敏捷测试者吗 77
4.2.8 敏捷测试团队的构成 77
4.3 敏捷测试涉及角色 77
4.3.1 测试经理 78
4.3.2 测试分析员 82
4.3.3 测试设计员 88
4.3.4 测试员 95
4.3.5 测试工具开发员 96
4.4 敏捷测试成熟度 97
4.4.1 初始阶段(Ⅰ级) 97
4.4.2 已定义阶段(Ⅱ级) 98
4.4.3 可持续集成阶段(Ⅲ级) 98
4.4.5 持续优化阶段(Ⅴ级) 99
4.4.4 可管理阶段(Ⅳ级) 99
4.5 敏捷测试过程 100
4.6 本章总结 103
第5章 类测试 104
5.1 类测试概念 104
5.1.1 类在UML中的描述 104
5.1.2 类测试的组成 105
5.1.3 类测试和传统单元测试 105
5.1.4 类的测试价值 107
5.1.8 类测试过程 108
5.1.7 类测试的阶段 108
5.1.6 类测试用例 108
5.1.5 类测试关联人员 108
5.1.9 类测试程度 109
5.2 确定类测试用例 109
5.2.1 根据前置和后置状态确定测试用例 109
5.2.2 根据状态转换确定测试用例 112
5.2.3 根据代码确定测试用例 113
5.3 构造类测试驱动 114
5.3.1 测试驱动器的构建前提 117
5.3.2 TestCase类设计 119
5.3.3 根据用例方法命名测试用例 120
5.3.4 根据前置条件和后置状态命名测试用例 120
5.3.5 类测试代码实例 120
5.3.6 测试结果 134
5.3.7 其他测试方式 135
5.4 测试构建的延伸 137
5.4.1 接口类的测试 139
5.4.2 抽象类的测试 143
5.4.3 抽象类测试改进 147
5.4.4 内类的测试 153
5.4.5 重载和覆盖测试 159
5.4.6 异常测试 164
5.5 本章总结 167
第6章 深入浅出Junit 168
6.1 单元级测试概述 168
6.1.1 Junit单元级测试的好处 168
6.1.2 System.out.println是不够的 169
6.1.3 成本的回收和再循环 169
6.2 哪里可以找到Junit 170
6.3 Junit的安装和配置 170
6.4 自动化测试框架 171
6.5 Test接口 172
6.6 Assert静态类 173
6.7 TestCase抽象类 179
6.8 TestResult结果类 184
6.9 TestSuite测试包类 187
6.10 TestListener监听者 193
6.11 Protectable保护接口 193
6.12 TestFailure失败类 194
6.13 本章总结 195
7.1 概述 196
7.2 Junit的运行包 196
第7章 Junit GUI和扩展 196
7.2.1 BaseTestRunner基运行类 197
7.3 Junit.textui字符执行包 200
7.3.1 TestRunner字符执行类 200
7.4 Junit.Awtui图形执行包 202
7.4.1 TestRunner图形执行类 203
7.5 Junit.Swingui图形执行包 206
7.5.1 TestRunner图形执行类 207
7.6.1 测试结果报告 211
7.6 Junit扩展包 211
7.6.2 多线程测试处理 213
7.6.3 增强异常测试 214
7.6.4 重复测试执行 215
7.6.5 额外的测试修饰 215
7.6.6 测试总环境初始化 216
7.7 Junit快速应用 218
7.7.1 如何运用Junit写一个简单测试程序 218
7.7.2 如何使用Junit的断言方法 219
7.7.7 SimpleTestCase执行后效果 221
7.7.6 如何使用Junit初始化全局变量和实例 221
7.7.5 如何执行Junit测试 221
7.7.3 如何使用Junit的suite方法 221
7.7.4 如何使用Junit的main方法 221
7.8 本章总结 223
第8章 Junit和类测试 224
8.1 Junit测试设计原则 224
8.1.1 不要测试简单的事 224
8.1.4 作为详细设计文档和类文档的衍生 225
8.1.5 自动化 225
8.1.3 测试边界条件 225
8.1.2 测试任何可能出现错误的地方 225
8.1.6 必须100%通过 226
8.1.7 测试重用 226
8.1.8 测试用例应该独立 226
8.1.9 测试依赖于接口 226
8.1.10 固定类方法的调用顺序 227
8.1.11 测试依赖于接口 227
8.2 类测试过程 228
8.2.1 构建单元级测试 228
8.2.2 CRC Cards 229
8.2.3 测试驱动复用 230
8.2.4 编码重构 231
8.3 Product CRC Cards 232
8.2.5 持续集成 232
8.3.1 Iproduct CRC Cards 233
8.3.2 Product CRC Cards 234
8.3.3 StoreHouse CRC Cards 236
8.4 Product代码 239
8.4.1 IProduct 239
8.4.2 Product类 239
8.4.3 StoreHouse类 241
8.5.1 测试计划 245
8.5 Product测式 245
8.5.2 测试数据 246
8.5.3 测试驱动代码 247
8.5.4 辅助说明 251
8.6 本章总结 254
第9章 Junit测试的延伸 255
9.1 录制功能点测试 255
9.2 抽象类测试(一) 258
9.3 抽象类测试(二) 262
9.4 私有方法测试 265
9.5 映射对象Mock 269
9.5.1 单元级测试和Mock 270
9.5.2 为什么使用Mock 271
9.5.3 高级测试行为 272
9.5.4 发现接口 273
9.5.5 Mock Objects的局限性 273
9.6 重构和MockObject 274
9.6.1 Bank类重构前 274
9.6.2 Bank类重构后 275
9.6.4 Mock Objects简单范例 276
9.6.3 Mock Objects要点 276
9.7 异常处理 279
9.8 随机测试 280
9.9 间隔测试 281
9.10 本章总结 285
第10章 软件BUG和管理 286
10.1 软件BUG和癌细胞 286
10.2 BUG的影响 286
10.3 BUG的产生 288
10.4 BUG如何穿透测试 290
10.5.1 需求阶段的BUG 293
10.5 BUG的种类 293
10.5.2 分析、设计阶段的BUG 295
10.5.3 实现阶段的BUG 296
10.5.4 配置阶段的BUG 299
10.5.5 短视将来的BUG 299
10.5.6 静态文档的BUG 300
10.6 Bug的具体分类 300
10.6.1 内存泄漏 300
10.6.2 程序运行时错误 302
10.6.3 程序语法的错误 303
10.6.5 编码标准的错误(二类) 304
10.6.4 未使用(死)代码的错误(一类) 304
10.6.6 命名惯例的错误(三类) 305
10.6.7 条件错误(一类) 305
10.6.8 循环错误(二类) 306
10.6.9 选择错误(三类) 306
10.6.10 多线程错误 307
10.6.11 读取和存储错误 308
10.6.12 集成错误 309
10.6.13 数据类型转换错误 310
10.6.14 版本错误 310
10.6.16 Boolean错误 311
10.6.15 重用错误 311
10.7 BUG的生命周期 312
10.7.1 BUG的流转状态关键字 314
10.7.2 BUG的严重等级 315
10.7.3 BUG的解决关键字 315
10.7.4 BUG处理的优先等级 316
10.8 BUG管理流程 316
10.8.1 如何提交系统中的BUG 317
10.8.2 使用自动BUG报告工具 317
10.8.4 BUG详细内容信息 318
10.8.3 通过电子邮件发送BUG报告 318
10.8.5 轻微的BUG报告 319
10.8.6 不知道归属的BUG 319
10.8.7 关闭BUG报告 319
10.8.8 接续的讨论信息 320
10.8.9 列出的具有特殊意义的BUG 320
10.8.10 重开、重分配的BUG 320
10.8.11 BUG的标题(特殊) 320
10.9 如何有效地报告BUG 320
10.9.5 冷静和细心 321
10.9.4 别把实现人员当傻瓜 321
10.9.1 千万别提“程序不好用” 321
10.9.2 不要盲目地报告BUG 321
10.9.3 让更多的事实说话 321
10.9.6 保持现场环境 322
10.9.7 真实的和建议的 322
10.9.8 提交问题的根源 322
10.9.9 最后的建议 322
10.10 本章总结 323
附录A 失败的项目 324
B.2 从测试文章看测试与开发 329
B.3 有关测试人生 329
B.1 序言 329
附录B 小集市里的谈话 329
B.4 关于测试到什么程度,才能收手的问题 330
B.5 国外测试与国内测试的区别 331
B.6 如何做测试评估 332
B.7 作QA的就比作coding的差吗 333
B.8 大家一起来讨论测试的文档 334
B.9 数据库的测试 338
B.10 BUG如何分类 339
B.12 测试要有编程背景吗 340
B.11 在什么时候项目提交给测试人员,什么是最合理的 340
B.13 编写测试用例 341
B.14 验收测试怎么做 345
B.15 如何创建测试模型 345
B.16 请问作为一个测试部的负责人,应该如何组织和开展测试工作呢 346
B.17 集成测试需要专门的管理软件吗 347
B.18 来讨论一下测试的生命周期 347
B.19 经典BUG收集 348
B.21 各种测试工具的主要功能和用途 349
B.20 大家觉得怎么做才能改变测试人员的地位 349
B.22 测试负责人应该做些什么工作 350
附录C Web性能测试工具“StressTest” 352
附录D 推荐的相关书籍 367
D.1 序言 367
D.2 测试类书籍 367
D.3 需求分析类书籍 370
D.4 设计类书籍 372
D.5 代码实现和优化类书籍 373
D.6 软件工程类书籍 377