(转)探索式测试之联想输入模型

2012-05-22  白云 

    我们前面说了很多ET怎么去测试的方法,ET(探索性测试)只是一种方法,是相对于ST(基于脚本的测试)而言的,我们知道ST方法里面有个很重要的技术就是测试设计技术,使用到很多测试设计方法,比如使用等价类分析,边界值分析,因果图分析,判定表等等。这些测试设计方法可以在一定程度上可以保证测试的覆盖率。那ET要与ST去比较,也当然也有自己的测试方法去覆盖一些潜在的问题。下面将说说这些测试方法是如何应用在ET测试执行过程中。是如何让一个测试人员在一个完整的产品中实行ET测试的。
    之前也说了ET和ST的关系,在一个项目实际测试过程中,是如何应用ST和ET的测试模型,不同的模型中怎么来做ET,也就是ET中的测试方法也有不同。但其核心方法是一样的,如何快速的在ET测试中使用多种测试手段,如何根据产品的反馈快速的进行下一个用例的设计和执行,这些方法是通用的。为了让大家能够更好的理解一个优秀的ET测试人员是怎么对自己需要测试的模块进行测试的,其测试思路的变化是怎么形成的,特别举几个例子来详细说明下。
    首先需要说明的是,这个快速测试的方法是基于如下一个观点:我们把测试工作简化为先在所有输入(或运行环境等)的全体集合中选择一个子集,然后在输入时使用选中的子集,最后通过推理认定是否这些输入已经足够多了。由于输入是无限多的,我们唯一的希望就寄托在正确决定我们需要变动的输入上。如果我们选择了正确的输入,就会发现有效的bug,产品质量也就会提高。基于这些理解,这边整合了一些关于输入的测试方法,怎么在输入和输出之间发挥出好的效果,怎么更好的理解输入在测试中的作用。
    请看如下的“联想输入”(LI)模型分类:

    原子输入:简单不能再简单的输入,属于单个的事件,比如单击按钮,输入整数4等

    抽象输入:将有些相互关联的原子输入合并在一起输入,就成了抽象输入,比如输入正整数,这里面包含了原子输入4或256或2048或32768等

 

    输入筛选器:用于防止非法的输入值被传递给应用软件的功能代码,不会产生错误信息

    输入检查:属于功能代码的一部分,类似IF,ELSE语句来实现,产生特定的错误信息

    异常处理代码:把整个例程(routine)当一个整体进行异常处理并产生通用的出错信息

 

    非常规输入只在那些比较特殊的情况下才会发生,这方面需要多了解些特殊字符。

 

    如果大家都可以很好的理解了上面说到的“联想输入”模型,又了解我们在测试一个应用程序的目的时,我们就可以开始对于某个应用程序进行探索性测试了,这里 再次强调,对于一个应用程序测试的目的不一样,其使用探索性测试的具体模型就有所不同。就拿功能测试来说,上一篇的文章也提到了探索性测试在发现业务功能 性的问题上,没有占优势,ET主要是靠使用应用程序的功能来理解和了解到隐含的业务功能或规则,并根据这些功能和规则设计下一步的测试,由于之前我们无法 全面使用且推导出该应用程序的所能具备的所有业务功能或规则,所以我们要全神贯注的使用被测软件,并发现所能看到的或潜在的问题。

    为了更好的应用上面说到的输入模型,也更好的体会ET的基本过程,我们来实战下吧:

 

    这个是特别经典的一个应用程序(判断三角形),这个本来应该在培训或现场来应用输入模型(特别的是测试人员在使用某个输入后,怎么采用新的测试用例来验证 新的测试点的),那在本文中,就只能看看各位怎么来初步应用该模型了,其实细心的人也应该看到,输入模型里面也用到了如果应用程序是这么反应的,那就要去 更多的关注测试其他的什么。

    现在给测试人员的任务就是:在15分钟内(期间可以问任何关于程序的问题),尽自己最大能力找到这个应用程序的所有bug。这边就大概说下怎么来应用“联想输入”模型在这个SUT的ET中(重点是应用模型,而不是正式的ET实践流程):

(1)              首先我们好好理解前面的一段文字,这个其实就是使用说明书,给用户看的,测试人员进行ET需要站在用户的角度去使用该应用程序(确定knowledge)。

(2)              分析出原子输入:Side A,Side B,Side C,Check button

(3)              选择一个原子输入项:Side A,猜测其合法输入(如果无法得到这个Oracles)是什么,暂时假设为大于0的数字。

(4)              在这些合法输入里面找出哪些是常规输入,非常规输入;对于Side A来说,就是大于0的整数,还有其默认值(为空),还有非常规输入,考虑带有小数点的数字,是否支持16进制(带有a-f),是否支持+,-,*,/等特殊字符

(5)              在考虑非法字符输入的时候,通过check运行,来确定该应用程序对于非法字符是怎么处理的,在这里就是输入检查情况,提示信息为“Not a Triangle”;这里还需要考虑字符(a-z,A-Z)在数字前面,还是在数字后面

(6)              在对于所有原子输入项按照模型分解完后,就分析出抽象输入,在本例中,就是Side A 和Side B 和Side C之间的关系来判断是否是三角形了,如果是三角形,是什么类型的三角形了。首先找到这些关联关系,还要确定每个关联关系对应的正确输出是什么

(7)              识别出所有关联关系后,就使用抽象输入来验证这些关系后的结果,这里还可以多回忆下在选择某个原子输入的时候,其输出是什么;比如这里我们可以看到 Side A 输入为f33 或33f,输出结果是一样;这时如果我们Side A,Side B,Side C 都输入f33,发现输出是正确的;但这时如果我们把前面的f去掉,都是33,发现输出也是正确的(等边三角形),但如果我们在某一个原子输入项后面加个f 呢,也就是Side A= 33f,Side B,Side C 还是33,这时就发现输出是错误的了(还是等边三角形),还可以改变其他的原子输入项进一步验证

(8)              再通过不同的顺序来进行Side A 和Side B 和Side C的原子输入,判断之间是否存在先后顺序关系,从来得出不一样的结果,在本例中,不存在这个关系

(9)              找到应用程序对应的所有输出,包括非法输出。本例中,有2个输出结果:Results 和下面的图显示。这2个结果之间的关系也要考虑,是否有必然的一致性,找到Results对应的所有结果:非三角形,一般三角形,等腰三角形,等边三角 形。选中某一个输出,反推出应采用的输入,比如选择等边三角形,可以采用输入:1,1,1或222,222,222或1234567890, 1234567890,1234567890等; 还要考虑输出的持续性和间断性。就是多次输入都产生同一个输出,另外一个就是多次输入都产生不同的输出(这里主要检验是否保留中间结果)

(10)           考虑抽象输入的时候,需要不断的变化原子输入的值,这里强调多考虑最大值的表现形式,对于本例来说,你可以输入很多很多数字或字符,无法确定最大值,这时还需要更多输入以便可以探索到这个原子输入Side A的可接受的输入值,根据输入框的接受范围,当我们输入很大的值时或超长的字符时(大于10W),再次运行check,发现该应用程序崩溃了

    以上是粗略的介绍了应用“联想输入”模型来进行ET实战,由于不能演示操作该应用程序,无法非常完整的应用该模型测试这个应用程序,也不能很好的显示如果程序给出某个结果后,又怎么想出下一个测试思路的,但上面还是给出了一些想法。希望大家能很好的理解该模型,并真正的应用在项目的应用程序中。可以看到要能完全的应用ET在项目的测试过程中,我们需要更多的模型去支撑(还有场景/漫游模型等),只要我们能够熟练的练习和应用这些模型,我们就不用花太多的时间去写测试用例了,完全在测试过程中,就能控制整个质量和进度,但从输出中总结出业务功能或规则并制定新的测试思路,确实需要某些经验的积累。

    我们需要更多的练习,怎么去应用模型,我们可以经常找到这些案例去练习我们掌握模型的程度,比如淘宝网的邮箱注册页面(应用过程中会逐渐学会了测试设计方法):

 

    或者淘宝卖家的发布宝贝页面:

 

    如果我们对于上面2个基础功能进行了很好的ET测试设计(ET测试执行之前能想到的测试思路),那么就完成了ET测试第一层次的阶段。这里需要说明的是在测试单个功能时,还需要考虑到运行环境的变化(驱动程序,代码,文件,路径,设置等)。我们把每个Session具体的测试模型建立后,ET测试就是试图把制定计划,进行测试,重新制定计划等多个过程有机的结合起来,虽然每次只前进一小步,但这每一步都由本次软件运行状况,通过输入表现出来的各种行为和 蛛丝马迹来确定的。

    我们可以看到,每一个确定出来的Session都可以使用到该模型进行测试,但Session和Session之间的测试呢,整个Charter的测试策略呢?下面将会说另外一个模型来解决这个问题。

---------------------------------------------------------------------------------------------------------------

转自:http://blog.sina.com.cn/s/blog_6cf812be0100nnyx.html

369°/3649 人阅读/5 条评论 发表评论

付民  2012-06-19


白云  2012-06-20

付民:


熊志男  2012-06-21

ET现在很流行啊


白云  2012-06-21

熊志男: ET现在很流行啊
是啊。。可是不晓得ET怎么保证测试覆盖率。。总感觉就是依靠头脑风暴。。不是很理解。。


熊志男  2012-06-21

白云: 是啊。。可是不晓得ET怎么保证测试覆盖率。。总感觉就是依靠头脑风暴。。不是很理解。。
感觉ET还是要和ST相结合才可以? 对ET了解还不是很多


登录 后发表评论