|
|
|
|
移动端

软件测试基础教程 前言

《软件测试基础教程》本书基于实例讲述不同规模软件项目中的测试生成、选择、最小化和增强方面的最佳工程实践。全书还覆盖了基于数据流的测试充分性和基于变异的测试充分性,这些是可用的最有效的测试充分性准则。本节为前言部分。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-16 20:35

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


前言

欢迎您阅读《软件测试基础教程》!希望本书对您有所帮助!

文如其名,本书将向您讲述什么是软件测试。

对于那些准备从事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

【责任编辑:云霞 TEL:(010)68476606】

回书目      下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

PHP程序开发范例宝典

本书全面介绍了应用PHP进行网站开发的各种技术和技巧。全书分为20章,内容包括PHP的运行环境配置、表单及表单元素的应用、CSS与JavaScript...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊