软件测试(原书第2版)
作者 : [美]Paul C.Jorgensen
译者 : 韩柯 杜旭涛
出版日期 : 2003-07-01
ISBN : 7-111-12166-X
定价 : 35.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 318
开本 : 16开
原书名 : Software Testing: A Craftsman's Approach
原出版社: CRC Press
属性分类: 教材
包含CD :
绝版 :
图书简介

主要特点:
  ◆使用了独立于具体编程语言的伪代码 
  ◆将UML集成到面向对象测试中 
  ◆提供了大量的图表和案例研究 
  ◆专门讲述了GUI测试方面的内容
本书是经典的软件测试教材,是ACM&IEEE编制"软件工程知识体系"(SWEBOK)的主要参考文献之一,并已被国际众多大学选作教材。书中全面地介绍了软件测试的基础知识和方法,很好地做到了理论与实践相结合。
  本书全面地介绍了软件测试的基础知识和方法。通过问题、图表和案例研究,对软件测试数学问题和技术进行了深入的研究,并在例子中以更加通用的伪代码取代了过时的Pascal代码,从而使内容独立于具体的程序设计语言。本书还介绍了面向对象测试的内容,并完善了GUI测试内容。
  本书是ACM与IEEE计算机学会"软件工程知识体系"主要引用文献,并是国际众多大学的教材。 本书适合作为相关专业高校教材,也可用于读者自学。

图书特色

Paul C.Jorgensen博士在其职业生涯的前20年中,主要从事电话交换系统的开发、支持和测试工作。1986年以来,他一直在大学为研究生讲授软件工程课程,先是在亚利桑那州立大学,然后在大峡谷州立大学。他的电子邮件地址是:jorgensp@gvsu.edu。

图书前言

我们聚在会议室门口窃窃私语,纷纷通过门上的小窗户向里观望。会议室里,一位新来的软件设计师正在会议桌上摊开源程序清单,在水晶灯下小心翼翼地检查源代码,并不时地在清单上用红笔勾画。事后,我的一个同事问这位设计师在会议室做什么。他冷冷地说:“找我程序中的bug。”这是发生在20世纪80年代中期的一件真人真事,那时人们很相信隐藏在水晶灯中的魔力。
本书的目标就是向读者提供一盏更好的水晶灯。我认为软件(和系统)测试是一种工艺,我觉得我已经在一定程度上掌握了这种工艺。在我多年开发电话交换机系统的经历中,大约有三分之一的时间花在了测试上:定义测试方法论和标准,协调主要国际长途收费电话交换机的系统测试,描述并帮助构建两个测试执行工具(现在我们称之为CASE工具),以及相当多的平淡无奇的手工测试。过去七年来,我在大学为研究生讲授软件工程,学术研究主要集中在规格说明和测试上。与Oxford Method(牛津方法)所说的一样,只有在能够讲授之后才算真正学会,我觉得一点不错。参加我的测试研究生课程的学生,都是当地公司的全职员工。说真的,这些学生会使人更加将理论联系于实际。本书就是根据我的讲义和工程经验总结出来的。
我自认为是一名软件工程师,但是在传统软件领域里我的知识精度和深度使我对这个头衔感到有点不自在。当Myers的著作《软件测试的艺术》(The Art of Software testing)刚出版时,我和我的一位同事正要返回意大利完成一个项目。在去机场的路上,我们走进一家麻省理工学院书店购买了此书,从而成为这本书最早的几个购买者之一。在过去的15年中,我们相信软件测试已经从一门艺术走向一种工艺,但是在成为一门科学之前,还有一段路要走。
所有工艺的一部分都是了解工具和媒介的能力和局限性。好的木工有各种工具,根据要制做的东西和要使用的木材来选用最适合的工具。在软件开发生命周期传统瀑布模型的各个阶段,测试对于精确分析具有最重要的作用。将软件测试提升为一种工艺,要求测试工艺师了解基本工具。为此,本书第3章和第4章将提供在本书其他部分中使用的数学背景知识。
数学是一种描述工具,有助于人们更好地理解要被测试的软件。仅拥有精确表示法本身还不够,还必须拥有好的技术和判断方法以确定恰当的测试方法,并将其付诸实现。这些就是本书第二部分和第三部分的目标,这两个部分将讨论基本功能和结构性测试技术。这些技术将用于第2章介绍的系列例子。第四部分将这些技术用于集成和系统级测试,以及面向对象的测试。在这些层次上,更重要的是测试什么,而不是怎样测试,因此讨论的重点是测试需求规格说明。第四部分的最后,将研究软件控制系统中交互的测试,并简要讨论客户-服务器系统。
具有讽刺意味的是有关测试的书籍也会存在错误。尽管评审人员和编辑付出了艰辛的劳动,但是我敢肯定书中还是会有错误。这些都要由我负责。
1997年我参加了Edward Miller组织的测试研讨会,从那以后,Edward Miller成为软件测试界的领袖之一。在那次研讨会上,Miller详细地说明了测试工作不一定是十分繁琐的苦差,而可以是软件开发中富有创造性、很有意思的部分。本书的目标就是使读者成为测试工艺师,使读者能够通过出色的测试工作获得真正工艺师的自豪感和乐趣。

Paul C. Jorgensen
密歇根州Rockford
1995年1月
自从我为本书第1版撰写前言以来已经过去了七年。这七年中发生了很多事情,因此需要编写第2版。最重要的变化是UML(统一建模语言)已经成为描述和设计面向对象软件的一种标准。第2版的主要变化是增加了第五部分(共5章)专门讨论测试面向对象软件。第五部分中的绝大部分内容都以UML为基础。
第二个主要变化是第1版中的所有Pascal例子替换为独立于语言的伪代码。大多数例子都做了详细描述,都可以由CRC出版公司的Web站点(www.crcpress.com)的Visual Basic可执行模块支持。新增加了一些说明测试面向对象软件的例子,对老例子做了几十处修改。最重要的补充是增加了经过改进的等价类测试描述、一个系列案例研究和集成测试的更多细节。
我很高兴本书第1版成为由ACM和IEEE计算机学会(www.swebok.org)联合编写的“软件工程知识体系”试用标准的主要引用文献之一,而这又使改正第1版中存在的问题变得更为重要。韩国的一位读者给我寄来第1版的错误清单,有38个错误。令人高兴的是,参加我讲授的软件测试研究生课程的学生也找出了其他一些错误。这和测试过程很相似:我改正了所有已知的错误。如果读者发现了错误,请通知我,我会对这些错误负责。我的电子邮件地址是:jorgensp@gvsu.edu。
我要感谢CRC出版公司Jerry Papke和Helena Redshaw的认真而耐心的工作,还要感谢我的朋友和同事Roger Ferguson教授,感谢他对第五部分新内容提供的帮助,特别是在面向对象日历例子上提供的帮助。在某种意义上,Roger是第16~20章大量草稿的测试者。

Paul C. Jorgensen
密歇根州Rockford
2002年5月

译者简介

韩柯 杜旭涛:暂无简介

译者序

软件测试是软件质量保证的重要内容,随着软件规模的不断扩大,复杂程度的不断提高,以及面向对象程序设计方法和工具的使用,软件测试的难度也进一步提高,测试质量更加难以度量。
本书的内容是以作者长期从事软件工程和软件测试研究生教学的讲义为基础,而作者的学生大部分具有一定的程序设计实际经验。作者的教学讲义经过长时间的教学实践,广泛采纳了学生的意见,既具有鲜明的教科书特点,又具有很强的实践性,既详细介绍了软件测试的基础理论和原理,也反映出作者对软件测试理论和实践的独到见解。本书的第1版在1995年出版,是ACM和IEEE计算机学会(www.swebok.org)联合编写的“软件工程知识体系”试用标准的主要引用文献之一,可见本书具有相当高的权威性。
在翻译过程中,除了对原文个别明显文字错误进行了相应更正外,我们力求忠实原文。但由于译者的知识水平和实际工作经验有限,不当之处在所难免,恳请读者批评指正。参加本书翻译、审校和其他辅助工作的还有:吴铃、张红旭、原小铃、李津津、王威、屈健、黄惠菊、韩文臣、朱军、杜蔚轩、解冀海、付程、孟海军、耿民等。

译  者
2003年3月

图书目录

译者序
第1版前言
前言
第一部分  数学背景
第1章  测试概述 2
1.1  基本定义 2
1.2  测试用例 3
1.3  通过维恩图理解测试 4
1.4  标识测试用例 6
1.4.1  功能性测试 6
1.4.2  结构性测试 7
1.4.3  功能性测试与结构性测试的比较 8
1.5  错误与缺陷分类 9
1.6  测试级别 11
1.7  参考文献 12
1.8  练习 12
第2章  举例 13
2.1  泛化的伪代码 13
2.2  三角形问题 15
2.2.1  问题陈述 15
2.2.2  讨论 15
2.2.3  传统实现 15
2.2.4  结构化实现 18
2.3  NextDate函数 20
2.3.1  问题陈述 20
2.3.2  讨论 20
2.3.3  实现 20
2.4  佣金问题 23
2.4.1  问题陈述 23
2.4.2  讨论 23
2.4.3  实现 24
2.5  SATM系统 24
2.5.1  问题陈述 25
2.5.2  讨论 27
2.6  货币转换器 27
2.7  土星牌挡风玻璃雨刷 28
2.8  参考文献 28
2.9  练习 28
第3章  测试人员的离散数学 30
3.1  集合论 30
3.1.1  集合成员关系 30
3.1.2  集合定义 31
3.1.3  空集 31
3.1.4  维恩图 32
3.1.5  集合操作 32
3.1.6  集合关系 34
3.1.7  子集划分 34
3.1.8  集合恒等式 35
3.2  函数 36
3.2.1  定义域与值域 36
3.2.2  函数类型 37
3.2.3  函数合成 38
3.3  关系 39
3.3.1  集合之间的关系 39
3.3.2  单个集合上的关系 40
3.4  命题逻辑 41
3.4.1  逻辑操作符 42
3.4.2  逻辑表达式 42
3.4.3  逻辑等价 43
3.5  概率论 44
3.6  参考文献 45
3.7  练习 45
第4章  测试人员的图论 47
4.1  图 47
4.1.1  节点的度 48
4.1.2  关联矩阵 48
4.1.3  相邻矩阵 49
4.1.4  路径 49
4.1.5  连接性 50
4.1.6  压缩图 51
4.1.7  圈数 51
4.2  有向图 52
4.2.1  内度与外度 53
4.2.2  节点的类型 53
4.2.3  有向图的相邻矩阵 54
4.2.4  路径与半路径 54
4.2.5  可到达性矩阵 55
4.2.6  n-连接性 55
4.2.7  强组件 56
4.3  用于测试的图 57
4.3.1  程序图 57
4.3.2  有限状态机 58
4.3.3  Petri网 60
4.3.4  事件驱动的Petri网 62
4.3.5  状态图 65
4.4  参考文献 67
4.5  练习 67
第二部分  功能性测试
第5章  边界值测试 70
5.1  边界值分析 70
5.1.1  归纳边界值分析 71
5.1.2  边界值分析的局限性 72
5.2  健壮性测试 73
5.3  最坏情况测试 73
5.4  特殊值测试 74
5.5  举例 75
5.5.1  三角形问题的测试用例 75
5.5.2  NextDate函数的测试用例 79
5.5.3  佣金问题的测试用例 82
5.6  随机测试 84
5.7  边界值测试的指导方针 85
5.8  练习 86
第6章  等价类测试 87
6.1  等价类 87
6.1.1  弱一般等价类测试 88
6.1.2  强一般等价类测试 88
6.1.3  弱健壮等价类测试 89
6.1.4  强健壮等价类测试 90
6.2  三角形问题的等价类测试用例 90
6.3  NextDate函数的等价类测试用例 92
6.4  佣金问题的等价类测试用例 95
6.4.1  输出值域等价类测试用例 96
6.4.2  输出值域等价类测试用例 97
6.5  指导方针和观察 97
6.6  参考文献 98
6.7  练习 98
第7章  基于决策表的测试 100
7.1  决策表 100
7.2  三角形问题的测试用例 104
7.3  NextDate函数测试用例 105
7.3.1  第一次尝试 105
7.3.2  第二次尝试 106
7.3.3  第三次尝试 108
7.4  佣金问题的测试用例 110
7.5  指导方针与观察 110
7.6  参考文献 111
7.7  练习 111
第8章  功能性测试回顾 112
8.1  测试工作量 112
8.2  测试效率 115
8.3  测试的有效性 115
8.4  指导方针 116
8.5  案例研究 117
第三部分  结构性测试
第9章  路径测试 124
9.1  DD-路径 126
9.2  测试覆盖指标 129
9.2.1  基于指标的测试 129
9.2.2  测试覆盖分析器 131
9.3  基路径测试 131
9.3.1  McCabe的基路径方法 132
9.3.2  关于McCabe基路径方法的观察 134
9.3.3  基本复杂度 136
9.4  指导方针与观察 138
9.5  参考文献 140
9.6  练习 141
第10章  数据流测试 143
10.1  定义/使用测试 143
10.1.1  举例 144
10.1.2  stocks的定义-使用路径 148
10.1.3  locks的定义-使用路径 148
10.1.4  totalLocks的定义-使用路径 149
10.1.5  sales的定义-使用路径 149
10.1.6  commission的定义-使用路径 150
10.1.7  定义-使用路径测试覆盖指标 151
10.2  基于程序片的测试 152
10.2.1  举例 154
10.2.2  风格与技术 157
10.3  指导方针与观察 158
10.4  参考文献 159
10.5  练习 159
第11章  结构性测试回顾 160
11.1  漏洞与冗余 160
11.2  用于方法评估的指标 162
11.3  重温案例研究 164
11.3.1  基于路径的测试 167
11.3.2  数据流测试 167
11.3.3  片测试 167
11.4  参考文献 167
11.5  练习 168
第四部分  集成与系统测试
第12章  测试层次 170
12.1  测试层次的传统观点 170
12.2  其他生命周期模型 171
12.2.1  瀑布模型的新模型 172
12.2.2  基于规格说明的生命周期模型 173
12.3  ASTM系统 175
12.4  将集成测试与系统测试分开 184
12.4.1  结构认识 185
12.4.2  行为认识 186
12.5  参考文献 186
第13章  集成测试 187
13.1  深入研究SATM系统 187
13.2  基于分解的集成 191
13.2.1  自顶向下集成 191
13.2.2  自底向上集成 192
13.2.3  三明治集成 193
13.2.4  优缺点 194
13.3  基于调用图的集成 194
13.3.1  成对集成 194
13.3.2  相邻集成 194
13.3.3  优缺点 196
13.4  基于路径的集成 197
13.4.1  新概念与扩展概念 197
13.4.2  SATM系统中的MM-路径 200
13.4.3  MM-路径复杂度 203
13.4.4  优缺点 204
13.5  案例研究 205
13.5.1  基于分解的集成 209
13.5.2  基于调用图的集成 209
13.5.3  基于MM-路径的集成 209
13.6  参考文献 210
13.7  练习 210
第14章  系统测试 211
14.1  线索 211
14.1.1  线索的可能性 212
14.1.2  线索定义 213
14.2  需求规格说明的基本概念 214
14.2.1  数据 215
14.2.2  行动 215
14.2.3  设备 215
14.2.4  事件 216
14.2.5  线索 216
14.2.6  基本概念之间的关系 216
14.2.7  采用基本概念建模 217
14.3  寻找线索 219
14.4  线索测试的结构策略 222
14.4.1  自底向上组织线索 223
14.4.2  节点与边覆盖指标 224
14.5  线索测试的功能策略 225
14.5.1  基于事件的线索测试 225
14.5.2  基于端口的线索测试 227
14.5.3  基于数据的线索测试 227
14.6  SATM测试线索 229
14.7  系统测试指导方针 233
14.7.1  伪结构系统测试 233
14.7.2  运行剖面 233
14.7.3  累进测试与回归测试 235
14.8  参考文献 236
14.9  练习 236
第15章  交互测试 237
15.1  交互的语境 237
15.2  交互的分类 239
15.2.1  单处理器中的静态交互 240
15.2.2  多处理器中的静态交互 241
15.2.3  单处理器中的动态交互 242
15.2.4  多处理器中的动态交互 247
15.3  交互、合成与确定性 254
15.4  客户-服务器测试 256
15.5  参考文献 257
15.6  练习 257
第五部分  面向对象的测试
第16章  面向对象的测试问题 260
16.1  面向对象测试的单元 260
16.2  合成与封装的涵义 261
16.3  继承的涵义 263
16.4  多态性的涵义 264
16.5  面向对象测试的层次 264
16.6  GUI测试 264
16.7  面向对象软件的数据流测试 265
16.8  第五部分采用的例子 265
16.8.1  面向对象的日历 265
16.8.2  货币转换应用程序 266
16.9  参考文献 270
16.10  练习 270
第17章  类测试 271
17.1  以方法为单元 271
17.1.1  o-oCalendar的伪代码 272
17.1.2  Date.increment的单元测试 276
17.2  以类为单元 277
17.2.1  windshieldWiper类的伪代码 277
17.2.2  windshieldWiper类的单元测试 278
第18章  面向对象的集成测试 282
18.1  集成测试的UML支持 282
18.2  面向对象软件的MM-路径 284
18.3  面向对象数据流集成测试框架 290
18.3.1  事件驱动和消息驱动的Petri网 291
18.3.2  由继承导出的数据流 292
18.3.3  由消息导出的数据流 292
18.3.4  分片 294
18.4  练习 294
18.5  参考文献 296
第19章  GUI测试 297
19.1  货币转换程序 297
19.2  货币转换程序的单元测试 301
19.3  货币转换程序的集成测试 302
19.4  货币转换程序的系统测试 303
19.5  练习 307
第20章  面向对象的系统测试 308
20.1  货币转换器的UML描述 308
20.1.1  问题陈述 308
20.1.2  系统功能 308
20.1.3  表示层 309
20.1.4  高层用例 309
20.1.5  基本用例 310
20.1.6  详细GUI定义 311
20.1.7  扩展基本用例 312
20.1.8  真实用例 315
20.2  基于UML的系统测试 315
20.3  基于“状态图”的系统测试 318
20.4  参考文献 318

教学资源推荐
作者: 厦门大学 杜朝运