• 検索結果がありません。

IPSJ SIG Technical Report Vol.2019-CE-148 No /2/ Research and development of automated evaluation system of programming exercises 1. 2

N/A
N/A
Protected

Academic year: 2021

シェア "IPSJ SIG Technical Report Vol.2019-CE-148 No /2/ Research and development of automated evaluation system of programming exercises 1. 2"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング演習課題の自動評価システムの研究・開発

西墻 諒

1

高野 辰之

2

小濱 隆司

3

宮川 治

3 概要:プログラミングへの関心が高まり,プログラミングの学習者が増加してきている.演習課題として 提出されたプログラムファイルには,コンパイルエラーが残っているものが存在する場合がある.学習者 が発生させたエラーの原因を発見し,適切なアドバイスを与えることが求められるが,これを全て人力で 行うことは大変な労力となる.プログラミング学習者の増加に伴い,教授者の負担はより一層増していく ことが予想される.そのため,コンパイルエラーが存在するプログラムファイルを評価し,エラーの原因 を発見するシステムを開発した.本システムは課題として提出されたプログラムファイルに含まれるコン パイルエラーの原因を発見し,教授者にわかりやすい形で提示する.初学者が陥りがちなエラーを調査す る実験を行なった.初学者が記述したプログラムファイルを実際に本システムで評価することで,本シス テムが持っている性能を調査した.

Research and development of automated evaluation system of

programming exercises

1.

はじめに

経済産業省が2016年に行なったIT人材の最新動向と将 来推計に関する調査結果[1]では,近い将来にIT人材は不 足するとされ,IT人材の確保は重要な課題としている. IT業界は昨今注目されることが増えてきた.パソコン やスマートフォンの普及などから,ITはより身近で,便利 なものとして認識され始めている.そのため,IT業界で働 くことを志望する人数は今後増えていくと予想される.将 来IT人材として活躍するためにはプログラミングを実際 の業務で活用するために,プログラミング技術を習得する 必要がある. また,2020年度より小学校におけるプログラミング教育 が必修化される.これにより,プログラミングはより身近 なものとして捉えられるようになることが予想される.こ れまでのIT業界への注目に加えて,このプログラミング 教育の必修化はさらなるIT人材の志望者の増加に繋がる 1 東京電機大学大学院 情報環境学研究科

Graduate School of Information Environment, Tokyo Denki University

2 関東学院大学 理工学部

College of Science and Engineering, Kanto Gakuin Univer-sity

3 東京電機大学 情報環境学部

School of Information Environment, Tokyo Denki University

ことが期待できる.今後増加していくIT人材を志す学習 者たちに対して,プログラミング言語の初期教育を支援す ることが重要である. プログラミング教育の場において,教授者が演習課題を 与え,初学者はその課題を解き,提出することがある.そ の時,プログラミング初学者はコンパイルエラーを含んだ ままのプログラムファイルを提出することがある.これは, 一人でエラーの原因を発見・解決することが出来なかった ためだと推測される. そのため,教授者は提出されたプログラムファイルに対 してフィードバックを与える必要がある.しかし,フィー ドバックのために大量のプログラミング演習課題をひとつ ひとつ確認し,エラーの原因を見つけ出すことは大変な労 力が必要になる.これはIT人材志望者の増加などを要因 としたプログラミング学習者の増加に伴い,今後より顕著 になっていくと思われる.教授者の人数を増やすことで対 応することは可能であるが,対応する人の力量によってエ ラーの原因の発見にかかる時間が異なる場合がある. そこで,本研究ではプログラミング言語を学習する初学 者を支援するために,初学者が課題として提出した,コン パイルエラーを含んだプログラムファイルを自動で評価 し、エラーの原因を発見するシステムを開発する. このシステムを利用することで,提出されたプログラム

(2)

ファイルに存在する,エラーの原因を見つけ出すときに指 標となる追加情報を得ることができる.それにより,教授 者はフィードバックの内容を考えることに注力でき.エ ラー原因の発見にかかる時間を減らすことができる.初学 者の学習の支援がよりスムーズになることが期待される.

2.

関連研究

プログラミング教育における採点の自動化や,学習者へ のアドバイスを図るシステムは活発に研究・開発が行われ ている. 田上らが開発したシステム[2]はC言語を対象とした課 題の自動採点システムである.このシステムは,初級者向 け課題は入出力の対応のみで評価しており,中級者向け課 題はメモリの動的確保/解放も考慮している.本研究は,間 違っている点を発見し,これの原因を見つけ出すというも のであり,採点を自動化するものではない.課題としての 正誤判定を行う点と,コンパイルエラーの原因を発見する という点で異なる. 服部らが開発したコンパイラ[3]は初学者にも易しいア ドバイスを呈示するものである.従来のコンパイラから得 られる静的なエラーメッセージは初学者にとって不親切で あるとして,コンパイルの回数によって段階的にわかりや すいメッセージを呈示している.このコンパイラを授業中 に活用することで,TA(Teaching Assistant)の不足などの 問題を解決できるとしている.本研究は教授者を支援する ものであり,学習者にメッセージを与えることはしないた め,段階的にメッセージをわかりやすくすることはない. 学習者に対してエラー修正のヒントを与える点と,享受者 に対してエラー発見のヒントを与える点で異なる. 松澤ら[4]のようにビジュアルプログラミング言語から テキスト型の言語への移行を支援する研究も存在している. 彼らの研究は一定の効果をあげており,プログラミング必 修化に伴いその価値は上昇していくと思われる.しかしな がら,実験の対象は全てビジュアルプログラミング言語を 経験したことがある者であり,経験がない必修化以前の学 習者にとって効果的であるかは不明である.そのため,テ キスト型言語のみに対して支援を行う環境が必要であると いえる.

3.

対象

本稿において,研究の対象とする初学者とは,プログラ ミング時に発生するエラーを自力で修正することができ ない者と定義する.エラーには修正が容易なものから難解 なものまで様々ある.ここでの初学者が自力で修正できな いエラーとしてサポートするエラーは,コンパイルエラー である.実行時エラーや,仕様通りに動作しないといった ものは初学者でなくとも修正が困難である場合がある.ま た,実行時エラーよりも先にコンパイルエラーを修正する 表1 対象とするJavaの文法や概念

Table 1 Target of Java grammar and concept

名称 例

クラスの宣言 public class MyClass{...} 変数の宣言 ,初期化 String str = ”文字”;

メソッドの宣言 public void method(int i){ ... } 代入 number = 123; メソッド呼び出し System.out.println(”メッセージ”); 固定長配列 String[] strs ={”a”, ”b”, ”c”}; インスタンス生成 new String(); 算術 1 + 2;,5 / 10; 数値比較 1 < 2;,4 == 2; 論理演算 true && false if,else文 if(...){...}else{...}

for文 for(int i = 0; i < 3; i++){...} import文 import java.util.Random; 実装(実現) class MyList implements List{...} 継承 class MyList2 extends MyList{...}

1 システム利用の流れ

Fig. 1 System using flow

必要があるため,コンパイルエラーを修正する力を養うこ とが優先される. 対象とするプログラミング言語はJavaである.バージョ ンは8を対象とする.また,本研究において評価するプロ グラムファイルの内容は,表 1に示される文法のみで構成 されるものとする.

4.

システム概要

本システムは,プログラミング初学者が発生させている コンパイルエラーの発生原因を発見する.この発生原因を 教授者が活用し,初学者の支援を行う. 本稿におけるコンパイルエラーの発生原因とは,そこを 正しく修正することでコンパイルが通るようになる点の ことを指す.学習者の理解度などは関係なく,プログラム ファイル上に存在する問題点である. 本システムが対象とするエラーはコンパイルエラーであ る.実行時に出力される内容が課題と合っていないといっ たものや,実行時エラーは対象としていない. 本システムを利用する流れを図 1に示す.初学者から提 出されたプログラムファイルを自動で評価し,システムが

(3)

2 ソースコードの形式的導出の例

Fig. 2 example of skeleton coding

エラー原因を発見,教授者へ提示することで教授者の負担 を軽減する. 本システムにプログラムファイルが提出されると,シス テムは提出されたファイルを元にエラーの原因を発見する. 発見したエラーの原因はXML形式に整形されるため,教 授者や他のシステムが受け入れやすい. 本システムは初学者がプログラムファイルを投稿するた めの機能や,発見したエラーの原因を教授者に伝えるため の機能を持たない.与えられたプログラムファイルに含ま れるコンパイルエラーの原因を発見するものであり,これ は他のシステムへの組み込みや連携を容易にするためであ る.既存のファイル提出システム等に組み込むことによっ て,既存のシステムを活用しつつ新たな機能を持たせるこ とができる.どのような形で初学者がプログラムファイル を提出するのか,どのように教授者へエラーの原因を提示 するかは実際の環境により異なる. 本システムのユーザーは学習者と教授者である.学習者 は何らかの手段でプログラムファイルを提出する.教授者 は学習者が提出したプログラムファイルのエラーの原因に 関わる情報を受け取る.また,教授者は本システムを講義 に活用するための必要なものを事前に登録しておく必要が ある. 本システムを利用することで,教授者がプログラムファ イルを観察する時間が短縮され,初学者に対する支援によ り多くの時間を使えるようになることが期待される.

5.

システム詳細

本システムは初学者のプログラムファイルを評価する際, その構文情報を取得,解析しいくつかの項目毎にエラーが ないかを判別している.項目は以下のようなものとなって いる. 変数を正しく使うことができているか 代入が正しく行われているか メソッド呼び出しが正しく行われているか クラス図からの形式的導出が正しく行われているか ソースコードの形式的導出とは,図 2のように,UML のクラス図から得られる情報のみをプログラムとして実装 し,コンパイルが通る状態にすることを指す. その他,インポート文や返却値の型などのチェックを行 う.各項目ごとに考えられる原因を細分化し,エラーの原 因に関する情報を生成する. 5.1 XMLの生成・活用 本システムは,提出されたプログラムファイルから,Java 言語の構文木を作成しXML形式の構文情報を取得する. XMLの生成にはJavaを使用し,生成したXMLをXQuery によって解析することで,エラーの原因を発見する. このXMLには構造情報以外に,そのノード自体の情報 も含んでいる.ノードは全部で18種類の情報を持ってい る.枝ノードと葉ノードで持つ情報は17種が共通であり, どちらも1つだけ特有の情報を持つ.本システムの開発に あたり,主に使用した情報を以下に示す. ノード名 トークンの内容(文字列) ノードのid ノードの開始行の行数 ノードの深さ トークンの種類 これらの情報は主にプログラムファイル内の位置と内容 に関する情報である.Java言語の構文に従い各ノードを辿 ることで,変数の型やスコープ情報などを取得できる. 5.2 外部ファイル等の取り扱い 本システムが初学者のプログラムファイルを評価するた めにあらかじめ登録しておく必要があるものがある.演習 課題の模範解答,外部ライブラリ,標準ライブラリの内必 要なものの3つである. 演習課題はその性質上,模範解答が存在する.提出され たプログラムファイルが,問題なく実行でき,入力と出力 の関係なども問題なく満たしている場合でも,課題で示さ れたメソッド名が一致していないなどの問題を含んでいる 可能性がある.この場合,処理そのものは問題ないが,課 題で示される仕様を満たしていないため,課題に正答して いるとはいえない.そのため,教授者は本システムに対し て模範解答となるプログラムファイルを登録する.この模 範解答は実装が正しいかどうか判定するために使われるも のではなく,必要なメソッド等が宣言されているかを確認 するために用いられる. Java言語はユーザーが独自に開発したプログラムを配布 することで使用可能とすることができる.Javaというプ ログラミング言語を扱う際には,外部から入手したプログ ラムを活用することがある.プログラミング教育の場にお いても,教授者が独自に作成したプログラムを配布するこ とがある.こういった独自のプログラムを使用する場合に は,本システムにそれらを登録しなければならない.形式 は圧縮形式であるjarファイルではなく,javaファイルと する.

(4)

また,Java言語にはデフォルトで使用することができ る様々なプログラムがある.こういったものを活用するこ とはプログラミング実践の場において非常に有効であり, プログラミング教育でも使用されている場合がある.しか し,デフォルトで使用できるプログラムを講義の場で使う 場合に,初学者にとって扱うことが難しいメソッドなど, 一部の情報をあえて隠すことがある.デフォルトで使用で きる全てを本システムで判定する対象としてしまうこと で,必要以上に情報を提示してしまい,本当に必要な情報 を見つけるために時間を要してしまう危険性がある.その ため,講義において使用されるプログラムのうち,必要な クラス,メソッド等のみを登録する. 5.3 エラー原因の発見 初学者が提出したプログラムファイルを評価し,エラー の発生原因を発見するために,提出されたプログラムファ イルや模範解答ファイルから情報を取得する.これらの情 報を組み合わせたり活用することで,エラー原因を発見し, 情報を生成する. Java言語ではコンパイルを行うと字句解析,構文解析, 意味解析という順に解析が行われる.字句解析,構文解析 の段階で発生するエラーは,Javaの文法上問題がある場合 に発生するものである.そのため,Java言語の文法を参照 しながら,注意深く観察することでエラーの原因を発見す ることは可能である.しかし,意味解析の段階では,Java の構文規則を満たしているため,一言一句ていねいにソー スコードを追跡してもエラーの原因を発見できないことが ある. 本研究では,複数のプログラムファイルに渡って確認し たり,一つのプログラムファイル全体を俯瞰して見ること が求められる場合に,初学者がよりエラー原因を見つけら れなくなり,エラーを残したままプログラムファイルを提 出すると考えた.そのため,このようなことが求められる 意味解析の段階を本研究の対象とする. 榊原らの研究[5]にて行われた実験結果として,1年生を 対象とした,エラーの数と修正時間を順位として並べたも のがある.しかし,榊原らの実験では,エラーメッセージ のみによる分類であるため,エラーの原因については言及 していない. エラーメッセージに応じたエラー原因の発見では,教授 者への有効な支援とならない場合がある.例えば,「シン ボルを見つけられません」というエラーは以下のような原 因などで発生していると考えられる. スペルミス 宣言されていないものを使用 スコープ外のものを使用 これらに対して画一的なフィードバックでは適切なヒン トとならないため,エラーメッセージではなく,提出され 表2 カテゴリ別の種別の例

Table 2 Example of categorical type

カテゴリ 種別例 文法 文法 形式的導出 クラス名,実装と継承, インスタンス変数, メソッド インポート インポート文 変数 スコープ, スペルミス,未宣言 代入 不適合な代入 演算子 不適切な項 メソッド呼出 呼び出し元,引数の数,引数の型 返却値 型の不一致 たファイルや模範解答ファイルを元にエラーの発生原因を 発見する. エラーの原因を発見するために主に使用するのは提出さ れたプログラムファイルの構文木である.模範解答のプロ グラムファイルの構文木との比較などを行う. また,エラー原因はいくつかの項目に分割し,段階的に 発見していく.最初に形式的導出が正しく行えているかを チェックする.この項目に誤りがある場合,返却値の型や メソッド名,引数の個数や型など,前提とする要素が不確 定なものとなる.続いて変数のスコープをチェックし,使 用している変数が正しく使用できることを確認する.以上 により,変数とメソッドは問題なく使うことができるとい う状況を確認した上で,メソッド呼出や代入という,実際 に変数などを使用している場面をチェックする. 5.4 教授者へ提示される情報の整形 Java言語は,コンパイルを行なった時点でエラーが判 明した場合,エラーメッセージがフィードバックとして示 される.しかし,コンパイルした際に表示されるエラー文 は一目でその原因が何であるかが明らかになるものばかり ではない.また,コンパイルしたプログラムファイルでな い,他の関連プログラムファイルが原因でエラーが発生す ることもあり,即座にエラーの原因を発見することは容易 ではない. そこで,本研究で生成するエラー原因に関する情報は, 単体,あるいはコンパイル時のエラーメッセージと合わせ て活用することで,エラー原因の発見を迅速にするもので ある. そのため,本システムを使用することで教授者が得られ る情報は,教授者にとってわかりやすい形式でなければな らない.情報はXML形式に沿って整形される.これは本 システムから得た情報が,人間がそのまま見る場合と,他 のシステムによって処理される場合を考慮したためである. エラーの原因に関する情報は行数,カテゴリ,種別,詳 細,対象の項目を持つ.行数はエラー原因が存在する行数 が入る.カテゴリは変数,メソッド呼出,代入,形式的導

(5)

3 変数カテゴリの詳細の内容

Table 3 Details of variable category

種別 詳細の内容 スコープ [行数]の[変数名]は宣言される前の段階で使 用されています [行数]の[変数名]は他のメソッド内でのみ宣 言されています [行数]の[変数名]はスコープの範囲から外れ ています スペルミス [行数]の[変数名]は大文字・小文字を打ち間 違えている可能性があります [行数]の[変数名]は打ち間違いの可能性があ ります 未宣言 [行数]の[変数名]はどこにも宣言されていま せん 図3 本システムが提供する情報の形式例

Fig. 3 Example format of information provided by this system

出のいずれかが入る.カテゴリの内容によって,種別に入 る内容は異なる.カテゴリ毎の種別の内容は表2の通りで ある. 詳細の内容は,エラー原因の発見のために取得した行数 や変数名,スコープ範囲といったものを活用し,より詳細 にエラーの原因を記述した文章である.変数のカテゴリに おける詳細の内容は表3の通りである.対象には,エラー の発生原因としてシステムが発見したものが入る. 本システムによって取得できる情報は,図 3のような XML形式である.

6.

実験

本研究にて開発しているシステムを改良するため,また 現状の性能を確認するために,初学者がプログラミング中, どういった原因でエラーを発生させているのか調査する実 験を実施した. 6.1 目的 本実験の目的は大きく分けて二つある. 初学者が発生させるコンパイルエラーの原因の調査 本システムの性能の調査 初学者が多く発生させたり,修正に時間を要するコンパ イルエラーは教授者も多く目にすることになる.また,初 学者は想定していないような原因でコンパイルエラーを発 生させる可能性がある.そのため,頻出するコンパイルエ ラーや,想定していないために対応することができないコ 図4 設問2のクラス図,API仕様,動作確認用プログラム

Fig. 4 Q2 class diagram, API, test source code

ンパイルエラーについて調査する.また,現状で発見でき るエラー,発見できないエラーを知るために,本システム が持つ性能を調査する. これらの調査結果を分析し,本システムを改良するため の指針とする. 6.2 概要 実験は東京電機大学情報環境学部の3年次生15名と4年 次生13名を対象に行なった.当学部の2年次生前期推奨 の講義であるコンピュータプログラミングBの期末テスト を参考にテストを作成した.実験対象者は既にコンピュー タプログラミングBを履修していることを考慮し,多少難 しくなるように作成したテストを実施した.ソースコード を記述するにあたって講義の内容を越える知識を必要とす る問題は作成していない.講義の内容を覚えていれば解く ことができる範囲の問題となっている. ログを取得するためのプログラムを保存したUSBメモ リを学生に配布し,USBメモリ上に課題ファイルを保存し てもらった.あるファイルをコンパイルした時の時刻と, その時点のファイル内容,コンパイルメッセージをログと して取得した.

(6)

4 エラーの分類と基準及び具体例

Table 4 Error classification and criteria and specific examples

エラーの分類 基準の例 具体例

文法 Javaの文法上認められないモノ int page = Count = noteBook.getPageCount();

変数 宣言していない変数を使用

既に宣言されている変数名でもう一度宣言 int number = 3; int number = 5;

メソッド 存在しないメソッド名を使用 呼び出し元クラスに無いメソッドを使用 this.undefinedMethod(); 型 代入できない型を代入 返却値の期待値と検出値の相違 int number = ”2”; タイピング レーベンシュタイン距離1の間違い Strin s = ”note”; クラス 作成していないクラスを使用 Nothing object;

形式的導出 形式的導出時の過不足,誤り public class NoteBook implements Note{...} その他 import文の不足

ファイル名の相違 class test{...} (Test.java)

5 学年別課題終了時間と人数の推移

Fig. 5 Challenge end time and number of people by grade level

6.3 テスト形式 実験で行なったテストは4つの設問で構成されている. 設問1は初歩の問題として,問題文とクラス図のみが示さ れている.設問1を除いた各設問には問題文,クラス図, API仕様,動作確認用プログラム,動作結果が示されてい る.実際に設問2で使用したクラス図,API仕様,動作確 認用プログラムを図4に示す. このテストは,クラス図を元にソースコードの形式的導 出を行い,API仕様に基づいてプログラムを実装し,動作 確認を行うという流れを繰り返す. テストの題材は本と本棚であり,現実のモノをプログラ ム上で表現するという形をとった. 6.4 結果 テスト中に行われたコンパイルは3年次生が平均38回, 4年次生が平均31回であった.また,コンパイル時にエ ラーが発生していた割合は3年次生が51%,4年次生が 35%となっていた. 3年次生と4年次生の間で,コンパイル時にエラーが出 た割合には差があった.また,3年次生,4年次生の課題 終了時間と人数の推移を図5に示す.この課題終了時間と は課題の提出時間ではなく,ファイルに変更を加えた最後 の時間を指す. 二つのグラフを見比べると,3年次生はテスト終了間近 まで,プログラムを記述している人数が多く,4年次生は 余裕を持ってテストを終わらせている者が多いことがわ かる. これらの結果から,3年次生と4年次生の間には何らか の差があると考えられる.4年次生は比較的エラーも少な く,課題を終わらせる時間も早い. この結果から,4年次生と比較し,3年次生のほうがよ りプログラミングを習熟していないといえる.初学者の支 援を目的とするため,4年次生よりも初学者に近しい3年 次生15名の結果を詳しく見ていく. 6.5 分析 実験の対象者のうち,最後の設問4に全く手をつけるこ とができなかった学生が3名おり,全員が3年次生である. この3名は提出すべきプログラムファイルを一部提出でき なかったとして,課題未完了者と呼称する.その他の3年 次生12名は,正答か否かに関わらず,全ての提出物を提 出することができたとして,課題完了者と呼称する. 課題未完了者3名は,それ以前の設問のエラーを自力で 修正することができなかったため,最後の設問に取り掛か ることができなかったと推測される.そのため,この3名 は初学者に分類することができるといえる. こういった課題未完了者たちを含めた3年次生15名の ログを元に,エラーの発生原因を分類した.エラーは文法, 変数,メソッド,型,タイピング,クラス,形式的導出, その他の8項目に分類した.エラーの分類における基準と 具体的なミスの例を表 4に示す. コンパイル時に示されるエラー1個につき,8項目のい ずれかに1つとしてカウントした.しかし,文法エラーは 一つのエラーのために以降の正しい部分が誤っていると判 定されてしまうことがある.そのため,文法エラーに関し

(7)

5 各3年次生の分類別エラーカウント数

Table 5 Number of error counts by classification of each third grader

学生の種別 文法 変数 メソッド 型 タイピング クラス 形式的導出 その他 合計 8 12 15 13 3 3 22 0 76 課題未完了者 7 17 20 7 2 0 16 0 69 3 7 2 13 10 3 8 2 48 2 0 1 1 3 0 0 0 7 1 1 0 0 2 0 1 2 7 1 4 2 3 1 2 4 2 19 7 4 2 0 2 0 1 0 16 3 6 12 3 2 0 8 3 37 課題完了者 4 0 0 0 3 0 2 2 11 6 3 0 2 10 0 4 1 26 5 12 23 1 18 0 16 1 76 0 0 2 6 8 3 1 2 22 1 5 3 0 3 3 4 0 19 6 7 9 2 21 5 5 9 64 0 1 8 1 3 3 19 6 41 表6 課題完了者と未完了者のエラーカウント数の平均

Table 6 Average of the error count number of task completed persons and incomplete participants

エラーの分類 課題完了者 課題未完了者 文法 3.00 6.00 変数 3.58 12.0 メソッド 5.16 12.3 型 1.58 11.0 タイピング 6.33 5.00 クラス 1.33 2.00 形式的導出 5.41 15.3 その他 2.33 0.66 ては,エラーの個数とカウント数が一致していない場合が ある. 3年次生15名の,各項目数のカウント数を表5に示す. また,エラーのカウント数の平均は表6の通りである. ほとんどの項目において,課題未完了者がより多くのエ ラーを出している場合が多いことがわかる. この課題未完了者3名と課題完了者12名の間に差異が あることを確認するために,表5の合計の列を用いたウェ ルチのT検定を行なった.第一群として課題未完了者3名 のエラー個数,第二群として課題完了者12名のエラー個 数を入力した.有意水準は0.05とした.帰無仮説と対立 仮説は以下の通りである. 帰無仮説-課題未完了者と課題完了者のエラー個数に 有意差はない 対立仮説-課題未完了者と課題完了者のエラー個数に 有意差がある このT検定の結果,p値は0.022であった.有意水準0.05 を満たしたため,帰無仮説は棄却される. 課題未完了者と課題完了者の間には,エラーの個数に有 意な差があることがわかった. 6.6 考察 課題完了者と未完了者の間にはエラーの個数に有意な差 があることから,初学者と分類しうる課題未完了者はコン パイル時に多くエラーを発生させている.プログラミング を学習し始めたばかりの学習者を支援するという観点で は,実行時エラーや仕様と異なる動作に対する支援よりも 前に,コンパイルをちゃんと行うことができるように支援 することが先決である. 表5を見ると,課題未完了者3名の合計が課題完了者12 名の合計を上回る項目は型の1つだけであった.他の項目 との関連性は不明であるが,型というものの理解が不足し ているためにエラーが多く発生しているのではないかと推 測される. また,今回行った実験は3年次生と4年次生を対象とし てものであり,彼らが本当に初学者と呼ぶべき学習到達度 であるかという点は疑問が残る.しかしながら3年次生で あっても,型の理解が不足しているという可能性が示唆さ れている.1年次生といった初学者でも型の理解が難しい ということは考えられる. 実 際 の 課 題 未 完 了 者 の ロ グ を 観 察 す る と , pages.get(0).getNote() と い っ た ,メ ソ ッ ド を 二 つ 以 上繋げて呼び出そうとしている場合に,エラーの修正が上 手くいっていないことが多いように見受けられた.メソッ ドを複数繋げることにより,どの段階でどういう型へ変 わっているのかを掴めなくなってしまっていると推測され る.あるいはメソッド呼び出しそのものが初学者にとって 難しいということも考えられる. また,課題完了者の特定の1名に関しては,それぞれの

(8)

7 本システムが示してしまう偽陽性と偽陰性

Table 7 False positive and False negative in my system

種別 内容 偽陽性 配列宣言時に,変数名に[]をつけている 型パラメータの省略記法を用いている 偽陰性 インターフェースのメソッドにブロック部がある 到達不可能な文が存在している プログラムファイルを1つずつコンパイルするという段 階的な手法を取らず,各設問の最後に対象プログラムファ イルをまとめてコンパイルをするという手法をとってい た.この者は他の課題完了者と異なり,設問4のプログラ ムファイルに手をつけることができていたがコンパイルを しておらず,設問4が正しくできていたかを確認していな いことがわかる.コンパイルをどのタイミングで行うかに よって,課題の進行に影響を及ぼす可能性がある. 6.7 システム性能調査 本実験にて取得した初学者のプログラミング過程におけ るプログラムファイルを用いて,本システムの性能を調査 した.本システムが最低限動作することを確認するため に,模範解答のプログラムファイルを対象としてチェック させた.この結果,実行時にエラーを起こすことはなく, 正常に動作が終了した. 対象としたプログラムファイルは,3年次生15名の履歴 として保存したプログラムファイル全てである. 本システムは段階を経てチェックを進めていく.チェッ クに問題がなければ次の段階のチェックに進む.文法,形 式的導出,インポート文,スコープの順に判定していき, スコープに問題がなければ,代入,演算,メソッド呼出, 返却値をチェックする. このシステム性能調査の結果を,偽陽性と偽陰性に着目 して観察した.偽陽性は,コンパイルエラーはないが,シ ステムが問題ありと判定してしまったものである.偽陰性 は,コンパイルエラーがあるにも関わらず,システムが問 題なしと判定してしまったものである. システム性能調査によっていくつかの偽陽性と偽陰性を 発見した.それらのうち,主なものを表7に示す. また,存在しないクラスを使おうとする,ファイル名そ のものが間違っているといったことを原因とするエラーを 発見できなかった.これらは本システムが提出されたプロ グラムファイルの中身を評価するものであるため,本シス テムの対象外であると判断した. その他のエラー発生については正しく発見することがで きた.しかし,教授者が素早くエラーの原因を発見できる ようなメッセージを生成できているかは不明である.

7.

おわりに

提出されるプログラムファイルの解析を行うことで,自 動で評価し,エラーの原因を発見するシステムを開発して いる.本システムは変数,代入,メソッド呼び出しなどの 項目ごとに判定を行い,推測されるエラーの原因をいくつ かの種別に分ける.エラーが発生している行数,エラーの 種類,ミスの内容,エラーの原因を提示することで教授者 がエラーを見つけることではなく,フィードバックを考え ることに注力できる. 3,4年次生を対象に実験を行い,コーディング途中の 内容を取得した.この実験で,3年次生の課題未完了者と か課題完了者の間にはエラーの個数に有意差があることが わかった.また,型に関する理解が不足しているためにエ ラーが多くなっている可能性が示唆された. 実験では,課題未完了者はエラーを自力で修正できず, 途中で実験のテスト時間が終了となった.エラーの原因を 素早く発見することが,つまずいたままになってしまって いる学習者に対して迅速なサポートを行うための助けと なる. 本システムによって,教授者が学習者に対してサポート を行うときにかかる負担の軽減が期待される.

8.

今後の展望

対応できるエラーの原因をより幅広くし,より詳細な情 報を取得できるようにすることで.実際の実験データでの 具体的なエラー原因や,想定されるエラーなどに対応して いるが,不足している部分の開発を進めることが求めら れる. また,本稿での実験は3年次生と4年次生を対象に行っ たが,1年次生などの,より初学者に近い段階にある学習 者を対象に実験を行い,より実践に即したデータを集める 必要がある. 参考文献 [1] IT 人 材 の 最 新 動 向 と 将 来 推 計 に 関 す る 調 査 結 果   商 務 情 報 政 策 局 情 報 処 理 振 興 課 2016 http://www.meti.go.jp/policy/it_policy/jinzai/ 27FY/ITjinzai_report_summary.pdf (閲覧日2018/8/14) [2] 比較的大きなプログラミング課題のための自動採点シス テム 田上恒大・阿部公輝 情報処理学会研究報告コン ピュータと教育(CE)2006 Vol.16 pp.135-140 [3] 教育指向Javaコンパイラの試作 服部峻・山崎正貴・亀 田弘之 データ工学と情報マネジメントに関するフォーラ ム(DEIM) 2010 [4] ビジュアル-Java相互変換によるシームレスな言語移行を 指向したプログラミング学習環境の提案と評価 松澤 芳 昭・保井 元・杉浦 学・酒井 三四郎 情報処理学会論文誌  2014 Vol.55 No.1 pp.57-71 [5] プログラミング導入教育におけるコンパイルエラー修正時 間の分析 榊原康友・松澤芳昭・酒井三四郎 情報処理学 会第74回全国大会講演論文集2012 pp.809-810

図 1 システム利用の流れ Fig. 1 System using flow
図 2 ソースコードの形式的導出の例 Fig. 2 example of skeleton coding
表 3 変数カテゴリの詳細の内容 Table 3 Details of variable category
表 4 エラーの分類と基準及び具体例
+3

参照

関連したドキュメント

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな

つまり、p 型の語が p 型の語を修飾するという関係になっている。しかし、p 型の語同士の Merge

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から

□ ゼミに関することですが、ゼ ミシンポの説明ではプレゼ ンの練習を主にするとのこ とで、教授もプレゼンの練習

 次に、羽の模様も見てみますと、これは粒粒で丸い 模様 (図 3-1) があり、ここには三重の円 (図 3-2) が あります。またここは、 斜めの線

これも、行政にしかできないようなことではあるかと思うのですが、公共インフラに

従って、こ こでは「嬉 しい」と「 楽しい」の 間にも差が あると考え られる。こ のような差 は語を区別 するために 決しておざ