第一部分 预备知识 3
第1章 一个小问题 3
第2章 如何使用本书 9
2.1 读者向导 9
2.2 约定 11
2.2.1 每章的基本成分 11
2.2.2 难度 12
2.2.3 标准 12
2.2.4 面向对象术语 12
2.2.5 程序设计语言和代码举例 14
2.2.6 测试工具 15
2.2.7 欢迎指出本书的错误 16
2.3 用于面向对象测试的FAQ 16
2.3.1 为什么要测试对象 17
2.3.2 测试设计 18
2.3.3 方法和类的测试设计 19
2.3.4 复用的测试 20
2.3.5 子系统和应用系统的测试设计 21
2.3.6 集成测试和开发的顺序 21
2.3.7 回归测试和重复的增量的开发 23
2.3.8 UML模型的测试 24
2.3.9 测试自动机 26
2.4 测试过程 28
第3章 软件测试:简要介绍 29
3.1 什么是软件测试 29
3.2 定义 31
3.3 测试的局限 37
3.3.1 输入/状态空间 37
3.3.2 执行顺序 38
3.3.3 故障敏感性和巧合正确性 39
3.3.4 绝对局限性 41
3.4 测试能完成什么 41
3.5 文献注释 43
第4章 必须改变:测试和面向对象软件 45
4.1 软件测试的沉闷科学 45
4.1.1 我是对的,你是对的,对象也是对的 45
4.1.2 故障模型的作用 46
4.1.3 用于面向对象编程的故障模型 48
4.2 范型的副作用 49
4.2.1 什么错了 49
4.2.2 封装 50
4.2.3 继承性 51
4.2.4 多态性 54
4.2.5 消息序列和状态相关错误 57
4.2.6 内置的低层服务 60
4.2.7 错误列表 60
4.3 具体语言的风险 64
4.3.1 C++ 65
4.3.2 Java 67
4.3.3 Smalltalk 67
4.4 面向对象测试的覆盖模型 68
4.5 面向对象测试的声明 72
4.6 文献注释 75
第二部分 模型 79
第5章 测试模型 79
5.1 测试设计与测试模型 79
5.1.1 为什么测试必须是基于模型的 79
5.1.2 什么是模型 79
5.1.3 模型在测试中的作用 80
5.1.4 草图或测试就绪模型 81
5.1.5 结论 83
5.2 文献注释 84
第6章 组合模型 85
6.1 组合模型如何支持测试 85
6.2 怎样得到判定表 86
6.2.1 基本方法 86
6.2.2 构件和结构 86
6.2.3 汽车保险续保模型 87
6.2.4 无关条件、不知条件和不可能发生条件 88
6.2.5 判定表在面向对象开发中的应用 91
6.3.1 布尔表达式 92
6.3 导出逻辑函数 92
6.3.2 真值表与判定表 94
6.3.3 布尔表达式的组成 94
6.3.4 卡诺矩阵(Kanaugh-Veitch Matrix) 98
6.3.5 因-果图(Cause-Effect Graphs) 100
6.4 判定表确认(Validation) 104
6.5 测试生成(Test Generation) 105
6.5.1 故障模型(Fault Model) 105
6.5.2 全显式变式 106
6.5.3 全变式、全真变式、全假变式和全素因子变式 106
6.5.4 每一个条件/所有条件 107
6.5.5 二元判定图行列式 108
6.5.6 变量的否定(Variable negation) 111
6.5.7 非二值变量值域分析 113
6.5.8 其它启发方式 113
6.6 选择组合测试策略 117
6.7 文献注释 120
第7章 状态机 121
7.1 动机 121
7.2 基本模型 122
7.2.1 什么是状态机 122
7.2.2 状态转换图 124
7.2.3 有限状态自动机的一些性质 125
7.2.4 受监视转换 127
7.2.5 Mealy机和Moore机 128
7.2.6 状态转换表 131
7.2.7 基本模型的局限性 131
7.2.8 状态图 135
7.2.9 状态机与面向对象的开发 140
7.3 FREE状态模型 142
7.3.1 OOA/D行为模型的局限性 142
7.3.2 状态 143
7.3.3 转换 147
7.3.4 ɑ和ω状态 148
7.3.5 继承性及类的展平 149
7.3.6 示指明的事件/转换对偶 154
7.4 基于状态的测试设计 158
7.4.1 状态机是如何失败的 158
7.4.2 开发可测模型 164
7.4.3 N+测试策略 167
7.4.4 相关能力和局限性 179
7.4.5 选择基于状态测试的策略 181
7.5 文献注释 184
第8章 UML测试者指南 187
8.1 引言 187
8.1.1 作为测试模型的UML 187
8.1.2 关系测试策略 190
8.2 通用元素 190
8.2.1 组织与注解 190
8.2.2 对象约束语言 192
8.3 用例图 192
8.3.1 符号和语义 192
8.3.2 一般测试模型 193
8.3.3 测试性扩充 195
8.4 类图 197
8.4.1 符号和语义 197
8.4.2 一般测试模型 199
8.5 顺序图 200
8.5.1 符号和语义 200
8.5.2 一般测试需求 201
8.5.3 可测试性能扩充 202
8.6 活动图 203
8.6.1 符号和语义 203
8.6.2 一般测试模型 204
8.7 状态图 206
8.8 协作图 206
8.8.1 符号和语义 206
8.8.2 一般测试模型 208
8.8.3 可测试性扩充 209
8.9 构件图 210
8.9.1 符号和语义 210
8.9.2 一般测试模型 211
8.10.1 符号和语义 212
8.10.2 一般测试模型 212
8.10 实施图 212
8.11 图、关系和测试 213
8.12 文献注释 217
第三部分 样式 221
第9章 面向结果的测试策略 221
9.1 面向结果的测试 221
9.1.1 基于责任的测试设计的作用 224
9.1.2 基于实现的测试设计的作用 225
9.1.3 面向对象开发的集成 226
9.1.4 利用责任和实现 227
9.2.1 什么是样式 228
9.2 测试设计样式 228
9.2.2 样式和测试 229
9.2.3 测试设计样式模板 229
9.2.4 本书中的测试样式 233
9.2.5 应用测试设计样式 233
9.3 测试实例、测试包和测试计划的文档 234
9.3.1 IEEE829文件 234
9.3.2 可跟踪性 237
9.4 文献注释 238
10.1 类测试和集成 239
10.1.1 什么是类范围的测试 239
第10章 类 239
10.1.2 为什么在类范围进行测试 240
10.1.3 由谁和什么时候测试 242
10.1.4 实例分析:MPR Teltech 242
10.2 基础知识 243
10.2.1 类范围集成 243
10.2.2 基于实现的测试模型 244
10.2.3 路径敏感 273
10.2.4 域测试模型 275
10.3.1 功能内聚 283
10.3 方法范围测试设计样式 283
10.3.2 方法范围的集成 284
10.3.3 样式 284
10.4 类范围测试设计样式 299
10.4.1 类模态性 300
10.4.2 样式 301
10.5 展平类范围测试设计样式 334
10.5.1 超类的麻烦 334
10.5.2 展平类的测试策略 338
10.5.3 样式 343
10.6 文献注释 349
第11章 可复用构件 351
11.1 测试和复用 351
11.1.1 复用机制 351
11.1.2 测试在复用中的作用 353
11.1.3 复用测试包 355
11.2 测试设计样式 356
11.2.1 抽象类测试 356
11.2.2 类属类测试 358
11.2.3 新框架测试 366
11.2.4 流行框架测试 369
11.3 文献注释 372
第12章 子系统 375
12.1 子系统 375
12.1.1 什么是子系统 375
12.1.2 为什么在子系统范围内测试 376
12.2 子系统测试设计样式 377
12.2.1 类关联测试 378
12.2.2 往返场景测试 385
12.2.3 受控异常测试 393
12.2.4 模式机测试 397
12.3 文献注释 414
第13章 集成 417
13.1 面向对象开发中的集成 417
13.1.1 定义 417
13.1.2 集成测试的必要性 418
13.1.3 相依性分析 421
13.1.4 集成故障 427
13.2 集成样式 427
13.2.1 特定范围需要考虑的事项 428
13.2.2 大爆炸集成 431
13.2.3 自底向上集成 433
13.2.4 自顶向下集成 440
13.2.5 协作集成 445
13.2.6 基干集成 451
13.2.7 层次集成 456
13.2.8 客户/服务器集成 458
13.2.9 分布服务集成 463
13.2.10 离频集成 468
13.3 文献注释 473
14.1 应用系统测试 475
14.1.1 一个告诫人们的故事 475
第14章 应用系统 475
14.1.2 面向对象应用系统测试 476
14.1.3 应用系统测试策略 477
14.2 测试设计样式 478
14.2.1 扩充式用例测试 478
14.2.2 覆盖CRUD 484
14.2.3 按纲要分配测试 486
14.3 特定实现的能力 489
14.3.1 配置和兼容性 490
14.3.2 性能 490
14.3.3 完整性的容错性 491
14.3.4 人机交互 492
14.4 开发后测试 493
14.5 测试性能目标注解 494
14.5.1 批处理系统 494
14.5.2 交互式系统 495
14.5.3 实时系统 495
14.6 文献注释 496
第15章 回归测试 499
15.1 预备 499
15.1.1 什么和为什么 499
15.1.2 何时和如何 502
15.1.3 回归故障(Regression Fault) 503
15.1.4 测试自动化 504
15.1.5 测试包维护 506
15.1.6 缩减一个测试包需要考虑的事项 508
15.2 测试样式 509
15.2.1 全部再测试 510
15.2.2 再测试风险用例 511
15.2.3 按纲要再测试 513
15.2.4 再测试修改的代码 515
15.2.5 防火墙内再测试 518
15.3 文献注释 522
第四部分 工具 527
第16章 测试自动机 527
16.1 为什么测试必须自动化 527
16.2 限制和告诫 528
第17章 断言 531
17.1 简介 531
17.1.1 什么是断言 532
17.1.2 为什么使用断言 533
17.1.3 谁使用断言 535
17.2.1 假设检查器 536
17.2 基于实现的断言 536
17.2.2 潜伏的故障和探测器 538
17.3 基于责任的断言 539
17.3.1 概述 539
17.3.2 责任、契约和子类型 539
17.3.3 方法范围 542
17.3.4 类范围 547
17.3.5 顺序约束 548
17.3.6 超类/子类范围 553
17.3.7 客户/服务器范围 554
17.4.1 程序设计人员的断言FAQ 556
17.4 实现 556
17.4.2 断言动作 559
17.4.3 不可执行的断言 560
17.4.4 Ada95 561
17.4.5 C++ 566
17.4.6 Eiffel 572
17.4.7 Java 574
17.4.8 Objective-C 578
17.4.9 Smalltalk 580
17.5.2 应用断言设计测试 594
17.5 实施 594
17.5.1 内嵌测试的验证 594
17.5.3 发行前的考虑 596
17.5.4 发行后的考虑 597
17.6 限制和告诫 599
17.7 一些断言工具 602
17.8 文献注释 603
第18章 预测 607
18.1 简介 607
18.2.1 简介 608
18.2 预测样式 608
18.2.2 评判 613
18.2.3 预说明预测 614
18.2.4 保值预测 616
18.2.5 有机预测 619
18.3 比较器 624
18.3.1 简介 624
18.3.2 确定对象相等 625
18.3.3 深相等和浅相等 627
18.3.4 抽象内容和具体内容 629
18.3.7 类型/子类型相等 630
18.3.6 汇集 630
18.3.5 别名 630
18.3.8 部分相等方法 632
18.4 文献注释 632
第19章 测试装置设计 633
19.1 如何开发测试装置 633
19.1.1 需求 634
19.1.2 体系结构 636
19.2 测试实例样式 637
19.2.1 考虑 637
19.3.1 考虑 647
19.3 测试控制样式 647
19.4 驱动器样式 652
19.4.1 考虑 652
19.4.2 驱动器设计样式 655
19.5 测试执行样式 684
19.6 测试实现语法 696
19.7 文献注释 699
附录 BigFoot s Tootsie:实例研究 701
术语汇编 707
参考文献 751