4、如何缩减这些case
覆盖率目标达到了,但是有162个case,除了单个页面的功能验证,我们还要进行这么多的组合case测试,工作量太大。那么如何缩减这些case?
观察这些case,如果我们挨个做,很多步骤是重复的。例如,上面有这样4个case:
0 3 2
3 2 4
2 4 7
4 7 4
这4个case可以首尾相接,变成 0 3 2 4 7 4。把case中有重复的步骤合起来,4个case变成了一个case。
这个思路不错!按照这个思路,我们可以将case合并起来,4合1,case数量大大缩减。
当然,不会那么巧,所有的case都能4合1、3合1,我们还会有些疑问:
1)是不是所有的case都可以合并? 还是上面的例子只是个特例?
2)合并到什么程度?是否需要把10多个三步操作都合并起来,得到一个20多步的操作? 这个问题经过讨论,一般认为操作步骤在6~8步比较合理,组合的case不是很大,所能验证的内容也比较多,对于测试人员来讲是最“舒服”的。
这个思路是不是可行,我们先合并一下试试看!
5、合并后的结果
有了思路就开始做。
先尝试一下把这162个小于3步的操作合并成一些6步的操作。我们采用这样的算法:
1)先算出所有6步操作,记为集合A; 将所有小于等于3步操作的集合记为B;集合C为最终结果集合,目前是空集;
2)算出每一个6步操作能够包含几个2-3步的case,并将包含最大值记为max;
3)如果max>1,则将能够取得max值的那个6步操作,加入集合C;把这个6步操作和其所包含的2-3步操作从各自的集合中删除;返回2继续;
4)如果max=1,则将集合B中剩余的元素全部加入C中,得到结果集合C,退出
简言之,算法会从所有6步操作的集合中选出能够包含这162个case的最小集合,其中可能有部分case无法合并,无法合并的case直接进入结果集。这个算法可能不是最优的,但是已经尽可能找到了那个最小集。
经过算法合并以后,得出了如下结果:
用多步操作来合成3步操作,需要 35个case,这35个case覆盖了162个case中的151个:
0 2 3 2 3 4
0 3 7 2 4 1
0 4 2 6 2 1
4 7 5 8 4 3
2 6 5 9 5 1
5 2 6 3 7 1
5 3 7 3 7 4
5 4 3 2 6 1
。。。。。。