質問

る僕たちにとって今後は"循環的複雑さ".これでも問題"についての計算方法をCC言語X"または"どうやっていY最小限のCC"が、私はずっとは何であるかを理解する.

NDependサイト, ったという説明は基本的には"の意思決定メソッドになっています。各場合は、&&。加+1CC"スコア").るものですか?そしてなぜか参照:うつがいの数の合計はかなり低めのコードが理解しやすいものではあったものですか?

やはり何より深いコンセプトです。

役に立ちましたか?

解決

私はより深い概念を認識していませんよ。私は、それは一般的に保守性指数の文脈で考えられています信じています。そこに多くの枝が特定のメソッド内であり、より困難それはそのメソッドの操作(一般)のメンタルモデルを維持することです。

より高い循環的複雑度と

の方法はまた、ユニットテストで上完全なコードカバレッジを得ることがより困難です。 (おかげでマークW に!)

もちろん、中に保守性の他のすべての側面をもたらすこと。エラーの可能性/回帰/等々。コアコンセプトは、しかし、かなりストレートフォワードです。

他のヒント

サイクロマティック複雑さは、あなたがそのブロックを通じてすべてのパスを実行するためにパラメータを変化させることで、コードのブロックを実行しなければならない回数を測定します。それはあなたのテスト戦略をエスケープ論理エラーの可能性を増加させるので、より高いカウントが悪いです。

Cyclocmatic complexity = Number of decision points + 1

この決定ポイントのお条件付き算のような場合---他、スイッチ、ループ、ループなど。

以下の図のタイプのものに限ります。

  • 循環的複雑さは1–10メ考えられる通常 applicatinon

  • 循環的複雑さにある11–20池に適用

  • 循環的複雑性あり21–50メリスクの適用

  • 循環的複雑さにある50名以上の読不安定申請

Wikipediaがお友達にこの 定義の循環的複雑度

基本的には、想像プログラムとして 制御フローグラフ その

の複雑さです(...)に定義されている。

M = E − N + 2P

場所

  • M=循環的複雑さ、
  • E=数のエッジのグラフ
  • N=ノードの数のグラフ
  • P=数の接続部品

CCコンセプトどう捉えどんなに複雑プログラムはどのようにハードで試して単一の整数とする。

うん、それは実際にそれです。あなたのコードを取ることができ、より実行パス、テストされなければならない多くのもの、およびエラーの確率が高くなります。

私が聞いたもう一つの興味深いポイントます:

の最大のインデントを使用してコード内の場所は最高のCCを持つ必要があります。これらは一般的に、彼らが読み取り/維持するために難しくなるだろうと予想されますので、テストカバレッジを確保するための最も重要な領域です。他の回答には注意するように、これらは、カバレッジを確保するためのコードのより困難な地域もあります。

循環的複雑度は、本当にただ怖い流行語です。実際には、コードのより複雑な部分を指摘して、ソフトウェア開発に使用されるコードの複雑さの尺度です(バギーである可能性が高いが、そのため非常に慎重に、徹底的にテストしなければなりません)。あなたは、E-N + 2P式を用いて計算することができますが、私はあなたがこのプラグインによって自動的に計算しているお勧めします。私はあなたのコードの優れた可読性と保守性を維持するために、5未満にCCを保つように努力すべきである親指のルールを聞いたことがあります。

私は最近、 Eclipseのメトリックのプラグインは、私のJavaプロジェクトにを、それが持っていますもちろん、あなたの通常のEclipseのヘルプと統合し、あなたのコードを向上させることに、さまざまな複雑さ対策やヒントやトリックのいくつかのより多くの定義を読むことができます。

本当に素晴らしく、簡潔なヘルプファイル

それはそれだ、アイデアが低いCCを持っている方法は、すべての方法をより複雑にするこれ等のループ、あまりフォークを持っているということです。アナライザで、コード50万行を見直し、マグニチュード高いCCのオーデルを持っているカップルの方法を見て想像してみてください。これは、(それが高いCCが高いバグ率を持っていることもよくあります)あなたがより良く理解するためにこれらのメソッドをリファクタリングに注力することができます。

ルーチン(あればループ、スイッチ、など...)の各決定点は、基本的にif文と同等に沸きます。各ifのためには、撮影することができます2つのコードパスを持っています。だから、第一支店と2つのコードパスは、第三にようにそこに8があると、第二に4つの可能なパスがある、があります。 Nは、分枝の数は少なくとも2つの** Nのコードパスがあります。

これは、それが困難なコードの動作を理解し、Nは、いくつかの小さな数を超えて成長したときにそれをテストすることができます。

これまでの回答は、循環的複雑度にソフトウェアの品質の相関性を言及していません。研究は、下の循環的複雑度メトリックを有する高品質であるソフトウェア開発を支援すべきであることが示されています。これは可読性、保守性、および可搬性のソフトウェアの品質特性を支援することができます。一般的なものでは5-10の間の循環的複雑度メトリックを取得しようとしなければなりません。

サイクロマティック複雑さのような指標を使用する理由の1つは、一般的に人間が唯一のあなたの脳内で同時に情報の約7(プラスマイナス2)個のトラックを保つことができるということです。お使いのソフトウェアは、複数の決定パスと、過度に複雑である場合したがって、あなたのソフトウェアが(すなわち、それは、高サイクロマティック複雑メトリックを持つことになります)どのように動作するかを視覚化できるようになることはほとんどありません。これは、最も可能性が高い誤っやバグだらけのソフトウェアの開発につながります。この詳細については、<のhref = "HTTP上でこことも見つけることができます://一つ%20of%20the%20reasons%20for%20using%20metrics%20like%20cyclomatic%20complexity%20is%20that%20IN%20general%20A%20human%20being%20can%20only%20keep%20track%20of%20about%207 %20%28plus%20or%20minus%202パーセント29%20pieces%20of%20information%20simultaneously%20IN%20your%20brain%、20%20Therefore、%20if%20your%20software%20is%20overly%20complex%20with%20multiple%20decision %20paths、%20it%20is%20unlikely%20that%20you%20will%20be%20able%20to%20visualize%20how%20your%20software%20will%20behave%、20%28i.e.%20it%20will%20have%20A%20high %20cyclomatic%20complexity%20metric%29%20This%20would%20most%20likely%20lead%20to%20developing%20erroneous%20or%20bug%20ridden%20software%、20%20More%の20information%20about%20this%20can%20be%20found %20here%20および%20also%20on%20Wikipedia。 ">ウィキペディアでます。

循環的複雑度は、制御フローグラフを使用して計算されます。プログラムのソースコードを介して直線的に独立したパスの定量的測定値の数は、循環的複雑度(IF / ELSE IF /用/ながら)

と呼ばれています

Cyclomatric複雑さは、基本的には保守のためのよりattensionを必要とするコードの領域を把握するメトリックです。それは基本的にリファクタリングへの入力になります。 これは間違いなく深くネストされたループ、条件などを回避するという点で、コードの改善領域の指標を与えます。

それはそれのようなものです。しかし、「ケース」または「スイッチ」文の各分岐が実際には1としてカウントする傾向があり、これはCC の嫌いの場合を意味文、およびそれらを必要とする任意のコード(命令プロセッサ、ステートマシン、など)。

出口から実行追加のエッジを使用して関数の制御フローグラフを、検討入り口へ。循環的複雑度は、私たちが二つにグラフを分離することなく行うことができますカットの最大数です。

function F:
    if condition1:
       ...
    else:
       ...
    if condition2:
       ...
    else:
       ...

コントロールフローグラフ

コントロールフローグラフ

リンクグラフは、3の循環的複雑度を持っている理由は、

おそらく、直感的に見ることができます。

Cyclomatric複雑プログラムが(場合、しばらくのため、スイッチ・ケースなど...)条件付きロジック構築物で追従する方法を複雑な異なる経路の数を測定is.Itソフトウェアの単位の尺度です。あなたはここでそれを計算についての詳細を学ぶために好きになる場合は、あなたが見ることができる素晴らしいユーチューブの動画は HTTPSであります:?//www.youtube.com/watch V = PlCGomvu-NM

それはプログラムが取ることができる別のパスやシナリオを明らかにするためのテストケースを設計する上で重要です。 「良いテスト容易性と保守性を持っているために、マッケイブは推奨しています いかなるプログラム・モジュールは、10" (Marsic、2012、P。232)の循環的複雑度を超えてはならないこと。

リファレンス: Marsic。、I.(2012年、9月)。 のソフトウェアエンジニアリングの。ラトガース大学。 www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdfより作成

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top