web-dev-qa-db-ja.com

循環的複雑度の範囲

循環的複雑度のカテゴリは何ですか?例えば:

1-5:メンテナンスが簡単
6-10:難しい
11-15:非常に難しい
20+:不可能に近づいています

何年もの間、私は10が限界であるという仮定で行ってきました。そしてそれ以上のものは悪いです。私はソリューションを分析しており、コードの品質を判断しようとしています。確かに、循環的複雑度だけが測定値ではありませんが、それは役立ちます。循環的複雑度が200以上のメソッドがあります。私はそれがひどいことを知っていますが、上の例のように、低い範囲について知りたいです。

私は this を見つけました:

カーネギーメロンからの前述の参照値は、循環的複雑度の値の4つの大まかな範囲を定義します。

  • 1から10までの方法はシンプルで理解しやすいと見なされます
  • 10から20までの値は、コードがより複雑であることを示します。ただし、コードが取る可能性のある分岐の数が多いため、テストはより困難になります。
  • 20以上の値は、非常に多くの潜在的な実行パスを持つ典型的なコードであり、非常に困難と労力をかけて完全に把握してテストすることができます
  • メソッドはさらに高くなります。 > 50、確かにメンテナンス不可能

ソリューションのコードメトリックを実行すると、25未満の場合は結果が緑色で表示されます。これには同意しませんが、他の入力を取得することを望んでいました。

循環的複雑度の一般的に受け入れられている範囲リストはありますか?

29
Bob Horn

それはあなたのプログラミングスタッフの能力にかかっていると思いますし、マネージャーとしてのあなたの感性にも少なからず関わっています。

一部のプログラマーはTDDの堅固な擁護者であり、最初に単体テストを作成しないとコードを作成しません。他のプログラマーは、単一の単体テストを作成せずに、完全に優れたバグのないプログラムを作成することができます。各グループが許容できる循環的複雑度のレベルは、ほぼ確実に大きく変動します。

これは主観的な指標です。コードメトリックスソリューションの設定を評価し、適切な結果が得られる快適なスイートスポットに調整します。

20
Robert Harvey

事前定義されたカテゴリーはなく、いくつかの理由でカテゴリー化ができない可能性があります。

  1. 一部のリファクタリング手法は、複雑さをあるポイントから別のポイントに移動します(yourコードからフレームワークまたは十分にテストされた外部ライブラリではなく、コードベースのある場所から別の場所に移動します) 。サイクロマティックの複雑さを軽減し、上司(またはグラフィックが常に増加するプレゼンテーションを愛する人)があなたが何かを素晴らしいものにするために時間を費やしたことを確信させるのに役立ちますが、コードは同じくらい悪いままですそれは以前でした。

  2. 反対に、設計とプログラミングのパターンを適用してプロジェクトをリファクタリングすると、循環的な複雑さが悪化する可能性がありますが、リファクタリングされたコードは明確であることが期待されます。開発者はプログラミングパターンを知っています(少なくともそれらを知っていると期待されます)。そのため、それらのコードは単純化されますが、循環的複雑度ではこれが考慮されていません。

  3. 他のいくつかの非リファクタリング技法は、循環的複雑度にまったく影響を与えませんが、開発者のコ​​ードの複雑度を大幅に低減します。例:関連するコメントやドキュメントの追加。構文糖を使用してコードを「近代化」する。

  4. 循環的複雑度が無関係である場合があります。私の例は好きです 彼のコメントでwhatsisnameによって与えられます :いくつかの大きなswitchステートメントは非常に明確であり、よりOOPyな方法でそれらを書き直すことはあまり役に立ちません(そして理解を複雑にするでしょう)初心者によるコードの)。同時に、これらの発言は、サイクロマティックな複雑さという面で災いです。

  5. Robert Harveyが既に上記で述べたように 、それはチーム自体に依存します。

実際には、循環的複雑度は高いがひどいソースコードを見たことがあります。同時に、循環的複雑度の高いコードを見たことがありますが、それを理解するのにそれほど苦痛はありませんでした。

特定のコードの部分の良し悪し、または保守のしやすさを完璧に示すツールがない(== --- ==)だけです。与えられた絵画が傑作であり、芸術的な価値がないので、もう1つは捨てられるべきであると言うアプリケーションをプログラムすることができないので。

LOCやファイルごとのコメント数など、設計上問題のあるメトリックと、いくつかの生のヒント(バグの数や循環的複雑度など)を示すメトリックがあります。すべての場合において、これらは単なるヒントであり、注意して使用する必要があります。

11