関東地区

教育システム情報学会 2019年度学生研究発表会

プログラム動作理解を表出する課題における誤答生成手法の検討
Consideration of methods for generating wrong answers of tasks
to express learners’ understanding of program behavior
稲葉 航平，國宗 永佳
Kohei INABA, Hisayoshi KUNIMUNE
千葉工業大学 情報科学部
Faculty of Information and Computer Science, Chiba Institute of Technology
Email: s1632018jm@s.chibakoudai.jp, kunimune@net.it-chiba.ac.jp
あらまし：筆者らは，プログラム動作理解を表出する課題で起こりうる誤答の生成手法を検討した．本研
究では，繰り返し終了後の処理を繰り返し内で実行する誤りと繰り返し内の変数 i を足す処理で 1 を足す
誤りの 2 種類の誤答の生成手法について検討と実装を行った．
キーワード：プログラミング基本概念，動作理解，誤答生成，自動生成

1.

動作を，左側の表（以下，解答欄）に記入する．問題プログラムと解答欄の各行は対応しており，問題プログラムの中で変数の値に変化が生じる場合，対応するセルにその値（不定の場合はハイフン）を記入する．条件式を含む行では，セルの背景に条件式の真偽に応じた色を付ける（真が青，偽が赤）．問題
プログラムの同じ行が複数回実行された場合，解答欄の上下に示された実行回数を示す値（以下，繰り返し数）に対応する，右側の列に解答を記入する．
AT では，トレース課題の解答を XML 形式で保持している．リスト 1 に例を示す．1〜3 行目は，問題プログラムで宣言された変数を示す．4〜6 行目は条件式が真（背景色が青），7〜9 行目は条件式が偽（背景色が赤）であるセルの位置を示す．10 行目は解答欄の行数，11 行目は解答欄の繰り返し数を示す．12〜14 行目は，値が記入されたセルの位置とその値を示す．

はじめにプログラミング学習において，プログラミングの基本概念となる分岐や反復などの制御構造や変数などのデータ構造を理解することは重要である．したがって，プログラミング教育では，これらの基本概念について，学習者の理解状況を把握し適切な指導を行うことが重要である．
小西らは，学習者のプログラム動作理解を表出する課題（以下，トレース課題）における正答・誤答生成機能を提案した(1)．この機能は，トレース課題の正答や，いくつかの典型的な誤りを含む誤答を，ビジュアルプログラミング環境 AT(2)上で生成する．学
習者の解答と生成された誤答を比較することで，誤答の種類を判別でき，誤った原因を推定できる．
本研究では，この正答・誤答生成機能に対して，現在対応していない種類の誤答を生成可能にする．

2.

関連研究

AT は，教授者によるトレース課題の出題や学習者による解答の提出を行う機能をもつ．また，教授者が登録した解答と学習者が提出した解答の一致，不一致を提示する採点支援機能を備えている．しかし，正答や起こり得る誤答を事前に登録することが教授者の負担となっていた．そこで小西ら，この負担の軽減と，学習者の誤りの要因を推定することを目的にトレース課題の正答と誤答を自動生成し登録する機能を開発した(1)．本研究では，小西らが未実装の誤答を生成する機能を開発する．
東本らはトレース課題と同様の形式の課題を用いた学習支援システムを開発した(3)．このシステムは，プログラムの挙動を入力すると，即時的に解答の正誤をフィードバックする．このフィードバックは，即時的に解答の誤りを学習者に気づかせ，試行錯誤を促すためのものである．一方，本研究では解答の正誤だけでなく，誤りの要因についても分析する．

3.

図 1 トレース課題の例
リスト 1 トレース課題の解答（XML 形式）の例
1234567891011121314

トレース課題の概要

トレース課題の例を図 1 に示す．学習者は，右側に示されたプログラム（以下，問題プログラム）の55<variables><variable name="a"/></variables><trueSquares><trueSquare name="[0][i][3]"/></trueSquares><falseSquares><falseSquare name="[1][i][4]"/></falseSquares><rows value="7"/><reps value="5"/><cells><cell name="[0][i][0]" value="-"/></cells>

関東地区

4.

教育システム情報学会 2019年度学生研究発表会

ラムのうち，図 2 に示された部分を抜粋したものである．1〜3 行目は正答生成プログラムと同一であるが，正答生成プログラムでは繰り返しの外にある 4行目の処理を，繰り返し末尾の分岐の中に移動することで，誤答 1-1 の生成を実現した．
同様に，誤答 1-2 の例を図 3 に，この誤答に対応する誤答生成プログラムの一部をリスト 4 に示す．
誤答 1-1 とは条件の真偽のみが異なるため，リスト
4 の 4〜5 行目のように else の中に繰り返し終了後の処理を移動することで，誤答 1-2 の生成を実現した．

正答・誤答生成機能の概要

正答・誤答生成機能は，トレース課題の正答を生成するプログラム（以下，正答生成プログラム）と誤答を生成するプログラム（以下，誤答生成プログラム）を生成する．誤答生成プログラムは，誤答 1つにつき 1 つのプログラムが生成される．
正答生成プログラムの例をリスト 2 に示す．変数cells は，セルの位置（[繰り返し数][変数名][行数]で示される）と値の対応を保持し，変数 logicalSquaresは，セルの位置と真偽の対応を保持する．repeats は繰り返し数を示す．問題プログラムの各行で実行される処理（リスト 2 の 1，5，6 行目）と各処理に対応する解答を記録する処理（変化した変数の値が 2，3，7 行目，条件式の真偽が 4 行目）が含まれる．ここでは 1 行目と 2 行目，3〜4 行目と 5 行目，6 行目と 7 行目がそれぞれ対応している．
正答生成プログラムを生成する処理の一部に，誤答を発生させるような変更を加えることで，誤答生成プログラムを生成する．
リスト 2 正答生成プログラムの例
12345675.

図 3 誤答 1-2 の例
リスト 4 誤答 1-2 の生成プログラム（抜粋）12345i = None
cells["[%s][i][2]" % (repeats)] = "-"cells["[%s][i][4]" % repeats] = "%s" % (i)logicalSquares["[%s][i][4]" % repeats] ="%s" % (( ( i % int(2) ) > int(0) ))if ( ( i % int(2) ) > int(0) ):a=(a+I)
cells["[%s][a][5]" % repeats] = "%s" % a

誤答 2 の例を図 4 に示す．赤枠で示したセルには4 が記入されるべきところ，2 が記入されている．これは，繰り返し内で変数 i の値を足す処理で，変数 iの値ではなく 1 を足すと考えたために生じた誤答であると推測した．リスト 5 は誤答 2 に対応する誤答生成プログラムのうち，図 4 に示された部分を抜粋したものである．2 行目は正答生成プログラムと同一であるが，1 行目の変数 i を 1 に置き換えることで誤答 2 の生成を実現した．

実装した誤答本研究では，先行研究(1)で実装されていない「繰り返し終了後の処理を繰り返し内で実行する誤り」（以下，誤答 1）と「繰り返し内の変数 i を足す処理で 1を足す誤り」（以下，誤答 2）について，対応する誤答生成プログラムを生成する機能を実装した．誤答
1 には，繰り返し内の末尾に存在する分岐の条件式が真の場合に起こるものと，偽の場合に起こるものがあるため，前者を誤答 1-1，後者を誤答 1-2 とよぶ．

図 4 誤答 2 の例
リスト 5 誤答 2 の生成プログラム（抜粋）126.

a=(a+1)
cells["[%s][a][5]" % repeats] = "%s" % a

まとめと今後

本研究は，トレース課題における正答・誤答生成機能に対して，小西らが未実装の誤答を生成する機能を追加した．今後これらの妥当性を評価するため，
本研究で実装した誤答が，小西らが誤答分析で集計した解答から検出されるかを実験する．

図 2 誤答 1-1 の例

リスト 3 誤答 1-1 の生成プログラム（抜粋）1234if ( ( i % int(2) ) > int(0) ):a=(a+i)cells["[%s][a][5]" % repeats] = "%s" % aelse:
cells["[%s][a][6]" % repeats] = "%s" % aif ( ( i % int(2) ) > int(0) ):a=(a+i)cells["[%s][a][5]" % repeats] = "%s" % acells["[%s][a][6]" % repeats] = "%s" % a

参考文献(1) 小西庸介，國宗永佳，山本樹，新村正明：“プログラ
ム動作理解を表出する課題における正答・誤答生成機能の開発”，信学技報，Vol.118，No.510，pp.17-22（2019）(2) 河野直，雄城遼，國宗永佳，新村正明：“ビジュアルプログラミング環境 AT：初等・中等教育への展開に向けた機能の開発”，信学技報，Vol.115，No.492，pp.3944（2016）(3) 東本崇仁，赤倉貴子：“提案するプログラムトレース
課題のための学習支援システムの開発とその実践”，
信学論 D，Vol.J101-D，No.6，pp810-819（2018）

図 1 に示したトレース課題における誤答 1-1 の例を，図 2 に示す．青枠で示したが繰り返し終了後の処理の正しい記入位置ではなく，赤枠で示したセルに記入している．これは，繰り返しの末尾に存在する分岐の条件が真のとき，繰り返し終了後の処理が実行されるという考えに基づく誤答であると推測した．リスト 3 は誤答 1-1 に対応する誤答生成プログ56