卒業研究「C言語初心者教育のための空欄補充問題の生成方法」についての記事です。
当研究ではプログラミング演習問題を自動生成、自動採点する方法を確率して教員の労力削減を目指します。
状況把握
情報科では、大半の教授が当番制で「プログラミング演習」という授業を担当するのですが、この科目は労力的な負担が結構かかる授業なので毎回の準備が大変です。
重い授業だと言われる理由はそれなりにあるのですが主にこの2つが要因と言われてます。
- 各回のプログラミング演習問題の作成 (各回3個作成、これを計14回)
- 各回のプログラミング演習問題の採点 (受講生が100人は居るので3×14×100=4200個を採点)
自分が所属している研究室の教授に聞いた話では、
- 演習問題のうち4割程度は例年と同じ問題を使い回し
- 採点に時間が掛かるので、問題作成はほどほどにして採点に時間を割きたい
ということでした。
現状の運用体制だとかなり問題があります。
寄せる軸を決める
このテーマには作成と採点という2つの問題がありますが、採点の方が明らかに時間の掛かる作業であることが分かります。
そのため、「採点に掛かる労力を削減する方法」を重点的に固めてから「作成方法を採点方法に合わせる」方が考えやすそうです。
まずは採点の方法を考えることにします。
各回での採点の流れ
何が大変なのかっていうことですが、約4200個の演習問題を数人で採点しなければならないことです。
採点に関しては自動採点に持っていった方が良さそうです。
自動採点にする場合、必要なものは以下の2つです。
- 演習問題の解答コード(.cファイル)
- 解答コードの実行結果(.txtファイル)
プログラミング演習では、上記の2つは受講生が提出物として提出してくれますが、実行結果の方は鵜吞みにしてはいけません. . .
(ねつ造していることが結構あったりします)
そのため、採点では解答コードだけ回収してLinux内でfor文を組み、その中に全員の解答コードを突っ込んで実行することで新たな実行結果ファイルを生成しています。

既存の提出システムでは以下のように分類されます。
フォルダ1 : 解答コード
フォルダ2 : 解答コードの実行結果
フォルダ3 : 解答コードの採点結果
また、[解答コード, 実行結果]のペアが判別できるように学籍番号をファイル名にします。
フォルダ2は前述のことがあるためLinux内で生成したファイルにすり替えています。
そのため、「フォルダ3への↓」のところで自動採点すれば良いかなという感じですね。
採点方法どうする?
一般的な自動採点方法は以下です。
- 模範解答コードの実行結果と比較して実行結果が同じなら正解、異なるなら不正解
ですが、これだけだと全く機能しません. . .
正解か不正解かというのは100点か0点しか無い状態です。実際には部分点を付ける作業があります。
また、「実行結果が同じなら正解」とは限らないです。
「入力した数字の計算結果を表示するプログラム」などでは、ある入力値では実行結果が同じでも、入力値を変えたら異なる結果になった、とかが結構あります。
では、「部分点を付けたい」「実行結果が同じでも鵜吞みにできない」という状態で、どのように自動採点すればよいでしょうか?
ここで「演習問題の作成方法」を合わせていきます。
今回はここまでです。
次回の記事では作成の段階を説明します。