软件测试:一个软件工艺师的方法(原书第5版)

软件测试:一个软件工艺师的方法(原书第5版)
作 者: 保罗·C 乔根森 拜伦·德弗里斯
出版社: 机械工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  保罗·C. 乔根森(Paul C. Jorgensen) 软件工程领域的知名学者,大峡谷州立大学荣休教授,在软件产业界和教育界拥有50多年的从业经验。在职业生涯的前20年中,他主要从事工业软件开发和管理工作。1986年以来,他一直在大学为研究生讲授软件工程课程并进行相关研究。除本书外,他还著有The Craft of Model-Based Testing和Modeling Software Behavior:A Craftsman's Approach等书籍,在程序员中影响甚广。拜伦·德弗里斯(Byron DeVries) 大峡谷州立大学助理教授,为本科生和研究生讲授软件工程课程。之前曾从事航空电子软件开发工作长达十多年,拥有丰富的软件验证经验。曾获大峡谷州立大学“杰出青年学者”奖。

内容简介

本书是经典的软件测试书籍,综合阐述了软件测试的基础知识和方法,既涉及基于模型的开发,又介绍了测试驱动的开发,做到了理论与实践的完美结合,反映了软件标准和开发的新进展。作者拥有丰富的软件开发和测试领域的教学和研发经验,他在书中借助精心挑选的实例,把软件测试理论与实践紧密结合,讲解循序渐进、层次分明,便于读者理解。

图书目录

目  录

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 类中方法权重 295

15.4.2 继承树深度 295

15.4.3 子类个数 295

15.4.4 类间耦合度 295

15.4.5 类的响应 295

15.4.6 内聚性缺失 295

15.5 系统级复杂度 296

15.5.1 源代码的环复杂度 296

15.5.2 规范模型的复杂度 296

15.5.3 使用用例的复杂度 296

15.5.4 UML的复杂度 297

15.6 习题 297

15.7 参考文献 299

第16章 测试系统的系统 300

16.1 SoS的特点 300

16.2 SoS的示例 302

16.2.1 车库门控制系统—

有监管的SoS 302

16.2.2 空中交通管理系统—

公认的SoS 302

16.2.3 “美食家”在线购物系统 303

16.3 SoS的软件工程 304

16.3.1 背景需求 304

16.3.2 使用UML术语的需求

规格说明 304

16.3.3 测试 307

16.4 SoS的通信原语 308

16.4.1 将ESML指令用于Petri网 308

16.4.2 泳道Petri网的新指令 310

16.5 SoS的指令效果 313

16.5.1 有监管的和公认的SoS 313

16.5.2 协作的和事实上的SoS 313

16.6 习题 313

16.7 参考文献 314

第17章 特征交互测试 315

17.1 定义特征交互问题 315

17.2 特征交互的类型 317

17.2.1 输入冲突 318

17.2.2 输出冲突 320

17.2.3 资源冲突 321

17.3 交互的分类 321

17.3.1 单处理器静态交互 322

17.3.2 多处理器静态交互 323

17.3.3 单处理器动态交互 324

17.3.4 多处理器动态交互 326

17.4 交互、组合和确定性 327

17.5 习题 328

17.6 参考文献 328

第18章 案例研究:测试事件驱动

的系统 329

18.1 车库门控制系统的问题描述 329

18.2 行为驱动开发建模 330

18.3 扩展的有限状态机建模 331

18.3.1 从BDD场景派生有限状态机 331

18.3.2 有限状态机的自顶向下开发 333

18.4 使用泳道事件驱动Petri

网建模 336

18.4.1 正常关闭车库门 337

18.4.2 突然停止关闭车库门 338

18.4.3 光束打断正在关闭的

车库门  338

18.4.4 开门的交互 339

18.5 从泳道事件驱动的Petri网派生

测试用例 341

18.6 失效模式事件分析 341

18.7 习题 346

18.8 参考文献 346

第19章 结对测试法 347

19.1 结对测试技术 347

19.1.1 程序输入 348

19.1.2 独立变量 349

19.1.3 输入顺序 351

19.1.4 仅因为输入对造成

的失效 354

19.2 细看NIST研究 354

19.3 适合结对测试技术的应用 355

19.4 关于结对测试的建议 356

19.5 习题 356

19.6 参考文献 356

第20章 软件的技术评审 357

20.1 软件评审的经济性 357

20.2 评审的类型 358

20.2.1 走查 359

20.2.2 技术评审 359

20.2.3 审核 359

20.2.4 评审类型的对比 360

20.3 评审中的角色 360

20.3.1 制作者 360

20.3.2 评审组长 360

20.3.3 记录员 361

20.3.4 评审员 361

20.3.5 角色的交叉 361

20.4 评审包的内容 361

20.4.1 工作产品的需求 361

20.4.2 固定版本的工作产品 362

20.4.3 标准和检查单 362

20.4.4 评审记录表 362

20.4.5 评审报告表 363

20.4.6 错误严重等级 364

20.4.7 评审报告大纲 364

20.5 一种工业级评审过程 364

20.5.1 组织计划 365

20.5.2 介绍评审员 366

20.5.3 准备 366

20.5.4 评审会议 366

20.5.5 准备报告 367

20.5.6 问题处理 367

20.6 有效的评审文化 367

20.6.1 评审会议规范 367

20.6.2 参与会议的管理层 368

20.6.3 两个关于评审的故事 368

20.7 评审的案例 369

20.8 参考文献 370

第21章 结语:卓越的软件测试 371

21.1 工艺师 371

21.2 软件测试的最佳实践 372

21.3 十大优秀测试项目 373

21.3.1 认真的技术评审 373

21.3.2 测试级别的定义和识别 373

21.3.3 所有级别的基于模型

的测试 373

21.3.4 系统测试扩展 373

21.3.5 用于指导回归测试的

关联矩阵 373

21.3.6 单元级测试中使用xUnit

和模拟对象 374

21.3.7 基于规范和基于代码的单元

级测试的智能结合 374

21.3.8 在所有测试级中使用合适

的工具 374

21.3.9 维护阶段的探索性测试 374

21.3.10 测试驱动开发 374

21.4 不同项目的最佳实践 374

21.4.1 任务关键型项目 375

21.4.2 时间关键型项目 375

21.4.3 对继承代码的纠正性维护 375

21.5 一个极端的例子 375

21.6 参考文献 376

附录A 完整的技术审查包 377

附录B “美食家”在线购物系统 387