
啊胡
2022/09/14阅读:42主题:自定义主题1
白盒测试之 基本路径测试
上一篇笔记白盒测试之 逻辑覆盖中的被测程序是比较简单的,但在实际开发过程中,一段不太复杂的程序,其路径的组合都将是一个庞大的数字。
基本路径测试
是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。在基本路径测试中,设计出的测试用例要保证在被测程序的每一条可执行语句上至少执行一次。
程序的控制流程图
控制流程图
是描述程序控制流的一种图示方式,其中基本的控制结构对应的图形符号如下图所示。在图形符号中,圆圈是控制流程图的一个结点,它表示一个或多个无分支的语句或源程序语句。

左图所示为一个程序的流程图,它可以映射成右图所示的控制流程图。

这里假定在流程图中用菱形框表示判定条件内没有复合条件,而一组顺序处理框可以映射为一个单一的节点。控制流程图中的箭头(边)表示了控制流的方向,类似于流程图中的流线,一条边必须终止于一个结点,但在选择或者是多分支结构中分支的汇聚处,即使汇聚处没有执行语句也应该添加一个汇聚结点。边和结点圈定的部分叫区域,当对区域计数时,图形外的部分也应记为一个区域。如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符(or、and、nand和nor)连接的逻辑表达式,则需要改变复合条件的判断为一系列只有单个条件的嵌套的判断。
例如,if a and b then x else y为复合条件的判定,它的控制流程图如图3.7所示。条件语句if a and b中条件a和条件b各有一个只有单个条件的判断结点。

基本路径测试的步骤
基本路径测试包括画出程序的控制流程图
,计算程序环路复杂性
,确定独立路径集合
,准备测试用例
,确保基本路径集中的每一条路径的执行等4个步骤。
画出程序控制流程图
流程图用来描述程序控制结构。可将程序流程图映射出一个相应的控制流程图(假设流程图的菱形决定框中不包含复合条件)。在程序流程图中,一个处理方框序列和一个菱形判断框可被映射为一个程序控制流程图的结点,流图中的箭头称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。
例如,用基本路径测试法测试下面的程序(用C++编写)。
void sort (int iRecordNum,int itype)
{
int x=0;
int y=0;
while (iRecordNum>0)
{
if (itype==0)
{x=y+2;break;}
else
{if(itype=1)
x=y+10;
else
x=y+20;
}
}
画出其程序流程图和对应的控制流程图,如图3.8所示。

计算程序环路复杂性
进行程序的基本路径测试时,程序的环路复杂性给出了程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。独立路径必须包含一条在定义之前不曾用到的边。所谓独立路径,是指至少引入一个新处理语句或一条新判断的程序通路。计算程序环路复杂性有以下3种方法。
• 将环路复杂性定义为程序控制流图中的区域数。
• 设E为程序控制流图的边数,N为图的结点数,则定义环路的复杂性为V(G)=E-N+2。
• 若设P为程序控制流图中的判定结点数,则有V(G)=P+1。
例如,在上面所示控制流程图中:有4个区域,其环路复杂性为4;V(G)=E-N+2=10(条边)-8(个结点)+2=4;V(G)=P+1=3(个判定结点)+1=4。其中,“4”是构成基本路径集的独立路径数的上界,可以据此得到应该设计的测试用例的数目。
确定独立路径集合
根据上面的计算方法,可得出4条独立的路径。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
根据上面的独立路径,设计输入数据,使程序分别执行到上面4条路径。
准备测试用例
为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据,以保证每一条路径可以被测试到,满足上面例子的基本路径集的测试用例如下图所示。

注意,一些独立的路径往往不是完全孤立的,有时它们是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。
作者介绍
