定量度量程式複雜度的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 //畫圖時,不需要考慮此行

程式流程圖畫法總結:

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

環形複雜度的計算方法:

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

上述例題的判定條件是單一的,如果涉及IF a OR b這種包含複合條件的偽碼,例如:

IF a OR b      then procedure x      else procedure y  ENDIF