成对组合覆盖与PICT的应用.docx
- 文档编号:10727089
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:11
- 大小:60.76KB
成对组合覆盖与PICT的应用.docx
《成对组合覆盖与PICT的应用.docx》由会员分享,可在线阅读,更多相关《成对组合覆盖与PICT的应用.docx(11页珍藏版)》请在冰豆网上搜索。
成对组合覆盖与PICT的应用
成对组合覆盖与PICT的应用
一、成对组合覆盖简介
成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的。
Cohen等人应用成对组合覆盖测试技术对Unix中的“Sort”命令进行了测试。
测试结果说明覆盖率高达90%以上。
可见成对组合覆盖是一种非常有效的测试用例设计方法。
成对组合覆盖要求任意两个因素〔输入条件〕的所有水平组合至少要被覆盖1次。
组合覆盖的算法已经被很多工具实现,测试人员可以直接利用这些工具,例如:
TConfig、微软的PICT等。
下面介绍一下使用PICT设计测试用例的过程。
二、PICT的应用
(一)PICT概述
成对组合覆盖测试工具PICT能帮助你有效地设计软件系统测试用例和测试配置。
使用PICT生成的测试用例比手工生成的更有效。
在保证测试覆盖率的前提下,尽量缩小参数值组合的。
PS:
其实pict不单单是成对组合〔2阶〕,其实可以实现多阶组合覆盖,只是默认为2阶
(二)使用PICT组合测试用例参数
PICT以命令行方式运行。
在运行之前,需要准备一份详细描述了测试参数的模型文件。
例如,如果你想给分区和卷建立一组测试用例集,在这里需要用到以下几个参数:
------------------------------------------------------------------------------
类型:
Primary,Logical,Single,Span,Stripe,Mirror,RAID-5
尺寸:
10,100,500,1000,5000,10000,40000
格式方法:
快,慢
文件系统:
FAT,FAT32,NTFS
簇大小:
512,1024,2048,4096,8192,16384,32768,65536
压缩:
开,关
-------------------------------------------------------------------------------
这些参数可能的取值组合超过4700个。
在合理的时间范围内测试完他们那将是非常困难的一件事情。
研究说明,把所有可能的值成对进行组合能做到很好的测试覆盖且测试用例的数量由此也会变得可控。
例如,〔Primary,FAT〕是一对和〔10,慢〕是另外一对,单个测试用例可以覆盖到多个部分。
使用上面的参数运行PICT将产生60个测试用例。
Eg:
modelfile1.txt
(三)运行PICT
PICT是一个命令行工具,它接受一个纯文本文件作为输入,然后输出测试用例集。
----------------------------------------------------------------------------
用法:
PICT模型文件路径[选项]
选项:
/o:
N-组合次数〔默认:
2〕
/d:
C-值之间的分隔符〔默认:
〕
/a:
C-别名间的分隔符〔默认:
|〕
/n:
C-负值前缀〔默认:
~〕
/e:
file-种子文件
/r[:
N]-随机生成,N表示产生随机的种子
/c-模型计算区分大小写
/s-显示模型统计数据
-------------------------------------------------------------------------------
PICT安装程序将会把PICT安装到指定的路径,然后你可以从指定的目录中运行它。
要想查看上面例子的PICT输出,可使用任何像Windows®记事本®的文本编辑器创建模型文件,然后运行下面的命令:
(四)模型文件
1、模型区域
一个模型文件至少包含1个区域,最多包含3个区域:
-------------------------------------------------------------------------------
参数定义
[子模型定义]
[约束定义]
-------------------------------------------------------------------------------
模型文件中的区域应始终按照上面所列的先后顺序被显示,且不能重叠。
首先是参数定义部分,然后是子模型定义和约束定义部分。
它们之间不需要任何特殊的分隔符。
空行可以出现在任何地方。
可以用“#”开启一行注释。
1)、简单模型
为了产生一个非常基本的模型文件,你需要列出参数名称,每行一个参数和它可能的取值之间用分号分隔:
<参数名称>:
例如:
#这是一个测试创建/删除磁盘卷功能的简单模型文件
Size:
10,100,500,1000,5000,10000,40000
Filesystem:
FAT,FAT32,NTFS
Clustersize:
512,1024,2048,4096,8192,16384,32768,65536
逗号是默认的分隔符,可使用“/d:
”选项指定一个不同的分隔符。
〔模型文件中的符号都需要用英文输入法半角下输入〕
Eg:
modelfile2.txt
2)、成对和高阶生成
默认情况下,PICT生成一组成对组合且覆盖所有情况的测试用例集。
可以使用选项“/o:
N”设置比2更大的排列次数。
例如,如果指定“/o:
3”,由此生成的测试用例将涵盖所有三个一组的值,产生比成对测试更多的测试用例,这样测试的覆盖范围就更大。
对于一个简单的模型文件,PICT选项“/o:
N”的最大取值应小于等于模型文件中参数的总量。
如果N取值等于参数总量,那参数取值将会涵盖所有可能的组合。
同样,指定“/o:
1”将产生涵盖所有值一次的测试组合。
Eg:
modelfile2.txt
执行2阶〔即成对组合〕时,有56个用例。
执行3阶时〔即全部覆盖,因为只有3个参数〕,有168个用例
执行1阶时,只有8个用例〔因为其中一个参数的最多可能值为8〕
3)、子模型
子模型允许你将一些参数绑定到组中,以得到自定义的组合顺序。
在某些参数组合需要被更充分测试时,这种方式会很有用。
子模型以下面的格式定义:
〔
例如,子模型对涉及硬件和软件参数结合在一起的测试用例时是十分有用的。
没有子模型,每个测试用例将产生一个新的、唯一的硬件配置。
将硬件参数放置到一个子模型中可以产生更少的硬件配置,从而尽可能地降低测试成本。
使用创建子模型的命令可带来不少灵活性。
------------------------------------
PLATFORM:
x86,ia64,amd64
CPUS:
Single,Dual,Quad
RAM:
128MB,1GB,4GB,64GB
HDD:
SCSI,IDE
OS:
NT4,Win2K,WinXP,Win2K3
IE:
4.0,5.0,5.5,6.0
APP:
SQLServer,Exchange,Offi
{PLATFORM,CPUS,RAM,HDD}@3
{OS,IE}@2
以下图描述了上面的模型是怎么产生的:
Eg:
modelfile4.txt(60个用例)
modelfile5.txt(20个用例)
注意:
1.你可以定义尽可能多的子模型,一个参数可属于多个子模型。
模型层次结构可以只是一个层次。
2.子模型order的取值不能超过它所含参数的数量。
在上面的例子中,第一个子模型的order可以取1到4之间的值。
3.如果你没有给子模型指定order值,PICT会使用默认的order值或使用选项“/o”的值。
2、模型选项
1)、约束:
条件约束、无条件约束
约束允许你指定域的限制。
在前面的分区例子中,一对〔FAT,5000〕将至少出现在一个测试用例中。
但是,FAT文件系统不能创建大于4096MB的卷。
注意,你不能简单地从测试集中删除这样的测试用例,因为这个讨厌的用例可能覆盖一些没有出现在其它用例中但有效的测试情况。
为了防止丧失有效的测试情况,你可以在生成的过程中排除不可接受的组合。
在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[Filesystem]="FAT"THEN[Size]<=4096;
IF[Filesystem]="FAT32"THEN[Size]<=32000;
为了更能看出效果,如下例子:
Eg:
modelfile6.txt
1.条件约束
参数及其取值是谓词逻辑的原子部分。
它们之间的关系可使用这些符号表示:
=,<>,>,>=,<,<=,和LIKE。
LIKE是一个通用匹配的操作(*表示任意多个字符,?
表示任意一个字符〕。
约束分为两种:
有条件的〔if-then-else〕和无条件的。
[Size]<10000
[Compression]="OFF"
[Filesystem]like"FAT*"
-------------------------------------------------------------------------------
操作符IN允许指定一组满足明确关系的值:
-------------------------------------------------------------------------------
IF[Clustersize]in{512,1024,2048}THEN[Compression]="Off";
IF[Filesystem]in{"FAT","FAT32"}THEN[Compression]="Off";
如下面后台的一个检索条件:
选择不同的专卖店则有其对应的不同广告标题值〔则可用上面的in来明确一组关系值〕
在IF、THEN、ELSE的语句中可以加入逻辑操作符NOT、AND和OR。
可使用圆括号改变它们的运算优先顺序:
-------------------------------------------------------------------------------
IF[Filesystem]<>"NTFS"OR([Filesystem]="NTFS"AND[Clustersize]>4096)
THEN[Compression]="Off";
IFNOT([Filesystem]="NTFS"OR([Filesystem]="NTFS"ANDNOT[Clustersize]<=4096))
THEN[Compression]="Off";
参数可以被组合到另一个参数中:
----------------------------------------------------------------
#Machine1
OS_1:
Win2000,WinXP
SKU_1:
Professional,Server,Datacenter,WinPowered
LANG_1:
EN,DE
#Machine2
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];
2.无条件约束〔不变〕
一个不变的声明在一个域中总是有效的限制:
#至少有一对参数不相等才是有意义的测试用例〔使用OR运算符〕
[OS_1]<>[OS_2]or[SKU_1]<>[SKU_2]or[LANG_1]<>[LANG_2];
-------------------------------------------------------------------------------
#每对参数必须不相等〔使用AND运算符〕
[OS_1]<>[OS_2]and[SKU_1]<>[SKU_2]and[LANG_1]<>[LANG_2];
Eg:
modelfile7.txt
2)、参数类型
PICT使用参数类型的概念。
有两种类型的参数:
numeric和string。
只有所有的值都是numeric时才会被认为是numeric参数。
如果一个值有多个名字,那么只有第一个会被计算。
只有在评估约束性时类型才是重要的。
你只能把numeric参数与数字作比较,string参数与字符串作比较。
例如:
-------------------------------------------------------------------------------
Size:
1,2,3,4,5
Value:
a,b,c,d
IF[Size]>3THEN[Value]>"b";
-------------------------------------------------------------------------------
默认情况下,比较字符串时大小写不敏感。
你可以指定“/c”选项以使字符串比较时大小写敏感。
Numeric值作为数字进行比较。
Eg:
Modelfile8.txt
3)、负面测试
除了测试被称为“正面测试”有效组合外,你通常需要测试允许范围之外的值,以确保程序适当地处理了错误。
每个“负面测试”测试用例应该只有一个无效的值,因为大多数程序当它们发现第一个错误后就不会再做进一步处理。
为此,就可能发生负面测试中被称之为输入掩盖的问题。
一个无效的输入阻止了其他无效输入被测试。
eg:
检测登陆功能的模型文件
Modelfile9.txt
注意:
在比较期间,PICT不会把前缀作为值的一部分。
在约束中,也不会使用带前缀的值,前缀不会影响值的类型。
前缀会出现在输出结果中。
4)、权重
使用权重,您可以强制PICT优先接受指定的值。
权重可以是任何正整数。
如果你没有显式地指定一个权重,那么PICT默认会使用1。
-------------------------------------------------------------------------------
#让我们把焦点放在使用NTFS格式化主分区上
Type:
Primary(10),Logical,Single,Span,Stripe,Mirror,RAID-5
SIZE:
10,100,500,1000,5000
Filesystem:
FAT,FAT32,NTFS(10)
Eg:
modelfile10.txt
重要说明:
权重值没有绝对的意义。
例如,当一个参数定义如下时:
Filesystem:
FAT,FAT32,NTFS(10)
这并不意味着NTFS在输出结果中会是FAT或FAT32的10倍。
此外,你还不能认定你所指定的权重一直会起作用,因为PICT还必须要处理两个相互矛盾的要求:
1.在最少的测试用例中覆盖所有参数组合
2.根据参数的权重进行取值
上述[规则1]的优先级永远比[规则2]高,只有在选择值时不需要依赖[规则1],权重才有可能起作用。
更确切地说,在创建测试用例的过程中,PICT会评估所有可能的候选值,然后尽量选择在大多数参数值组合中没有使用过的值。
有时候多个候选值可能同样重要。
在这种情况下,PICT会使用权重去做最终的选择。
你可以使用权重尝试将时机偏向一些值,但是PICT会决定是否遵守这一要求,到什么程度,使用几个因素,不仅只是权重。
Eg:
modelfile11.txt
5)大小写敏感性
默认情况下,PICT执行所有比较和检查时不区分大小写。
例如,有OS、os两个参数,PI会认为它们重名〔参数名必须是唯一的〕。
PICT默认也会解除大小写限制:
IF[OS]="Win2THEN...将会匹配Win2K和win2k两个值〔参数值可以不是唯一的〕。
可以使用选项“/c使模型计算时完全区分大小写。
、大小写敏感性
(五)警告信息
约束或条件定义出错的警告应当引起注意。
PICT在生成过程中发现有语法错误时不会停止它仍然能生成一些有意义的结果。
然而,如果你看到这些警告后,最好还是重新检查一下模型文件中的参数和约束。
全部或没有值满足关系
当你定义了一个错误的关系时,这种警告能给你及早的提示。
所有的关系、条件或约束都必须让结果集是有意义的。
如果没有值满足关系或所有的值都满足关系,则肯定哪儿出错了如果看到此警告,得重新检查一下你的值关系并理清他们。
Eg:
modelfile12.txt
限制性约束,输出将不包含以下值
有时一组约束条件交织在一起导致一些值总是违反一个或多个约束条件。
循环依赖便是这样的一个例子:
------------------------------------------------------------------------------
if[A]="a1"then[B]="b1";
if[B]="b1"then[C]="c1";
if[C]="c1"then[A]="a2";
在这个例子中,选择a1意味着选择b1,这使得该工具选择了c1,反过来又意味着选择a2,所以,如果你选择了a1,那么你也选择了a2。
所有这些限制单独计算是完全有效的。
这就是因为他们相互作用导致的歧义。
PICT将会通过不使用值a1来防止这种情况。
a1将不会出现在输出结果中,并且PICT将显示约束限制警告。
Eg:
modelfile13.txt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成对 组合 覆盖 PICT 应用