メインコンテンツ

呼び出しレベルの数

制御フロー ステートメントの入れ子の深度

説明

このメトリクスは関数内の ifswitchfor または while のような制御フロー ステートメントの入れ子の最大深度を示します。Polyspace® は入れ子深度のカウントを 0 から開始し、入れ子の深さが増えるたびにこのメトリクスがインクリメントされます。制御フロー ステートメントのない関数は呼び出しレベル 0 です。

新しいコマンド ライン オプション -start-level-from-one を使用すれば、0 ではなく 1 から呼び出しレベルのカウントを開始できます。

このメトリクスの推奨上限は 4 です。コードを読みやすくするには、このメトリクスの上限を適用するようにしてください。

メトリクスに制限を適用するには、Polyspace を使用したコード複雑度メトリクスの計算を参照してください。

すべて展開する

int foo(int x,int y)
{
    int flag = 0;
    if (x <= 0)
        /* Call level 1*/
        flag = 1;
    else
    {
        if (x <= y )
            /* Call level 2*/
            flag = 1;
        else
            flag = -1;
    }
    return flag;
}

この例では、foo の呼び出しレベルの数は 2 です。Polyspace は else-if ステートメントを入れ子 if ステートメントと見なします。たとえば、次のコードを考えてみましょう。

int func(int x, int y)
{
	int flag = 0;
	if(x <= 0) {
		/* Call level 1*/
		flag = 1;
	} else
		if(x <= y) {
			/* Call level 2*/
			flag = 1;
		} else
			if(x == y) {
				/* Call level 3*/
				flag = 1;
			} else {
				flag = -1;
			}
	return flag;
}
ここで func の呼び出しレベルは 3 です。

int foo(int x,int y, int bound)
{
    int count = 0;
    if (x <= y)
        /* Call level 1*/
        count = 1;
    else
        while(x>y) {
            /* Call level 2*/
            x--;
            if(count< bound) {
                /* Call level 3*/
                count++;
            }
        }
    return count;
}

この例では、foo の呼び出しレベルの数は 3 です。

メトリクス情報

グループ: 関数
頭字語: LEVEL
HIS メトリクス:はい

バージョン履歴

すべて展開する