结对测试工具PICT用户手册(4)——模型选项

来源:互联网 发布:美国儿童编程 编辑:程序博客网 时间:2024/06/07 21:16

模型选项

约束

约束允许指定参数的限制。在前面的分区示例中,{ {FAT,5000 }将出现在至少一个测试案例中。但是,FAT文件系统不能创建大于4096 MB的卷。请注意,不应该简单地从测试套件中删除这些不符合的测试用例,因为一个非法的测试用例可能覆盖到某些没有出现在其它有效用例中的可能有效的对。为了避免漏掉有效的值对,应该在生成测试用例的过程中消除无效的组合。可以像下面的例子这样在PICT中指定约束:

 

Type:          Primary, Logical, Single, Span, Stripe, Mirror, RAID-5

Size:          10, 100, 500, 1000, 5000, 10000, 40000

Formatmethod:  quick, slow

Filesystem:    FAT, FAT32, NTFS

Clustersize:   512, 1024, 2048, 4096, 8192, 16384, 32768, 65536

Compression:   on, off

 

IF [File system] ="FAT"   THEN [Size] <= 4096;

IF [File system] ="FAT32" THEN [Size] <= 32000;

 

约束可以分为两类:条件约束和非条件约束(三元运算符)。

条件约束

术语[参数]关系值是谓词的原子部分。可以使用以下关系::=,>,>,>,<,>,LIKE。LIKE是一个操作符(*通配符匹配任意字符,?一个字符)。

 

[Size] < 10000

[Compression] ="OFF"

[File system] like"FAT*"

 

运算符IN允许指定一组明确满足关系的值.:

 

IF [Cluster size]in {512, 1024, 2048} THEN [Compression] = "Off";

IF [File system]in {"FAT", "FAT32"}   THEN [Compression] ="Off";

 

IF,THEN,和ELSE可能包含由逻辑运算符加入的多个术语:NOT,ANT和OR。为了更改默认运算符优先级,可以使用圆括号:

 

IF [File system]<> "NTFS" OR

 ( [Filesystem] =  "NTFS" AND [Cluster size] > 4096 )

THEN [Compression]= "Off";

 

IF NOT ([File system] = "NTFS" OR

      ( [File system] = "NTFS" AND NOT[Cluster size] <= 4096 ))

THEN [Compression]= "Off";

 

参数可以与其他参数进行比较,如在本例中:

#

# Machine 1

#

OS_1:  Win2000, WinXP

SKU_1: Professional, Server, Datacenter, WinPowered

LANG_1: EN, DE

 

#

# Machine 2

#

OS_2:  Win2000, WinXP

SKU_2: Professional, Server, Datecenter

LANG_2: EN, DE

 

IF [LANG_1] =[LANG_2]

THEN [OS_1]<> [OS_2] AND [SKU_1] <> [SKU_2];

无条件约束(不变量)

不变量声明了一个域始终有效的限制.:

#

# At least oneparameter must be different to be a meaningful test case (use the OR operator)

#

 

[OS_1] <>[OS_2] or [SKU_1] <> [SKU_2] or [LANG_1] <> [LANG_2];

 

#

# All parametersmust different (use the AND operator)

#

 

[OS_1] <>[OS_2] and [SKU_1] <> [SKU_2] and [LANG_1] <> [LANG_2];

参数类型

PICT使用参数类型的概念。有两种类型的参数:字符串和数字。参数只有它的取值是数值时才被认为是数字。如果一个值有多个名称,只有第一个计数。在评估约束时,类型是唯一重要的。只能将数值参数与数字进行比较,将字符串参数与其他字符串比较。例如:

 

Size:  1, 2,3, 4, 5

Value: a, b, c, d

 

IF [Size] > 3THEN [Value] > "b";

 

字符串比较是默认词典序的,不区分大小写。可以通过 / C选项设置大小写敏感。数值作为数字进行比较。

别名

使用别名可以为一个值指定多个名称。多个名称不改变模型的组合复杂性。不管一个值有多少个名称,它被视为一个实体。唯一的区别体现在输出中;任何测试用例,通常会通过它的一个名称来代替。下面的示例显示了别名的实际应用。在大多数情况下,你可以在微软的Windows 2000 Server和微软Windows 2000 Advanced Server中忽略他们的差异。因此,测试人员可能决定只测试一个版本,从而减少测试用例的数量。然而,为了增加测试的信心,你可能会决定将测试版本互换代替。指定一个具有两个名称的值将导致在不添加额外的测试用例的情况下,输出不确定的结果。

默认情况下,名称应分“|”(管道)分隔,也可以通过使用/a选项来设置其它分隔符。

#

# Machine 1

#

OS_1:  Win2000, WinXP

SKU_1: Professional, Server|AdvServer, Datacenter, WinPowered

LANG_1: EN, DE

 

#

# Machine 2

#

OS_2:  Win2000, WinXP

SKU_2: Professional, Server|AdvServer, Datecenter

LANG_2: EN, DE

 

#

# WinXP is alwaysProfessional in our case

#

if [OS_1] ="WinXP" then [SKU_1] = "Professional";

if [OS_2] ="WinXP" then [SKU_2] = "Professional";

 

#

# NoGerman WinPowered

#

if [SKU_1] ="WinPowered" then [LANG_1] = "EN";

 

#

# Let’s nottest the same OS on both sides

#

[OS_1] <>[OS_2];

 

注:当评估约束,PICT只使用第一个名字。例如,[ sku_1 ] =“Server”将匹配第2个值。但[ sku_1 ] =“AdvServer”将匹配不到任何值。另外,PICT只使用第一个名字来确定一个值是数值与否。

非法性测试

除了测试有效的组(称为“正向测试”),通常还需要使用允许范围以外的值来测试程序是否正确处理错误。每个“负向测试”测试用例应该只有一个无效值,因为大多数应用程序在检测到第一个错误时会执行一些失败的操作。出于这个原因,一个被称为输入掩蔽的问题,会发生在非法性测试中。一个无效输入阻止另一个无效输入被测试。

考虑以下函数需要两个参数:

float SumSquareRoots(float a, float b )

{

      if (a < 0 ) throwerror;           // [1]

      if (b < 0 ) throwerror;           // [2]

      return ( sqrt(a ) + sqrt( b ));

};

虽然函数中,a和b可以取任意值,但是只对非负数的计算是有意义的。因此,函数通过[ 1 ]和[ 2 ] 执行参数验证。现在,假设一个测试用例(A = 1,B = - 1)被用来做非法性测试。在这里,a= - 1 其实掩盖了b=-1,因为检查[ 2 ]从来没有得到执行。如果没有单独验证[ 2 ]的用例,这种错误场景将无法被测试到。

为了防止输入屏蔽,重要的是在同一测试用例中不使用两个无效值(两个不同的参数).。带前缀“~”的任意值都是无效的。可以通过选项/n 指定一个其它的前缀。

#

# Trivial modelfor SumSquareRoots

#

 

A: ~-1, 0, 1, 2

B: ~-1, 0, 1, 2

在这个例子中,所有可能的合法值对都会被覆盖到,同时,所有可能的非法值都会和所有合法值组对至少一次。

A      B

2      0

2      2

0      0

0      1

1      0

2      1

0      2

1      2

1      1

~-1    2

1      ~-1

0      ~-1

~-1    1

2      ~-1

~-1    0

注:

1 图不包括前缀作为值的一部分中的比较。在约束中,使用没有前缀的值.。一个有效的约束将是:if[ A ]= - 1,then [B] = 0。前缀也不影响值的类型。例如,上述示例中的两个参数都是数值的,尽管在一些值中有非数值char“~”。前缀将出现在输出中。

2 如果一个值有多个名称,只有在第一个名称上加前缀会使值非法。

权重

使用权量,可以使PICT倾向于某些取值。一个权重可以是任何正整数。如果不明确指定不同的权重,PICT默认使用“1”:

 

#

# Let’s focuson primary partitions formatted with NTFS

#

Type:          Primary (10), Logical, Single, Span, Stripe, Mirror, RAID-5

Formatmethod:  quick, slow

Filesystem:    FAT, FAT32, NTFS (10)

 

重要提示:权重值没有绝对意义。例如,当参数定义如下:

 

File system:    FAT, FAT32, NTFS (10)

 

这并不意味着将出现在输出十倍fat或fat32。此外,你不能确定你所指定的权重会起作用,因为PICT必须处理两个潜在矛盾的要求:

1 以最小数量的测试用例覆盖所有组合。

2 根据权值选择值。

(1)总是优先于(2),只有当一个值的选择不是由满足需要来决定时,权重才会被尊重(1)更具体地说,测试用例的生成过程中,对候选值,PICT总是选择一个,涵盖了大部分的还未使用的组合。有时在候选值之间有一个关系,没有一个选择比其他任何一个都好。在这些情况下,PICT使用权重做出最后的选择。你可以使用重量企图转移偏向一些值,但PICT决定是否履行这一要求,到什么程度,使用多个因素,不仅仅是通过权重来决定的。

种子

种子有以下两种可能的需求:

1允许指定必须出现在任意测试套件中的重要的组合。PICT将使用提供的必选组合初始化输出,然后完成测试用例的其它部分,同时需要确保所有n阶组合都覆盖到。

2当需要修改模型时,它可以时输出的更改最小化。你可以提供前一次结果给PICT, PICT将尽可能重用已有的测试用例。

种子行必须在单独的文件(一个种子文件)中定义。使用选项/ e指定文件位置:

pict.exe model.txt / E:seedrows.txt

种子文件和PICT的输出结果使用相同的格式。第一行包含由制表符分隔的参数名,每个后续行包含一个与值分隔的种子行。使用Windows记事本或Excel可以很容易地创建这种格式。为种子文件使用PICT输入结果的格式使得可以把一个PICT的输出结果作为种子输入到新的测试用例中。

Ver   SKU   Lang  Arch

Win2K Pro   EN    x86

Win2K       DE    x86        

WinXP Pro   EN    ia64

任何种子行都是给所有参数指定值。或者也可能省略某些参数的值,如上述种子文件第二行没有SKU的值。在这种情况下,PICT将选择SKU的最佳值。

 

重要事项:

当前模型有几个匹配种子行的规则:

1 如果一个种子文件包含一个不在当前模型中的参数,PICT将丢弃该参数所在的列。

2 如果种子行包含一个不在当前模型中的值,PICT将从种子行删除该值。PICT只会使用种子行中的有效值,一个包含了无效值的种子行将成为不完整的行。

3 如果一个种子行违反了现行的约束,PICT将忽略该行。

如果(1)或(2)发生, PICT会打印警告信息。

 

在PICT中使用种子时,有些格式会产生企业:

1 空白的参数和值名称。

2参数和值名称包含制表符。

3 对于一个参数,值的名称和别名不是唯一的。

如果在你的模型中存在上述问题,PICT也会打印警告信息。

输出的随机性

如果使用相同的模型和选项重复运行几次,每次运行将产生相同的测试用例。可以通过使用/r选项产生随机输出。随机生成将该测试套件的种子打印到错误输出流。可以使用该种子值重新创建一个测试用例集。

减少测试用例的数量

生成过程的效率在很大程度上取决于启动条件。每一个测试套件生成需要保证覆盖所有必要的组合,但一些启动点可能会导致生成测试用例更加有效。如果你需要减少测试用例的数量,可以尝试用/ r选项执行多次,然后筛选出最少的测试用例。

大小写敏感性

默认情况下,PICT所有的比较和检查,都是不区分大小写的。例如,如果有定义两个参数OS和os,PICT认为是重复的名称(参数的名称必须是唯一的)。默认情况下,PICT处理约束也是不区分大小写的:IF [OS] = "Win2K" THEN,将同时匹配Win2k和win2k的值。可以使用/ c选项指定模型区分大小写。


返回目录

0 0
原创粉丝点击