2012-02-10 10 views
3

私は盗作のアルゴリズムの比較をしようとしています。私は盗作に対するTEXTの比較をたくさん見つけました。C++変数と関数を難読化する方法

しかし、アルゴリズムは非常に異なります。膨大な数の変数、関数、ユーザー定義の構造を使用するアルゴリズムもあります。誰かがソースコードをコピーしている人は、変数と関数の名前を少なくとも変更します。単純なテキスト比較アルゴリズムでは、この関数と変数の違いは "違い"として数えられ、アルゴリズムは偽りに対して "false"を与えます。

私がしたいことは、C++ソースコード内のすべての変数、関数、およびユーザー定義の構造名を「一般化」することです(わかりません)。したがって、変数は、 "a"、 "b"、 "... fa(...)"、 "... fb(...)"のように命名されます。 PHPの文字列変数にC++のソースアルゴリズムを比較しています。

私は正確なソースコード比較のために他の多くのことを分析する必要があることを知っていますが、これで十分です。

答えて

1

興味深い質問です。しかしアルゴリズムの複雑さによっては、変数名が盗作を遠ざけるものになっている可能性があります。たとえば、ツリートラバーサルを実際にどのようにコードすることができますか?

数年前、コーデックのスタイルを使ってコーダーを特定することができたと思っています。つまり、空白のようなすべての小さなものを見てください。{}が置かれています。既知の情報源への積極的な一致ではなく、学生の前のスタイルへの否定的な一致のためそれを言うと、学生は学習の初期段階で非常に個人的なコーディングスタイルを開発していない可能性があります。

1つの考え方 - どのような言語が書かれているのですか?コンパイルできますか? C言語をコンパイルして実行ファイルでバイナリ比較を行うと、異なるローカル変数名を持つ同一のプログラムはまったく同じバイナリを持つでしょうか? (しかし、グローバルなvarsと関数はないでしょう)。

+0

私も改行でいくつかの余分な重要性を与えたいです、 ";"の後の改行、および中括弧の位置です。単純な初期例のように、いくつかの種類のアルゴリズムを「異なる方法」で作成するのはかなり難しいことがわかります。「2つの値の合計」です。 しかし、すべてのテキストの比較も問題です。 Webホストで実行されているため、コードをコンパイルできません。 – IPValverde

0

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

関連する問題