web-dev-qa-db-ja.com

循環的複雑度の計算

私は循環的複雑性(CC)の学習段階にいます。練習のために、2つの例の循環的複雑度を計算しており、答えが正しいかどうかを確認したい...

ウィキペディアを参照すると、CCはM = E − N + 2P どこ:

  • E =グラフのエッジの数
  • N =グラフのノードの数
  • P =接続されたコンポーネントの数

助けてください。

Example 1

ここで、E = 8、N = 9、P = 1です。したがって、M = 8-9 +(2x1)= 1です。

例2:

Example 2

ここで、E = 11、N = 10、P = 1です。したがって、M = 10-11 +(2x1)= 1です。

したがって、両方の例でCCは1です。計算が正しいかどうかを教えてください。

23
tech_human

数式に値を正しく挿入するには、さらに注意する必要があります。

例1では、あなたは言う

ここで、E = 8、N = 9、P = 1

しかし実際には、逆の方向です:9つのエッジ(= E)、8つのノード(= N)なので、CCは3になります。

例2では、​​E = 111、N = 10、P = 1の値があります。ただし、式で間違った順序で挿入します。実際には11 - 10 + (2x1) = 3である必要があります。

ショートカット:グラフの図がある場合、循環的複雑度を非常に簡単に判断できます。背景がエッジで分割される領域の数を数えるだけです。最初の例では、2つの内部領域(エッジで囲まれた領域)と1つの周囲領域があり、CCは3になります。2番目の例でも同じことが言えます。 (この方法では、明らかに、エッジが互いに交差していないことが必要です。)

22
flyx

また、これが役立つ場合、条件付き(If、while、for)ステートメントの数+1。したがって、上記の例には2つの条件ステートメントがあります。 2 + 1 = 3です。この場合の循環的複雑度は3です

8
Neethi

閉じた領域の数をカウントし、それに1を追加するだけです。

上記の例では、閉領域の数= 2なので、CC = 2 + 1 = 3

1
Nik cool

P =接続されたコンポーネントの数

言い換えると

P =出口点を持つノードの数

ソース

1
Adrián Sabo