【STMT】McCabe环路复杂度

McCabe环路复杂度

McCabe环路复杂度用于度量程序逻辑复杂性,计算程序的基本独立路径数目,即确保所有语句至少执行一次的最小测试数量。
McCabe环路复杂度需要先根据代码画出程序流程图,然后画出对应的程序控制流图,再通过以下三种方法计算:

  • 给定流图GG的边数mm,结点数nn,那么环路复杂度V(G)=mn+2V(G) = m - n + 2
  • 根据欧拉拓扑公式V+FE=X(P)V + F - E = X(P)VV是多面体PP的顶点数,FF是多面体PP的面数,EE是多面体PP的棱数,应用于平面时X(P)=2X(P) = 2,得EV+2=FE - V + 2 = F,因此环路复杂度即流图GG的区域数
  • 给定流图GG的单判定结点数dd,那么环路复杂度V(G)=d+1V(G) = d + 1

独立路径

一条独立路径是指,和其它的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路,一个程序的独立路径条数等于环路复杂度。
需要注意的是,独立路径条数并非覆盖所有路径的最小路径数,一条程序通路只需要满足与其它任意独立路径相比都至少覆盖一条新的路径就是一条独立路径,哪怕这条通路上的所有路径都已经被其它独立路径覆盖了也没关系。举个例子,类似于88字的程序流图有33条而不是22条独立路径。

题目

程序流程图如下,计算环路复杂度并找出一个独立路径集合。
src

解答

首先给程序流程图加入编号如下
PFG
然后画出程序控制流图如下
CFG
计算McCabe环路复杂度如下

  • m=10m = 10n=7n = 7V(G)=mn+2=5V(G) = m - n + 2 = 5
  • V(G)=F=5V(G) = F = 5
  • d=4d = 4V(G)=d+1=5V(G) = d + 1 = 5

一个独立路径集合如下

  • 路径1:1 - 2 - 5,6 - 9
  • 路径2:1 - 2 - 3,4 - 5,6 - 9
  • 路径3:1 - 3,4 - 5,6 - 9
  • 路径4:1 - 3,4 - 5,6 - 7 - 9
  • 路径5:1 - 3,4 - 5,6 - 7 - 8 - 9
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章