测试手段之探索性测试(4)

发表于:2012-06-21来源:新浪博客作者:JerryGao点击数: 标签:探索性测试
之前讲了些ET在项目时间过程中是如果来管理的,那么ET tester在拿到自己的任务的时候,自己是怎么来进行ET的呢? 这里我们先考虑2个状态,一个是ET tester的状态,哪些状态呢? (1)这个ET tester的测试经验怎么样,丰富还是欠缺?

  之前讲了些ET在项目时间过程中是如果来管理的,那么ET tester在拿到自己的任务的时候,自己是怎么来进行ET的呢?

  这里我们先考虑2个状态,一个是ET tester的状态,哪些状态呢?

  (1)这个ET tester的测试经验怎么样,丰富还是欠缺?

  (2)这个ET tester 对AUT的行业经验怎么样,熟悉还是了解?

  (3)这个ET tester对AUT本身的功能需求了解怎么样,熟悉还是了解?

  不管上面的状态怎么样,在压力下,ET tester采用正确的方法进行ET,往往会取得好的效果的。

  那么我们就来分析下ET的一些思维变化吧:

  首先这个ET tester要非常清楚自己的状态,也就是自己所拥有的Knowledge,具体包括这些:

  (1) 该产品的知识

  (2) 测试技术相关的知识

  (3) 该产品所在的行业知识

  (4) 基本的计算机基本知识

  为啥要去check这些知识呢?这样为了方便我们在做ET的时候,能够快速和有方法的确定发现的问题是否是个Bug。

  国外有很多这方面的总结,怎么去找到这些证据去确定发现的问题是不是个Bug,这些东西就叫Oracle,使用这个方法来找到:the HICCUPPS(F) heuristic:

  (1) History: 目前所做的产品的版本是否与过去的版本是一致的。

  (2) Image:这个产品是否与项目组织所想要的image是一致的。

  (3) Comparable Products:这个产品是否与相类似的产品是一致的。

  (4) Claims:这个产品是否与重要的人所说的那样是一致的。

  (5) User’s Expectations: 这个产品是否与用户所想要的是一致的。

  (6) Product:这个产品的每个元素是否与同个产品里面的可比较的元素一致。

  (7) Purpose: 这个产品是否与其目的(明确的或含糊的)一致。

  (8) Statues: 这个产品是否与可适用的法律一致。

  (9) Familiarity: 这个产品与任何通用的问题的形式是不一致的。

  尽管我们有很多方式去壮大我们的oracles,但这需要很多成本的,所以我们在做ET 过程中,会遇到:

  (1)没有oracle可以使我们提前确定这肯定是个正确或错误的结果。

  (2)没有一个单独的oracle可以说明某个功能在所有时间或所有情况下都是正确工作的。

  (3)有些功能看上去是正常工作的,但事实上在某些情况下会失败而且会使得所有的oracles都是不对的。

  可以看到我们在积累我们的oracles时,肯定会遇到很多oracle问题,我们该如何来解决呢?

  (1)忽略这个问题(也许这个信息的价值从成本角度考虑不值得)

  (2)简单化这个问题(需要可测试性,从需求源头开始)

  (3)转移这个问题(并列测试,从类似问题下手)

  这里面很多人都可以看到那就是我们怎么去做测试,怎么快速的产出test idea。

  ET的特点是我们做测试的时候,没有测试用例指导,学习SUT,和测试设计和测试执行在同一段时间内完成。那怎么去做测试执行呢?我们拿到开发提交的系统后,Lead分配给我们的任务后,该从哪里下手呢?

  ET大师James Bach说过,执行ET就像对一个人进行面试一样,那这样就少不了要问问题,该怎么问问题?通过面试者的回答怎样快速提出更好的问题?显然这里面也需要一定的能力,包括如下:

  (1)提出有用的问题

  (2)观察什么事情在发生

  (3)描述自己能够感觉到的东西

  (4)对于自己的所知进行批判性的思考

  (5)组织和管理业务上的规则

  (6)能够设计假设和进行试验

  (7)尽管已经知道了仍然进行思考

  (8)分析其他人的思考方式

  (9)根据因果关系进行推导

  好了,现在ET tester都对自己的knowledge有所了解了,接下来就是对于自己的任务,哪个UC,哪个模块进行分析了,怎么分析,分析啥呢?

  (1)风险

  (2)覆盖率

  (3)Oracles

  (4)资源或限制

  (5)价值或成本

  (6)Bugs

  这些分析都做好了,那我们就可以开始进行测试了,也就是对我们的SUT进行试验,就像“question<—>answer”的循环一样。

  那我们是怎么来进行试验的,具体包括如下几个过程:

  (1)配置

  —安装产品

  —为测试执行准备测试数据和工具

  —确认产品是个足够干净的起始状态

  —根据自己的任务准备一个有激发性的问题

  (2)操作

  —通过问题对产品进行试探性的输入来使用这个产品

  —使用正确的数据和正确的业务顺序来完成正确功能的练习

  (3)观察

  —收集关于这个产品是如何工作(正确或错误的输入)的信息来评价产品是否如此工作

  (4)评估

  —应用之前得到的oracles来发现bugs

  之前也说过了,我们的ET是学习和测试设计和测试执行是同一时间完成的,那么我们的测试就是Testing to learn。这边有几个步骤:

  (1)形成一个关于产品功能的模型

  (2)去了解这个产品是想实现什么样的功能

  (3)列出那些你需要测试的产品的因素

  (4)查看那些一致性的关系且尝试多个不一样的oracle

  (5)产生测试数据

  (6)考虑其可测试性和尝试不同的有用的工具

  (7)尝试多种不同的方法去试验

  (8)报告你所发现的bug

  ET tester在试验的过程中,如果遇到比较困惑的问题该怎么呢?

  (1)简化自己的测试用例

  (2)保存当时的状态

  (3)不断重复执行自己的action

  (4)返回到一个已确认过的状态

  (5)优先使用OFAT方式(一次只考虑一个因素)

  (6)做出精确的观察

原文转自:http://www.ltesting.net