定义

探索性测试(Exploratory Testing)是一种自由的软件测试风格,强调测试人员同时展开测试学习,测试设计,测试执行和测试结果评估等活动,以持续优化测试工作。

其特征有:即兴发挥,快速实验,动态调整。

核心

探索性测试是一种软件测试风格(Style),它强调独立测试人员 (Individual tester)的个人自由和职责(Personal Freedom and Responsibility)。

为了持续优化其工作的价值(Value),将测试相关学习(Test-related Learning),测试设计,测试执行和测试结果分析作为相互支持的活动,在整个项目过程中并行的执行。

特性描述

  • 是一种思维方式和测试风格,而不是一种具体的软件测试技术,可以应用于任何测试阶段。
  • 强调“同时进行测试设计和执行”, 通过执行阶段的发现进一步设计新的测试,能够充分发挥软件测试工程师的“主动发现和思考”的技能。
  • 将测试学习,测试设计,测试执行和测试结果分析同时进行,作为一个循环快速的迭代,以不断收集反馈,调整测试,优化价值。
  • 与随机测试和漫游测试并不相同,具有一定的思维模式CPIE。
  • 符合敏捷价值观,通过测试逐渐学习产品,并让所学指导测试实践
  • 详细的测试记录是测试执行的自然结果,通常应该包含测试目标,测试范围,测试策略,缺陷列表,测试过程中发现的值得进一步探讨的问题,可以复用的测试资源,测程耗时等。

测试过程

测试人员制订测试计划和测试用例,在后续步骤的细微时间片中,它们将会被被反复执行。

分解测试任务,每个任务都需要有明确的退出条件和时间限制。

在一个测试用例内执行测试,在该过程中,测试人员设计测试,执行测试,评估测试结果。根据获得的知识和发现的疑问再设计测试用例,以拓展测试的广度和深度。

反思当前的测试进展,并优化测试计划,根据新的认识:可以追加一个测试用例,可以修改当前计划的不足,可以删除一些多余的任务等。

集合团队力量,评审测试计划,头脑风暴,分析测试结果。

  1. 测试人员按照一个测试用例来执行测试,得到的程序输出与预期不一致。
  2. 但是经过分析并不是一个缺陷,根据这个输出想出了新的测试思路。
  3. 根据新的思路做详细的测试,就这样一直探索下去,最终发现一个问题。
  4. 而发现问题的这个测试思路和测试用例并没有出现在最初的设计中。

对比即兴测试

  • 相同点:

    都强调即兴发挥,利用直觉和经验,快速地测试软件,并不停的调整测试策略。
  • 不同点:

    探索性测试:是带着反思的测试,在整个过程中测试人员不断地提出假设,用测试去检验假设,持续完善测试模型,然后分析测试结果来证实或推翻假设,驱动进一步的测试。

    即兴测试: 往往是利用错误猜测,典型风险和常见缺陷来快速地试探,它可以在短时间内发现问题,但是不强调系统性,完整性。

CPIE

该模型包含了一组启发式问题,以推动测试人员在知识,分析,实验和测试执行上深入探索。

整理 (Collation):尽可能收集关于测试产品的信息,去了解和理解它们

排序 (Prioritization):确定所有测试任务的优先级。

调查 (Investigation):对即将执行的测试任务进行仔细的分析并确定测试输入和预期输出。

实验 (Experimentation):执行测试,验证预期结果,检查获取信息的正确性。根据实验结果,收集更多的信息,调整测试优先级,深入探索。

HTSM

启发式测试策略模型HTSM(Heuristic Test Strategy Model)

测试人员利用质量标准(Quality Criteria)、项目环境(Project Environment)、产品元素(Product Element),指导测试技术(Test Techniques)的选择与应用,并产生观察到的质量(Perceived Quality)。

  • 项目环境(Project Environment):资源,约束和其他影响测试的项目元素。
  • 产品元素(Product Elements):需要测试的对象。
  • 质量标准(Quality Criteria):分操作性标准和开发标准
  • 测试技术(Test Techniques):生成测试的策略,有效的选择和实施测试技术,需要综合分析项目环境,产品元素和质量标准。

参考信息

什么是探索性测试?

探索式测试:基本概念

测试建模:启发式测试策略模型(Heuristic Test Strategy Model)

Testing - 测试基础 - 探索的更多相关文章

  1. Testing - 测试基础 - 方法

    选择和使用测试方法和工具 按照测试需求用途(或测试技巧)选择 在软件开发生命周期和软件测试流程中适当地选择 按照测试人员实际技能选择 选择可提供的和可执行的 测试方法 类别及技巧 目标 使用方法 举例 ...

  2. Testing - 测试基础 - 自动

    自动化测试模型 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块. 自动化测试框架在发展的过程中,不断有新的模型(概念)被提出,目 ...

  3. Testing - 测试基础 - 概念

    测试是为了度量和提高被测试软件的质量,对测试软件进行工程设计.实施.维护的的整个生命周期过程. 仅仅发现Bug是测试的初步,而分析出根本原因推动问题的解决,却要有很深的功底. 不同的测试岗位从事不同的 ...

  4. Testing - 测试基础 - 分类

    对软件内部结构的深入程度 黑盒测试:又叫功能测试.数据驱动测试或基于需求规格说明书的功能测试. 白盒测试:又称结构测试.逻辑驱动测试或基于程序代码内部构成的测试. 灰盒测试:包含性能测试.自动化测试. ...

  5. Testing - 测试基础 - 流程

    测试存在于各个阶段: 需求测试--->单元测试--->集成测试--->系统测试--->性能测试--->用户测试--->回归测试 需求测试 完整性&正确性 一 ...

  6. Testing - 测试基础 - 用例

    测试用例 是指对一项特定的软件产品进行测试任务的描述,体现测试方案.方法.技术和策略. 内容包括测试目标.测试环境.输入数据.测试步骤.预期结果.测试脚本等,并形成文档. 每个具体测试用例都将包括下列 ...

  7. Testing - 测试基础 - 阶段

    估算 测试对软件工作量的估算的准确性 测试评估软件系统的状况的准确性 关注点: 不准确的估算 不适当的开发过程 不真实的状态报告 如何知道对工作量的估算是正确的 估算工作量的工具很容易出错 对软件工作 ...

  8. Testing - 测试基础 - 理解

    理解 目的 测试就是要找到关键信息,有关项目和产品的关键决策都是根据这些信息做出. 对产品质量做出总体评估. 找出并报告团队所有可能会对产品价值产生消极影响的问题(但并不意味着能发现所有问题). 重心 ...

  9. Testing - 测试基础 - 模型

    珠玉在前,不再赘言. 软件测试模型 软件测试模型汇总

随机推荐

  1. 两份div之间出现空隙的原因及解决方法

    在一个div加有< ul><li>    因为ul有个默认的margin和padding值 如果该div中没有设边框 ul默认的值的就会对上一个div有影响 解决方法:将ul的 ...

  2. windows配置php开发环境

    1.安装xampp. xampp集成了php.prel.mysql.apache等网站工具,安装超简单,本身也超级好用.点击下载xampp 2.讲xmapp中的php配置到环境变量 比如我的xampp ...

  3. Spring声明式事务管理基于@Transactional注解

    概述:我们已知道Spring声明式事务管理有两种常用的方式,一种是基于tx/aop命名空间的xml配置文件,另一种则是基于@Transactional 注解.         第一种方式我已在上文为大 ...

  4. VS2012配置使用ICE通信接口

    1.下载安装Ice-3.5.1.msi http://www.zeroc.com/download.html 2.添加安装路径到环境变量path,D:\Program Files (x86)\Zero ...

  5. 需要知道关于struct的一些事情

    前言 重构代码的时候,会遇到长参数的方法,此时就需要使用“引入参数对象”来封装这些参数.大多数时候,这些参数都是简单类型,而且所有参数的值占用的空间也不是非常的大,此时使用对象真的好吗?对象的特性是堆 ...

  6. VS2013 生成安装文件

    在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不 ...

  7. C#中的线程三 (结合ProgressBar学习Control.BeginInvoke)

    C#中的线程三(结合ProgressBar学习Control.BeginInvoke) 本篇继上篇转载的关于Control.BeginInvoke的论述之后,再结合一个实例来说明Cotrol.Begi ...

  8. 图解集合2:LinkedList

    初识LinkedList 上一篇中讲解了ArrayList,本篇文章讲解一下LinkedList的实现. LinkedList是基于链表实现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是 ...

  9. MySQL6:触发器

    什么是触发器 MySQL的触发器(trigger)和存储过程一样,都是嵌入到MySQL中的一段程序.触发器是由事件来触发某个操作,这些事件包括INSERT.UPDATE和DELETE语句.如果定义了触 ...

  10. jQuery同步Ajax带来的UI线程阻塞问题及解决办法

    俗话说不作死就不会死,今天作死了一回,写了一个比较二逼的函数,遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则 ...