4 .1.1
设计测试用例的原则
l
测试用例的代表性:能够代表各种合理和不合理的、合法的和非法的、边界和越界的
,
以及极限的输入数据、操作和环境设置等;
l
测试结果的可判定性:即测试执行结果的正确性是可判定的或可评估的;
l
测试结果的可再现性:即对同样的测试用例,系统的执行结果应当是相同的。
4.1.2
测试用例的组成
测试用例应该由以下两部分组成
1)
输入数据
2)
处理(如计算、合并等)
3)
预期的输出结果
这就是说,在执行系统之前应该对期望的输出有很明确的描述,这样,测试后就可将系统的输出同它仔细对照检查。否则,如果不是先确定输出,就可能把似乎是正确而实际是错误的结果当成是正确的结果。
4.1.3
设计测试用例应注意的事项
l
不仅要选用合理的输入数据作为测试用例(即肯定测试用例),还应选用不合理的输入数据作为测试用例(即否定测试用例)。许多人往往只注意前者而忽略了后者。为了提高系统的健壮性,输入数据不合理的各种情况是应该认真检查的(在开发过程中,正常业务处理的代码量只占有效代码量的
10%
,而例外处理的代码量要占有效代码量的
90%
),所以测试工作量也是如此,即肯定测试用例占总用例的
10%
,否定测试用例占总用例的
90%
)。
l
除了检查系统是否做了它应该做的工作之外,还应检查系统是否做了它不应该做的事情。
l
应该长期保留所有的测试用例,直至这个系统被废弃不用为止。这是因为:设计测试用例是很费人工的,如果将用过的测试用例丢弃了,以后一旦需要再测试这个系统(例如因为系统内部作了某些修改)就需要再花很多人工,人们往往懒得再次认真地设计测试用例,因而“再测试”很少像初次测试那样“彻底”。如果系统的修改使得前面已测试过的部分产生了错误,“再测试”往往就不能发现这些错误。
4
.
1.4
设计测试用例
(
测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。)
4.1.4
.1
白盒法
白盒法是以系统内部的逻辑为基础设计测试用例,所以又称为逻辑覆盖法。白盒法考虑的是测试用例对系统内部的覆盖程度,最彻底的白盒法是覆盖系统中的每条路径,但是由于系统中一般含有循环,所以路径的数目极大,要执行每条路径是不可能的,所以只能希望覆盖的程度尽可能高些。我们可以从以下几点考虑:
(
1
)语句覆盖
“语句覆盖”是一个很弱的测试覆盖,它的含义是:选择足够的测试用例,使代码中每个有效语句(即注释语句除外)至少都能被执行一次。顺序语句覆盖率是
100%
。
(
2
)分支覆盖
比“语句覆盖”稍强的测试覆盖是“分支覆盖”。这个标准是执行足够的测试用例,使代码中每个分支至少都获得一次“真”值和“假”值,或者说使得代码中的每个分支至少都通过一次。分支覆盖率是
80%
。
(
3
)循环覆盖
“循环覆盖”的含义是:执行足够的测试用例,使得循环中的每个条件都得到验证。循环语句覆盖率是
80%
。
4.1.4
.2
黑盒法
设计测试用例的另一种方法是黑盒法。与白盒法不同,黑盒法不关心系统内部的逻辑,而只是根据系统的功能说明、预期结果、数据流程或业务流程等来设计测试用例。黑盒法测试的依据是需求说明书或功能说明书。我们常常采用的方法是:
A
、划分等价类
这一步是:先从系统的需求规格说明中找出所有的输入条件,然后为每个输入条件划分两个或多个等价类,此时可以使用下表:
|
输入条件 |
合理等价类
(
合理输入数据
) |
不合理等价类
(
非法输入数据
) |
|
|
|
|
|
|
|
|
l
划分等价类在很大程度上是试探性的,下面几点可供参考:
①
如果某个输入条件说明了输入的范围(如“数据值”是从
1
到
999
),则可划分一个合理等价类(大于等于
1
而小于等于
999
的数)和两个不合理等价类(小于
1
的数,以及大于
999
的数)。
②
如果某个输入条件说明了输入数据的个数(如每个学生可以选修
1
至
3
门课程),则可划分一个合理等价类(选修
1-3
门课程)和两个不合理等价类(没选修课程,以及超过
3
门课程)。
③
如果一个输入条件说明了一个“必须成立”的情况(如标识符的第一个字符必须是字母),则可以划分一个合理等价类(第一字符是字母),和一个不合理等价类(第一字符不是字母)。
④
如果某个输入条件说明了输入数据的一组可能的值,而且认为系统是用不同的方式处理每一种值的(如职称的输入值可以是助教、讲师、副教授和教授
[FS:PAGE]
4
种),则可为每一种值划分一个合理等价类(如助教、讲师、副教授和教授
4
种),并划分一个不合理等价类(上述
4
钟职称之外的等价类)。
l
设计测试用例
.
设计测试用例,使它包括尽可能多的、尚未被包括的合理等价类;重复做这一步,直至这些测试用例包括所有的合理等价类。
.
设计测试用例,使它包括一个(而且仅仅一个)尚未被包括的不合理等价类;重复做这一步,直至测试用例已包括所有的不合理等价类。
必须注意的是
,这一步应使每个例子仅包括一个不合理等价类。这样做的原因是:系统中的某些错误检测往往会抑制其它错误检测,例如某个系统的功能说明中指出:输入数据是书的“类型”(它可以是“精装”、“平装”和“线装”)和书的“数量”(其允许值是
1-999
),如果某个测试用例中,书的“类型”是“活页”,书的“数量”是
0
,他包括了两个不合理的条件(“类型”和“数量”都不合理),系统在发现“类型”不合理之后,可能不会再去检查“数量”是否合理,因此这一部分系统实际上并没有测试到。
这里采用等价类划分法具个例子:
1.
对一个输入
1-100数字的输入提交功能设计测试用例
划分等价类:其测试用例为
a.
输入数字为空;
b.
输入数字为
0;
c.
输入数字为
-1;
d.
输入数字为
101;
e.
输入数字为
1-100中间的任何数;
f.
输入数字为小数;
7.输入为字母;
g.
输入为控制字符。
2.
免费电子邮件系统:
a)
新用户注册页面
数据项取值
USER NAME
:长度为
3-19
;以字母开头
;
非空
姓名:非空
密码:非空
确认密码:值和密码值相同
出生年份:年——四位数字;月——
1-12
;日——
1-31
;
其余项:不要求
等价类的划分
|
数据项 |
有效等价类 |
无效等价类 |
|
USER NAME |
(
1
)长
3-9
;(
2
)以字母开头
; |
(1)
长度
<3
;(
2
)非字母开头(
3
)长度
>19 |
|
名 |
(
3
)非空 |
(
4
)为空 |
|
码 |
|
(
5
)为空 |
|
认密码 |
|
(
6
)值和密码值不同 |
|
生年份 |
(
6
)月—
1-12
;(
7
)日—
1-31
|
(
4
)非空 |
|
余项 |
(
8
)都填(
9
)都不填 |
(
5
)值和密码值相同 |
b).
忘记密码部分
数据项取值
:
登录用户名:已存在的用户名
用户的回答:和注册值相同
密码:
>=5
确认密码:值和密码值相同
等价类的划分
|
数据项 |
有效等价类 |
无效等价类 |
|
登录用户名 |
1)
已存在 |
(1)
不存在 |
|
用户的回答 |
(
2
)和注册值相同 |
(
2
)和注册值不同 |
|
密码 |
(
3
)
>=5 |
(
3
)
<5 |
|
密码确认 |
(4)
值和密码值相同 |
(4)
和密码值不同 |
B
、
边界值分析法
“边界情况”是指输入等价类或输出等价类边界上的情况。
边界值分析法与等价分类法的差别在于:
①
边界值分析法不是从一个等价类中任选一个例子作代表,而是选一个或几个例子,使得该等价类的边界情况成为测试的主要目标。
②
边界值分析不仅注意输入条件,它还根据输出的情况(即按输出等价类)设计测试用例。
运用边界值分析法,需要有一定的创造性,以下几点供使用时参考:
①
如果某个输入条件说明了值范围,则可选择一些恰好取到边界的例子,另外,再编写一些代表非法输入数据的例子,它们的值恰好越过边界。
②
如果一个输入条件指出了输入数据的个数,则为最小个数、最大个数、比最小个数少
1
、比最大个数多
1
、分别设计例子。
③
为每个输出条件使用上面第①点。
④为每个输出条件使用上面第②点。
⑤
如果系统的输入和输出是有序集合(如顺序文件、线性表等),则应特别注意集合的第一个或最后一个元素。
C
、因果图法
D
、错误推测法
人们也可以通过经验或直觉推测系统中可能存在的各种错误,从而有真对性地编写检查这些错误的例子,这就是错误推测法。错误推测法没有确定的步骤,很大程度上是凭经验进行的。 |