タグ付けされた質問 「cyclomatic-complexity」


7
複雑すぎる方法を避ける-循環的な複雑さ
Cyclomatic Complexityを削減するためにこの方法をどのように実行するかわからない。ソナーは13を報告しますが、10が予想されます。しかし、この方法をそのままにしておいても、ソナーのルールに従う方法に挑戦するだけでは何の害もありません。どんな考えでも大歓迎です。 public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) { millis = new ExtractInSecond(sValue).invoke(); } else if (sValue.endsWith("m")) { …

2
同じメソッドを複数回呼び出すときの循環的な複雑さ
Code Reviewでの質問のおかげで、下のコードのCyclomatic Complexityが正確に何であるかについて少し意見の相違(本質的に何かを学ぶ機会)になりました。 public static void main(String[] args) { try { thro(); thro(); thro(); thro(); thro(); thro(); thro(); } catch (NullPointerException e) { } } private static Random random = new Random(); public static void thro() throws NullPointerException { if (random.nextBoolean()) throw new NullPointerException(); System.out.println("No crash this time"); } Eclipseでこのコードを記述し、Eclipseメトリックプラグインを使用すると、メインメソッドのMcCabe …

6
反復法は循環的複雑さを軽減し、サポート性を向上させますか?
C#、JavaScript、および(できれば)Java 8などの現代言語で一般的に見られるような反復メソッドは、コードの理解可能性およびサポート可能性に対する循環的複雑さの影響を軽減しますか? たとえば、C#では次のコードを使用できます。 List<String> filteredList = new List<String>(); foreach (String s in originalList){ if (matches(s)){ filteredList.add(s); } } これには、単純な循環的複雑度2があります。 これを次のように簡単に書き換えることができます。 List<String> filteredList = originalList.where(s => matches(s)); 単純な循環的複雑度は0です。 これにより、実際にサポート可能なコードが増えますか?このトピックに関する実際の研究はありますか?

3
循環的な複雑さを理解する
最近、Cyclomatic Complexityに出くわしました。それをよりよく理解したいと思います。 複雑さの計算に使用されるさまざまな要因の実用的なコーディング例は何ですか?具体的には、Wikipediaの方程式についてM = E − N + 2P、次の各用語の意味をよりよく理解したいと思います。 E =グラフのエッジの数 N =グラフのノードの数 P =接続されたコンポーネントの数 EまたはNのいずれかが、コードブロック内の決定ポイント(if、else、for、foreachなど)の数であると思われますが、どちらがどちらを意味するのかはよくわかりません。また、Pは関数呼び出しとクラスのインスタンス化を指すと推測していますが、私が見ることができる明確な定義はありません。誰かがそれぞれの明確なコード例でもう少し光を当てることができれば、それは助けになるでしょう。 フォローアップとして、Cyclomatic Complexityは、100%パスカバレッジに必要な単体テストの数と直接相関していますか?例として、複雑度4のメソッドは、そのメソッドをカバーするために4つのユニットテストが必要であることを示していますか? 最後に、正規表現は循環的複雑度に影響しますか?

7
循環的複雑度が単一のメソッドで重要なのはなぜですか?
最近からSonarLint for Eclipseを使用していますが、それは非常に役立ちました。しかし、それは私に循環的複雑さについての疑問を投げかけました。 SonarLintは許容できるCCを10と見なし、私がそれを超えている場合があります(約5または6ユニット)。これらの部分は、値がさまざまな変数に依存するマッパーに関連しています。次に例を示します。 フィールドAは文字列sAに依存しています。 フィールドBは文字列sBに依存しています。 フィールドCはString sCに依存しています。 など... if各フィールドに置くこと以外に選択肢はありません。これは(幸いにも)私の選択ではありませんが、自分で変更できない既存の複雑なシステムです。 私の質問の核心は、次のとおりです。単一の方法で CCが高すぎないことがなぜ重要なのですか。いくつかの条件を1つまたは複数のサブメソッドで移動して複雑さを軽減しても、全体的な機能のコストは削減されず、問題が別の場所に移動するだけだと思いますか? (もしあれば、小さな間違いのため申し訳ありません)。 編集 私の質問は、グローバルな循環的複雑度についてではなく、単一のメソッドの複雑度とメソッドの分割についてのみです(申し訳ありませんが、私が正確に何を意味するかを説明するのに大雑把な時間を費やしています)。すべてのサブメソッドを実行するだけの「スーパーメソッド」にまだ属しているのに、条件を小さなメソッドに分割して、アルゴリズムに複雑さを加えることが許されるのはなぜですか。 ただし、2番目のリンク(アンチパターンについて)は非常に役立ちます。

1
Webアプリケーションの複雑さ
私は現在、Webアプリケーションの保守性に関する修士論文を書いています。Colemanらによる「Maintainability Index」のようないくつかの方法を見つけました。またはMuthannaらによる「ソフトウェア保守性インデックス」。どちらの場合も、循環的複雑度を計算する必要があります。だから私の質問は: Webアプリケーションの循環的複雑度を測定することは可能ですか? 私の意見では、Webアプリケーションには3つの部分があります。 サーバーコード(PHP、C#、Python、Perlなど) クライアントコード(JavaScript) HTML(演算子としてのリンクとフォーム、オペランドとしてのGETパラメータとフォームフィールド!?) どう思いますか?Webアプリケーションの複雑さについて別の見方がありますか?私は何か見落としてますか?

4
コード比率の循環的複雑度/行を計算することは意味がありますか?
一般に、保守性インデックスは多くの要因に依存しています。たとえば、Visual Studioでは、循環的複雑度、継承の深さ、クラス結合、コード行に依存しています。これらの4つの値はできるだけ低くする必要があります。 同時に、コードメトリックツールでも、書籍でも、循環的複雑度(CC)とコード行(LC)のみの比較を見たことはありません。 そのような比率を計算することは意味がありますか?コードについてどのような情報が提供されますか?言い換えると、LCを下げるよりもLCを下げる方が良いでしょうか? 私が気づくのは、小規模なプロジェクトの場合、CC / LCの比率が低い(1/2以下)ことです。つまり、LCは高く、CCは低くなります。大規模なプロジェクトでは、CC / LCはほとんどの場合thanより大きくなります。どうして?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.