标题: 谈谈测试方法 [打印本页] 作者: enjoytest 时间: 2006-12-15 11:24 标题: 谈谈测试方法 1、划分等价类
把所有可能的输入数据划分成若干部分,然后从每一部分中选择少数有代表性的数据
作为测试用例。
(1)有效等价类:对于程序的规格说明来说,是合理、有意义的输入数据构成的集
合。利用这一类测试用例检验程序是否实现了规格说明预先规定的功能和性能。
(2)无效等价类: 对于程序的规格说明来说,是不合理、无意义的输入数据构成的
集合。利用这一类测试用例检验程序的冗错能力。
2、边界值分析
边界值分析方法是对等价类划分方法的补充。根据测试经验,大量的错误发生在输入
或输出范围的边界上,而不是某个范围的内部。
与等价类划分方法的区别:边界值也可能包含在有效等价类中。
3、语句覆盖
设计若干个测试用例,运行所测程序,使得每一可执行语句至少执行一次。语句覆盖
是最弱的逻辑覆盖准则。
IF (( A > 1) AND ( B = 0 ))THEN
X = X / A
IF (( A = 2) OR ( X > 1 ) THEN
X = X + 1
其中“AND”和“OR”是两个逻辑运算符。图6给出了它的流程图。a、b、c、
d和e是控制流上的若干程序点。
语句覆盖的含意是,在测试时,首先设计若干个测试用例,然后运行被测程序,
使程序中的每个可执行语句至少执行一次。这时所谓“若干个”,自然是越少越好。
在上述程序段中,我们如果选用的测试用例是:
A = 2
B = 0 ………………CASE1
X = 3
则程序按路径ace执行。这样该程序段的4个语句均得到执行,从而作到了语句覆
盖。但如果选用的测试用例是:
A = 2
B = 1 ………………CASE2
X = 3
程序按路径abe执行,便未能达到语句覆盖。
从程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地
检验每一个语句。但它也绝不是完美无缺的。假如这一程序段中两个判断的逻辑运算
有问题,例如,第一个判断的运算符“AND”错成运算符“OR”或是第二个判断中的
运算符“OR”错成了运算符“AND”。这时仍使用上述前一个测试用例CASE1,程序
仍将按路径ace执行。这说明虽然也作到了语句覆盖,却发现不了判断中逻辑运算的错
误。
二、判定覆盖
按判定覆盖准则进行测试是指,设计若干测试用例,运行被侧程序,使得程序中
每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆
盖又称为分支覆盖。
仍以上述程序段为例,若选用的两组测试用例是:
A = 2
B = 0 ………………CASE1
X = 3
A = 1
B = 0 ………………CASE3
X = 1
则可分别执行路径ace和abd,从而使两个判断的4个分支c、e和b、d分别得到覆
盖。
当然,我们也可以选用另外两组测试用例:
A = 3
B = 0 ………………CASE4
X = 3
A = 2
B = 1 ………………CASE5
X = 1
分别路径acd及abe,同样也可覆盖4个分支。
我们注意到,上述两组测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从
这一点看似乎判定覆盖比语句覆盖更强一些,但让我们设想,在此程序段中的第2个判
断条件X>1如果错写成X<1,使用上述测试用例CASE5,照样能按原路径执行(abe
),而不影响结果。这个事实说明,只作到判定覆盖仍无法确定判断内部条件的错
误。因此,需要有更强的逻辑覆盖准则去检验判断内的条件。
以上仅考虑了两出口的判断,我们还应把判定覆盖准则扩充到多出口判断(如
CASE语句)的情况。
三、条件覆盖
条件覆盖是指,设计若干测试用例,执行被测程序以后,要使每个判断中每个条
件的可能取值至少满足一次。
在上述程序段中,第一个判断应考虑到:
A>1,取真值,记为T
1
A >1,取假值,即A≤1,记为F
1
B = 0,取真值,记为T
2
B = 0,取假值,即B≠0,记为F
2
第2个判断应考虑到:
A = 2,取真值,记为T
3
A = 2,取假值,即A≠2,记为F
3
X>1,取真值,记为T
4
X>1,取假值,即X≤1,记为F
4
我们给出3个测试用例:CASE6,CASE7,CASE8,执行该程序段所走路径及覆
盖条件是:
覆盖条件所走路径ABX测试用例
T , T , T , Ta c e2 0 3CASE 6
1 2 3 4
F, T , F, Fa b d1 0 1CASE 7
1 2 3 4
T , F, T , Fa b e2 1 1CASE 8
1 2 3 4
从这个表中可以看到,3个测试用例把4个条件的8种情况均作了覆盖。
进一步分析上表,覆盖了4个条件的8种情况的同时,把两个判断的4个分支b、c、
d和e似乎也被覆盖。这样我们是否可以说,做到了条件覆盖,也就必然实现了判定覆
盖呢?让我们来分析另一情况,假定选用两组测试用例是CASE 9和CASE 8,执行程序
段的覆盖情况是:
覆盖条件覆盖分支所走路径A B X测试用例
F, T , F, T
b ea b e1 0 3CASE 9
1 2 3 4
T , F, T , Fb ea b e2 1 1CASE 8
1 2 3 4
这一覆盖情况表明,覆盖了条件的测试用例不一定覆盖了分支。事实上,它只覆
盖了4个分支中的两个。为解决这一矛盾,需要对条件和分支兼顾。
四、判定-条件覆盖
判定-条件覆盖要求设计足够的测试用例,使得判断中每个条件的所有可能至少出
现一次,并且每个判断本身的判定结果也至少出现一次。
例中两个判断各包含两个条件,这4个条件在两个判断中可能有8种组合,它们
是:
① A 〉1,B = 0 记为 T ,T
1 2
② A 〉1,B ≠ 0 记为 T ,F
1 2
③ A ≤1,B = 0 记为 F ,T
1 2
④ A ≤1,B ≠ 0 记为 F ,F
1 2
⑤ A =2,X 〉 1 记为 T ,T
3 4
⑥ A =2,X ≤ 1 记为 T ,F
3 4
⑦ A ≠2,X 〉 1 记为 F,T
3 4
⑧ A ≠2,X ≤ 1 记为 F,F
3 4
这里设计了4个测试用例,用以覆盖上述8种条件组合:
覆盖条件所走路径覆盖组合号ABX测试用例
CASE 1
2 0 3
① ⑤
T ,T ,T ,Ta c e
1 2 3 4
CASE 8
2 1 1
② ⑥
T ,F ,T ,Fa b c
1 2 3 4
CASE 9
1 0 3
③ ⑦
F ,T ,F ,Ta b e
1 2 3 4
CASE 10
1 1 1
④ ⑧
F ,F ,F ,Fa b d
1 2 3 4
我们注意到,这一程序段共有四条路径。以上4个测试用例固然覆盖了条件组合,
同时也覆盖了4个分支,但仅覆盖了3条路径,却漏掉了路径acd。前面讨论的多种覆盖
准则,有的虽提到了所走路径问题,但尚未涉及到路径的覆盖,而路径能否全面覆盖
在软件测试中是个重要问题,因为程序要取得正确的结果,就必须消除遇到的各种障
碍,沿着特定的路径顺利执行。如果程序中的每一条路径都得到考验,才能说程序受
到了全面检验。
五、路径覆盖
按路径覆盖要求进行测试是指,设计足够多测试用例,要求覆盖程序中所有可能
的路径。
针对例中的4条可能路径
ace 记为 L
1
abd 记为 L
2
abe 记为 L
3
acd 记为 L
4
我们给出4个测试用例:CASE 1,CASE 7,CASE 8和CASE 11,使其分别覆盖这
4条径:
覆盖路径ABX测试用例
a c e (L )2 0 3CASE 1
1
a b d (L )1 0 1CASE 7
2
a b e (L )2 1 1CASE 8
3
a c d (L )3 0 1CASE 11
4
这里所用的程序段非常简短,也只有4条路径。但在实际问题中,一个不太复杂的
程序,其路径数都是一个庞大的数字,要在测试中覆盖这样多的路径是无法实现的。
为解决这一难题只得把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执
行了一次。
其实,即使对于路径数很有限的程序已经作到了路径覆盖,仍然不能保证被测程
序的正确性。例如,在上述语句覆盖一段最后给出的程序段中出现的错误也不是路径
覆盖可以发现的。
由此看出,各种结构测试方法都不能保证程序的正确性。这一严酷的事实对热心
测试的程序人员似乎是一个严重的打击。但要记住,测试的目的并非要证明程序的正
确性,而是要尽可能找出程序中的错误。确实并不存在一种十全十美的测试方法,能
够发现所有的错误。想要撒下几网把湖中的鱼全都捕上来是作不到的,软件测试是有
局限性的。
P
Y
N
A
C
D
B
( b)选择型
( a)顺序型
当 P
S
S
直到 P
( c) DO WHILE型
( d) DO UNTIL型
图 7 N- S图表示的基本控制结构作者: wuhuawu09 时间: 2006-12-15 11:32
好象看过,顶下.......作者: enjoytest 时间: 2006-12-15 11:47
sdlkfj6 好贴不厌百回读呀,呵呵sdlkfj6