目 录
Software Testing: A Craftsman’s Approach, Fifth Edition
译者序
前言
作者简介
第一部分 数学背景
第1章 测试概览 2
1.1 基本定义 2
1.2 测试用例 3
1.3 测试的Venn图 4
1.4 确定测试用例 5
1.4.1 基于规范的测试 5
1.4.2 基于代码的测试 6
1.4.3 基于规范和基于代码之争 7
1.5 错误的分类 8
1.6 测试级别 9
1.7 习题 10
1.8 参考文献 10
第2章 案例 11
2.1 伪代码和Java的结构元素 11
2.2 三角形问题 14
2.2.1 问题描述 14
2.2.2 问题分析 15
2.2.3 Java实现 15
2.3 NextDate程序 16
2.3.1 问题描述 16
2.3.2 问题分析 16
2.3.3 Java实现 16
2.4 “美食家”在线购物系统 19
2.4.1 问题描述 20
2.4.2 问题分析 20
2.5 车库门控制系统 23
2.6 习题中的案例 23
2.6.1 四边形程序 24
2.6.2 NextWeek程序 24
2.6.3 雨刷控制器 24
2.7 习题 25
2.8 参考文献 25
第3章 软件测试的离散数学基础 27
3.1 集合论 27
3.1.1 集合中的元素 27
3.1.2 集合的定义 27
3.1.3 空集 28
3.1.4 Venn图 29
3.1.5 集合运算 29
3.1.6 集合关系 31
3.1.7 集合划分 31
3.1.8 集合恒等式 32
3.2 函数 32
3.2.1 定义域和值域 33
3.2.2 函数类型 33
3.2.3 函数组合 34
3.3 关系 34
3.3.1 集合间关系 35
3.3.2 单集合关系 36
3.4 命题逻辑 37
3.4.1 逻辑运算符 38
3.4.2 逻辑表达式 38
3.4.3 逻辑等价 39
3.4.4 概率论 39
3.5 习题 41
3.6 参考文献 41
第4章 软件测试的图论基础 42
4.1 图 42
4.1.1 节点的度 43
4.1.2 关联矩阵 43
4.1.3 邻接矩阵 43
4.1.4 路径 44
4.1.5 连通性 45
4.1.6 压缩图 45
4.1.7 环数 45
4.2 有向图 46
4.2.1 入度和出度 47
4.2.2 节点类型 47
4.2.3 有向图的邻接矩阵 47
4.2.4 路径和半路径 48
4.2.5 可达矩阵 48
4.2.6 n-连通 49
4.2.7 强连通分量 49
4.3 测试中的图 50
4.3.1 程序图 50
4.3.2 有限状态机 51
4.3.3 Petri网 53
4.3.4 事件驱动的Petri网 54
4.3.5 状态图 57
4.4 习题 58
4.5 参考文献 59
第二部分 单元测试
第5章 边界值测试 62
5.1 常规边界值测试 63
5.1.1 通用边界值分析 63
5.1.2 边界值分析的局限性 64
5.2 鲁棒边界值测试 65
5.3 最坏情况边界值测试 65
5.4 特殊值测试 66
5.5 案例 67
5.5.1 三角形问题的测试用例 67
5.5.2 NextDate程序的测试用例 68
5.6 随机测试 72
5.7 边界值测试指南 74
5.8 习题 75
第6章 等价类测试 76
6.1 等价类 76
6.2 传统等价类测试 76
6.3 改进的等价类测试 77
6.3.1 弱等价类测试 78
6.3.2 强等价类测试 79
6.3.3 弱鲁棒等价类测试 79
6.3.4 强鲁棒等价类测试 80
6.4 三角形问题的等价类测试用例 81
6.5 NextDate函数的等价类测试用例 82
6.6 completeOrder方法的等价类
测试用例 85
6.7 边缘测试 87
6.8 关于无效等价类 87
6.9 等价类方法的使用指南 88
6.10 习题 88
6.11 参考文献 89
第7章 基于决策表的测试 90
7.1 决策表 90
7.2 决策表技术 91
7.3 三角形问题的测试用例 94
7.4 NextDate函数的测试用例 95
7.4.1 第一轮测试 95
7.4.2 第二轮测试 96
7.4.3 第三轮测试 97
7.5 因果图 100
7.6 基于决策表测试的指南 100
7.7 习题 101
7.8 参考文献 101
第8章 基于代码的测试 102
8.1 程序流程图 102
8.2 DD路径 104
8.3 代码覆盖 105
8.3.1 基于程序流程图的覆盖 105
8.3.2 Miller的覆盖 106
8.3.3 剖析组合条件 109
8.3.4 案例 111
8.4 基本路径测试 123
8.4.1 McCabe的基本路径法 123
8.4.2 McCabe基本路径测试的观察 125
8.4.3 基本复杂度 125
8.5 基于代码测试的指南 127
8.6 习题 128
8.7 参考文献 128
第9章 面向对象软件测试 130
9.1 单元测试框架 130
9.1.1 通用的单元测试框架 130
9.1.2 JUnit 131
9.2 模拟对象和自动对象模拟 133
9.3 数据流测试 135
9.3.1 定义-使用测试的定义 135
9.3.2 定义-使用测试度量 136
9.3.3 定义-使用测试的例子 137
9.4 面向对象的复杂度度量 144
9.4.1 类中方法权重 144
9.4.2 继承树深度 144
9.4.3 子类个数 144
9.4.4 类间耦合度 144
9.4.5 类的响应 145
9.4.6 内聚性缺失 145
9.5 面向对象软件测试中的问题 145
9.5.1 组合和封装的含义 145
9.5.2 继承的含义 145
9.5.3 多态的含义 146
9.6 基于切片的测试技术 151
9.6.1 案例 152
9.6.2 类型和技术 157
9.6.3 切片拼接 157
9.6.4 程序切片工具 158
9.7 习题 158
9.8 参考文献 159
第10章 回顾单元测试 160
10.1 测试方法的钟摆 160
10.2 横摆 162
10.2.1 基于程序流程图的测试 165
10.2.2 基本路径测试 165
10.2.3 数据流测试 166
10.2.4 基于切片的测试 167
10.2.5 边界值测试 168
10.2.6 等价类测试 169
10.2.7 决策表测试 169
10.3 保险费问题的案例 171
10.4 基于规范的测试 171
10.4.1 基于代码的测试 175
10.5 指南 177
10.6 习题 178
10.7 参考文献 178
第三部分 超越单元测试
第11章 基于生命周期的测试 180
11.1 传统的瀑布测试 180
11.1.1 瀑布测试 181
11.1.2 瀑布模型的利和弊 181
11.2 在迭代生命周期中实施测试 182
11.2.1 瀑布模型的细分 182
11.2.2 基于需求规格说明的生命周
期模型 183
11.3 敏捷测试 185
11.3.1 用户故事 186
11.3.2 极限编程 192
11.3.3 Scrum编程 192
11.3.4 测试驱动开发 193
11.3.5 敏捷的模型驱动开发 194
11.3.6 模型驱动的敏捷开发 195
11.4 遗留问题 196
11.4.1 基于需求还是基于代码 196
11.4.2 配置管理 196
11.4.3 粒度 196
11.5 TDD的优劣之处和开放性问题 196
11.6 回顾MDD和TDD 197
11.7 参考文献 199
第12章 集成测试 200
12.1 基于分解的集成 200
12.1.1 自顶向下的集成 203
12.1.2 自底向上的集成 204
12.1.3 三明治集成 204
12.1.4 利弊分析 205
12.2 基于调用关系图的集成 205
12.2.1 成对集成 206
12.2.2 邻域集成 207
12.2.3 利弊分析 209
12.3 基于路径的集成 210
12.3.1 新扩展的概念 210
12.3.2 MM路径的复杂度 212
12.3.3 利弊分析 212
12.4 案例:integrationNextDate程序
的过程集成 213
12.4.1 基于分解的集成 217
12.4.2 基于调用图的集成 218
12.4.3 基于MM路径的集成 218
12.4.4 分析和建议 218
12.5 案例:integrationNextDate
程序的O-O集成 219
12.6 基于模型的集成测试 225
12.6.1 消息通信机制 226
12.6.2 成对集成 226
12.6.3 有限状态机/消息
路径集成 229
12.6.4 场景1:创建正常账户 229
12.7 习题 231
12.8 参考文献 232
第13章 系统测试 233
13.1 线索 233
13.1.1 线索可能性 234
13.1.2 线索定义 234
13.2 在单处理器应用中识别线索 235
13.2.1 用户故事/使用用例 235
13.2.2 需要多少使用用例 237
13.2.3 有限状态机中的线索 241
13.2.4 原子系统功能 244
13.3 识别系统的系统中的线索 245
13.3.1 对话 245
13.3.2 FSM之间的通信 246
13.3.3 作为ASF序列的对话 248
13.4 系统级测试用例 248
13.4.1 一个企业级测试执行系统 248
13.4.2 从使用用例到测试用例 249
13.4.3 从有限状态机路径到测
试用例 251
13.4.4 从对话场景到测试用例 251
13.4.5 有限状态机和测试用例
之间的联系 251
13.5 系统测试的覆盖度量 252
13.5.1 基于使用用例的测试覆盖 253
13.5.2 基于模型的测试覆盖 255
13.6 长测试用例和短测试用例 257
13.6.1 系统测试的补充方法 261
13.6.2 操作剖面 262
13.7 非功能系统测试 268
13.7.1 压力测试策略 269
13.7.2 数学方法 270
13.8 习题 271
13.9 参考文献 271
第14章 基于模型的测试 272
14.1 基于模型的测试概述 272
14.2 适合的模型 272
14.2.1 Peterson格 273
14.2.2 主流模型的表达能力 274
14.2.3 建模的注意事项 274
14.2.4 做出合适的选择 275
14.3 支持基于模型测试的商业工具 276
14.3.1 TestOptimal 276
14.3.2 Conformiq 277
14.3.3 国际GmbH验证系统 280
14.4 习题 281
14.5 参考文献 284
第15章 软件复杂度 285
15.1 单元级复杂度 285
15.1.1 环复杂度 285
15.1.2 计算复杂度 288
15.2 集成级复杂度 291
15.2.1 集成级的环复杂度 292
15.2.2 消息交互复杂度 293
15.3 软件复杂度案例 293
15.4 面向对象的复杂度 294
15.4.1 类中
展开