2

Sonar Metrics の複雑さのページから、次のメソッドの複雑さは 5 です。

public void process(Car myCar){          <- +1
        if(myCar.isNotMine()){               <- +1
             return;                         <- +1
        }
        car.paint("red");
        car.changeWheel();
        while(car.hasGazol() && car.getDriver().isNotStressed()){   <- +2
             car.drive();
        }
        return;
    }

これは、ツールが複雑さを計算する方法です。

複雑さを増すキーワード: if、for、while、case、catch、throw、return (メソッドの最後のステートメントではない)、&&、||、?

ifブロックとwhileブロックがメソッドの複雑さを増すのはなぜですか? メソッドの複雑さのこのメトリック計算の背後にある直感は何ですか?

4

3 に答える 3

2

これは、コードが正しいことを確認するために必要なテストの数を増やす条件が含まれているためです。

また、おそらくs はループ ( 、 )ifよりも複雑ではありません。これに関連する循環的複雑性についても読んでください。whilefor

このブログ投稿を読んでください。すべてをテストすることはできないという実際の現実と、すべてをテストするために必要な膨大な数のテストについて説明しています。

于 2013-03-06T17:41:42.597 に答える
1

多分それは McCabe によるものに基づいていCyclomatic Complexityます (少なくともそのように見えます)。
この指標は、ソフトウェア エンジニアリングの分野で広く使用されています。
これを見てください:http://en.wikipedia.org/wiki/Cyclomatic_complexity

于 2013-03-06T17:42:12.600 に答える
1

Somar は循環的複雑度を測定します。これは、ソース コード内の線形に独立したパスの数を表します。

あなたの質問に答える鍵は、1976 年 12 月に発行された Thomas McCabe の研究論文から得られます。

入口点と出口点が 1 つずつしかない構造化プログラムの循環的複雑度は、そのプログラムに含まれる決定点 (つまり、「if」ステートメントまたは条件付きループ) の数に 1 を加えた数に等しいことを示すことができます。

これはまさに、Sonar が行うことです。ループ、条件ステートメント、およびマルチパート ブール式に由来する決定ポイントを見つけ、その数を数えます。

于 2013-03-06T17:47:36.153 に答える