Comments
Transcript
プログラミング演習システム PROPEL の Java 対応とエラーメッセージの
2015 PC Conference プログラミング演習システム PROPEL の Java 対応とエラーメッセージの改善 戸上稔崇*1・北英彦*1 Email: [email protected] *1: 三重大学工学研究科電気電子工学専攻 ◎Key Words プログラミング演習,Java,演習システム 1. はじめに 歴一覧表示機能および座席表示機能を持つ。PROPEL はこれまでは C 言語での学習を対象としていたためそ のままでは Java への対応はしていなかった。 本研究ではプログラミング学習者への迅速で適切な アドバイスと、講師が瞬時にすべての学習者の状況を 把握できるようにするシステムを講義に取り入れるた め、PROPEL を Java に対応させることにした。 また、コンパイルエラーメッセージは専門的な用語 が含まれているため初心者にはわかりにくい。そこで コンパイルエラー時に表示される文章を追加すること で学習者がコンパイルエラーを取り除きやすくする。 近年の情報化社会においてプログラミングの学習は とても重要な位置にある。三重大学工学部電気電子工 学科を含む多くの大学ではプログラムを実際に作成し てプログラミング技術を身につけるため、また、計算 機への理解を深めるためにプログラミング演習が行わ れている(1)。 三重大電気電子工学科ではこれまで「プログラミン グ演習Ⅰ」および「プログラミング演習Ⅱ」の講義で C 言語を学習してきたが、今年度より Java の学習へと切 り替えた。Java は広く使われているオブジェクト指向 プログラミング言語であり、プログラムの再利用性が 高く、分担しての作業が容易になるため大規模な開発 での開発効率が高いとされている(2)。近年ではソフトウ ェア開発を Java に切り替えているところも増えてきて おり、Java への注目が高まってきている。 2. Java の学習環境 プログラミング演習における Java の開発環境として 以下の 3 つを検討した。 Eclipse,NetBeans, IntelliJ IDEA などの統合開発 環境(IDE)(3)(4)(5) Java Development Kit(JDK) + ファイル共有シ ステム(6) プログラミング演習システム PROPEL (7)(8) 今回の研究ではプログラミング初心者をターゲット と定め、講師がリアルタイムで学習者全体のプログラ ム作成状況を把握できる必要があると考えた。具体的 には、以下のことを講師ができることが必要であると 考えられる。 作成途中のプログラムの閲覧 プログラム作成に行き詰まっている学生の発見 Eclipse のプラグイン機能を用いた、学習者のプログ ラミング作成履歴を記録し、講師が開発過程を再生で きるようにした先行研究(9)がある。しかし、学習者全体 の作成状況を把握する機能はない。 JDK とファイル共有システムを使えば、講師は学習 者のファイルを直接見ることはできる。しかし、同時 に多くの学習者の状況を演習中に把握することはでき ない。 当研究室が開発している PROPEL(PROgramming Practice Easy for Leaners)では講師が学習者全体のプロ グラム作成状況を把握できる後述のプログラム作成履 (a)全体 (b)内部 図 1 PROPEL のシステム構成 -11- 2015 PC Conference 3. プログラミング演習システム 当研究室では、プログラミング演習支援を目的とし たシステムを開発・研究してきた。そのうちの 1 つが 学習者のプログラミング作成状況の把握及び、理解の 遅れている学習者への迅速な対処を目的とした、プロ グラミング演習システム PROPEL である。PROPEL は、 学生がプログラム作成をするための学生用画面と、学 生のプログラム作成状況を把握するための講師用画面、 データを管理する Web サーバーからなる。学生用画面 と講師用画面は Web ブラウザ上で開くことができ、初 心者を対象とした学習であれば、機能が多い統合開発 環境を用いるよりも手軽にプログラムを作成すること ができる。PROPEL のシステム構成図を図 1 に示す。 図 1(a)に示すように、学習者はウェブブラウザ上 で動くエディタを使用する。エディタには自動送信機 能があり、30 秒毎に作成途中のコードをサーバーに自 動的に送信、保存する。保存された情報はまとめられ、 講師用画面の作成履歴表示や座席表示画面に送られる。 図 1(b)に示すように、Web サーバー内部では、自 動保存や保存、コンパイルされたプログラムデータが 記録されそれらのデータをまとめ講師に情報を提供し たり、作成途中のプログラムに対するエラーチェック 機能で学習者にプログラム作成段階でミスをしていな いかなどの情報を返したりする。 学習者用の画面を図 2 に示す。学習者はデバッグを 除くプログラミングにおける主な機能、保存やコンパ イル、実行といった機能を利用できる。また、 「講師を 呼ぶ」ボタンを押すことで後述の座席表示画面に講師 のアドバイスを求めているということが表示され講師 を呼ぶことができる。 (a) 全体図 (b)学習者一覧表示 (c)履歴表示 図 3 作成履歴一覧表示画面 3.2 図 4 のように演習室の座席一覧が表示され、プログ ラムの作成に行き詰まっている学習者の座席の位置を 知ることができる(10)。座席のマスには学習者の名前と 作成中の課題名が表示され、誰かどこにいてどの課題 を行っているのかが瞬時にわかる。座席のマスの中の 色は、5 分以上更新がなければ黄、15 分以上更新がな ければ橙、講師を呼ぶボタンを押していれば赤となり、 作成の滞っている学習者を瞬時に見つけることができ る。 PROPEL を用いることで、プログラミング演習にお いて、プログラムの作成に行き詰まっている学習者を 早い段階で見つけ出し講師がアドバイスすることが可 能となる。また講師も、どのくらいの学生が行き詰ま っているのか、また誰が講師の助けを必要としている かなど学習者全体の理解度を容易に把握することがで きる。 図 2 学習者画面 3.1 座席表示機能 プログラム作成履歴一覧画面 講師用の画面ではプログラムの作成状況を一覧で見 ることができる。図 3(b)では PROPEL で課題を行っ ている学生の学籍番号と名前、現在の課題、課題に取 り組んだ時間などが表示される。学習者の作成中のソ ースコードを見たい場合には、見たい学習者の学籍番 号をクリックすることで図 3(c)のようにソースコー ドが表示される。この画面を見ることで、講師は誰が どの課題を何分間取り組んでおり、プログラムがどこ まで作成できているのかなどをひと目で把握すること ができる。 -12- 2015 PC Conference 4.3 図 4 座席表示画面 4. PROPEL の Java への対応 先に述べたように PROPEL は C 言語での学習を前提 としていた。そのため、これまでのままでは Java の学 習で PROPEL を用いることはできなかった。Java に対 応させ、プログラミングできるようにするにはいくつ かの点を変更する必要があった。 4.1 作成途中でのエラーチェック機能 当研究室の小島佑介が行った、2010 年のプログラミ ング演習Ⅰの受講者を対象にした初心者がどのような 間違いをするかの調査(11)では次のような間違いが多く 見られた。 「#include <stdio.h>」の記述忘れ 全角空白の混入 セミコロン忘れ クラス宣言忘れ等価演算子「==」と代入演算子 「=」の間違い クラス名、または変数名のタイプミス ダブルコーテーションのつけ忘れ “(”と“{”の間違い 括弧のとじ忘れ 小島の研究では、学習者が上記のプログラミングミ スを起こしていた場合検出しエラーメッセージを表示 するようになっている。 「#include <stdio.h>」の検出を取 り除いた他のエラーに関しては C 言語と Java で共通の 性質であるため変更する必要はない。 4.4 コンパイルエラーメッセージ 学習者が自分でプログラムのミスに気付くにはコン パイル時のエラーメッセージを適切に読み取らなけれ ばならない。しかし、コンパイルエラーの中には分か りにくい文のものがあるため、プログラミング初心者 はエラーメッセージの意味がわからず間違いを修正で きない可能性がある。そこで、コンパイルエラーメッ セージが表示された時にその理解の手助けとなる文が 同時に表示されるようにする。今回は 3.3 で述べた調査 で得られたプログラミングミスによるコンパイルエラ ーメッセージを対象とする。 これらの間違いにより表示されるコンパイルエラー メッセージと追加表示するメッセージの文を表 1 にま とめる。コンパイルエラーメッセージの中には「¥12288 は不正な文字です」 「互換性のない型」など初心者には わかりにくい表現が含まれている。文章を追加するこ とで、プログラミング初心者でも自力でプログラムの 間違いを修正できるよう促す。 学習者画面では図 6 のように、コンパイルエラーが 発生した時に Java コンパイラから返されたメッセージ の後ろに追加文章が表示される。 Java でのコンパイル及び実行 図 5 で示すように、C 言語はコンパイル後マシンの 上で直接実行しているが、Java はコンパイルによって Java バイトコードと呼ばれる中間言語コードへと変換 し、それを仮想マシン上で実行する。図 1(b)の「コ ンパイル」及び「実行」モジュールで、コンパイルコ マンドと実行コマンドの 2 箇所を Java のものに書き換 えることで、Java で記述されたソースコードのコンパ イルおよび実行を可能にした。 5. 今後の課題 今回、コンパイル時のエラーメッセージに文章を追 加することで学習者の自力でのコンパイルエラー解決 を促した。今回の変更で学習者の演習効率がどの程度 変化したのか、今後の調査で検証する必要がある。 また、現在 PROPEL は 1 ファイルからなるプログラ ムの作成にしか対応していない。しかし、Java をより 深く学ぶにはオブジェクト指向による複数ファイル、 複数クラスからなるプログラムの作成にも対応するべ きである。図 7 に対応した時の画面構成の予想図を示 す。 図 5 C 言語と Java のコンパイルの違い 4.2 プログラム作成履歴閲覧機能 作成中のプログラムの 30 秒毎の自動保存、保存ボタ ンによる保存、ギブアップ時、プログラム提出時のソ ースコードはすべて拡張子 c で保存されていた。これ らを拡張子 java で保存し、読み取り時にも拡張子 java のファイルを指定することでプログラム作成履歴の Java への対応を可能にした。これらは図 1(b)では「自 動保存」 「保存」 「データリスト化」モジュールにあた る。 -13- 2015 PC Conference 表 1 対応するエラー原因 Java のコンパイルエ 学習者に提供する追加表示す ラーメッセージ る文章 ¥12288 は不正な 全角空白が混入しています。 文字です 特に,字下げの部分に全角空 白がないか確かめてくださ い。 エラー: ¥xxxxx は不 正な文字です (xxxxx には数値が 入ります) 文字列の内部以外の部分に全 角文字が混入しています。 例えば「;」 「.」 「"」 「)」 「}」 などが全角記号「;」 「. 」 「” 」 「) 」 「} 」 になっていませんか。 ‘;’がありません 式の終わりにセミコロン「;」 をつけ忘れています。 図 7 複数ファイルの作成への対応 シンボルを見つけら 名前(シンボル)が定義され れません ていないことを意味していま す。 変数を定義していない か,変数名のスペルミスの可 能性があります。 : 文字列リテラルが閉 ダブルコーテーション「"」を じられていません つけ忘れています。 互換性のない型 ')'がありません 6. おわりに 今年度より始まった Java でのプログラミング演習で 学習者に対して効率よく支援ができるようにするため に PROPEL を Java に対応させた。また、Java のコンパ イルエラーを学習者が自力で修正できるように、コン パイルエラーメッセージに文章を追加した。PROPEL は現在、実際にプログラミング演習の講義で運用中で ある。PROPEL を利用することで従来よりもプログラ ミングを効率よく学習することが期待できる。 等価演算子「==」と代入演算 子「=」を間違えていません か。 参考文献 (1) 三重大学平成 26 年度ウェブシラバス: 括弧を閉じ忘れている可能性 があります。 https://syllabus.mie-u.ac.jp/ (参照 2015-2-24) (2) 粉名内仁章,西智也:“新版オブジェクト指向プログラミ ング―J2SE1.4/5.0 対応 (Java バイブルテキストシリー ズ)”,SCC(2007) . (3) 石黒尚久,テクニカル書籍編集部:“Eclipse4.4 完全攻略”, SBCreative(2014) . (4) NetBeans:https://ja.netbeans.org/ (参照 2015-2-24) (5) IntelliJ IDEA: https://www.jetbrains.com/idea/(参照 2015-2-24) (6) Oracle Java SE Development Kit 8: http://www.oracle.com/technetwork/java/javase/downloads/jdk 8-downloads-2133151.html (参照 2015-2-24) (7) 森一樹,田中昂文,橋浦弘明,櫨山淳雄,古宮誠一:“プ ログラミング演習支援のための細粒度履歴収集環境の開 発”,雑誌名,巻,号,pp.27-38(2003) . (8) 伊冨昌幸,北英彦,高瀬治彦,林照峯:“プログラミング 演習のための初心者向け支援システム”,雑誌名,巻,号, pp.27-38(2003) . (9) 伊冨昌幸,小島佑介,高橋功欣,北英彦:“プログラムの 作成状況を把握する機能を持つプログラミング演習シス テム”,雑誌名,巻,号,pp.27-38(2003) . (10) 小川正,西口大亮,北英彦:“プログラミング演習におけ る iPad などの携帯デバイスの利用による指導の円滑化”, 雑誌名,巻,号,pp.27-38(2003) . (11) 小島佑介,高橋功欣,北英彦:“プログラミング演習にお ける効率のよい指導のためのエラー早期指摘”,雑誌名, 巻,号,pp.27-38(2003) . 変数 x は初期化され 使用している変数に値が入力 ていない可能性があ されていない可能性がありま ります す。 構文解析中にファイ 文字列やブロックや括弧を閉 ルの終わりに移りま じ忘れていませんか。 した : 図 6 エラーメッセージの追加表示 -14-