史亮简介:

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

  探索式测试的概念与现状

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

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

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

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

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

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

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

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

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

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

专题入口:http://www.51testing.com/zhuanti/exploratory.html

  51Testing:您觉得目前普遍存在的问题有哪些?

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

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

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

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

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

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

  ● 探索式测试只是脚本测试(Scripted Testing)的补充。

  ● 探索式测试比脚本测试有更高的风险。

  ● 探索式测试只适合测试专家,不适合测试新手。

  我发现一些很优秀的测试文献在此产生了不好的影响。例如,《敏捷软件测试》将探索式测试置于测试四象限的第3象限(如下图),而该象限的特征是:以手工测试为主、面向业务领域、评价产品。这种观点严重局限了探索式测试的应用范围。

  实际上,探索式测试能够很好地应用于所有四个象限,包括半自动化测试、自动化测试、基于工具的测试等。例如,第4象限的安全测试。请想象一下黑客是如何攻破软件产品的。他们的基本方法是“错误猜测”:通过分析已知的安全缺陷,抽象出可利用的缺陷模型,然后开发出相应的缺陷挖掘工具。这些工具可以是黑盒工具,通过持续地输入攻击数据来发现缺陷;也可以是白盒工具,通过扫描源代码(或目标代码)来识别漏洞。他们运行工具,分析输出中的蛛丝马迹,一旦发现疑似缺陷,便深入探索。整个攻击过程常常需要广泛扫描、深入挖掘、迂回前进、反复尝试。从安全测试的角度看,黑客都是探索式测试的绝顶高手。

  《探索式测试实践之路》系统地讨论探索式测试,有助于消除误解,建立正确的观念。其中,第7章详细讨论了探索式测试与测试自动化的互补关系,介绍了如何利用探索式风格来开发测试用例和测试工具。通过若干探索式自动化测试的实例,说明探索式测试的风格与思想同样适用于测试开发。

专题入口:http://www.51testing.com/zhuanti/exploratory.html

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

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

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

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

  探索式测试在本质上鼓励测试人员去自由地探索、创造和应用。

  ● 探索是带着使命在某个空间中有目的的漫游,但没有预先确定的路线。探索包括不断学习和实践。

  ● 探索式测试者持续应用他所学到的知识。所谓“学而时习之,不亦悦乎”,探索式测试将学习与应用作为相互支持的活动逐步展开,为测试者的知识提升提供了平滑的学习曲线。

  ● 探索式测试有助于测试人员在合适的时间学习合适的内容,并立即应用,以获得真实反馈。这提高了学习效率和效果,并降低了浪费测试资源的风险。

  ● 在探索式测试中,测试者创造出一切有助于学习和实践的数据和工具。它们包括测试输入数据、结果检查脚本、数据分析报告和业务流程图表等。

  ● 探索式测试是一项富有智力挑战的活动,充满了乐趣。

  学习的一个重要成果是成为更优秀的测试人员。他们可以根据项目语境,选择合适的流程、技术和工具来高效地测试,以推动软件质量的提高。

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

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

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

  ......

专题入口:http://www.51testing.com/zhuanti/exploratory.html