中国地区

教育システム情報学会

2017年度学生研究発表会

ソースコード読解学習のためのデータ構造に基づいた問題生成に関する研究
A Study on Question Generation Based on Data Structure
for Source Code Reading-Based Programming Learning
赤瀬 直也*1, 伊豆田 夏帆*1, 松本 慎平*1
Naoya AKASE*1, Kaho IZUTA*1, Shimpei MATSUMOTO*1*1 広島工業大学 情報学部
*1Faculty of Applied Information Science, Hiroshima Institute of Technology
Email: {b215001, b214019, s.matsumoto.gk}@cc.it-hiroshima.ac.jp
あらまし：読解学習は，プログラミングに慣れていない初学者などの学習者に対する一つの支援法として有効であると考えられる．本研究では，プログラミングを苦手とする学習者がそのスキルを十分に獲得できていない原因のひとつとして，読解の際うまくスライシングできていないことにあると考えている．よって，データ依存関係を的確に，かつ効率良く把握することを狙いとした学習は，プログラミングを苦手とする学習者にとって効果的ではないかと考えられる．そこで本研究では，プログラミングを不得意とする学習者がうまくスライシングできていないという仮説に基づき，スライシング力の養成に焦点を当てたソースコード読解学習システムを検討することを目的とする．
キーワード：プログラミング，学習支援システム，読解学習

1.

はじめに読解学習システム

2.

プログラミング学習者の認知資源配分を容易にするため，フレーム及び学習活動パターンを制限した学習課題の設計及び開発が進められている．その中のひとつに，ソースコード読解に基づいたプログラミング学習システム(以降，読解学習システム)がある(1)．これは，プログラムを書いて実行するという一般的なコーディング演習と併用して用いるものであり，プログラムに慣れること，効率的にプログラムを読めるようになること(適切にスライシングできるようになること)，命令を確実に憶えることを目標とした学習である．読解力は，最も基本的なスキルであり，かつ，読解は単純で取り組みやすい学習である．よって，読解学習は，プログラミングを苦手とする学習者に対する一つの支援法として有効であると考えられる．本研究では，プログラミングを苦手とする学習者がそのスキルを十分に獲得できていない原因のひとつとして，読解の際うまくスライシングできていないことにあると考えている．非本質的な箇所の読解が余計な認知負荷を生み出し，その結果，円滑な学習を阻害していると考えている．よって，データ依存関係を的確に，かつ効率良く把握することを狙いとした学習は，プログラミングを苦手とする学習者にとって効果的であると考えられる．
そこで本研究では，プログラミングを不得意とする学習者がうまくスライシングできていないという仮説に基づき，スライシング力の養成に焦点を当てたソースコード読解学習システムを検討することを目的とする．具体的には，既存の読解学習システム(1)をベースとし，データ依存関係に基づき読解教材を自動生成可能な機能を新たに検討する．

205

本研究で開発するシステムは，C 言語の読解学習を対象としたものであり，ソースコードを自動生成できる．開発システムは Web ブラウザ上で利用する．
システムは Apache 2.4.7 で動作しており，問題提示には JavaScript ライブラリである jquery 1.7.2，問題問題生成ボタン

問題に対する説明文章の追加

ソース
コードを自動生
成する
際の条
件
設
定

生成された
ソースコード実行後の変数の値(答え)

図 1 問題の自動生成機能
テストの残り時間

問題文
問題/全問題学習者の回答

問題の選択ボタン問題

図 2 テスト画面

テストの終了ボタン

中国地区

教育システム情報学会

データ管理には MySQL 5.6.16，Web アプリケーショ
ンは php 5.5.9 を用いている．教授者は，図 1 に示す問題の自動生成機能を用いることで，読解教材を自動的に作成できる．学習者のメインユースケースである演習画面を図 2，図 3 に示す．

3.

回答の入力フォーム

回答の送信ボタン

学習履歴ID,タイプ(テスト/復習)，問題で質問された変数，学習者の回答，正誤問題生成法の検討

従来のシステムは，変数や命令の数など問題生成に関する制約を設定した後，任意の規則に基づいてソースコードを生成する機能のみ有している．そこで本研究では，従来の読解学習システムを拡張し，データ依存関係を反復学習できるような機能を追加した．これにより，データ依存関係を把握しながら効率良く読解する力の獲得を目指した学習を実現できるようになった．
与えたデータ依存関係に沿い学習問題が自動作成する機能の概要を図 4，図 5 に示す．生成方法として，まず隣接行列を使用してデータ依存グラフを表す．データ依存グラフを隣接行列で表現する場合の定義は以下のとおりとする．
2017年度学生研究発表会

図 3 復習画面
d=10 , 0 , 1 , 0 , 0

a=1

0 , 0 , 0 , 1 , 0

b=a+d

0 , 0 , 0 , 0 , 1

c=b0 , 0 , 0 , 0 , 0

d=c

隣接行列

隣接行列から生成されたソースコード（1,2）の成分が0であるため二行目と一行目の依存関係はない

図 4 隣接行列からのソース生成法(依存なし)

ノード番号=行番号ノード i からノード j へエッジが引かれるとき，(i, j)成分の値は 1 を取る．そうでない場合は 0 を取る．
対角成分を 0 とした上三角行列で表す．

なお，生成の条件として，変数の再利用率の指定，演算子の制限を行うことができる．以上の処理の流れを図 6 に示す．

0 , 0 , 1 , 0 , 0d=10 , 0 , 1 , 0 , 0a=10 , 0 , 0 , 1 , 0

b=a+d

0 , 0 , 0 , 0 , 1

c=b0 , 0 , 0 , 0 , 0

d=c

隣接行列

隣接行列から生成されたソースコード(1,3)(2,3)の成分が1であるため一行目と二行目のデータ依存がある

おわりに

4.

0 , 0 , 1 , 0 , 0

本研究では，プログラミングを不得意とする学習者を支援する方法として読解学習に着目し，スライシング力の獲得を目的とした学習支援法を検討した．
従来のシステムではランダムなソースコードしか生成できなかった点に対して，本研究では，データ依存関係を持つソースコードを生成する方針を明らかにした．これにより，学習者はデータ依存関係を意識した読解学習を行うことが可能となり，プログラミングを不得意とする学習者の更なる支援に繋がると考えられる．

図 5 隣接行列からのソース生成法(依存あり)
0 , 0 , 1 , 0 , 00 , 0 , 1 , 0 , 00 , 0 , 0 , 1 , 00 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0
データ依存関係の隣接行列

謝辞
本研究は，独立行政法人日本学術振興会科学研究費助成事業(基盤研究(C)16K01147，17K01164)の助成を受けて実施した成果の一部である．ここに記して謝意を表します．

d=1

a=1
データ依存関係のノード図

参考文献

b=a+dc=bd=c(1) K. Okimoto, S. Matsumoto, S. Yamagishi, T. Kashima,
Developing a source code reading tutorial system andanalyzing its learning log data with multiple classification
analysis, Journal of Artificial Life and Robotics, Volume22, Issue 2, pp 227-237 (2017)

生成されたソースコード

図 6 データ依存関係に基づくソース生成206