| 
 新書推薦:
 
  《 
			商业盈利模式一本通 可复制的生意经 让每一分钱聪明盈利
			》
 售價:HK$ 
			57.2
 
  《 
			新加坡环境发展史(1965-2015):迈向环境可持续发展之旅
			》
 售價:HK$ 
			107.8
 
  《 
			山水并野形图研究
			》
 售價:HK$ 
			85.8
 
  《 
			《陈氏香谱》之中国香道(中华经典生活美学丛书)
			》
 售價:HK$ 
			74.8
 
  《 
			历史的局外人
			》
 售價:HK$ 
			63.8
 
  《 
			肖邦钢琴作品全集 第二辑 套装全4册 波兰国家版 原版引进 肖邦国际钢琴比赛推荐用书
			》
 售價:HK$ 
			253.0
 
  《 
			轻松读懂大唐风云三百年(全4册)
			》
 售價:HK$ 
			262.9
 
  《 
			成人口腔正畸学 第2版
			》
 售價:HK$ 
			657.8
 
 
 | 
         
          | 編輯推薦: |   
          | 本书是软件测试领域的经典书籍,是知名的“Craftsman”系列书籍中的重要新作。本书保留了之前版本中的经典案例,新增在线购物系统案例,通过精心选择的案例对理论和技术进行阐释。此外,新增关于特征交互问题的章节,新增关于事件驱动系统的建模和测试的章节。 |  
         
          | 內容簡介: |   
          | 本书是经典的软件测试书籍,综合阐述了软件测试的基础知识和方法,既涉及基于模型的开发,又介绍了测试驱动的开发,做到了理论与实践的完美结合,反映了软件标准和开发的新进展。作者拥有丰富的软件开发和测试领域的教学和研发经验,他在书中借助精心挑选的实例,把软件测试理论与实践紧密结合,讲解循序渐进、层次分明,便于读者理解。 |  
         
          | 關於作者: |   
          | 保罗·C. 乔根森(Paul C. Jorgensen) 软件工程领域的知名学者,大峡谷州立大学荣休教授,在软件产业界和教育界拥有50多年的从业经验。在职业生涯的前20年中,他主要从事工业软件开发和管理工作。1986年以来,他一直在大学为研究生讲授软件工程课程并进行相关研究。除本书外,他还著有The Craft of Model-Based Testing和Modeling Software Behavior:A Craftsmans 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
 |  
         
          | 內容試閱: |   
          | 前  言 Software Testing: A Craftsman’s Approach, Fifth Edition
 自本书第1版出版至今已经25年了。现在,本书有了一位合著者,Byron DeVries博士。Paul和Byron两人的软件工程教学经验及工程应用经验加在一起已经超过了32年。Paul的测试经验主要集中在电话交换系统软件方面,Byron则集中在航空电子系统方面。
 本书已经经历了4个版本的演化,而且在课堂教学与工业领域应用了25年。我们仍然先阐述基本理论,对测试技术进行介绍,然后通过精心选择的案例对理论和技术进行进一步说明。我们仍保留了一些经典的案例,同时使用在线购物系统(这是一个综合的网络应用)替代了之前版本中的其他案例。这些案例将贯穿全书。
 以下是本书的一些亮点。
 softwaretestcraft.org(或者.com)包含本书所有的Java源代码、PPT和各种注释。
 本书第2~4章是关于面向对象软件的,其中所有案例的伪代码都使用Java语言编写,可以使用JUnit进行单元测试。
 本书介绍了几种基于代码测试的商业工具和开源工具,同时,在基于模型测试的章节介绍了三种基于模型测试的商业工具。
 面向对象软件测试独立成章。
 本书增加了一章专门介绍特征交互问题。
 针对事件驱动系统的建模和测试,本书增加了篇幅和案例。
 本书保留了介绍技术评审的章节和相关的附录。
 有些内容在本书的这几个版本中一直保持不变。在第1版的前言中,Paul写道:
 我们挤在会议室的门口,每个人都轮流从小窗户往里面看。在会议室里面,一位最近聘用的软件设计师正在会议桌上展开源代码清单,并小心地将一块挂在长链上的水晶放在源代码上,还时不时地在清单上用红色标记出一个个圆圈。后来,我的一个同事问那个设计师在会议室里做了什么,他漫不经心地回答:“我在自己的程序中找bug。”这是一个真实的故事,发生在20世纪80年代中期,当时人们对水晶中隐藏的力量寄予厚望。
 在过去的25年中,我们的目标始终是为读者提供一系列更好的水晶。正如本书的书名,我们相信软件(和系统)测试是一种工艺,而我们对这种工艺颇有一些经验与心得,所以我们将自身的工业和学术背景与测试的理论、技术和案例相结合并将其呈现在本书中,希望能够与你的软件测试工艺融合,成为你的“水晶”。
 Paul C. Jorgensen
 密歇根州罗克福德
 Byron DeVries
 密歇根州大急流城
 2020年12月
 
 
 译 者 序
 Software Testing: A Craftsman’s Approach, Fifth Edition
 正如音乐是在时间中流淌的艺术,软件测试员就是在V模型右侧上下穿行的工艺师。本书是献给软件测试工艺师的,是帮助他们谱写软件测试乐章的又一件得力的工具。
 本书共21章,两个附录,延续了作者一贯的写作风格—理论由浅入深,案例贯穿始终。初学者可以先从最基础的等价类和边界值开始,逐步撷取基于模型的测试这一测试技术的明珠。有经验的读者可以从离散数学和图论这些理论知识开始,揭开那些耳熟能详、信手拈来的测试技术的数学面纱。本书的案例看上去都不复杂,细细琢磨却耐人寻味。译者在软件测试领域深耕多年,翻译时难免手痒,拿起案例自己分析一番,经常在作者的答案中发现奇思妙想,发出“哦,还可以这样设计用例”的感慨。翻译过程宛如曲径通幽,充满乐趣
 和惊喜。
 我们强烈建议读者一边阅读一边尝试自己解决书中提出的问题,尤其是章末的习题。本书还附有对应的Java代码,供读者参考和学习。这个过程,犹如在熟悉的通勤路上增加了探险的乐趣,一路过关斩将,打怪升级。更何况每章的技术内容都能与工程实践的内容相对应,融会贯通,乐趣无穷。本书的内容几乎覆盖了软件测试实践的所有环节,尤其是其中基于代码的测试和单元测试部分,以译者多年的单元测试经验来看,可谓字字珠玑。
 在略显焦虑的世界里,唯有读书能让人心静,唯有扎实的技艺能让人安心。希望这本好书能助力各位读者成为软件测试工艺师,在软件测试的领域自由驰骋。
 |    |