背景デザイン画像1 背景デザイン画像2

Portfolio

元プログラムから空欄補充問題を生成する(2)

MENU

 概要 

前回の採点で次の問題点が浮上しました。
  • 部分点を付けられない (0点と100点しか付けられない状態じゃ非常に困る)

  • [実行結果が同じ = 正解] ではない

この2つを考慮しても自動採点できそうな演習問題を考えます。

演習問題の選択

演習問題の形式は以下の3つです。
  • 白紙の状態からプログラミングする全記述型

  • プログラムからエラー構文を探す誤り訂正型

  • プログラムの空欄に適切な値を入れる空欄補充問題型

上記の3つから採点での問題を克服できそうな形式を選択します。


全記述型は、模範プログラムと相違点が多すぎて部分点を付ける作業が大変になるのでNGです。

誤り訂正型は良さそうですが分かりにくいバグを考えて置き換える必要があるので手間が掛かります。

空欄補充問題型も良さそうです。置換方法も空欄にするだけなので手間は掛かりません。


自動採点と相性が良さそうな空欄補充問題型を採用します。

[実行結果が同じ = 正解] ではない問題に対応できるのかという話は次章で説明します。

空欄補充問題の作成

空欄補充問題生成プログラムで空欄補充問題を作成しました。



パワーポイントから流用したものですが左のコードが空欄補充問題です。(右の説明文はとりあえず無視しても大丈夫です)

コードを見ると、/* □ □ □ */などの空欄が何箇所かあることが分かると思います。
この状態でなら各空欄に部分点を付けることで部分点が付けられない問題を除去することができます。

同じ行に複数の空欄がある箇所が存在しますが、「同じ行の空欄は全て同じ答えが入る」という仕組みにしています。
このようにして別解(正解となる答えが複数ある状態)を極力発生させないように調整しています。

上記仕様の空欄補充問題にすることで「空欄に入る解答が1通りしかない」状況になる場合が大半になるので「実行結果が同じ = 正解」となる場合がかなり高くなります。

空欄以外の箇所が変更されると困るため、その場合は該当ファイルを制約エラーのファイル一覧に登録して不正扱いとします。



これだけだと同じ変数名が全て空欄になったりコメント文とかが空欄にされたりするのでそこら辺も調整します。

調整1

適当に空欄を生成されても困るので絶対に空欄にしたくない構文を設定します。

この設定をすることで空欄になる箇所が全体的に的を射たものとなります。



調整2

空欄にする対象を決めます。研究では以下の3種類を空欄の対象にしています。

・変数
・数式記号(+, <, &, ||, ->, など、プログラム的意味があるもの)
・関数名

変数に関してはこのサイトが参考になるかと思います。

数式記号に関しては本レポート[付録:数式記号一覧]にて掲載している記号を対象にしています。


調整3

空欄にできる箇所を全て空欄にするわけではないため、いくつかをランダムで空欄にします。(こうしないと穴ぼこコードになります)

空欄にする対象の決定にはTF-IDFを使用しており、重要である変数・数式記号・関数名を決定してその中からランダムで空欄にする感じです。

このようにすると実行する度に異なる変数・数式記号・関数名が空欄になるので一つのプログラムから複数の演習問題を生成できます。




調整4

TF-IDFで重要だと判断した変数・数式記号・関数名を空欄にするのですが、同じ変数名・数式記号・関数名が複数ある場合はそのうちの1箇所をランダムで選んで空欄にするようにします。

このようにすれば実行する度に異なる箇所が空欄になりやすくなります。


上記の調整を行い生成した空欄補充問題が先ほどのパワポ画像にある空欄補充問題です。

ここまでやれば自動採点を実現できそうです。次回は自動採点を実装します。