ライブラリコード(.net C#)のセット全体で冗長性を見つけるためのツールはありますか?
問題は、.NETライブラリがたくさんあることですが、それらには類似した/重複した「ヘルパー」または「ユーティリティ」関数がたくさんある傾向があります。コードが正確に実用的ではない場合もありますが、名前が少し異なる同様のパターンに従います。
これらの類似点を見つけて、C#ライブラリのバッチで報告できるようなツールはありますか?
ライブラリコード(.net C#)のセット全体で冗長性を見つけるためのツールはありますか?
問題は、.NETライブラリがたくさんあることですが、それらには類似した/重複した「ヘルパー」または「ユーティリティ」関数がたくさんある傾向があります。コードが正確に実用的ではない場合もありますが、名前が少し異なる同様のパターンに従います。
これらの類似点を見つけて、C#ライブラリのバッチで報告できるようなツールはありますか?
Visual Studio 11 (現在は開発者プレビューのみ) にはこの機能があります。開発者プレビューを無料でダウンロードして確認できます。
これは Code Clone Analysis と呼ばれ、コード全体を検索して類似点を探し、完全一致から推定一致までさまざまなレポートを生成します。
ここに小さな例があります。
CodeRushには Duplicate Code finder が組み込まれています。そのようなツールに予算がいくらかかるかはわかりませんが、CodeRush / Refactor の利点を見つけました! ライセンスのコストを相殺する以上のもの。
大規模なソース コード全体で重複コードの正確なブロックとニアミス ブロックを見つけるには、 CloneDRツールを参照してください。
CloneDR は、コンパイラ品質のフロント エンドを使用してソース テキストを解析し、コードを表すコンパイラ データ構造 (「AST」) を構築し、ツリーを照合することによって機能します。これは、レイアウト、改行、またはコメントにもかかわらず、重複を見つけることができることを意味します。マッチング プロセスでは、パラメーター化できるという意味で類似しているコード ブロックを見つけることができます。変数の名前が変更された、またはステートメントやコードのブロックが置き換えられた類似のブロックを簡単に見つけることができます。
C# を含む多くの言語のバージョンがあります。サンプルの C# クローン検出レポートは、Web サイトにあります。
CloneDR は「開発プレビュー」ではありません。私は 1998 年にこれをうまく行う方法についての最初の論文を書き、それ以来 CloneDR を開発してきました。抽象構文木を使用したクローン検出を参照してください。(Microsoft Clone 検出器は、ツリー ベースではなく、トークン ベースのクローン検出を行い、私見ですが、あまり良くない回答を生成します。実際、そのようなトークン スタイルの検出器が、私が論文を書いた理由です)。