本书分为10个部分,每一部分自成体系,详细系统地讲述了50条最好的软件测试实践经验,这10个部分大致和软件生命周期的各个阶段相对应。本书的内容涵盖了从有关过程和管理的内容到技术方面的话题。书中内容并不局限于任何特定的技术和应用程序平台。本书适用于质量保证人员、软件测试人员、测试组长和测试经理等阅读,也可供项目经理和软件开发人员参考。
第1章 需求阶段
第1条:测试人员及早介入
第2条:验证需求
第3条:需求就绪后马上设计测试过程
第4条:确保需求变化的传达
第5条:注意在现存系统上进行开发和测试
第2章 编制测试计划
第6条:了解手头的任务和相关的测试目标
第7条:考虑风险
第8条:根据功能优先级安排测试工作
第9条:牢记软件方面的问题
第10条:获得有效的测试数据
第11条:规划测试环境
第12条:估计测试准备和执行所需的时间
第3章 测试组
第13条:定义角色和职责
第14条:测试技巧、行业知识和经验三者缺一不可
第15条:评估测试人员的有效性
第4章 系统构架
第16条:了解系统构架和基本组件
第17条:确认系统的可测试性
第18条:使用日志增加系统的可测试性
第19条:验证系统支持调试和发行两种执行模式
第5章 测试设诗和测试文档
第20条:分而治之
第21条:使用测试过程模板和其他测试设计标准
第22条:根据需求得到有效的测试用例
第23条:把测试过程当作"动态"的文档
第24条:利用系统设计和系统原型
第25条:设计测试用例场景时采用经过检验的测试技术
第26条:在测试过程中避免包含限制和详细的数据元素
第27条, 运用探索性测试
第6章 单元测试
第28条:用结构化的开发方法来支持有效的单元测试
第29条:在实现之前或者与实现同时开发单元测试
第30条:使单元测试的执行成为生成过程的一部分
第7章 自动测试工具
第31条:了解各类测试支持工具
第32条:自主生成一个工具
第33条:了解自动测试工具对测试工作的影响
第34条:关注组织的需要
第35条:在应用程序的原型上对工具进行测试
第8章 自动测试, 选择最好的实践
第36条:不要过分依赖记录/回放工具
第37条:必要时自制开发一个测试工具
第38条:使用经过考验的测试脚本开发技术
第39条, 尽量使回归测试自动化
第10条:实现自动生成和烟雾测试
第9章 非功能性测试
第41条:不要事后才考虑到非功能性测试
第42条:用产品级数据库进行性能测试
第43条, 为预期受众定制可使用性测试
第44条:特定需求和整个系统都需要考虑安全性
第45条:研究系统对并发性测试计划的实现
第46条:为兼容性测试建立高效的环境
第10章 管理测试的执行
第47条:明确定义测试执行周期的开始和结束
第48条:隔离测试环境和开发环境
第49条:实现缺陷追踪生命周期
第50条:追踪测试工作的执行
术 语 表
在大多数软件开发组织中,测试工作是应用程序的最后一道"质量关",它允许或者拒绝应用程序从理想的软件工程环境进入真实的现实世界。伴随着这个角色的是巨大的责任,应用程序的成功。甚至可能是组织成功的赌注全部押在软件产品的质量上。
众多小规模的测试任务必须由测试组来完成和管理,事实上,由于测试任务的数量过多,所以测试工作关注的只是测试一个应用软件的功能,很少顾及测试工作需要的外围工作。获得合适的测试数据。应用程序需求和构架的可测试性。适当的测试过程标准和文档,以及硬件和设备等诸如此类的问题即便不是没有考虑,也往往会到项目生命周期的后期才予以考虑。对于规模较大的项目,单纯使用测试脚本和测试工具是不够的,大多数有经验的软件测试人员都会认同这一点。
一般情况下,我们只有通过具体实践才能熟知使测试工作从头到尾都获得成功所需要的各个环节的有关知识。在项目生命周期中,如果某些任务完成得早,那么测试工作的效率就会高得多,这是一条有价值的经验。当然,在我们意识到这一点时,当前的项目通常已不可能从这条经验中获益了。
本书提供了一些实践经验和关键理念,组织可以利用这些实践和理念成功地实现有效的测试工作。本书的目的是为读者提供各种经过精心挑选的技术和建议,软件从业人员能够直接用它们来改进产品,同时也能避免损失惨重的过失和疏忽。本书详述了50条最好的软件测试实践,分为10部分进行讲述,这10部分大致和软件生命周期的各个阶段相对应。这种结构本身就阐述了软件测试工作中一个关键理念,为了获得最大的有效性,测试工作必须完全融入软件开发过程。我们必须避免把测试工作当成"项目流程"中一个独立的步骤(在软件开发周期的最后阶段),这是一个很常见的错误。
本书的内容涵盖了从有关过程和管理的内容(例如:管理变化的需求和测试组的构成)到技术方面的话题(例如:提升系统可测试性的方法和把单元测试融入开发过程)。虽然在需要的地方本书中也出现了一些伪代码,但是本书的内容并不局限于任何特定的技术和应用程序平台。
但是,还有很多测试工作以外的因素也会强烈地影响项目的成败,认识到这一点非常重要。虽然包含测试工作在内的完整软件开发过程会确保与软件工程有关的工作成功,但是所有项目还要处理有关商业用例。预算。时间表和组织文化方面的问题。在某些情况下,这些问题会和高效的工程环境的需要发生冲突。应用本书中的建议的前提是:为了测试工作的成功,组织能够适应测试工作的需要,并且为这些需要提供支持。
本书的组织结构
本书由50个独立的条目组成,它们覆盖了10个重要的方面。这些经过挑选的最优实践出现的顺序和系统开发生命周期的各个阶段的先后顺序一致。
读者可以了条接一条、一章接一章地顺序阅读本书。当需要获得或者了解有关一个特殊问题的信息时,也可以直接跳到特定的条目。虽然在每一章中会引用其他章节或者其他书籍的内容,它们会有助于向读者提供更多的信息,但是每一章的内容基本上是自成体系的。
第1章描述了测试工作在需求阶段需要考虑的问题。在需求阶段,包括测试组代表在内的所有涉众必须参与需求工作,并且必须收到需求变更通知,这是非常重要的。此外,对于任何大型项目来说,基于需求开发测试用例都是一个最基本的理念。测试组参与此阶段工作的重要性怎么强调都不过分,只有在这个阶段才能获得对系统和它的需求的全面理解。
第2章描述了测试规划活动,其中包括:对测试工作目标的了解方法,确定测试策略的方法,以及有关数据、环境和软件本身需要考虑的问题。在软件生命周期中,规划工作必须及早开始,这是因为我们需要为成功地实施测试工作预留时间。及早规划使得我们可以对测试进度和预算进行估计,并且使之获得批准和加入整个软件开发计划。我们必须不断地监控这些估计,并且和实际情况进行比较,这样就可以根据需要对它们进行修正,并且实现预期的目标。
第3章主要讨论测试组的人员构成。所有成功的测试工作的核心是执行它的人。一个成功的测试组需要同时具备技术和行业两方面的知识,还要有结构化和简明的角色与职责划分。为了确保测试工作成功完成,在整个测试过程中,必须不断地评估每个测试组成员的有效性。
第4章讨论了有关测试系统构架方面的考虑。为了保证系统本身是可以测试的、能够进行灰箱测试和有效进行缺陷诊断,考虑这些因素是非常重要的,但是它们经常被忽视。
第5章详细描述了如何有效地设计和开发测试过程,其中包括在测试创建和文档化方面需要考虑的问题,还讨论了最有效的测试技术。随着时间的推移和系统开发迭代的继续,需求和设计会不断精化,因此测试过程也要不断精化,它们需要加入新的和修改后的需求以及系统功能。
第6章讨论了在整个测试策略中,开发人员进行单元测试所扮演的角色。在实现阶段中,单元测试会显著地提高软件质量。如果全面地执行了单元测试,以后的测试阶段会更成功。但是,基于对问题的了解的、随意的单元测试和基于系统需求的、结构化的、可重复的单元测试是有区别的。
第7章讲解了有关自动测试工具的问题,其中包括:在项目中使用恰当的工具类型。有关定制开发还是购买的决定和为组织选择恰当的工具需要考虑的因素。本章描述了多种类型的测试工具,它们可以用于开发生命周期的各个阶段。此外,本章还讲到了开发定制工具方面的问题。
第8章讨论了为自动测试选择最佳实践方面的问题。本章描述了如何正确地运用记录/回放工具、自制测试工具和回归测试。
第9章提供了测试一个应用软件非功能性方面的信息。如果满足了应用程序的非功能性需求(包括性能、安全性、可使用性、兼容性和并发性测试),那么会提升应用程序的整体质量。
第10章提供了测试执行的管理策略,其中包括:追踪测试过程执行和缺陷生命周期的正确方法以及收集用于估计测试进程的度量。
本书面向的读者
本书面向的读者包括:质量保证人员。软件测试人员。测试负责人和测试经理。本书中提供的大部分信息对于项目经理和软件开发人员也是有价值的,他们可以利用这些信息改进软件项目的质量。
致 谢
感谢所有在本书撰写过程中向我提供帮助和支持的软件专业人士,其中包括参加了本人讲授的自动软件测试(Automated Software Testing)、高质量的Web系统(Quality Web Systems)和有效测试管理(Effective Test Management)这几门课程的所有学生,各个公司中协助本人完成各种测试工作的合作者,还有本人各种著作的合著者。他们提出的问题、见解、反馈和建议直接或者间接地增加了本书内容的价值。特别感谢Douglas McDiarmid为本书做出的杰出贡献。他提供的信息极大地丰富了本书的内容,同时也极大地提升了本书素材的整体质量。
还要感谢下列人员,他们提供了非常有价值的反馈。他们是:Joe Strazzere,Gerald Harrington,Karl Wiegers,Ross Collard,Bob Binder,Wayne Pagot,Bruce Katz,Larry Fellows,StevePaulovich和Tim Van Tongeren。
还要感谢Addison-Wesley的工作人员对本书的支持,特别是DebbieLafferty,Mike Hendrickson,John Fuller,Chris Guzikowski和Elizabeth Ryan。
最后,还要感谢Eric Brown,他为本书设计了有趣的封面。