関数レベルとメソッドレベルのメトリック
| 名前 | 説明 | メトリックコード | ID | 言語 |
|---|---|---|---|---|
| コード行 | メソッドまたは関数のコードの行数の計算方法: (最後の行番号) - (最初の行番号) + 1 | LOC_METHOD | 129 | C/C++、Java |
| 使用するオペランドの数 | オペランドは、識別子または定数です。このメトリックは、関数またはメソッドで使用される識別子と定数の合計数を計算します。メソッド名は、識別子でもあります。このメトリックでは、関数呼び出しは演算子であると考えられます。 | NOOPUSED | 130 | C/C++、Java |
| 使用する区別可能なオペランドの数 | 現在の関数で使用する固有なオペランド (変数と定数) の数変数は名前によって区別されるため、オーバーライドされた変数の使用は、このメトリックに寄与しません。定数は値によって区別されるため、すべての文字列は固有であると仮定されます。このメトリックでは、関数呼び出しは演算子であると考えられます。 | NODISOPUSED | 131 | C/C++、Java |
| 使用される演算子の数 | 関数またはメソッドで使用する演算子の数このメトリックは、変数、バイナリ、三項、単項、フィールドアクセス、インデックスアクセス、呼び出し、新しいインスタンス、expr-class、expression-this、expression-super へのアクセスの合計数を数えます。すべての関数呼び出しは、演算子であると考えられます。 | NOOPRUSED | 132 | C/C++、Java |
| 使用される区別可能な演算子の数 | 関数で使用する固有な演算子の数NOOPRUSED と同様ですが、関数呼び出しは、1 つの固有な演算子であると考えられます。たとえば、Msg 関数呼び出しおよび printf 関数呼び出しは、1 回のみ数えられます。 | NODISOPRUSED | 133 | C/C++、Java |
| 戻り値の数 | 関数の戻り値ステートメントの数 (戻り値のポイントではない) | NORET | 134 | C/C++、Java |
| サイクロマティック複雑度 | 循環的複雑度 (McCabe 循環的複雑度メトリック) は、制御フローグラフによって平面が分割されているエリアの数を示します。 | CYCLOMATIC | 135 | C/C++、C#、Java |
| 独立したパスの数 | 関数またはメソッドによって、独立したパスの数の自然対数を計算します。あるパスは、他のパスのセットの下位パスの組合せとして表現できない場合に、そのパスのセットから独立していると考えられます。空白部のある関数には、確実にそれを通る 1 つのパスがあります。メトリックへの非制御フローステートメントの追加コントリビューションはゼロです。空白の”if” ステートメント、または空白部と単純な条件句をもつループを入力するそれぞれの独立パスでは、メトリックが増分されます。たとえば、以下のようにします。
void foo(int i)
{
/* This function has two independent paths, resulting in the metric being equal to ln(2) = 0.693 */
if (i > 0) {
/* This is one independent path */
} else {
/* This is the second independent path */
}
}
void bar(int i)
{
/* Nested control flow statements increase the number of paths in the branches where they are present,
for every path at the beginning of that control flow statement */
/* This function has nine independent paths, resulting in the metric being equal to ln(9) = 2.197 */
if (i > 0) {
/* First independent path */
for (int j = 0; j < i; ++j) {
/* Still the first independent path */
}
/* Second independent path (corresponding to j >= i) */
/* There are two independent paths at the entry of this control flow statement.
For each of them, the statement introduces 3 more independent paths */
switch (i) {
case 1:
/* Still the part of the first or second original independent paths */
break;
case 2:
/* 3-rd and 4-th independent paths */
break;
case 3:
/* 5-th and 6-th independent paths */
break;
default:
/* 7-th and 8-th independent paths */
i++;
}
} else {
/* 9-th independent path */
}
}
C++ の Goto ステートメントは、この計算では考慮しません。各 catch 句は独立したパスと考えられます。メトリック計算は、パスの到達可能性を考慮に入れません。 |
NOINDPATHS | 136 | C/C++、Java |
| パラメーターの数 | 関数またはメソッドのパラメーター (引数) の数。f(x,y+z, foo (g)) の例では、x、y+z、g は、数が 3 となるよう他の関数に渡されるパラメーターです。 | NOPARMS | 137 | C/C++、C#、Java |
| 固有の関数への呼び出しの数 | (メトリックを計算する) 関数またはメソッドから他の関数またはメソッドへの呼び出しの数同じ関数またはメソッドへの呼び出しの数によって、このメトリックに 1 のみが追加されます。 | NOCALLS | 138 | C/C++、Java |
| クラス外の呼び出しの数 | クラス外呼び出しの数 (異なる "this" を持つメソッドへの呼び出しの数)。メソッドの場合は、このメトリックは、呼び出しの総数から (当該メソッドを含む) 同じクラス内の他のメソッドへの呼び出し数を差し引いた数を表わします。メソッドでない関数では、このメトリックは呼び出しの総数と等しくなります。 | NOCALLSOC | 139 | C/C++、Java |
| 他の関数に渡されるパラメーターの数 | 他の関数に渡されるパラメーターの数。この例では、foo (int i) { bar (1, 2, 3); 700 (1); } 数は 4 です | NOPAROTHER | 140 | C/C++、Java |
| 実行可能ステートメントの数 | 関数またはメソッドの実行可能な空白ステートメントの数。実行可能ステートメントは、a+=b などの演算子、または、f(s+y, z) などの関数呼び出しです。 | NOEXSTAT | 141 | C/C++、Java |
| ステートメントの数 | 式と制御ステートメント (if、for、while) の数このメトリックは、関数またはメソッドの NOCONTROLSTAT、NOEXSTAT、NOMDECLSTAT の合計です。 | NOSTAT | 142 | C/C++、Java |
| ループの数 | 現在の関数の for、while、do-while ステートメントの数 | NOLOOPS | 143 | C/C++、Java |
| 条件付きステートメントの数 | 現在の関数の if および switch ステートメントの数 | NOIF | 144 | C/C++、Java |
| else および case ステートメントの数 | 現在の関数の else および case ステートメントの数。デフォルトステートメントは含まれていません。 | NOBRANCH | 145 | C/C++、Java |
| 最大レベルの制御ネスト | 最大レベルのネスト制御ステートメント (if、switch、for、while、do-while ステートメント)初期 MAXLEVEL (演算子のない関数など) は 1 です。 | MAXLEVEL | 146 | C/C++、C#、Java |
| 平均レベルの制御ネスト | 関数またはメソッドの実行可能ステートメントの数の平均値。関数のすべてのステートメントのそのレベルの各実行可能ステートメントの総数を、実行可能ステートメントの数で割ることにより算出します。実行可能ステートメントの数が 0 の場合、AVERLEVEL は 0 です。 | AVERLEVEL | 147 | C/C++、Java |
| ローカルの宣言の数 | 関数内でローカルで宣言されるデータアイテムの数 | NOLOCDECL | 148 | C/C++、Java |
| 条件付きアークの実行可能ステートメントの最大数 | 条件付き arc のブランチのスパン内にある実行可能ステートメントの最大数 | MAXCONDSPAN | 149 | C/C++、Java |
| 関数またはメソッドの制御グラフの条件付き arc の数 | 関数またはメソッドの制御グラフの条件付きブランチの数 (if、switch、do、while、for ステートメント) | NOCONDARCS | 150 | C/C++、Java |
| 関数またはメソッドの制御ステートメントの数 | 制御ステートメントの数 (関数またはメソッド内で制御フローを操作するステートメント)このメトリックは、ループまたは条件付きステートメント (if、switch、do、while、for) の数、制御を渡すステートメント (return、break、continue、goto) の数、try-catch ステートメントの数を計算します。 | NOCONTROLSTAT | 151 | C/C++、Java |
| 関数またはメソッドの宣言ステートメントの数 | 関数またはメソッドの宣言ステートメントの数。ローカル配列やローカル変数の宣言など。これは、1 つの宣言ステートメントはいくつかのローカル変数を宣言できるため、NOLOCDECL とは異なります。 | NOMDECLSTAT | 152 | C/C++、Java |
| グローバル変数へのアクセス回数 | 関数またはメソッド外で定義された変数へのアクセス (読み書き) 回数 | NOACCTOGLOB | 153 | C/C++、Java |
| 宣言されたローカル変数のバイト数 | このメトリックの計算方法の詳細については、組み込み型のサイズの指定を参照してください。 | BYTESLOCDECL | 154 | C/C++ |
| 関数のパラメーターのバイト数 | このメトリックの計算方法の詳細については、組み込み型のサイズの指定を参照してください。 | BYTESPARMS | 155 | C/C++ |
| 他の関数に渡されるパラメーターのバイト数 | このメトリックの計算方法の詳細については、組み込み型のサイズの指定を参照してください。 | BYTESPAROTHER | 156 | C/C++ |
| プロトタイプされていない関数への呼び出しの数 | プロトタイプされていない関数への呼び出しの数。このメトリックは、コードの完全性に依存しています。コードがインクルードなしでコンパイルされる場合、メトリックのみが呼び出しの数となります (プロトタイプされる関数がないため)。 | NOCALLSNP | 159 | C/C++ |
| グローバル変数からの読み取り回数 | グローバル変数からの読み取り回数 | READFGLOBAL | 160 | C/C++、Java |
| グローバル変数への書き込み回数 | グローバル変数への書き込み回数 | WRITETGLOBAL | 161 | C/C++、Java |
| 関数やメソッドにコメントなし、コードの空行なし | 関数またはメソッドのコードの行数 (コメント行と空行を除く) | NCNBLOC_METHOD | 162 | C/C++、C#、Java |
| 関数で宣言されたローカル変数とパラメーターのバイト数 | このメトリックは、BYTESPARMS メトリックと BYTESLOCDECL メトリックの合計です。このメトリックの計算方法の詳細については、組み込み型のサイズの指定を参照してください。 | BYTESSTACKSIZE | 163 | C/C++ |
| 拡張されたサイクロマティック複雑度 | 高い循環的複雑度では、論理的ブール値演算子が決定カウントに含まれます。Klocwork が論理的ブール値演算子 (&& または |) を条件付きステートメント内で検出すると常に、EXTCYCLOMATIC が 1 増加します。条件 Klocwork では、If、IfElse、While、DoWhile、For、Switch が考慮されます。 | EXTCYCLOMATIC | 164 | C/C++ |
| 単純なサイクロマティック複雑度 | 循環的複雑度 (メトリックコード 135) と同様ですが、プレーンコードで計算されます (プリプロセッサ展開前)。マクロ定義から生成されるどのような条件付きステートメントも、PLAINCYCLOMATIC メトリックにはなりません。 | PLAINCYCLOMATIC | 165 | C/C++ |
| プレーンの高循環的複雑度 | 高循環的複雑度 (メトリックコード 164) と同様ですが、プレーンコードで計算されます (プリプロセッサ展開前)。マクロ定義から生成されるどのような条件付きステートメントも、PLAINEXTCYCLOMATIC メトリックにはなりません。 | PLAINEXTCYCLOMATIC | 166 | C/C++ |
| 一意の呼び出し元関数の数 |
他の関数またはメソッドを呼び出す (メトリック計算対象の) 一意の呼び出し元関数またはメソッドの数。同じ関数またはメソッドから同じ関数またはメソッドへの呼び出しが複数回行われた場合でも、このメトリックでは 1 としてカウントされます。 このメトリックはシステム全体で計算されるため、kwbuildproject のみで報告され、kwcheck および kwciagent (ローカル/継続的解析) ではサポートされません。
|
NOCALLEDBY | 167 | C/C++ |
| 関数内の to go ステートメントの数 | 関数またはメソッド内に存在する (メトリック計算対象の) go to ステートメントの数。 | NOGOTOSTMT | 168 | C/C++、C# |
| 呼び出しグラフ再帰の数 |
任意の関数またはメソッドに関する (メトリック計算対象の) 一意の呼び出しグラフ再帰の数。 このメトリックはシステム全体で計算されるため、kwbuildproject のみで報告され、kwcheck および kwciagent (ローカル/継続的解析) ではサポートされません。
|
NOCGRECURSIONS | 169 | C/C++ |