回答:
最近、uniで循環的複雑度(McCabe)とソフトウェアの到達可能性を研究しています。今日、私の講師は、2つの測定値の間に相関関係はないと述べましたが、これは本当ですか?
実際、はいといいえの両方。
まず、覚えておくとよいのは、循環フローの複雑さのMcCabeメトリックは制御フローグラフで計算され、ノードである基本ブロックまたはステートメントとそれらの間の遷移を伴う有向グラフにソースコードを抽象化することです(通常の制御フロー下向きまたは条件付きジャンプとループの場合)エッジです。ここでのサイクロマティックな複雑さは、大まかに(プログラム全体が孤立したコードを持たないと考えている場合、つまりグラフが接続されている場合)エッジの数とノードの数の差として見ることができます。
CC = E - N
到達可能性の問題は、グラフ理論の一般的な問題であり、2つのノードAとBがノードAから到達可能なノードBです。方向?したがって、コードではなく、制御フローグラフに適用できるのは再びメトリックです。
この問題を制御フローグラフに適用する方法はいくつかあります。1つの方法は、いわゆる「変数到達可能性分析」です。これは、特定の変数について、特定のプログラムポイントでその値がまだ使用可能かどうかを分析が判断することを意味します。また、マルチスレッドアプリケーションにこの用語(および一般的に到達可能性の問題)を使用している記事のみを見つけました。
基本的に、CCと到達可能性の間には何らかの相関関係があります:CCが増加すると、ノードに対するエッジの比率も増加し、エッジの方向も重要な有向グラフの場合でも、増加することを推測できますエッジの数は最終的にグラフで使用可能なパスの増加につながり、したがってノード間の直接接続または間接接続を介して到達可能性が増加します。したがって、答えはここではいです。
一方、マルチスレッド環境での到達可能性の概念には、いわゆるスーパーグラフの分析が必要です。これはそれほど些細なことではありません。CCの増加(ここでは「同期の複雑さ」と呼ばれる)は、ソフトウェアのデッドロックの可能性を高め、特定のノード/コードセグメントの到達可能性を低下させる可能性があります。したがって、ここでも「いいえ」が有効な答えです。