第二章 软件测试基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第二章软件测试基础•2.1软件测试白箱法–2.1.1逻辑覆盖法•语句覆盖•判断覆盖•条件覆盖•条件组合覆盖•判断/条件覆盖•路径覆盖–2.1.2基本路径测试第二章软件测试基础•2.2软件黑箱测试法–2.2.1等价分类法–2.2.2边界值分析法•小结2.1软件测试白箱法•定义:–白箱法是以程序的内部逻辑为依据。合理的白箱测试,就是要选取足够的测试用例,对源代码进行比较充分的覆盖,以便尽可能多地发现程序中的错误。•白箱法适用范围:–主要用于模块测试、测试等。•两种方法:–逻辑覆盖法和基本路径法两种。2.1.1逻辑覆盖法(A1)∧(B=0)(A=2)∨(X1)X=X/AX=X+1aFbFdTeTc2-1一个被测程序结构图2.1.1逻辑覆盖法•语句覆盖:–语句覆盖的含义是指在测试的过程中,软件测试者应选择足够多的测试用例,使被测试程序中每个语句至少执行一次。•例子:–在图2-1所示的流程图中,正好所有的可执行语句都在路径L1上,故选择路径L1设计测试用例,就可以覆盖所有的可执行语句。满足本例的测试用例是:[(2,0,4),(2,0,3)]覆盖ace[L1]。•问题:–本测试用例实际上只测试了条件为真的情况,如果条件为假,则使用本测试用例显然不能发现问题。此外,当第一个判断中的逻辑符“”写成“”,或者第二个判断中的逻辑符号“”写成“”时,本测试用例也不能查出上述错误。所以,语句覆盖是最弱的逻辑覆盖准则。•判断覆盖:–在测试的过程中,软件测试者应设计若干测试用例,并运行所测程序,使被测试程序中每个判断的真分支和假分支至少经历一次。•例如–在图2-1所示的流程图中,如果选择路径L1,L2,则可满足判断覆盖,其测试用例如下:–[(2,0,4),(2,0,3)]覆盖ace[L1]–[(1,1,1),(1,1,1)]覆盖abd[L2]。–如果选择路径L3和L4,则可得另一组测试用例:–[(2,1,1),(2,1,2)]覆盖abe[L3]–[(3,0,3),(3,1,1)]覆盖acd[L4]。•问题:–由此看来,测试用例的取法并不是唯一的。此外,若把图2-1所示流程中的第二个判断中的条件X1错些成X1,那么利用上面两组测试用例,仍能得到同样的结果。这表明:只是判断覆盖不能确保一定能查出在判断的条件中存在的错误。•条件覆盖:–用条件覆盖所设计的测试用例可使得程序中的每一个判断的每一个条件的可能取值至少执行一次。•例如:–在图2-1所示的流程中,事先可对所有条件的取值加以标注,比如:–对第一个判断,若条件A1成立,则取真值为T1,反之,取假值为~T1;若条件B=0成立,则取真值为T2,反之,取假值为~T2。–对第二个判断,若条件A=2成立,则取真值为T3,反之,取假值为~T3;若条件X1成立,则取真值为T4,反之,取假值为~T4。测试用例通过路径条件取值覆盖分支[(2,0,4)(2,0,3)]ace(L1)T1T2T3T4c,e[(1,0,1)(1,0,1)]abd(L2)~T1T2~T3~T4b,d[(2,1,1)(2,1,2)]abe(L3)T1~T2T3~T4b,e测试用例通过路径条件取值覆盖分支[(1,0,3)(1,0,4)]abe(L3)~T1T2~T3T4b,e[(2,1,1)(2,1,2)]abe(L3)T1~T2T3~T4b,e•问题:–比较这两组测试用例可以发现,第一组测试用例不仅覆盖了所有判断的取真分支和取假分支,而且覆盖了判断中条件的可能取值;第二组测试用例虽然满足了条件覆盖,但由于只覆盖了第一个判断的取假分支和第二个判断的取真分支,不满足判定覆盖的要求。为此,必须引入更强的覆盖,即判定-条件覆盖。•判断-条件覆盖:–用判断-条件覆盖所设计的测试用例能够使得判断中每一个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。•例如:测试用例通过路径条件取值覆盖分支[(2,0,4)(2,0,3)]ace(L1)T1T2T3T4c,e[(1,1,1)(1,1,1)]abd(L2)~T1~T2~T3~T4b,d•问题:–从表面上看,它测试了所有条件的取值,但事实并非如此。这是由某些条件覆盖了另一些条件所致,比如对于条件表达式(A1)and(B=0)来说,若(A1)的测试结果为真,则还要测试(B=0),才能决定表达式的值;而若(A1)的测试结果为假,可以立刻确定表达式的结果为假。这时,往往就不再测试(B=0)的取值了,因此,条件(B=0)就没有检查。同样,对于条件表达式(A=2)or(X1)来说,若(A=2)的测试结果为真,就可以立刻确定表达式的结果为真。这时,条件(X1)就没有检查。因此,采用判断-条件覆盖,也不一定能查出逻辑表达式中的错误。•条件组合覆盖–能够使得每个判断的所有可能的条件取值组合至少执行一次。•测试用例:测试用例通过路径覆盖条件覆盖分支[(2,0,4)(2,0,3)]Ace(L1)T1T2T3T41)5)[(2,1,1)(2,1,2)]Abe(L3)T1~T2T3~T42)6)[(1,0,3)(1,0,4)]Abe(L3)~T1T2~T3T43)7)[(1,1,1)(1,1,1)]Abd(L2)~T1~T2~T3~T44)8)•问题:–这里并未要求第一个判断的4个组和与第二个判断的4个组和再进行组合。要是那样的话,就需要24=16个测试用例。•路径测试:–路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。•测试用例:测试用例通过路径覆盖条件覆盖分支[(2,0,4)(2,0,3)]Ace(L1)T1T2T3T4[(1,1,1)(1,1,1)]Abd(L2)~T1~T2~T3~T4[(1,1,2)(1,1,3)]Abe(L3)~T1~T2~T3T4[(3,0,3)(3,0,1)]Acd(L4)T1T2~T3~T4•测试用例逻辑分析法L1(a→c→e)={(A1)and(B=0)}and{(A=2)or(X/A1)}=(A1)and(B=0)and(A=2)or(A1)and(B=0)and(X/A1)=(A=2)and(B=0)or(A1)andB=0and(X/A1)L2(a→b→d)={(A1)and(B=0)}and{(A=2)or(X1)}={(A1)or(B=0)}and{(A=2)and(X1)}=(A=1)and(X=1)or(B0)and(A2)and(X=1)L3(a→b→e)={(A1)and(B=0)}and{(A=2)or(X1)}={(A1)or(B=0)}and{(A=2)or(X1)}=(A=1)and(X1)or(B0)and(A=2)or(B0)and(X1)L4(a→c→d)={(A1)and(B=0)}and{(A=2)or(X/A1)}=(A1)and(B=0)and(A2)and(X/A=1)2.1.2基本路径测试法•基本思路:–基本路径测试方法允许测试用例设计者导出一个过程设计的逻辑复杂性侧度,并使用该侧度作为指南来定义执行路径的基本集。从该基本集导出的测试用例保证对程序中的每一条语句至少执行一次。•流图符号顺序语句If语句While语句Unit语句Case语句图2-3流图符号•流图定义:–每一个圆称为流图的节点,代表一个或多个语句。一个处理方框序列和一个菱形决策框可被映射为一个节点。流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个节点,即使该节点并不代表任何语句。由边和节点限定的范围称为区域。计算区域时应包括图外部的范围。13624578910图2-4(a)162.391081174.5R3R2R1R4图2-4(b)•环形复杂性–独立路径是指程序中至少引进一个新的处理语句集合或一个新条件的任一路径。采用流图的术语,即独立路径必须至少包含一条在定义路径之前不曾用到的边。•例如:–路径1:1-11–路径2:1-2-3-4-5-10-1-11–路径3:1-2-3-6-8-9-10-1-11–路径4:1-2-3-6-7-9-10-1-11•注意:–每一条新的路径都包含了一条新边。路径1-2-3-4-5-10-1-2-3-6-8-9-10-1-11不是独立路径,意味它只是已有路径的简单合并,并未包含任何新边。应该注意到基本集并不唯一。实际上,给定的过程设计可派生出任意数量的不同基本集。•环形复杂性的定义与算法:–流图中区域的数量对应于环形的复杂性–给定流图G的环形复杂性V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图节点数量。–给定流图G的环形复杂性V(G),也可定义为V(G)=P+1,P是流图G中判定节点的数量。例子:31427a7b586图2-5将PDL翻译成流图PDLProceduresort1:DowhilerecordsremainReadrecord;2:Ifrecordfield1=03:Thenprocessrecord;Storeinbuffer;Incrementcounter4:elseifrecordfield2=05:thenresetcounter;6:elseprocessrecord;storeinfile;7a:endifendif7b:enddo8end•基本路径法步骤:–步骤1:以设计或代码为基础,画出相应的流图。–步骤2:确定结果流图的环形复杂性。可采用上一节的任意一种算法来计算环形复杂性V(G)。应该注意到,计算V(G)并不一定要画出流图,计算PDL中的所有条件语句数量(过程求平均值中复合条件语句计数为2),然后加1即可得到环形复杂性。–步骤3:确定线性独立的路径的一个基本集。–步骤4:准备测试用例,强制执行基本集中每条路径。测试人员可选择数据以便在测试每条路径时适当设置判定结点的条件。Procedureaverage;//计算不超过100个数字的平均值;同时计算总和与有效数字个数INTERFACERETURNSaverage.total.input.total.valid;INTERFACEACCEPTSvalue,minimum,maximum;Typevalue[1:100]ISSCALARARRAY;TYPEaverage,total.input,total.validMinimum,maxImun,sumISSCALARTYPEIISINTEGER;I=1;Sum=0;1)Total.input=total.valid=0;DOWHILEvalue[i]-999andtotal.input1004)Incrementtotal.inputby1;5)IFvalue[i]=minimumANDvalue[i]=maximum7)THENincrementtotal.validby1;Sum=sum+valid[i]ELSEskip8)ENDIFIncrementIby1;9)ENDDOIFtotal.valid011)THENaverage=sum/total.valid;12)ELSEaverage=-999;13)ENDIFENDaverage图2-7测试用例设计的PDL,其节点已经标识2361012图2-8过程求平均值的流图345679813111210•在过程求平均值中,有6条路经:–路径1:1-2-10-11-13–路径2:1-2-10-12-13–路径3:1-2-3-10-11-13–路径4:1-2-3-4-5-8-9-2-…–路径5:1-2-3-4-5-6-8-9-2-….–路径6:1-2-3-4-5-6-7-8-9-2-…•路径4、5和6后面的省略号(……)表示可以加上控制结构其余部分的任意路径。•路径1测试用例(1-2-10-11-13):–value(k)=有效输入,其中ki–value(i)=-999,其中2≤i≤100–期望结果:基于k的正确平均值和总数。–注意:路径1无法独立测试,必须作为路径4、5和6

1 / 58
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功