测试用例设计--黑盒测试、白盒测试
- 格式:pdf
- 大小:535.77 KB
- 文档页数:4
测试⽤例设计--⿊盒测试、⽩盒测试
测试⽤例设计
设计数据库测试⽤例就是针对数据库的功能和性能⽽设计的测试⽅案,并编⼊测试计划中。测试⽤例的设计既要考虑正常情况,也应考虑极限情况以及字段取最⼤值和最⼩值等边界情况。因为测试的⽬的是暴露数据库中隐藏的错误和缺陷,所以在设计测试⽤例时要充分考虑那些易于发现错误和缺陷的测试⽤例。好的测试⽤例应该有较⾼的发现错误和缺陷的概率。
⽩盒测试的测试⽤例设计
逻辑覆盖法和基本路径测试法是计算机软件⽩盒测试⽤例设计的两个重要⽅法。这两个⽅法也适合存储过程、触发器、嵌⼊式SQL等数据库程序的测试。语句覆盖
语句覆盖 语句覆盖是设计⾜够多的测试⽤例,运⾏所测程序,使得程序中每条可执⾏语句⾄少被执⾏⼀次。不过,每条可执⾏语句⾄少执⾏⼀次是最基本的要求,但是它不能保证发现逻辑运算和程序逻辑错误,且并不是所有的分⽀被执⾏过。
例6-1 考虑图6-2,语句覆盖的测试⽤例如表6-1所⽰。注意,该组测试⽤例不能覆盖判断E为假的分⽀。⽽且,如果判断C误写为X>2 or Y>3,该组测试⽤例仍能够实现语句覆盖,因此该组测试⽤例发现不了这个错误。
测试⽤例⼀般不是唯⼀的。例如,表6-2的测试⽤例也可以实现语句覆盖。
判定覆盖 判定覆盖⼜称分⽀覆盖,是设计⾜够多的测试⽤例,运⾏所测程序,使得程序中每个判断的取真分⽀和取假分⽀分别⾄少执⾏⼀次。
例6-2 考虑图6-2,其中C、E为判断。判定覆盖的测试⽤例如表6-3所⽰。
虽然判定覆盖能够保证所有判断的取真分⽀和取假分⽀执⾏⾄少⼀次,但判定覆盖不能保证发现条件表达式错误。例如,如果语句C误写为X>2 or Y>3,表6-3给出的测试⽤例仍能够实现判定覆盖,因此该组测试⽤例发现不了这个错误。条件覆盖 条件覆盖是设计⾜够多的测试⽤例,运⾏所测程序,使得每个判断的每个条件成分取真值和假值分别⾄少执⾏⼀次。
例6-3 考虑图6-2。⾸先对所有判断的条件成分取值进⾏标记:v条件覆盖的测试⽤例如表6-4所⽰。
判定-条件覆盖 判定-条件覆盖是设计⾜够多的测试⽤例,同时满⾜判定覆盖和条件覆盖。
例6-4 考虑图6-2,并沿⽤例6-3的记号。判定-条件覆盖的测试⽤例如表6-5所⽰。表6-5的测试⽤例同表6-3、表6-4是⼀样的。可见,判定-条件覆盖的测试⽤例仍不能保证条件表达式错误被检出
条件组合覆盖 条件组合覆盖是设计⾜够多的测试⽤例,运⾏所测程序,使得每个判断中的所有条件成分取值组合⾄少执⾏⼀次。
例6-5 考虑图6-2,并沿⽤例6-3的记号。判断C的条件成分组合有4个:组合覆盖的测试⽤例可同时实现判定覆盖、条件覆盖和判定-条件覆盖,但当判断的条件成分过多时,测试⽤例的数量可能成⼏何级数增长。例如,如果某个判断有5个条件成分,因为每个条件成分有取真值、取假值两种可能,则有25=32种组合⽅案。另外,组合覆盖的测试⽤例不⼀定能覆盖全部程序路径。这⾥,程序路径(简称路径)是指从程序⼊⼝(开始)到出⼝(结束)的任何路径。路径覆盖 路径覆盖是设计⾜够多的测试⽤例,覆盖程序中所有可能的路径。
例6-6 考虑图6-2。全部路径为ACDEFG、ACDEG、ACBG。路径覆盖的测试⽤例如表6-7所⽰。表6-7的测试⽤例同表6-3是⼀样的。基本路径测试法基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执⾏路径集合,从⽽设计测试⽤例的⽅法。限于篇幅,本书对基本路径测试法不作深⼊讨论。有兴趣的读者可以参考软件测试等⽅⾯的专著或教科书。
⿊盒测试的测试⽤例设计-- 等价类划分法
⼀个数据的集合称为关于程序输⼊数据的等价类(简称为等价类),如果集合中的⼀个数据作为测试输⼊数据不能发现该程序的错误,那么使⽤集合中的其他数据作为测试输⼊数据也不能发现错误。所谓等价类划分法是把全部可能的输⼊数据划分为若⼲等价类,从每个类中选取⼀个数据作为输⼊数据来测试程序。等价类划分法设计测试⽤例分为两步:划分等价类、确定测试⽤例。划分等价类和列出等价类表
等价类分为有效等价类和⽆效等价类。所谓有效等价类,指对于程序的需求规格说明⽽⾔是合理的、有意义的输⼊数据构成的集合。利⽤有效等价类可检验程序是否实现了需求规格说明中所规定的功能和性能。不是有效等价类的数据的集合称为⽆效等价类。设计测试⽤例时,要同时考虑这两种等价类。因为软件不仅要能接受合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更⾼的可靠性。划分等价类需要经验,下述列出划分等价类的⼏个原则:如果输⼊条件规定了取值范围,则可以定义⼀个有效等价类和两个⽆效等价类。例6-7 设在程序的需求规格说明中对输⼊条件有⼀句话:“…… 班级的⼈数从1~99 ……”。有效等价类有⼀个:“1≤⼈数≤99”,⽆效等价类有两个:“⼈数<1”、“⼈数>99”。如果输⼊条件规定了输⼊值的集合,或者规定了“必须如何”的条件,则可以定义⼀个有效等价类和⼀个⽆效等价类。例6-8 设学⽣(学号,姓名,性别,所在系,班号,出⽣⽇期)关系规定性别属性取值于集合{“男”,“⼥”}。v有效等价类有⼀个:{“男”,“⼥”},⽆效等价类有⼀个:除“男”、“⼥”外的所有字符串。如果输⼊条件是⼀个布尔量,则可以定义⼀个有效等价类和⼀个⽆效等价类。如果规定了输⼊数据的⼀组值,⽽且程序要对每个输⼊值分别进⾏处理。这时可为每⼀个输⼊值定义⼀个有效等价类,把这组输⼊值之外的数据定义为⼀个⽆效等价类。v例6-9 设⼤学教师的职称取值“教授”、“副教授”、“讲师”和“助教”,职称不同考核的标准不同,因⽽处理⽅式也不同。有效等价类有4个:“教授”、“副教授”、“讲师”和“助教”,⽆效等价类有⼀个:除这4种职称外的所有其他职称。如果规定了输⼊数据必须遵守的规则,则可以定义⼀个有效等价类(符合规则)和若⼲个⽆效等价类(从不同⾓度违反规则)。例6-10 设学⽣选课关系“选修(学号,课程号,成绩)”中的成绩属性满⾜:0≤成绩≤100且成绩为整数。有效等价类有⼀个:“0≤成绩≤100且成绩为整数”,⽆效等价类有4个:“0≤成绩≤100且成绩为⼩数”、“成绩<0且成绩为数值”、“成绩>100且成绩为数值”、“成绩取字符串”。在已划分的等价类中,如果程序对某些数据的处理⽅式不同,则应考虑将该等价类进⼀步划分为更⼩的等价类。
确定测试⽤例 在确⽴了等价类之后,建⽴等价类表,列出所有划分出的等价类,如表6-8所⽰。
输⼊条件有效等价类⽆效等价类
.........
.........根据等价类表,按以下原则确定测试⽤例:为每个等价类分配⼀个唯⼀的编号。设计⼀个新的测试⽤例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这⼀步,直到所有的有效等价类都被覆盖为⽌。设计⼀个新的测试⽤例,使其仅覆盖⼀个尚未被覆盖的⽆效等价类,重复这⼀步,直到所有的⽆效等价类都被覆盖为⽌。这就是说,对每个⽆效等价类分别设计测试⽤例。之所以这样做,是因为某些程序对某⼀输⼊错误的检查往往会屏蔽对其他输⼊错误的检查。
例⼦
例6-11 设“参加⼯作年⽉”满⾜:年份为1950~2008,⽉份为1~12。输⼊格式是连续输⼊年、⽉,其中年占4位、⽉占两位,如2008年1⽉输⼊格式为:200801。
v第⼀步:划分等价类,等价类表如表6-9所⽰。
输⼊条件有效等价类及编号⽆效等价类及编号
参加⼯作年⽉的类型及长度6位数字字符(1)有⾮数字字符(4) 少于6个数字字符 (5) 多于6个数字字符 (6)
年份范围在1950~2008之间 (2)⼩于1950 (7) ⼤于2008 (8)
⽉份范围在1~12之间(3)⼩于1 (9) ⼤于12 (10)第⼆步:确定测试⽤例。
编号为1、2、3的三个有效等价类⽤⼀个测试⽤例覆盖,如表6-10所⽰。
序号输⼊预期输出覆盖等价类
1200811200811(1)、(2)、(3)
为每⼀个⽆效等价类⾄少设计⼀个测试⽤例
序号输⼊预期输出覆盖等价类
12001ab⽆效输⼊(4)
22002⽆效输⼊(5)
32002163⽆效输⼊(6)
4194012⽆效输⼊(7)
5200901⽆效输⼊(8)
6196000⽆效输⼊(9)
7200633⽆效输⼊(10)
⿊盒测试的测试⽤例设计-- 边界值分析法边界是指程序输⼊、输出范围的边缘,边界值是指程序输⼊、输出范围的边缘值。
在数据库测试中,常见的边界值有⽉份中的空值、1⽉、12⽉,发票中的空值、最低⾦额、最⾼⾦额,年龄中的空值、最⼩年龄、最⼤年龄,姓名中的空值、最短姓名、最长姓名,编号中的空值、最⼩编号、最⼤编号。
边界值既可以是⼀元组,也可以是多元组。例如,设三⾓形的三条边的长度分别为A、B和C。当A、B、C满⾜:A>0,B>0,C>0,A+B>C,A+C>B,B+C>A,才能构成三⾓形。但如果把6个不等式中的任何⼀个⼤于号“>”错写成⼤于等于号“≥”,那就不能构成三⾓形。满⾜上述6个不等式等号要求的A、B、C任何取值三元组均是构成三⾓形这⼀问题的边界值。
测试实践表明,⼤量的错误⼀般发⽣在输⼊或输出范围的边界上,⽽不是发⽣在输⼊输出范围的内部。因此针对输⼊、输出的边界设计测试⽤例显得尤其重要。事实上,为检验程序在边界附近的运⾏情况专门设计测试⽤例进⾏测试,常常取得良好的测试效果。
边界值分析法是⼀种⿊盒测试⽅法,是对等价类划分法的补充,其测试⽤例来⾃等价类的边界。边界值分析法与等价类划分法存在⼀定的差异。⼀是边界值分析法不是选择等价类的任意数据,⽽是选择正好等于、刚刚⼤于或刚刚⼩于边界值的数据。⼆是边界值分析法不仅重视针对输⼊边界的测试⽤例设计,⽽且重视针对输出边界的测试⽤例设计。应⽤边界值分析法设计测试⽤例,需遵循以下⼏条原则:如果输⼊条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输⼊数据。如果输⼊条件规定了值的个数,则⽤最⼤个数、最⼩个数、⽐最⼩个数少1、⽐最⼤个数多1的数作为测试数据。根据需求规格说明书中的每个输出条件,使⽤前⾯的原则(1)。根据需求规格说明书中的每个输出条件,使⽤前⾯的原则(2)如果需求规格说明书给出的输⼊域或输出域是有序集合,则应选取集合的第⼀个元素和最后⼀个元素作为测试⽤例。如果程序中使⽤了⼀个内部数据结构,则应当选择这个内部数据结构边界上的值作为测试⽤例。分析需求规格说明,找出其他可能的边界条件。
例6-12 函数x+sqrt(x)(x取实数)的边界值分析法测试⽤例设计。输⼊数据可以划分为两个等价类:①有效等价类x≥0;②⽆效等价类x<0。等价类①的边界为0和最⼤实数,等价类②的边界为0和最⼩实数。应⽤边界值分析法,各测试⽤例的输
⿊盒测试的测试⽤例设计-- 错误推测法
错误推测法就是根据测试⼈员的直觉与经验,推测被测数据库哪些地⽅容易出错,并据此设计测试⽤例。它通常作为其他⽅法的⼀种辅助⼿段。即⽤其他⽅法设计测试⽤例,然后再根据错误推测法补充⼀些测试⽤例。例如,设计⼀些⾮法、错误的输⼊进⾏数据库测试是很有意义的。如果需求分析中要求两个学⽣的学号不相同,就输⼊两个相同的学号。如果需求分析中要求公司名称不超过30个字符,就输⼊31个字符。如果需求分析中要求职⼯号不为空,就输⼊⼀个空职⼯号。如果需求分析中要求成绩为数字,就输⼊字母。如果需求分析中要求成绩为整数,就输⼊⼩数。如果需求分析中要求出⽣⽇期是时间敏感的,就看它在公元3000年是否还能正常⼯作。在⼀个表的外码属性中输⼊了⼀个被参照表中不存在的数据。向⼀个表的数值型属性中输⼊多⾏很⼤的数字,当这些数字求和后再存储到别的表时看是不是会出现错误。