私は、以前のプログラマーがいたるところでコードをコピーして貼り付けていたプロジェクトにいます。これらのコードは実際には同一(または非常に類似)であり、1つにリファクタリングされている可能性があります。
私はこれらのコードを手動でリファクタリングすることに数え切れないほどの時間を費やしてきましたが、もっと良い方法があるに違いないと思います。いくつかは、ごく簡単な静的メソッドであり、祖先クラスに移動できた可能性があります(代わりに、以前のジュニアプログラマーによってコピーペーストされていました)。
これを検出してレポート/推奨を提供できるコード分析ツールはありますか?できれば、フリー/オープンソースのツールを好みます。
次のツールを使用しています。
どちらのツールもコード重複検出をサポートしています。しかし、どちらにも、コードをリファクタリングする方法をアドバイスする機能がありません。
JetBrains IntelliJ IDEA Ultimateは、コード複製サポートを備えた優れた静的コード分析を備えていますが、無料ではありません。
Duplicate Code Tools に関するWikipediaの記事に記載されているほとんどのツールは、Javaを含む多くの異なる言語での重複を検出します。
SonarQubeは重複したコードを検出できますが、それらを排除することについての推奨はしません。それは無料です-デフォルトの設定では字句的に同一のクローンしか検出できません
Simian またはPMDの [〜#〜] cpd [〜#〜] のいずれか。前者はより幅広い言語セットをサポートしますが、商用プロジェクトでは無料ではありません。
http://checkstyle.sourceforge.net/ は重複の検索をサポートしています
私たちの SD Java CloneDR を参照してください。これは、大規模なシステムで正確でニアミスの重複コードを検出するためのツールですJavaシステム。
CloneDRは、空白の変更、改行、コメントの挿入の削除、定数または識別子の変更、さらには多くの場合、1つのステートメントを別のステートメントまたはステートメントのブロックに置き換える場合でも、コードのクローンを検出します。
これは、クローンの各セットが見つかる場所、個々のクローン、共有の共通性を持つクローンの抽象化、および抽象化のパラメーター化を示して、各クローンインスタンスが抽象化からどのように派生できるかを示します。
ほとんどのJavaシステムでは10〜20%のクローンが見つかります。