探索式测试:基本概念

发表于:2014-09-22来源:infoq作者:liangshi点击数: 标签:探索式测试
探索式测试(exploratory testing)是一种自由的软件测试风格,强调测试人员同时开展测试学习、测试设计、测试执行和测试结果评估等活动,以持续优化测试工作。考虑到它所具备的即兴发

  什么是探索式测试?

  探索式测试(exploratory testing)是一种自由的软件测试风格,强调测试人员同时开展测试学习、测试设计、测试执行和测试结果评估等活动,以持续优化测试工作。考虑到它所具备的即兴发挥、快速实验、随时调整等特征,其思维方法可以追溯到软件开发的最初岁月。作为一个特定的技术术语,它是由测试专家Cem Kaner博士在1983年提出的,并受到语境驱动的软件测试学派(context driven testing school)的支持。测试专家James A. Whittaker曾是Cem Kaner在佛罗里达工学院(Florida Institute of Technology)的同事,后来担任过微软测试架构师和Google测试总监。基于在微软的工作经历和积累,他撰写了《Exploratory Software Testing》一书,进一步扩展了探索式测试的概念和方法。

  探索式测试有丰富的内涵,Kaner博士用一页幻灯片的篇幅介绍了探索式测试的核心。

image

  首先,探索式测试是一种软件测试风格(style),而不是一种具体的软件测试技术(如等价类划分、边界值分析、组合测试等)。作为一种思维方法,探索式测试强调依据当前语境(context)选择合适的测试技术,而不局限于特定的测试技术。虽然James A. Whittaker将他的书命名为《探索式软件测试》,该书所提出的方法集仍旧属于软件测试技术(基于系统化错误猜测和测试隐喻),而不代表整个探索式测试。Whittaker的工作是很有意义的,本文指出它不是探索式测试的全部,是为了强调:当你和别人讨论”探索式测试“时,你们得达成共识。你们是在讨论一种思考方法,还是在讨论这种思考方法指导下的测试技术。

  然后,探索式测试强调独立测试人员(individual tester)的个人自由和责任(personal freedom and responsibility),其目的是为了持续优化其工作的价值(value)。测试人员应该为个人和团队负责,调动所有能量,发挥人的灵活性,在整体上持续优化个人和团队的产出。这段描述和精益生产(lean production)、敏捷软件开发的理念高度一致,这也是探索式测试受到敏捷团队欢迎的原因之一。

  最后,探索测试建议在整个项目过程中(throughout the project),将测试相关学习(test-related learning)、测试设计(test design)、测试执行(test execution)和测试结果解读(test result interpretation)作为相互支持的活动(mutually supportive activities),并行地(parallel)执行。实际上,人脑难以并行地执行多项任务。探索式测试旨在将测试学习、测试设计、测试执行和测试分析做为一个循环快速地迭代,在较短的时间内(如1个小时)完成多次循环,以不断收集反馈、调整测试、优化价值。该思路再次与敏捷软件开发小步快跑、持续反馈的理念不谋而合。

  探索式测试与即兴测试(ad-hoc testing)有何区别?

  探索式测试与即兴测试的都强调”即兴发挥“,利用直觉和经验,快速地试验被测试应用,并不停地调整测试策略。开发大师Andy Hunt在《Pragmatic Thinking and Learning》中指出,直觉是非显性知识的代名词,是大脑富(Rich)模式的杰出能力。如果我们只使用大脑的线性模式(语言可表达的显性知识、逻辑思维),而漠视富模式的能量,我们将浪费自身的巨大潜力。

  然而人是不完美的,某些直觉可能是认知偏见或错误。这就引出了探索式测试与即兴测试的关键不同:探索式测试是带着”反思“的学习和优化过程。在探索式测试中,测试人员不断地提出假设,用测试去检验假设,通过解读测试结果来证实或推翻假设。在这个过程中,测试人员不断完善头脑中被测试应用的模型,然后利用模型、技能、经验去驱动进一步的测试。相比即兴测试不注重测试计划和设计,探索式测试在不停地优化测试模型和测试设计。因为测试设计和测试执行的切换速度很快,许多人误以为探索式测试没有测试计划和设计。实际上,这些活动是被切分到细微的时间片中,并被反复执行。

  如何实施探索式测试?

  探索式测试是一种测试风格,它鼓励测试人员依据当前语境选择合适的测试实施方法。我个人认为SMART原则为探索式测试提供了一些很好的建议。

  Specific(具体的):测试需要一个具体的目标。

  Measurable(可度量的):有明确的度量可以评估目标是否达成。

  Achievable(可实现的):当前的目标应该是可实现的。这潜在地要求将一个大的目标分解为多个小目标,每个小目标也是具体的、可度量的。此外,跟踪小目标的完成情况也提供了整体进度的可度量性。

原文转自:http://www.cnblogs.com/liangshi/archive/2010/12/26/1917229.html