2012-02-01 15 views
20

私は循環器複雑度(CC)の学習段階にあります。循環複雑度の計算

  • E =数:練習のために、私は

    はウィキペディアを参照して... 2例の循環的複雑度を計算し、私の答えが正しいかそうでないかどうかを確認したいのです、CCはM = E − N + 2Pで与えられますグラフ
  • の縁のN =グラフのノード
  • Pの数は連結成分

数が助けてください=ここ

Example 1

、E = 8、N = 9、P = 1よってM = 8から9 +(2×1)= 1

例2:

Example 2

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

したがって、両方の例でCCは1です。 rectまたはnot。

+5

出口点を持っているノードの数。これは、スタックオーバーフローではなく、ソフトウェアエンジニアリングに属します。 – TylerH

答えて

21

値を数式に正しく挿入するためには、さらに注意する必要があります。 9つのエッジ(= E):例1で

、あなたはここで

、E = 8、N = 9とP = 1

しかし、実際に、それは他の方法でラウンドだと言います、8ノード(= N)になるので、3のCCが得られます。

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

ショートカット:グラフの画像がある場合は、非常に簡単に循環の複雑さを判断できます。背景がエッジによって分割されている領域の数を数えてください。あなたの最初の例では、内側の2つの領域(境界で囲まれた領域)と1つの周辺領域があり、CCが3になります。第2の例も同じです。

+1

+1、バックグラウンド分割方法を知らなかった:) – Kos

+0

Ohhはい...間違った値を間違えて書きました...指摘して答えを教えてくれてありがとう。また、ショートカットメソッドの+1、...私はそれを知らなかった。 :) –

+0

**ショートカットのもう一つの+1 ** - 魅力のように動作します。 – joshuamabina

7

また、これが役立つ場合は、条件付き(If、while、for)ステートメントの数が+1になります(この方法では、エッジが互いに交差しないようにする必要があります)。したがって、上記の例では、2つの条件文があります。 2 + 1 = 3となる。この場合の循環性の複雑さは3です。

+1

このヒューリスティックのリファレンスがありますか? – Apalala

+1

@Apalalaこれは、ただ1つのエントリ*とちょうど* 1つの出口*ポイントを持つコントロールフローグラフで有効です。それはThomas J. MacCabeによって示されました。 [ここ](https://dx.doi.org/10.1109%2Ftse.1976.233837)を参照してください。 – Quirk

1

閉領域の数を数えて1を加算するだけです。上記のあなたの例で

、閉領域= 2の数ので、CC = 2 + 1 = 3

1

P =連結成分言い換える

の数

P =私はそれがワークフローベースの数学があるので、オフトピックとして、この質問を閉じるために投票しています

Source

関連する問題