関東地区

教育システム情報学会 2021年度学生研究発表会

プログラミングにおける振る舞いと機能の理解を指向した学習支援システム
A Learning Support System for Understandingof Behavior and Function in Programming松爲 泰生*1, 前田 新太郎*2, 茂木 誠拓*2, 古池 謙人*2, 東本 崇仁*1

Taiki MATSUI*1, Shintaro MAEDA*2, Tomohiro MOGI *2, Kento KOIKE*2, Takahito TOMOTO*1*1 東京工芸大学工学部*1Faculty of Engineering, Tokyo Polytechnic University*2 東京工芸大学大学院工学研究科*2Graduate School of Engineering, Tokyo Polytechnic University

Email: c1818108@st.t-kougei.ac.jp

あらまし：プログラミング学習においては，他者のコードを読み，学ぶことは重要である．その際には対象のソースコードのすべてとソースコードの機能を対応付けるだけでなく，ソースコードの各部分と機能を対応付けて理解することが重要である．ソースコードと機能を対応付けるためには，一連のソースコードがどのような処理を実現し，その結果何が振舞いとして生起するかを理解し，その上で機能を解釈して理解することが求められる．そこで本研究ではソースコードの各部分をまとまりとして整理させ，まとまりに対する振る舞いを観察させ，観察した振る舞いから機能を解釈させる学習法を提案する．
学習したまとまりを段階的に大きくすることでソースコードの機能を理解できると考える．さらに提案した手法を用いたシステムを開発し評価を行う．
キーワード：ソースコード，振る舞い，トレース，機能，学習支援システム

1.

プログラミング学習においてソースコードを「読む学習」は有効である（1-2）．先行研究では，ソースコードを読ませることで，機能（何を果たすか）の理解（1）や，振る舞い（各行の変数の値がどのように変化する）の理解（2）を促進するシステムの有効性が確認されてきた．一方で，ソースコードの機能を理解するためには，振る舞いもあわせて理解することの重要性が指摘されている（3）．
そこで本研究では，ソースコードから学習者に有意味だと思える個所をまとまりとして指定させ，その一連のまとまりにより生起される振る舞いの理解と，振舞いに基づいた機能の理解を促す支援システ
ムを開発・評価する．

を解釈する活動を行うことで学習者がはじめに作成したソースコードのまとまりがどのような機能をもつのか理解することができると考える．
また，上記の学習については古池らの段階的拡張手法（3）を導入している．理想的には複雑な構造のソースコードを学習者が独力で小さなまとまりを見つけて学習していけることが望ましいが，初学者には難しい．そこで，最初に与える問題は 3 行の代入文からなる Swap のコード，次に与える問題は if
文と 3 行の代入文からなる 2 変数のソートのコード，といった形で段階的に部品を作成させている．2 問
目では，最初に 1 問目と同様に 3 行の小さな Swapのまとまりを発見させ，その後に if と Swap を組み合わせた機能を発見させるような問題となっている．

2.

3.

はじめに

提案手法

ソースコードの機能を理解するには，はじめからソースコード全体で機能を考えるのではなく，部品単位の小さいまとまりごとに機能を理解することが重要である．そこで，本研究では，ソースコードを部品単位の小さなまとまりにわけて機能を理解するための学習活動を 3 段階に分けた．1 段階目では，全体のソースコードから機能的に意味のありそうなまとまりを作成させる．2 段階目では，ソースコードのまとまりが生起する振る舞いをトレースさせる．
1 段階目に作成したソースコードのまとまりからトレースを行い，1 行ずつ変数の値の変化である振る舞いを確認する．3 段階目では，トレースした振る舞いからソースコードの機能を考えさせる．2 段階
目に確認したソースコードの振る舞いを通して機能

41

提案システム2 章にて紹介した提案手法を用いて，ソースコードの機能の理解を促す提案システムを図 1 に示す．
まず，ソースコードを提示し，その中で機能として解釈可能な小さなまとまりを作成させる（図 1 左部）．この画面では学習者は出題したソースコードからある機能の意味を持ちそうなソースコードを 2行以上選択してまとまりを作成し，解答する．学習者が解答を間違えた場合やまとまりとしては有意味だがより小さなまとまりがある場合は，その旨をフィードバックする．
次に作成したソースコードの振る舞いを確認する
画面を表示する．システムは，学習者が作成したソースコードのまとまりに初期値を与える．学習者はソースコードの各行がどのような順番で実行される

関東地区

教育システム情報学会 2021年度学生研究発表会

図 1 システム画面
かを記述し，各行で起きる変数の値の変化を解答する．その結果として起きる値の変化を観察する．特に，初期値と最終値を比べ，変数の値がどのように変化したかを確認してもらう．学習者が行の実行順
序や各行の処理を間違えた場合は，ソースコードから振舞いを理解する能力が不十分と考え，間違えたソースコードとソースコードの実行過程である変数の値を赤く表示してもう一度解き直すようにフィードバックする．
最後に機能を解釈する画面を表示する．この画面ではトレースしたソースコードの振る舞いから，そのソースコードのまとまりがどのような機能があるのかを解答する．システムには，対象の変数や配列に対する語句と，対象の操作に関する語句をあらかじめ用意されており，学習者は対象と操作を組み合わせて機能を解答する．例えば，「変数 a と b」を「昇順に並べる」などの組み合わせにより機能を解凍する．学習者が解答を間違えた場合，トレース画面を表示し，間違えたところに対応した変数とその初期値と最終値を赤く表示して，注目すべき対象や操作についてフィードバックする．

まとまりを提示して振る舞いを解答させる振舞いテスト(最大 1 点)である．
4.2 実験結果
表 1 に事前/事後テストの平均と効果量を示す．構造化テストについては，まとまりの作成においても，まとまりの機能の解答においても，実験群の効果量が統制群を上回った．さらに．振舞いテストにおいては実験群が大きく統制群を上回った．これは，システムを通した学習により，まとまりを考える力や，ソースコードの振舞いを考える力，およびまとまりの機能を考える力が向上した可能性が示唆される．
また，提案システムに関するアンケート（6 件法)では，「本システムでの学習は，プログラムのソースコードと振る舞いの関係の学習につながると思いますか？」で平均 5.2，「本システムでの学習は，プログラムの振る舞いと機能の関係の学習につながると思いますか？」で平均 5.4 と高い評価を得た．
結果から本システムを用いた学習はソースコードと振る舞い，振る舞いと機能の関係の学習につながることについて肯定的な評価を受けることができた．

4.

本稿では，ソースコードの機能の学習を 3 段階に分け，ソースコードの振る舞いを確認し，機能を解釈する手法を提案し，支援システムの開発し評価を行った．実験結果より本システムを用いた学習のほうが統制群で行った学習より学習効果があることが示唆された．

評価実験

4.1 実験概要
工学部大学生を実験群 5 名，統制群 5 名に分けて評価実験を行った．実験群は提案システムによる学習，統制群はソースコードを実行するための Web
サイトと説明資料を用いた学習を行った．実験は事前テスト→学習→事後テストの流れで行った．テス
トは次の 2 種類を行った．1 つ目は，ソースコードを提示して，ソースコードのまとまりを作成(最大16 点)させ，まとまりの機能を解答(最大 16 点)させる構造化テストである．2 つ目は，ソースコードの事後効果量9.40
8.60
1.40
0.60

11.80
8.20
3.80
1.00

2.46
0.41
2.55
0.70

実験群

0.00

0.80

2.83

統制群

0.20

0.20

0.00

まとまり：実験群
テ 構 まとまり：統制群ス造ト 化 機能：実験群
機能：統制群テ振ス舞トいおわりに(1)

渡辺圭祐, 東本崇仁, 赤倉貴子:“段階的抽象化を用いたプログラムを読む学習の支援システムの開発とその評価”, 電子情報通信学会技術研究報告 = IEICE
Tech. Rep. 信学技報, Vol.115, No.50, pp.49-54, （2015）
東本崇仁, 赤倉貴子:“提案するプログラムトレース
課題のための学習支援システムの開発とその実践”,
電子情報通信学会論文誌 D, Vol.101-D, No6, pp.810819, （2018）
古池謙人, 東本崇仁, 堀口知也, 平嶋宗:“プログラミング学習における再利用性を指向した知識組織化のための知的支援: 機能・振舞い・構造の観点に基づく問題解決過程のモデル”, 人工知能学会論文誌,
Vol.35, No.5, pp.C-J82_1-17, （2020）

参考文献

表 1 事前/事後テストの平均と効果量
事前5.

(2)

(3)

42