资源描述
1vv软软软软件件件件测测测测试试试试方方方方法法法法和和和和技技技技术术术术是是是是多多多多种种种种多多多多样样样样的的的的,可可可可以以以以从从从从不不不不同的角度加以分类同的角度加以分类同的角度加以分类同的角度加以分类vv从从从从测测测测试试试试是是是是否否否否针针针针对对对对系系系系统统统统的的的的内内内内部部部部结结结结构构构构和和和和具具具具体体体体实实实实现现现现算算算算法法法法的的的的角角角角度度度度来来来来看看看看,可可可可分分分分为为为为黑黑黑黑盒盒盒盒测测测测试试试试和和和和白白白白盒盒盒盒测测测测试试试试vv从从从从是是是是否否否否需需需需要要要要执执执执行行行行被被被被测测测测软软软软件件件件的的的的角角角角度度度度,可可可可分分分分为为为为静静静静态测试态测试态测试态测试和和和和动态测试动态测试动态测试动态测试软件测试方法软件测试方法2vv两两两两种种种种测测测测试试试试方方方方法法法法从从从从不不不不同同同同的的的的角角角角度度度度出出出出发发发发,反反反反映映映映了了了了软软软软件件件件的不同侧面,也适用于不同的开发环境的不同侧面,也适用于不同的开发环境的不同侧面,也适用于不同的开发环境的不同侧面,也适用于不同的开发环境vv黑盒测试:基于黑盒测试:基于黑盒测试:基于黑盒测试:基于软件设计规范软件设计规范软件设计规范软件设计规范设计测试用例设计测试用例设计测试用例设计测试用例vv白盒测试:基于白盒测试:基于白盒测试:基于白盒测试:基于代码覆盖情况代码覆盖情况代码覆盖情况代码覆盖情况设计测试用例设计测试用例设计测试用例设计测试用例eg.eg.eg.eg.排水系统排水系统排水系统排水系统测试方法黑盒与白盒测试方法黑盒与白盒3白盒测试白盒测试白盒测试白盒测试(WHITE-BOX TESTING)(WHITE-BOX TESTING)(WHITE-BOX TESTING)(WHITE-BOX TESTING)也称也称也称也称结构测试结构测试结构测试结构测试、逻辑驱动测试逻辑驱动测试逻辑驱动测试逻辑驱动测试。vv此此此此方方方方法法法法把把把把测测测测试试试试对对对对象象象象看看看看做做做做一一一一个个个个透透透透明明明明的的的的盒盒盒盒子子子子,它它它它允允允允许许许许测测测测试试试试人人人人员员员员利利利利用用用用程程程程序序序序内内内内部部部部的的的的逻逻逻逻辑辑辑辑结结结结构构构构及及及及有有有有关关关关信信信信息息息息,设设设设计计计计或或或或选选选选择择择择测测测测试试试试用用用用例例例例,对程序所有逻辑路径进行测试。对程序所有逻辑路径进行测试。对程序所有逻辑路径进行测试。对程序所有逻辑路径进行测试。vv通过在不同点检查程序的状态,确定实际的状态是否与预期通过在不同点检查程序的状态,确定实际的状态是否与预期通过在不同点检查程序的状态,确定实际的状态是否与预期通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为逻辑测试。白盒测试的主的状态一致。因此白盒测试又称为逻辑测试。白盒测试的主的状态一致。因此白盒测试又称为逻辑测试。白盒测试的主的状态一致。因此白盒测试又称为逻辑测试。白盒测试的主要方法有逻辑驱动、基路测试等。要方法有逻辑驱动、基路测试等。要方法有逻辑驱动、基路测试等。要方法有逻辑驱动、基路测试等。第第4 4章章 白盒测试白盒测试4软软软软件件件件人人人人员员员员使使使使用用用用白白白白盒盒盒盒测测测测试试试试方方方方法法法法,主主主主要要要要想想想想对对对对程程程程序序序序模模模模块块块块进进进进行行行行如如如如下下下下的的的的检检检检查:查:查:查:vv对程序模块的所有独立的执行路径至少测试一次;对程序模块的所有独立的执行路径至少测试一次;对程序模块的所有独立的执行路径至少测试一次;对程序模块的所有独立的执行路径至少测试一次;vv对对对对所所所所有有有有的的的的逻逻逻逻辑辑辑辑判判判判定定定定,取取取取“真真真真”与与与与取取取取“假假假假”的的的的两两两两种种种种情情情情况况况况都都都都至至至至少少少少测试一次;测试一次;测试一次;测试一次;vv在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;在循环的边界和运行界限内执行循环体;vv测试内部数据结构的有效性等。测试内部数据结构的有效性等。测试内部数据结构的有效性等。测试内部数据结构的有效性等。白盒测试的作用白盒测试的作用5vv对对对对一一一一个个个个具具具具有有有有多多多多重重重重选选选选择择择择和和和和循循循循环环环环嵌嵌嵌嵌套套套套的的的的程程程程序序序序,不不不不同同同同的的的的路径数目可能是天文数字。路径数目可能是天文数字。路径数目可能是天文数字。路径数目可能是天文数字。vv给给给给出出出出一一一一个个个个小小小小程程程程序序序序的的的的流流流流程程程程图图图图,它它它它包包包包括括括括了了了了一一一一个个个个执执执执行行行行20202020次的循环。次的循环。次的循环。次的循环。vv包包包包含含含含的的的的不不不不同同同同执执执执行行行行路路路路径径径径数数数数达达达达5 5 5 520202020条条条条,对对对对每每每每一一一一条条条条路路路路径径径径进进进进行行行行测测测测试试试试需需需需要要要要1 1 1 1毫毫毫毫秒秒秒秒,假假假假定定定定一一一一年年年年工工工工作作作作365 365 365 365 24242424小小小小时,要想把所有路径测试完,需时,要想把所有路径测试完,需时,要想把所有路径测试完,需时,要想把所有路径测试完,需3170317031703170年。年。年。年。白盒测试白盒测试615 sideA=atoi(argv1);15 sideA=atoi(argv1);16 sideB=atoi(argv2);16 sideB=atoi(argv2);17 sideC=atoi(argv3);17 sideC=atoi(argv3);181819 If(sideA=sideB)&(sideA=sideC)19 If(sideA=sideB)&(sideA=sideC)20 20 21 s=0.5*(sideA+sideB+sideC);21 s=0.5*(sideA+sideB+sideC);22 Area=sqrt(s/(s-sideA)*(s-sideB)*(s-sideC);22 Area=sqrt(s/(s-sideA)*(s-sideB)*(s-sideC);23 printf(“area=%gn”,Area);23 printf(“area=%gn”,Area);24 24 25 else 25 else 26 puts(“not an equilateral triangle”);26 puts(“not an equilateral triangle”);27 return 0;27 return 0;28 28 Figure1.Code Under TestFigure1.Code Under Test白盒测试技术S=0.5(SideA+SideB+SideC)S=0.5(SideA+SideB+SideC)Area=S(S-SideA)(S-SideB)(S-SideC)Area=S(S-SideA)(S-SideB)(S-SideC)1/21/2白盒测试白盒测试7TrueTrueDirect GraphDirect GraphTest Case1Test Case1Test Case2Test Case2Inputs:Inputs:Inputs:Inputs:SideA=2 SideA=2 SideA=3 SideA=3 SideB=2 SideB=2 SideB=4 SideB=4 SideC=2 SideC=2 SideC=5 SideC=5EntranceEntrance15151616171719192121222223232626ExitExitTrueTrueFalseFalseEntranceEntrance15151616171719192121222223232626ExitExitFalseFalseEntranceEntrance1515161617171919ExitExitFalseFalse2626212122222323TrueTrueActual OutputActual Output Actual Output Actual OutputArea=1.73205Area=1.73205 not equilateral triangle not equilateral triangle白盒测试技术白盒测试白盒测试8vv 语句覆盖语句覆盖vv 判定覆盖判定覆盖vv 条件覆盖条件覆盖vv 判定条件覆盖判定条件覆盖vv 条件组合覆盖条件组合覆盖逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。它属白盒测试范畴。的技术。它属白盒测试范畴。4.1 逻辑覆盖逻辑覆盖9(A1)and(B=0)(A=2)or(X1)X=X/AX=X+1T TT TF FF Fabdce 四条路径101、语句覆盖、语句覆盖n n使程序中每个语句至少执行一次。使程序中每个语句至少执行一次。使程序中每个语句至少执行一次。使程序中每个语句至少执行一次。n n选择足够的测试用例选择足够的测试用例选择足够的测试用例选择足够的测试用例,使得程序中每个语句至少都能被执行一次使得程序中每个语句至少都能被执行一次使得程序中每个语句至少都能被执行一次使得程序中每个语句至少都能被执行一次.开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce只需设计一个测试用例只需设计一个测试用例:输入数据:输入数据:A=2,B=0,X=4 即达到了语句覆盖。即达到了语句覆盖。语句覆盖是语句覆盖是最弱最弱的的逻辑覆盖逻辑覆盖(如:(如:AND AND 写成写成 OROR,X1写成写成X1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce可设计两组测试用例可设计两组测试用例:A=3,B=0,X=3可覆盖可覆盖c、d分支分支A=2,B=1,X=1可覆盖可覆盖b、e分支分支两组测试用例可覆盖所两组测试用例可覆盖所有判定的真假分支有判定的真假分支判定覆盖仍是判定覆盖仍是弱弱的逻辑的逻辑覆盖,只覆盖了全部路覆盖,只覆盖了全部路径的一半。径的一半。123 3、条件覆盖、条件覆盖、条件覆盖、条件覆盖n n使每个判定的每个条件的可能取值至少执行一次。使每个判定的每个条件的可能取值至少执行一次。使每个判定的每个条件的可能取值至少执行一次。使每个判定的每个条件的可能取值至少执行一次。n n执行足够的测试用例执行足够的测试用例执行足够的测试用例执行足够的测试用例,使得判定中的每个条件获得各种可能的结果使得判定中的每个条件获得各种可能的结果使得判定中的每个条件获得各种可能的结果使得判定中的每个条件获得各种可能的结果.开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T4第一判定表达式第一判定表达式:设条件设条件 A1 A1 取真取真 记为记为T1T1 假假 T1T1 条件条件 B=0 B=0 取真取真 记为记为T2T2 假假 T2T2第二判定表达式第二判定表达式:设条件设条件 A=2 A=2 取真取真 记为记为T3T3 假假 T3T3 条件条件 X1 X1 取真取真 记为记为T4T4 假假 T4T413测试用例测试用例通过通过满足的满足的覆盖覆盖ABX路径路径条件条件分支分支103abeT1,T2,T3,T4b,e211abeT1,T2,T3,T4b,e两个测试用例覆盖了四个条件八种可能取值。两个测试用例覆盖了四个条件八种可能取值。未覆盖未覆盖c、d分支,不满足判定覆盖的要求分支,不满足判定覆盖的要求.条件覆盖不一定包含判定覆盖条件覆盖不一定包含判定覆盖 判定覆盖也不一定包含条件覆盖判定覆盖也不一定包含条件覆盖144、判定判定/条件覆盖条件覆盖选取足够多的选取足够多的测试用例,使判断测试用例,使判断中的每个条件的所中的每个条件的所有可能取值至少执有可能取值至少执行一次,同时每个行一次,同时每个判断本身的所有可判断本身的所有可能判断结果至少执能判断结果至少执行一次行一次.开始开始(A1)AND(B=0)(A=2)OR(X1)返回返回X=X/AX=X+1FFTTabdce满足条件满足条件:T1,T1,T2,T2 T3,T3 T4,T415测试用例测试用例通过通过满足的条件满足的条件覆盖覆盖ABX路径路径分支分支204aceT1,T2,T3,T4c,e111abdT1,T2,T3,T4b,d能同时满足判定、条件两种覆盖标准的取值能同时满足判定、条件两种覆盖标准的取值165、条件组合覆盖、条件组合覆盖所有可能的条件取值组合至少执行一次所有可能的条件取值组合至少执行一次A1,B=0A1,B0A 1,B=0A 1,B0A=2,X1A=2,X 1A2,X1A2,X 1测试用例测试用例通过通过满足的满足的覆盖覆盖ABX路径路径条件条件分支分支204aceT1,T2,T3,T4c,e211abeT1,T2,T3,T4b,e102abdT1,T2,T3,T4b,d111abdT1,T2,T3,T4b,d176、修正条件判定覆盖、修正条件判定覆盖每一个程序模块的入口、出口都至少被调每一个程序模块的入口、出口都至少被调用一次;每个条件对于判定的结果值是独立用一次;每个条件对于判定的结果值是独立的。的。借助于表达式语法分析树进行测试用例的借助于表达式语法分析树进行测试用例的分析和设计:分析和设计:中间内部结点:二元中间内部结点:二元/一元操作符一元操作符叶子结点:变量叶子结点:变量/常量常量Eg.A BC(借助于表达式语法分析树进行分析)(借助于表达式语法分析树进行分析)18修正条件判定覆盖测试数据设计方法及案例修正条件判定覆盖测试数据设计方法及案例n对于一个给定的表达式语法分析树,遍历完此树即可达到对于一个给定的表达式语法分析树,遍历完此树即可达到修正判定覆盖。修正判定覆盖。n步骤:步骤:n首先选择一个条件(即子句,作为待考察因素首先选择一个条件(即子句,作为待考察因素/测试子句),然后测试子句),然后从此子句的叶子结点往上一直走到该语法树的根节点,再从根节从此子句的叶子结点往上一直走到该语法树的根节点,再从根节点到其他的每个子句(叶子节点)。点到其他的每个子句(叶子节点)。n在遍历树的过程中,若给定子句的父节点是在遍历树的过程中,若给定子句的父节点是or,则其兄弟结点的,则其兄弟结点的值必须是值必须是false;是;是and,则必须是,则必须是true;是;是not,则其父节点的值,则其父节点的值是是not结点上值的反值。结点上值的反值。n如此重复下去,直至遍历完成。如此重复下去,直至遍历完成。nEg.A BCn若若B作为测试子句,则作为测试子句,则A应为应为false,C应为应为truen同理,若同理,若A作为测试子句,则作为测试子句,则B应为应为false,C为为truen若若C作为测试子句,则作为测试子句,则A、B的取值保证的取值保证A B为真即可为真即可19发现错误发现错误的能力的能力标标 准准含含 义义 1 1(弱弱)语句覆盖语句覆盖每条每条语语句句至少执行一次至少执行一次 2 2判定覆盖判定覆盖每一判定的每个每一判定的每个分支分支至少执行一次至少执行一次 3 3条件覆盖条件覆盖每一判定中的每个每一判定中的每个条件条件,分别按,分别按“真真”、“假假”至少各执行一次至少各执行一次4 4 判定判定/条件覆盖条件覆盖 同时满足同时满足判定覆盖判定覆盖和和条件覆盖条件覆盖的要求的要求5 5(强强)条件组合覆盖条件组合覆盖求出判定中求出判定中所有条件的各种可能组合所有条件的各种可能组合值,每一可能的条件组合至少执行一值,每一可能的条件组合至少执行一次次 逻辑覆盖测试的逻辑覆盖测试的5 5种标准种标准 204.2 路径测试路径测试n n路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,路径测试就是设计足够的测试用例,覆盖程序覆盖程序覆盖程序覆盖程序中所有可能的路径中所有可能的路径中所有可能的路径中所有可能的路径。测测测测 试试试试 用用用用 例例例例 通过路径通过路径通过路径通过路径 覆盖条件覆盖条件覆盖条件覆盖条件【(2,0,4),(2,0,3)(2,0,4),(2,0,3)】ace ace 【(1,1,1),(1,1,1)(1,1,1),(1,1,1)】abdabd【(1,1,2),(1,1,3)(1,1,2),(1,1,3)】abe abe 【(3,0,3),(3,0,1)(3,0,3),(3,0,1)】acdacd21案例:案例:P99条条 件件 测测 试试 路路 径径 选选 择择n n当程序中判定多于一个时,形成的当程序中判定多于一个时,形成的分支结构可以分为两类:分支结构可以分为两类:嵌套型分嵌套型分支结构支结构和和连锁型分支结构连锁型分支结构。n n对于连锁型分支结构,对于连锁型分支结构,若有若有n个判定个判定语句,需要有语句,需要有2n个测试用例,覆盖个测试用例,覆盖它的它的2n条路径。条路径。n n对于嵌套型分支结构,若有对于嵌套型分支结构,若有n个判定个判定语句,需要语句,需要n+1个测试用例;个测试用例;22循环测试路径选择循环测试路径选择n n循环分为循环分为4种不同类型:种不同类型:简单循环简单循环、连连锁循环锁循环、嵌套循环嵌套循环和和非结构循环非结构循环。(1)简单循环简单循环 零次循环零次循环:从循环入口到出口:从循环入口到出口 一次循环一次循环:检查循环初始值:检查循环初始值 二次循环二次循环:检查:检查2次循环次循环 m次循环:次循环:检查多次循环检查多次循环 最大次数循环、比最大次数多一次、最大次数循环、比最大次数多一次、少一次的循环。少一次的循环。23例:求数组中的最小值例:求数组中的最小值k=i;for(j=i+1;j=n;j+)if(Aj Ak)k=j;24k=i;j=i+1;j=n?AjAk?j+fdcabek=jYN测试用例选择测试用例选择26 对最内层循环做简单循环的全部测试。对最内层循环做简单循环的全部测试。对最内层循环做简单循环的全部测试。对最内层循环做简单循环的全部测试。所有其它层的循环变量置为最小值;所有其它层的循环变量置为最小值;所有其它层的循环变量置为最小值;所有其它层的循环变量置为最小值;逐步外推,对其外面一层循环进行测试。逐步外推,对其外面一层循环进行测试。逐步外推,对其外面一层循环进行测试。逐步外推,对其外面一层循环进行测试。测试时保持所有外层循环的循环变量取最小值,测试时保持所有外层循环的循环变量取最小值,测试时保持所有外层循环的循环变量取最小值,测试时保持所有外层循环的循环变量取最小值,所有其它嵌套内层循环的循环变量取所有其它嵌套内层循环的循环变量取所有其它嵌套内层循环的循环变量取所有其它嵌套内层循环的循环变量取“典型典型典型典型”值;值;值;值;反复进行,直到所有各层循环测试完毕。反复进行,直到所有各层循环测试完毕。反复进行,直到所有各层循环测试完毕。反复进行,直到所有各层循环测试完毕。对全部各层循环同时取最小循环次数,对全部各层循环同时取最小循环次数,对全部各层循环同时取最小循环次数,对全部各层循环同时取最小循环次数,或者同时取最大循环次数或者同时取最大循环次数或者同时取最大循环次数或者同时取最大循环次数(2)嵌套循环嵌套循环2728(3)连锁循环连锁循环如果各个循环如果各个循环互相独立互相独立,则可以用与简单,则可以用与简单循环相同的方法进行测试。但如果几个循循环相同的方法进行测试。但如果几个循环不环不是互相独立是互相独立的,则需要使用测试嵌套的,则需要使用测试嵌套循环的办法来处理。循环的办法来处理。(4)非结构循环非结构循环这一类循环应该使用结构化程序设计方法这一类循环应该使用结构化程序设计方法重新设计测试用例。重新设计测试用例。29基本路径测试基本路径测试n n基本路径测试方法把覆盖的路径数基本路径测试方法把覆盖的路径数压缩到一定限度内,压缩到一定限度内,程序中的循环程序中的循环体最多只执行一次体最多只执行一次。n n简化循环路径简化循环路径n n循环使路径数量急剧增长循环使路径数量急剧增长n n简化简化n n无论循环的形式和实际执行循环体的次数多少,只无论循环的形式和实际执行循环体的次数多少,只考虑循环考虑循环0 0次和次和1 1次次n n两种情况两种情况n n进入循环体一次进入循环体一次n n跳出循环体跳出循环体30基本路径测试思路基本路径测试思路n n在程序控制流图的基础上,在程序控制流图的基础上,分析控制分析控制构造的环路复杂性构造的环路复杂性,导出基本可执行导出基本可执行路径集合路径集合,设计测试用例的设计测试用例的方法。方法。n n设计出的测试用例要保证在测试中,设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行程序的每一个可执行语句至少要执行一次。一次。311.程序的控制流图程序的控制流图n n符号符号为控制流图的一个结点,表示一为控制流图的一个结点,表示一个或多个无分支的个或多个无分支的PDL语句或源程序语语句或源程序语句。箭头为边,表示控制流的方向。句。箭头为边,表示控制流的方向。32n n在选择或多分支结构中,分支的汇聚处在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。应有一个汇聚结点。n n边和结点圈定的区域叫做区域边和结点圈定的区域叫做区域,当对区,当对区域计数时,图形外的区域也应记为一个域计数时,图形外的区域也应记为一个区域。区域。n n如果判断中的条件表达式是由一个或多如果判断中的条件表达式是由一个或多个逻辑运算符个逻辑运算符(OR,AND,.)连接的复连接的复合条件表达式,则需改为合条件表达式,则需改为 一系列一系列只有单只有单个条件的嵌套的判断个条件的嵌套的判断。3334352.程序环路复杂性程序环路复杂性n n程序的环路复杂性给出了程序的环路复杂性给出了程序的环路复杂性给出了程序的环路复杂性给出了程序基本路径集中程序基本路径集中程序基本路径集中程序基本路径集中的独立路径条数的独立路径条数的独立路径条数的独立路径条数,这是确保程序中每个可执,这是确保程序中每个可执,这是确保程序中每个可执,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目行语句至少执行一次所必需的测试用例数目行语句至少执行一次所必需的测试用例数目行语句至少执行一次所必需的测试用例数目的上界。的上界。的上界。的上界。n n环路复杂度环路复杂度环路复杂度环路复杂度V(G)=P+1V(G)=P+1(P P:判定节点数)判定节点数)n n从控制流图来看,一条独立路径是至少包含从控制流图来看,一条独立路径是至少包含从控制流图来看,一条独立路径是至少包含从控制流图来看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路有一条在其它独立路径中从未有过的边的路有一条在其它独立路径中从未有过的边的路有一条在其它独立路径中从未有过的边的路径。径。径。径。36n n例如,在图示的控制流图中,一组独立例如,在图示的控制流图中,一组独立的路径是的路径是path1:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-9-10-1-11path4:1-2-3-6-7-9-10-1-11n n路径路径 path1,path2,path3,path4组成组成了控制流图的一个基本路径集。了控制流图的一个基本路径集。373.基本路径测试法的操作步骤基本路径测试法的操作步骤n n导出控制流图n n计算环路复杂度n n确定基本路径集n n生成测试用例38结构测试案例分析结构测试案例分析n n求数组中的最小值求数组中的最小值 k=i;k=i;for(j=i+1;j=n;j+)for(j=i+1;j=n;j+)if(Aj Ak)if(Aj Ak)k=j;k=j;k=i;j=i+1j=n?Aj 0A0),),(1 1)(B0B0),),(2 2)(C0C0),),(3 3)(A+BCA+BC),),(4 4)(B+CAB+CA),),(5 5)(A+CBA+CB),),(6 6)(A0A0),),(7 7)(B0B0),),(8 8)(C0C0),),(9 9)(A+BCA+BC),),(1010)(B+CAB+CA),),(1111)(A+CBA+CB),),(1212)是否等腰三角形是否等腰三角形(A=BA=B),),(1313)(B=CB=C),),(1414)(C=AC=A),),(1515)(ABAB)andand(BCBC)andand(CACA)(1616)是否等边三角形是否等边三角形(A=BA=B)andand(B=CB=C)andand(C=AC=A)(1717)(ABAB),),(1818)(BCBC),),(1919)(CACA),),(2020)83举例序号序号【A,B,C】覆盖等价覆盖等价类输出出1【3 3,4 4,5 5】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6)一般三角形一般三角形2【0 0,1 1,2 2】(7 7)不能构成三角形不能构成三角形3【1 1,0 0,2 2】(8 8)4【1 1,2 2,0 0】(9 9)5【1 1,2 2,3 3】(1010)6【1 1,3 3,2 2】(1111)7【3 3,1 1,2 2】(1212)8【3 3,3 3,4 4】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1313)等腰三角形等腰三角形9【3 3,4 4,4 4】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1414)10【3 3,4 4,3 3】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1515)11【3 3,4 4,5 5】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1616)非等腰三角形非等腰三角形12【3 3,3 3,3 3】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1717)等等边三角形三角形13【3 3,4 4,4 4】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1414),(),(1818)非等非等边三角形三角形14【3 3,4 4,3 3】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1515),(),(1919)15【3 3,3 3,4 4】(1 1),(),(2 2),(),(3 3),(),(4 4),(),(5 5),(),(6 6),(),(1313),(),(2020)845.1.2 边界值分析边界值分析n n边界值分析也是一种黑盒测试边界值分析也是一种黑盒测试边界值分析也是一种黑盒测试边界值分析也是一种黑盒测试方法,是对等价类划分方法的方法,是对等价类划分方法的方法,是对等价类划分方法的方法,是对等价类划分方法的补充。补充。补充。补充。n n人们从长期的测试工作经验得人们从长期的测试工作经验得人们从长期的测试工作经验得人们从长期的测试工作经验得知,知,知,知,大量的错误是发生在输入大量的错误是发生在输入大量的错误是发生在输入大量的错误是发生在输入或输出范围的边界上或输出范围的边界上或输出范围的边界上或输出范围的边界上,而不是,而不是,而不是,而不是在输入范围的内部。在输入范围的内部。在输入范围的内部。在输入范围的内部。因此针对各种边界情况设计因此针对各种边界情况设计因此针对各种边界情况设计因此针对各种边界情况设计测试用例,测试用例,测试用例,测试用例,可以查出更多的错可以查出更多的错可以查出更多的错可以查出更多的错误误误误。85n n比如,在做三角形计算时,要输入三角比如,在做三角形计算时,要输入三角形的三个边长:形的三个边长:A、B和和C。我们应注意我们应注意到这三个数值应当满足到这三个数值应当满足 A0、B0、C0、ABC、ACB、BCA,才能才能构成三角形。但如果把六个不等式中的构成三角形。但如果把六个不等式中的任何一个大于号任何一个大于号“”错写成大于等于错写成大于等于号号“”,那就不能构成三角形。问题,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。恰出现在容易被疏忽的边界附近。86n n边界值分析不仅考虑输入条件,还要考虑输边界值分析不仅考虑输入条件,还要考虑输边界值分析不仅考虑输入条件,还要考虑输边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况出空间产生的测试情况出空间产生的测试情况出空间产生的测试情况n n这里所说的边界是指,相当于这里所说的边界是指,相当于这里所说的边界是指,相当于这里所说的边界是指,相当于输入等价类输入等价类输入等价类输入等价类和和和和输出等价类输出等价类输出等价类输出等价类而言,稍高于其边界值及稍低于而言,稍高于其边界值及稍低于而言,稍高于其边界值及稍低于而言,稍高于其边界值及稍低于其边界值的一些特定情况。其边界值的一些特定情况。其边界值的一些特定情况。其边界值的一些特定情况。n n使用边界值分析方法设计测试用例,首先应使用边界值分析方法设计测试用例,首先应使用边界值分析方法设计测试用例,首先应使用边界值分析方法设计测试用例,首先应确定边界情况。确定边界情况。确定边界情况。确定边界情况。应当选取正好等于,刚刚大应当选取正好等于,刚刚大应当选取正好等于,刚刚大应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据于,或刚刚小于边界的值做为测试数据于,或刚刚小于边界的值做为测试数据于,或刚刚小于边界的值做为测试数据,而,而,而,而不是选取等价类中的典型值或任意值做为测不是选取等价类中的典型值或任意值做为测不是选取等价类中的典型值或任意值做为测不是选取等价类中的典型值或任意值做为测试数据。试数据。试数据。试数据。87 边界条件类型边界条件类型 如果软件测试问题如果软件测试问题包含确定的边界包含确定的边界,那那么数据类型可能是么数据类型可能是:数值数值字符字符位置位置数量数量速度速度地址地址尺寸尺寸还要考虑数据类型的特还要考虑数据类型的特征征:第一个第一个/最后一个最后一个最小值最小值/最大值最大值开始开始/完成完成空空/满满最慢最慢/最快最快相邻相邻/最远最远超过超过/在内在内88输入输入条件条件报表日报表日期的类期的类型及长型及长度度1 1个数字字符个数字字符5 5个数字字符个数字字符7 7个数字字符个数字字符有有1 1个非数字字符个非数字字符全部是非数字字符全部是非数字字符6 6个数字字符个数字字符显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错显示出错输入有效输入有效日期日期范围范围月份月份范围范围“报表日期(报表日期(6 6位数字字符)位数字字符)”边界值分析法测试用例边界值分析法测试用例测试用例说明测试用例说明测试数据测试数据 期望结果期望结果选取理由选取理由5 52003520035200300520030052005.52005.5MAY-MAY-200305200305月份为月份为1 1月月月份为月份为1212月月月份月份11212200301200301200312200312200300200300200313200313200301200301200812200812200300200300200813200813输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错在有效范围在有效范围边界上选取边界上选取数据数据仅有仅有1 1个合法字符个合法字符比有效长度少比有效长度少1 1比有效长度多比有效长度多1 1只有只有1 1个非法字符个非法字符6 6个非法字符个非法字符类型及长度均有效类型及长度均有效最小日期最小日期最大日期最大日期刚好小于最小日期刚好小于最小日期刚好大于最大日期刚好大于最大日期最小月份最小月份最大月份最大月份刚好小于最小月份刚好小于最小月份刚好大于最大月份刚好大于最大月份89有效等价类和用来测试有效等价类和用来测试getNumDaysInMonth()getNumDaysInMonth()方法所选的有效输入方法所选的有效输入 有效有效等价类一个月有一个月有3131天天,非闰年非闰年190119017(7(七月七月)一个月有一个月有3131天天,闰年闰年190419047(7(七月七月)一个月有一个月有3030天天,非闰年非闰年190119016(6(六月六月)一个月有一个月有3030天天,闰年闰年190419046(6(六月六月)一个月为一个月为2828或或2929天天,非闰年非闰年190119012(2(二月二月)月份输入值年份输入值一个月为一个月为2828或或2929天天,闰年闰年2(2(二月二月)1904190490用来测试用来测试getNumDaysInMonth()getNumDaysInMonth()方法的附加边界值方法的附加边界值等价类可以被可以被400400整除的闰年整除的闰年200020002(2(二月二月)可以被可以被100100整除的非闰年整除的非闰年190019002(2(二月二月)非正数无效月份非正数无效月份129112910 0正数无效月份正数无效月份131513151313月份输入值年份输入值915.1.3 错误推测法错误推测法n n人们也可以靠经验和直觉推测程序中可人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推写检查这些错误的例子。这就是错误推测法。测法。n n错误推测法的基本想法是:错误推测法的基本想法是:列举出程序列举出程序中所有可能有的错误和容易发生错误的中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例特殊情况,根据它们选择测试用例。92错误推测法错误推测法根据经验、直觉和预感来进行测试根据经验、直觉和预感来进行测试根据经验、直觉和预感来进行测试根据经验、直觉和预感来进行测试例:例:一定要考虑建立处理下列等价类一定要考虑建立处理下列等价类:缺省值缺省值缺省值缺省值空白空白空白空白空值空值空值空值零值零值零值零值无输入条件无输入条件无输入条件无输入条件重复信息(重复信息(重复信息(重复信息(eg.eg.eg.eg.用户名已存在)用户名已存在)用户名已存在)用户名已存在)在已经找到软件缺陷的地方再找找在已经找到软件缺陷的地方再找找 93n n现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地这种在软件设计方面的思想也可引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。测试用例更容易理解和执行。测试用例更容易理解和执行。测试用例更容易理解和执行。n n提出这种测试思想的是提出这种测试思想的是提出这种测试思想的是提出这种测试思想的是Rational Rational Rational Rational 公司,并在公司,并在公司,并在公司,并在RUP2000 RUP2000 RUP2000 RUP2000 中文版当中有中文版当中有中文版当中有中文版当中有其详尽的解释和应用。其详尽的解释和应用。其详尽的解释和应用。其详尽的解释和应用。n n用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。上所有基本流和备选流。上所有基本流和备选流。上所有基本流和备选流。5.1.4 场景法场景法94场景法:基本流和备选流 n n右图中经过用例的每条路径都用基本右图中经过用例的每条路径都用基本右图中经过用例的每条路径都用基本右图中经过用例的每条路径都用基本流和备选流来表示,直黑线表示基本流和备选流来表示,直黑线表示基本流和备选流来表示,直黑线表示基本流和备选流来表示,直黑线表示基本流,是经过用例的最简单的路径。备流,是经过用例的最简单的路径。备流,是经过用例的最简单的路径。备流,是经过用例的最简单的路径。备选流用不同的彩色表示,一个备选流选流用不同的彩色表示,一个备选流选流用不同的彩色表示,一个备选流选流用不同的彩色表示,一个备选流可能从基本流开始,在某个特定条件可能从基本流开始,在某个特定条件可能从基本流开始,在某个特定条件可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中(如下执行,然后重新加入基本流中(如下执行,然后重新加入基本流中(如下执行,然后重新加入基本流中(如备选流备选流备选流备选流 1 1 1 1 和和和和 3 3 3 3);也可能起源于另一);也可能起源于另一);也可能起源于另一);也可能起源于另一个备选流(如备选流个备选流(如备选流个备选流(如备选流个备选流(如备选流 2 2 2 2),或者终止),或者终止),或者终止),或者终止用例而不再重新加入到某个流(如备用例而不再重新加入到某个流(如备用例而不再重新加入到某个流(如备用例而不再重新加入到某个流(如备选流选流选流选流 2 2 2 2 和和和和 4 4 4 4)。)。)。)。95场景法:基本流和备选流n n按照上图中每个经过用例的路径,可以确定以下不同的用例场景:按照上图中每个经过用例的路径,可以确定以下不同的用例场景:按照上图中每个经过用例的路径,可以确定以下不同的用例场景:按照上图中每个经过用例的路径,可以确定以下不同的用例场景:vv场景场景场景场景 1 1 1 1 基本流基本流基本流基本流vv场景场景场景场景 2 2 2 2 基本流基本流基本流基本流 备选流备选流备选流备选流 1 1 1 1vv场景场景场景场景 3 3 3 3 基本流基本流基本流基本流 备选流备选流备选流备选流 1 1 1 1 备选流备选流备选流备选流 2 2 2 2vv场景场景场景场景 4 4 4 4 基本流基本流基本流基本流 备选流备选流备选流备选流 3 3 3 3vv场景场景场景场景 5 5 5 5 基本流基本流基本流基本流 备选流备选流备选流备选流 3 3 3 3 备选流备选流备选流备选流 1 1 1 1vv场景场景场景场景 6 6 6 6 基本流基本流基本流基本流 备选流备选流备选流备选流 3 3 3 3 备选流备选流备选流备选流 1 1 1 1 备选流备选流备选流备选流 2 2 2 2vv场景场景场景场景 7 7 7 7 基本流基本流基本流基本流 备选流备选流备选流备选流 4 4 4 4vv场景场景场景场景 8 8 8 8 基本流基本流基本流基本流 备选流备选流备选流备选流 3 3 3 3 备选流备选流备选流备选流 4 4 4 4n n注:为方便起见,场景注:为方便起见,场景注:为方便起见,场景注:为方便起见,场景 5 5 5 5、6 6 6 6 和和和和 8 8 8 8 只考虑了备选流只考虑了备选流只考虑了备选流只考虑了备选流 3 3 3 3循环执行一次的情况。循环执行一次的情况。循环执行一次的情况。循环执行一次的情况。965.1.5 因果图因果图n n因果图的适用范围因果图的适用范围 如果在测试时必须考虑如果在测试时必须考虑输入条件的输入条件的各种组合各种组合,可使用一种适合于描述对于,可使用一种适合于描述对于多种条件的组合、相应产生多个动作的多种条件的组合、相应产生多个动作的形式来设计测试用例,这就需要利用因形式来设计测试用例,这就需要利用因果图。果图。因果图方法最终生成的就是判定表。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合它适合于检查程序输入条件的各种组合情况。情况。97n n用因果图生成测试用例的基本步骤用因果图生成测试用例的基本步骤(1)分析软件规格说明描述中分析软件规格说明描述中分析软件规格说明描述中分析软件规格说明描述中 哪些是原因哪些是原因哪些是原因哪些是原因 (即输入条件或输入条件的等即输入条件或输入条件的等即输入条件或输入条件的等即输入条件或输入条件的等价类价类价类价类)及及及及哪些是结果哪些是结果哪些是结果哪些是结果 (即输出条件即输出条件即输出条件即输出条件)并给每个原因和结果赋予一个标识符。并给每个原因和结果赋予一个标识符。并给每个原因和结果赋予一个标识符。并给每个原因和结果赋予一个标识符。(2)分析软件规格说明描述中的语义,找出原分析软件规格说明描述中的语义,找出原分析软件规格说明描述中的语义,找出原分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什因与结果之间,原因与原因之间对应的是什因与结果之间,原因与原因之间对应的是什因与结果之间,原因与原因之间对应的是什么么么么关系关系关系关系?根据这些关系,画出因果图。根据这些关系,画出因果图。根据这些关系,画出因果图。根据这些关系,画出因果图。98(3)(3)由于语法或环境限制,有些原因与原因之由于语法或环境限制,有些原因与原因之由于语法或环境限制,有些原因与原因之由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。间,原因与结果之间的组合情况不可能出现。间,原因与结果之间的组合情况不可能出现。间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号为表明这些特殊情况,在因果图上用一些记号为表明这些特殊情况,在因果图上用一些记号为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。标明约束或限制条件。标明约束或限制条件。标明约束或限制条件。(4)(4)把因果图转换成判定表。把因果图转换成判定表。把因果图转换成判定表。把因果图转换成判定表。(5)(5)把判定表的每一列拿出来作为依据,设计把判定表的每一列拿出来作为依据,设计把判定表的每一列拿出来作为依据,设计把判定表的每一列拿出来作为依据,设计测试用例。测试用例。测试用例。测试用例。99因果图设计方法 通常在因果图中,用通常在因果图中,用通常在因果图中,用通常在因果图中,用CiCiCiCi表示原因,用表示原因,用表示原因,用表示原因,用EiEiEiEi表示结果,其基本符号如下表示结果,其基本符号如下表示结果,其基本符号如下表示结果,其基本符号如下图所示。图所示。图所示。图所示。CiCiCiCi和和和和EiEiEiEi均可取值均可取值均可取值均可取值“0 0 0 0”和和和和“1 1 1 1”,“0 0 0 0”表示某状态不出现,表示某状态不出现,表示某状态不出现,表示某状态不出现,“1 1 1 1”表示某状态出现。表示某状态出现。表示某状态出现。表示某状态出现。因果图的基本符号如下:因果图的基本符号如下:因果图的基本符号如下:因果图的基本符号如下:CiEi 恒等Ci=1,Ei=1;Ci=0,Ei=0;Ci(a)(b)Ei非Ci=1,Ei=0;Ci=0,Ei=1;100因果图设计方法(d)与C1,C2,C3全=1,Ei=1;C1,C2,C3有一个以上=0,Ei=0;C1C2C3Ei(c)C1C2C3Ei或 C1,C2,C3有一个以上=1,Ei=1;C1,C2,C3全=0,Ei=0;101因果图设计方法 为了表示原因与原因之间、结果与结果之间可能存在的约束条件,为了表示原因与原因之间、结果与结果之间可能存在的约束条件,为了表示原因与原因之间、结果与结果之间可能存在的约束条件,为了表示原因与原因之间、结果与结果之间可能存在的约束条件,在因果图中可以附加一些表示约束条件的符号。在因果图中可以附加一些表示约束条件的符号。在因果图中可以附加一些表示约束条件的符号。在因果图中可以附加一些表示约束条件的符号。从输入(原因)考虑有从输入(原因)考虑有从输入(原因)考虑有从输入(原因)考虑有4 4 4 4种约束:如图(种约束:如图(种约束:如图(种约束:如图(a a a a)()()()(b b b b)()()()(c c c c)()()()(d d d d)从输出(结果)考虑:还有从输出(结果)考虑:还有从输出(结果)考虑:还有从输出(结果)考虑:还有1 1 1 1种约束,如图(种约束,如图(种约束,如图(种约束,如图(e e e e)(a)互斥:a和b同时只能有一个为1,但可以都为0abac(b)E 包含:a、b、c中至少有一个为1Ib102因果图设计方法(c)要求:若a=1,则要求b也要=1;其它不约束abab(e)R 强制(屏蔽):a=1,强制b=0;其它不约束M(d)abO唯一:a和b有且仅有一个为1103 n n例如,有一个处理单价为例如,有一个处理单价为例如,有一个处理单价为例如,有一个处理单价为5 5角钱的饮料的自动售角钱的饮料的自动售角钱的饮料的自动售角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:货机软件测试用例的设计。其规格说明如下:货机软件测试用例的设计。其规格说明如下:货机软件测试用例的设计。其规格说明如下:若投入若投入若投入若投入5 5角钱或角钱或角钱或角钱或1 1元钱的硬币,押下元钱的硬币,押下元钱的硬币,押下元钱的硬币,押下橙汁橙汁橙汁橙汁或或或或啤啤啤啤酒酒酒酒的按钮,则相应的饮料就送出来。若售货机没有零的按钮,则相应的饮料就送出来。若售货机没有零的按钮,则相应的饮料就送出来。若售货机没有零的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示钱找,则一个显示钱找,则一个显示钱找,则一个显示零钱找完零钱找完零钱找完零钱找完的红灯亮,这时在投入的红灯亮,这时在投入的红灯亮,这时在投入的红灯亮,这时在投入1 1元硬币并押下按钮后,饮料不送出来而且元硬币并押下按钮后,饮料不送出来而且元硬币并押下按钮后,饮料不送出来而且元硬币并押下按钮后,饮料不送出来而且1 1元硬币也退元硬币也退元硬币也退元硬币也退出来;若有零钱找,则显示出来;若有零钱找,则显示出来;若有零钱找,则显示出来;若有零钱找,则显示零钱找完零钱找完零钱找完零钱找完的红灯灭,在的红灯灭,在的红灯灭,在的红灯灭,在送出饮料的同时退还送出饮料的同时退还送出饮料的同时退还送出饮料的同时退还5 5角硬币。角硬币。角硬币。角硬币。”104(1)分析这一段说明,列出原因和结果分析这一段说明,列出原因和结果
展开阅读全文