特異なテキストファイルまたはテキストファイルのセットで複製または同様のテキストブロックを見つけるためのツールが必要です
-
19-09-2019 - |
質問
移動する重複または同様のCコードを関数に自動化したい。
これはLinuxの下で動作する必要があります。
解決
問題のサブセット:重複コードの検出:
試す: PMD
特に大規模なプロジェクトでは、重複するコードを見つけるのは難しい場合があります。しかし、PMDのコピー/ペースト検出器(CPD)があなたのためにそれを見つけることができます! CPDは3つの主要な化身を経験しています。
- 最初に、マイケルワイズの貪欲な弦楽器タイルアルゴリズムのバリアントを使用して書きました(私たちのバリアントはここで説明されています)
- それから、それは巣穴輪の変換を使用してブライアン・エウィンズによって完全に書き直されました
- 最後に、Karp-Rabin String Matchingアルゴリズムを使用するようにSteve Hawkinsによって書き直されました。
...
CPDは、Java、JSP、C、C ++、Fortran、PHPコードで動作することに注意してください。
他のヒント
あなたは見たいと思うでしょう Simian. 。非営利プロジェクトは無料です。次のようなものを試してみてください:
# Find all C source files and identify similarities/duplicate code.
simian -includes=**/*.c -excludes=**/*_test.c
Simian(前述の)は、これに適したツールです。私は使用しています クローンテクション 私のプロジェクトでは、うまく機能します。 CloneDeTectiveは無料なので、試してみると害はありません。
テキストの行を比較することはできないことに注意してください。この方法でコードを解析する必要があります。また、意味的に正しいが異なる名前の識別子を持つ可能性のあるセグメントを検出することもできます。
たとえば、同等の2つの関数が異なる識別子を使用する2つの関数を考えると、テキスト検索ではそれらを同一ではなく、パーサー缶と見なします。
また、C ++パーサーを書くことは、文法が与えられたとしても、些細な作業ではないことに注意してください。私は他の人のアドバイスを提案し、このためのツールを探します。また、リファクタリングツールを検索します。
見る Clonedr, 、ソースコードで正確なコピーとニアミス(コピー-Paste-Edit)クローンを見つけるためのツール。フル言語パーサーを使用して、言語構造に応じてクローンを見つけ、誤検知を最小限に抑え、コードがどのようにコメントまたはフォーマットされているかを完全にdendし、それにより真の検出を最大化します。 Clonedrは、クローンブロックが変数を変更し、ステートメンまたはコードブロックを挿入したときにクローンを見つけます。
C、C ++、COBOL、C#、JAVA、PHP、およびその他の多くのランガージュの言語フロントエンドがあります。
サンプルクローン検出レポートをWebサイトで確認できます。
https://github.com/hudayou/fib
ファイルまたはディレクトリ内の同一のコードブロックを見つけるツール。