2012-06-06 6 views
14

類似性のソースコードを比較できるツールを検索します。類似のコード検出器

現在のところ、偽陽性が非常に多く、本物の陽性が容易に埋められるシステムは非常に些細なものです。

私の要件は、次のとおりです。偽陽性の

  • 合理的に少量
  • ただ一つの値よりも複雑な出力を備えた理想的に良好な検出率(ええ、これらは互いにうとしている)
  • C(C99)およびC++のために使用可能な(C++ 03と最適にC++ 11)
  • はまだ共ため
  • 使用可能を維持し

    混乱を避けるため、次の2つのコードスニペットが同一であり、そのように検出されなければならない:

    互いに

  • 非インタラクティブモードで使用可能な

EDITに対する2つのソースファイルをmparing for (int i = 0; i < 10; i++) { bla; }

int i; while (i < 10) { bla; i++; }

ここに同じ:

int x = 10; y = x + 5;

int a = 10; y = a + 5;

+1

diffはお客様のニーズを満たしていますか? –

+1

@HighPerformanceMark LOL、そうではありません。 –

+2

構文よりも2つのコードの意味的類似性を比較するツールが必要なように見えます。私はこれが解決されていない問題であり、SOがあなたにとって満足のいく解決策を見つけるのに苦労すると思われます。書かれているように、あなたのオリジナルの質問は、私を惑わしたように多くの読者を誤解させると私は思う。私はまたあなたが興味を持っている比較の種類を明確に述べるためにそれを完全に書き直すべきだと思います。 –

答えて

15

私は過去にMOSSを使用しました:http://theory.stanford.edu/~aiken/moss/盗用したコードを検出します。意味的なレベルで動作するので、上記の状況を検出します。このツールは言語を意識しているため、コメントは解析では考慮されず、変数名や関数名の単純な検索と置換によって変更されたコードを検出するのに長い道のりになります。

メモ:私は数年前に大学院でコンピューターサイエンスを教えていた時にこのツールを使用しましたが、インターネットから取り除かれたコードの検出にはすばらしく機能しました。ここでは同様のアプリケーションのよく文書アカウントです:http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

あなたは「対策ソフトの類似性を」Googleの場合は、さらにいくつかの便利なヒットを見つける必要があります。 http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

+0

fie1012.orgへのリンクはもはや有効ではないようです。代わりのリンクを提供できますか? – Eric

+1

これを試してください:http://www3.nd.edu/~kwb/nsf-ufe/1110.pdf – Throwback1986

3

PMDからコピーペースト検出器とすることができますか?

6

コンピュータサイエンス用語の問題は、ソースコード剽窃の検出と記述されている可能性があります。良いスタートは博士ドブス:Detecting Source-Code Plagiarismでこの記事を読むことです。ソースコード中の剽窃を検出するアルゴリズムをリストアップしています。

注:何を求めていることは確かに厳しいコンピューティングの問題です:)

1

あなたがduploを試みることができます。それは共通の行を見つけるでしょう。それは空白の変更を無視する能力を持ちますが、名前が変更された変数を持つコードは検出しません。したがって、盗作を検出する際の助けよりもクリーンアップの助けになります。

1

私は、JPLAG(https://github.com/jplag/jplag)を使用して、コードの類似性をチェックし、生徒をJavaとテキストファイルで比較します。 同じコード構造と変数Substitutionをチェックするのがうまくいきます。