《软件测试技术基础》第4章苏州大学应用技术学院/7511第4章白盒测试方法4.1白盒测试基本概念4.2逻辑覆盖4.3独立路径测试4.4循环测试4.5面向对象的白盒测试4.6其他白盒测试方法简介本章小结练习题思考题《软件测试技术基础》第4章苏州大学应用技术学院/7524.1白盒测试基本概念白盒测试(White-boxTesting)原理把程序看成装在一个透明的白盒子里,程序的结构和处理过程完全可见。检查程序结构和处理过程是否存在问题。检查程序中的每条通路是否存在问题。测试依据被测程序的源代码,而不是软件的规格说明。因此,白盒测试也称作结构测试、逻辑驱动测试基于源代码的测试、基于覆盖的测试。《软件测试技术基础》第4章苏州大学应用技术学院/7534.1白盒测试基本概念白盒测试方法静态测试代码检查法、静态结构分析法、静态质量度量动态测试逻辑覆盖语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖条件组合、路径测试循环覆盖基本路径测试其它方法域测试、Z路径测试、数据流测试…《软件测试技术基础》第4章苏州大学应用技术学院/7544.1白盒测试基本概念测试人员白盒测试要求测试人员对程序的结构和处理过程有完全的了解,一般由开发工程师负责实施。检查内容路径对程序模块的所有独立执行路径至少要测试一次。逻辑判定对所有的逻辑判定,取真或假的两种情况至少要测试一次。边界对程序进行边界检查。常见的如数据越界检验等。内部数据结构检验内部数据结构的有效性。《软件测试技术基础》第4章苏州大学应用技术学院/7554.1白盒测试基本概念基本概念——流图流程图的一种简化表示。可描述一个软件程序的结构程序的运行过程。组成结点或节点——带有标号的圆圈控制流线或边线——带有箭头的弧线或线v1v2v3v4v5v6v7e1e2e3e4e5e6e7e8开始(条件1)AND(条件2)语句1(条件3)OR(条件4)语句2语句3结束v1v2v7v3v4v5v6e2e3e4e6e1e5e7e8《软件测试技术基础》第4章苏州大学应用技术学院/7564.1白盒测试基本概念基本概念——流图的图示《软件测试技术基础》第4章苏州大学应用技术学院/7574.1白盒测试基本概念基本概念——流图的图示输入x,yy=y-xx=x-y输出x+yx0&&y0xy?YYNN节点边区域复合条件分解为多个单个条件!《软件测试技术基础》第4章苏州大学应用技术学院/7584.1白盒测试基本概念基本概念——环形复杂度也称圈复杂度(CyclomaticComplexity)是程序结构复杂性的度量方法,。圈复杂度由ThomasJ.McCabe,Sr于1976提出,用来指示程序的复杂程度,它是一个软件复杂度的度量标准主要用来衡量代码中所以线性独立的路径条数.圈复杂度大说明程序代码可能质量低且难于测试和维护。根据经验程序的可能错误和高的圈复杂度有着很大关系。《软件测试技术基础》第4章苏州大学应用技术学院/7594.1白盒测试基本概念圈复杂度的几种计算(1)对于结构化程序的圈复杂度V(G)定义:V(G)=E-N+2P其中:E表示控制流图的边的数量。N表示控制流图的节点数。P表示控制流图中相连接的部分,因为控制流图都是连通的,所以P为1。例(右图)V(G)=10-7+2=5《软件测试技术基础》第4章苏州大学应用技术学院/75104.1白盒测试基本概念圈复杂度的几种计算(2)控制流图构成强连通图时应用:V(G)=E-N+P其中:E表示控制流图的边的数量。N表示控制流图的节点数。P表示控制流图中相连接的部分,P通常为1。例(右图)V(G)=11-7+1=5《软件测试技术基础》第4章苏州大学应用技术学院/75114.1白盒测试基本概念圈复杂度的几种计算(3)圈复杂度等于控制流图将平面划分成区域的数量应用:V(G)=R其中R表示区域数。例(右图)各区域以及控制流图之外区域数量之和为5,所以此控制流图的圈复杂度V(G)=5R1R2R3R4R5《软件测试技术基础》第4章苏州大学应用技术学院/75124.1白盒测试基本概念圈复杂度的几种计算(4)圈复杂度等于控制流图中判定节点的数量加1:V(G)=P+1其中P表示判定节点数;判定节点指包含条件的节点,也称谓词节点。。例(右图)V(G)=4+1=5P1P2P3P4《软件测试技术基础》第4章苏州大学应用技术学院/75134.1白盒测试基本概念圈复杂度的计算V(G)=?《软件测试技术基础》第4章苏州大学应用技术学院/75144.1白盒测试基本概念圈复杂度的计算V(G)=E-N+2PE=?(19);N=?(13)P=?(1)V(G)=E-N+PE=?(20)N=?(13)P=?(1)V(G)=RR=?(8)V(G)=P+1P=?(7)R1P1《软件测试技术基础》第4章苏州大学应用技术学院/75154.1白盒测试基本概念基本概念——图矩阵即流图的邻接矩阵表示形式。12345671e1e22e4e53e3e94e6e75e86e?7e10《软件测试技术基础》第4章苏州大学应用技术学院/75164.2逻辑覆盖4.2.1逻辑覆盖标准4.2.2最少测试用例数计算《软件测试技术基础》第4章苏州大学应用技术学院/75174.2.1逻辑覆盖标准语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖《软件测试技术基础》第4章苏州大学应用技术学院/7518语句覆盖设计足够的测试用例,使得程序中的每个语句至少执行一次。但没有考虑条件取值不同的情况。入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFABXiXo用例12043《软件测试技术基础》第4章苏州大学应用技术学院/7519判定覆盖——又称分支覆盖设计足够的测试用例,使得在语句覆盖的基础上,程序中每个判定的取“真”分支和取“假”分支至少都执行一次。入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFABXiXo用例13031用例22111+1《软件测试技术基础》第4章苏州大学应用技术学院/7520条件覆盖设计足够的测试用例,在语句覆盖的基础上,使得程序判定中的每个条件能获得各种可能的结果。ABXiXo用例12043用例21111用例1A2011.5用例2A1123入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FF条件:A1,A=1;B=0,B0;A=2,A2;X1,X=1;《软件测试技术基础》第4章苏州大学应用技术学院/7521判定/条件覆盖设计足够的测试用例,使得同时满足判定和条件覆盖。判定A1ANDB=0;A=2ORX1条件A1,A=1;B=0,B0;A=2,A2;X1,X=1;入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFABXiXo用例12043用例21112《软件测试技术基础》第4章苏州大学应用技术学院/7522条件组合覆盖设计足够的测试用例,使得程序所有判定中的每个条件能获得各种可能组合至少一次。入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFABXiXo用例12043用例22111用例31022用例41113《软件测试技术基础》第4章苏州大学应用技术学院/7523路径覆盖结点覆盖运行所测程序,要覆盖程序中所有结点。边覆盖运行所测程序,要覆盖程序中所有边。路径测试运行所测程序,要覆盖程序中所有可能的路径。《软件测试技术基础》第4章苏州大学应用技术学院/7524路径覆盖设计足够的测试用例,使得程序中每一条可能路径都至少执行一次。入口A1ANDB=0TA=2ORX1TX=X/AX=X+1返回FFABXiXo用例12043用例22111用例34021/2用例41113《软件测试技术基础》第4章苏州大学应用技术学院/7525各种结构测试方法发现错误能力各种结构测试方法发现错误能力从小到大:语句覆盖:每条语句至少执行一次。判定覆盖:每个判定的每个分支至少执行一次。条件覆盖:每个判定中的每个条件应取到各种可能的值。判定-条件覆盖:同时满足判定覆盖和条件覆盖。条件组合覆盖:每个判定中各条件的每一种组合至少出现一次。路径覆盖:使程序中每一条可能的路径至少执行一次。各种结构测试方法都不能保证证明程序的正确性《软件测试技术基础》第4章苏州大学应用技术学院/7526各种结构测试方法之间关系条件组合覆盖准则判定-条件覆盖准则判定覆盖准则条件覆盖准则语句覆盖准则路径覆盖准则不考虑语句或分支是否被执行,因此它与语句覆盖之间没有包含关系,和判定覆盖之间也没有包含关系。对一般程序测试,要达到100%的路径覆盖几乎是不可能的。所以可以使用基本路径测试。《软件测试技术基础》第4章苏州大学应用技术学院/75274.2逻辑覆盖——测试举例程序段:voidDo(intX,intA,intB){1.if((A0)&&(B2))2.X=X+A;3.else4.{5.if((A==0)||(X1))6.A=A+1;7.}8.}A0andB2A=0orX1X=X+AA=A+1EndBegin12568TTFFT1T2T3T4TATBs《软件测试技术基础》第4章苏州大学应用技术学院/75284.2逻辑覆盖——测试举例分析:结点S,1,2,5,6,8;判定TA,TB条件T1,T2,T3,T4路径S-1,1-2,1-5,2-8,5-6,5-8;A0andB2A=0orX1X=X+AA=A+1EndBegin12568TTFFT1T2T3T4TATBs《软件测试技术基础》第4章苏州大学应用技术学院/75294.2逻辑覆盖——测试举例(1)语句覆盖执行路径通过:1→2→81→5→6→8测试用例:1:A=1B=1X=0(路径1→2→8)2:A=0B=3X=0(路径1→5→6→8)A0andB2A=0orX1X=X+AA=A+1EndBegin12568TTFFT1T2T3T4TATBs《软件测试技术基础》第4章苏州大学应用技术学院/75304.2逻辑覆盖——测试举例(2)判定覆盖两个判定表达式的取真和取假分支都要走到执行路径为:1→2→8、1→5→8和1→5→6→8,设计测试用例:1:A=1B=1X=0(覆盖条件:TA,路径1→2→8)2:A=0B=3X=0(覆盖条件:!TA,TB,路径1→5→6→8)3:A=-1B=3X=2(覆盖条件:!TA,!TB路径1→5→8)A0andB2A=0orX1X=X+AA=A+1EndBegin12568TTFFT1T2T3T4TATBs《软件测试技术基础》第4章苏州大学应用技术学院/75314.2