静的解析,構成管理,MISRA-C,コードレビュー,バグトラッキング,リバースエンジニアリング
ソフトウエア開発支援ツール
  SOFTWARE SOLUTIONS
 ソフトウェア開発における品質の向上、および生産性の向上を目指して、最適な開発支援ツールを提供します。
ソフトウエア開発支援ツール > 製品紹介 > 静的解析ツール QAC++ > QA C++ の製品情報 > 製品概要書 > メトリックの概要
メトリックの概要

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

目次



関数メトリックス

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つです。

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

戻る

STPAR: 仮引数の数:

このメトリックは、各関数の宣言済み仮引数の数です。

戻る

STPTH: 概算の静的経路数:

これは、NejmehのNPATH統計に似ており、関数の制御フローで使用できる経路数の上限値
を示します。

戻る

STSUB: 関数呼び出しの数: QAC++1.4以上

ある関数内で呼び出される関数の数を計測します。STSUBが高いほど、他の関数に依存し
ていることを物語り、複雑でメンテナンスのコストがかかることを示唆します。

戻る

STXLN: 実行可能な行数:

基本的にはSTLINから宣言文の行数を引いたものです。例えば判定密度などの統計に意味
を持たせるために、QACは一つのモジュールのステートメント行数が十分かどうかを決定
するトリガとして、この指標を使います。デフォールトの基準値は50行ですが、変更可能
です。

戻る



ファイルメトリックス

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

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

戻る

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

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

戻る

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

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

戻る

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

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

戻る

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

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

戻る

STVAR: 区別可能な識別子の総数: QAC++1.4以上

あるファイル内で使われている識別子の数を計測します。

戻る



クラスメトリックス

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

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

戻る

STDIT: 最深継承レベル:

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

戻る

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つのクラス全体が必要とするテストの量を示します。

戻る