目录

成对组合法

PICT

基础使用

选项

Constraint(约束条件)

weight值

MPLS-TE FRR使用举例

SNMP使用举例

成对组合VS正交表


成对组合法

软件中存在很多由于条件condition/维度/输入input/因素factor的等价类/值/水平的组合导致的bug。但是完全组合可能数目太多,统计数据显示由于三个或者更多个条件的组合导致的bug比例很小,所以一种高性价比的暴露组合型bug的方式是覆盖成对组合。

成对组合:每个条件中的每个等价类都和其它条件中的每个等价类同时出现过。即order为2的组合。

等待类的组合和数学中所说的组合不是一个概念。数学中的组合是一个集合内值的组合,等价类的组合是多个集合之间值的组合。

一旦成对组合测试发现了组合型的bug,可以考虑进一步加大组合的order。

人工列出等价类的成对组合,工作量很大,我们可以使用PICT来帮助我们自动生成成对组合。

PICT

PICT(Pairwise Independent Combinatorial Testing)是微软开发的一个免费的命令行工具。用来自动生成符合成对组合要求的compact的组合方式。虽然结果不是唯一的正确答案,但是却一定满足成对组合原则。其实,PICT可以生成任意order的组合。Pairwise Testing in the Real World: Practical Extensions to Test-Case Scenarios | Microsoft Learn有作者对PICT的介绍,自带帮助文档对用法进行了说明。

Windows上可以从Pairwise Testing | Combinatorial Test Case Generation下载msi文件进行安装。

Linux上安装和使用:

# git clone https://github.com/microsoft/pict.git

# cd pict

# make

# cp pict /usr/local/bin

# pict就可以运行程序了

基础使用

使用方法非常简单,首先按照要求构造输入文件。

输入文件格式要求:每一行写一个parameter。格式:parameter_name: value1,value2,value3。Parameter和vlaues之间用英文冒号隔开,value之间用英文逗号隔开。Parameter也可以叫做condition(条件)、factor(因素/因子)、input(输入),value常常是不同的等价类。

支持汉字。

Parameter、value前后的空格、tab键不影响功能。

允许任何位置的空行,空行对结果没有影响。

“#”开头的行是注释。

注意:一行中最后一个value后面不要加英文逗号,否则软件理解为最后有一个值为空的value。

使用命令pict生成组合,比如# pict input.txt > output.txt,pict从input.txt中读取内容,成对组合的结果就放在了output.txt中了。会自动创建output.txt,如果output.txt已经存在,则覆盖原有内容,写入新结果。

举例:

input.txt的内容为

Operate System:     Window XP,Window 7,Vista

Language:             Chinese,English,German

IE:                        5.0,6.0,7.0

则output.txt的内容为:

Operate System      Language IE

Window 7       German   5.0

Vista       Chinese   7.0

Window XP    English   5.0

Vista       German   6.0

Window XP    Chinese   6.0

Window 7       English   7.0

Vista       Chinese   5.0

Window XP    German   7.0

Window 7       Chinese   6.0

Vista       English   6.0

完全组合有27种,成对组合有10种。

也可以将结果放在excel文档里,例如C:\Program Files\PICT>pict input.txt > output.xls。

但是不能使用excel文档作为输入文件。

选项

选项以/开头,注意选项的“/”前面有空格!!!

缺省相同的input文件,得到的组合完全相同。

/r选项使得每次输出的组合不一样,程序反馈使用的seed。例如:

C:\Program Files\PICT>pict input.txt /r > output12.xls

Used seed: 1573

C:\Program Files\PICT>pict input.txt /r > output13.xls

Used seed: 1576

output12.xls和output13.xls包含的组合的数目相同,但是因为使用的seed不同,所以内容不相同。使用相同的seed得到的组合就完全相同。

C:\Program Files\PICT>pict input.txt /r:1573 > output14.xls

Used seed: 1573

output14.xls的内容就和output13.xls的内容完全相同。

如果修改了input.txt的内容,但是想生成的组合变化尽量小,那么可以在每次生成组合时指定相同的seed。

/e

指定一个文件,其中有一定要覆盖的组合。

第一行是parameter,之间使用tab隔开。其余行是value,之间也用tab隔开,如果某个parameter的value不做限定,则用tab代替。例如下面第二行中没有指定语言。

Operate System      Memory  CPU Language IE

Window XP    2G   single      English   5.0

Window 7       512M      quad       7.0

将xls的内容贴到seed.txt可以不做修改直接使用。

可以直接使用xls文件作为seed文件,效果和使用txt seed文件相同。例如:

C:\Program Files\PICT>pict input.txt /e:seed.xls > output.xls

Order of combinations

实际上PICT不只可以生成成对组合。它还允许修改order of combination。例如:

C:\Program Files\PICT> pict input1.txt /o:3 > output1.txt

生成order of combination为3的组合。

/o:max等效于/o:number_of_factors。

可以设置部分参数的order of combination不同于整体的。如果部分参数之间的相互作用更紧密,或者经验表明某部分参数的组合出现了更多问题,可以设置这部分参数组合的order大于整体的order。例如input文件的内容为:

factor1 @3: 1,2,3,4

factor2 @3: 1,2,3

factor3 @3: 1,2

factor4: 1,2,3

factor5: 1,2,3,4,5

前三个参数order of combination是3。

Constraint(约束条件)

可以设置约束条件(依赖关系dependency/相互关系interaction)

支持语句if、then、else(不区分大小写)

支持

逻辑运算符:not、and、or(不区分大小写)

关系运算符:=、<>、>、<、>=、<=

支持使用圆括号改变运算符的优先级

使用parameter时要加方括号,调用字符串类型的value需要加双引号,调用数字类型value时不加双引号。

例1:要求操作系统为Vista时,内存只能为2G。

Operate System:Window XP,Window 7,Vista

Memory:512M,1G,2G

CPU:Single,dual,quad

if [Operate System] = "Vista" THEN [Memory] = "2G";

例2:数据中心SDN网络中,如果两个vm属于不同的VPC,那么它们一定属于不同的subnet。

diff_server: True,False

diff_subnet: True,False

diff_vcp: True,False

primary_fip_diff_domain: True,False

secondary_fip_diff_domain: True,False

if [diff_vcp] = "True" THEN [diff_subnet] = "True";

如果存在约束条件,一定要在输入文件中写明,否则会产生无效的组合,这可能导致部分应被覆盖的组合没有被覆盖到。

weight值

在产生组合数量不变的基础上,可以让PICT侧重使用某个参数的某个值:默认weight值是1,weight值越高使用的次数越大。

input.txt内容如下:

CRC位数:CRC16,CRC32(10000)

帧封装格式:SDH(10000),SONET

数据类型:IP数据(10000),MPLS数据

接口速率:155M,622M,2.5G,10G,40G

factorx:1,2,3

则尽量多的使用CRC32、SDH和IP数据。

Weight使用指南:

想让PICT略多的使用某个值,将这个值的weight设置为10,如果想尽可能的多用这个值,则把weight设置为10000。

值越少的参数设置weight越有效,值最多的参数设置weight可能等于没有设置(因为没有调整取值的余地)。

MPLS-TE FRR使用举例

MPLS-TE FRR组合因素和等价类:

接口类型:以太,POS

LSP建立方式:手动,自动

IGP:ospf,isis

引流方式:静态路由,PBR,igp-shortcut

保护类型:链路保护,节点保护

Egress空标签类型:显式空,隐式空

MP空标签类型:显式空,隐式空

PLR和ingress重合:是,否

MP和egress重合:是,否

限制条件:因为DUT空标签类型是全局设置的,所以MP和egress重合时,Egress空标签类型和MP空标签类型一定相同。

if [MP和egress重合]="是" then [Egress空标签类型]=[MP空标签类型];

全组合,PICT生成576种组合。

order为2时,PICT生成9种组合。

接口类型

LSP建立方式

IGP

引流方式

保护类型

Egress空标签类型

MP空标签类型

PLR和ingress重合

MP和egress重合

以太

手动

ospf

静态路由

节点保护

显式空

显式空

POS

自动

isis

静态路由

链路保护

隐式空

隐式空

POS

自动

ospf

igp-shortcut

节点保护

隐式空

显式空

以太

自动

isis

PBR

节点保护

隐式空

隐式空

POS

手动

ospf

PBR

链路保护

显式空

隐式空

以太

手动

isis

igp-shortcut

链路保护

隐式空

隐式空

以太

自动

isis

PBR

链路保护

显式空

显式空

POS

手动

isis

igp-shortcut

链路保护

显式空

隐式空

以太

自动

ospf

静态路由

节点保护

显式空

显式空

SNMP使用举例

input.txt的内容

view type: include(100), exclude

auth type: noauth, authonly, priv

hash type: no type, md5, sha

trap version: v1, v2c

trap type: all, interface, sys-start

trap-source: default, loopback

if [auth type] = “noauth” then [hash type] = “no type”;

if [auth type] in {“authonly”, “priv”} then [hash type] in {“md5”, “sha”};

不考虑约束条件时,全组合3*3*3*2*2*2*=216种

PICT生成的成对组合只有9种。

view type

auth type

hash type

trap version

trap type

trap-source

exclude

priv

sha

v1

all

loopback

include

noauth

no type

v2c

all

default

exclude

authonly

md5

v2c

interface

default

include

authonly

md5

v1

all

loopback

exclude

authonly

sha

v1

sys-start

default

include

noauth

no type

v1

interface

loopback

exclude

noauth

no type

v2c

sys-start

loopback

include

priv

sha

v2c

interface

default

include

priv

md5

v1

sys-start

loopback

成对组合VS正交表

正交表也能满足成对组合的要求。这里对比一下成对组合和正交表。


成对组合(以PICT为例)

正交表

组合数

所有因子水平数相同时,组合数通常多于正交表,但是差距不大。因子水平数不同时,组合数通常少于正交表。

所有因子水平数相同时,组合数通常少于PICT。因子水平数不同时组合数通常多于PICT。

生成组合的方便程度

软件自动生成组合,非常方便

不方便,需要查找、套用、裁剪正交表。

是否支持因子之间的约束条件

支持

不支持,如果有约束条件,正交表将很难应用。

值的侧重

支持(可以指定侧重使用哪些值)

不支持

值分布的均衡性

差一些(虽然可以设置值的weight值相同,但有些时候仍然不够均衡)

非常均衡(对于寻找最佳配置、最佳化学反应的条件等应用非常合适)

结论:

如果所有因子水平数相同,并且因子之间没有约束条件,不需要设置值的侧重,则可以使用正交表,否则使用PICT。

要寻找最佳配置、最佳化学反应条件时,建议使用正交表。