17

ソースコードの類似性を比較できるツールを探しています。

現在、非常に些細なシステムがあり、大量の誤検知があり、実際の検知は簡単にそれらに埋もれてしまう可能性があります。

私の要件は次のとおりです。

  • 適度に少量の誤検知
  • 良好な検出率(ええ、これらは互いに対立しています)
  • 理想的には、単一の値よりも複雑な出力を使用します
  • C(C99)およびC ++(C++03および最適にはC++11)で使用可能
  • まだ維持されている
  • 2つのソースファイルを相互に比較するために使用可能
  • 非インタラクティブモードで使用可能

編集:

混乱を避けるために、次の2つのコードスニペットは同一であり、そのように検出する必要があります。

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;

4

6 に答える 6

18

私は過去にMOSSを使用しました:http ://theory.stanford.edu/~aiken/moss/盗用されたコードを検出するため。セマンティックレベルで機能するため、上記で示した状況を検出します。このツールは言語に対応しているため、分析ではコメントは考慮されません。また、変数名や関数名の単純な検索と置換によって変更されたコードを検出するのに大いに役立ちます。

注:数年前、大学院でコンピューターサイエンスを教えていたときにこのツールを使用しましたが、インターネットからヤンクされたコードを検出するのに非常に役立ちました。これは、同様のアプリケーションの十分に文書化されたアカウントです:http: //fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

「ソフトウェアの類似性を測定する」をグーグルで検索すると、さらにいくつかの有用なヒットが見つかるはずです: http ://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

于 2012-06-06T10:43:07.697 に答える
6

コンピュータサイエンスの用語でのあなたの問題は、ソースコードの盗用検出として述べられているかもしれません。良いスタートは、ドブス博士に関するこの記事を読むことです:ソースコードの盗用の検出。ソースコード内の盗用を検出するためのアルゴリズムが一覧表示されます。

注:あなたが求めているのは、確かに難しいコンピューティングの問題です:)

于 2012-06-06T10:37:45.493 に答える
3

PMDからのコピー-貼り付け-検出器である可能性がありますか?

于 2012-06-06T10:33:56.453 に答える
2

JPLAG(https://github.com/jplag/jplag)を使用して、コードの類似性を確認し、Javaファイルとテキストファイルでの学生の作業を比較し始めました。同じコード構造と変数の置換をチェックするのに適しています。

于 2017-03-24T07:41:16.150 に答える
1

あなたはデュプロを試すことができます。共通の線が見つかります。空白の変更を無視する機能はありますが、変数の名前が変更されたコードは検出されないため、盗用を検出する際のヘルプというよりも、クリーンアップの補助になります。

于 2012-06-06T11:03:46.493 に答える
1

(応答は遅れますが、質問の関連性がなくなることはありません)

私は同様の問題に直面し、Webベースのアプリケーションを作成しました。

https://jefferey-cave.gitlab.io/miss/

私はjavascriptとpythonで教えていたので、それらはそれが扱う言語です。C / C ++(現在)は処理しません。JavascriptインタープリターがCをどのように処理するかを知りたいと思います。

gitlabで利用可能


私が直面した問題は、国境を越えて学生コードを提出することは違法であるため(MOSSは禁止されていました)、ローカルで実行されるものが必要でした。実装は純粋なクライアント側ブラウザです。

興味深いことに、それは独自の方法であなたの「低誤検知」基準を満たすかもしれないと思います。割り当ての間には常にある程度の類似性がありますが、独自の手法を使用して、「疑わしいと思われる」ポイントを特定します。

教室でのグループダイナミクス(誰が誰と一緒に仕事をしているのか、誰と一緒に勉強しているのか)を判断するのに役立つことがわかりました。

楽しいライブグラフィックがいくつかあるので、最初の課題を提出した後、学部生のクラスに見せることは役に立ちました。最初の割り当てには常に高度な類似性があったため、ライブでデモンストレーションしても害はありません(提出名は匿名化されています)。

私はいつも、私が(ひどく露骨に)だましていると思った生徒の話をします。彼らの作品は、他の学生の非常にユニークな答えと驚くべき類似性を示しました。生徒の作業をクラスの他の部分と比較しても、クラスの他の部分と比較して有意な類似性は示されませんでした。それは「興味深い」のしきい値をはるかに下回っていました。これは、提出物のより深い調査につながりました...チュートリアルがあり、スタイルが透けて見えたことがわかりましたが、作業はユニークでした。

何も起こらなかった、そしてそれらの学生は彼らがどれほど近づいたかを決して知らなかった。

于 2019-07-26T11:26:48.970 に答える