内容简介
本书是经典的软件测试教材,也可作为软件测试者、开发者和工程师的参考书。书中对基础知识、方法提供了系统的综合阐述,既涉及基于模型的开发,又介绍了测试驱动的开发,做到了理论与实践的完美结合,反映了软件标准和开发的新进展和变化。
作者简介
paul c.jorgensen博士,在其职业生涯的前20年中,主要从事电话交换系统的开发、支持和测试工作。1986年以来,他一直在大学为研究生讲授软件工程课程,先是亚利桑那州立大学,然后在大峡谷州立大学。
目录
Software Testing: A Craftsman’s Approach, Fourth Edition
出版者的话
译者序
前言
第一部分 数学基础
第1章 测试概述 2
1.1 基本概念 2
1.2 测试用例 3
1.3 利用维恩图来理解软件测试 3
1.4 构造测试用例 4
1.4.1 基于规格说明的测试 5
1.4.2 基于代码的测试 5
1.4.3 两种测试方法的对比 6
1.5 故障的分类 7
1.6 测试的层次 8
1.7 习题 8
1.8 参考文献 8
第2章 程序示例 9
2.1 通用伪代码 9
2.2 三角形问题 10
2.2.1 问题描述 10
2.2.2 三角形问题的讨论 11
2.2.3 三角形问题的经典实现 11
2.2.4 三角形问题的结构化实现 14
2.3 NextDate日期函数 15
2.3.1 问题描述 15
2.3.2 NextDate函数的讨论 16
2.3.3 NextDate函数的实现 16
2.4 佣金问题 18
2.4.1 问题描述 18
2.4.2 佣金问题的讨论 19
2.4.3 佣金问题的实现 19
2.5 SATM系统 20
2.5.1 问题描述 20
2.5.2 SATM系统的讨论 21
2.6 货币兑换计算器 22
2.7 雨刷控制器 22
2.8 车库门遥控开关 22
2.9 习题 23
2.10 参考文献 24
第3章 面向测试人员的离散数学 25
3.1 集合论 25
3.1.1 集合的成员关系 25
3.1.2 集合的定义方法 25
3.1.3 空集 26
3.1.4 集合的维恩图 26
3.1.5 集合运算 27
3.1.6 集合关系 28
3.1.7 集合划分 29
3.1.8 集合恒等 29
3.2 函数 30
3.2.1 定义域与值域 30
3.2.2 函数类型 30
3.2.3 函数复合 31
3.3 关系 32
3.3.1 集合之间的关系 32
3.3.2 单个集合上的关系 33
3.4 命题逻辑 34
3.4.1 逻辑运算符 34
3.4.2 逻辑表达式 35
3.4.3 逻辑等价 35
3.5 概率论 36
3.6 习题 37
3.7 参考文献 37
第4章 面向测试人员的图论 38
4.1 图 38
4.1.1 节点的度 38
4.1.2 关联矩阵 39
4.1.3 邻接矩阵 39
4.1.4 路径 40
4.1.5 连通性 40
4.1.6 压缩图 41
4.1.7 圈数 41
4.2 有向图 41
4.2.1 入度与出度 42
4.2.2 节点类型 42
4.2.3 有向图的邻接矩阵 43
4.2.4 路径与半路径 43
4.2.5 可达矩阵 44
4.2.6 n连通性 44
4.2.7 强分图 44
4.3 软件测试中常用的图 45
4.3.1 程序图 45
4.3.2 有限状态机 46
4.3.3 Petri网 47
4.3.4 事件驱动Petri网 49
4.3.5 状态图 50
4.4 习题 52
4.5 参考文献 52
第二部分 单元测试
第5章 边界值测试 54
5.1 边界值分析 54
5.1.1 边界值分析的拓展 55
5.1.2 边界值分析的局限性 56
5.2 健壮性测试 56
5.3 最坏情况测试 57
5.4 特殊值测试 57
5.5 示例 58
5.5.1 三角形问题的测试用例 58
5.5.2 NextDate函数的测试用例 59
5.5.3 佣金问题的测试用例 60
5.6 随机测试 62
5.7 边界值测试的原则 63
5.8 习题 65
第6章 等价类测试 66
6.1 等价类 66
6.2 传统的等价类测试 66
6.3 改进的等价类测试 67
6.3.1 弱一般等价类测试 68
6.3.2 强一般等价类测试 68
6.3.3 弱健壮等价类测试 68
6.3.4 强健壮等价类测试 69
6.4 三角形问题的等价类测试用例 69
6.5 NextDate函数的等价类测试用例 71
6.6 佣金问题的等价类测试用例 73
6.7 边缘测试 75
6.8 原则与注意事项 75
6.9 习题 76
6.10 参考文献 76
第7章 基于决策表的测试 77
7.1 决策表 77
7.2 决策表使用技巧 77
7.3 三角形问题的测试用例 80
7.4 Next Date函数的测试用例 81
7.4.1 第一轮尝试 81
7.4.2 第二轮尝试 82
7.4.3 第三轮尝试 83
7.5 佣金问题的测试用例 85
7.6 因果关系图 85
7.7 原则与注意事项 86
7.8 习题 87
7.9 参考文献 87
第8章 路径测试 88
8.1 程序图 88
8.2 DD路径 90
8.3 测试覆盖指标 92
8.3.1 基于程序图的覆盖度量方法 92
8.3.2 E. F. Miller的覆盖度量方法 92
8.3.3 复合条件下的闭合路径 95
8.3.4 示例 96
8.3.5 测试覆盖分析器 99
8.4 基路径测试 99
8.4.1 McCabe的基路径方法 100
8.4.2 McCabe基路径方法的考虑 102
8.4.3 McCabe方法的基本复杂度 103
8.5 原则与注意事项 105
8.6 习题 105
8.7 参考文献 106
第9章 数据流测试 107
9.1 定义/使用测试 107
9.1.1 举例 108
9.1.2 stocks的定义使用路径 110
9.1.3 locks的定义使用路径 110
9.1.4 totalLocks的定义使用路径 113
9.1.5 sales的定义使用路径 113
9.1.6 commission的定义使用路径 115
9.1.7 定义使用路径的测试覆盖指标 115
9.1.8 面向对象编码的定义/使用测试 116
9.2 基于程序切片的测试 116
9.2.1 举例 118
9.2.2 风格与技术 122
9.2.3 切片拼接 123
9.3 程序切片工具 124
9.4 习题 125
9.5 参考文献 125
第10章 单元测试回顾 126
10.1 测试方法的摇摆 126
10.2 测试方法摇摆问题探索 128
10.3 用于评估测试方法的指标 131
10.4 重新
前言/序言
Software Testing: A Craftsman’s Approach, Fourth Edition此次再版,我们增加了四章新内容,同时更加深入地讨论了基于路径的测试,从而拓展了本书18年以来一直侧重基于模型测试的传统。此前本书已经再版三次,经过了18年的教学和业界使用的检验。借助精心挑选的简单易懂的实例,本书把理论与实践紧密地结合在一起。此外,很多第3版中的内容被合并、重组在一起,使全书内容更加简洁流畅。把很多面向对象软件测试的内容和过程软件测试(procedural software testing)整合在一起形成了一个有机的整体。还有就是针对美国联邦航空管理局和美国国防部有关标准的要求,在“路径测试”一章中扩充了复杂条件测试(complex condition testing)和修正的条件判定覆盖率(modified condition decision coverage)指标等内容。
这一版新增加的章节如下:
软件技术评审(第22章)。侧重软件技术检验,这实际上被视为“静态测试”,而本书的前三版一直侧重于讨论如何利用精心挑选的测试用例来执行代码的“动态测试”。本章内容实际上来自一个软件开发公司20多年来的产业实践经验,该公司具有完善的技术评审流程。
附录。附录中给出了一套完整的用例集(采用UML),可以针对典型的客户需求实现实际产业开发所要求的技术检验。其中包括用例标准、用例故障严重程度定义、潜在问题的技术检验事项表,以及典型评审报告和最终报告的格式文档。
基于模型的综合系统测试(第17章)。由系统构成复杂系统的问题相对还是较新的(始于1999年)。软件测试从业人员现在是在追随几位大学研究人员的步伐,主要关注如何界定一个由若干系统构成的复杂系统。这一章介绍了“泳道事件驱动Petri网”,在表达能力上接近著名的状态图方法。有了它就可以对复杂系统实施基于模型的测试。
软件复杂度(第16章)。目前大部分文献都仅考察了在单元层面上的圈复杂度(cyclomatic,也称为McCabe)。本章从两个方面拓展了对单元层面复杂度的考量,引进了两种集成层面上的复杂度。对面向对象编程和系统层面的测试来说,需要涉及对复杂度的处理。在任何层面上,对复杂度的考量都是提升设计、编码、测试和维护工作的重要手段。保持一种一致的软件复杂度表述,对每个阶段都有很大的促进作用。
测试用例的评估(第21 章)。新增的这一章要研究一个难题:如何评估一个测试用例集?测试覆盖性是长期以来为人所接受的指标,但是其中总有一定程度的不确定性。古罗马关于“谁来守卫卫兵”的问题,在此变成了“谁来评估测试”的问题。十几年来,变异测试(mutation testing)逐渐成为一种解决方案,所以本章对其效果和贡献进行了介绍,同时也介绍了另外两种方法:漏洞挖掘(fuzzing)和故障注入(fault insertion)。
做了47年的软件开发人员和大学教授,我认为自己的软件测试知识既有深度也有广度。在大学里,我一直在数学系和计算机系授课,同时我还有20多年的工业软件开发和管理经验,这些经历使我能够很好地编写和改进我的软件测试教程并不断加深对于软件测试的理解。在我讲到书本以外的内容时,我经常会不断地产生新的看法。所以,我把本书的出版视为我对软件测试领域做出的一点贡献。最后,我还要感谢我的三位同事Roger Ferguson博士、Jagadeesh Nandigam博士和Christian Trefftz博士,感谢他们在面向对象测试这几章的撰写中给予我的巨大帮助。
非常感谢!
Paul C. Jorgensen于密歇根州罗克福德市
软件测试:一个软件工艺师的方法(原书第4版) 电子书 下载 mobi epub pdf txt