专栏首页sylan215 的软件测试技术学习测试用例设计的两个基本方法

测试用例设计的两个基本方法

看到标题,我想你肯定也猜到了我要说的是啥,对,就是等价类划分和边界值分析这两个方法。

如果把测试用例设计比作绝世武功的话,这两个方法就相当于武术基本功之扎马步和拉韧带,看似简单易懂,却需要精进之人每天都反复不断的刻意练习。

下面我通过一个简单的例子来说明下这两个方法在实际场景中的使用,希望对你有所帮助。

下面还是咱们多次看到的那个需求:

有一个 PC 客户端的命令行工具,这个工具可以接收三个命令行参数,其中,前两个是数字,最后一个是运算符,运算符只支持加减乘除四种,工具的功能就是把前两个数字使用运算符做下运算,然后输出运算结果。

一、等价类划分法

大家都知道等价类要区分有效等价类和无效等价类,可只是这么理论的讲,是看不出自己掌握的程度,就跟谁都会扎马步,但是扎多久,扎得稳不稳,还是需要遛遛才知道。

大家可以想想上面这个需求如果运用等价类划分法的话,应该怎么设计,下面是我设计的结果:

从我面试的经验看,很少有人能够把上面提到的所有点都答上来。

出现的主要问题有如下两类:

1、没有分类划分的意识,所以大的分类点就会漏掉,比如其中关于分隔符的隐性需求,是最容易被漏掉的点,其实按无效等价类划分,还是比较容易能想到的;

2、没有把等价类的精髓发挥出来,很多人都知道要用无效和有效的方法进行划分,但是一旦让细分到可以执行的程度时,很容易就漏掉测试点,比如有人会漏掉除数不能为 0 这样的隐性需求;

本次给的示例比较简单,但就算这样,出题的时候如果没有提示使用等价类设计方法,还会有人的用例一会来个参数类型的正面用例,一会来个参数个数的反面用例,根本就不是按照一定的思路来进行设计,只是想到哪说到哪,这样就算凑巧把测试点列举齐了,也没法保证经验的可复用性。

我得理解是,等价类划分应该是深入每个测试人骨髓的最最基本的用例设计方法,每当一个正面用例写出来之后,与之对应的一堆反面用例立马就应该出现。

二、边界值分析法

相对于等价类划分的自由度,如果刻意去使用边界值分析,可以很容易的提升覆盖率,这绝对是一个上分利器,但就是因为简单,反而让很多人容易忘却。

先看看上面计算器这个例子中,我用边界值分析法补充的用例:

相对于等价类,这用例条数简直少了太多,主要是等价类可以无处不在,有正面就肯定有反面,而且反面用例的条数都是比正面的要多。

边界值的使用范围确是很固定的,只要有边界的地方就想着去应用就好了,而对于边界来说,一个最明显的特征就是数字,所以涉及数字的地方就考虑使用边界值分析法,准没错。

比如本次需求中涉及数字的地方有这么几个:

1、三个参数:所以我有对应的参数个数的边界值分析的用例;

2、四种运算符:这个是种类的数字,不需要边界值,本次是放到等价类划分的范围里面了;

3、运算数:这种比较特殊,并没用提及到数字,但是它本身是数字类型,所以也是需要使用边界值分析法进行覆盖的,这种隐性需求是很多人容易漏掉的地方。

关于运算数,再多说几句。

有些同学在设计用例的时候,会混淆等价类和边界值的概念,比如设计运算数相关的用例会说,正常的数字和超大的数,我理解这种按边界值的说法会更好,而不是把超大数当作反面用例。

另外,当我继续追问一万算不算超大数时,很多人其实也不知道到底多大算大,所以这明显是没有按照边界值的思路进行设计,因为连边界都不知道,那当然也没法把边界值需要覆盖的其他测试点考虑全的了。

总之,等价类和边界值是测试用例设计中最最基本的两个方法,作为专业测试人员,我们必须要熟练掌握到信手拈来的程度,要像条件反射一般根植在我们的大脑中。

以上,我对等价类和边界值用例设计方法做了简单总结,不知道你工作过程中是否有刻意关注过这两种方法,是否已经把他们使用的滚瓜乱熟了,欢迎留言说说你的看法。

本文分享自微信公众号 - sylan215(sylan2158),作者:sylan215

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 测试用例设计过程中长期存在的两个问题

    之前在文章《需求评审之实战演练》中,我们讨论过需求的合理性和全面性问题,其实测试用例的编写也需要考虑类似的全面性和针对性。

    sylan215
  • 思维导图编写测试用例的两种格式

    2014 年之前,我们组一直使用 Excel 编写测试用例,从 2011 年开始的 3 年时间里,积累的 Excel 文件大小将近 3M,体积变大导致文件打开速...

    sylan215
  • 拿到需求,如何着手写测试用例?

    最近几天,连续有几个同学在微信中问我类似的问题「我拿到一个 XXX 需求,应该如何开始写测试用例呢?」

    sylan215
  • DOM对象与jquery对象有什么不同

    1.jQuery对象和DOM对象 DOM对象,即是我们用传统的方法(javascript)获得的对象,jQuery对象即是用jQuery类库的选择器获得的对象;...

    用户5640963
  • pandas库Series类型与基本操作

    py3study
  • 一个小故事读懂Memcached漏洞

    0x00 有人的地方就有江湖 只要有人,就有恩怨,有恩怨,就有江湖。小黑同学早就看班里的小白不顺眼了,恰逢今天是3月2日元宵节,所谓月黑风高杀人夜,今晚就给他整...

    FB客服
  • 巧用flashback database实现灵活的数据回滚(r5笔记第16天)

    之前写了一篇博文分享了使用flashback database的特性来在测试环境中避免重复导入大批量的数据,造成时间和存储空间的浪费。http://blog.i...

    jeanron100
  • java设计模式(4)-原型设计模式

    这篇推文学习创建型模式最后一种-原型模式,该模式的思想是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象,以便使用

    爱敲代码的猫
  • 响铃:强者恒强,云计算行业要“赢家通吃”?

    云计算的势头不可谓不迅猛。7月26日,在北京召开的2017可信云大会发表《中国公有云发展调查报告(2017)》,2016 年,中国公有云市场整体规模达到170....

    曾响铃
  • SpringBoot2.x系列教程(六十)Java Bean Validation详解及国际化集成

    针对web项目,对外接口的参数校验是必不可少的。如果接口参数比较少,还可以通过ifelse进行逐个校验,但如果参数比较多,这种方式来进行编写代码会变得非常冗余。

    用户1161110

扫码关注云+社区

领取腾讯云代金券