5

Javaメソッドコードを入力として受け取り、そのようなコードのコスト関数(ループの数、ifs / elses、I / Oなど)を決定するアプローチがすでに存在するかどうかを知りたいと思います。私はミリ秒単位の正確なコストではなく、このコードが引き起こす可能性のある一般的なコストを意味します。問題は、ユーザーが作成する任意のメソッドで、そのようなメソッドのコストがいくらになるかを言うことができるようにしたいということです(もちろん、JVMなどのいくつかの特殊性は考慮していません)。

4

2 に答える 2

5

そのようなツールが存在するかどうかはわかりませんが、その実現可能性と使いやすさの両方に疑問があります。

  • 一般的な場合のそのようなツールの実現可能性については、停止問題を見てください。これは、あなたが求めているものの重要な部分であり、決定不可能であることが証明されています。

  • このようなツールの使いやすさについては、静的コード分析自体は役に立たないと思います。システムのパフォーマンスの大部分は、その使用パターン、つまり入力に依存するためです。

    実行時のベンチマークシステムでさえ簡単ではないという理由があります。同じソフトウェアが驚くほど高速な場合もあれば、驚くほど遅い場合もあります。

とはいえ、コードの複雑さを分析するためのツールはいくつかありますが、それらのメトリックは構造の複雑さに焦点を当てており、パフォーマンスよりも品質と保守性に関係しています。

于 2012-08-16T21:57:14.607 に答える
1

ループの数については、循環的複雑度メトリックを使用できます。それを計算するためのツールがあります。たとえば、JavaNCSS他のことに関しては、あなたはあなたが何に興味を持っているかを正確に決める必要があります。ソフトウェアメトリクスはたくさんあり、それらのいくつかはあなたに適しているかもしれません。そうでない場合は、自分で発明して実装することができます。たとえば、PMD(さまざまなメトリックを収集するためのもう1つの一般的なツール)を使用すると、独自のルールを作成できます。

コードのパフォーマンスを自動的に予測したい場合は、運が悪いです。理由はthkalaによって指摘され、その他にはJVMJITコンパイルとランタイム最適化が含まれます。ここでの親友は、プロファイリング、(自動化された)パフォーマンステスト、およびアルゴリズム分析です。静的分析は、文字列の連結やループ内のオブジェクトの割り当てなど、潜在的なパフォーマンスの問題を示す可能性があります。最新のIDEはこれを行うことができます。それでも、パフォーマンスは主にアルゴリズムとアーキテクチャによって決定されるため、静的分析の方法で多くの改善が得られることはほとんどありません。

于 2012-08-16T22:09:37.973 に答える