2016-08-09 9 views
0

私はコードベースを評価するためのメトリックとしてMccabeコードの複雑さを使用していますが、個々の関数のコード複雑度スコアのみを示しています。 全体のコード複雑度スコアは、コードベース内のすべての関数のスコアの合計で与えられます。 私は、時間の経過とともにコードベースの複雑さを軽減する私たちの努力の傾向を反映するために、標準化されたメトリック(コードラインを考慮して)を考え出しています。 (関数を削除/追加すると複雑さのスコアが変わるが、複雑さは変わらないことがわかっているので) 標準的な方法はありますか?平均的な複雑さのようなもの?Cコードベース全体のコード複雑度メトリック

+0

*「ただそれだけです」* * *それは何ですか?あなたが持っているツールは?コード全体を評価するための別のツールを見つけてください。 –

+0

https://people.debian。org /〜bame/pmccabe/pmccabe.1それは全体のコードベースの数を与えますが、単に数字を追加するだけです.... – yangjeep

答えて

1

McCabeコードの複雑度メトリックは、プログラム全体ではなく、関数ではを意味するを意味します。簡単な言葉で言えば、関数が特定の制限(vulga:スパゲッティコード)を超えるMcCabe数を持つ場合、それをいくつかのより単純な関数に分割する必要があります。

実際のメジャーは、可能なパスの数です。これは比較的単純な関数ですが、依存している場合、つまりこれらの関数が互いに呼び出す場合は、いくつかの関数ではかなり複雑です。

独立した機能(ライブラリなど)がある場合は追加できますが、依存している場合(例:本格的なプログラム)は、プログラム全体の可能なすべてのパスを数えなければなりません。ノードが関数である場合、McCabe番号を含める必要があり、そうでない場合(たとえば、単純なブランチ)、単一の関数と同じように1(1)として含めることができます。だから、

  • 独立した機能:リニアウェイ(シングルパス)で呼び出さ
    • ::二つの方法で呼び出され、それらを追加し、すべての
    • それらをすべて
    • 独立した機能を追加(2つの線形パス):関数内の分岐のように、各パスに関数を追加し、両方のパスを追加する
    • n way(n linear paths):関数内の分岐のように、各パスに関数を追加してください。
    • 依存関数:上記のように、大きな数になる可能性のあるすべてのパスを数えなければならないからです早く。

もちろん、それをすべて自動化することができます。確かに、すべての可能なパスを数えることができるあなたの言語用のパーサーを書く必要があります。そして、それがお金と盗難に値するなら、私は分かりません。

さらに、大きな関数をいくつかの単純な関数に分割することで、関数のMacCabe数を減らすことができます。今、あなたは完全なプログラムでそれをどのようにしていますか?いくつかの簡単なプログラム/ライブラリに分割しますか?はい、私はそれがうまくいくと思うので、あなたの考えは健全なようです。

しかし、それでもまだ多くの作業があります。

私はペットの仲間かもしれませんが、LoCの数は複雑さとは関係がありません。 LoCは、コード行数以外の何ものにとっても悪い評価基準です。