生徒のコードの類似度をチェックし、どう作られたかを確認する

クラスにプログラミング課題を出したとき、監督者がまず問うのは、その提出物が本人のものかどうかです。課題の「類似度」タブは、2つのより小さな問いに材料で答えます。どのプログラムどうしが同じ構造か、そして1人のコードが、試行錯誤して進むときの増え方をしているかどうかです。

これは話し合いのための材料であり、結論ではありません。小さな課題への誠実な答えが似ることはありますし、生徒にそう書いた正当な理由があることもあります。タブはこのことを最初に伝え、表現は常に「類似している」で「コピーした」とは書かず、ここにある内容は生徒には表示されません。

似ているプログラムを探す

コードの課題を開き、「類似度」を選んで「チェックを実行」を押します。各生徒が保存したコピーを、ほかの全員のものと、文面ではなくプログラムの構造で比較するため、変数名の変更、字下げの違い、コメントの書き換えでは共通の構造は隠れません。先生が用意した初期コードと、大きなクラスの大半が共通して持つ部分は先に除外されるので、初期コードを共有しているだけでクラスが似て見えることはありません。

組み合わせは似ている順に並び、短いほうのプログラムのうち、どれだけがもう一方に含まれるかが示されます。組み合わせを開くと、2つのコピーが並んで表示され、一致する行が両方で色付きになります。担当している学校内のほかのモジュールでの過去の同じ課題とも比較できますが、課題名で探すため、名前を変えて作ったコピーは見つからないことがあります。

対応しているのは Python、Java、Go、C、C++、C#、OCaml、Ruby、PHP、Rust、Kotlin、JavaScript、TypeScript、Bash、Web ページ、SQL です。クイズ、文章、ラボ、グループで取り組む課題は対象外で、グループの共有コピー1つは複数人の取り組みではないためです。タブが見えるのは、そのモジュールを担当する人、学校の管理者、システム管理者だけです。

1人のコードがどう作られたか

課題では貼り付けが無効になっているため、残る問いは、自分で作ったのか、完成したものを書き写したのかということです。生徒の横の「どう作られた?」を押します。コピーが保存されたバージョン(自動保存のたびに1つ)を読み取り、最初の保存の大きさ、最大の保存、末尾に追加しただけの保存と何かを戻した保存の割合、最長の中断、入力速度を、ファイルサイズの推移グラフとともに示します。

そのうえで、次の5つのどれに近いかを理由とともに示します。判断するには少なすぎる、ほぼ丸ごと現れた、少数の大きな変更で現れた、試して戻す動きなく順番に書き写された、試して変更して戻しながら積み上げられた。末尾への追加だけで一定に増え、ほとんど何も削除されないコードは、完成したプログラムを書き写したときの形です。短く単純なプログラムが正直にそう見えることもあるため、これはルールではなく読み取りです。いずれも AI は必要ありません。

AI を使う場合

学校で AI が有効で、クレジットが残っていれば、「AI にも尋ねる」で、同じ数値と最大の追加部分についてモデルの見立てが加わります。モデルには名前、アドレス、学校が渡されず、自然な作り方とコピーの形の両方が伝えられ、判断できないときは「はっきりしない」と答えるよう求められます。見えたことと、生徒の作業の進め方について尋ねられる質問を最大3つ返します。英国でホストされたモデルで動き、採点支援と同じく先生ご自身のクレジットから使われます。これは判断材料となる助言であり、何も変更しません。

よくある質問

生徒に知らされますか?
これによっては知らされません。タブの内容は生徒に表示されず、生徒の記録にも書かれません。記録されるのは先生ご自身の操作で、管理ログに残ります。チェックの実行、2つのコピーを並べて開いたこと、どう作られたかを尋ねたことです。
不正をしたと教えてくれますか?
いいえ、そうしようともしません。何が似ているか、作業がどう進んだか、何を尋ねればよいかを示します。一定の速さで入力して何も削除しない生徒は、自分で作った場合も書き写した場合も同じに見えるため、答えは本人との対話になります。
どこまで遡れますか?
保存されたバージョンのある限りです。それぞれはストレージが保持しており、長い履歴は最大の変更点と残りの均等な抽出から読み取るため、最も古い保存は見えないことがあります。