- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/課題提出についての注意事項 へ行く。
提出方法 †
課題はCプログラムのファイルとして、ToraNetのライブラリーで提出してください。
ファイル名は、以下のようにします。
- 課題であることを表すアルファベット小文字のk
- 授業回数(2桁、第1週の場合は01)
- 課題番号(1桁)
- 学籍番号(下4桁、学籍番号EP15001の場合は5001)
- 拡張子 .c
たとえば、学籍番号EP15001の学生が、第1週の課題1を提出するとき、ファイル名は k0115001.c となります。
課題の位置付け †
この授業の課題は、中部大学履修要項第5項「試験」に規定されている平常授業時に課せられるレポートとして扱います。
不正行為 †
この授業においては、以下のような行為を不正行為とします。
- 他人が作成したプログラムを電子的に複製し、それをそのまま、または、一部変更して自分のプログラムとして提出する行為
- 他人が作成したプログラムを見てほぼ同一のプログラムを作成し、自分のプログラムとして提出する行為
- 他人の指示に従って他人が作成したプログラムとほぼ同じものを作成し、自分のプログラムとして提出する行為
- 不正行為を行う可能性がある人に自分のプログラムを見せる行為
- 不正行為を行う可能性がある人に自分が作成したプログラムの作り方を教える行為
- 正しくコンパイルできないことを知りながら提出期限を守るためにプログラムを提出する行為
- 上記の行為であることが疑われる行為
- 教員の指示に従わない行為
ただし、以下のプログラムは「他人が作成したプログラム」から除外します。
- 教員が作成して授業中に示したプログラム
- この授業で指定されている教科書に掲載されているプログラム
不正行為の懲戒 †
不正行為を行ったものには、以下のいずれかの処罰を行います。
- 当該課題を0点とする
- 当該課題を0点とし、期末試験から減点する
- この授業の単位を認定しない
- 学科に報告し、この授業の単位を認定しない
- 教務支援課に報告し、この授業と同じ学期の単位をすべて認定しない
- 教務支援課に報告し、無期停学または退学
コピー隠蔽テクニック †
以下のテクニックは、コピーしたことがばれないように隠蔽するためのものとしてよく用いられます。
- 変数名、関数名、定数の値、出力される文字列などを変える
- 空白、タブ、改行を挿入する、削除する
- 変数宣言の順序を変える
ですから、これらの違いしかないものは、同じものとみなされます。
コピー検出ソフトウェア †
これらのコピー隠蔽テクニックに対して、コピーされたプログラムを検出するソフトウェアが開発され、公開されています。
ある課題について、学生から提出されたプログラムをこのJPlagに入力したところ、全体の約7割の組み合わせでは一致度が0%と判定されました。 一致度が0%でないプログラム、つまり、似ていると判定された組み合わせでも、ほとんどは30-60%の一致率でした。 最も高い一致率は95.8%でした。
一致率95.8%と判定されたプログラムについては、実際に二つのプログラムを確認し、コピーと判断しました。
簡単な課題では他の人のプログラムを見ないで作っても一致率が100%になりますので、そのような課題には適用しません。
この授業では、一致率が0%のプログラムを除いた上で、一致率が統計的有意に高いものはコピーの疑いがあると判断します。
コピー検出に関する研究 †
コピーを検出する技術については、かなり前から研究されています。 たとえば、日本語で読めるものとしては、次のようなものがあります。
- コードクローン検出技術の展開. 神谷年洋, 肥後芳樹, 吉田則裕. コンピュータソフトウェア, Vol. 28, No. 3, pp. 29-42 (2011)
- コーディングスタイルの特徴量とソースコード盗用との関係の分析. 武田隆之, 牛窓朋義, 山内寛己, 門田暁人, 松本健一. 情報処理学会研究報告, Vol. 2010, No. 8, pp. 1-8 (2010)
- ソースコード流用のコードクローンメトリクスに基づく検出手法. 岡原聖, 真鍋雄貴, 山内寛己, 門田暁人, 松本健一. 電子情報通信学会技術研究報告, Vol. 109, No. 307, pp. 73-78 (2009)
- コードクローン検出法. 井上克郎, 神谷年洋, 楠本真二. コンピュータソフトウェア, Vol. 18, No. 5, pp. 529-536 (2001)
プロのプログラマーがコピーして隠蔽したとしても、それを検出する技術として開発されていますので、プログラムを理解していない人がコピーして隠蔽した程度ではすぐに見つかってしまいます。
コピーと判定されない、疑われないために †
自分が作ったプログラムを他の人に渡さない、見せない †
あなたがコピーしなくても、渡した相手、見せた相手がコピーしたら、あなたもコピー行為に加担したとみなされます。
他の人に答を教えてしまうと、その人が自分で考える機会を奪ってしまいます。 その結果として、その人はコピーで済ませた部分がきちんと理解できないまま授業が進んでしまい、最終的には、単位が取れない、留年する、卒業できない、就職できない、就職してから困るということになり兼ねません。
まだ自分で作っていないうちは、他の人が作ったプログラムを見ない †
課題の内容が理解できていないと、できたプログラムを見せてもらっても、コピーにならないように真似することはとても難しいです。 それができるくらいなら、自分で課題のプログラムを作ることができるでしょう。
また、友達はできたと言っていても、そのプログラムが間違っていることがあります。 間違っているところまで真似すると、コピーしたことがすぐにわかってしまいます。
まだプログラムを作っていない人と一緒にプログラムを作らない †
二人で協力しながら一つのプログラムを作っても、どちらかしか一人しか提出できません。
二種類のプログラムが作れないなら、協力してプログラムを作るべきではありません。
考え方を教えてもらう(教える) †
課題プログラムの作り方を全部を教えてもらう(教える)と、結果としてほぼ同一のプログラムになってしまいます。
したがって、教えてもらう(教える)のは、考え方や参考にしたサンプル・プログラムだけにしておきましょう。
課題ができた人に自分が作ったプログラムを見てもらう †
自分が作ったプログラムがうまく動かないとき、どこが間違っているのかをできた人に見てもらうことは問題ありません。
まだ自分のプログラムを作っていない人に見てもらうと、相談しながらプログラムを作ることになったり、見てもらった人が自分のプログラムを真似してしまうので、まだ自分のプログラムを作っていない人に見てもらう(見せる)のは止めましょう。
コピーしない †
コピーする人の中には、自分のコピーは見つからないという変な自信を持っている人が多いです。
このため、一度コピーが見つからずに済むと、その後もコピー行為を繰り返す傾向があります。
ところが、一度目は見つからなかっとしてしても、繰り返していると見つかる可能性が高くなります。 一回ごとに見つかる可能性が [math]p[/math] のとき、[math]k[/math] 回のうち少なくとも一回で見つかる可能性は [math]1 - (1 - p)^k[/math]、[math]p = 0.1[/math] だとしても [math]k = 7[/math] で [math]1 - (1 - p)^k = 0.5217[/math] になります。
後でコピーが見つかると、過去にさかのぼって注意深く徹底的に調べられ、以前にもコピーしていたことが発覚し、取り返しがつかなくなります。
また、いつもコピーをしない人がコピーをすると、それまでに提出したプログラムとコーディング・スタイルが違うので、コピーであることが簡単にわかってしまいます。
つまり、コピー行為を重ねる人も、コピー行為をあまりしない人も、結局は見つかってしまいます。