Saga
(A)研究テーマ名
C言語学習支援システムのためのメモリ状況誤りの可視化機能の設計・開発
(B)研究内容
学習を知識の構成であるという立場で捕らえたとき,学習者自身が自らの誤りを発見・認識することは
重要である.
これを支援するシステムとしてEBS(Error Based-Simulation)が平嶋らにより提案されている.
EBSとは学習者の入力した誤りをシステムでもっともらしく見せることで,学習者に誤りへの気付きの促進
を行う.
(図 EBSのイメージ)
EBSは現状力学・筆算・英作文・デッサンの分野で研究されており,その効果を示されている.
本研究ではEBSの他分野への拡張を目指すが,ここで対象としてC言語学習を選択する.
なぜ,C言語学習かというと,C言語などのプログラムコードは誤りが分かりづらいが,これを何らかの
動きとして可視化することで分かりやすくなるのではないかと考えられるからである.
さて,そうした上で既存のC言語学習における問題点を考えてみる.
C言語における学習項目には 変数・制御構造・関数・配列・ポインタ・構造体・etc・・・がある.
この中で配列やポインタの概念は実行時のメモリ状況が見えないため理解が難しく,誤りに気付きにくいと
言われている.
これを解決するために様々なC言語可視化システムが提案されてきたが,これらのシステムの
可視化手法では値の代入の様子や矢印を用いたポインタ参照先についての可視化のみが行われている.
しかし,本来のメモリ状況の動きを考えれば「値が何処へ行くのかという代入」,「値が何処から来たのか
という参照」の二つが当然考えられる.既存の可視化機能ではポインタに限る参照の誤りの可視化は
出来るが,その他の参照に関する誤りの可視化を行うには不十分であると考えられる.
そこで,本研究ではポインタ以外の参照の動きや誤りも見せる可視化機能の設計を提案する.
既存の可視化機能は変数の中の数値が書き換えられているという表現をしているため参照などの動きの
可視化に不向きだと考えられる.そこで,数値が変数から変数へ移動する見せ方を提案したい.
既存の可視化機能の動きの見せ方
その見せ方を実現するため,既存の可視化手法における変数オブジェクトを変数箱・変数値の二つに
分離することを考えた.
変数箱と変数値の分離するかしか手法
また,この可視化手法により,次の図のように値の移動のイメージが見せれるはずである.
値の参照元から代入先への移動のイメージ
以上をもとに考案した可視化モデルの構成部品を説明する.
構成部品は上の図のようになっている,これに関して変数箱は生成・消滅,変数値は生成・消滅・移動,
矢印は生成・消滅 の動き行うことができる.
また、補足として初期化されていない変数には未知の特別な値として「?」が入っており,これがポインタ
変数値であれば矢印は未知のアドレスを示す固有の「未定義領域」を示すものとする.
演算の途中結果を入れる「計算領域1・2」という二つのレジスタの代わりのようなものがある.
以上を基に可視化機能の設計を行った.また,評価を行うためにこのこの可視化機能を用いた利用者の
ソースコードを可視化するシステムの試作を行った.
試作システムで使用可能な命令・及び制約は次のようになっている.
int,char,void,if,for,while
ポインタ(ポインタのポインタは不可)
配列(ポインタ不可・一次元配列のみ)
各種演算子
2個の計算領域で計算可能な範囲での複合演算
→これらの範囲は,C言語教科書”Cの絵本”のポインタ項目までの範囲の大部分をカバーしていると言える.
試作システムの実行画面
以上のシステムを用いて評価実験を行った.
実験の目的は本研究の可視化方法の有用性を調べるためであり,被験者はC言語を学習済みの工学部
の大学生9名である.
システムの利用内容は次の3つである.
課題に対してこちらが用意した正解と誤りのソースコードを可視化したものを見比べる.
課題に対してこちらが用意した誤ったソースコードを一度可視化してもらい,その上で被験者自身にソースコードの誤りを修正してもらう.
課題を用意し,被験者にそれのソースコードを一から作成してもらい,その可視化を行う.その後それを基にかしか可能な誤りのソースコードを作成してもらう.
その後,以下のアンケートを取った.
ボール・箱・矢印によってメモリ状況や動きを表すのは理解しやすかったですか.
ボール・箱・矢印によってメモリ状況や動きを表すことで誤りに気づきやすくなったか.
ボール・箱・矢印によってメモリ状況や動きを可視化するのは誤りの修正に役立つと思いましたか.
1:思わない 2:余り思わない 3:少し思う 4:思う
アンケートの結果,全体的に肯定的な意見を得ることが出来た.
しかし,自由記述の覧にて,一部分かりにくいとの意見も得ることが出来たので改善の余地がある.
また今回の実験では初心者を対象とした結果と,既存の可視化方法との比較が行われていないので
そこを考慮した実験も行う必要があると言える.
(C)研究実績(学会発表,学内発表,研究室内発表)
佐賀誠司,平嶋宗,"プログラミングにおけるメモリ処理に関する誤りの可視化機能",JSiSE2010学生研究発表会,pp.23-226,(2010.03)
(D)調査文献リスト
平嶋宗,堀口知也:誤りへの気づきを促進する誤りの可視化に関する研究,日本科学教育学会第28回年
会論文集,pp.109-112(2004.7).
平嶋宗,堀口知也:「誤りからの学習」を指向した誤り可視化の試み,教育システム情報学会誌,
pp.178-186(2004.7).
藤原宏記:メモリ状態の可視化に着目した C 言語学習支援システム,高知大学平成15年度
修士論文(2004.2).
PROVIT:ソフトウェア可視化手法を用いた初心者向けC言語教育ツール,
電子情報通信学会技術研究報告,pp41-46 (2009.11).
㈱アンク:Cの絵本,株式会社翔泳社,192p(2002.3).