软件测试之控制流图

为了应对软件工程考试,本文对控制流图常见考法进行整理,主要是针对软件评测师的题型来整理。

什么是控制流图

控制流图是一个过程或程序的抽象表现,常以数据结构链的形式表示。简称流图,是对程序流程图进行简化后得到的,它可以更加突出的表示程序控制流的结构。

控制流图中包含两种图形符号:

  • 节点
  • 控制流线

边上一般是条件,点上一般是操作。

如何画控制流图

常见结构的控制流图:
在这里插入图片描述
图1:常见结构的程序控制流图

对于复合条件,要分解为简单条件,即如果判断中的条件表达式是一个或者多个逻辑运算符连接的复合条件表达式,则需要改为一系列只有单条件的嵌套判断。
当我们画控制流图的时候,一般将 1 号节点设为程序的入口,看作初始化(起始)操作。如果有条件判断,那么边上是选择条件;每个节点对应着一个操作,例如赋值、计算、调用函数等。
在这里插入图片描述

但是一般在做题时,若无特殊要求,是不需要将操作或条件写在点上、边上的;知道操作对应节点、条件对应边,可以方便我们画出控制流图。

例如:将程序流程图转化为控制流图
在这里插入图片描述
图2:程序流程图举例

上图中存在复合表达式,需要分解为简单条件,对应的程序控制流程图如下所示:
在这里插入图片描述
图3:程序对应控制流图

一个节点包含一个或多个连续的无分支语句,节点不允许含有复合节点。
判定节点(谓词节点)

  • 由判定节点出发的边必须终止于某一节点
  • 由边和节点所限定的范围被称为区域
  • 当对区域进行计数时,图形外的区域也应记为一个区域
计算环路复杂度

McCabe环路复杂度为程度逻辑复杂性提供定量的测度;该度量用于计算程序的基本独立路径数目,也即是确保所有语句至少执行一次的起码测试数量。

  1. V(G) = m - n + 2,其中 m 是边数,n 是顶点数,这是最常用的一种计算方法;
  2. 除此之外,V(G) = P + 1,其中 P 是程序流图中判定节点数;
  3. 如果A是程序流程图的封闭区域数目,区域的个数定义为边和节点圈定的封闭区间域数加上图形外的区域数1,那么V(G) = A + 1。

继续以 图3 举例,那么该程序控制流图 V(G)= 10 - 7 + 2 = 5

什么是控制流图的线性无关路径与独立路径

线性无关路径 = 线性独立路径
而一条独立路径是指,和其它的独立路径相比,至少引入一个新处理语句或者一个新判断的程序通路。一个程序的 V(G)值正好等于该程序的独立路径数。

找出程序的一个独立路径集合

确定独立路径集合需要在画出程序控制流图以及求出环路复杂性 V(G) 后才能开始。
一般步骤为:

  1. 画出程序控制流图
  2. 计算环路复杂性V(G)
  3. 确定独立路径集合

前两步已经在上文讲解过,下面以图3为例找出其对应的独立路径集合。

路径1:1-2-4-7
路径2:1-2-3-4-7
路径3:1-3-4-7
路径4:1-2-4-5-7
路径5:1-2-4-5-6-7

注意,独立路径集合不是唯一的。
上述集合中之所以没有添加路径:1-2-3-4-5-7,是因为该路径在上述集合中并未引入一个新处理语句或一个新判断,所以不应加入。当然,如果把1-2-4-5-7 换成 1-3-4-5-7 是可以的,因为他们都引入了新的处理语句。

参考资料

  • 姜楠、马蕾,软件工程技术与应用,上海:上海交通大学出版社,2018,194-196
  • zhuohanzhuo的博客
  • Dic0k的博客
  • 晚安` 的博客
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页