软件测试基础教程
作者 : (美) Aditya P. Mathur 著
译者 : 王峰 郭长国 陈振华 等译
丛书名 : 计算机科学丛书
出版日期 : 2011-07-18
ISBN : 978-7-111-35188-7
定价 : 75.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 398
开本 : 16
原书名 : Foundations of Software Testing
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书全面介绍了软件测试的相关理论、测试方法、测试生成技术等内容。全书分为三个部分,第一部分是预备知识,介绍软件测试技术的相关术语等基础知识;第二部分介绍软件测试的生成技术,不仅包括基本的等价类划分、边界值分析、因果图、谓词测试等技术,还涵盖了从有穷状态模型自动生成测试的技、基于组合设计的测试生成技术,以及用于回归测试中测试选择、优先级排序、最小化的一些基本技术;第三部分介绍软件测试中既重要又广泛适用的理论,即通过测试充分性的度量来加强测试,包括基于控制流、数据流的代码覆盖标准,以及最有效的基于程序变异的测试充分性度量标准。每章的结尾都有参考文献注释和练习题,帮助读者深入体会软件测试的过程,并熟练掌握测试生成的方法。
 本书适合作为计算机、软件工程及相关专业软件测试课程的教材,也可作为软件测试技术人员的参考书。

图书特色

软件测试基础教程
Foundations of Software Testing
(美)Aditya P. Mathur普度大学 著
王峰 郭长国 陈振华 等译  王峰 宗建建 施寅生 校

本书以清晰易懂的方式、大量的实例和插图,描述了各种测试技术,使本书易学易用,非常方便学生理解和掌握书中的原理和技术。总之,这是软件测试领域一本非常出色的教材。
 —— Ashish Kundu,普度大学
作为讲授“软件测试和验证”课程的教师,我曾长期困惑于没有适合我的测试课程的教材,直到我看到了这本书,它内容全面、实例丰富、图文并茂、习题安排合理、参考文献和章末讨论利于读者进一步提高,并配有组织良好的PPT教学课件,因此,我认为本书是最好的软件测试教材之一。
—— Abdeslam En-nouaary教授,康考迪亚大学

本书基于实例讲述不同规模软件项目中的测试生成、选择、最小化和增强方面的最佳工程实践。全书还覆盖了基于数据流的测试充分性和基于变异的测试充分性,这些是可用的最有效的测试充分性准则。本书精选了由全世界数百位测试研究人员和实践人员发明和总结的测试知识及技术,采用通俗易懂的表述方式,使读者更容易理解和掌握。
测试生成、选择、优先排序和评估是测试过程中所有技术活动的基础。在此基础上合理部署各项组件,才能有效地测试不同类型的软件应用,包括面向对象系统、Web服务、图形用户接口、嵌入式系统以及与安全、性能和可靠性有关的各种属性。本书采用大量的实例和习题,循序渐进地介绍各种测试技术(包括有限状态模型、组合设计和回归测试的最小化等)。

作者简介
Aditya P. Mathur 普度大学计算机系主任、教授,印度BITS Pilani大学计算机系创始人之一。他是一位成果颇丰的学者,在国家期刊和会议上发表了100多篇论文。他的重要学术成果包括多语言计算机、软件测试的饱和效应、软件控制论、软件可靠性估算的新技术等。

图书前言

欢迎您阅读《软件测试基础教程》!希望本书对您有所帮助!
  文如其名,本书将向您讲述什么是软件测试。
  对于那些准备从事IT行业的学生来说,选择一门软件测试方面的课程是很重要的。这门课程应该为学生提供一个获取他们职业生涯中永远有用的知识的机会,这也是很重要的,因为他们的工作将涉及大量的软件应用系统、软件产品以及不断变化的外部环境。
  本书旨在介绍软件测试的知识,是该领域比较合适的教材。本书浓缩了全世界数以百计测试研究人员、一线测试人员的经验,并以易理解的方式呈现给读者。
  软件测试所有技术活动的基础,在于测试生成、选择、优先排序以及评价。合理应用这些基本技术,可以测试不同的软件应用系统,以及各种质量特性。应用系统涉及面向对象系统、Web服务软件、图形用户界面(GUI)、嵌入式系统等,而软件质量特性包括安全性、可靠性、性能、可维护性等。
  随着软件日益渗透到我们日常生活的方方面面,软件测试的重要性就愈加明显。不幸的是,现在只有少数几所大学有资格开设软件测试课程,而他们还在努力地为课程选择教材。所以,我希望本书有助于科研院所开展软件测试教学,对于那些已开设该门课程的院校,将不再为寻找一本合适的教材而苦恼了,或者不再简单地依赖于一些研究性出版物了。
  通过与商用软件开发单位中的测试人员和项目经理接触,我发现,虽然软件测试被认为是一项重要的工作,但软件测试人员经常抱怨与系统开发人员和设计人员相比他们没有得到应有的重视。我相信,提高软件测试的技术水平,将有利于开展高水平的软件测试工作,保证生产出高质量的软件,同时,也会给软件测试这种职业带来正面效应。我希望,一个学生即使掌握本书中知识的一半也能树立起他对软件测试作为一门学科应有的信心,就像编译原理、数据库、算法、计算机网络等成熟学科一样。
本书的读者对象
  很自然,有人会问:这本书是面向哪个层次的读者 根据我和一些使用过本书初稿的教师的经验,本书最适合高年级本科生和低年级研究生。虽然本书的表述风格是以学院或综合性大学在校学生为读者对象,但我相信它对一线测试人员和测试研究人员同样也是有用的。如果有耐心的话,一线测试人员会发现这本书提供了丰富的技术资源供他们学习,并能够应用到开发和测试工作中;测试研究人员很可能会发现本书是很好的参考资料。
本书涵盖的内容
  软件测试涉及很多活动。从大的方面看,这些活动似乎一样,但从小的方面看,它们却大相径庭。例如,大多数软件开发环境都能进行测试,但是对操作系统的测试与对心脏起搏器的测试却大不一样——一个是开放式系统,一个是嵌入式系统,需要采用不同的测试执行方式。
  软件测试活动中相似性和差异同时存在,这为作者以及教师出了个难题。一本书或者一门课程是应该专注于具体的软件开发环境以及它们完成不同测试活动的方式,还是应该专注于具体的测试技术而对环境轻描淡写?任何一种做法都会招来批评,并且会让学生要么与测试应用环境脱节,要么完全不了解测试理论。
  通过精心选择、组织书中的材料,我成功地解决了这个难题。本书分为三部分,主要讲述各种测试技术的基础理论。第一部分通过实例来介绍在不同的软件开发组织中软件测试过程的差别。第二部分介绍用预期的程序行为模型生成测试的技术。第三部分介绍测试充分性的度量与增强技术。
本书的组织
  本书由三部分组成。
  第一部分涵盖与测试相关的概念和预备知识。第1章,也是本部分唯一的一章,介绍软件测试中普遍涉及的术语和基本概念。一些采用该书早期初稿作为本科教材的教师通常在前两周或三周内讲完本章的内容。
  第二部分涵盖不同的测试生成技术。第2章介绍广泛适用于几乎所有软件应用系统的最基本的测试生成技术,包括等价类划分、边界值分析、因果图、谓词测试等。第3章介绍从有穷状态模型自动生成测试的技术,包括W、Wp以及UIO(Unique Input-Output)方法。有穷状态模型大量应用于诸如面向对象测试、安全性测试、GUI测试。第4章介绍基于组合设计的测试生成技术。一旦软件版本升级或进行广泛维护时,回归测试是所有软件开发过程的一个组成部分。第5章介绍用于回归测试中测试选择、优先级排序、最小化的一些基本技术。
  第三部分涵盖软件测试中既重要又广泛适用的理论和技术,即通过测试充分性的度量来加强测试。第6章介绍了多种基于控制流、数据流的代码覆盖标准,以及如何将它们应用于实际测试工作。第7章介绍最有效的基于程序变异的测试充分性度量标准。尽管几乎每一个软件开发组织都有一些测试充分性度量方法,但是通过掌握本部分的知识,确实能帮您把测试充分性度量与增强技术提升到一个新的高度,从而可以明显地提高软件的可靠性。
  一线测试人员常常抱怨,许多白盒测试的充分性标准在集成测试和系统测试时是不可用的,这种抱怨在大多数时候是正确的。本书讨论了一些最有效的测试充分性评价标准如何才能够、也应该应用于除单元测试之外的测试。当然,我的建议是以用商用工具进行测试充分性评价为前提的。
  本书每一章的结尾都有详细的参考文献注释。在引用与该章内容相关的文献时,我努力做到尽可能全面、综合。希望教师和学生会发现每章的参考文献注释那一节有益于他们了解本书之外更丰富的知识。
本书未涵盖的内容
  软件测试包含大量相关、交织的活动。一些活动是技术性的,一些是管理性的,而另一些活动只是些规程。技术性活动包括单元测试、子系统测试、集成测试、系统测试、回归测试中测试用例和测试预期结果的设计。管理性活动包括人员计划、成本预算和报告。计划活动包括测试计划、质量评估和人员分配。最好将如人员分配之类的计划活动划分为管理性的,而另一些计划活动,如测试计划,是与测试用例设计等技术性活动交织在一起的。
  一些测试活动是与具体的产品相关的。例如,对设备驱动器的测试常常需要开发设备模拟器,而设备模拟器包括:测试心脏起搏器时用的心脏模拟器、测试I/O驱动器时用的USB端口模拟器、测试飞机升空噪音控制软件时用的飞机升空噪音模拟器。这些活动对测试的有效性和自动化极其重要,因而常常需要做大量的开发工作。例如,开发一个设备模拟器并对其进行测试,这既是开发活动,又是测试活动。本书中描述的测试生成和评价技术适用于每一个与具体产品相关的测试活动,当然,这些测试活动只是通过实例来说明的,并不作详细描述,我的建议是,学生最好通过工业部门赞助的实践项目来学习这些知识。
给教师的建议
  软件测试课程涵盖的主题有很多种,我尽量使本书涵盖大部分最重要的主题。表1、表2分别给出了完全基于本书的本科生、研究生测试课程教学大纲。表1典型的本科生软件测试课程
教学周 教 学 内 容 本 书 章 节
第1周 课程目标与目的,实习项目安排,测试术语和概念 第1章
第2周 测试过程与管理 第1章
第3周 软件错误、软件故障、软件失效 第1章
第4周 边界值分析,等价类划分,判定表 第2章
第5、6周 基于谓词的测试生成 第2章
第7周 项目中期汇报
复习,期中考试
第8周 测试充分性:控制流 第6章
第9周 测试充分性:数据流 第6章
第10、11周 测试充分性:程序变异 第7章
第12、13、14周 特殊专题,如面向对象测试、安全性测试 另一卷
第15、16周 复习,项目总结汇报
第17周 期末考试

表2典型的研究生软件测试课程
教学周 教 学 内 容 本 书 章 节
第1周 课程目标与目的,测试术语和概念 第1章
第2周 测试过程与管理
软件错误、软件故障、软件失效 第1章
第3周 边界值分析,等价类划分,判定表 第2章
第4周 基于谓词的测试生成 第2章
第5、6周 根据有穷状态模型设计测试 第3章
第7、8周 组合设计
复习,期中考试 第4章
第9周 测试充分性:控制流 第6章
第10周 测试充分性:数据流 第6章
第11、12周 测试充分性:程序变异 第7章
第13、14周 特殊专题,如实时系统测试和安全性测试 另一卷
第15、16周 复习,研究工作汇报
第17周 期末考试
典型的本科生软件测试课程
  我们计划一学期的本科生软件测试课程为3个学分,每周2次课,每次课50分钟,总共有17周的时间用于上课、考试和项目汇报。这门课程每周有2小时的实习,要求学生3~4人组成一个小组共同完成一个实习项目,最后提交一份研究报告和一个测试工具原型。每两周对学生进行一次测验,需在4~6小时之内完成。
  表3是推荐的一个评价计划。精心设计的测验是本课程的重要内容。每次测验向学生提供一个采用测试工具完成测试任务的机会。例如,某个测验的目的可能就是让学生了解或熟悉测试执行工具JUnit或Web服务性能测试工具JMeter。教师可以根据前面完成的教学内容来设计测验内容。在学校的测试实验室中,有大量的商用和开源测试工具供学生使用。表3推荐的本科生、研究生软件测试课程评价要素
学 生 类 别 评 价 要 素 权重 持 续 时 间
本科生 期中考试 15分 90分钟
期末考试 25分 120分钟
课堂回答问题 10分 短时间
测验 10分 10次
测验实习项目 40分 一学期
研究生 期中考试 20分 90分钟
期末考试 30分 120分钟
测验 10分 5次
测验研究/实习项目 40分 一学期
典型的研究生软件测试课程
  我们计划一学期的研究生软件测试课程为3个学分。学生学习这门课时不必先修上面介绍的本科阶段的软件测试课程。除了考试之外,还要求学生阅读最新的研究材料并作读书报告。通过不定期的测验来使学生掌握测试工具。
测试工具
  有大量的商用、免费或开源工具可供使用。表4列出了一小部分这样的工具。表4本科生、研究生软件测试课程中典型的测试工具
目的 工具 来源
组合设计 AETG
代码覆盖度量 TestManagerTM JUnit CodeTest Suds
缺陷跟踪 Bugzilla FogBugzGUI
测试 WebCoder JfcUnit
变异测试 muJava Proteum
性能测试 Performance Tester JMeter
与时俱进
  我希望本书能够随着时间的推移不断地完善。本书涵盖技术的任何进展,任何新出现的测试技术都将出现在本书的后续版本中。由我本人发现的或由读者指出的任何错误都将得到纠正。鼓励读者访问以下网站,以便获取有关本书的最新信息:
wwwpearsonedcoin/adityapmathur
  虽然本书涵盖了软件测试的重要知识,但由于篇幅的限制,仍有一些先进技术未被包含进来。我计划再编写一本书,涵盖这些先进的测试技术,供那些想了解更多软件测试知识的学生以及业界的专业人士使用。
现金奖励
  以前,我对仔细阅读本书并指出书中错误的学生进行现金奖励。现在,仍然采用这种方法,力求不断提高本书的质量。
致谢
  在本书的写作过程中,很多人给予了重要帮助。对于那些在书中本应列出而未列出的人名,我在此深表歉意,虽然这种遗漏纯属偶然。
  首先感谢Rich DeMillo,是他将我引入软件测试这个领域,并资助了我早期的研究工作。Rich指定的文献对我获取软件测试知识、增强对软件测试的理解很有帮助。衷心感谢Bob Horgan,是他影响了并支持着我对软件测试、软件可靠性以及代码覆盖重要性之间关系的理解。Bob向我免费提供了测试工具χSuds的早期和后期版本。我一直认为χSuds是到目前为止可用的、最好的测试充分性评价与增强工具。诚挚地感谢Ronnie Martin,是他花费了大量时间修改我的技术报告。
  热情地感谢Donald Knuth以及他的团队,他们向我提供了TEX中错误的详细信息,并与我共享了TEX的早期版本。感谢Hiralal Agrawal耐心地回答我关于动态切片的问题。感谢Farokh Bastani、Fevzi Belli、Jim Berger、蔡开元、Ram Chillarege、Sid Dalal、Raymond DeCarlo、Marcio Delamaro、Phyllis Frankl、Arif Ghafoor、Amrit Goel、Dick Hamlet、Mats Heimdahl、Michael A. Hennell、Bill Howden、Ashish Jain、Pankaj Jalote、Rick Karcick、Bogdan Korel、Richard Lipton、Yashwant Malaiya、Josè Maldonado、Simanta Mitra、John Musa、Jeff Offutt、Tom Ostrand、Amit Paradkar、Alberto Pasquini、Ray Paul、C. V. Ramamoorthy、Vernon Rego、Nozer Singpurwalla、Mary-Lou Soffa、Rajesh Subramanian、Kishor Trivedi、JeffereyVoas、Mladen Vouk、Elaine Weyuker、Lee White和Martin Woodward,与他们的讨论及其提供的建设性意见改正了我许多关于软件测试和可靠性(甚至日常生活)原本错误、愚蠢的想法。
  感谢Jim Mapel、Marc Loos以及其他几位在Boston Scientific公司(其前身是Guidant公司)工作的工程师,通过他们,我接触到了为确保心脏医疗设备高度可靠的复杂测试过程。感谢Klaus Diaconu、Mario Garzia、Abdelsalam Heddaya、Jawad Khaki、Nar Ganapathy、Adam Shapiro、Peter Shier、Robin Smith、Amitabh Srivastava以及许多在微软Widows可靠性和设备驱动器团队的工程师,通过他们,我了解了微软为确保向全球成千上万用户提供高可靠的操作系统而进行的错综复杂的测试过程以及采用到的工具。
  感谢本书的匿名审阅者所付出的辛苦劳动以及提出的有益建议。感谢Muhammad Naeem Ayyaz、Abdeslam En-Nouaary、Joao Cangussu和Eric Wong,他们修改过本书的早期书稿以及用于本科生和研究生教学的相关材料。课堂上老师和学生的反馈意见对本书的修改起了重要作用。
  感谢Emine Gokce Aydal、Christine Ayers、Jordan Fleming、Nwokedi Idika、K. Jayaram、Yuanlu Jiang、Ashish Kundu、Yu Lei、JungChi Lin、Shuo Lu、Ammar Masood、Kevin McCarthy、Roman Joel Pacheco、Tu Peng、Van Phan、James Roberts、Chetak Sirsat、Kevin Smith、Travis Steel、Yunlin Xu、Il-Chul Yoon、Hiroshi Yamauchi和Brandon Wuest,他们仔细阅读了本书早期书稿的有关章节,发现并纠正了其中的错误。我不会忘记David Boardman、Joo Cangussu、Mei-Hwa Chen、Byoungju Choi、Praerit Garg、Sudipto Ghosh、Neelam Gupta、Vivek Khandelwal、Edward Krauser、Saileshwar Krishnamurthy、Tsanchi Li、Pietro Michielan、Scott Miller、Manuela Schiona、Baskar Sridharan和Brandon Wuest与我在软件测试研究中的耐心合作。
  感谢T. S. K. V. Iyer教授,他总是不停地问我本书的写作是否完成,这成为了我写完本书的巨大动力。  衷心感谢Raymond Miller、Nancy Griffith、Bill Griffith和Pranas Zunde在我刚到一个新国家时给予的热情欢迎和帮助。感谢John Rice和Elias Houstis在实验设施和设备方面提供的帮助,很怀念与他们在一起的精彩共事岁月。感谢Susanne Hambrusch和Ahmed Sameh帮我在普渡大学开设软件工程和软件测试课程。感谢普渡大学计算机系的教职员工帮我安装用于本科生和研究生教学的实验设备和软件。感谢Patricia Minniear的辛勤劳动,是她及时拷贝本书以便学生使用。
  衷心感谢S. Venkateswaran教授、L. K. Maheshwari教授以及位于Pilani的BITS计算机系的教职员工,他们在我学术访问期间为我营造了友好融洽的工作环境。感谢我亲爱的朋友Mohan Lal及其家人多年来给我提供的帮助,尤其是我在Pilani期间,在那里我完成了本书的部分章节。感谢BITS 招待所(VFAST)的全体雇员,他们的热情和友好对本书的质量产生了积极影响。
  感谢Hanna Lena Kovenock为本书封面设计所作的贡献,她花了大量时间反复设计本书封面的卡通图案,描述了动物世界中的“chair development”团队。Hanna是个伟大的艺术家,能得到她的帮助,我很荣幸。
  感谢我的朋友Ranjit Gulrajani、Pundi Narasimhan以及他们的家人多年来给我的精神支持。
  感谢我的父母和我的兄弟姐妹,他们坚定的爱和支持才是完成本书写作的根本。感谢我的孩子Gitanjali、Ravishankar和女婿Abhishek Gangwal,他们总是问“什么时候这本书才能印刷啊?”
  感谢我的科利狗Raja和Shaan,它们陪我度过了宝贵的休息时光。
  最后,但是最重要的,我要将最衷心的感谢献给我的爱妻Jyoti Iyer Mather,感谢她对我无以撼动的爱和支持。

Aditya P Mathur

上架指导

计算机\软件工程

封底文字

软件测试基础教程
本书以清晰易懂的方式、大量的实例和插图,描述了各种测试技术,使本书易学易用,非常方便学生理解和掌握书中的原理和技术。总之,这是软件测试领域一本非常出色的教材。
——Ashish Kundu,普度大学
作为讲授“软件测试和验证”课程的教师,我曾长期困惑于没有适合我的测试课程的教材,直到我看到了这本书,它内容全面、实例丰富、图文并茂、习题安排合理、参考文献和章末讨论利于读者进一步提高,并配有组织良好的PPT教学课件,因此,我认为本书是最好的软件测试教材之一。
——Abdeslam En-nouaary教授,康考迪亚大学

本书基于实例讲述不同规模软件项目中的测试生成、选择、最小化和增强方面的最佳工程实践。全书还覆盖了基于数据流的测试充分性和基于变异的测试充分性,这些是可用的最有效的测试充分性准则。本书精选了由全世界数百位测试研究人员和实践人员发明和总结的测试知识及技术,采用通俗易懂的表述方式,使读者更容易理解和掌握。
测试生成、选择、优先排序和评估是测试过程中所有技术活动的基础。在此基础上合理部署各项组件,才能有效地测试不同类型的软件应用,包括面向对象系统、Web服务、图形用户接口、嵌入式系统以及与安全、性能和可靠性有关的各种属性。本书采用大量的实例和习题,循序渐进地介绍各种测试技术(包括有限状态模型、组合设计和回归测试的最小化等)。

作者简介

(美) Aditya P. Mathur 著:作者简介 Aditya P. Mathur 普度大学计算机系主任、教授,印度BITS Pilani大学计算机系创始人之一。他是一位成果颇丰的学者,在国家期刊和会议上发表了100多篇论文。他的重要学术成果包括多语言计算机、软件测试的饱和效应、软件控制论、软件可靠性估算的新技术等。

译者简介

王峰 郭长国 陈振华 等译:暂无简介

译者序

本书的翻译、审校工作基本结束,三年半来一直压在心头的石头终于可以落地了。
  2007年12月24日下午,我应温莉芳编审、姚蕾编辑之约,前往机械工业出版社华章分社讨论本书的翻译工作。首次浏览原版书目录,顿感又是一本难得的好书,很是兴奋,当时就答应下来。
  2008年元旦过后,开始组建翻译小组并进行分工。由我本人负责第一部分、陈振华负责第二部分、郭长国负责第三部分,并由我负责全书的审校和统稿。翻译工作自当年春节后正式开始。
  陈振华于2008年4月初提交了第2章24节之前各节的译稿。但天有不测风云,就在我返回他修改稿之后不久,陈振华因公出差不幸在湖北省襄樊市发生特大车祸,严重受伤,后辗转襄樊、北京、天津多家医院,身体每况愈下,自2008年9月底昏迷以后到现在尚未苏醒过来。原由他负责的第二部分翻译工作改由郭长国和我共同承担。在本书即将出版之际,我们衷心祝愿陈振华能够早日苏醒过来,最终康复。
  本书翻译工作异常艰辛。第一、没有时间,所有的翻译工作皆在业余时间完成。因本职工作太忙,很少有空余时间,下班之后也没多少精力再去翻译。但既然答应承担翻译任务,心里就放不下。因此,很多次外出开会、出差,甚至在“512”地震之后回灾区老家,我都在行囊里背着原版书和电脑,我也明知在外时不可能翻译,只是出于对翻译任务的尊重,以求得心里的安慰。由于没有整块的时间翻译,很多内容是“炒夹生饭”,刚一读懂就放下,过几天甚至一两个月再来,反反复复,第7章个别小节内容审校不下五次。第二、原版书排版质量太差。初步统计,原版书中明显错误不下200处。为了保证图书质量,我们花费了很多时间纠正原版书中出现的错误,尤其是一些出现在算法和数学公式中的错误,必须推导验证才能排除。特别是第3章,我们根据自己对算法的理解,增补了大量测试用例。翻译早期,我就原书第2章的错误与作者Aditya PMathur教授交流过,他全部接受,称我们的纠错工作为excellent。
  关于本书的内容,读者一看目录就清楚了。需要强调的是,这是一本到目前为止我本人读过的关于测试技术的最全面、最深入的书。我以前曾翻译过两本关于软件测试的书,Cem Kanner的Testing Computer Software第2版和Glenford J Myers的The Art of Software Testing第2版,前者偏重测试技术管理,后者就是一本测试普及小册子。我也常去北京的新华书店,浏览有关软件测试的图书,包括翻译书和原创书,估计不下30种。我可以负责任地讲,尽管不敢夸口说本书是关于测试技术最好的书,但只要你读过本书之后,很多其他的书真的没必要看了。虽然看完书中的内容之后不可能马上就学会软件测试,但这些知识却是作为一个软件测试(甚至是软件)从业人员必须掌握的。等价类划分、边界值分析、因果图分析、有穷状态机、组合设计、程序切片、控制流、数据流、程序变异等,我们在软件工程课程中都能学到这些知识,但如何应用于软件测试,还是本书第一次系统地做了介绍。尤其是其后面所列的500多篇参考文献,几乎囊括了到2006年所有有价值的软件测试文献,对从事软件测试研究的人员来说,如获至宝。
  本书由王峰、郭长国、陈振华翻译,其中王峰主要负责前言、致谢、第1章、第2章25节以后各节、第3章、封底;郭长国负责第4~7章;陈振华负责第2章24节之前各节。由王峰、宗建建、施寅生审校,其中宗建建负责第5章第一、第二次审校;施寅生负责第4章第一次审校;王峰负责第2章、第4章第二次、第5章第三次、第6章、第7章审校。郭长国校读了前言、致谢、第1~4章和第6章,施寅生校读了第7章7107节以后各节。此外,参加翻译工作的还有赵志强、郑彦兴、李海龙、齐璇、齐超、苏晓艳、喻琳、衣双辉、房友园、谷天阳、刘宇、包阳、李冬红、杨广华、战茅、张鲁靖,全书由王峰统稿。
  虽然我们尽力纠正原版中的错误,但书中可能仍然存在疏漏与错误,诚恳地希望各位读者批评指正。

王峰    
2011年6月17日晚于北京

  本书翻译工作得到国家863计划课题2009AA01Z146的资助,特此感谢。

图书目录

出版者的话
译者序
前言
第一部分预备知识
第1章软件测试的基本知识
11人、错误和测试
111错误、故障和失效
112测试自动化
113开发人员与测试人员是两种角色
12软件质量
121软件质量特性
122软件可靠性
13需求、运行结果和正确性
131输入域与软件正确性
132有效输入与无效输入
14正确性与可靠性
141正确性
142可靠性
143软件使用与操作剖面
15测试与调试
151制订测试计划
152构造测试数据
153运行被测软件
154指定被测软件的行为
155评价被测软件运行结果的正确性
156测试预言的构造
16测试度量
161组织级度量
162项目级度量
163过程级度量
164产品级度量:通用度量
165产品级度量:面向对象软件
166进度跟踪与趋势
167静态度量与动态度量
168可测试性
17软件测试与硬件测试
18测试与验证
19缺陷管理
110执行历史
111测试生成策略
112静态测试
1121走查
1122审查
1123在静态测试中使用静态代码分析工具
1124软件复杂性与静态测试
113基于模型的测试与模型检测
114控制流图
1141基本块
1142流图的定义与图形表示
1143路径
115决定者与后决定者
116程序依赖图
1161数据依赖性
1162控制依赖性
117字符串、语言与正则表达式
118测试的类型
1181分类因子C1:测试生成的依据
1182分类因子C2:软件生命周期阶段
1183分类因子C3:目标导向的测试
1184分类因子C4:被测软件制品
1185分类因子C5:测试过程模型
119饱和效应
1191信赖度与真实可靠性
1192饱和区间
1193信赖度的错觉
1194降低偏差Δ
1195对测试过程的影响
小结
参考文献注释
练习
 第二部分测试生成
第2章基于需求的测试生成
21引言
22测试用例选择问题
23等价类划分
231缺陷定位
232关系与等价类划分
233变量的等价类
234一元化分与多元化分
235等价类划分的完整过程
236基于等价类的测试用例设计
237GUI设计与等价类
24边界值分析
25类别划分法
26因果图分析
261因果图中的基本符号
262创建因果图
263从因果图生成判定表
264避免组合爆炸的启发式方法
265从判定表生成测试用例
27基于谓词的测试生成
271谓词和布尔表达式
272谓词测试中的故障模型
273谓词约束
274谓词测试准则
275生成BOR、BRO和BRE充分性测试用例
276因果图与谓词测试
277故障传播
278谓词测试实践
小结
参考文献注释
练习
第3章基于有穷状态模型的测试生成
31软件设计与测试
32有穷状态机
321用输入序列激活FSM
322转换函数和输出函数的表格表示
323FSM 的特征
33符合性测试
331重置输入
332测试的难题
34故障模型
341FSM的变体
342故障覆盖率
35特征集
351k等价划分的构造
352特征集的构造
353等价集
36W方法
361假设
362最大状态数
363转换覆盖集的计算
364构造集合Z
365导出测试集
366采用W方法测试
367错误检测过程
37部分W方法
371采用m=n的Wp方法测试
372采用m>n的Wp方法测试
38UIO串方法
381假设
382UIO串
383核心行为与非核心行为
384生成UIO串
385区分符号
386测试生成
387测试优化
388故障检测
39自动机理论与基于控制流的技术
391n路径覆盖
392自动机理论方法的比较
小结
参考文献注释
练习
第4章基于组合设计的测试生成技术
41组合设计
411测试配置和测试集
412输入空间与配置空间建模
42组合测试设计过程
43故障模型
44拉丁方阵
45相互正交的拉丁方阵
46对偶设计:二值参数
47对偶设计:多值参数
48正交矩阵
49覆盖矩阵与混合取值覆盖矩阵
491覆盖矩阵
492混合取值覆盖矩阵
410强度大于2的矩阵
411生成覆盖矩阵
小结
参考文献注释
练习
第5章回归测试的选择、最小化和优先级排序
51什么是回归测试
52回归测试过程
521测试重确认、选择、最小化和优先级排序
522测试准备
523测试排序
524测试执行
525输出比较
53回归测试选择问题
54回归测试选择方法集
541全测试策略
542随机选择测试
543选择遍历修改测试用例
544测试最小化
545测试优先级排序
55利用执行轨迹进行回归测试的选择
551获取执行轨迹
552选择回归测试用例
553处理函数调用
554处理声明中的变化
56利用动态切片进行回归测试的选择
561动态切片
562计算动态切片
563选择测试用例
564潜在依赖
565计算相关切片
566语句的添加和删除
567标识切片变量
568简化的动态依赖图
57测试选择算法的可扩展性
58测试最小化
581集合覆盖问题
582测试最小化过程
59测试优先级排序
510回归测试工具
小结
参考文献注释
练习
第三部分测试充分性评价与测试增强
第6章基于控制流和数据流的测试充分性评价
61测试充分性基础
611什么是测试充分性
612测试充分性的度量
613通过度量充分性来增强测试
614无效性和测试充分性
615错误检测和测试增强
616单次和多次执行
62基于控制流的测试充分性准则
621语句覆盖和块覆盖
622条件和判定
623判定覆盖
624条件覆盖
625条件/判定覆盖
626多重条件覆盖
627线性代码序列和跳转覆盖
628改进的条件/判定覆盖
629复合条件的MC/DC充分测试
6210MC/DC覆盖的定义
6211最小MC/DC测试
6212错误检测和MC/DC充分性
6213短路计算和无效性
6214测试集对需求的追踪
63数据流概念
631定义和使用
632cuse和puse
633全局和局部的定义与使用
634数据流图
635defclear路径
636defuse对
637defuse链
638优化
639数据上下文和有序的数据上下文
64基于数据流的测试充分性准则
641cuse覆盖
642puse覆盖
643alluse覆盖
644kdr链覆盖
645使用kdr链覆盖
646无效的cuse和puse
647上下文覆盖
65控制流与数据流
66包含关系
67结构性测试与功能性测试
68覆盖度量的可量测性
小结
参考文献注释
练习
第7章基于程序变异的测试充分性评价
71导引
72变异和变体
721一阶变体与高阶变体
722变体的语法与语义
723强变异和弱变异
724为什么要变异
73用变异技术进行测试评价
731测试充分性评价的步骤
732测试充分性评价的替代过程
733被区分的变体与被杀掉的变体
734区分变体的条件
74变异算子
741算子类型
742变异算子的语言依赖性
75变异算子的设计
751评判变异算子优良的准则
752指导准则
76变异测试的基本原则
761称职程序员假设
762耦合效应
77等价变体
78通过变异进行错误检测
79变体的类型
710C语言的变异算子
7101什么没有被变异
7102线性化
7103执行序列
7104执行序列的影响
7105全局标识符集和局部标识符集
7106全局引用集与局部引用集
7107程序常量变异
7108运算符变异
7109语句变异
71010程序变量变异
711Java语言变异算子
7111传统变异算子
7112继承
7113多态与动态绑定
7114方法重载
7115Java特有的变异算子
712综合比较:Fortran 77、C与Java变异算子
713变异测试工具
714低成本变异测试
7141划分变异函数的优先级
7142选择使用部分变异算子
小结
参考文献注释
练习

教学资源推荐
作者: Douglas E. Comer
作者: 郭晓平 朱鸣华 编著
作者: [印] 佩瑟鲁·拉吉(Pethuru Raj) 阿诺帕马·拉曼(Anupama Raman) 德维亚·纳加拉杰(Dhivya Nagaraj) 悉达多·杜格拉拉 (Siddhartha Duggirala) 著
参考读物推荐