McCabe環路複雜度
McCabe環路複雜度用於度量程序邏輯複雜性,計算程序的基本獨立路徑數目,即確保所有語句至少執行一次的最小測試數量。
McCabe環路複雜度需要先根據代碼畫出程序流程圖,然後畫出對應的程序控制流圖,再通過以下三種方法計算:
- 給定流圖的邊數,結點數,那麼環路複雜度
- 根據歐拉拓撲公式,是多面體的頂點數,是多面體的面數,是多面體的棱數,應用於平面時,得,因此環路複雜度即流圖的區域數
- 給定流圖的單判定結點數,那麼環路複雜度
獨立路徑
一條獨立路徑是指,和其它的獨立路徑相比,至少引入一個新處理語句或一個新判斷的程序通路,一個程序的獨立路徑條數等於環路複雜度。
需要注意的是,獨立路徑條數並非覆蓋所有路徑的最小路徑數,一條程序通路只需要滿足與其它任意獨立路徑相比都至少覆蓋一條新的路徑就是一條獨立路徑,哪怕這條通路上的所有路徑都已經被其它獨立路徑覆蓋了也沒關係。舉個例子,類似於字的程序流圖有條而不是條獨立路徑。
題目
程序流程圖如下,計算環路複雜度並找出一個獨立路徑集合。
解答
首先給程序流程圖加入編號如下
然後畫出程序控制流圖如下
計算McCabe環路複雜度如下
- ,,
- ,
一個獨立路徑集合如下
- 路徑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