(整理)基本路径测试
- 格式:docx
- 大小:345.25 KB
- 文档页数:17
软件白盒测试-基本路径测试基本路径测试也是一种常用的白盒测试用例设计方法。
在实际工作中,即使一个简单的程序,路径数量往往也比较多,要在测试中覆盖所有的路径是不现实的。
而基本路径测试的方法就是一种简化路径数的测试方法,它是在分析程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证程序的每一个可执行语句至少执行一次。
1.1绘制控制流图控制流图是描述程序控制流的一种图示方法。
控制流图是退化的程序流程图,它是把程序流程图中的每个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧。
这种图只描述程序内部的控制流程,完全不表现对数据的具体操作以及分支和循环的具体条件。
因此,它往往把一个简单的if语句与循环语句的复杂性看成是一样的,把嵌套的if语句与case语句的复杂性看成是一样的。
程序中的基本控制结构对应的图形符号如图1.1所示。
图1.1控制结构示意图图中的圆圈为控制流图的一个结点,它表示一个或多个无分支的源代码语句。
在绘制控制流图前,一般先画出程序的流程图,再把流程图映射成控制流图。
例如,有下面的函数。
void sort(int iRecordNum,int iType)1 {2 int x=0;3 int y=0;4 while (iRecordNum-- > 0)5 {6 if(0==iType)7 x=y+2;8 else9 if(1==iType)10 x=y+10;11 else12 x=y+20;13 }14 }其流程图如图1.2所示。
把流程图映射成对应的控制流图,如图1.3所示。
图1.2流程图图1.3控制流图映射关系如下。
一组顺序处理框可以映射为一个单一结点。
控制流图中的箭头表示了控制流的方向,类似于流程图中的流线,一条边必须终止于一个结点,但在选择或多分支结构中分支的汇聚处,即使没有可执行语句也应该绘制一个结点。
⽩盒测试-基本路径法⼀、定义基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执⾏路径集合,从⽽设计测试⽤例的⽅法。
⼆、基本路径测试的步骤1)画出程序控制流图(前提是已经有了程序流程图)2)计算环路复杂度3)导出独⽴路径(可执⾏路径)4)设计测试⽤例三、认识控制流图1、描述程序控制流的⼀种图⽰⽅法,控制流图中只有2种图形符号:结点:标有编号的圆圈表⽰控制流线或边或连接:以箭头表⽰2、各种语句结构的控制流图3、认识什么是区域区域:边和结点圈定的区域叫做区域。
封闭区域+开放区域4、如果判断中的条件表达式是由⼀个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为⼀系列只有单条件的嵌套的判断。
If(a>1 and b<2){…}If(a>1){If(b<2){…}}(a)流程图四、环形复杂度的计算有以下三种⽅法计算环形复杂度:a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
五、举例1)画出程序控制流图2)计算环形复杂度a)流图中封闭区域的数量+1个开放区域=总的区域数=环形复杂度3个封闭区域+1个开放区域=4b)给定流图G的环形复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;V(G)=E-N+2=11-9+2=4c)给定流图G的环形复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
V(G)=P+1=3+1=43)导出独⽴路径注:因为环形复杂度为4,所以有四条独⽴路径PATH1:1-11PATH2:1-2-3-4-5-10-1-11PATH3:1-2-3-6-7-9-10-1-11PATH4:1-2-3-6-8-9-10-1-114)设计测试⽤例(略)。
软件测试之基本路径测试基本路径测试是Tom McCabe[MCC76]首先提出的一种白盒测试技术,基本路径测试方法上”。
允许测试用例设计者导出一个过程设计的逻辑复杂性测度,并使用该测度作为指南来定义执行路径的基本集。
从该基本集导出的测试用例保证对程序中的每一条语句至少执行一次。
1 流图符号在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图或程序图①。
流图使用图1-1中的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。
为了说明流图的用法,我们采用图1-2中的过程设计表示法,此处,流程图用来描述程序控制结构。
图 1-2b将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。
在图1-2b中,每一个圆,称为流图的节点,代表一个或多个语句。
一个处理方框序列和一个菱形决测框可被映射为一个节点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。
一条边必须终止于一个节点,即使该节点并不代表任何语句(例如:参见if-else-then结构的符号)。
由边和节点限定的范围称为区域。
计算区域时应包括图外部的范围①。
任何过程设计表示法都可被翻译成流图,图 1-3显示了一个程序设计语言(PDL,ProgramDesign Language)片段及其对应的流图,注意,对PDL语句进行了编号,并将相应的编号用于流图中。
程序设计中遇到复合条件时,生成的流图变得更为复杂。
当条件语句中用到一个或多个布尔运算符(逻辑OR,AND,NAND,NOR)时,就出现了复合条件。
图1-4中,将一个PDL片段翻译为流图,注意,为语句IF a OR b中的每一个a 和b创建了一个独立的节点,包含条件的节点被称为判定节点,从每一个判定节点发出两条或多条边。
2 环形复杂性环形复杂性是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于基本路径方法,计算所得的值定义了程序基本集的独立路径数量,并为我们提供了确保所有语句至少执行一次的测试数量的上界。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、根本路径测试法、域测试、符号测试、Z路径覆盖、程序变异.其中运用最为广泛的是根本路径测试法.根本路径测试法是在程序限制流图的根底上,通过分析限制构造的环路复杂性,导出根本可执行路径集合,从而设计测试用例的方法.设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次.在程序限制流图的根底上,通过分析限制构造的环路复杂性,导出根本可执行路径集合,从而设计测试用例.包括以下4个步骤和一个工具方法:1.程序的限制流图:描述程序限制流的一种图示方法.2.程序圈复杂度:McCabe复杂性度量.从程序的环路复杂性可导出程序根本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界.3.导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果.4.准备测试用例:保证根本路径集中的每一条路径的执行.工具方法:图形矩阵:是在根本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个根本路径集.程序的限制流图:描述程序限制流的一种图示方法.圆圈称为限制流图的一个结点,表示一个或多个无分支的语句或源程序语句QAYO同序结构.IF选择结构.限内循珞结构,CASE去分支结构/Until德环结构•,流图只有二种图形符号:图中的每一个圆称为流图的结点,代表一条或多条语句流图中的箭头称为边或连接,代表限制流任何过程设计都要被译成限制流图.如何根据程序流程图画出限制流程图在将程序流程图简化成限制流图时,应注意:n在选择或多分支结构中,分支的会聚处应有一个会聚结点.n边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域.用流图表热的传涕读畦序*区嚅:由边和卿横勤加起来的区就, 计舞[域,不要忘记区域外的筱次•n如果判断中的条件表达式是由一个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,那么需要改为一系列只有单条件的嵌套的判断.例如:1 if a or b3 else对应的逻辑为:独立路径:至少沿一条新的边移动的路径判断结点判断结点\根本路径测试法的步骤:o 第一步:画出限制流图流程图用来描述程序限制结构.可将流程图映射到一个相应的流图〔假设流程图的菱形决定框中不包含 复合条件〕.在流图中,每一个圆,称为流图的结点,代表一个或多个语句.一个处理方框序列和一个菱形 决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表限制流,类似于流程图中的箭头.一条 边必须终止于一个结点,即使该结点并不代表任何语句〔例如:if-else-then 结构〕.由边和结点限定的范围 称为区域.计算区域时应包括图外部的范围路径 1 : 1 -1 1 ** 路径 2 : 1--2-3-4-5-1.-1f] ]. .路径3: IN 二A6-8-9T0TTL对以上路径的遍历,就 是至少一次地执行了 程序中的所有语句…时 有下面的二国既 用根本路径灰际法诲■信星山〔说1 iR 熨旦m.她国或辑j.Iype 〕+,2- ini x=o ;4 3・履¥=.¥4+四hi 性口砥熟飒期一上.A 5. 「 6. lf(0==曲I 曲+, 7. { zy+Z; break; }* 6.eke**g,if(i=±iiyqR> 101Jt-Y + lOjf 11. 削8/ 12. *=v+N 口;"13. 上14.H画出其程序流程图和对应的限制流图如下第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的根本的独立路 径数目,为保证所有语句至少执行一次的测试数量的上界.独立路径必须包含一条在定义之前不曾用到的 边.有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性程方标履国在割底国WfTAHiCS给定流图G的圈复杂度V(G),定义为V(G)=E-N+2 , E是流图中边的数量,N是流图中结点的数量给定流图G的圈复杂度V(G),定义为V(G)=P+1 , P是流图G中判定结点的数量.对应上面国中的图.夏桑度,计算如下;/•流回中有四个区域t *•¥g)=10弄边-白鳍盛〒之=4;*•做3t判定结点+J4, d第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径.(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路.V(G)值正好等于该程序的彳立路径的条数.)U 路径1 : 4-14U 路径2 : 4-6-7-14U 路径3 : 4-6-8-10-13-4-14U 路径4 : 4-6-8-11-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径..第四步:准备测试用例为了保证根本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子根本路径集的测试用例是:举例说明:例:下例程序流程图描述了最多输入50个值〔以-1作为输入结束标志〕,计算其中有效的学生分数的个5&1S1:行工知输入数盛一.照国期!唯三0,吃着*就阻电g [更蛔口的累一个评谱期鳍果F x = 0* 路径 2m +-6-7-14-输入数据:jg&cjrdNyms LjTypfl=O^ 也瞬果;x=&5Sit3i ,4 :6-B -10-13-4-14'输人娥$ iE9£J9mo= l^T ype=l^ 预期理"里,K =10H膈俊七 4-6'B-11-13-4*14L (*>2.以行哈3 iniv=o ;* +. 5师值〔腐蹦期卜 5. (36. 网口==皿*7, {x=y+2; & 时51 9,讦〔1= =|口口的・x=y+LO;(11. 国与牛’12. x=y +20>13,break;州数、总分数和平均值.步骤1:导出过程的流图.步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=E N+2=16 V2+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6其中P为谓词结点的个数.在流图中,结点2、3、5、6、9是谓词结点.步骤3:确定根本路径集合(即独立路径集合).于是可确定6条独立的路径:路径 1 : 1-2-9-10-12路径2: 1-2-9-11-12路径3: 1-2-3-9-10-12路径 4 : 1-2-3-4-5-8- 2 --路径 5 : 1-2-3-4-5-6-8- 2 -路径6: 1-2-3-4-5-6-7-8- 2…步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次.1)路径1(1-2-9-10-12)的测试用例:score[k]=有效分数值,当k < i ;score[i]= 1,2 <i <50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average o2)路径2(1-2-9-11-12)的测试用例:score[ 1 ]= - 1 ;期望的结果:average =1 ,其他量保持初值.3)路径3(1-2-3-9-10-12)的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分.4)路径4(1-2-3-4-5-8- 2…)的测试用例:score[i]=有效分数,当i<50;score[k]<0 , k< i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average o举例说明:例:下例程序流程图描述了最多输入50个值(以-1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值.步骤1:导出过程的流图步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=E N+2=16 V2+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6其中P为谓词结点的个数.在流图中,结点2、3、5、6、9是谓词结点.步骤3:确定根本路径集合(即独立路径集合).于是可确定6条独立的路径:路径 1 : 1-2-9-10-12路径2: 1-2-9-11-12路径3: 1-2-3-9-10-12路径 4 : 1-2-3-4-5-8- 2 --路径 5 : 1-2-3-4-5-6-8- 2 -路径6: 1-2-3-4-5-6-7-8- 2 -步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次.1)路径1(1-2-9-10-12)的测试用例:score[k]=有效分数值,当k < i ;score[i]= 1,2 <i <50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average 2)路径2(1-2-9-11-12)的测试用例:score[ 1 ]= - 1 ;期望的结果:average =1 ,其他量保持初值.3)路径3(1-2-3-9-10-12)的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分.4)路径4(1-2-3-4-5-8- 2…)的测试用例:score[i]=有效分数,当i<50;score[k]<0 , k< i ;连接权为“俵示存在一个连接,在图中如果一行有两个或更多的元素“ 1,〞那么这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上〔包括两个〕元素为“1的个数,就可以得到确定该图圈复杂度的另一种算法.2.3.3根本路径测试法根本路径测试法是在程序限制流图的根底上,通过分析限制构造的环路复杂性,导出基本可执行的路径集合, 从而设计测试用例的方法. 设计出的测试用例要保证在测试中程序的 每个执行语句至少执行一次.根本路径测试法的重点内容如下:程序的限制流图:描述程序限制流的一种图示方法.程序环形复杂度:McCabe 复杂性度量.从程序的环路复杂性可导出程序根本路径集合 中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的 上界.导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果.准备测试用例:保证根本路径集中的每一条路径的执行.程序限制流图〔可简称流图〕是对程序流程图进行简化后得到的,它突出表示程序限制流的结构.程序限制流图是描述程序限制流的一种方式,其要点如下:1〕图形符号:圆圈代表一个结点,表示一个或多个无分支的语句或源程序语句. n1、总分sum 和平均分 average期望结果:根据输入的有效分数算出正确的分数个数 用拈特力2〕程序限制流边和点圈定的局部叫做区域.当对区域计数时,图形外的一个局部也应记为一个区域.3〕判断语句中的条件为复合条件〔即条件表达式由一个或多个逻辑运算符连接的逻辑表达式〔a and b〕〕时,那么需要改变复合条件的判断为一系列只有单个条件的嵌套的判断.结点由带标号的圆圈表示, 可代表一个或多个语句、一个处理框序列和一个条件判定框〔假设不包含复合条件〕.限制流线由带箭头的弧或线表示, 可称为边,它代表程序中的控制流.为了满足路径覆盖, 必须首先确定具体的路径以及路径的个数. 我们通常采用限制流图的边〔弧〕序列和节点列表示某一条具体路径.路径测试就是从一个程序的入口开始,执行所经历的各个语句的完整过程.任何关于路径分析的测试都可以叫做路径测试.完成路径测试的理想情况是做到路径覆盖,但对于复杂性高的程序要做到所有路径覆盖〔测试所有可执行路径〕是不可能的.在不能实现所有路径覆盖的前提下,如果某一程序的每一个独立路径都被测试过,那么可以认为程序中的每个语句都已经检验过了,即到达了语句覆盖.这种测试方法就是通常所说的根本路径测试方法.根本路径测试方法是在限制流图的根底上,通过分析限制结构的环形复杂度,导出执行路径的根本集,再从该根本集设计测试用例.根本路径测试方法包括以下4个步骤:1〕画出程序的限制流图.2〕计算程序的环形复杂度,导出程序根本路径集中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上界.3〕导出根本路径集,确定程序的独立路径.4〕根据步骤3〕中的独立路径,设计测试用例的输入数据和预期输出.程序限制流图如图2-4所示.IF选择结构While楣环结构多分立结构{I洲循环结构技犬应力莪程序的环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量.将环形复杂度用于根本路径方法,可以提供程序根本集的独立路径数量,保证所有语句至少执行一次测试.独立路径是指程序中至少引入了一个新的处理语句集合或一个新条件的程序通路,包括一组以前没有处理的语句或条件的一条路径.通常环形复杂度以图论为根底,提供软件度量.可用如下方法来计算环形复杂度:1〕限制流图中区域的数量对应于环形复杂度.2〕给定限制流图G的环形复杂度V 〔G〕,其定义为:V (G) = E-N+2其中,E是限制流图中边的数量,N是限制流图中的节点数量.计算环形复杂度如图2-5所示.计算结果为节点数量N=8 ,导出边的数量E=10 〔用①、②、③、④、⑤、⑥、⑦、⑧、⑨、⑩编号表示〕,V 〔G〕 = E-N+2=10-8+2= 10 〔条边〕-8 〔个节点〕+ 2 = 4 ,导出独立路径用路径1、路径2、路径3、路径4编号表示.四、根本路径测试如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次,就成为根本路径测试.它是在程序限制流图的根底上,通过分析限制构造的环路复杂性,导出根本可执行路径集合,从而设计测试用例的方法.设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次.1.程序的限制流图限制流图是描述程序限制流的一种图示方法.根本限制构造的图形符号如图10-4-7所示.符号C称为限制流图的一个结点,一组顺序处理框可以映射为一个单一的结点.限制流图中的箭头称为边,它表示了限制流的方向,在选择或多分支结构中分支的会聚处,即使没有执行语句也应该有一个会聚结点.边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域.%-iNniMSjfi CASF 定力王干忤图10-4-7限制流图的各种图形符号如果判定中的条件表达式是复合条件时,即条件表达式是由一个或多个逻辑运算符(OR , AND ,NAND ,NOR)连接的逻辑表达式,那么需要改复合条件的判定为一系列只有单个条件的嵌套的判定.例如对应图10-4-8 (a)的复合条件的判定,应该画成如图10-4-8 (b)所示的限制流图.条件语句 ifaORb 中条件a和条件b 各有一个只有单个条件的判定结点.2 .计算程序环路复杂性进行程序的根本路径测试时,程序的环路复杂性给出了程序根本路径集合中的独立路径条数,这是确 保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界.所谓独立路径,是指包括一组以前 没有处理的语句或条件的一条路径.如在图 10-4-9 (b)所示的限制流图中,一组独立的路径是pathl : 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-11川眸结构】F 选探轴构MIlLFiSJaffi路径pathl , path2 , path3 , path4组成了图10-4-9 (b)所示限制流图的一个根本路径集.只要设计出的测试用例能够保证这些根本路径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试.根本路径集不是唯一的,对于给定的限制流图,可以得到不同的根本路径集.(a)程序流程图(b)限制流图图10-4-9程序流程图与对应的限制流图通常环路复杂性可用以下3种方法求得.(1)将环路复杂性定义为限制流图中的区域数.(2)设E为限制流图的边数,N为图的结点数,那么定义环路复杂性为V (G) = E-N+2(3)假设设P为限制流图中的判定结点数,那么有V (G) =P+1.由于图10-4-9 (b)所示限制流图有4个区域.其环路复杂性为4.它是构成根本路径集的独立路径数的上界.可以据此得到应该设计的测试用例的数目.3.导出测试用例利用逻辑覆盖方法生成测试用例,保证根本路径集中每条路径的执行.。
软件测试之基本路径测试软件测试之基本路径测试基本路径测试是Tom McCabe[MCC76]首先提出的一种白盒测试技术,基本路径测试方法上”。
允许测试用例设计者导出一个过程设计的逻辑复杂性测度,并使用该测度作为指南来定义执行路径的基本集。
从该基本集导出的测试用例保证对程序中的每一条语句至少执行一次。
1 流图符号在介绍基本路径方法之前,必须先介绍一种简单的控制流表示方法,即流图或程序图①。
流图使用图1-1中的符号描述逻辑控制流,每一种结构化构成元素有一个相应的流图符号。
为了说明流图的用法,我们采用图1-2中的过程设计表示法,此处,流程图用来描述程序控制结构。
图 1-2b将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。
在图1-2b中,每一个圆,称为流图的节点,代表一个或多个语句。
一个处理方框序列和一个菱形决测框可被映射为一个节点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。
一条边必须终止于一个节点,即使该节点并不代表任何语句(例如:参见if-else-then结构的符号)。
由边和节点限定的范围称为区域。
计算区域时应包括图外部的范围①。
任何过程设计表示法都可被翻译成流图,图1-3显示了一个程序设计语言(PDL,ProgramDesign Language)片段及其对应的流图,注意,对PDL语句进行了编号,并将相应的编号用于流图中。
程序设计中遇到复合条件时,生成的流图变得更为复杂。
当条件语句中用到一个或多个布尔运算符(逻辑OR,AND,NAND,NOR)时,就出现了复合条件。
图1-4中,将一个PDL片段翻译为流图,注意,为语句IF a OR b中的每一个a 和b创建了一个独立的节点,包含条件的节点被称为判定节点,从每一个判定节点发出两条或多条边。
2 环形复杂性环形复杂性是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于基本路径方法,计算所得的值定义了程序基本集的独立路径数量,并为我们提供了确保所有语句至少执行一次的测试数量的上界。
基本路径测试方法在仿真训练软件测试中的应用在仿真训练软件中,基本路径测试是一种常见的测试方法。
该方法将软件的各种路径进行系统性的测试,可以有效地发现和修复程序中的错误,从而提高软件的可靠性和稳定性。
本文将详细介绍基本路径测试方法在仿真训练软件测试中的应用。
一、基本路径测试的概念和原理基本路径测试是一种测试方法,它可以对程序的所有可能运行路径进行测试,用来检测程序是否能够按照预期的方式运行。
基本路径测试基于控制流图中的路径结构,将程序的所有路径分解成基本路径,然后针对每个基本路径进行测试。
基本路径是指从程序的起点到终点的一条路径,该路径上每个语句只执行一次,且不包含循环语句。
基本路径测试的原理是基于程序的控制流图进行分析。
控制流图是一种图形化表示程序控制流程的方法,其中每个节点表示程序中的一个语句,每个边表示两个语句之间的控制关系。
基本路径测试的目标是发现程序中所有可能的执行路径,并对每个路径进行测试,以确保程序的正确性和鲁棒性。
二、基本路径测试的步骤基本路径测试包括以下四个步骤:1. 绘制程序的控制流图。
控制流图是基本路径测试的前提,它是一种图形化的表示程序控制流程的方法。
通过绘制控制流图,可以清晰地了解程序中各个语句的控制关系,便于识别程序中的可能错误。
2. 确定程序的基本路径。
通过分析控制流图,识别程序中所有可能的执行路径,并将其分解成基本路径。
每个基本路径上必须至少包含一个节点,每个节点至少包含一条进入边和一条出边。
3. 设计测试用例。
对每个基本路径设计测试用例,以覆盖基本路径上的所有语句和分支,并验证程序的正确性和鲁棒性。
4. 执行测试用例。
按照设计的测试用例对程序进行测试,记录测试结果和发现的错误,及时对错误进行修复。
三、基本路径测试的优点和缺点基本路径测试具有以下优点:1. 能够覆盖程序中的所有可能运行路径,发现所有潜在的错误。
通过对每个基本路径进行测试,可以确保程序的正确性和鲁棒性。
软件测试实验报告实验题目:白盒测试技术之基本路径测试姓名:祁兆彧学号:1012210142班级:11计本1指导老师:蒋平一、实验介绍1.实验技术基本路径测试是在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
2.实验对象#include "stdio.h"void main(){int n,i;int x=0;int y=0;printf("请输入n\n");scanf("%d",&n);printf("请输入i\n");scanf("%d",&i);while ( n-- > 0 ){if ( i==0 )x=y+2;elseif ( i==1 )y=y+10;elsex=y+20;}// whileprintf("x=%d,y=%d\n",x,y);}// main三、测试用例设计程序流程图如下所示:控制流图如下所示:17463295abcdefg8计算程序环路复杂V(G)=E-N+2=11-9+2=4独立路径集合为:路径1: 1-2-9路径2: 1-2-3-5-6-8-2-9路径3: 1-2-3-5-7-8-2-9路径4: 1-2-3-4-8-2-9测试用例设计:测试用例{n,i} 预期路径预期输出{1,0} a-c-d-b X=2,y=0{1,1} a-c-e-g-b X=0,y=10{1,2} a-c-e-f-b X=20,y=0{0,3} a-b X=0,y=0三、实验结果输入输出n=1 , i= 0 X=2,y=0n=1,i=1 X=0,y=10n=1,i=2 X=20,y=0n=0,i=3 X=0,y=0四、心得与体会通过本次实验使我学会了在程序控制流图的基础上,通过分析控制结构的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。
其中运用最为广泛的是基本路径测试法。
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。
在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
包括以下4个步骤和一个工具方法:1. 程序的控制流图:描述程序控制流的一种图示方法。
2. 程序圈复杂度:McCabe复杂性度量。
从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
4. 准备测试用例:确保基本路径集中的每一条路径的执行。
工具方法:图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。
程序的控制流图:描述程序控制流的一种图示方法。
圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句流图只有二种图形符号:图中的每一个圆称为流图的结点,代表一条或多条语句。
流图中的箭头称为边或连接,代表控制流任何过程设计都要被翻译成控制流图。
如何根据程序流程图画出控制流程图?在将程序流程图简化成控制流图时,应注意:n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。
n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。
如下页图所示n 如果判断中的条件表达式是由一个或多个逻辑运算符(OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。
例如:1 if a or b2 x3 else4 y对应的逻辑为:独立路径:至少沿一条新的边移动的路径基本路径测试法的步骤:o 第一步:画出控制流图流程图用来描述程序控制结构。
可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。
在流图中,每一个圆,称为流图的结点,代表一个或多个语句。
一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。
一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。
由边和结点限定的范围称为区域。
计算区域时应包括图外部的范围。
画出其程序流程图和对应的控制流图如下第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。
独立路径必须包含一条在定义之前不曾用到的边。
有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性;给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
第三步:导出测试用例根据上面的计算方法,可得出四个独立的路径。
(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。
V(G)值正好等于该程序的独立路径的条数。
) ü路径1:4-14ü路径2:4-6-7-14ü路径3:4-6-8-10-13-4-14ü路径4:4-6-8-11-13-4-14根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。
o 第四步:准备测试用例为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:举例说明:例:下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。
步骤1:导出过程的流图。
步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=E–N+2=16–12+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6其中P为谓词结点的个数。
在流图中,结点2、3、5、6、9是谓词结点。
步骤3:确定基本路径集合(即独立路径集合)。
于是可确定6条独立的路径:路径1:1-2-9-10-12路径2:1-2-9-11-12路径3:1-2-3-9-10-12路径4:1-2-3-4-5-8-2…路径5:1-2-3-4-5-6-8-2…路径6:1-2-3-4-5-6-7-8-2…步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。
1)路径1(1-2-9-10-12)的测试用例:score[k]=有效分数值,当k < i ;score[i]=–1, 2≤i≤50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
2)路径2(1-2-9-11-12)的测试用例:score[ 1 ]= – 1 ;期望的结果:average = – 1 ,其他量保持初值。
3)路径3(1-2-3-9-10-12)的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。
4)路径4(1-2-3-4-5-8-2…)的测试用例:score[i]=有效分数,当i<50;score[k]<0,k< i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
举例说明:例:下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。
步骤1:导出过程的流图。
步骤2:确定环形复杂性度量V(G):1)V(G)= 6 (个区域)2)V(G)=E–N+2=16–12+2=6其中E为流图中的边数,N为结点数;3)V(G)=P+1=5+1=6其中P为谓词结点的个数。
在流图中,结点2、3、5、6、9是谓词结点。
步骤3:确定基本路径集合(即独立路径集合)。
于是可确定6条独立的路径:路径1:1-2-9-10-12路径2:1-2-9-11-12路径3:1-2-3-9-10-12路径4:1-2-3-4-5-8-2…路径5:1-2-3-4-5-6-8-2…路径6:1-2-3-4-5-6-7-8-2…步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。
1)路径1(1-2-9-10-12)的测试用例:score[k]=有效分数值,当k < i ;score[i]=–1, 2≤i≤50;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
2)路径2(1-2-9-11-12)的测试用例:score[ 1 ]= – 1 ;期望的结果:average = – 1 ,其他量保持初值。
3)路径3(1-2-3-9-10-12)的测试用例:输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。
4)路径4(1-2-3-4-5-8-2…)的测试用例:score[i]=有效分数,当i<50;score[k]<0,k< i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。
连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。
2.3.3 基本路径测试法基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行的路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中程序的每个执行语句至少执行一次。
基本路径测试法的重点内容如下:程序的控制流图:描述程序控制流的一种图示方法。
程序环形复杂度:McCabe复杂性度量。
从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。
导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
准备测试用例:确保基本路径集中的每一条路径的执行。
程序控制流图(可简称流图)是对程序流程图进行简化后得到的,它突出表示程序控制流的结构。
程序控制流图是描述程序控制流的一种方式,其要点如下:1)图形符号:圆圈代表一个结点,表示一个或多个无分支的语句或源程序语句。
计算结果为节点数量N=8,导出边的数量E=10(用①、②、③、④、⑤、⑥、⑦、⑧、⑨、⑩编号表示),V(G)= E-N+2=10-8+2= 10(条边)- 8(个节点)+ 2 = 4,导出独立路径用路径1、路径2、路径3、路径4编号表示。
四、基本路径测试如果把覆盖的路径数压缩到一定限度内,例如,程序中的循环体只执行零次和一次,就成为基本路径测试。
它是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。
1.程序的控制流图控制流图是描述程序控制流的一种图示方法。
基本控制构造的图形符号如图10-4-7所示。
符号○称为控制流图的一个结点,一组顺序处理框可以映射为一个单一的结点。
控制流图中的箭头称为边,它表示了控制流的方向,在选择或多分支结构中分支的汇聚处,即使没有执行语句也应该有一个汇聚结点。
边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。
图10-4-7控制流图的各种图形符号如果判定中的条件表达式是复合条件时,即条件表达式是由一个或多个逻辑运算符(OR,AND,NAND,NOR)连接的逻辑表达式,则需要改复合条件的判定为一系列只有单个条件的嵌套的判定。
例如对应图10-4-8(a)的复合条件的判定,应该画成如图10-4-8(b)所示的控制流图。
条件语句ifaORb中条件a 和条件b各有一个只有单个条件的判定结点。
2.计算程序环路复杂性进行程序的基本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。
所谓独立路径,是指包括一组以前没有处理的语句或条件的一条路径。
如在图10-4-9(b)所示的控制流图中,一组独立的路径是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-11路径path1,path2,path3,path4组成了图10-4-9(b)所示控制流图的一个基本路径集。