大規模な Java プロジェクトで使用されていない (「デッド」) メソッドを見つける方法を考えていますが、実装を導き出すには助けが必要です。
- AspectJ を使用して、プロジェクト パッケージ内のすべてのメソッドに「前」のアスペクトを追加します。アスペクトは、メソッドが実行されたことを単に記録 (?) します。
- プロジェクト パッケージ内のすべてのクラス/メソッドのリストをコンパイルします (おそらくサービス ロケーター/リフレクションを使用します)。
- アドバイスされたコードは、完全な回帰テストを受けます。理想的には、これをしばらく本番環境に置きたいと思います (適切にパフォーマンスの高いソリューションが見つかった場合)。
- 実行されたメソッド (ステップ 1) と使用可能なメソッド (ステップ 2) のリストが比較され、呼び出されなかったすべてのメソッド (つまり、デッド コード) の包括的なリストが生成されます。
ステップ 2 と 4 はオフラインで実行できるため、実際にはステップ 1 のサポートのみを求めています。
具体的には、メソッドが実行されたときにどのように記録できますか? 何らかの種類のメモリ内ストレージを試みると、すぐに OutOfMemoryErrors に遭遇することになると思います。同様に、データをデータベースやファイル システムに保存すると、呼び出しの量が原因でパフォーマンスに大きな問題が発生する可能性があります。誰かが似たようなことをしたことがありますか?アドバイス/提案をいただければ幸いです。