51Testing专访史亮:带你走进探索式测试

个人简介

史亮,男,毕业于东南大学,获得计算机软件与理论专业博士学位,研究领域为软件分析与测试。于2006年加入微软(中国)有限公司,任职软件开发测试工程师,负责微软在线服务与商业智能产品的测试工作。于2011年工作调动至微软总部,从事下一代Microsoft Office产品的测试工作。

探索式测试的概念与现状

51Testing:最近主要在从事哪方面的工作?

史亮:我正在测试下一代Microsoft Office产品,测试对象是Windows桌面应用。

我与高翔合著了《探索式测试实践之路》一书,由电子工业出版社出版发行,即将在2012年8月上市。该书针对测试人员对探索式测试的困惑与误解,分享了作者们在探索式测试领域的实战经验和反思总结,并介绍了业界专家的相关见解。希望读者不吝赐教。

51Testing:随着敏捷测试的推广,探索式测试逐渐受到测试人员关注和重视的同时也感到相当的困惑。那么到底什么是探索式测试?

史亮:作为一个技术术语,“探索式测试”是测试专家Cem Kaner博士在1983年提出的,并受到了语境驱动测试思想的指导。目前,影响力最大的定义是Cem Kaner的论述:

探索式测试是一种软件测试风格,它强调独立测试人员的个人自由和职责,为了持续优化其工作的价值,将测试相关学习、测试设计、测试执行和测试结果分析作为相互支持的活动,在整个项目过程中并行地执行。

该定义包含三个方面的内容。

第一,探索式测试是一种软件测试风格,而不是一种具体的软件测试技术(如等价类划分、边界值分析等)。作为一种思维方法,探索式测试强调依据当前语境选择合适的测试技术,而不局限于特定的测试技术。测试人员可以在探索式测试中使用任何一种测试技术,也可以将探索式风格应用于任何测试活动。

第二,探索式测试强调独立测试人员的自由和责任。测试人员应该为个人和团队负责,调动所有能量,发挥人的灵活性,在整体上持续优化个人和团队的产出。

第三,探索式测试建议在整个项目过程中,将测试相关学习、测试设计、测试执行和测试结果分析作为相互支持的活动,并行地执行。实际上,人脑难以并行地执行多项任务。探索式测试旨在将测试学习、测试设计、测试执行和测试结果分析作为一个循环快速地迭代,以不断收集反馈、调整测试、优化价值。

51Testing:您觉得目前探索式测试普遍存在的问题有哪些?

史亮:我认为目前主要的问题是一些测试人员对探索式测试存在较多的误解,例如:

● 探索式测试就是即兴测试(Ad-hoc Testing)。

● 探索式测试不编写文档。

● 探索式测试的测试设计只发生在测试执行的时候。

● 探索式测试的应用领域是手工的功能性测试。

● 探索式测试的过程是不透明的,难以追踪、解释和度量。

............[详细]

51Testing:探索式测试的思维方式与其他的测试方法有什么区别吗?

史亮:探索式测试的核心优势是有助于“学习”。此处的学习是指学(获取知识)与习(应用知识)的持续过程。

对于测试人员,软件测试是一个持续学习并实践的过程。他的学习范围包括:行业知识、用户角色、软件产品、计算平台、编程技能、测试技术、程序缺陷、项目环境等。

测试人员不需要在项目之初就掌握所有知识,他可以通过每天的工作去逐步理解用户、项目、技术和团队。更重要的是,他需要在每天的工作中实践所学的内容:规划测试方案、创建并执行测试用例、分析测试结果和编写测试报告。实践是练习,是“学”的自然延伸。知行合一才构成“学习”的完整内核。[详细]

51Testing:执行探索式测试的具体方法有哪些?

史亮:探索式测试是一种测试风格,强调依据当前语境选择合适的测试技术。

在这种测试风格的指导下,涌现出了一批支持探索式测试的测试技术。例如,James A. Whittaker在《探索式软件测试》中提出了一套基于系统化错误猜测和测试隐喻的“漫游测试”技术,丰富了探索式测试的手段。又例如,Jonathan Bach和James Bach发明了基于测程的测试管理,显著地提高了探索式测试在测试组织、汇报、交流和度量上的能力。再例如,开发工具Microsoft Visual Studio 2010开始支持手工测试和探索式缺陷,Visual Studio 2012进一步增强了对探索式测试的支持,这体现了软件行业对探索式测试的认可,也表明探索式测试辅助工具和自动化将获得更多的重视与发展。

51Testing:是否可以向我们介绍一些探索式测试工具?请举一个实例分析

史亮:探索式测试原则上可以利用一切恰当的工具,不过许多工具鼓励观察和学习的风格,能够延展测试人员的能力,为广泛且深入的探索提供了支持。使用这些工具对提高探索式测试效率有明显帮助。[详细]

探索式测试的实施与管理

51Testing:您是如何组织您的测试团队实施探索式测试的?请分享下这方面的实践经验。

史亮:我的博客文章“探索式测试:基于测程的测试管理”介绍了由测试专家Jonathan Bach和James Bach提出的基于测程的测试管理(Session-Based Test Management,简称SBTM)。这是目前最知名、也是应用最广的探索式测试管理方法。

51Testing:对于探索式测试的管理,您是否有一套自己独有的管理方法?

史亮:在测程之上,测试人员应该结合项目语境动态地调整测试策略和测试活动。例如,测试人员接到一个为期一周的测试任务:测试一个即将发布的产品补丁(或测试一个即将上线的新功能)。他可以考虑按如下方式组织测试。[详细]

51Testing:以前的探索式测试工作中,遇到过哪些困难?您是如何解决的?

史亮:探索式测试强调测试学习、设计、执行、评估的相互支持,这潜在地要求动态变化测试设计。在许多测试团队中,测试流程要求测试人员在项目之初编写测试计划,并接受团队评审。如何将探索式测试的动态测试设计纳入现有工作流程,是一个探索式测试者需要面对的问题。经过实践,我总结出以下测试计划编写与维护方法。

在项目计划阶段,我会编写简单的测试计划,包含产品概述、测试范围、测试风险、测试策略、资源分配和进度安排。编写文档的目的是建立对产品的整体认知,根据风险提出相应的测试策略,并安排测试任务和日程。测试计划不必面面俱到,用精简的格式记录必要的内容即可。此时项目的不确定性较大,未知因素较多,很可能不适合做出详细的测试决策。[详细]

51Testing:您认为探索式测试为什么会获得成功?原因在哪?它的价值体现在哪里?

史亮:在第2个问题中提到了“敏捷测试”,其来源是“敏捷软件开发”。从术语的历史看,“探索式测试”(Cem Kaner提出于1983年)的历史比“敏捷软件开发”(敏捷宣言缔结于2001年)更悠久。近年来,探索式测试受到关注,其根本原因不在敏捷测试,而是具有更深层次的原因。

第一、越来越多的测试人员意识到线性的(瀑布式的)需求评审、设计评审、测试计划、测试用例设计、测试用例执行、回归测试并不能很好地适应高速变化的软件开发,也不能准确地描述测试人员的真实工作方式。他们在积极地研究更好的测试思路和实践方式。

测试的本质是面向质量的技术调查,测试人员综合运用行业知识、测试技术、开发技术、批判性思维等多种知识,对产品质量进行采样、评判、分析和综合。从这个角度,软件测试与犯罪现场调查相似。它们都面对众多且复杂的信息源,需要综合运用多种技术和工具,并随时追查可能的新发现和新猜想。侦探不会使用预先编制的脚本去调查,他会收集尽可能多的证据,对其进行综合判读,然后选择有价值的证据进行深入研究,以发现更多的线索。在整个证据收集、判读、研究的循环中,侦探会并行地展开多种调查活动,让它们相互支持。同样,测试人员会有机地组合信息收集、测试分析、测试设计和测试执行。虽然这些活动在理论上是分离的,但是在实践中它们是相互交织、彼此支撑的。这是探索式测试之所以有效的根源——它的指导思想符合领域本质。[详细]

51Testing:谈谈您对探索式测试未来发展的看法。

史亮:人们研究探索式测试是为了“更好的软件测试”,探索式测试的发展应该针对软件测试所面临的使命与挑战。我认为以下几个方面会持续受到关注。

● 测试人员的教育。所有高效的测试都依赖于测试人员的测试技能和行业知识。在知识爆炸、行业高速发展的今天,如何培训测试新、如何培养测试专家、如何传承经验教训,将变得比以往更重要。探索式测试有助于测试人员的快速学习,在此领域会有更重要的作用。

● 测试建模。为了更好的测试,测试人员需要建立产品的模型,根据模型选择测试策略,并根据测试反馈,动态地调整模型。虽然,工业界和学术界已经积累了一批模型,但是仍存在许多重要的问题值得研究。例如:在开发技术高速发展的情况下,如何分析新的平台、技术或产品,以高效地构建测试对象的模型 ;在测试资源有限、测试对象复杂的情况下,如何根据模型和其他信息选择测试策略;能否将分离的模型有机地组合起来,使得不同粒度的测试模型(模块级的模型、子系统级的模型、系统级的模型、通用架构的模型)可以相互关联、彼此支持;能否建立测试策略的框架,使测试人员能够更全面地思考,并组合运用多种测试策略。

● 测试自动化。近10年来,在测试驱动开发的推动下,自动化单元测试得到了长足的发展。但是,软件系统的复杂性要求更智能、更全面的测试,这使得测试自动化存在巨大的创新空间。而云计算技术的出现,使得测试人员很容易(在短期内)获得几十台甚至上百台(虚拟)计算机。如何开发新的自动化测试以充分利用这些计算机,不但是具有挑战的测试任务,也蕴含着巨大的机会。

............[详细]

51Testing:给刚开始学习探索式测试的朋友一些学习建议吧。

史亮:第一,建议阅读我与高翔合著的《探索式测试实践之路》。这本书介绍了探索式测试专家们的理论与方法,传达了正确的观念,回答了常见的疑问。阅读此书,有助于读者了解探索式测试全貌。对此,探索式测试专家James Bach给予了肯定:“此书是第一本总结了探索式测已发表工作的著作”。

第二,您不需要成为测试专家,才能开始探索式测试。探索式测试的核心实践是“学习”,即获取知识与应用知识的持续过程。在此过程中,测试人员不但更加深入地理解产品,也更深刻地理解测试思想和测试技术。在学习探索式测试的道路上,动手实践并积极反思总是优于等待观望。任何一种方法都需要练习才能纯熟,实战是迈向成熟的第一步。

第三,您不需要领导批准,才能开始探索式测试。也许您的团队要求详细记录测试设计,但这不妨碍您广泛地收集信息,通过简短的探索式测试或头脑风暴,产生多样化的测试策略和测试用例。也许您的团队要求测试执行遵循脚本,但您总是可以在测试执行中引入新的变化,并根据新发现,即席设计测试用例,来触发更多的变化。