本书以两个典型项目为背景,按实际项目进行的先后次序,循序渐进地阐述了软件测试的全过程。从软件项目启动、需求评审、测试计划开始,然后深入到测试用例设计、测试工具选择、脚本开发、功能测试和系统测试等不同阶段,生动地演绎了必需而实用的测试方法、技术和实施技巧。本书还系统地介绍了测试管理的各个层次及其细节,包括测试策略制定、风险控制、缺陷跟踪和分析、测试管理系统的应用等。最后,本书呈现了软件测试成熟度模型和对软件测试的总结和思考,帮助读者了解软件测试所面对的现实问题和应恪守的原则、领会测试方法的应用之道和品味测试的最佳实践。\r\n 本书是作者长期从事软件测试工作的经验与智慧的结晶,是软件测试工程师的良师益友。本书也可作为软件开发人员、项目经理等的参考书,更适合用作软件测试的培训教材或教学用书。
引子\r\n第1章 测试项目启动\r\n 1.1 了解软件的质量需求\r\n 1.1.1 软件产品的质量需求\r\n 1.1.2 软件质量的对立面——软件缺陷\r\n 1.1.3 软件缺陷产生的原因\r\n 1.1.4 究竟什么是软件测试\r\n 1.1.5 软件测试的目标\r\n 1.2 选定测试组长\r\n 1.2.1 测试过程和开发过程的关系\r\n 1.2.2 测试组长的人选\r\n 1.2.3 测试团队在项目中的位置\r\n 1.3 掌控项目背景\r\n 1.3.1 软件测试的项目要素\r\n l.3.2 两个典型项目的介绍\r\n 1.3.3 Google Talk客户端功能简介\r\n 1.3.4 Wleb应用——雅虎日历功能介绍\r\n 1.4 制定测试规范\r\n 1.5 小结\r\n第2章 测试计划\r\n 2.1 产品需求文档审查和评审\r\n 2.1.1 需求评审的重要性\r\n 2.1.2 测试人员在需求评审中的角色\r\n 2.1.3 需求评审的标准\r\n 2.2 项目的测试需求和任务\r\n 2.2.1 确定软件功能测试需求\r\n 2.2.2 非功能性的系统测试需求\r\n 2.2.3 软件即服务的测试需求\r\n 2.2.4 各个阶段的测试任务\r\n 2.3 测试范围分析和工作量估计\r\n 2.3.1 功能测试范围的分析\r\n 2.3.2 系统测试范围的分析\r\n 2.3.3 工作量的估计\r\n 2.3.4 工作分解结构表方法\r\n 2.3.5 工作量估计的实例\r\n 2.4 测试资源需求和团队组建\r\n 2.4.1 测试资源需求\r\n 2.4.2 团队组建\r\n 2.4.3 培训\r\n 2.5 测试里程碑和进度安排\r\n 2.6 测试风险分析\r\n 2.7 制定有效的测试策略\r\n 2.8 完整生成测试计划书\r\n 2.9 小结\r\n第3章 设计验证\r\n 3.1 系统架构的审查\r\n 3.1.l 系统架构选型的确认\r\n 3.1.2 软件设计评审标准\r\n 3.1.3 系统组件设计的审查\r\n 3.2 产品设计规格说明书的复审\r\n 3.2.1 重视设计规格说明书的审查\r\n 3.2.2 设计规格说明书的多层次审查\r\n 3.2.3 界面设计的评审\r\n 3.2.4 验证过程与确认过程\r\n……\r\n第4章 测试设计\r\n第5章 测试工具选择和脚本开发\r\n第6章 测试和编程的交互\r\n第7章 功能测试的执行\r\n第8章 国际化和本地化测试的执行\r\n第9章 系统测试的执行\r\n第10章 后续测试\r\n第11章 测试的跟踪管理\r\n第12章 总结和思考\r\n附录A 软件测试全景图\r\n附录B 完整的项目检查表\r\n附录C 测试计划(GB8567-88)\r\n附录D 完整的测试工具列表\r\n附录E 代码审查的示范性列表\r\n附录F 软件测试术语中英文对照\r\n附录G 参考书目和资源
推荐序
翻阅少民的这部新作时,不禁让我想起一位好朋友前几天提到的《叙事谣曲》中“只弯一次腰”的故事:有一次,耶稣带着他的门徒彼得出门远行,在路上发现了一块破烂的马蹄铁,耶稣就让彼得拣起来,不料彼得懒得弯腰,假装没有听见。耶稣没说什么,自己弯腰拣起马蹄铁,用它在铁匠那里换了几文钱,并用这些钱买了十几颗樱桃。出了城,两人继续向前走,沿途都是茫茫的荒野,看不到人烟,也找不到水源。耶稣猜到彼得渴得厉害,就让藏在袖子里的樱桃悄悄掉出一颗。彼得一见,赶紧捡起来吃掉。耶稣边走边掉,彼得也就狼狈地弯了十七八次腰。于是耶稣对他说:“要是你刚才弯一次腰,就不会在后来没完没了地弯腰了。小事不干,就将在更多的小事上操劳。”
这个故事,不同的人有不同的感悟。作为一个软件行业的多年从业者,我很自然就联想到了软件开发过程。软件测试(具体到每一个测试用例的实施)正是在庞大复杂的软件产品开发过程中确保软件产品质量的“小事”。软件测试工作繁杂、琐碎又耗时,甚至有时吃力不讨好,这使得许多软件从业者对其不够重视;好多技术人员热衷于编码而不愿从事测试工作这样的“小事”;有些公司认为开发能出成果而测试可有可无,因而非常重视开发但不重视测试;许多国内软件企业存在着漠视测试过程、测试时间不充分、测试计划不细致、测试软硬件资源不足等问题,从而在软件质量控制上存在相当大的问题,以致项目延迟甚至失败。
在软件产业发展的几十年中,软件测试已逐步渗透到各个领域,成为越来越不可或缺的技术成分。例如,以前被认为距离软件技术比较远的汽车工业,现在已把高级车制造费用的20%~25%投入到电子设备与软件系统上。由此看来,软件的品质已成为人们日益关注的重中之重。如何找到一种全面的分析方法,来检测软件开发过程中不同阶段的结果,以便尽可能早地系统地保证或提高软件产品的质量和可靠性,从而减少后期“弯腰”的必要性与次数,已成为影响软件企业生产力与生产效率的关键问题。
可喜的是,越来越多的软件公司和管理技术人员在工作中将更多的时间和资源投向了测试方面。很多优秀企业中开发与测试的人员比例达到了3:1或2:1,许多顶尖的技术人员在从事质量控制和软件测试工作。而国内这几年软件测试人员的短缺和招聘难度的提高从反面证明了软件测试正越来越得到重视。
近年来,软件产业发展正从产品模式向服务模式(Software as a Service,SaaS)转变。 在过去的多年中,WebEx公司一直处于这一浪潮的领导地位。WebEx提供的网络会议服务(Web Conference)被称为改变人们工作方式的技术革命。朱少民先生与他带领的团队非常自豪而荣幸地参与了WebEx产品开发的整个过程,在这个过程中他们夯实了软件测试的理论基础,并积累了丰富的实战经验。
少民从事高校教育及软件开发测试工作多年,并且在美国硅谷工作两年,其经历是很好的理论与实践相结合的典范。与少民共事多年,了解他在软件测试领域的积累,从开始时采用简单、初级的测试方法,一步步发展到今天系统、科学的软件质量管理体系;从手工测试向自动化测试过渡;从几个人的测试小组到几百名测试工程师的大规模团队。现在,是到了将过去的经验教训作一番总结,以其亲身经历为业界同仁指点软件测试的规律与介绍成功实践经验的时候了。
这部《全程软件测试》是少民与其工作团队多年来的经验积累,其中一些观点与见解已经成为WebEx公司的基本工作准则,对软件研发领域有着重要的实质性贡献。本书通过实例全面描述了软件测试的整个过程,覆盖了测试管理的各个重要方面。对测试管理的各个层次和环节做了系统的介绍,包括测试策略制定、风险控制、缺陷跟踪和分析、测试管理系统的应用等,并且更进一步对如何执行本地化测试和国际化测试进行了阐述。作者重点聚焦在实践性上,从软件测试项目启动、测试计划开始,深入到测试用例设计、测试工具选择、脚本开发,以及功能测试和系统测试等各个步骤,并对它们都作了详细阐述。
让人印象深刻的是本书对软件测试工作中几个看似简单、实际上非常关键的问题作了详细的说明。例如就开发团队模式,作者介绍了以开发为核心,以项目经理为核心,以及“三国鼎立”(以项目经理、开发组长、测试组长为核心)的模式。而“三国鼎立”的测试团队具有独立、权威性地位的概念也是工作经验的总结。相信读者会从实战中体会到作者的深刻用意。
在探索高效软件测试与软件开发的过程中,本书覆盖了全面的理论分析和详细的实战阐述,对任何从事软件测试的人员和软件开发人员,以及软件工程相关专业的高校师生,都具有重要的参考价值。希望书中的一些真知灼见对广大读者有所裨益。
李钦敏(Jim Li)
WebEx总部工程技术及中国研发高级总监
2007年6月于美国硅谷
前言
2000年刚建立测试团队时,测试人员和开发人员是一种对立的关系,开发人员觉得软件测试是挑他们的毛病,和他们过不去,有一个简单的故事可以说明这一点。当时,条件有限,测试人员和开发人员共享一台小型机服务器,测试人员发现了一个缺陷,告诉了某个开发人员,而他趁测试人员不注意,回到自己的座位上偷偷地修改了代码,处理了那个缺陷,然后跑到测试人员身边说:“你把那个Bug再现给我看看?”结果,可想而知,这个测试人员无论如何也不能复现那个Bug(缺陷)了。
几年以后,这种情况不再出现了,不是因为条件好了,可以买很多服务器,可以将测试环境和开发环境分离开来,而是观念改变了。虽然的确是购买了几百台服务器(不用小型机,越来越多的服务器采用Linux系统),将测试环境和开发环境分离开了,在客观上可以避免那类“悲剧”的发生,但是观念远比机器重要。拥有正确的观念,就比较容易创建良好的质量文化,开发人员的态度也随之发生变化,他们已经深深认识到:
软件测试是帮助自己,测试人员是在找产品定义、设计和实现的缺陷,不是找自己的缺陷,是对事,不是对人;
测试人员越快地发现缺陷,项目越能尽早结束;
测试人员尽可能多地发现Bug,遗留在产品中的Bug就会越少,产品的质量就会越高;
测试人员和自己(开发人员)的工作都是为了相同的目标——按时、高质量地发布产品;
开发人员的水平越高,所写的程序中的Bug越少,而不在于使用了别人不知道的技巧。
现在,有的开发人员向我抱怨,是不是换了一个新人测试他写的模块?因为这次发现的缺陷比前次发现的少多了。开发人员希望更多的缺陷被测试人员发现出来,绝不希望缺陷被留给客户去发现。
今天,我们高兴地看到开发人员和测试人员心往一处想。从项目启动的第一天起到需求和设计的评审阶段,从后期的缺陷修正到产品维护——在整个软件生命周期中,开发人员和测试人员愉快地合作、共同努力,将软件产品的开发效率和质量推到一个新的高度。一方面,开发人员主动介绍自己对产品特性是如何理解的,又是如何实现这些特性的,他们主动邀请测试人员参与代码的走查并对新发现的Bug快速响应。另一方面,测试人员提前将设计好的一些测试用例交给开发人员,让开发人员先根据这些测试用例验证正在开发的功能特性,测试人员还愉快地帮助开发人员再现某个缺陷。
所有这些,都可以看出软件测试在国内越来越受重视,软件测试领域正迎来朝气蓬勃的新气象。当更多的人投入到测试行业时,需要一本实践性强、富有启发性的专业书,指导大家如何进行测试,出色地完成测试任务。这本《全程软件测试》就承载了这样一个任务,它会从项目启动开始,一步一步地教会大家如何做好测试工作,包括建立测试组、计划测试、设计测试用例、选择测试工具、开发测试脚本、执行测试和编写测试报告等。这也是我与大家分享多年来积累的软件测试经验与技术实践,以及不断思考所升华的体会。
为了写这本书,我事先也做了一些尝试,尽量收集大家对软件测试需求的反馈,并在CSDN的个人博客http://blog.csdn.net/KerryZhu上演义了30回的软件测试,受到了大家的好评。也许就因为这个,在CSDN建立博客不到8个月,我的博客就成为当年(2006年)十大最具价值的博客之一。
此前,我曾写过一本《软件测试方法和技术》的教材,这本教材在比较短的时间内印刷了好几次,也颇受欢迎。但那本书在很大程度上是从理论、概念上讲解软件测试的方法和技术的,适合在校学生使用。而这本书重实践、重应用,适合软件公司的测试经理、工程师和想进入软件测试行业的人员学习。
全书共12章,以两个案例为背景,以项目向前发展的实际过程为路线图,全面展开软件测试的思想、流程、方法、技术和最佳实践。全书力求做到方法有效、技术实用,集中讲解实际测试工作,没有单纯地介绍概念,而是将概念准确地穿插在测试进程活动之中。
第1章 介绍测试项目启动后要做好哪些准备,如何掌控项目背景和要素,为制定测试计划打下坚实的基础,包括了解软件的质量需求,深刻理解软件测试和测试过程,以及开发过程之间的关系,并说明如何确定软件测试组长和制定测试规范。
第2章 测试计划是焦点,主要讨论了测试人员在需求评审中的作用,确定软件功能和非功能性的系统测试需求、各个阶段的测试任务,并进行测试范围分析和工作量估计、测试资源需求和团队组建、测试里程碑和进度安排,以及基于测试风险分析制定有效的测试策略。
第3章 从系统架构的审查开始,深入到系统组件设计、设计规格说明书、界面设计和系统部署设计等一系列的审查。在系统部署设计中,详细讨论了系统部署逻辑设计、物理设计、可用性设计、可伸缩性设计和安全性设计的验证。
第4章 围绕测试设计展开讨论,先从测试用例框架的设计入手,然后逐步涉及测试用例的构成、设计方法、评审、功能测试用例和系统测试用例的设计,其中对各种功能设计方法、故障转移和系统安全性的测试用例设计作了更详细的介绍。
第5章 测试工具的选择和脚本的开发是本章的主题。在这一章,对测试工具的优势、实现原理等进行了分析,介绍了测试工具选择的标准、评估报告和误区,给出了开源或商业的测试工具的完整解决方案,包括详细介绍了Selenium和Jmeter的使用,最后说明如何进行测试脚本录制、回放、开发和重构。
第6章 展示测试和编程的交互过程,主要经历程序代码的审查、程序的动态测试两个环节。对于白盒测试方法及其应用、单元测试工具等,在这一章作了详细介绍。
第7章 开始进入功能测试的执行阶段,并着重介绍了自动化功能测试的执行,如何优化测试环境的组合,如何有效地创建测试套件和软件缺陷的报告,包括测试执行之前的准备、测试环境的建立和设置、UI测试、回归测试等。
第8章 介绍如何进行国际化测试和本地化测试,包括本地化的功能测试、数据格式验证、UI验证、配置和兼容性验证,以及翻译验证。
第9章 内容是围绕系统测试执行来展开的,进一步让读者了解系统测试,详细分析了负载测试的加载方式、负载参数、执行布局和结果报告,从而更好地理解如何做好性能测试,并相继介绍了Web安全性测试、容错性测试、兼容性测试、安装测试等。
第10章 内容相对简单,包括4个方面:验收测试、文档测试、α测试和β测试、产品后继版本的测试。
第11章 内容丰富,涉及测试管理的思想和系统、测试用例的管理、测试自动化的管理、缺陷跟踪和分析、测试进度和风险的控制、测试覆盖度和结果分析等。例如单就缺陷分析,就包括缺陷生命周期、缺陷状态的跟踪、缺陷的分析、累计缺陷趋势分析等。
第12章 最后一章是总结和思考,可以让读者认清现实、制定原则,然后用辨证统一的方法去看各种测试方法,如白盒测试方法和黑盒测试方法、静态测试和动态测试、手工测试和自动化测试、有计划测试和随机测试等,从而真正悟出软件测试方法的应用之道。这章还分享了笔者在测试中所积累的大量最佳实践,并以实用的测试成熟度模型作为结尾。
本书最后附有软件测试全景图、完整的项目检查表、软件测试计划通用模板、完整的测试工具列表和代码审查的示范性列表等资料。
由于水平和时间的限制,书中难免会出现错误,欢迎读者及各界同仁不吝指正。
无封面