定量度量程序複雜度的McCabe方法

請畫出下面代碼的程序流程圖及對應的流圖,並計算環形複雜度。java

void func(int x,int y){ //畫圖時,不須要考慮此行
    while(x>0){ //1
        int sum = x+y; //2
        if(sum>1){ //3
            x--; //4
            y--; //5
        }else{
            if(sum<-1){ //6
                a-=2; //7
            }else{
                a-=4; //8
            } //9
        } // end of if(sum>1) //10
    }    // end of while
    x = x+y; //11
} // end of func //畫圖時,不須要考慮此行

程序流程圖畫法總結:code

  1. 只考慮方法體內代碼。
  2. if..else..後必有被兩條箭頭所指節點,能夠爲空白,但必須有數字。
  3. 保留開始和結尾的空白圓框但不寫數字。

環形複雜度的計算方法:blog

  1. 流圖中線性無關的區域數等於環形複雜度。
  2. 流圖G的環形複雜度 V(G)=E-N+2,其中,E是流圖中邊的條數,N是結點數。
  3. 流圖G的環形複雜度V(G)=P+1,其中,P是流圖中斷定結點的數目。

上述例題的斷定條件是單一的,若是涉及IF a OR b這種包含複合條件的僞碼,例如:class

IF a OR b
    then procedure x
    else procedure y
ENDIF

相關文章
相關標籤/搜索