- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 授業/C言語基礎/課題提出についての注意事項 へ行く。
提出方法 †
課題はCプログラムのファイルとして、ToraNetのライブラリーで提出してください。
提出するファイル名は、課題であることを表すアルファベット小文字の k で始まる kXXYZZZZ.c とし、X、Y、Z は以下のようにします。
- X: 授業回数(0埋め2桁、第1週の場合は01)
- Y: 課題番号(1桁)
- Z: 学籍番号(下4桁、学籍番号がEP15001の場合は5001)
たとえば、学籍番号EP15001の学生が、第1週の課題1を提出するとき、ファイル名は k0115001.c となります。
すべての学生のプログラムを一括して自動的にコンパイルしますので、この命名規則に従っていないものは評価対象から外れる可能性があります。
以下の記述は2015年度の授業終了後に追加したものですが、2015年度の授業も同じ方針です。
課題の位置付け †
この授業の課題は、中部大学履修要項第5項「試験」に規定されている平常授業時に課せられるレポートとして扱います。
不正行為 †
この授業においては、以下のような行為を不正行為とします。
- 他人が作成したプログラムを電子的に複製し、それをそのまま、または、一部変更して自分のプログラムとして提出する行為
- 他人が作成したプログラムを見てほぼ同じのものを作成し、自分のプログラムとして提出する行為
- 他人の指示に従って他人が作成したプログラムとほぼ同じものを作成し、自分のプログラムとして提出する行為
- 正しくコンパイルできないことを知りながら提出期限を守ることを目的としてプログラムを提出する行為
- 上記の行為を助ける行為
- 上記の行為であることが疑われる行為
- 教員の指示に従わない行為等、大学の授業で不正行為とされている行為
ただし、以下のプログラムは「他人が作成したプログラム」から除外します。
- 教員が作成して授業中に示したプログラム
- この授業で指定されている教科書に掲載されているプログラム
また、以下の行為は不正行為ではありません。
- 考え方を教える行為、教えてもらう行為
- アルゴリズムやフローチャートを教える行為、教えてもらう行為
- 他人が作ったプログラムを見て、間違いを指摘する行為
他人のプログラムを写す行為だけでなく、自分のプログラムを写させる行為、見せる行為、渡す行為も不正行為となることに注意してください。
「他人が作ったプログラムを見て、間違いを指摘する行為」は、不正行為ではありませんが、不正行為につながりやすい行為です。 「コピーと判定されない、疑われないために」をよく読み、注意してください。
不正行為の懲戒 †
不正行為を行ったものには、以下のいずれかの処罰を行います。
- 当該課題を0点とする
- 当該課題を0点とし、期末試験から減点する
- この授業の単位を認定しない
- 学科に報告し、この授業の単位を認定しない
- 大学に報告し、この授業と同じ学期の単位をすべて認定しない
- 大学に報告し、無期停学または退学
大学に報告すると、中部大学の学則第44条および試験中不正行為に関する細則に従って懲戒され、私の一存では処罰を決めることができなくなります。
不正行為の判定 †
ほぼ同じプログラムが複数の学生から提出された場合には、不正行為の疑いがあると判断します。
ほぼ同じかどうかは、以下のようにして判定します。
コピー隠蔽テクニック †
以下のテクニックは、コピーしたことがばれないように隠蔽するためのものとしてよく用いられます。
- 変数名、関数名、マクロ名、定数の値、出力される文字列、配列の要素数などを変える
- 空白、タブ、改行を挿入する、削除する
- 変数宣言や関数宣言の場所を変える
- ブロックを追加する、削除する
- 省略可能なものを省略する、追加する
これらの違いしかないものは、同じものとみなします。 また、これらの違いしかないものは、他人のプログラムを写しただけでなく、それを隠蔽しようとした点でより悪質です。
誰が作っても同じになるような簡単な課題では、同じになっていてもかまいません。
コピー検出ソフトウェア †
これらのコピー隠蔽テクニックに対して、コピーされたプログラムを検出するソフトウェアが開発され、公開されています。
ある課題について、学生から提出されたプログラムをこのJPlagに入力したところ、全体の約7割の組み合わせでは一致度が0%と判定されました。 一致度が0%でないプログラム、つまり、似ていると判定された組み合わせでも、ほとんどは30-60%の一致率でした。 最も高い一致率は95.8%でした。
一致率95.8%と判定されたプログラムについては、実際に二つのプログラムを確認し、コピーと判断しました。
簡単な課題では他の人のプログラムを見ないで作っても一致率が100%になりますので、そのような課題には適用しません。
この授業では、提出されたプログラムから全角文字列を除去したものをJPlagで判定し、一致率が0%のプログラムを除いた上で、一致率が統計的有意に高いものはコピーの疑いがあると判断します。 たとえば、一致率が平均50%、標準偏差20%の課題において、一致率が83%を越えるプログラムは、5%有意水準の片側検定で統計的有意に一致度が高い(コピーである確率が95%より高い)ので、コピーの疑いがあると判断します。
コピー検出に関する研究 †
コピーを検出する技術については、かなり前から研究されています。 たとえば、日本語で読めるものとしては、次のようなものがあります。
- コードクローン検出技術の展開. 神谷年洋, 肥後芳樹, 吉田則裕. コンピュータソフトウェア, 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)
プロのプログラマーがコピーして隠蔽したとしても検出できるように研究、開発されていますので、自分でプログラムを作れないような人が隠蔽してもすぐに見つかってしまいます。
コピーと判定されない、疑われないために †
自分が作ったプログラムを他の人に渡さない、見せない †
あなたがコピーしなくても、プログラムを渡した相手、見せた相手がコピーしたら、あなたが不正行為を助けたとみなされます。
他の人に答を教えてしまうと、その人が自分で考える機会を奪ってしまいます。 その結果として、その人はコピーで済ませた部分をきちんと理解しないまま授業が進んでしまい、最終的には、単位が取れない、他の授業(C言語応用、プログラム演習など)についていけない、留年する、卒業できない、就職できない、就職してから困ることになる可能性があります。
つまり、自分が作ったプログラムを見せてあげることは、友達を助ける行為に見えますが、友達の人生を狂わせる可能性がある行為です。
まだ自分で作っていないうちは、他の人が作ったプログラムを見ない †
課題の内容が理解できていないと、できたプログラムを見せてもらっても、コピーにならないように真似することはとても難しいです。 それができるくらいなら、自分で課題のプログラムを作ることができるでしょう。
また、友達はできたと言っていても、そのプログラムが間違っていることがあります。 間違っているところまで真似すると、コピーしたことがすぐにわかってしまいます。
考え方、アルゴリズム、フローチャートを教えてもらう(教える) †
課題プログラムの作り方を全部を教えてもらう(教える)と、結果としてほぼ同一のプログラムになってしまいます。
したがって、教えてもらう(教える)のは、考え方、アルゴリズム、フローチャートにしましょう。
まだプログラムを作っていない人と一緒にプログラムを作らない †
二人で協力しながら一つのプログラムを作っても、どちらかしか一人しか提出できません。
ですから、二種類のプログラムが作れないなら協力してプログラムを作るべきではありません。
二人で協力しながら考えたり、アルゴリズムを書いたり、フローチャートを描くのは問題ありません。
課題ができた人に自分が作ったプログラムを見てもらう †
自分が作ったプログラムがうまく動かないとき、どこが間違っているのかをできた人に見てもらうことは問題ありません。
ただし、まだ自分のプログラムを作っていない人に見てもらうと、相談しながらプログラムを作ることになったり、見せた相手が自分でプログラム作っても真似になってしまうので、まだ自分のプログラムを作っていない人に見てもらう(見せる)のは止めましょう。
コピーしない †
コピーする人の中には、自分のコピーは見つからないという変な自信を持っている人が多いです。
このため、一度コピーが見つからずに済むと、その後もコピーを繰り返す傾向があります。
ところが、一度目は見つからなかっとしてしても、繰り返していると見つかる可能性が高くなります。 一回ごとに見つかる可能性が [math]p[/math] のとき、[math]k[/math] 回のうち少なくとも一回で見つかる可能性は [math]1 - (1 - p)^k[/math]です。
[math]p = 0.1[/math](見つかる可能性が1割)だとしても、7回やれば [math]1 - (1 - p)^k = 0.5217[/math]、見つかる可能性が半分を超えます。 [math]p = 0.5[/math](見つかる可能性が半々)だと、4回で [math]1 - (1 - p)^k = 0.9375[/math]、93%以上の確率で見つかります。 [math]p = 0.8[/math](見つかる可能性が8割)だと、たった2回で [math]1 - (1 - p)^k = 0.96[/math]、96%の確率で見つかります。
一つコピーが見つかると、過去にさかのぼって注意深く徹底的に調べられ、以前にもコピーしていたことが発覚し、取り返しがつかなくなります。
また、いつもコピーをしない人がコピーをすると、それまでに提出したプログラムとコーディング・スタイルが違うので、コピーであることが簡単にわかってしまいます。
つまり、コピーを繰り返す人も、コピーをほとんどしない人も、コピーをすると見つかってしまいます。