-2

LOC と循環的複雑度のメトリクスを使用して、以下の 2 つのコードの相対的な複雑さについて何らかの結論を導き出せるかどうか疑問に思っています。ちょっと頭をいじっています。

コード A

 int i = 1;
    while(i < = 5){

    playACard(i);

    if (playerHasWon(i))
    break;
    i++
    }

コード B

int j = 0;

int i = 2;

j = i;
j = j + i;

j++;
System.out.println (j);

System.out.println
4

2 に答える 2

2

高度な LOC ツール (つまり、私の目と指 :-) を使用して、2 つのコードの LOC カウントを計算すると同じです...空白行を無視します。

サイクロメトリックな複雑さをカウントするには、ツールが機能するために、解析可能なソース コードが必要です...何らかのプログラミング言語で...。手計算と彼がどのようにそれに到達したかについての説明については、@ d'alar'copの回答に任せます。


しかし、正直なところ、このようなコードの LOC と Cyclometric Complexity の測定は役に立ちません。2 つのサンプルはまったく異なることを行うため、「複雑」な方の違いはほとんどありません。

私の考えでは、CC は、コードベースの最初のパス レビューで過度に複雑なコードを特定する場合にのみ、本当に役立ちます。問題の領域を特定したら、経験豊富なプログラマーは、実際の複雑さ (つまり、コードを理解するのを難しくする種類のもの) をより適切に判断し、その複雑さが必要かどうか、または目前の問題に固有のものであるかどうかを判断します。

于 2013-04-08T09:23:09.070 に答える
1

コード B の循環的複雑度は 1です。コードを通過する可能性のあるパスは 1 つだけです。

循環的複雑度は、可能な実行パスの数を測定します (これは、ソフトウェア システムのテストとサイズの見積もりに役立ちます)。しかし、ほとんどの人は、後者には正確ではなく、役に立たないと言うでしょう。

コード A の循環的複雑度は 4 です。コードはループに入る場合もループに入らない場合もあり (ループを抜けるのと同じ) (2 つの可能なパス)、可能性を再び 2 倍にする 1 つの「if ステートメント」があります。

乾杯。

これ以上の説明は必要ですか?

于 2013-04-08T09:22:05.347 に答える