日本ソフトウェア科学会第 39 回大会 (2022 年度) 講演論文集

ペアプログラミング利用時の学習状況把握支援
海野 芽美

伊藤 恵

近年，プログラミング導入教育においてペアプログラミングを用いることが増えている．プログラミング導入教育では，演習形式の講義が行われることが一般的である．そして，演習形式の講義では講師のサポート役として TA が導入されることが多い．しかし，学習者の数に対して少量のメンターが対応するために，学習者の状況を把握して支援することが困難な場合もある．そこで，本研究では，TA や講師などのメンターが学習者の状況を理解しやすくして，メンターによる効率的な学習支援ができるようにすることを目的とし，ペアプログラミングを使った演習授業における学習状況把握支援システムを提案する．本研究で提案するシステムでは，学習者のつまずきを検知・分類して，分類に応じた支援へ誘導することを目指す．本稿ではシステム提案のためのつまずき検知方法を提案する．

やすくするための学習状況把握支援システムやメン

1 はじめにターの代替になり得る対話型のシステムなどが提案

プログラミング導入教育では，演習形式の講義が行されてきた．学習状況把握支援システムには，エラーわれることが一般的である．本研究における演習形式

ログや操作ログから学習者のつまずきを検知してメの講義とは，講義中に演習課題が出され，学習者が自ンターに表示するシステム [2] や，学習者の進捗状況力で課題を解く授業形式のことである．

を整理してメンターに表示するシステム [3] などがあ

演習形式の講義では，講師はメンターとして学習る．メンターの代替になるシステムにはシステムと学者からの質問に対応すること，進捗が遅れている学習者の間でチャットで会話を行うことによってつまず習者を発見し支援をすることのような，学習者の状き解決を図るシステム [5] がある．

況に合わせた支援を行わなければならない．しかし，一方，近年プログラミング導入教育においてペア講師だけでこのような支援をすることが難しいため，プログラミングの利用が増えている．McDowell ら [4]追加のメンターとしてティーチングアシスタント (以はプログラミング導入教育においてペアプログラミ後，TA) が導入されることが多い．

ングは，落第可能性のあった者の単位取得，コードのただ TA を追加しても，学習者の数に対して少数質の向上に効果があったと述べている．のメンターで学習者の質問や相談に対応するために，本研究では，ペアプログラミングを使った演習形式学習者の状況を把握して支援することが困難な場合の講義を対象とした学習状況把握支援システムの提がある．また，学習者がプログラミングでつまずいて案を行う．

も挙手をしてメンターに相談しない場合がある．
そこで，メンターが演習中に学習者の様子を把握し

2 関連研究2. 1 学習状況把握支援システムに関する過去のA Support for Understanding Learning Status whenUsing Pair Programming.
Megumi Unno, Kei Ito, 公立はこだて未来大学情報アー
キテクチャ学科, Dept. of Media Architecture, Future
University Hakodate.

研究
いくつか既存の学習状況把握支援システムに関する先行研究をあげる．
市村ら [2] の研究は，つまづいている学生の早期発見と多くの学生が共通に抱える問題の発見を目的として Web ブラウザ上で動く学習状況把握支援システ

3 本研究の目的とアプローチ

ムの提案を行っていた．市村らのシステムは，エラー本研究の目的は，メンターが効率的に学習状況を把ログと操作ログをサーバ側で収集して解析し，メン握し，学習者に支援が行うことができるようにするこターにわかりやすく提示するシステムである．市村らとである．これを実現するために，以下の 3 つのこのシステムは，エラーが出た場合はつまずきとして検とを行うシステムを開発する．

知できるが，計算結果が違うというような意図した出• 学習者のつまずき検知力でないという問題には対応していない．

• つまずき解決の難易度ごとに分類 · 選別

井垣ら [3] の研究は，進捗が相対的に遅れている学• 学習状況を整理して表示習者を早期発見しメンターが支援に入ることを目的として教育支援システムを提案していた．このシステ
ムでは，コード数，課題ごとのコーディング時間，単4 予備調査

位時間当たりのエディタ操作数，課題ごとのエラー継学習状況把握支援にあたって，メンターが実際に対続時間をもとにコーディング過程の可視化を行うこと応している学習者からの相談について知るために予で，進捗が遅れている学生の支援を行った．井垣らの備調査を行った．以下は，実施した予備調査の質問項

システムは，課題 1 問がより複雑になり，難易度が上目である．

がった場合に進捗が管理しにくくなる可能性がある．

質問 1 受講生によく聞かれる質問はどのようなも

2. 2 メンターの代替システムに関する先行研究

質問 2 受講生に聞かれた質問のなかで印象に残っのですか

松井ら [5] の研究は，メンターが学習者に話す内容ているものはありますかが知識の伝達と思い出しを促す質問に分類されるこ質問 3 TA として対応しなくても学習者自身で解とを示した．そして，チャットでの対話によって学習決できそうな質問はどのような質問だと思いま者へ知識の伝達や思い出しを促す質問を行い，つまずき解決を試みるシステムを開発した．松井らのシステ
ムでは，学習者が特定の単語をシステムに伝えることすか
質問 4 対応に時間がかかる質問はどのような質問ですかによって対話が始まる．この場合，学習者のつまずき

質問 5 「対応に時間がかかる質問」はどのようにの原因が基礎知識の不足や忘却であるつまづき解決なる/することがあれば，現在よりも短時間で対に限られてしまう．

応することができると思いますか
質問 1 は，質問される頻度の高い優先的に対処し

2. 3 ペアプログラミングにおけるつまずき分析に関する過去の研究なければならない可能性のある質問を知るための質問である．質問 2 は，学習者から TA にされる質問

ペアプログラミングにおけるつまずき解決の成功とを知るための質問である．質問 3 は，学習者からの失敗にみられる会話の違いが平井ら [1] によって分析

質問の中で TA が答えなくても良い可能性のある質されている．それによると，つまずき解決に失敗する問を知るための質問である．質問 4 は，対応に時間ペアは，成功するペアと比べて会話の発話長が長く，がかかる効率化が求められる質問を知るための質問説明の繰り返しが多い．この特徴から，演習形式の講である．質問 5 は，TA が考える対応に時間がかかる

義中につまずきを検知できる可能性があると考える．

質問の原因を知るための質問である．

4. 1 予備調査対象

そして，回答時間を短縮するためには学習者が自身著者らの所属大学で 1，2 年時に開講される演習型の考えをメンターに効果的に伝えられれば対応時間のプログラミング授業で TA 経験がある人にアンケーが短縮できるという回答から，メンターが学習者のト調査を行った．

思考の把握に多くの時間を費やしていることが分かった．ゆえに，メンターが学習者の思考を把握すること

4. 2 予備調査結果を支援することが必要だと考えた．

本稿執筆時点までに 9 件の回答が得られた．回答
結果全体は表 1，表 2，表 3 に示す．主要な回答を以5 提案システム

下で述べる．

本研究では，ペアプログラミングを利用した演習形対応しなくてもよいと思った質問として，() や {}式の授業での学習状況把握支援システムの提案を行の非対応などのケアレスミス，エラー内容を確認する

う．システムのおおまな構造は，図 2 に示す．予備調ことによって解決できそうなもの，基礎知識の不足に査や先行研究から，本研究で提案する学習状況把握支よるものという回答が共通して見られた．回答に時間

援システムは，以下の 3 つの機能を実装することをがかかる質問として，学習者の基礎知識が不足してい検討している．

るときの質問，コードが複雑な場合の挙動に関する質

1. 学習者のつまずき検知機能

問や，メンターがあまり遭遇しないエラーに関する質

学習者のつまずきを検知する機能である．ここに問が挙がった．また，回答に時間がかかる質問はどのおけるつまずきとは，学習者が課題プログラム作ようにすれば対応時間が短縮できると思うかという成で行き詰ることである．この機能はエラーログ

質問では，ケアレスミスをチェックするようなリスト

操作ログと，発話の繰り返しからつまずきを検知を使った対応や，学習者が自身の考えをメンターに効することを検討している．

果的に伝えることをすれば対応時間が短縮できると

2. 学習者のつまずき選別機能いう回答があった．

学習者が自己解決可能なつまずきと，メンターの支援が必要なつまずきを選別する機能である．

4. 3 予備調査考察

学習者とシステムで対話を行うことによって，学調査結果から，エラー内容やケアレスミスなどの確習者自身で解決が可能な問題か，メンターを呼ん認不足が原因の学習者自身で解決できそうな質問もで解決する必要がある問題か推定する．そして，メンターが受けていることが分かった．これらは学習学習者自身で解決が可能な問題ならば，学習者が者にエラー内容やケアレスミスの確認を促すことで，つまずきを解決するための簡易的なアドバイスメンターが受ける質問を支援の必要性が高いものにを行う．メンターを呼ぶ必要があるつまずきなら絞ることができると考えた．

ば，メンターに通知する.

また，今回のアンケートで学習者の基礎知識が不足

3. 学習者の進捗状況表示機能している場合についての言及が多数見られた．基礎知

この機能は，メンターが進捗の遅れている学習者

識の不足は，TA に聞かなくても自己解決可能なことを把握するために，一定時間ごとにエラーログやであり，対応に時間がかかるという認識を TA 経験者

操作ログなどの情報を収集し，常にメンターが学が持っていた．このことから，基礎知識の不足に起因習者の進捗状況を見ることができるようにする．

するつまずきを TA が対応しなくてもよいつまずき

また，全体の進捗を把握することにより，受講しとして選別する必要があると考える．選別方法としてている学習者全体が共通してつまづいている個

は，学習者にシステムを通して簡単な問答を行い，学所が発見できる可能性がある．

習者が基礎知識を思い出すことを促したり，基礎知識が得られる媒体を紹介したりすることが考えられる．

図1

提案システムのつまずき検知から選別するまでの図

図2

提案システムの概要

5. 1 提案システムの理想シナリオ

学習者自身での解決が困難だと判断した場合，システ提案システムのつまずき検知機能とつまずき選別機

ムはメンターに学習者の支援をするように誘導する．

能が理想的に働いた場合，学習者につまずきが発生するとシステムで把握し，学習者自身で解決できそうな

6 今後の課題

つまずきだった場合，システムが学習者のつまずき解

つまずき検知をエラーログ，操作ログから取得して決を助ける簡単なアドバイスをしてつまずき解決をいることを検討しているが，どのような条件でつまずする予定である．選別機能が理想的に働いている様子きとするか決める必要がある．現在，同様のエラーがを図 1 に示す．このとき，メンターに対して，学習者一定時間表示されていた場合，操作が一定時間されながつまづいていることを表示するが，学習者の支援をかった場合をエラーと定義することを予定している．

するように誘導はしない．一方，検知したつまずきが同一のエラーが表示される継続時間や，操作が止まっている継続時間は，仮で時間を設定してシステムを実状況把握支援システムの提案を行った．今後は，つま装したのち，評価実験をすることで決めていく予定でずきの定義の妥当性の検証や，システムの開発を行っある．ていく．

また，ペア間の説明の繰り返しからつまずきを検知する予定である．実現方法として，音声の文字起こ

参 考 文 献しをして，説明の繰り返しが複数回発生した場合つ[1] 平井佑樹, 井上智雄: ペアプログラミング学習における状態の推定 つまずきの解決の成功と失敗に見られる会話の違い, 情報処理学会論文誌, Vol. 53, No. 1(2012),
pp. 72–80.
[2] 市村哲, 梶並知記, 平野洋行: プログラミング演習授業における学習状況把握支援の試み, 情報処理学会論文
誌, Vol. 54, No. 12(2013), pp. 2518–2527.
[3] 井垣宏, 斎藤俊, 井上亮文, 中村亮太, 楠本真二: プロ
グラミング演習における進捗状況把握のためのコーディ
ング過程可視化システム C3PV の提案, 情報処理学会
論文誌, Vol. 54, No. 1(2013), pp. 330–339.
[4] MacDowell, C., Werner, L., Bullock, H., and Fernald, J.: The Eﬀects of Pair-Programming on Performance in an Introductory Programming Course,
ACM SIGCSE BULLETIN, Vol. 34(2002), pp. 38–42.
[5] 松井大成, 伊藤恵: プログラミング行動中の学習者と指導者による対話に基づいた初学者支援システムの提案, 公立はこだて未来大学卒業論文, (2019).

まずきとすることを検討している．この検知機能は，説明の繰り返しを判断するシステムが実現後につまずき検知のタイミングの妥当性を評価する評価実験を行う予定である．
つまずき検知方法の確立の後，システムのプラットフォームを選定し，開発を進めてメンターの学習状況把握の効率化を図る．

7 まとめ
本研究では，少ないメンターで演習形式のプログラ
ミング講義でメンターが学習支援を効率よく行うためには，学習状況把握支援が必要であると考え，学習表1

予備調査回答一覧 (1)

質問番号

質問内容

質問 1

・Eclipse が何かしらの原因で開けない、メニューが見えない
・実行結果はあっているが、提出したら間違っていると言われた (Export 時に間違っている、何かしらのケースを想定していない)・フィールドやコンストラクタなどの使い方・概念の確認 ・ここまではできたが、ここから先何をやればいいのか分からない・関数や構文について、こういう使い方であると理解したがそれが合っているかコードを書いたがチャッ
クプログラムを通らない
指示はわかるがこれをどのようにコードに落とし込めばいいのかわからない

arduino にスイッチを接続した際にうまく動かない．arduino のコンパイルエラーが出る．配線があっているか確認してほしい．
一番聞かれたと思う質問は「自分の書いたプログラムが思うように動かないのだが、どこに原因があるか？」という内容の質問でした。
他には「C のポインタやアドレスって何ですか？」や「何でこのエラーが出ているか分かりますか？」という質問がよく聞かれたと思います。
・演習の内容をどのように実装していいか分からない・eclipse のパッケージなどを見ることができる部分が消えてしまった
・HOPE に提出した際にエラーメッセージが表示されたが，修正箇所が分からない「プログラムがエラーを起こしてうまく動かない」という内容
この問題の解き方が分かりません．
この問題はここまではわかったんですが，ここから先はわかりません．
この問題の回答の仕方はこれで合っていますか？
何をしていいかわからない

list に要素を追加する方法がわからない (配列との違いがわからない)・問題の意味がわからない・配列とは何か
・作業用変数とはなにか・コンストラクタとはなにか
・インスタンスとはなにか
・変数の初期化とはなにか・関数（メソッド）の作り方
・引数とはなにか・戻り値とはなにか

表2

質問 2

予備調査回答一覧 (2)

ここまではできたが、ここから先何をやればいいのか分からない
プログラミング基礎でポインタを使えると何が嬉しいのかという質問
すみません，あまり思い出せませんでした．
あまり聞かれることはなかった質問ですが、既に問題が解けた状態で「自分の書いたプログラムは正しいというか、変なところはないか？」や「これで提出しても大丈夫なプログラムなのか？」、「他にどのような書き方があるのか？」というような質問がありました。
・全空港の数と全空港の総滑走路数と平均の滑走路数を表示する課題にて，平均の滑走路数を求めることができているのに，全空港の数が表示できないという質問→平均の滑走路数をどのように求めたかを確認したところ解決した・コンストラクタの作成でエラーが出たという質問→コンストラクタ内で不要な処理をしていたことが原因だったので HOPE の課題ページを確認するように促したところ解決した配布されたひな形のコードを参考にしてうまくいかないという内容の質問で，原因がひな形のコードのバグであったこと
特になし

Java の this が何を指すのかわからない
スタックオーバーフローってエラーが出たけどなんのことかわからない
クラスを二つ選択してエクスポートするやり方がわからない
・何をすれば良いかわからない
質問 3

資料のコードを写すだけで動くコードのミス．大体の場合が打ち間違って正常に動作しない．
授業中に説明されている内容に関する質問は学習者自身で解決できそうな質問だと思っていました。
なので、「int 型や double 型って何ですか？」や「for 文はどういう動きをするんですか？」というような質問が来たときは、自分で簡単な説明をした上で、講義で使用しているスライドに詳細な説明があるので、そちらを参考にすると良いと伝えていました。

eclipse や HOPE の特定のエラーはエラー内容から修正箇所を知ることができるので学習者自身で解決ができると思います．
また，課題ページを見返すことで解決が可能な質問も学習者が行き詰まった段階で見直すようにすることで解決が可能だと思います．
エラーメッセージを学生が読んでいないと思われる質問
特になし
変数名のスペルミスは、なぜかエラーが起きる、コンパイルが通らない時のチェック項目などに入れておけば自己解決可能だと思う。
講義資料や問題文に書いてあること全般．
また，既習の範囲で，プログラミングに関する基礎的な知識について

表3

質問 4

予備調査回答一覧 (3)

何をやればいいのか分からない (ヒントを出しても出したヒントを理解できない程度に基礎知識がない場合)
うまくいかない原因が複数あるような質問 (バグ、構文ミス、そもそも講義内容を理解していないといった要因が複数絡む様なもの)・PC のトラブル関連の質問・学習者が解いている問題外の要因に起因する
質問
見たことのないエラー文．おそらくコードではなくハードウェア関係の問題．そもそも arduino の機器自体に問題がある場合が多いのでどうしようもない．
複雑なプログラムを記述しているときの「予想している挙動と違うのはなぜか？」という質問や、自分でもあまり見たことのないエラーで詰まっているときにどうやって解決するかという内容の質問が来たときは対応に時間がかかっていました。
試行錯誤した結果，学習者自身も内容が分からなくなってしまった際にされる「 の課題の が分かりません」のような質問
学生にアイデアがない質問「〜が全く分からない」など解答のとっかかりが全くつかめないのですが，この問題はどう解いたらいいですか？
そもそも前提となる基礎知識が欠けている場合、「なんだかよくわからない」という曖昧な質問がくるので、前提知識から教える必要があるため時間がかかります。例えば、Java のクラスの概念があまり理解できていない場合、質問の対応の前に、そこを 1 から教えて理解してもらう必要があります。
・何をすればよいかわからない

質問 5

・学習者が、プログラミングを行う上で基礎的な概念を理解する・教授者が、口頭だけでなく図的な解説をする
初めの一つに関してはわからないところのヒアリングをしっかりすれば、時間をある程度短縮できる気がします。しかし、講義内容や今までにやってきたことを理解していない学生に関しては手の打ちようがないです。PC やその他のトラブルに関しては事前に一律の環境でコードを実行できる様にすると問題が起こりにくくなり、対応時間も短縮できると思いました。
一度見たことのあるものであれば，記憶の海を遡って対応できるかもしれない．確証はないです．
初歩的な部分でミスをしていることもあるので、「；を忘れていないか」や「() やの数があっているか」、「全角の文字やスペースが混ざっていないか」などの質問する前に自分で確認することのリストみたいなものがあれば、無駄に時間をかけてしまうことが減ると思います。
また、コンソールに最終的に出力するものだけを出力するのではなく、処理の途中でどの変数にどんな値が入っているのかを printf() とかを使って確認するようにすれば、受講生/TA ともに原因の特定とその解決にかかる時間を減らせるのではないかと思います。
学習者がどのように考えたかを TA に上手く説明することができれば原因が分かるまでの時間が短くなると思います．
全体的な方針や考え方のみを伝えて，具体的な実装方法は学生に考えさせる
解答におけるとっかかりをヒントとして公開してくれればある程度はましになるかなと思います．
その演習の回で理解すべき部分が曖昧の状態では、次の演習回に進めないようにする。
もしくは、基本的な問題文をよく読むことを促す