関数レベルおよびメソッドレベルメトリック

名前 説明 メトリックコード 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++