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

发表于:2012-06-25来源:新浪博客作者:JerryGao点击数: 标签:探索性测试
之前讲了些ET在项目时间过程中是怎么来使用Heuristics,这期要说下ET过程在总体上的思考和怎么样来考虑覆盖率的问题。 回到之前所说的,当我们拿到自己的任务的时候,知道了自己需要测试哪些模块,就需要一个策略去进行ET测试,我们可以考虑如下:

  之前讲了些ET在项目时间过程中是怎么来使用Heuristics,这期要说下ET过程在总体上的思考和怎么样来考虑覆盖率的问题。

  回到之前所说的,当我们拿到自己的任务的时候,知道了自己需要测试哪些模块,就需要一个策略去进行ET测试,我们可以考虑如下:

  学习这个产品:

  —–思考这个产品存在一些重要的潜在的问题

  —–思考怎么去探索这个产品才能找到这些问题

  ——一般情况下,思考怎么去探索这个产品,思考的方式有这些:

  充分利用自己现有的资源:

  —-包括:用户,文档信息,开发人员关系,同事,设备和工具,计划等

  使用一些不同的技术的混合体:

  —-包括:功能测试,域测试,压力测试,流程测试,场景测试,用户测试,风险测试,自动化测试,声明测试

  利用自己实际能够做的东西:

  —-包括:自己擅长的,最容易暴露问题的,自己的时间和精力

  另外在做ET过程中,需要不断的变化我们的测试思路去攻击SUT,但一般我们会采用哪些方法或思路去变化我们的test idea呢?

  微小的行为:其他的人或不用心的人改变了一点点思路,可能会产生新的test idea。

  随机性:能够让你从那些有选择性的偏见中走出来

  数据交换:同样的操作,在不同的数据库中,或不同的输入,会得到很不同的结果。

  平台替换:推测类似的平台,但却不支持某种操作

  时间/并发变化:同样的操作,改变依赖其发生的时间周期或并发的事件时,会得到很不同的结果。

  场景变化:同样的功能,当我们在一个不同的流程或上下文环境下,会出现截然不同的操作方式。

  状态污染: 一个复杂的系统,一般会有很多隐藏的变量,通过改变某些操作的顺序,级数,类型,会加快程序状态污染,从而发现隐藏问题。

  敏感度和期望值:不同的测试人员可能对不同的因素,会有不同的敏感,且有看到不同的区域。同一个测试人员在不同的时间可看到不同的东西。

  为了在复杂的系统中快速发现未期望的问题/持续使用才会出现难懂的问题,更多的问题,我们必须De-Focus:

  1.从一个不同的状态开始(没有必要清除状态)

  2.优先进行复杂且有条件的action

  3.从模型的变化中产生test idea

  4.质疑我们的试验流程和工具

  5.试着去观察每个东西

  6.宁愿使我们的测试很难通过,也不能太顾忌问题的重现难易程度

  下面从一个模型中来说明怎么开始ET测试,选择一个有用的,有趣的,容易开始的点:

  这里还是需要详细说明下:Knowledge,Analysis,Experiment,Testing Story.

  Knowledge: Product Story; Technical Knowledge; Domain Knowledge; General knowledge.

  Analysis: Risk; Coverage; Oracles; Resources/Constraints; Value/Cost; Bugs .

  Experiment: Configure; Operate; Observe; Evaluate.

  Testing Story: Test Plan/Report; Work Products; Status.

  上面说了很多,之前也说过,但细心地就可以发现,我们还没说Coverage这个关键东西。在ET实践过程中,同样在理论形成过程中,Coverage永远是一个很大的问题,很多人都说ET最不能保证的就是Coverage,所以不敢轻易去尝试。那么ET在Coverage是不是就是这样不靠谱呢?事实上,不管你采用ST还是ET,对于Coverage都是很难完全保证的,但我们可以在Coverage上做些努力,下面说下ET在Coverage上是怎么考虑的。

  我们说的Coverage一般就是Product coverage,同样也是这个被测产品的一部分。那么对于Product coverage又包括哪些方面的coverage:

  第一个就是Structure,也就是产品的一个因素,对于这个Structural Coverage,我们到底是测试什么呢?我们到底要cover什么呢?我们要测试的就是这个产品时怎么构成的,我们要cover的就是构成这个产品的部分。我们以打印机产品为例,看看Structural Coverage到底要考虑什么:

  ——打印需要用到的文件

  ——实现打印功能的代码模块

  ——在这个模块里面的代码语句

  ——在这个模块里面的代码分支

  可以看到这个时候我们关注的是产品的内部结构。

  第二个就是Function,也是产品的一个因素,对于这个Functional Coverage,我们到底是测试什么呢?我们到底要cover什么呢?我们要测试的就是这个产品能够做什么?我们要cover的就是这个产品做得什么样。同样以打印机产品为例,看看Functional Coverage到底要考虑什么:

  ——打印,页设置,打印预览

  ——打印range,打印复制,zoom

  ——打印所有的,当前页,或指定的range

  可以看到这个时候我们关注的是产品的功能。

  第三个就是Data,也是产品的一个因素,对于这个Data Coverage,我们到底是测试什么呢?我们到底要cover什么呢?我们要测试的就是这个产品能够对数据能够做什么?我们要cover的就是这个产品能够处理什么样的数据。同样以打印机产品为例,看看Data Coverage到底要考虑什么:

  ——打印文档的类型

  ——文档里面的元素,文档的大小和结构

  ——关于怎么打印的数据(比如zoom factor; no. of copies)

  可以看到这个时候我们关注的是产品使用过程中不同的数据处理。

  第四个就是Platform,也是产品的一个因素,对于这个Platform Coverage,我们到底是测试什么呢?我们到底要cover什么呢?我们要测试的就是这个产品依赖什么才能使用?我们要cover的就是这个产品怎么处理不同的依赖的。同样以打印机产品为例,看看Platform Coverage到底要考虑什么:

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