上記のディスカッショントピックから派生しました.
課題の提出機能に,簡単な課題のチェック機能の追加を考えます.
いわゆるコピペ問題を完全にチェックするのは大仕事ですが,
- 単にコピーして提出されたもの
を見付ける機能であれば簡単に実装できます.moddata/assignment/id(数字)の下のファイルの情報を利用して,疑わしいものをリストアップするだけで良いでしょう.ただ,ある程度,先を見越して仕様を考えた方が発展性がありますので,少しだけ考えを整理しようと思います.
- レベル1:内容が完全に一致する提出物が複数存在する
- レベル2:内容が酷似した提出物が複数存在する
- レベル3:内容の一部が類似した提出物が複数存在する
- レベル4:内容が外部情報からのコピー&ペーストである可能性のある提出物が存在する
レベル4以外は同時に提出された学生の提出物を全てチェックして比較すれば良いでしょう.レベル4に関しては高度な技術を利用する必要がありそうです.
提出された課題のファイルの種類は,
- プログラム等のソースリスト
- テキストファイルの自由記述文書
- Word等のリッチな形式の自由記述文書
- WordやExcelなどのバイナリデータ
- 画像や音声などのマルチメディアデータ
これくらいでしょうか?
レベル1:内容が完全に一致する提出物が複数存在する
タイムスタンプはサーバにアップロードされた時点のものであるとすればチェックに使えません.したがって,ファイルサイズでまず1次チェック,ついで候補についてMD5などのハッシュ値を調べる.
レベル2:内容が酷似した提出物が複数存在する
レベル3:内容の一部が類似した提出物が複数存在する
少し難しい.対象となる提出物の種類(テキストか,バイナリか,ソースリストかなどなど)によって,類似性を見つけ出す/許容する点が異なります.拙作のKoreDareno.exeのように対象をソースリスト(C,C++,N88-BASIC)に限定して,コメントの違いは無視する,文字列の中身は無視する,などのようにアルゴリズムの違いまで踏み込むかどうかは教師次第でしょう.
いっそのこと,diff等を使って「相違が何行以下だったら怪しい」としても良いのかも知れません.ただし,提出物の数が多い場合にはチェックを行なう組み合わせの数が膨大になりますので,サーバの負荷を無視できません.よく検討する必要があります.
レベル4:内容が外部情報からのコピー&ペーストである可能性のある提出物が存在する
全くどうしたら良いのか見当がつきません.
研究レベルの成果を利用するのか,実用的な技術(市販品含む)を利用するのか.既に,類似性を発見するのに便利な道具が開発されているならば,それを利用するのが労力,信頼性の観点から好ましいでしょう.情報を求めます.