测试用例设计--黑盒测试、白盒测试
测试用例设计
设计数据库测试用例就是针对数据库的功能和性能而设计的测试方案,并编入测试计划中。测试用例的设计既要考虑正常情况,也应考虑极限情况以及字段取最大值和最小值等边界情况。因为测试的目的是暴露数据库中隐藏的错误和缺陷,所以在设计测试用例时要充分考虑那些易于发现错误和缺陷的测试用例。好的测试用例应该有较高的发现错误和缺陷的概率。
白盒测试的测试用例设计
逻辑覆盖法和基本路径测试法是计算机软件白盒测试用例设计的两个重要方法。这两个方法也适合存储过程、触发器、嵌入式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所示。
序号 输入 预期输出 覆盖等价类 1 200811 200811 (1)、(2)、(3) -
为每一个无效等价类至少设计一个测试用例
序号 输入 预期输出 覆盖等价类 1 2001ab 无效输入 (4) 2 2002 无效输入 (5) 3 2002163 无效输入 (6) 4 194012 无效输入 (7) 5 200901 无效输入 (8) 6 196000 无效输入 (9) 7 200633 无效输入 (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和最小实数。应用边界值分析法,各测试用例的输入部分可设计为:最大实数、绝对值很小的正实数、0、绝对值很小的负实数、最小实数。
黑盒测试的测试用例设计-- 错误推测法
- 错误推测法就是根据测试人员的直觉与经验,推测被测数据库哪些地方容易出错,并据此设计测试用例。它通常作为其他方法的一种辅助手段。即用其他方法设计测试用例,然后再根据错误推测法补充一些测试用例。
- 例如,设计一些非法、错误的输入进行数据库测试是很有意义的。如果需求分析中要求两个学生的学号不相同,就输入两个相同的学号。如果需求分析中要求公司名称不超过30个字符,就输入31个字符。如果需求分析中要求职工号不为空,就输入一个空职工号。如果需求分析中要求成绩为数字,就输入字母。如果需求分析中要求成绩为整数,就输入小数。如果需求分析中要求出生日期是时间敏感的,就看它在公元3000年是否还能正常工作。在一个表的外码属性中输入了一个被参照表中不存在的数据。向一个表的数值型属性中输入多行很大的数字,当这些数字求和后再存储到别的表时看是不是会出现错误。