定量度量程式複雜度的McCabe方法
- 2019 年 12 月 25 日
- 筆記
請畫出下面程式碼的程式流程圖及對應的流圖,並計算環形複雜度。
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 //畫圖時,不需要考慮此行
程式流程圖畫法總結:
- 只考慮方法體內程式碼。
- if..else..後必有被兩條箭頭所指節點,可以為空白,但必須有數字。
- 保留開始和結尾的空白圓框但不寫數字。
環形複雜度的計算方法:
- 流圖中線性無關的區域數等於環形複雜度。
- 流圖G的環形複雜度 V(G)=E-N+2,其中,E是流圖中邊的條數,N是結點數。
- 流圖G的環形複雜度V(G)=P+1,其中,P是流圖中判定結點的數目。
上述例題的判定條件是單一的,如果涉及IF a OR b
這種包含複合條件的偽碼,例如:
IF a OR b then procedure x else procedure y ENDIF