複雑さと到達可能性の間に相関関係はありますか?


18

最近、uniで循環的複雑度(McCabe)とソフトウェアの到達可能性を研究しています。今日、私の講師は、2つの測定値の間に相関関係はないと述べましたが、これは本当ですか?

それほど複雑ではないプログラム(これまで見てきたわずかなものから)が到達可能性の点で「より良い」結果をもたらすように見えるので、間違いなく何らかの相関関係があると思います。

誰もが2つのメトリックを一緒に見ようとする試みを知っていますか?そうでない場合、多数のプログラムの複雑さと到達可能性の両方に関するデータを見つけるのに適した場所は何ですか?

回答:


2

最近、uniで循環的複雑度(McCabe)とソフトウェアの到達可能性を研究しています。今日、私の講師は、2つの測定値の間に相関関係はないと述べましたが、これは本当ですか?

実際、はいといいえの両方。

まず、覚えておくとよいのは、循環フローの複雑さのMcCabeメトリックは制御フローグラフで計算され、ノードである基本ブロックまたはステートメントとそれらの間の遷移を伴う有向グラフにソースコードを抽象化することです(通常の制御フロー下向きまたは条件付きジャンプとループの場合)エッジです。ここでのサイクロマティックな複雑さは、大まかに(プログラム全体が孤立したコードを持たないと考えている場合、つまりグラフが接続されている場合)エッジの数とノードの数の差として見ることができます。

CC = E - N

到達可能性の問題は、グラフ理論の一般的な問題であり、2つのノードAとBがノードAから到達可能なノードBです。方向?したがって、コードではなく、制御フローグラフに適用できるのは再びメトリックです。

この問題を制御フローグラフに適用する方法はいくつかあります。1つの方法は、いわゆる「変数到達可能性分析」です。これは、特定の変数について、特定のプログラムポイントでその値がまだ使用可能かどうかを分析が判断することを意味します。また、マルチスレッドアプリケーションにこの用語(および一般的に到達可能性の問題)を使用している記事のみを見つけました。

基本的に、CCと到達可能性の間には何らかの相関関係があります:CCが増加すると、ノードに対するエッジの比率も増加し、エッジの方向も重要な有向グラフの場合でも、増加することを推測できますエッジの数は最終的にグラフで使用可能なパスの増加につながり、したがってノード間の直接接続または間接接続を介して到達可能性が増加します。したがって、答えはここではいです。

一方、マルチスレッド環境での到達可能性の概念には、いわゆるスーパーグラフの分析が必要です。これはそれほど些細なことではありません。CCの増加(ここでは「同期の複雑さ」と呼ばれる)は、ソフトウェアのデッドロックの可能性を高め、特定のノード/コードセグメントの到達可能性を低下させる可能性があります。したがって、ここでも「いいえ」が有効な答えです


1

私は到達可能性に精通していませんが、実行できないコードパスの尺度である場合、循環的複雑度はその上限の一種であるはずです。


0

これにはいくつかの統計があるかもしれませんが、一方は他方に依存せず、これを排除できるようにソフトウェアシステムの設計にも選択肢があるため、相関はないと言います。

実世界のデータに関しては、そこに強い相関関係であってもよいが、それは、この相関関係がなくなるわけではありませんひどく設計されたソフトウェア・システムが原因である可能性があります。グラフ理論の知識が不足しているため、偶然の相関関係になる可能性があります。


1
一方に依存するものは、相関ではなく因果関係です。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.