プログラム空欄補充問題作成の理論的検討
豊田研究室 寺井 淳裕
1. はじめに
情報処理教育にはさまざまなものが考えられるが、よく取り上げられるものとしてプログラミング技術の修得がある。中でも、プログラミングをおこなう際の基礎となるものとして、プログラムを読み書きできるというスキルを身につけさせることは重要な課題である。本論文ではとくにプログラム理解を支援する手法として、プログラム空欄補充問題を提案する。
プログラム理解には、プログラムから(1)アルゴリズムを把握する、(2)仕様を満たすか確認する、(3)バグを検出する、などさまざまなものが考えられる。本研究では、プログラミングの初心者を対象にして (1)をプログラム理解とみなしアルゴリズム理解を促すプログラム空欄補充問題の作成について検討をする。
2. プログラム空欄補充問題
アルゴリズムは、プログラム言語を介さず、それ自体を直接学ぶ事ができるがプログラミングスキルの向上を目指す場合、計算機上で具体的な処理を通して、プログラミングを学ぶ事も大切である。特に初心者にとってはアルゴリズムと、それを具体化するプログラム言語とを相互に対応づける知識を学ぶことは非常に重要である。このような観点から、本論文ではアルゴリズム理解を支援する一手法として、プログラムコード中に空欄を設けて、プログラム仕様を与えるとともに、空欄を埋めるよう問う問題、(空欄補充問題と呼ぶ)を用いる。
- アルゴリズム理解
効果的な空欄補充問題を作成するためには、いかに空欄を設定するかが問題になる。本論文では、一文単位で空欄を設けることを前提として、次のような方針を立てた。すなわち、アルゴリズム理解を促すために、プログラムの制御またはデータの流れが集まっている文を空欄にする。このような個所を探すために本論文ではPDG(Program Dependence Graph)を用いている。
- 空欄設定方針
効果的な空欄補充問題を作成するためには、いかに空欄を設定するかが問題になる。本論文では、一文単位で空欄を設けることを前提として、次のような方針を立てた。すなわち、アルゴリズム理解を促すために、プログラムの制御またはデータの流れが集まっている文を空欄にする。このような個所を探すために本論文ではPDG(Program Dependence Graph)を用いている。
3. PDGを用いた空欄設定手法
PDG (Program Dependence Graph)とは、下図に示すように、基本的にプログラムの各文をノードとし、任意の文と文の間の依存関係をアークとするグラフである。この文間の依存関係を利用してプログラムの流れ(アルゴリズム)を追い、空欄を設定するための経験則を導き出した。経験則は以下のとうりである。
- データ依存関係における被参照の数と参照の種類の多いノードを空欄とする
- データ依存関係における参照の数が多いノードを空欄にする
- 制御依存関係の深さが深いノードを空欄にする
4. 空欄設定手法の妥当性の検証
本論文での空欄設定手法の妥当性を検証するすめにプログラミングの熟練者に(i)素数を求める、(ii)整列をする、(iii)公倍数を求める、というアルゴリズムを持った3つのプログラムから、初心者のアルゴリズム理解に役立つ空欄を選んでもらうというアンケート調査を行った。この結果、経験則に基づきPDGから設定した空欄が、熟練者のアルゴリズム理解に有効と考えた空欄とほぼ一致した。
5. 結論
本論文ではプログラムコードから、空欄にすればアルゴリズム理解に役立つと思われる個所を決める方法を提案した。
この手法ではPDGの依存関係を利用することによってアルゴリズムの内容にかかわらず、有効な空欄が設定できる。
また、アンケート調査の結果、空欄設定の妥当性を確認できた。