本书全面地介绍了软件测试的基础知识和方法。通过问题、图表和案例研究,对软件测试数学问题和技术进行了深入的研究,并在例子中以更加通用的伪代码取代了过时的Pascal代码,从而使内容独立于具体的程序设计语言。本书还介绍了面向对象测试的内容,并完善了GUI测试内容。 本书是ACM与IEEE计算机学会“软件工程知识体系”主要引用文献,并是国际众多大学的教材。 本书适合作为相关专业高校教材,也可用于读者自学。
译者序\r\n第1版前言\r\n前言\r\n第一部分 数学背景\r\n 第一章 测试概述\r\n 第二章 举例\r\n 第三章 测试人员的离散数学\r\n 第四章 测试人员的图论\r\n第二部分 功能性测试\r\n 第五章 边界值测试\r\n 第六章 等价类测试\r\n 第七章 基于决策表的测试\r\n 第八章 功能性测试问题\r\n第三部分 结构性测试\r\n 第九章 路径测试\r\n 第十章 数据流测试\r\n 第十一章 结构性测试问题\r\n第四部分 集成与系统测试\r\n 第十二章 测试层次\r\n 第十三章 集成测试\r\n 第十四章 系统测试\r\n 第十五章 交互测试\r\n 第五部分 面向对象的测试\r\n 第十六章 面向对象的测试问题\r\n 第十七章 类测试\r\n 第十八章 面向对象的集成测试\r\n 第十章 GUI测试\r\n 第二十章 面向对象的系统测试\r\n
软件测试是软件质量保证的重要内容, 随着软件规模的不断扩大, 复杂程度的不断提高, 以及面向对象程序设计方法和工具的使用, 软件测试的难度也进一步提高, 测试质量更加难以度量.
本书的内容是以作者长期从事软件工程和软件测试研究生教学的讲义为基础, 而作者的学生大部分具有一定的程序设计实际经验. 作者的教学讲义经过长时间的教学实践, 广泛采纳了学生的意见, 既具有鲜明的教科书特点, 又具有很强的实践性, 既详细介绍了软件测试的基础理论和原理, 也反映出作者对软件测试理论和实践的独到见解. 本书的第1版在1995年出版, 是ACM和IEEE计算机学会(www.swebok.org)联合编写的“软件工程知识体系”试用标准的主要引用文献之一, 可见本书具有相当高的权威性.
在翻译过程中, 除了对原文个别明显文字错误进行了相应更正外, 我们力求忠实原文. 但由于译者的知识水平和实际工作经验有限, 不当之处在所难免, 恳请读者批评指正. 参加本书翻译. 审校和其他辅助工作的还有:吴铃. 张红旭. 原小铃. 李津津. 王威. 屈健. 黄惠菊. 韩文臣. 朱军. 杜蔚轩. 解冀海. 付程. 孟海军. 耿民等.
译 者
2003年3月
我们聚在会议室门口窃窃私语, 纷纷通过门上的小窗户向里观望. 会议室里, 一位新来的软件设计师正在会议桌上摊开源程序清单, 在水晶灯下小心翼翼地检查源代码, 并不时地在清单上用红笔勾画. 事后, 我的一个同事问这位设计师在会议室做什么. 他冷冷地说:“找我程序中的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月