Javaプロジェクトで未使用/デッドコードを見つける方法


Answers

合理的にうまく動作するEclipseプラグインは、 Unused Code Detectorです。

これは、プロジェクト全体または特定のファイルを処理し、未使用/デッドコードのさまざまな方法を表示するだけでなく、可視性の変更(つまり、保護される可能性のあるパブリックメソッドまたはプライベート)を示します。

Question

大規模なJavaプロジェクトで未使用/デッドコードを見つけるためにどのツールを使用しますか? 当社の製品は数年間開発されており、もはや使用されていないコードを手動で検出することは非常に困難になっています。 ただし、できるだけ多くの未使用コードを削除しようとします。

一般的な戦略/テクニック(特定のツール以外)の提案も評価されます。

編集:すでにコードカバレッジツール(Clover、IntelliJ)を使用していますが、これらはほとんど役に立ちません。 デッドコードにはまだユニットテストがあり、カバーされているように表示されます。 私は理想的なツールは、それに応じて他のほとんどコードを持っていないコードのクラスターを識別し、マニュアル検査を行うことができると思います。




テストカバレッジツールを使用してコードベースを計測し、テストではなくアプリケーション自体を実行します。

EmmaEclemmaは、コードの任意の実行に対してどのクラスが実行されているかについての良い割合のレポートを提供します。




IntelliJには未使用のコードを検出するコード解析ツールがあります。 できるだけ多くのフィールド/メソッド/クラスを非公開にしてください。これは未使用のメソッド/フィールド/クラスをさらに表示します

私はまた、コード量を減らす方法として重複コードを見つけることを試みるでしょう。

私の最後の提案は、もしあなたがコードを簡単にするオープンソースコードを見つけることです。




EMMAなどのユーザーカバレッジツール。 しかし、それは静的ツールではありません(つまり、実際には回帰テストを通じてアプリケーションを実行する必要があります)

それでもEMMAは非常に便利です。




DCDはIDEのプラグインではありませんが、antまたはスタンドアロンから実行できます。 これは静的ツールのように見え、 PMDとFindBugsでできないものを実行できます 。 やってみます。

PSプロジェクトは今や死んでいるようです。 今PMDプラグインがありますが、私はそれを使用しませんでした。




私はCloverカバレッジツールを見つけました。このツールは、使用されているコードと使用されていないコードを強調表示します。 Google CodePro Analyticsとは異なり、Webアプリケーションでも動作します(私の経験によれば、私はGoogle CodeProについて間違いかもしれません)。

私が気づいた唯一の欠点は、Javaインターフェイスを考慮しないことです。




理論的には、未使用のコードを確定的に見つけることはできません。 これは数学的な証明です(これはもっと一般的な定理の特殊なケースです)。 好奇心が強い場合は、Halting Problemを参照してください。

これは、Javaコードでさまざまな形で現れます。

  • ユーザ入力、設定ファイル、データベースエントリなどに基づいてクラスをロードする。
  • 外部コードを読み込む。
  • オブジェクトツリーを第三者図書館に渡す。

つまり、私はIDEA IntelliJを自分のIDEとして使用し、モジュール、未使用メソッド、未使用メンバー、未使用クラスなどの間のfindign依存関係のための広範な分析ツールを使用しています。パブリックメソッドはより広範な分析を必要とする。




私はProGuardがここで言及されていないことにProGuardている。 これは、最も成熟した製品の一つです。

ProGuardは、無料のJavaクラスファイル圧縮ツール、オプティマイザ、難読化ツール、および事前検証ツールです。 未使用のクラス、フィールド、メソッド、および属性を検出して削除します。 バイトコードを最適化し、未使用の命令を削除します。 短い無意味な名前を使用して、残りのクラス、フィールド、およびメソッドの名前を変更します。 最後に、Java 6またはJava Micro Editionの処理済みコードを事前に検証します。

ProGuardの用途は次のとおりです。

  • よりコンパクトなコードの作成、より小さなコードアーカイブ、より速いネットワーク間の転送、より高速なローディング、小さなメモリフットプリント。
  • プログラムやライブラリをリバースエンジニアリングすることを難しくしています。
  • デッドコードをリストアップするので、ソースコードから削除することができます。
  • Java 6以上の既存のクラスファイルのターゲットを絞って事前検証し、より高速なクラスロードを最大限に活用します。






  • FindBugsはこのようなことに優れています。
  • PMD(Project Mess Detector)は、使用可能な別のツールです。

しかし、どちらもワークスペースで使用されていないパブリック静的メソッドを見つけることはできません。 そのようなツールを知っている人は、私に知らせてください。






Links