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-11
path2:1-2-3-4-5-10-1-11
path3:1-2-3-6-8-9-10-1-11
path4:1-2-3-6-7-9-10-1-11
路径path1,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.导出测试用例
利用逻辑覆盖方法生成测试用例,确保基本路径集中每条路径的执行。