それぞれが大規模なコードベースを持つ2つのプロジェクトがあります。ツールを実行して、すべてのプロジェクトのすべてのファイルを調べ、プロジェクト全体のどのファイルに同様のコードがあるかを表示したいと思います。このようなものが存在するかどうかさえわかりませんが、学校にいたことを覚えています。教師は、複数の生徒のすべてのコードで実行したツールを使用して、コードがどれほど類似しているかを特定しました(詐欺師を捕まえるため)。
3 に答える
必要なのはクローン検出ツールです。これらのツールは、ファイルの任意のセット間で重複するコードを検索します。タスクでは、両方のプロジェクトのファイルを取得し、そのセット全体でクローン検出を実行します。
[OPがやりたいことを正確に実行した実際の経験に基づいて2019年を編集]。
あるプロジェクトのファイルでクローンが見つかった場合、それは他のプロジェクトのファイルで見つかったクローンに対応し、それらに共通するものが見つかりました。
両方のプロジェクトのすべてのファイルで直接クローン検出を行うことの欠点は、1つのプロジェクトから同じプロジェクトに多数のクローンが見つかることです。あなたの質問によれば、それらは、例えば誤検知など、面白くありません。
私の会社は、 CloneDRと呼ばれる商用のクローン検出器を提供しています。これは(IMHO)非常に優れた検出器であり、他の検出器では検出できないクローンを検出します(たとえば、コメントの変更、コードレイアウト、基数、変数の名前変更、コードフラグメントの挿入または削除にだまされないなど)。ただし、もう1つの非常に優れた特性があります。それは、2つのプロジェクトコードベース間でのみクローンを検出するオプションがあります。2つのプロジェクトを1つとして扱うことで得られる誤検知は発生しません。
WinMergeのようなものを考えていますか?これにより、ディレクトリツリー全体の価値のあるファイルを比較できます。
多くの編集者は、比較ツールを並べて使用しています。これらはWinMergeの組み込みバージョンが好きです。Notepad++とSublimeText2が思い浮かびます。