これについてのいくつかのコメントは、私がぼんやりと書いている...
具体的には、M = E − N + 2Pのウィキペディア方程式について
その方程式は非常に間違っています。
何らかの理由で、マッケイブは確かに彼の中にそれを使用して、元の論文(「A複雑さの測度」、ソフトウェア工学、Voの上のIEEEトランザクション.. SE-2、第4号、1976年12月)、それを正当化することなく、かつ、実際に正しいを引用した後、最初のページの式は
v(G)= e-v + p
(ここでは、数式要素のラベルが変更されています)
具体的には、McCabeは本C.Berge、Graphs and Hypergraphs(以下G&HGと略す)を参照しています。その本から直接:
定義(G&HGの27ページ下):
(無向)グラフG(複数の非接続コンポーネントを含む可能性がある)の循環数v(G)は、次のように定義されます。
v(G)= e-v + p
ここで、e =エッジの数、v =頂点の数、p =接続されたコンポーネントの数
定理(G&HGの29ページ上部)(McCabeでは使用しません):
グラフGの循環数v(G)は、独立サイクルの最大数に等しい
サイクルは、グラフ内の互いに隣接する配列内の各二つの連続する頂点で、同じ頂点で開始および終了頂点の配列です。
直観的には、歩行の重ね合わせによって他のサイクルからサイクルを構築できない場合、サイクルのセットは独立しています。
定理(G&HGの29ページ中)(McCabeで使用):
強く接続されたグラフGでは、循環数は線形独立回路の最大数に等しくなります。
回路は許容頂点と辺のない繰り返しを有するサイクルです。
有向グラフは、指定された方向にエッジを通過することにより、すべての頂点が他のすべての頂点から到達可能である場合、強く接続されていると言われます。
ここでは、無向グラフから強く接続されたグラフに渡されていることに注意してください(これは有向グラフです... Bergeはこれを完全に明らかにしていません)。
McCabeは上記の定理を適用して、「McCabe Cyclomatic Complexity Number」(CCN)を計算する簡単な方法を導き出しました。
プロシージャの「ジャンプトポロジ」を表す有向グラフ(命令フローグラフ)を指定し、指定された頂点が一意のエントリポイントを表し、指定された頂点が一意の出口ポイントを表す(出口ポイントの頂点を「構築」する必要がある場合がある)複数の戻り値の場合に追加することで)、出口点頂点からエントリポイント頂点に有向エッジを追加することにより、強力に接続されたグラフを作成し、エントリポイント頂点が他の頂点から到達できるようにします。
McCabeは、修正された命令フローグラフの循環的数が「「最小パス数」の直感的な概念に準拠している」と(むしろ紛らわしく言うかもしれません)ので、その数を複雑さの尺度として使用します。
クールだから:
変更された命令フローグラフの循環的複雑度数は、無向グラフの「最小」回路をカウントすることで決定できます。これは人や機械で行うのは特に難しいことではありませんが、上記の定理を適用することで、より簡単に決定できます。
v(G)= e-v + p
エッジの方向性を無視する場合。
すべての場合において、単一の手順を検討するだけなので、グラフ全体に接続されているコンポーネントは1つだけです。
v(G)= e-v + 1。
「出口への出口」エッジが追加されていない元のグラフを検討する場合、単純に以下を取得します。
ṽ(G)=ẽ-v + 2
as = e-1
彼の論文のMcCabeの例を使用して説明しましょう。
ここにあります:
- e = 10
- v = 6
- p = 1(1つのコンポーネント)
- v(G)= 5(明らかに5サイクルをカウントしています)
サイクロマティック数の式は次のとおりです。
v(G)= e-v + p
5 = 10-6 + 1となるので正しい!
彼の論文で与えられている「McCabe循環的複雑度数」は
5 = 9-6 + 2(方法についての詳細な説明はこの論文にはありません)
これはたまたま正しい(v(G)になります)が、間違った理由で、つまり以下を使用します:
ṽ(G)=ẽ-v + 2
したがって、ṽ(G)= v(G)... phew!
しかし、これは良いことでしょうか?
2つの言葉で:あまりない
- プロシージャの「命令フローグラフ」を確立する方法は、特に例外処理と再帰が図に入った場合、完全に明確ではありません。McCabeは、再帰、例外、および単純な実行構造を持たない言語であるFORTRAN 66で記述されたコードに彼の考えを適用したことに注意してください。
- 決定を伴う手順とループを伴う手順が同じCCNを生成するという事実は、良い兆候ではありません。