• 使用PICT生成成对组合进行组合覆盖测试,以及PICT和正交表的比较


    目录

    成对组合法

    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。

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

  • 相关阅读:
    Tensorflow C++部署实战-linux平台上C++编译环境建立(3)
    Vue ref属性
    fastadmin tp 安装使用百度富文本编辑器UEditor
    基于springboot、logback的日志脱敏组件
    专业,城市,院校,高考填报志愿的三要素怎么排序?
    [附源码]计算机毕业设计JAVA校园闲置物品租赁系统
    【uniapp】 video视频层级、遮挡其他弹窗或顶部导航 使用nvue覆盖
    个人网站搭建学习笔记
    开发模型的特点对照表
    牛客出bug(华为机试HJ71)
  • 原文地址:https://blog.csdn.net/jxzdsw/article/details/128026136