機械制御/振動騒音
IR情報 会社情報

メトリックの概要

メトリックの概要  
line_red.gif
メトリックの概要QA C++で採用されているメトリックスの概要

目次

image_toyo_ss_img_all_line_dot_526.gif.gif
関数メトリックス

STCYC: サイクロマティック複雑度(経路複雑度): 

経路複雑度は、判定の数に1を加えたものとして計算されます。
高い経路複雑度は、モジュール化が不十分であることや、1つの関数に含まれている論理が多すぎることを意味します。一部の厳密なプログラミング標準では、関数の経路複雑度の最大値が10であることが求められます。
McCabe(1976)は、メトリックの概要に加えて、この問題に関する重要な考察も提供します。

 

STGTO: gotoの数: 

gotoをいくつか使用すると、エラー処理が簡単になります。ただし、できるかぎりgotoの使用は避ける必要があります。

 

STLIN: メンテナンス可能なコード行数:

長い関数は1画面あるいは1ページに収まらないという理由だけでも、読みにくいということは一般に認められていることです。
PlumHallガイドラインで、Thomas Plumは関数の行数は50を越えないよう推奨しており、QACは(サイズは可変ですが)この指標が50を越える関数について警告を発します。
Plumはさらに続けて、ひとつのモジュールのなかの関数や平均コード行数がこの値(50)を超えている場合は、設計が不適切であるとし、QACもそうした場合に警告を発します。

 

STMIF: ネスティングの深さの限度:

このメトリックは、ソースコードにおける最大制御フロー・ネスティングの深度です。
このメトリックの値に基づいて警告が発行されることはありませんが、このメトリックはデモグラフィック解析で使用される4つの標準メトリックの1つです。
ネスティングを独立した関数に変えると、このメトリックスの値を小さくすることができます。この操作を行うと、ネスティングと関数ごとの平均経路複雑度の両方を減らすことによって、コードの読みやすさが向上します。
 

image_toyo_ss_img_all_line_dot_526.gif.gif
ファイルメトリックス

STCDN: コードに対するコメントの割合:

コメント中の非ブランク文字数とコード中の非ブランク文字数との比率。この比率が大きい時はコメントが多すぎてモジュールが読みにくいことになります。(こうしたソースの中からコードを見つけ出すのは骨の折れる仕事です。)
また、比率が小さすぎる場合はコメントが少なすぎます。QACは比率が高すぎても、低すぎても警告を出します。実際の範囲設定は変更可能です。

 

STOPN: Halsteadの区別可能なオペランドの数: QAC++1.4以上

あるファイル内で使われている区別可能なオペランドの数を計測します。ユーザが与える識別子およびリテラルの数になります。

 

STOPT: Halsteadの区別可能な演算子の数:

あるファイル内で使われているユーザが与えることのできない区別可能なトークンの数を計測します。キーワード、演算子、括弧などの数になります。

 

STTOT: 使用されているトークンの総数: QAC++1.4以上

あるファイル内で使われているトークンの総数を計測します。


STTPP: プリプロセス前のソース総行数:

このメトリックスは、プリプロセス前のファイルのソース総行数のカウントです。このカウントには、空白のソース行も含めた全ソース行が算入されます。

 

STMIF: ネスティングの深さの限度:

このメトリックは、ソースコードにおける最大制御フロー・ネスティングの深度です。
このメトリックの値に基づいて警告が発行されることはありませんが、このメトリックはデモグラフィック解析で使用される4つの標準メトリックの1つです。

ネスティングを独立した関数に変えると、このメトリックスの値を小さくすることができます。この操作を行うと、ネスティングと関数ごとの平均経路複雑度の両方を減らすことによって、コードの読みやすさが向上します。


image_toyo_ss_img_all_line_dot_526.gif.gif

クラスメトリックス

STCBO: オブジェクト間の凝縮度: QAC++1.4以上

このクラスからアクセスされる他のクラスのメソッドまたはインスタンス変数によって測定されるオブジェクト間の連結。基本クラスと派生クラスとの相互関係を見るために、インスタンスの階層の外側のメソッドとインスタンス変数だけがカウントされます。
継承ツリー構造の外側のクラスへの連結は、クラスの独立性や再利用性を低くするので、疑わしいものと思うべきでしょう。

 

image_toyo_ss_img_all_spacer.gif.gifSTDIT: 最深継承レベル:

最初の基本クラスからこのクラスに至るまでの派生の数。この値が高いとこのクラスが蓄積された機能に依存していることを意味し、このクラスを理解することが潜在的に難しくなっていることを意味します。

 

STLCM: メソッドの凝縮度の欠如:QAC++1.4以上

クラスのメソッドはインスタンス変数の個々のセットにアクセスするセットに分けられます。この測定値はメソッドが形成するセットの数です。

 

STMTH: クラス内で使用可能なメソッド数:

クラス内で使用可能なメソッドの数です。これには、ベース・クラスで宣言されたメソッドも含まれます。メソッドの数が多いクラスは、そのテストと理解が難しくなります。


STNOC: 直接の子の数:QAC++1.4以上

このクラスを直接の基本クラスとしているクラスの数。この測定値が高い値を示すと、このクラスの機能への依存度が高いことを意味し、このクラスへの変更が潜在的に多くの影響を及ぼすことを意味します。

 

STNOP: 直接の親クラス数:QAC++1.4以上

基本クラスは明らかに STNOP == 0 となります。一つの継承で派生したクラスは STNOP== 1 です。多重継承の場合は他の値になり、 QA C++はフラグを立てます。又、C++ プログラミング標準の中にはこの値が0と1以外になることを禁じているものもあります。


STRFC: クラスに対する応答: QAC++1.4以上

これはクラスから(直接に)呼び出される潜在的な関数の数です。各メソッドは、クラスのメソッドによって呼び出すことが可能な離れている関数またはメソッドを可能な応答セットとしてカウントします。この測定値は1つのファイルに基づいて計算されるの
で、応答セットのグローバルな分析を行なうことはできないことに注意して下さい。
しかし、最初のレベルの応答セットだけを検討することによって、クラスの関数的な依存関係を確定することができます。

 

STWMC: クラスごとのメソッドの重さ: QAC++1.4以上

これはクラスの中の全てのメソッドのサイクロマティック複雑度の合計です。サイクロマティック複雑度が個々の関数が必要とするテストの量を示すのと同様に、この測定値は1つのクラス全体が必要とするテストの量を示します。

 

PAGE TOP