新書推薦:
《
中国历代竹器图谱与数字活化
》
售價:HK$
572.7
《
EDA技术与设计(第2版)
》
售價:HK$
87.3
《
揉碎浪漫(全两册)
》
售價:HK$
72.2
《
古籍善本
》
售價:HK$
552.0
《
人民币国际化报告2024:可持续全球供应链体系与国际货币金融变革
》
售價:HK$
89.7
《
道德经新注 81幅作者亲绘哲理中国画,图文解读道德经
》
售價:HK$
147.2
《
清俗纪闻
》
售價:HK$
101.2
《
镜中的星期天
》
售價:HK$
76.2
|
內容簡介: |
本书是经典的软件测试教材,也可作为软件测试者、开发者和工程师的参考书。书中对基础知识、方法提供了系统的综合阐述,既涉及基于模型的开发,又介绍了测试驱动的开发,做到了理论与实践的完美结合,反映了软件标准和开发的新进展和变化。
|
關於作者: |
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于密歇根州罗克福德市
|
|