探索性测试,最早是由测试专家 Cem Kaner 博士在 1983 年提出的,并受到当时语境驱动的软件测试学派的支持。后来,Cem Kaner 博士在佛罗里达工学院的同事 James A. Whittaker,凭借着在微软和谷歌担任测试架构师和测试总监的经验积累,撰写了最早的探索式测试书籍《Exploratory Software Testing》,扩展了探索式测试的概念和方法。
常用于质量管理的戴明环(PDCA)是按照Plan(计划)、Do(执行)、Check(检查)和Act(处理)的顺序,循环不止地进行下去的一种科学程序。一个循环完了,解决一些问题,未解决的问题进入下一个循环,整个过程是阶梯式上升的。
探索性测试将戴明环方法使用到了极致,它强调将测试相关学习、测试设计、测试执行和测试结果解读作为相互支持的活动,并行执行。其思维模型CPIE包括4个阶段:
※ Collation(整理):首先是测试相关学习,需要我们收集和整理被测产品的信息,并了解和理解它们。通常在这个阶段,我会翻开需求文档、方案文档看看,或者搜索之前的bug清单寻找思路
※ Prioritization(排序):进行测试设计,确定所有测试任务的优先级
※ Investigation(调查):对即将执行的测试任务进行仔细的分析并确定测试输入和预期输出,也属于测试设计的一部分
※ Experimentation(实验):重点在测试执行和对测试结果的验证,验证我们的预期是否正确,检查我们在整理阶段获取到的信息是否正确。根据实验结果,测试人员将收集更多的信息,并调整测试任务的优先级。以此不断达到收集反馈、调整测试、优化价值的效果。
所以与其说探索性测试是一种测试方法,不如说它是一种基于"实践->反馈->实践"的思维方式。
根据不同产品的特性,可以将产品功能测试分成三个层次:单一功能特性测试、交互特性测试和系统交互测试。针对每个层次,探索性测试的方法可以简单的概括为:局部探索性测试方法、全局探索性测试法和混合探索性测试法。
我们首先会对软件的单一功能进行比较细致的探索式测试。“探索”的过程主要是基于功能需求以及非功能性需求进行扩展和延伸。
比如以软件系统的用户登录功能为例,作为探索式测试人员,首先应该站在最终用户的角度去理解和使用登录功能。为此,探索式测试人员需要分析出用户登录功能的所有原子输入项。假定原子输入项只有用户名、密码和登录按钮。接着组合这些原子输入项构成最基本典型的测试场景。
再比如,用真实合法的用户名以及密码完成登录就是一个非常基本典型的场景,如果该场景能够成功登录,就可以切换到下一个;如果该场景不能够成功登录,就需要去“探索”为什么没能登录成功,比如你可能会怀疑是否是因为用户名或者密码是区分大小写的,又或者是不是因为你多次错误的尝试而导致的。
基于你的怀疑,进一步去设计新的测试用例来验证你的猜测。总之,通过以上这样的“探索”过程,你将测试学习、测试设计、测试执行和测试结果评估串联成了一个快速迭代的过程,并在你脑海中快速建立了登录功能的详细模型。
以用户登录功能为例,在系统交互的探索式测试中,就不仅要考虑单一的登录功能了,而是要考虑用户登录与系统其他功能相结合的场景。
比如,你可以尝试不登录直接访问登录后的路径去观察系统的行为;再比如,你可以尝试不登录就去查看订单状态的操作等等。这些组合场景的设计主要取决于你想要验证,或者说想要“探索”的系统功能。很多时候这些灵感来自于你之前对系统的探索而取得的系统认识,同时你的技术直觉也在此扮演了重要角色。
漫游测试模型 |
方法 |
测试策略 |
商业区 |
指南测试 |
1、严格按照用户手册的建议进行操作; 2、以完全不了解系统视角严格按照手册进行操作; 3、将多分指南(需求、概要设计、帮助手册)放在一起,边理解边测试 |
卖点测试 |
1、了解销售对客户的演示,从中挖掘用户关心的内容作为测试点 2、一团建用户不同身份关注每个用户最吸引人的特性功能 |
|
地标测试 |
1、将指南测试法及卖点测试法中的标记定义为一个路标 |
|
极限测试 |
1、尽可能寻找软件边界; 2、在软件允许的范围内,找一些不一定有意义的测试,或者用户很少这样操作,但是软件并不禁止的操作 |
|
快递测试 |
1、通过消息流转或者类似于debug过程,来定点这条路径中的关键数据节点流转是否正确 2、确认哪些被存储起来的输入数据并”跟随“它们走遍整个软件 |
|
深夜测试 |
1、关注数据备份归档、维护监控任务的运行等等 2、在拥挤的时刻加入功能测试 3、关注软件启动过程和脚本 |
|
遍历测试 |
1、将程序路径绘制出来,采用最短路径来访问这些目标对象,从而遍历所有的路径点 |
|
历史区 |
恶邻测试法 |
1、复杂的功能要多测,bug多的区域要多测 |
博物馆测试法 |
1、关注软件中的遗留代码是否有过改动,有改动就需要测试 |
|
上一版本测试法 |
1、如果当前产品是对原有产品的重构或更新,则需要验证所有场景 |
|
娱乐区 |
配角测试法 |
1、关注某些辅助的特性,并将这些特性与主流业务特性放在一个视角来测试 |
深巷测试法 |
1、关注最不可能用到或者那些不吸引人的用户特性 |
|
通宵测试法 |
1、长期稳定性测试 |
|
旅游区 |
收藏家测试法 |
1、尽可能分析梳理出软件的每条测试路径,将输出结果记录下来,整理成checklist |
长路径测试法 |
1、寻找隐藏最深的的产品界面,并观察经过的每一个界面 |
|
超模测试法 |
1、观察界面的设置、按钮是否好看、易用 2、元素是否被正确绘制、颜色风格是否一致、界面切换是否清晰 |
|
测一送一法 |
1、不同程序同时打开一个文件,或者多个客户端同时操作一批数据 |
|
苏格兰酒吧测试法 |
1、找到用户组并参与讨论,从中获取测试灵感 2、阅读产业博客,深入了解待测应用程序,挖掘测试场景 |
|
旅馆区 |
取消测试法 |
1、刚一启动就停止 2、启动一个耗时操作后,立即启动另一个耗时操作,以此来检测应用程序的自我清除能力 |
懒汉测试法 |
1、输入保持默认值、空白输入 |
|
破旧区 |
破坏测试法 |
1、读取文件数据时破坏、删除或改变此文件权限 2、传输之前或传输中拔掉网线、断开网络连接 |
反叛测试法 |
1、利用反向思维,用一些违反规则的数据进行测试 |
|
强迫症测试法 |
1、重复、复制、粘贴一些数据并进行操作 |
混合探索性测试就是将探索性测试与传统的基于场景的测试方法相结合,通过引入变化达到系统交互测试的目的。
类型 |
方法 |
测试策略 |
通过场景操作引入变化 |
插入步骤 |
1、增加更多数据 当场景要求增加10条数据库记录时,测试人员可以提高到20或30条甚至更多记录,或者当场景要求创建一个新账号,可给那个账号提供超过场景要求的信息。 2、使用附加输入 这里的想法是了解哪些附加功能和场景提到的功能有关联,然后增加输入来测试这些新的附加功能。 3、访问新的界面 当场景要求测试人员调用某些屏幕或对话框时,测试人员应该找到其他相关的一些屏幕或对话框,并把它们加入到场景中。 |
删除步骤 |
使用递进的方式重复应用这个场景操作,每次只删除一个步骤,每减少一个步骤,场景都在被测软件上执行一次,直到获得一个最短的测试用例,然后循环结束。 |
|
替换步骤 |
当被测软件提供了两种选项,则可通过创建衍生场景的方式来测试第二种选择。 |
|
重复步骤 |
通过重复和重新安排步骤,可以测试新的代码路径,发现那些可能与数据初始化相关的缺陷。 |
|
替换数据 |
例如,如果测试可以使用真实的数据库则可代替默认是数据库;模拟数据源停止工作或者无法连接的情况;数据源的记录增加等情况。 |
|
替换环境 |
1、替换硬件:使用用户可能用到的不同类型硬件。 2、替换容器:确保测试场景在用户可能使用的所有主要容器中正常运行。 3、替换版本:所有前面提到的容器都有过去的版本,测试版本兼容性。 4、修改本地设置:浏览器本地设置、本地注册表修改等。 |
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland