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

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
8
0
0

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

全文

(1)Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report. プログラミング演習課題の自動評価システムの研究・開発 西墻 諒1. 高野 辰之2. 小濱 隆司3. 宮川 治3. 概要:プログラミングへの関心が高まり,プログラミングの学習者が増加してきている.演習課題として 提出されたプログラムファイルには,コンパイルエラーが残っているものが存在する場合がある.学習者 が発生させたエラーの原因を発見し,適切なアドバイスを与えることが求められるが,これを全て人力で 行うことは大変な労力となる.プログラミング学習者の増加に伴い,教授者の負担はより一層増していく ことが予想される.そのため,コンパイルエラーが存在するプログラムファイルを評価し,エラーの原因 を発見するシステムを開発した.本システムは課題として提出されたプログラムファイルに含まれるコン パイルエラーの原因を発見し,教授者にわかりやすい形で提示する.初学者が陥りがちなエラーを調査す る実験を行なった.初学者が記述したプログラムファイルを実際に本システムで評価することで,本シス テムが持っている性能を調査した.. Research and development of automated evaluation system of programming exercises. 1. はじめに 経済産業省が 2016 年に行なった IT 人材の最新動向と将 来推計に関する調査結果 [1] では,近い将来に IT 人材は不 足するとされ,IT 人材の確保は重要な課題としている.. IT 業界は昨今注目されることが増えてきた.パソコン. ことが期待できる.今後増加していく IT 人材を志す学習 者たちに対して,プログラミング言語の初期教育を支援す ることが重要である. プログラミング教育の場において,教授者が演習課題を 与え,初学者はその課題を解き,提出することがある.そ の時,プログラミング初学者はコンパイルエラーを含んだ. やスマートフォンの普及などから,IT はより身近で,便利. ままのプログラムファイルを提出することがある.これは,. なものとして認識され始めている.そのため,IT 業界で働. 一人でエラーの原因を発見・解決することが出来なかった. くことを志望する人数は今後増えていくと予想される.将. ためだと推測される.. 来 IT 人材として活躍するためにはプログラミングを実際. そのため,教授者は提出されたプログラムファイルに対. の業務で活用するために,プログラミング技術を習得する. してフィードバックを与える必要がある.しかし,フィー. 必要がある.. ドバックのために大量のプログラミング演習課題をひとつ. また,2020 年度より小学校におけるプログラミング教育. ひとつ確認し,エラーの原因を見つけ出すことは大変な労. が必修化される.これにより,プログラミングはより身近. 力が必要になる.これは IT 人材志望者の増加などを要因. なものとして捉えられるようになることが予想される.こ. としたプログラミング学習者の増加に伴い,今後より顕著. れまでの IT 業界への注目に加えて,このプログラミング. になっていくと思われる.教授者の人数を増やすことで対. 教育の必修化はさらなる IT 人材の志望者の増加に繋がる. 応することは可能であるが,対応する人の力量によってエ ラーの原因の発見にかかる時間が異なる場合がある.. 1. 2. 3. 東京電機大学大学院 情報環境学研究科 Graduate School of Information Environment, Tokyo Denki University 関東学院大学 理工学部 College of Science and Engineering, Kanto Gakuin University 東京電機大学 情報環境学部 School of Information Environment, Tokyo Denki University. c 2019 Information Processing Society of Japan ⃝. そこで,本研究ではプログラミング言語を学習する初学 者を支援するために,初学者が課題として提出した,コン パイルエラーを含んだプログラムファイルを自動で評価 し、エラーの原因を発見するシステムを開発する. このシステムを利用することで,提出されたプログラム. 1.

(2) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report. ファイルに存在する,エラーの原因を見つけ出すときに指. 表 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{...}. 2. 関連研究 プログラミング教育における採点の自動化や,学習者へ. 田上らが開発したシステム [2] は C 言語を対象とした課 題の自動採点システムである.このシステムは,初級者向 け課題は入出力の対応のみで評価しており,中級者向け課. for 文. for(int i = 0; i < 3; i++){...}. 題はメモリの動的確保/解放も考慮している.本研究は,間. import 文. import java.util.Random;. 違っている点を発見し,これの原因を見つけ出すというも. 実装 (実現). class MyList implements List{...}. のであり,採点を自動化するものではない.課題としての. 継承. class MyList2 extends MyList{...}. 正誤判定を行う点と,コンパイルエラーの原因を発見する という点で異なる. 服部らが開発したコンパイラ [3] は初学者にも易しいア ドバイスを呈示するものである.従来のコンパイラから得 られる静的なエラーメッセージは初学者にとって不親切で あるとして,コンパイルの回数によって段階的にわかりや すいメッセージを呈示している.このコンパイラを授業中 に活用することで,TA(Teaching Assistant) の不足などの 問題を解決できるとしている.本研究は教授者を支援する ものであり,学習者にメッセージを与えることはしないた め,段階的にメッセージをわかりやすくすることはない.. 図 1. システム利用の流れ. Fig. 1 System using flow. 学習者に対してエラー修正のヒントを与える点と,享受者 に対してエラー発見のヒントを与える点で異なる. 松澤ら [4] のようにビジュアルプログラミング言語から テキスト型の言語への移行を支援する研究も存在している.. 必要があるため,コンパイルエラーを修正する力を養うこ とが優先される. 対象とするプログラミング言語は Java である.バージョ. 彼らの研究は一定の効果をあげており,プログラミング必. ンは 8 を対象とする.また,本研究において評価するプロ. 修化に伴いその価値は上昇していくと思われる.しかしな. グラムファイルの内容は,表 1 に示される文法のみで構成. がら,実験の対象は全てビジュアルプログラミング言語を. されるものとする.. 経験したことがある者であり,経験がない必修化以前の学 習者にとって効果的であるかは不明である.そのため,テ キスト型言語のみに対して支援を行う環境が必要であると いえる.. 3. 対象. 4. システム概要 本システムは,プログラミング初学者が発生させている コンパイルエラーの発生原因を発見する.この発生原因を 教授者が活用し,初学者の支援を行う. 本稿におけるコンパイルエラーの発生原因とは,そこを. 本稿において,研究の対象とする初学者とは,プログラ. 正しく修正することでコンパイルが通るようになる点の. ミング時に発生するエラーを自力で修正することができ. ことを指す.学習者の理解度などは関係なく,プログラム. ない者と定義する.エラーには修正が容易なものから難解. ファイル上に存在する問題点である.. なものまで様々ある.ここでの初学者が自力で修正できな. 本システムが対象とするエラーはコンパイルエラーであ. いエラーとしてサポートするエラーは,コンパイルエラー. る.実行時に出力される内容が課題と合っていないといっ. である.実行時エラーや,仕様通りに動作しないといった. たものや,実行時エラーは対象としていない.. ものは初学者でなくとも修正が困難である場合がある.ま. 本システムを利用する流れを図 1 に示す.初学者から提. た,実行時エラーよりも先にコンパイルエラーを修正する. 出されたプログラムファイルを自動で評価し,システムが. c 2019 Information Processing Society of Japan ⃝. 2.

(3) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report. う.各項目ごとに考えられる原因を細分化し,エラーの原 因に関する情報を生成する.. 5.1 XML の生成・活用 本システムは,提出されたプログラムファイルから,Java 言語の構文木を作成し XML 形式の構文情報を取得する. 図 2 ソースコードの形式的導出の例. XML の生成には Java を使用し,生成した XML を XQuery. Fig. 2 example of skeleton coding. によって解析することで,エラーの原因を発見する. この XML には構造情報以外に,そのノード自体の情報. エラー原因を発見,教授者へ提示することで教授者の負担. も含んでいる.ノードは全部で 18 種類の情報を持ってい. を軽減する.. る.枝ノードと葉ノードで持つ情報は 17 種が共通であり,. 本システムにプログラムファイルが提出されると,シス テムは提出されたファイルを元にエラーの原因を発見する.. どちらも 1 つだけ特有の情報を持つ.本システムの開発に あたり,主に使用した情報を以下に示す.. 発見したエラーの原因は XML 形式に整形されるため,教. • ノード名. 授者や他のシステムが受け入れやすい.. • トークンの内容 (文字列). 本システムは初学者がプログラムファイルを投稿するた. • ノードの id. めの機能や,発見したエラーの原因を教授者に伝えるため. • ノードの開始行の行数. の機能を持たない.与えられたプログラムファイルに含ま. • ノードの深さ. れるコンパイルエラーの原因を発見するものであり,これ. • トークンの種類. は他のシステムへの組み込みや連携を容易にするためであ. これらの情報は主にプログラムファイル内の位置と内容. る.既存のファイル提出システム等に組み込むことによっ. に関する情報である.Java 言語の構文に従い各ノードを辿. て,既存のシステムを活用しつつ新たな機能を持たせるこ. ることで,変数の型やスコープ情報などを取得できる.. とができる.どのような形で初学者がプログラムファイル を提出するのか,どのように教授者へエラーの原因を提示 するかは実際の環境により異なる.. 5.2 外部ファイル等の取り扱い 本システムが初学者のプログラムファイルを評価するた. 本システムのユーザーは学習者と教授者である.学習者. めにあらかじめ登録しておく必要があるものがある.演習. は何らかの手段でプログラムファイルを提出する.教授者. 課題の模範解答,外部ライブラリ,標準ライブラリの内必. は学習者が提出したプログラムファイルのエラーの原因に. 要なものの 3 つである.. 関わる情報を受け取る.また,教授者は本システムを講義. 演習課題はその性質上,模範解答が存在する.提出され. に活用するための必要なものを事前に登録しておく必要が. たプログラムファイルが,問題なく実行でき,入力と出力. ある.. の関係なども問題なく満たしている場合でも,課題で示さ. 本システムを利用することで,教授者がプログラムファ. れたメソッド名が一致していないなどの問題を含んでいる. イルを観察する時間が短縮され,初学者に対する支援によ. 可能性がある.この場合,処理そのものは問題ないが,課. り多くの時間を使えるようになることが期待される.. 題で示される仕様を満たしていないため,課題に正答して. 5. システム詳細 本システムは初学者のプログラムファイルを評価する際,. いるとはいえない.そのため,教授者は本システムに対し て模範解答となるプログラムファイルを登録する.この模 範解答は実装が正しいかどうか判定するために使われるも. その構文情報を取得,解析しいくつかの項目毎にエラーが. のではなく,必要なメソッド等が宣言されているかを確認. ないかを判別している.項目は以下のようなものとなって. するために用いられる.. いる.. Java 言語はユーザーが独自に開発したプログラムを配布. • 変数を正しく使うことができているか. することで使用可能とすることができる.Java というプ. • 代入が正しく行われているか. ログラミング言語を扱う際には,外部から入手したプログ. • メソッド呼び出しが正しく行われているか. ラムを活用することがある.プログラミング教育の場にお. • クラス図からの形式的導出が正しく行われているか. いても,教授者が独自に作成したプログラムを配布するこ. ソースコードの形式的導出とは,図 2 のように,UML. とがある.こういった独自のプログラムを使用する場合に. のクラス図から得られる情報のみをプログラムとして実装. は,本システムにそれらを登録しなければならない.形式. し,コンパイルが通る状態にすることを指す.. は圧縮形式である jar ファイルではなく,java ファイルと. その他,インポート文や返却値の型などのチェックを行. c 2019 Information Processing Society of Japan ⃝. する.. 3.

(4) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report. また,Java 言語にはデフォルトで使用することができ. 表 2 カテゴリ別の種別の例. Table 2 Example of categorical type. る様々なプログラムがある.こういったものを活用するこ とはプログラミング実践の場において非常に有効であり,. カテゴリ. 種別例. プログラミング教育でも使用されている場合がある.しか. 文法. 文法. し,デフォルトで使用できるプログラムを講義の場で使う. 形式的導出. クラス名,実装と継承, インスタンス変数,. 場合に,初学者にとって扱うことが難しいメソッドなど,. メソッド インポート. インポート文. 変数. スコープ, スペルミス,未宣言. きる全てを本システムで判定する対象としてしまうこと. 代入. 不適合な代入. で,必要以上に情報を提示してしまい,本当に必要な情報. 演算子. 不適切な項. を見つけるために時間を要してしまう危険性がある.その. メソッド呼出. 呼び出し元,引数の数,引数の型. ため,講義において使用されるプログラムのうち,必要な. 返却値. 型の不一致. 一部の情報をあえて隠すことがある.デフォルトで使用で. クラス,メソッド等のみを登録する. たファイルや模範解答ファイルを元にエラーの発生原因を. 5.3 エラー原因の発見. 発見する.. 初学者が提出したプログラムファイルを評価し,エラー. エラーの原因を発見するために主に使用するのは提出さ. の発生原因を発見するために,提出されたプログラムファ. れたプログラムファイルの構文木である.模範解答のプロ. イルや模範解答ファイルから情報を取得する.これらの情. グラムファイルの構文木との比較などを行う.. 報を組み合わせたり活用することで,エラー原因を発見し, 情報を生成する.. Java 言語ではコンパイルを行うと字句解析,構文解析,. また,エラー原因はいくつかの項目に分割し,段階的に 発見していく.最初に形式的導出が正しく行えているかを チェックする.この項目に誤りがある場合,返却値の型や. 意味解析という順に解析が行われる.字句解析,構文解析. メソッド名,引数の個数や型など,前提とする要素が不確. の段階で発生するエラーは,Java の文法上問題がある場合. 定なものとなる.続いて変数のスコープをチェックし,使. に発生するものである.そのため,Java 言語の文法を参照. 用している変数が正しく使用できることを確認する.以上. しながら,注意深く観察することでエラーの原因を発見す. により,変数とメソッドは問題なく使うことができるとい. ることは可能である.しかし,意味解析の段階では,Java. う状況を確認した上で,メソッド呼出や代入という,実際. の構文規則を満たしているため,一言一句ていねいにソー. に変数などを使用している場面をチェックする.. スコードを追跡してもエラーの原因を発見できないことが ある.. 5.4 教授者へ提示される情報の整形. 本研究では,複数のプログラムファイルに渡って確認し. Java 言語は,コンパイルを行なった時点でエラーが判. たり,一つのプログラムファイル全体を俯瞰して見ること. 明した場合,エラーメッセージがフィードバックとして示. が求められる場合に,初学者がよりエラー原因を見つけら. される.しかし,コンパイルした際に表示されるエラー文. れなくなり,エラーを残したままプログラムファイルを提. は一目でその原因が何であるかが明らかになるものばかり. 出すると考えた.そのため,このようなことが求められる. ではない.また,コンパイルしたプログラムファイルでな. 意味解析の段階を本研究の対象とする.. い,他の関連プログラムファイルが原因でエラーが発生す. 榊原らの研究 [5] にて行われた実験結果として,1 年生を 対象とした,エラーの数と修正時間を順位として並べたも のがある.しかし,榊原らの実験では,エラーメッセージ. ることもあり,即座にエラーの原因を発見することは容易 ではない. そこで,本研究で生成するエラー原因に関する情報は,. のみによる分類であるため,エラーの原因については言及. 単体,あるいはコンパイル時のエラーメッセージと合わせ. していない.. て活用することで,エラー原因の発見を迅速にするもので. エラーメッセージに応じたエラー原因の発見では,教授. ある.. 者への有効な支援とならない場合がある.例えば,「シン. そのため,本システムを使用することで教授者が得られ. ボルを見つけられません」というエラーは以下のような原. る情報は,教授者にとってわかりやすい形式でなければな. 因などで発生していると考えられる.. らない.情報は XML 形式に沿って整形される.これは本. • スペルミス. システムから得た情報が,人間がそのまま見る場合と,他. • 宣言されていないものを使用. のシステムによって処理される場合を考慮したためである.. • スコープ外のものを使用. エラーの原因に関する情報は行数,カテゴリ,種別,詳. これらに対して画一的なフィードバックでは適切なヒン. 細,対象の項目を持つ.行数はエラー原因が存在する行数. トとならないため,エラーメッセージではなく,提出され. が入る.カテゴリは変数,メソッド呼出,代入,形式的導. c 2019 Information Processing Society of Japan ⃝. 4.

(5) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report 表 3. 変数カテゴリの詳細の内容. Table 3 Details of variable category 種別. 詳細の内容. スコープ. [行数] の [変数名] は宣言される前の段階で使 用されています. [行数] の [変数名] は他のメソッド内でのみ宣 言されています. [行数] の [変数名] はスコープの範囲から外れ ています スペルミス. [行数] の [変数名] は大文字・小文字を打ち間 違えている可能性があります. [行数] の [変数名] は打ち間違いの可能性があ ります 未宣言. [行数] の [変数名] はどこにも宣言されていま せん. 図 3. 本システムが提供する情報の形式例. Fig. 3 Example format of information provided by this system. 出のいずれかが入る.カテゴリの内容によって,種別に入 る内容は異なる.カテゴリ毎の種別の内容は表 2 の通りで ある. 詳細の内容は,エラー原因の発見のために取得した行数. 図 4 設問 2 のクラス図,API 仕様,動作確認用プログラム. Fig. 4 Q2 class diagram, API, test source code. や変数名,スコープ範囲といったものを活用し,より詳細 にエラーの原因を記述した文章である.変数のカテゴリに. ンパイルエラーについて調査する.また,現状で発見でき. おける詳細の内容は表 3 の通りである.対象には,エラー. るエラー,発見できないエラーを知るために,本システム. の発生原因としてシステムが発見したものが入る.. が持つ性能を調査する.. 本システムによって取得できる情報は,図 3 のような. XML 形式である.. 6. 実験 本研究にて開発しているシステムを改良するため,また. これらの調査結果を分析し,本システムを改良するため の指針とする.. 6.2 概要 実験は東京電機大学情報環境学部の 3 年次生 15 名と 4 年. 現状の性能を確認するために,初学者がプログラミング中,. 次生 13 名を対象に行なった.当学部の 2 年次生前期推奨. どういった原因でエラーを発生させているのか調査する実. の講義であるコンピュータプログラミング B の期末テスト. 験を実施した.. を参考にテストを作成した.実験対象者は既にコンピュー タプログラミング B を履修していることを考慮し,多少難. 6.1 目的. しくなるように作成したテストを実施した.ソースコード. 本実験の目的は大きく分けて二つある.. を記述するにあたって講義の内容を越える知識を必要とす. • 初学者が発生させるコンパイルエラーの原因の調査. る問題は作成していない.講義の内容を覚えていれば解く. • 本システムの性能の調査. ことができる範囲の問題となっている.. 初学者が多く発生させたり,修正に時間を要するコンパ. ログを取得するためのプログラムを保存した USB メモ. イルエラーは教授者も多く目にすることになる.また,初. リを学生に配布し,USB メモリ上に課題ファイルを保存し. 学者は想定していないような原因でコンパイルエラーを発. てもらった.あるファイルをコンパイルした時の時刻と,. 生させる可能性がある.そのため,頻出するコンパイルエ. その時点のファイル内容,コンパイルメッセージをログと. ラーや,想定していないために対応することができないコ. して取得した.. c 2019 Information Processing Society of Japan ⃝. 5.

(6) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report 表 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). の時間を指す. 二つのグラフを見比べると,3 年次生はテスト終了間近 まで,プログラムを記述している人数が多く,4 年次生は 余裕を持ってテストを終わらせている者が多いことがわ かる. これらの結果から,3 年次生と 4 年次生の間には何らか の差があると考えられる.4 年次生は比較的エラーも少な く,課題を終わらせる時間も早い. この結果から,4 年次生と比較し,3 年次生のほうがよ 図 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 に示す.この課題終了時間と は課題の提出時間ではなく,ファイルに変更を加えた最後. c 2019 Information Processing Society of Japan ⃝. りプログラミングを習熟していないといえる.初学者の支 援を目的とするため,4 年次生よりも初学者に近しい 3 年 次生 15 名の結果を詳しく見ていく.. 6.5 分析 実験の対象者のうち,最後の設問 4 に全く手をつけるこ とができなかった学生が 3 名おり,全員が 3 年次生である. この 3 名は提出すべきプログラムファイルを一部提出でき なかったとして,課題未完了者と呼称する.その他の 3 年 次生 12 名は,正答か否かに関わらず,全ての提出物を提 出することができたとして,課題完了者と呼称する. 課題未完了者 3 名は,それ以前の設問のエラーを自力で 修正することができなかったため,最後の設問に取り掛か ることができなかったと推測される.そのため,この 3 名 は初学者に分類することができるといえる. こういった課題未完了者たちを含めた 3 年次生 15 名の ログを元に,エラーの発生原因を分類した.エラーは文法, 変数,メソッド,型,タイピング,クラス,形式的導出, その他の 8 項目に分類した.エラーの分類における基準と 具体的なミスの例を表 4 に示す. コンパイル時に示されるエラー 1 個につき,8 項目のい ずれかに 1 つとしてカウントした.しかし,文法エラーは 一つのエラーのために以降の正しい部分が誤っていると判 定されてしまうことがある.そのため,文法エラーに関し. 6.

(7) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report 表 5. 各 3 年次生の分類別エラーカウント数. Table 5 Number of error counts by classification of each third grader 学生の種別 課題未完了者. 課題完了者. 表 6. 文法. 変数. メソッド. 型. タイピング. クラス. 形式的導出. その他. 合計. 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. 課題完了者と未完了者のエラーカウント数の平均. 意な差があることがわかった.. Table 6 Average of the error count number of task completed persons and incomplete participants エラーの分類. 6.6 考察. 課題完了者. 課題未完了者. 文法. 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. 課題完了者と未完了者の間にはエラーの個数に有意な差. を学習し始めたばかりの学習者を支援するという観点で. 表 5 を見ると,課題未完了者 3 名の合計が課題完了者 12 名の合計を上回る項目は型の 1 つだけであった.他の項目. ては,エラーの個数とカウント数が一致していない場合が. との関連性は不明であるが,型というものの理解が不足し. ある.. ているためにエラーが多く発生しているのではないかと推. 3 年次生 15 名の,各項目数のカウント数を表 5 に示す. また,エラーのカウント数の平均は表 6 の通りである. ほとんどの項目において,課題未完了者がより多くのエ ラーを出している場合が多いことがわかる.. 測される. また,今回行った実験は 3 年次生と 4 年次生を対象とし てものであり,彼らが本当に初学者と呼ぶべき学習到達度 であるかという点は疑問が残る.しかしながら 3 年次生で. この課題未完了者 3 名と課題完了者 12 名の間に差異が. あっても,型の理解が不足しているという可能性が示唆さ. あることを確認するために,表 5 の合計の列を用いたウェ. れている.1 年次生といった初学者でも型の理解が難しい. ルチの T 検定を行なった.第一群として課題未完了者 3 名. ということは考えられる.. のエラー個数,第二群として課題完了者 12 名のエラー個. 実際の課題未完了者のログを観察すると,. 数を入力した.有意水準は 0.05 とした.帰無仮説と対立. pages.get(0).getNote() と い っ た ,メ ソ ッ ド を 二 つ 以. 仮説は以下の通りである.. 上繋げて呼び出そうとしている場合に,エラーの修正が上. • 帰無仮説 - 課題未完了者と課題完了者のエラー個数に 有意差はない. • 対立仮説 - 課題未完了者と課題完了者のエラー個数に 有意差がある この T 検定の結果,p 値は 0.022 であった.有意水準 0.05 を満たしたため,帰無仮説は棄却される.. 手くいっていないことが多いように見受けられた.メソッ ドを複数繋げることにより,どの段階でどういう型へ変 わっているのかを掴めなくなってしまっていると推測され る.あるいはメソッド呼び出しそのものが初学者にとって 難しいということも考えられる. また,課題完了者の特定の 1 名に関しては,それぞれの. 課題未完了者と課題完了者の間には,エラーの個数に有. c 2019 Information Processing Society of Japan ⃝. 7.

(8) Vol.2019-CE-148 No.8 2019/2/16. 情報処理学会研究報告 IPSJ SIG Technical Report 表 7. 本システムが示してしまう偽陽性と偽陰性. Table 7 False positive and False negative in my system 種別. 内容. 偽陽性. 配列宣言時に,変数名に [] をつけている 型パラメータの省略記法を用いている. 偽陰性. 7. おわりに 提出されるプログラムファイルの解析を行うことで,自 動で評価し,エラーの原因を発見するシステムを開発して. インターフェースのメソッドにブロック部がある. いる.本システムは変数,代入,メソッド呼び出しなどの. 到達不可能な文が存在している. 項目ごとに判定を行い,推測されるエラーの原因をいくつ かの種別に分ける.エラーが発生している行数,エラーの 種類,ミスの内容,エラーの原因を提示することで教授者. プログラムファイルを 1 つずつコンパイルするという段 階的な手法を取らず,各設問の最後に対象プログラムファ イルをまとめてコンパイルをするという手法をとってい た.この者は他の課題完了者と異なり,設問 4 のプログラ ムファイルに手をつけることができていたがコンパイルを しておらず,設問 4 が正しくできていたかを確認していな いことがわかる.コンパイルをどのタイミングで行うかに よって,課題の進行に影響を及ぼす可能性がある.. 6.7 システム性能調査 本実験にて取得した初学者のプログラミング過程におけ るプログラムファイルを用いて,本システムの性能を調査 した.本システムが最低限動作することを確認するため に,模範解答のプログラムファイルを対象としてチェック させた.この結果,実行時にエラーを起こすことはなく, 正常に動作が終了した. 対象としたプログラムファイルは,3 年次生 15 名の履歴 として保存したプログラムファイル全てである. 本システムは段階を経てチェックを進めていく.チェッ クに問題がなければ次の段階のチェックに進む.文法,形 式的導出,インポート文,スコープの順に判定していき, スコープに問題がなければ,代入,演算,メソッド呼出, 返却値をチェックする. このシステム性能調査の結果を,偽陽性と偽陰性に着目 して観察した.偽陽性は,コンパイルエラーはないが,シ ステムが問題ありと判定してしまったものである.偽陰性 は,コンパイルエラーがあるにも関わらず,システムが問. がエラーを見つけることではなく,フィードバックを考え ることに注力できる.. 3,4 年次生を対象に実験を行い,コーディング途中の 内容を取得した.この実験で,3 年次生の課題未完了者と か課題完了者の間にはエラーの個数に有意差があることが わかった.また,型に関する理解が不足しているためにエ ラーが多くなっている可能性が示唆された. 実験では,課題未完了者はエラーを自力で修正できず, 途中で実験のテスト時間が終了となった.エラーの原因を 素早く発見することが,つまずいたままになってしまって いる学習者に対して迅速なサポートを行うための助けと なる. 本システムによって,教授者が学習者に対してサポート を行うときにかかる負担の軽減が期待される.. 8. 今後の展望 対応できるエラーの原因をより幅広くし,より詳細な情 報を取得できるようにすることで.実際の実験データでの 具体的なエラー原因や,想定されるエラーなどに対応して いるが,不足している部分の開発を進めることが求めら れる. また,本稿での実験は 3 年次生と 4 年次生を対象に行っ たが,1 年次生などの,より初学者に近い段階にある学習 者を対象に実験を行い,より実践に即したデータを集める 必要がある. 参考文献 [1]. 題なしと判定してしまったものである. システム性能調査によっていくつかの偽陽性と偽陰性を 発見した.それらのうち,主なものを表 7 に示す.. [2]. また,存在しないクラスを使おうとする,ファイル名そ のものが間違っているといったことを原因とするエラーを 発見できなかった.これらは本システムが提出されたプロ. [3]. グラムファイルの中身を評価するものであるため,本シス テムの対象外であると判断した.. [4]. その他のエラー発生については正しく発見することがで きた.しかし,教授者が素早くエラーの原因を発見できる ようなメッセージを生成できているかは不明である.. c 2019 Information Processing Society of Japan ⃝. [5]. IT 人 材 の 最 新 動 向 と 将 来 推 計 に 関 す る 調 査 結 果   商 務 情 報 政 策 局 情 報 処 理 振 興 課 2016 http://www.meti.go.jp/policy/it_policy/jinzai/ 27FY/ITjinzai_report_summary.pdf (閲覧日 2018/8/14) 比較的大きなプログラミング課題のための自動採点シス テム 田上恒大・阿部公輝 情報処理学会研究報告コン ピュータと教育(CE) 2006 Vol.16 pp.135-140 教育指向 Java コンパイラの試作 服部峻・山崎正貴・亀 田弘之 データ工学と情報マネジメントに関するフォーラ ム (DEIM) 2010 ビジュアル-Java 相互変換によるシームレスな言語移行を 指向したプログラミング学習環境の提案と評価 松澤 芳 昭・保井 元・杉浦 学・酒井 三四郎 情報処理学会論文誌   2014 Vol.55 No.1 pp.57-71 プログラミング導入教育におけるコンパイルエラー修正時 間の分析 榊原康友・松澤芳昭・酒井三四郎 情報処理学 会第 74 回全国大会講演論文集 2012 pp.809-810. 8.

(9)

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

参照

関連したドキュメント

東京大学 大学院情報理工学系研究科 数理情報学専攻. [email protected]

関東総合通信局 東京電機大学 工学部電気電子工学科 電気通信システム 昭和62年3月以降

鈴木 則宏 慶應義塾大学医学部内科(神経) 教授 祖父江 元 名古屋大学大学院神経内科学 教授 高橋 良輔 京都大学大学院臨床神経学 教授 辻 省次 東京大学大学院神経内科学

東北大学大学院医学系研究科の運動学分野門間陽樹講師、早稲田大学の川上

清水 悦郎 国立大学法人東京海洋大学 学術研究院海洋電子機械工学部門 教授 鶴指 眞志 長崎県立大学 地域創造学部実践経済学科 講師 クロサカタツヤ 株式会社企 代表取締役.

学識経験者 品川 明 (しながわ あきら) 学習院女子大学 環境教育センター 教授 学識経験者 柳井 重人 (やない しげと) 千葉大学大学院

関谷 直也 東京大学大学院情報学環総合防災情報研究センター准教授 小宮山 庄一 危機管理室⻑. 岩田 直子

東京大学大学院 工学系研究科 建築学専攻 教授 赤司泰義 委員 早稲田大学 政治経済学術院 教授 有村俊秀 委員.. 公益財団法人