メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

推定の関数結合

呼び出しツリー レベル間の複雑度の測定

説明

このメトリクスでは、呼び出しツリーの異なるレベル間における複雑度の近似測定が提供されます。メトリクスは次のように定義されます。

number of call occurrencesnumber of function definitions + 1(1)
このメトリクスの負の値は、コードに関数呼び出しよりも多くの関数定義が含まれていることから、コード内に使用されない複数の関数があることを示唆します。正の値は、ソース ファイル内の複数の関数が頻繁に互いを呼び出すことを意味する場合があります。このメトリクスによって、ソース ファイル内の関数の相互依存性を推定できます。Polyspace ガイドライン チェッカーを使用することで、各種のコード メトリクスのしきい値を設定して、コードの複雑度をチェックできます。Polyspace チェッカーを使用してソフトウェアの複雑度を低減するを参照してください。

このメトリクスは次のとおりです。

  • 現在のファイル内のみの関数呼び出しと関数定義をカウントします。

    現在のファイルでインクルードされているヘッダー ファイル内の関数定義はカウントしません。

  • static 関数と inline 関数を他の関数と同様に扱います。

すべて展開する

void checkBounds(int *);
int getUnboundedValue();

int getBoundedValue(void) {
    int num = getUnboundedValue();
    checkBounds(&num);
    return num;
}

void main() {
    int input1=getBoundedValue(), input2= getBoundedValue(), prod;
    prod = input1 * input2;
    checkBounds(&prod);
}

この例では、以下のようになっています。

  • 呼び出しの出現数は 5 回。getBoundedValue および checkBounds が両方 2 回呼び出され、getUnboundedValue が 1 回呼び出されている。

  • 関数定義は 2 つ。main および getBoundedValue が定義されている。

したがって、推定の関数結合は 5 - 2 + 1 = 4 です。

int foobar(int a, int b){ 
    return a+b; 
} 

int bar(int b){ 
    return b+2; 
} 

int foo(int a){ 
    return a<<2; 
} 

int main(int x){ 
    foobar(x,x+2); 
    return 0; 
}

この例では、推定の関数結合の結果が負になるしくみを示します。この例では、以下を確認します。

  • main での関数呼び出しが 1 回。

  • 定義された関数が 4 つ。foobarbarfoo および main

したがって、推定の関数結合は 1 - 4 + 1 = -2 です。

メトリクス情報

グループ: ファイル
頭字語: FCO
HIS メトリクス:いいえ