对,就是等价类划分和边界值分析这两个。
下面我通过一个简单的例子来说明下这两个方法在实际场景中的使用,一起来看个需求:
有一个 PC 客户端的命令行工具,这个工具可以接收三个命令行参数,其中,前两个是数字,最后一个是运算符,运算符只支持加减乘除四种,工具的功能就是把前两个数字使用运算符做下运算,然后输出运算结果
一、等价类划分法
大家都知道等价类要区分有效等价类和无效等价类,可只是这么理论的讲,是看不出具体的程度。想想上面这个需求如果运用等价类划分法的话,应该怎么设计?下面是个例子:
如果你设计的用例没有能够把上面提到的所有点都答上来的话。对比一下,问题在哪儿?
出现的主要问题有如下两类:
1、没有分类划分的意识,所以大的分类点就会漏掉,比如其中关于分隔符的隐性需求,是最容易被漏掉的点,其实按无效等价类划分,还是比较容易能想到的;
2、没有把等价类的精髓发挥出来,很多人都知道要用无效和有效的方法进行划分,但是一旦让细分到可以执行的程度时,很容易就漏掉测试点,比如有人会漏掉除数不能为 0 这样的隐性需求;
本次给的示例比较简单,但就算这样,出题的时候如果没有提示使用等价类设计方法,还会有人的用例一会来个参数类型的正面用例,一会来个参数个数的反面用例,不是按照一定的思路来进行的设计,也没法保证经验的可复用性。
二、边界值分析法
相对于等价类划分的自由度,如果刻意去使用边界值分析,可以很容易的提升覆盖率,这绝对是一个上分利器,但就是因为简单,反而让很多人容易忘却。
先看看上面计算器这个例子中,用边界值分析法补充的用例:
相对于等价类,这用例条数简直少了太多,主要是等价类可以无处不在,有正面就肯定有反面,而且反面用例的条数都是比正面的要多。
边界值的使用范围确是很固定的,只要有边界的地方就想着去应用就好,而对于边界来说,一个最明显的特征就是数字,所以涉及数字的地方就考虑使用边界值分析法。
比如本次需求中涉及数字的地方有这么几个:
1、三个参数:所以有对应的参数个数的边界值分析的用例;
2、四种运算符:这个是种类的数字,不需要边界值,本次是放到等价类划分的范围里面了;
3、运算数:这种比较特殊,并没用提及到数字,但是它本身是数字类型,所以也是需要使用边界值分析法进行覆盖的,这种隐性需求是容易漏掉的地方。
关于运算数,有些设计用例的时候,会混淆等价类和边界值的概念,比如设计运算数相关的用例会说,正常的数字和超大的数,这种按边界值的说法会更好,而不是把超大数当作反面用例。
另外,当追问一万算不算超大数时,其实也不知道到底多大算大,所以这明显是没有按照边界值的思路进行设计,因为连边界都不知道,那当然也没法把边界值需要覆盖的其他测试点考虑全的了。
总之,等价类和边界值是测试用例设计中最基本的两个方法,我们必须要熟练掌握。