1 / 6
文档名称:

白盒测试方法-覆盖.docx

格式:docx   大小:23KB   页数:6页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

白盒测试方法-覆盖.docx

上传人:guoxiachuanyue005 2022/11/27 文件大小:23 KB

下载得到文件列表

白盒测试方法-覆盖.docx

相关文档

文档介绍

文档介绍:该【白盒测试方法-覆盖 】是由【guoxiachuanyue005】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【白盒测试方法-覆盖 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。白盒测试方法
逻辑覆盖
一、语句覆盖
二、判定覆盖
三、条件覆盖
四、判定一条件覆盖五、路径覆盖
逻辑覆盖
结构测试是依据被测程序的逻辑结构设计测试用例,驱动被测程序运行完成的测试。结构测试中的一个重要问题是,测试进行到什么地步就达到要求,可以结束测试To这就是说需要给出结构测试的覆盖准则。
以卞给出的几种逻辑覆盖测试方法都是从各自不同的方面出发,为设计测试用例提出依据的。
IF((A>1)AND(B=O))THENX=X/A
IF((A=2)OR(X>1)THENX=X+1
其中“AND”和“OR”是两个逻辑运算符。图1给出了它的流程图。a、b、c、d和e是控制流上的若干程序点。
r-^-<(A>1)AND
bc
X=X/A
<(A=2)OR(Xa1)>
X=X+1
图1被测程序段流程图
一、语句覆盖
语句覆盖的含意是,在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。这时所谓“若干个”,自然是越少越好。在上述程序段中,我们如果选用的测试用例是:
A=2
B=0CASE1
X=3
则程序按路径ace执行。这样该程序段的4个语句均得到执行,从而作到了语句覆盖。但如果选用的测试用例是:
A=2
B=1CASE2
X=3
程序按路径abe执行,便未能达到语句覆盖。
从程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地检验每一个语句。但它也绝不是完美无缺的。假如这一程序段中两个判断的逻辑运算有问题,例如,第一个判断的运算符“AND”错成运算符“OR”或是第二个判断中的运算符“OR”错成了运算符“AND”。这时仍使用上述前一个测试用例CASE1,程序仍将按路径ace执行。这说明虽然也作到了语句覆盖,却发现不了判断中逻辑运算的错误。
此外,我们还可以很容易地找出已经满足了语句覆盖,却仍然存在错误的例子。
如有一程序段:
•••
r-^-<(A>1)AND
bc
X=X/A
<(A=2)OR(Xa1)>
X=X+1
图1被测程序段流程图
一、语句覆盖
语句覆盖的含意是,在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个可执行语句至少执行一次。这时所谓“若干个”,自然是越少越好。在上述程序段中,我们如果选用的测试用例是:
A=2
B=0CASE1
X=3
则程序按路径ace执行。这样该程序段的4个语句均得到执行,从而作到了语句覆盖。但如果选用的测试用例是:
A=2
B=1CASE2
X=3
程序按路径abe执行,便未能达到语句覆盖。
从程序中每个语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面地检验每一个语句。但它也绝不是完美无缺的。假如这一程序段中两个判断的逻辑运算有问题,例如,第一个判断的运算符“AND”错成运算符“OR”或是第二个判断中的运算符“OR”错成了运算符“AND”。这时仍使用上述前一个测试用例CASE1,程序仍将按路径ace执行。这说明虽然也作到了语句覆盖,却发现不了判断中逻辑运算的错误。
此外,我们还可以很容易地找出已经满足了语句覆盖,却仍然存在错误的例子。
如有一程序段:
•••
IF(I^O)
THENI=J
•••
如果错写成:
•••
IF(I>0)
THENI=J
•••
假定给出的测试数据确使执行该程序段时I的值人于0,则I被赋予J的值,这样虽然作到了语句覆盖,然而掩盖了其中的错误。
实际上,和后面介绍的其它几种逻辑覆盖比较起来,语句覆盖是比较弱的覆盖原
则。作到了语句覆盖可能给人们一种心理的满足,以为每个语句都经历过,似乎可以放心了。其实这仍然是不十分可靠的。语句覆盖在测试被测程序中,除去对检查不可执行语句有一定作用外,并没有排除被测程序包含错误的风险。
二、判定覆盖
按判定覆盖准则进行测试是指,设计若干测试用例,运行被侧程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。判定覆盖又称为分支覆盖。
仍以上述程序段为例,若选用的两组测试用例是:
A=2
B=0CASE1
X=3
A=1
B=0CASE3
X=1
则可分别执行路径ace和abd,从而使两个判断的4个分支c、e和b、d分别得到覆盖。当然,我们也可以选用另外两组测试用例:
A=3
B=0CASE4
X=3
A=2
B=1CASE5
X=1
分别路径acd及abe,同样也可覆盖4个分支。
我们注意到,上述两组测试用例不仅满足了判定覆盖,同时还做到语句覆盖。从这一点看似乎判定覆盖比语句覆盖更强一些,但让我们设想,在此程序段中的第2个判断条件X>1如果错写成X<1,使用上述测试用例CASE5,照样能按原路径执行(abe),而不影响结呆。这个爭实说明,只作到判定覆盖仍无法确定判断内部条件的错误。因此,需要有更强的逻辑覆盖准则去检验判断内的条件。
以上仅考虑了两出II的判断,我们还应把判定覆盖准则扩充到多出丨I判断(如CASE语句)的情况。
三、条件覆盖
条件覆盖是指,设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
在上述程序段中,第一个判断应考虑到:
A>1,取真值,记为T1
A>1,取假值,即AW1,记为F1
B=0,取真值,记为T2
B=0,取假值,即BHO,记为F2
第2个判断应考虑到:
A=2,取真值,记为T3
A=2,取假值,即AH2,记为F3
X>1,取真值,记为T4
X>1,取假值,即XW1,记为F4
我们给出3个测试用例:CASE6,CASE7,CASES,执行该程序段所走路径及覆盖条件是:
测试用例
ABX
所走路径
覆盖条件
CASE6
203
ace
TuT2,T„T4
CASE7
101
abd
FPT2>F”F4
CASE8
211
abe
T】,F2tT3,F4
从这个表中可以看到,3个测试用例把4个条件的8种情况均作了覆盖。
进一步分析上表,覆盖了4个条件的8种情况的同时,把两个判断的4个分支b、c、d和e似乎也被覆盖。这样我们是否可以说,做到了条件覆盖,也就必然实现了判定覆盖呢?让我们来分析另一情况,假定选用两组测试用例是CASE9和CASE8,执行程序段的覆盖情况是:
测试用例
ABX
所走路径
覆盖分支
覆盖条件
CASE9
103
abe
be
Fi,T2,Ty
CASE8
211
abe
be
T“F29T39尺
这一覆盖情况表明,覆盖了条件的测试用例不一定覆盖了分支。事实上,它只覆盖了4个分支中的两个。为解决这一矛盾,需要对条件和分支兼顾。
四、判定■条件覆盖
判定-条件覆盖要求设计足够的测试用例,使得判断中每个条件的所有町能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
例中两个判断各包含两个条件,这4个条件在两个判断中可能有8种组合,它们是:
®A>1,B=0记为Tl,T2
A〉1,EHOi己为Tl,F2
AW],B=0记为Fl,T2
AW1,EMO记为Fl,F2
A=2,X)1记为T3,T4
A=2,XW1记为T3,F4
AH2,X)1记为F3,T4
AH2,XW1记为F3,F4
这里设计了4个测试用例,用以覆盖上述8种条件组合:
测试用例
ABX
糙盖组合号
所走跻往
慨盖条件
CASE1
203
①⑤
ace
Ti>T”T4
CASE8
211
②⑥
abe
tut“f4
CASE9
103
③⑦
abe
CASE10
111
abd
FpF"Fj,F4
我们注意到,这一程序段共有四条路径。以上4个测试用例固然覆盖了条件组合,同时也覆盖了4个分支,但仅覆盖了3条路径,却漏掉了路径acd。前面讨论的多种覆盖准则,有的虽提到了所走路径问题,但尚未涉及到路径的覆盖,而路径能否全面覆盖在软件测试中是个重要问题,因为程序要取得正确的结杲,就必须消除遇到的各种障碍,沿着特定的路径顺利执行。如果程序中的每一条路径都得到考验,才能说程序受到了全面检验。
五、路径覆盖
按路径覆盖要求进行测试是指,设计足够多测试用例,要求覆盖程序中所有可能的路径。
针对例中的4条可能路径
ace记为L1
abd记为L2
abe记为L3
acd记为L4
我们给出4个测试用例:CASE1,CASE7,CASES和CASE11,使其分别覆盖这
4条路径:
测试用例
ABX
覆盖路径
CASE1
2
03
ace
(S
CASE7
1
01
abd
(L:)
CASE8
2
11
abe
(U)
CASE11
3
01
acd
(U)
这里所用的程序段非常简短,也只有4条路径。但在实际问题中,一个不太复杂的程序,其路径数都是一个庞人的数字,要在测试中覆盖这样多的路径是无法实现的。为解决这一难题只得把覆盖的路径数压缩到一定限度内,例如,程序中的循坏体只执行了一次。
其实,即使对于路径数很有限的程序已经作到了路径覆盖,仍然不能保证被测程序的正确性。例如,在上述语句覆盖一段最后给出的程序段中出现的错误也不是路径覆盖可以发现的。
由此看出,各种结构测试方法都不能保证程序的正确性。但要记住,测试的目的并非要证明程序的正确性,而是要尽可能找出程序中的错误。确实并不存在一种十全十美的测试方法,能够发现所有的错误。想要撒卜•几网把湖中的鱼全都捕上来是做不到的,软件测试是有局限性的。