0

私は、Apache ant (バージョン 1.1 から 1.6) の循環的複雑度を見つける必要があるプロジェクトに取り組んでいます。この目的で jar ファイルを使用するように依頼されました。いくつかのツール (Xdepend 試用版と Cyvis ) を使用して、結果を確認しました。次に、Ant Ver1.6 のソース コードからの結果で結果を検証しようとしました。ソースを分析するために、Netbeans プラグインを使用し、いくつかのメソッドの CC を手動で見つけました。

私が見つけたのは、多くの場合、jar ファイルからの CC はほぼ同じであるということでしたが、いくつかの場合は大きな相違がありました。そのようなメソッドの 1 つを調べたところ、try および catch ブロックがほとんど含まれていないことがわかりました。私の質問は次のとおりです。

  1. Java コンパイラは、CC 値に大きな影響を与える可能性のある最適化 (ループの巻き戻しなど) を実行しますか? このような分析に jar ファイルを使用することをお勧めしますか?
  2. try および catch ブロックに特定の問題がありますか?その場合、他の分析方法を検討できますか?
  3. そのような分析のためのより良い (より正確な) ツールはありますか?

このトピックに関するあなたの経験を親切に共有してください。前もって感謝します。

乾杯

4

2 に答える 2

2

サイクロマティックのような複雑さの指標の目的は、コードベースを理解するプログラマーの能力に影響を与えるため、プログラムの構造を測定することです。たとえば、それを維持します。プログラマーはコードをソース レベルで見るため、ソース コードの複雑さの尺度が本当に重要です。

バイトコード ファイルを分析して得られる測定値が、通常のソース コードの測定値と異なる場合、それらは価値がなく、その考えを放棄する必要があります。

(バイトコード ファイルの CC 測定値が異なっていても驚かないでしょう。一方で、コンパイラはコードを再編成して、より単純に見えるようにすることができます。たとえば、ループをアンロールすることによってです。他方では、コンパイラは複雑な外観を生成する必要があるかもしれません単純な言語構造のバイトコード シーケンスは、単純にバイトコードで表現できるものに制限があるためです。)

于 2010-01-14T09:50:42.770 に答える
1

これはあなたの質問に対する完全な答えではありません..

Java コンパイラは、他の優れたコンパイラと同様に多くの最適化を実行します。これらの一部には、ループ不変コード モーション、共通部分式の削除、強度削減、変数割り当てが含まれます。

しかし、Javaホットスポット は Java バイトコード実行エンジンであり、実行時にバイトコードを動的にコンパイルして最適化します。

したがって、src コード CC をバイト コード CC に歪める要因はたくさんありますが、これは、CC を改善することが価値のない仕事ではないという意味ではありません。src コードの CC 評価は、保守可能なクリーンなコードに不可欠です。

于 2010-01-14T09:44:29.990 に答える