Operating System
Win98
Win2K
WinXP
Printer
HP 4050
HP 4100
要测试全路径,测试用例必须如下:
CASE | OS | Printer |
1 | Win98 | HP 4050 |
2 | Win98 | HP 4100 |
3 | Win2K | HP 4050 |
4 | Win2K | HP 4100 |
5 | WinXP | HP 4050 |
6 | WinXP | HP 4100 |
但如果我们加上第三个参数
Duplex Print
Y
N
CASE | OS | Printer | Duplex |
1 | Win98 | HP 4050 | Y |
2 | Win98 | HP 4100 | Y |
3 | Win2K | HP 4050 | Y |
4 | Win2K | HP 4100 | Y |
5 | WinXP | HP 4050 | Y |
6 | WinXP | HP 4100 | Y |
7 | Win98 | HP 4050 | N |
8 | Win98 | HP 4100 | N |
9 | Win2K | HP 4050 | N |
10 | Win2K | HP 4100 | N |
11 | WinXP | HP 4050 | N |
12 | WinXP | HP 4100 | N |
每个参数的所有组合共有12个TC(3*2*2)。
但是,我们真正需要的是,保证每个参数的每个值成对出现在至少一个用例中。那么,我们得到更少的用例。我们实际上只需要设计6个TC。
CASE | OS | Printer | Duplex |
1 | Win98 | HP 4050 | Y |
2 | Win98 | HP 4100 | N |
3 | Win2K | HP 4050 | N |
4 | Win2K | HP 4100 | Y |
5 | WinXP | HP 4050 | Y |
6 | WinXP | HP 4100 | N |
如果三个参数中一个参数的某个值,与其他两个参数的某值组成的测试用例将引发一个bug,我们已经在测试集中包含了它。不过,如果是三个特定值的组合引发了一个bug,这个测试集可能会遗漏这个特定的TC,但是至少我们把任意两两组合的情况都包含了。
比如我们有10个参数,每个参数有26个值,所有排列组合的TC共有141,167,095,653,376(26^10)。运用Allpairs算法仅需要1094个TC。Allpairs的覆盖比全路径覆盖要容易实现和测试得多。
利用Allpairs设计的TC结果如下:
图片上传功能暂时关闭,敬请谅解。
第一部分是TC。“pairings”列显示的是符合的对数。如第3行”Win98 HP4050 Y”符合”Win98
HP4050”(第12行)、”
HP4050 Y” (第24行)、Win98 Y” (第18行)。
第二部分是帮助你了解两两成对组合的情况。列出了每对的情况,在第一部分TC中包含的次数,是哪个TC包含的。
不需要关心的参数值。有时我们不需要关心TC的某些参数。因为它的成对组合情况已经全部被覆盖了。这种情况下我们选取最少的成对作为该TC的测试数据。Allpairs用”~”表示无关的参数。具体例子可以看原文[1]。
备注:
测试设计
1、 选取合理的测试参数和值。注意遗漏。
2、 当一个无关紧要的值(Allpairs标记为”~”),选取最可能失败的值。
其他工具
说了一个收费的工具(6000刀),产生的用例更少,但是Allpairs是免费的工具。
个人观点:
1、大而明显的缺陷就是文中描述的,可能会遗漏某些特定值的组合,遗漏bug。这时需要定位到底是由哪个或者哪几个因素造成的。热议问题之一,测试绝非易事。
2、这种算法关注输入情况,还没有考虑到输出。
3、基于3种或3种以上的参数价值较高,参数越多价值越高。如果我们测试中普遍出现的只有2维参数,没有必要采用此种算法。
原文地址:
[1] A free, open source tool to produce pairwise test cases,http://www.satisfice.com/tools/pairs.zip。一个免费开源的用来产生pairwise测试样例的小工具。