资源描述
白盒测试技术白盒测试技术逻辑覆盖逻辑覆盖控制结构测试控制结构测试白盒测试应该根据程序的控制结构设计测试用例白盒测试应该根据程序的控制结构设计测试用例,原则是原则是:保证模块中每一独立的路径至少执行一次保证模块中每一独立的路径至少执行一次;保证所有判断的每一分枝至少执行一次;保证所有判断的每一分枝至少执行一次;保证每一循环都在边界条件和一般条件下至保证每一循环都在边界条件和一般条件下至少各执行一次少各执行一次;验证所有内部数据结构的有效性。验证所有内部数据结构的有效性。逻辑覆盖逻辑覆盖逻辑覆盖是以程序内部的逻辑结构为基础的设计逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。这一方法要求测试人员对程序测试用例的技术。这一方法要求测试人员对程序的逻辑结构有清楚的了解,甚至要能掌握源程序的逻辑结构有清楚的了解,甚至要能掌握源程序的所有细节。的所有细节。由于覆盖测试的目标不同,逻辑覆盖又可分为:由于覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖语句覆盖判定覆盖判定覆盖条件覆盖条件覆盖判定判定/条件覆盖条件覆盖条件组合覆盖条件组合覆盖路径覆盖路径覆盖语句覆盖语句覆盖语句覆盖就是设计若干个测试用例,运行被测语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这程序,使得每一可执行语句至少执行一次。这种覆盖又称为点覆盖,它使得程序中每个可执种覆盖又称为点覆盖,它使得程序中每个可执行语句都得到执行,但它是最弱的逻辑覆盖准,行语句都得到执行,但它是最弱的逻辑覆盖准,效果有限,必须与其它方法交互使用。效果有限,必须与其它方法交互使用。To be continue(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7PROCEDURE Example(A,B:real;X:real);Begin IF(A1)AND(B=0)THEN X:=X/A;IF(A=2)OR(X1)THEN X:=X+1END;I.A=2,B=0,X=4-sacbed语句覆盖语句覆盖所有的语句至少执行一次!所有的语句至少执行一次!是是最弱最弱的逻辑覆盖的逻辑覆盖判定覆盖判定覆盖判定覆盖就是设计若干个测试用例,运行被测判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。分支至少经历一次。判定覆盖又称为分支覆盖。判定覆盖只比语句覆盖稍强一些,但实际效果判定覆盖只比语句覆盖稍强一些,但实际效果表明,只是判定覆盖,还不能保证一定能查出表明,只是判定覆盖,还不能保证一定能查出在判断的条件中存在的错误。因此,还需要更在判断的条件中存在的错误。因此,还需要更强的逻辑覆盖准则去检验判断内部条件。强的逻辑覆盖准则去检验判断内部条件。To be continue(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7每个语句至少执行一次!每个语句至少执行一次!每个判定的每种可能都至每个判定的每种可能都至少执行一次!少执行一次!即每个判定的真假分支都即每个判定的真假分支都至少执行一次!至少执行一次!I:A=3,B=0,X=3:sacbdII:A=2,B=1,X=1:sabed满足判定覆盖的测试用例满足判定覆盖的测试用例一定满足语句覆盖:判定一定满足语句覆盖:判定覆盖比语句覆盖强。但覆盖比语句覆盖强。但仍仍是是弱弱的逻辑覆盖。的逻辑覆盖。条件覆盖条件覆盖条件覆盖就是设计若干个测试用例,运条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判定的每行被测程序,使得程序中每个判定的每个条件的可能取值至少执行一次。个条件的可能取值至少执行一次。条件覆盖深入到判定中的每个条件,但条件覆盖深入到判定中的每个条件,但可能不能满足判定覆盖的要求。可能不能满足判定覆盖的要求。To be continue每个语句至少执行一次,而每个语句至少执行一次,而且判定表达式中的每个条件且判定表达式中的每个条件都要取得各种可能的结果。都要取得各种可能的结果。第一判定表达式第一判定表达式:设条件设条件 A1 A1 取真取真 记为记为T1T1 假假 T1T1 条件条件 B=0 B=0 取真取真 记为记为T2T2 假假 T2T2第二判定表达式第二判定表达式:设条件设条件 A=2 A=2 取真取真 记为记为T3T3 假假 T3T3 条件条件 X1 X1 取真取真 记为记为T4T4 假假 T4T4条件覆盖要求这条件覆盖要求这8 8种值都要取到种值都要取到(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1):A=1,B=1,X=1:sabd:A=2,B=0,X=4:sacbed测试测试用例用例通过通过路径路径满足的条件满足的条件A B X2 0 4sacbedT1,T2,T3,T41 1 1sabdT1,T2,T3,T4满足判定覆盖满足判定覆盖(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1):A=1,B=1,X=2:sabed:A=2,B=0,X=1:sacbed测试测试用例用例通过通过路径路径满足的条件满足的条件A B X2 0 1sacbedT1,T2,T3,T41 1 2 sabedT1,T2,T3,T4不满足判定覆盖不满足判定覆盖(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1):A=2,B=1,X=1:sabed测试测试用例用例通过通过路径路径满足的条件满足的条件A B X1 0 3 sabedT1,T2,T3,T42 1 1 sabedT1,T2,T3,T4:A=1,B=0,X=3:sabed(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7既不满足条件覆盖既不满足条件覆盖又不满足判定覆盖又不满足判定覆盖 条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖 判定覆盖也不一定包含条件覆盖判定覆盖也不一定包含条件覆盖 条件覆盖通常比判定覆盖强,因为它使判条件覆盖通常比判定覆盖强,因为它使判定表达式中每个条件都取到了两个不同的结定表达式中每个条件都取到了两个不同的结果,判定覆盖却关心整个判定表达式的值。果,判定覆盖却关心整个判定表达式的值。但也可能有相反的情况:虽然每个条件都取但也可能有相反的情况:虽然每个条件都取到了不同值,但判定表达式却始终只取一个到了不同值,但判定表达式却始终只取一个值。值。判定判定-条件覆盖条件覆盖既然判定条件不一定包含条件覆盖,条件覆盖既然判定条件不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖,就自然会提出一种能也不一定包含判定覆盖,就自然会提出一种能同时满足两种覆盖标准的逻辑覆盖,这就是同时满足两种覆盖标准的逻辑覆盖,这就是判判定定/条件覆盖。条件覆盖。判定条件覆盖就是设计足够的测试用例,使判定条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至次,同时每个判断本身的所有可能判断结果至少执行一次。换言之,即是要求各个判断的所少执行一次。换言之,即是要求各个判断的所有可能的条件取值组合至少执行一次。有可能的条件取值组合至少执行一次。To be continue判定判定-条件覆盖条件覆盖测试用例测试用例I,III,II既满足判定覆盖也满足条件覆盖既满足判定覆盖也满足条件覆盖的要求。严格来讲,合适的条件覆盖测试用例的要求。严格来讲,合适的条件覆盖测试用例设计应该做到满足判定设计应该做到满足判定/条件覆盖的标准:条件覆盖的标准:判定判定/条件覆盖并不比条件覆盖更强。条件覆盖并不比条件覆盖更强。判定条件覆盖有缺陷。表面上,它测试了所判定条件覆盖有缺陷。表面上,它测试了所有条件的取值,但事实并非如此,往往某些条有条件的取值,但事实并非如此,往往某些条件掩盖了另一些条件,会遗漏某些条件取值错件掩盖了另一些条件,会遗漏某些条件取值错误的情况。为彻底地检查所有条件的取值,需误的情况。为彻底地检查所有条件的取值,需要将判定语句中给出的复合条件表达式进行分要将判定语句中给出的复合条件表达式进行分解,形成由多个基本判定嵌套的流程图。这样解,形成由多个基本判定嵌套的流程图。这样就可以有效地检查所有的条件是否正确了。就可以有效地检查所有的条件是否正确了。判定判定-条件覆盖条件覆盖复合判定的例子:复合判定的例子:To be continue(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7A1X=X/AX=X+1T TT TF FF FsdB=0T TA=2X1T TF FF F判定判定-条件覆盖条件覆盖复合判定复合判定的例子:的例子:改为单个改为单个条件判定条件判定条件组合覆盖条件组合覆盖条件组合覆盖就是设计足够的测试用例,运行条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。值组合至少执行一次。这是一种相当强的覆盖准则,可以有效地检查这是一种相当强的覆盖准则,可以有效地检查各种可能的条件取值的组合是否正确。它不但各种可能的条件取值的组合是否正确。它不但可覆盖所有条件的可能取值的组合,还可覆盖可覆盖所有条件的可能取值的组合,还可覆盖所有判断的可取分支,但可能有的路径会遗漏所有判断的可取分支,但可能有的路径会遗漏掉。测试还不完全。掉。测试还不完全。A1,B0A1,B0A 1,B0A 1,B0A2,X1A2,X 1A2,X1A2,X 1选取足够多的测试数据,使得选取足够多的测试数据,使得每个判定表达式中条件的各种每个判定表达式中条件的各种可能组合都至少出现一次。可能组合都至少出现一次。(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 7(A1)(A1)(B=0)(B0)(A=2)(A2)(X1)(X1)I.A=2,B=0,X=4II.A=2,B=1,X=1III.A=1,B=0,X=2IV.A=1,B=1,X=1I:sacbedII:sabedIII:sabedIV:sabd覆覆盖盖路路径径满足条件组合覆盖标准的测试数据,也一定满满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定足判定覆盖、条件覆盖和判定/条件覆盖标准。条件覆盖标准。测试用例测试用例通过路径通过路径满足的条件满足的条件条件条件组合组合覆盖覆盖分支分支ABX204sacbedT1,T2,T3,T41,54563211sabedT1,T2,T3,T42,6263102sabedT1,T2,T3,T43,7263111sabdT1,T2,T3,T44,8234 4组测试数据可以使组测试数据可以使8 8种条件组合每种至少出种条件组合每种至少出现一次:现一次:显然,满足条件组合覆盖的测试用例,也一定满足判定覆盖、显然,满足条件组合覆盖的测试用例,也一定满足判定覆盖、条件覆盖和判定条件覆盖和判定/条件覆盖。条件覆盖。所以,条件组合覆盖是前述几种覆盖中最强的。但满足条件组所以,条件组合覆盖是前述几种覆盖中最强的。但满足条件组合覆盖的不一定能使程序中的每条路径都执行到,如合覆盖的不一定能使程序中的每条路径都执行到,如sacbdsacbd。如果连通图如果连通图 G 的子图的子图G是连通的,而且包是连通的,而且包含含G的所有节点,则称的所有节点,则称G是是G的点覆盖。的点覆盖。与语句覆盖标准相同。与语句覆盖标准相同。点覆盖点覆盖如果连通图如果连通图 G 的子图的子图G是连通的,而且包是连通的,而且包含含G的所有边,则称的所有边,则称G是是G的边覆盖。的边覆盖。通常与判定覆盖标准相同。通常与判定覆盖标准相同。1234567:A=3,B=0,X=3(1-4-5-3);:A=2,B=1,X=1(1-2-6-7):A=1,B=1,X=1(1-2-3);:A=2,B=0,X=4(1-4-5-6-7)或或边覆盖边覆盖路径覆盖路径覆盖路径测试就是设计足够的测试用例,覆路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。这是最强的盖程序中所有可能的路径。这是最强的覆盖准则。但在路径数目很大时,真正覆盖准则。但在路径数目很大时,真正做到完全覆盖是很困难的,必须把覆盖做到完全覆盖是很困难的,必须把覆盖路径数目压缩到一定限度。路径数目压缩到一定限度。测试用例测试用例通过路径通过路径满足的条件满足的条件ABX111sabdT1,T2,T3,T4112sabedT1,T2,T3,T4301sacbdT1,T2,T3,T4204sacbedT1,T2,T3,T4路径覆盖是相当强的逻辑覆盖,它保证程序中每条可能的路径都路径覆盖是相当强的逻辑覆盖,它保证程序中每条可能的路径都至少执行一次,因此更具代表性,暴露错误的能力也比较强。但至少执行一次,因此更具代表性,暴露错误的能力也比较强。但为了做到路径覆盖,只需考虑每个判定式的取值,并没有检验表为了做到路径覆盖,只需考虑每个判定式的取值,并没有检验表达式中条件的各种可能组合。如果将路径覆盖和条件组合覆盖结达式中条件的各种可能组合。如果将路径覆盖和条件组合覆盖结合起来,可以设计出检错能力更强的测试数据。合起来,可以设计出检错能力更强的测试数据。路径覆盖路径覆盖通过分析由控制构造的环路的复杂性,导出通过分析由控制构造的环路的复杂性,导出基本路径集合,从而设计测试用例,保证这基本路径集合,从而设计测试用例,保证这些路径至少通过一次。些路径至少通过一次。为了使用图论的知识和术语,引入流图为了使用图论的知识和术语,引入流图(亦即亦即程序图程序图)的概念,流图即把流程图中结构化构的概念,流图即把流程图中结构化构件改用一般有向图的表示形式。件改用一般有向图的表示形式。基本路径测试法基本路径测试法流图流图(flow graph)在流图中用圆表示节点,一个圆代表一条或在流图中用圆表示节点,一个圆代表一条或多条语句。程序流程图中的一个处理框序列多条语句。程序流程图中的一个处理框序列和一个菱形判定框,可以映射成流图中的一和一个菱形判定框,可以映射成流图中的一个节点。流图中的箭头线称为边,它和程序个节点。流图中的箭头线称为边,它和程序流程图中的箭头线类似,代表控制流。在流流程图中的箭头线类似,代表控制流。在流图中一条边必须终止于一个节点,即使这个图中一条边必须终止于一个节点,即使这个节点并不代表任何语句节点并不代表任何语句(实际上相当于一个实际上相当于一个空语句空语句)。由边和节点围成的面积称为区域,。由边和节点围成的面积称为区域,当计算区域数时应该包括图外部未被围起来当计算区域数时应该包括图外部未被围起来的那个区域。的那个区域。利用流图表示控制逻辑利用流图表示控制逻辑 顺序结构顺序结构if 结构结构Case 结构结构while 结构结构until 结构结构流图流图(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fbcea1 1sd2 23 34 45 56 67 71234567流图流图导出程序流程图的拓扑结构导出程序流程图的拓扑结构-流图流图计算流图计算流图G的环路复杂度的环路复杂度V(G)确定只包含独立路径的基本路径集确定只包含独立路径的基本路径集设计测试用例设计测试用例流程图流程图流程图流程图=流图流图流图流图=基本路径基本路径基本路径基本路径=测试用例测试用例测试用例测试用例基本路径测试步骤基本路径测试步骤Step1 根据程序的逻辑结构画出流程图根据程序的逻辑结构画出流程图void Func(int nPosX,int nPosY)while(nPosX 0)int nSum=nPosX+nPosY;if(nSum 1)nPosX-;nPosY-;else if(nSum 0,B 0,C 0,且A+B C,B+C A,A+C B。如果是等腰的,还要判断是否A=B,或B=C,或A=C。对于等边的,则需判断是否A=B,且B=C,且A=C。列出等价类表:A0 AND B0 AND C0 AND A+BC AND B+CA AND C+AB(1)设计测试用例:输入顺序是 A,B,C3,4,5覆盖等价类(1)3,3,4覆盖等价类(1)(13)3,4,4覆盖等价类(1)(14)3,4,3,覆盖等价类(1)(15)3,3,3覆盖等价类(1)(17)3,4,5覆盖等价类 (16)3,4,4覆盖等价类(18)3,4,3覆盖等价类(19)3,3,4覆盖等价类(20)0,1,2覆盖等价类(7)。不能构成三角形。1,0,2覆盖等价类(8)。同上。1,2,0覆盖等价类(9)。同上。1,2,3覆盖等价类(10)。同上。1,3,2覆盖等价类(11)。同上。3,1,2覆盖等价类(12)。同上。作业1.设计下列伪码程序的语句覆盖和路径覆盖测试用例STARTINPUT(A,B,C)IF A5 THEN X=10 ELSE X=1 ENDIFIF B10 THEN Y=20 ELSE Y=2 ENDIFIF C15 THEN Z=30 ELSE Z=3 ENDIFPRINT(X,Y,Z)STOP(10,30,60),(10,20,30)覆盖(1,1,1),(1,2,3)设第一个判定的取真分支为P1,取假分支为P1;设第二个判定的取真分支为P2,取假分支为P2;设第三个判定的取真分支为P3,取假分支为P3;覆盖P1P2P3 使用测试用例:(1,1,1),(1,2,3)P1P2P3 (1,1,60),(1,2,30)P1P2P3 (1,20,1),(1,20,3)P1P2P3 (1,20,60),(1,20,30)P1P2P3 (10,1,1),(10,2,3)P1P2P3 (10,1,60),(10,2,30)P1P2P3 10,20,1),(10,20,3)P1P2P3 (10,20,60),(10,20,30)2.设计下列伪码程序的分支覆盖和条件组合覆盖测试用例STARTINPUT(A,B,C,D)IF(A0)AND(B0)THEN X=A+B ELSE X=A-B ENDIFIF(CA)OR(D0,B0(2)A0,B0(3)A0(4)A=0,BA,DA,D=B(7)C=A,DB(8)C=B(1,1,2,0),(2,2)覆盖了组合(1),(5)(1,0,2,1),(1,1)覆盖(2)(6)(0,1,-1,0),(-1,-1)覆盖(3)(7)(0,0,-1,1),(0,0)覆盖了(4),(8)
展开阅读全文