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

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

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

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

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

一、等价类划分法

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

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

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

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

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

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

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

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

二、边界值分析法

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

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

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

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

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

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

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

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

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

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

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

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

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

当然,如果你认同我的观点,欢迎分享文章到朋友圈 + 点个「在看」让更多人看到,谢谢。


↙↙↙阅读原文可查看相关链接,并与作者交流