前言

如何有效地减少测试用例数目?

如何避免测试用例之间的冗余?

如何满足客户对产品的不同质量要求?

如何应付紧迫的测试时间和有限的测试资源?

如何适应需求的不完善和变更?

如何快速获得产品的质量信息?



当你还在为这些测试设计问题而苦苦思索的时候,不妨看一看本书,它将为你提供一个测试设计的全新视角和思路。本书结合编者10年的软件测试实践经验,以解决软件测试设计面临的具体问题为目的,以现有的软件测试设计技术为基础,提出了问题驱动的软件测试设计方法。该方法不再将关注点集中在测试设计技术本身的描述,而是放在了不同的测试技术如何解决测试设计过程中面临的实际问题上。本书首先提出测试人员在测试设计过程中遇到的各种不同问题,然后应用不同的测试设计技术从不同的角度解决问题。

问题驱动的软件测试设计由4大类测试设计技术组成,即经典测试设计、基于质量特性的测试设计、基于风险的测试设计和基于经验的测试设计。该方法全面覆盖了现有的各种软件测试设计技术,不仅包括了等价类划分、边界值分析和决策表测试等经典测试技术,也包括了失效模式和影响分析FMEA以及探索性测试等测试技术。问题驱动的软件测试设计方法通过将测试人员面临的问题、测试技术和实践经验的紧密结合,为读者提供了全新的测试设计思想和理念,相信书中介绍的技术、方法和实践经验能够给读者带来对软件测试设计的全新认识。

软件测试设计的误区及本书的解决方法

软件测试设计是整个软件测试过程中的一个重要活动,其输出质量(无论是文档化的工作产品,还是存在于测试人员头脑中的想法)将会直接影响后续测试活动的效率和有效性,进而影响软件产品的最终质量。测试人员在测试设计过程中的如下误区常常会影响测试活动的有效开展。

(1)测试对象的需求规格说明是测试设计和执行的唯一输入,即测试人员的测试活动都以该说明作为判断依据。需求规格说明作为测试的输入,这观点本身没有错,但它不是唯一的。在测试过程中测试人员面对的需求常常是不全且模糊,甚至没有任何需求文档;另外,测试对象除了需求规格说明中包括的显现需求之外,测试人员还需要考虑一些隐现的需求。例如,竞争对手的产品特点和以前版本发现的缺陷等。

(2)假如测试对象满足了需求规格说明的要求,那么它就满足了产品的质量要求,这个误区实际上是上面的误区导致的。我们需要强调的是软件测试不仅仅是验证的目的(即Verification,正确地构建产品),而且需要达到确认的目的(即Validation,构建正确的产品)。因此在测试过程中还需要进行确认测试,即从用户的角度检查软件产品是否确实是用户需要的,是否实际满足了用户的真实需求和要求。在测试过程中,测试人员除了要考虑功能测试之外,还需要针对不同的质量特性进行非功能测试。

(3)测试对象的每个功能对于测试设计而言是同样重要。在实际测试设计过程中经常无意识地按照这个观点开展测试活动。例如,无论什么功能,忽略其重要程度和优先级,测试人员都会基于需求进行测试设计,同等对待每个功能的测试用例和规格说明等文档。

我们认为,前面的这些误区是由于片面地理解了一些测试思想和理念造成的,它们会直接影响测试人员测试设计活动的效率和有效性。为了更好地建立测试人员的测试思想和理念,从而更好地进行软件测试设计,本书提出了问题驱动的软件测试设计方法。这种方法将从需求、质量特性、风险和测试经验等方面入手,针对测试设计过程中面临的各种问题提供系统化的测试设计解决方案。

本书的创作过程及其主要内容

两年前就想写一本关于软件测试设计方面的书,机缘巧合,郑文强与笔者先写了一本《软件测试管理》(电子工业出版社,2010 年7 月)。正是该书的出版,为本书的写作奠定了坚实的理论和实践基础,使得该书在不到半年的时间内就完成了撰写和评审的所有工作。实际上我们在2009年末就完成了本书经典测试设计部分的内容,后来由于忙于《软件测试管理》的出版工作,所以中止了本书的写作。2010年5月完成《软件测试管理》出版之前的所有工作后,我们才又开始继续编写本书。本书的创作思路经历了如下两个不同的阶段。

(1)我们计划覆盖所有软件测试技术人员需要掌握的知识点。《软件测试管理》覆盖测试管理的内容,而本书将重点关注高级软件测试分析和技术。但是软件测试技术的内容很宽泛,而且软件测试技术人员需要掌握的知识点和软件测试管理人员有很多是重复的。如果按照原计划,本书差不多有一半的内容与《软件测试管理》类似。考虑再三,我们认为这样的一本书,对我们本身测试知识水平的提高不大,对读者而言也是不公平的,所以最后我们完全放弃了原来确定的写作架构和内容。

(2)尽管重新建立本书的框架和思路花费了很多精力,但是却更好地开拓了我们的视野,并且可以更加贴近测试人员的实际测试工作。此时我们将本书定位为软件测试设计领域的专著,而尽量不涉及软件测试其他方面的内容(当然完全不涉及其他内容是不可能的,因为软件测试设计不可能独立于其他测试活动而单独存在)。

确定本书的定位之后,接下来需要完善整体写作思路和目录结构。尽管软件测试设计技术在很多相关书籍中都会有所涉及,但是专门论述这些技术的书籍确实还不多。

● 首先我们根据自己多年的软件测试经验,罗列了测试人员在测试设计过程中经常面临的各种问题和挑战;

● 其次根据具体的问题分析,有针对性地选择合适的测试设计技术来解决它们;

● 最后将不同的测试设计技术和测试设计面临的问题与编者多年的测试设计实践经验相结合,提出了“问题驱动的软件测试设计”方法。该方法不再将重点放在软件测试设计技术理论上,而是将重点放在如何在测试过程中应用这些技术,有效地解决测试人员所面临的各种问题。

创作过程总是充满了艰辛,无论是收集各种相关的测试资料,还是准备各种合适的项目案例,甚至是评审过程中的各种争论。创作过程同样也是收获的过程,包含各种喜悦和成就感。比如,书的内容随着时间不断增加,软件测试设计技术的不断清晰化,以及测试设计中阐述的各种测试思想和理念不断解决测试人员面临的问题和挑战等。

本书是《软件测试管理》之后,二位笔者和郑文强的又一次成功合作。本书的创作过程不仅加深了我们在软件测试设计方面的理解,也在写作技巧、沟通和合作方面有了更多的收获。

本书分为4大部分,共12章。每个部分将基于测试人员在测试过程中面临的不同问题类型,分别阐述不同的测试技术,以及如何有效地解决该类型的问题。

本书主要解决的问题和挑战是相对独立的,读者可以根据自己面临的最紧迫问题选择相关的内容阅读,更加有效地在测试过程中解决实际问题。假如读者有时间,建议从头开始阅读,以系统地掌握本书所提出的整个测试思想,从而系统地解决测试设计过程中面临的各种问题。

本书的读者对象

软件测试设计是测试过程中的重要测试活动,不同测试人员对测试设计的理解和要求不同,笔者在本书的写作过程中兼顾不同要求。本书可以作为测试人员的案头手册,其中不仅提供全面的测试设计技术,同时帮助解决软件测试设计过程中面临的各种问题。本书的主要作用如下。

(1)对于软件测试的新手,本书提供的软件测试设计知识可以帮助其理解软件测试设计的概念,更好且更快地了解软件测试设计。

(2)对于有经验的测试人员,本书可以提供系统而全面的软件测试设计技术和方法,以快速提高其软件测试设计水平。

(3)对于软件测试的研究者,本书将测试设计过程中碰到的实际问题与测试设计技术和方法紧密结合起来,为其提供全新的软件测试设计思想。

推荐的阅读方式

本书融合了编者10 多年的测试设计实践经验,以一个贯穿始终的大型项目案例为背景,系统地介绍了问题驱动的软件测试设计方法的思想。本书在介绍编者自身软件测试设计经验的同时,还介绍了大量的业界实践。本书融合了国内外众多软件测试领域专家的测试设计思想,直接参考的文献达上百篇。并通过脚注的形式提供,为读者的扩展阅读提供了方便。

如果读者希望全面了解软件测试设计知识,建议从头到尾顺序阅读本书;如果暂时只对部分章节感兴趣,也可以直接跳到相关章节。本书系统地介绍了各种软件测试设计知识,读者可以在需要了解某些测试设计技术和方法的时候回头翻阅本书,相信书中的内容和思想一定能够对读者的学习和工作有所帮助。

致谢

本书的出版离不开我们成长过程中给予我们帮助的同学、同事和朋友,他们为此书的出版提供了诚恳的指导和宝贵的意见。

感谢电子工业出版社孙学瑛编辑为本书提供的宝贵意见和大力支持,本书才得以在这么短的时间内与读者见面;同时感谢其他博文视点同事,他们的专业素质和敬业精神令我们感动。

最后要感谢我们的家人,这本书的写作占用了大量的晚上和周末的时间。没有他们的支持和鼓励,这本书很难面世。

由于编者水平和时间的限制,书中难免存在错误和不足之处,欢迎读者及各界同仁不吝指正。

编者

2011.2.1