web-dev-qa-db-ja.com

同様のコード検出器

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

現在、非常に簡単なシステムがあり、大量の偽陽性があり、真の陽性は簡単にそれらに埋もれてしまいます。

私の要件は:

  • 適度に少量の誤検知
  • 良好な検出率(そう、これらは互いに反している)
  • 理想的には、単一の値よりも複雑な出力
  • 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;

16
Šimon Tóth

過去に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

18
Throwback1986

コンピューターサイエンスの用語での問題は、ソースコードの盗用の検出として示される場合があります。ドブス博士に関するこの記事を読むことから始めるのがよいでしょう: Detecting Source-Code Plagiarism 。ソースコードの盗作を検出するためのアルゴリズムがリストされています。

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

6
Yavar

[〜#〜] pmd [〜#〜] からコピーして貼り付けて検出することができます

3
Kirill

JPLAG( https://github.com/jplag/jplag )を使用してコードの類似性をチェックし、学生がJavaとテキストファイルで動作することを比較します。同じコード構造と変数Substitutionをチェックするのに十分です。

1
Pierre Jean

duplo を試すことができます。それは一般的な行を見つけます。空白の変更を無視する機能はいくつかありますが、名前が変更された変数を含むコードは検出されないため、盗用を検出する際のヘルプよりもクリーンアップ支援です。

1

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

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

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

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

gitlabで利用可能


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

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

楽しいライブグラフィックがいくつかあるので、彼らが最初の課題を提出した後、学部生のクラスに見せることは役に立ちました。最初の課題には常に高い類似性があったため、それをライブで実証しても害はありません(提出名は匿名化されています)。

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

何も起こりませんでした、そしてそれらの学生は彼らがどれほど近くに来たか決してしませんでした。

0
Jefferey Cave