情報処理学会研究報告
IPSJ SIG Technical Report

プログラミング演習のデバッグに対する過去のエラー情報に基づいた助言の可能性に関する分析
高橋圭一 1
概要：プログラミング演習中に講師が巡回していると，過去に似たようなエラーに対応したことを思い出すことがある．学生が起こすエラーの類似性について 2019 年と 2020 年に開講した同一のプログラミング科目で調べたところエラーの分布はほぼ等しいことが確かめられた．そこで，我々は学生が起こしたエラーに講師がデバッグ方法を付加したデータベースを用意することで，類似するエラーを発生した学生にデバッグ方法を助言するシステムが構築できると考えた．本稿では，実際にシステム開発を進める前に予備調査として，近畿大学産業理工学部情報学科の 3 年生を対象とした Web プログラミング科目において，2021 年に収集したエラー情報をもとに 2022 年の同科目のエラー情報に対して助言が可能かどうかを調べた．結果として，2022 年に発生した 248 件の誤り情報のうち 76 件（31%）に対して助言が可能であることがわかった．
キーワード：プログラミング教育，デバッグ支援，エラーメッセージ

Analyze the possibility of advice based on historical error
information for debugging during programming exercises
KEIICHI TAKAHASHI†1
Abstract: When making the rounds during programming exercises, the instructor may recall handling similar errors. We comparederrors made by students in the same programming courses in 2019 and 2020 and found that errors were almost identical. Therefore,
if we prepared an error database that added debugging methods to the errors made by students, we could advise students who
encounter similar errors in the future on how to remove bugs. In this paper, as a preliminary experiment, we examined the possibilityof advising students in a Web programming course for third-year students at Kindai University in 2022 based on the error databasecollected in 2021. As a result, we found that advice was possible for 76 (31%) of the 248 errors that occurred in the 2022 class.
Keywords: Programming Education, Debugging Support, Error Messages

1. はじめに提示システムから構成されている．以下，それぞれについて説明する．

プログラミング演習中に講師が巡回していると，過去に似たようなエラーに対応したことを思い出すことがある．

（a)エラー情報収集ツール

教授内容が同じであればプログラミング演習の基本的な手順は同じであるため，翌年の同演習で類似したエラーが発学⽣（過去）

講師

生する可能性が考えられる．2019 年と 2020 年に開講した

課題
提出

助⾔
付加

同一のプログラミング科目でエラーの発生状況を比較した

デバッグDBところ，エラーメッセージの発生割合は両年でほぼ同じ傾

エラーメッセージ

ソースファイル
ソースファイル
ソースファイル

デバッグ⽅法向であった[1]．このことから発生割合が多いエラーメッセージ，つまり多くの学生が発生したエラーは未来において（b)デバッグ⽅法提⽰システムも発生する可能性が高いことを示唆している．

①類似エラー情報抽出②デバッグ⽅法提⽰

我々はこの考えをもとに，過去に学生が発生したエラー
情報を収集し，そのエラー情報にデバッグ方法を関連づけたデータベースを構築し，未来において学生が発生したエ

エラー情報
エラーメッセージ

エラー
発⽣

学⽣ (未来)ラーに最も近いエラー情報のデバッグ方法を提示すること
により，学生自身によるエラーの自己解決を促す支援シス

ソースファイル
ソースファイル
ソースファイル

図 1

エラー自己解決支援システム

テムの開発を目指している．図 1 にシステムの概要を示す．

エラー情報収集ツール（図 1(a)）：プログラミング演習中に本システムは，(a)エラー情報収集ツールと(b)デバッグ方法

学生がエラーを発生するとその時点のソースファイルを自

1 近畿大学産業理工学部情報学科
Kindai Universityⓒ2023 Information Processing Society of Japan1

情報処理学会研究報告
IPSJ SIG Technical Report
動的に保存するツールである[1]．ソースファイルの保存にの他は第 9〜11 回の資料に書かれているため，講義資料とはバージョン管理ソフトウェアの 1 つである Git を利用す

しては目隠しをした状態で配布し，講義を聞きながら各自る．エラーメッセージは Web アプリケーションのログファ

で空欄を埋めさせる．Web アプリケーションを完成させる

イルに記録されるため，そこから抽出する．このログファ

までの操作手順は講義資料の目隠しの白枠を 1 ステップとイル中のエラーメッセージと Git リポジトリに保存された

すると 24 ステップである．

ソースファイルをエラー発生時刻で関連づけ，さらに学生

Rails は MVC（Model-View-Controller）アーキテクチャをがつまずいたときに与える講師の助言をデバッグ方法とし採用しているため，Web アプリケーションを構築するためて付加する．

には，MVC の各ファイルにプログラムを記述する必要がこのようにエラー情報とデバッグ方法を関連付けて収ある．そのため，学生は URL と呼び出すプログラムを紐つ集したデータベースを本稿ではデバッグ DB と呼ぶ．本ツけるルーティングファイル，Ruby で書かれたコントローラールは既に完成しており，2019 年からプログラミング演習

ファイル，HTML と Ruby を混在して記述するビューファ

科目で使用しエラー情報を収集している．

イルなど合計で 6 つのファイルにプログラムを記述する必

デバッグ方法提示システム（図 1(b)）：エラー発生時のソー要がある．そのため，単一ファイルのプログラムと比べてスファイルとデバッグ DB に登録された過去の学生のソープログラムの入力誤りが発生しやすい傾向がある．

スファイルを比較し，類似度が最も高いエラー情報を抽出する．これを類似エラー情報抽出機能（図 1①）と呼ぶ．
この機能の実行結果で得られたエラー情報に関連づけられたデバッグ方法を学生に提示するのがデバッグ方法提示機
能（図 1②）である．本システムはこれから開発する予定であるが，類似エラー情報を抽出するアルゴリズムについては既に提案している[2]．
本稿では，エラー自己解決支援システム（図 1）の開発に着手する前の予備調査として，既に収集しているエラー
情報をもとに，過去のエラー情報から未来に発生したエラ
図 2ーに対してデバッグの助言が可能か調査する．以下，2 章に調査方法を述べ，3 章に調査結果を示す．4 章にて調査結果について考察し，最後にまとめる．

2. 調査方法
2.1 調査対象

第 12 回の講義資料の例

2.3 類似エラー情報抽出アルゴリズム
図 1 に示した類似エラー情報抽出機能のアルゴリズムについて述べる[2]．本アルゴリズムは提案済みであるが，本稿の議論に関わるため本節にて説明する．
学生の提出物に含まれるソースファイル群をエラー発

近畿大学産業理工学部情報学科 3 年生対象の Ruby によ

生ごとに作成したディレクトリに格納する．2021 年と 2022

る応用プログラミングを学習する科目の第 12 回を調査対

年のディレクトリ同士を diff コマンドで比較し類似度を算象とする．本科目は講義と演習が連続した 2 コマ（180 分）

出する．diff コマンドは片方のディレクトリのみに存在すの授業である．学生は 1 年次より Ruby の基礎を学習してるファイル数，および，同じファイル名の内容の差分行数

おり，さらに本科目の第 1〜8 回までに様々な応用プログを出力する．同じファイル名の内容の差分情報として，diff

ラミングを学び，第 9〜11 回に Web アプリケーションフレ

コマンドは追加(added)・削除(deleted)・変化(changed)を区別

ームワークの１つである Ruby on Rails（以降，Rails）プロ

して出力するが，本アルゴリズムではすべて差分行数としグラミングの基礎を学ぶ．第 12 回では Rails アプリの応用てカウントする．なお，プログラム以外を比較対象から除例として，画像ファイルをアップロードする Web アプリケ外するため，空白，タブ，コメント，空行を除去した後，ーションを開発する．

diff コマンドを実行する．

2021 年および 2022 年の本科目の提出物に含まれたエラ

ファイル比較する 2 つのディレクトリのうち片方にのみ

ー情報およびソースファイルを調査対象とする．課題を提存在するファイル数を Ddiff とし，同一ファイル名の差分行出した人数はそれぞれ，2021 年は 67 名，2022 年は 50 名で数を Fdiff とする．これら 2 つの指標を用いて以下のルールあった．

を順次適用し，類似度が最も高いエラー情報を決定する．

2.2 プログラミング演習中の操作手順
調査対象である第 12 回の講義資料の例を図 2 に示す．

(1)

Ddiff が最小であるエラー情報が 1 つである

(2)

Ddiff が最小，かつ，Fdiff が最小であるエラー情報が本講義で新たに学ぶ画像アップロード機能を実現するプログラムについては講義資料に詳細が記載されているが，そⓒ2023 Information Processing Society of Japan

1 つである(3)

以上で 1 つに絞れない場合は，それまでの候補の最2

情報処理学会研究報告
IPSJ SIG Technical Report
古のエラー情報を最も類似するエラー情報とする

生自身で誤りに気づくことが期待できるため助言可能と判

本アルゴリズムの実行例を図 3 を用いて説明する．

定する．

2022 年に C1〜C3，2021 年に P1〜P3 とそれぞれ 3 つずつ

表 2

エラー情報があるものとする．ここでいうエラー情報とは

ファイル名

index.html.erb

ディレクトリであり，ディレクトリにはエラー発生時のソ

エラーメッ
セージ

ActionView::Template::Error

助⾔対象
コード

1:<% @Images.each do |image| %>2:<p><%= image.title %>3:<%= image_tag "/get_image/#{image.id}" %>4:<%= link_to '削除', "/bookmarks/#{book.id}",
method: :delete %>5:<%= link_to '編集',"/bookmarks/#{book.id}/edit" %>6:</p>7:<% end %>8:<p><%= link_to '新規追加', '/images/new' %></p>

ースファイルが 1 つ以上格納されている．図 3 は 2022 年のエラー情報 C1 に最も類似する過去のエラー情報を決定する例である．まず，C1 と P1，P2，P3 について Ddiff と Fdiffを求める．その後，ルール(1)より Ddiff を調べると最小は P1と P2 でエラー情報は 1 つに絞れない．そこでルール(2) より P1 と P2 の Fdiff を比較すると，P2 が最小であるため C1

ブロック引数bookはブロック内の変数(image)と同じである必要があります．以下の例では|book|を|image|に変更するとよいです．

に最も類似するエラー情報は P2 と決定できる．もし，両者の Fdiff が同値であれば，ルール(3)により，最古のエラー情報である P1 が最も類似するエラー情報となる．
2022年

図 3

C1

C2

C3

Ddiff:0 Fdiff:2

Ddiff:0 Fdiff:1

Ddiff:1 Fdiff:4

P1

P2

P3

助言の可能性の検証例（助言可能と判定）

助⾔内容

1:<% @image.each do |book| %>2:<%= link_to image.title %>3:<%= image_tag "/get_image/#{image.id}" %>4:<% end %>5:<p><%= link_to '新規追加', '/images/new' %></p>

3. 調査結果
3.1 ファイル別のエラーの発生割合
エラー情報をエラーが発生したファイル名別に集計する．
「エラーファイル名とエラーメッセージ」の組み合わせ

2021年

を 1 種とすると，2022 年には 22 種（248 件）のエラーが発

類似エラー情報抽出アルゴリズムの適用例

生し，2021 年には 18 種（236 件）のエラーが発生した．
このうちエラー発生件数の上位 7 種を表 1 に示す．エラ

2.4 助言の可能性の判定方法
2021 年のエラー情報をもとにデバッグ DB を準備する．

ー件数はそれぞれ，2022 年は 222 件，2021 年は 192 件であ前節のアルゴリズムで 2022 年に発生したエラー情報に最った．全エラー件数に対する各エラーの発生割合を知るたも類似したエラー情報を決定し，そのエラー情報に関連づ

め表 1 には発生件数ではなく相対度数を示している．2022

けられたデバッグ情報を得る．このデバッグ方法が 2022 年

年および 2021 年ではともに，ビューファイルの 1 つであに発生したエラーのデバッグ方法の助言として適切か筆者

る index.html.erb で発生した ActionView::TemplateError が最が判断する．

多であったことがわかる．さらに累積相対度数より上位 7

表 2 をもとに助言の可能性の検証例を示す．表 2 では

種のエラーが全エラーのほぼ 9 割を占めることがわかる．

index.html.erb というファイルで学生が「助言対象コード」

2021 年も同様の傾向である．以下，この上位 7 種のエラー

を 入 力 し ， Web ア プ リ ケ ー シ ョ ン を 実 行 し た と こ ろについて分析を進める．

ActionView::Template::Error というエラーに遭遇した状況を

3.2 エラー別の助言の可能性表している．このエラー情報に対して，前節の類似エラー

表 1 の上位 7 種のエラーをもとに，エラーファイル名・

情報抽出アルゴリズムを適用した結果，「助言内容」に示さ

エラーメッセージが同じエラー情報のソースファイル群をれたコードおよび助言が得られたとする．
「助言対象コード」

2.3 節のアルゴリズムで比較し，類似度が最も高いエラー情は「助言内容」のコードと同様に，Ruby のブロック引数と報を決定する．そのエラー情報に対して 2.4 節の方法で助ブロック内で使用している変数名が異なることで発生した言の可能性を判定した結果を表 3 に示す．

エラーであり，「助言内容」に示された助言を読むことで学
表 1

ファイル別のエラーの発生割合（上位７種）
2022年

No.

エラーファイル名

エラーメッセージ

相対度数

2021年

累積相対度数

相対度数

累積相対度数1

index.html.erb

ActionView::Template::Error

33.6%

33.6%

42.7%

42.7%

2

index.html.erb

SyntaxError

17.0%

50.6%

6.8%

49.5%

3

images_controller.rb

NameError

10.5%

61.1%

9.1%

58.6%

4

images_controller.rb

ActionController::RoutingError

9.9%

71.0%

2.9%

61.5%

5

images_controller.rb

NoMethodError

9.0%

79.9%

9.7%

71.2%

6

debug_exceptions.rb

ActionController::RoutingError

5.9%

85.8%

7.4%

78.6%

7

images_controller.rb

SyntaxError

3.7%

89.5%

2.6%

81.2%

ⓒ2023 Information Processing Society of Japan3

情報処理学会研究報告
IPSJ SIG Technical Report
表 3

エラーファイル名・エラーメッセージ別の助言可能

No.

エラーファイル名

誤り要因の多くは「入力間違い」であった．「入力間違い」が多ければ助言の可能性が高まると考えるが， 2 番目に多件数（2022 年）
助⾔可能件数

エラーメッセージ

い index.html.erb で発生した SyntaxError では「入力忘れ」

1

index.html.erb

ActionView::Template::Error

49

(88)

2

index.html.erb

SyntaxError

13

(33)

3

images_controller.rb

NameError

9

(24)

4

images_controller.rb

ActionController::RoutingError

1

(32)

考えられる．つまり，Ruby などのスクリプト言語ではプロ

5

images_controller.rb

NoMethodError

2

(21)

グラム実行時に処理系がコンパイルし実行する．エラーが6

debug_exceptions.rb

ActionController::RoutingError

0

(19)

7

images_controller.rb

SyntaxError

が多くを占めており，一貫性が見られない．
これはエラー発生の仕組みを考えると当然の結果とも

2(5)

最多であった ActionView::Template::Error では，テンプレー

76

(222)

トエンジンが HTML を生成する過程で誤りを発見すると

表 3 の括弧内の数値は当該エラーの発生件数である．上

エラーが発生する．誤り要因が同じであっても誤りを含む

位 7 種のエラーは全部で 222 件発生し，そのうち 76 件（34%）

ファイルが異なれば処理する主体が変わるため，異なるエが助言可能であった．7 種のエラーのうち index.html.erb でラーが発生する．

合計発生した ActionView::TemplateError が最多で 88 件発生し，そこで，誤り要因別に助言の可否を調査した（表 5）．
「入そのうち 49 件（56%）が助言可能であった．続いて多いの力忘れ」と「入力間違い」は発生件数が多く，助言可能件

は index.html.erb で発生した SyntaxError で 33 件発生し，そ数が多いことがわかった．「入力多すぎ」「場所間違い」はのうち 13 件（39%）が助言可能であった．

そもそも発生件数が少ないことから，講義資料の見間違い

この表より，ビューファイルである index.html.erb が他のなど偶発的に発生するものと考えられる．そのため，再現ファイルと比べてエラーが発生しやすく助言が成功する傾性が低く過去のエラー情報による助言が不可だったことが向が見られる．ビューファイルでは HTML を生成するため考えられる．一方，「入力忘れ」と「入力間違い」についてプログラム行数が増加傾向にあり，そのため入力誤りが発は，まさに本研究の動機となった「過去に似たようなエラ

生しやすくなる．一方，プログラム行数が増えることで特ーに対応したことを思い出す」の事例であると考えられる．

徴的な情報量が増え，過去の類似するエラー情報と適合し頻度よく発生する誤りであるため，その誤り要因で発生しやすくなることが考えられる．

たエラー情報がデバッグ DB に豊富にあるため，助言の可3.3 エラー別の誤り要因と助言の可能性

能性が高まったと考える．

前節でエラーファイル名とエラーメッセージ別に助言

表 5

誤り要因ごとの助言の可否（2022 年）の可能性について検証したところ，偏りがあることがわか助⾔った．本節ではこの助言可能性に影響する因子を調べる．

誤り要因

可能

不可

各エラーが発生した誤り要因を類別したところ，学生に

入力忘れ

23

10

よる誤り要因は 5 つに分類できることがわかった（表 4）．

入力多すぎ

0

3

ここで挙げた誤り要因によって助言の可能性は変化するだ

入力間違い

50

23

ろうか．エラー別の誤り要因を示す（図 4）．

場所間違い

1

6

実行方法間違い

0

2

表 4
No.

エラー別の誤り要因

誤り要因

4. 考察

誤り例

1

入力忘れ

ブロックのendや閉じタグの記入忘れ

2

入力多すぎ

不必要な文字や記号を入力している

3

入力間違い

ミススペル（入力場所は正しい）

本稿の調査では 3.2 節で述べたように，上位 7 種のエラ

4

場所間違い

入力場所が違う（コードは正しい）

ーにおいて 222 件中 76 件（34%）が助言可能であった．講5

実行方法間違い

呼び出しURLが間違い（コードは正しい）

師がデバッグ方法を付加する手間はあるものの，過去のエ

4.1 過去のエラー情報に基づいた助言の可能性

ラー情報をそのまま利用して類似度を計算する単純な方式
index.html.erb_ActionView::Template::Errorにも関わらず，2022 年のプログラミング演習で発生したエ

index.html.erb_SyntaxError

ラーの 3 割に助言が可能であったことは良好な結果と考え

images_controller.rb_NameError
images_controller.rb_ActionController::RoutingError

る．一方，2022 年のエラー情報は全部で 248 件発生したた

images_controller.rb_NoMethodError

め，実質的に助言可能であったのは 31%になる．講師がデdebug_exceptions.rb_ActionController::RoutingError

バッグ方法を付加してもその 7 割が学生によるエラーの自images_controller.rb_SyntaxError
0
⼊⼒忘れ

図 4

⼊⼒多すぎ

⼊⼒間違い

10

20

30

場所間違い

40

50

60

70

80

実⾏⽅法間違い

エラー別の誤り要因（2022 年）

index.html.erb で発生した ActionView::TemplateError のⓒ2023 Information Processing Society of Japan

己解決に利用されないのは効率が悪い．何らかの工夫によって助言の可能性は高められるのだろうか．そこで，今回の調査結果をもとにエラー別に助言可能／失敗であった代
表例を振り返り，助言の可能性を高める対処方法について4情報処理学会研究報告
IPSJ SIG Technical Report
検討する．

だった 13 件の代表例を表 8 に示す．両者に共通する誤り

4.1.1 index.html.erb の ActionView::TemplateError に対するは「<%= link_to」に対応する閉じタグ「%>」の入力忘れで助言ある．入力を忘れた閉じタグはわずか 2 文字である．しか3

表よ り ， index.html.erb

で 発 生 し た

し，その他のプログラムが類似していて，かつ，閉じタグ

ActionView::TemplateError では 49 件が助言可能であった．

が欠落している特徴があるため，最も類似しているエラー

このうち 44 件が表 6 に示すエラーであった．着色した部情報として抽出に成功したと考えられる．

分が両者の差異であるが，異なる間違い方をしていること

表 8がわかる．それでも，同じ部分と異なる部分の位置がほぼ

ファイル名

index.html.erb

同じであるため，差分情報が小さくなり適合しやすかった

エラーメッ
セージ

SyntaxError

と考える．
表 6

index.html.erb・ActionView::TemplateError の助言成
功例

ファイル名

index.html.erb

エラーメッ
セージ

ActionView::Template::Error

助⾔対象
コード

<% @images.each do |image| %><p><%= image.title %><%= image_tag "/get_image/#{e.id}" %><%= link_to '削除', "/images/#{image.id}",method: :delete %><%= link_to '編集', "/images/#{image.id}/edit" %></p><% end %>（2022年）<%= link_to '新規追加', '/images/new' %>

最類似
エラー情報
（2021年）<% @image.each do |book| %><p><%= link_to image.title %><%= image_tag "/get_image/#{image.id}" %><%= link_to '削除', "/images/#{book.id}", method: :delete %><%= link_to '表示', "/images/#{book.id}" %><%= link_to '編集', "/images/#{book.id}/edit" %></p><% end %><p><%= link_to '新規追加', '/images/new' %></p>

同じ対象で助言に失敗した例を表 7 に示す．表 6 のプ
ログラムと比べると，こちらの方が両者のプログラムが似ているように見える．差分行数はわずか 1〜2 行である．しかし，実は助言として示された 2021 年の index.html.erb に

助⾔対象
コード
（2022年）

最類似
エラー情報（2021年）（表 9 エラー ! ブックマークが自己参照を行っています。
）．この事例の助言のプログラムは閉じタグのミスではなく，引用符の記号誤りによるエラーであるため助言は失敗と判定する．同じ誤り要因であったとしても，その周辺のプログラムの類似具合によって必ずしも適切な過去のエ
ラー情報が抽出できない場合があることを示している．
表 9

index.html.erb

エラーメッ
セージ

SyntaxError（2022年）

index.html.erb のローカル変数@images が nil となりエラー算出されるため，エラーが発生したソースファイルの類似度が高くても助言に失敗する可能性がある．
表 7

index.html.erb・ActionView::TemplateError の助言失敗例

index.html.erb・SyntaxError の助言失敗例

ファイル名

ントローラファイルのプログラムに誤りがあるため，判定する．複数ファイルの差分行数の総計が類似度として<% @images.each do |image| %><p><%= image.title %><%= link_to '削除', "/images/#{image.id}",</p><% end %><p><%= link_to '新規追加', ‘/images/new' %></p>って発生したエラーであっても助言に失敗することがあるはプログラム誤りはない．データフローで上流にあたるコる助言は「助言対象コード」とは異なるため助言は失敗と<% @images.each do |image| %><p><%= image.title %><%= link_to ‘削除’, “/images/#{image.id}”, method:</p><% end %><%= link_to '新規追加', '/images/new' %>一方，同様に閉じタグ「%>」の入力忘れ（赤矢印）によ

助⾔対象
コード

が発生した事例である．そのため，このプログラムに対す

index.html.erb・SyntaxError の助言成功例

最類似
エラー情報
（2021年）<% @images.each do |image| %><p><%= link_to image.title %></p><p><%= link_to '削除', "/images/#{image.id}",
method: :delete %></p><p><%= link_to '編集', "/images/#{image.id}/edit"</p><% end %><p><%= link_to '新規追加', '/images/new' %></p><% @images.each do |image| %><p><%= link_to image.title %><%= image_tag “/get_image/#{image.id}” %><%= link_to ‘削除‘, “/images/#{image.id}“, method: :delete %><%= link_to ‘表示‘, “/images/#{image.id}” %><%= link_to ‘編集‘, “/images/#{image.id}/edit” %></p><% end %><p><%= link_to ‘新規追加‘, ‘/images/new’ %></p>

4.1.3 images_controller.rb の NameError に対する助言
この事例は前の 2 例とは異なり Ruby で書かれたコント
ローラファイルで発生した NameError の例である．こちら

ファイル名

index.html.erb

は助言可能件数が 9 件と 3 番目に多い事例である．助言に

エラーメッ
セージ

ActionView::Template::Error

成功した表 10 の助言対象コードでは，ローカル変数 file に

助⾔対象
コード

<% @images.each do |image| %><p><%= image.title %><%= link_to '削除', "/bookmarks/#{book.id}", method: :delete %></p><% end %>（2022年）<%= link_to '新規追加', '/images/new' %>

最類似
エラー情報

<% @images.each do |image| %><p><%= image.title %></p><% end %>（2021年）<%= link_to '新規追加‘, '/images/new' %>初期値を代入する前に @image.update メソッドで file を使用したため発生したエラーである．類似エラー情報でも，
Image.new で変数 title を使用しており，メソッドの引数を使用する前に値をセットしたかを確かめる助言を学生に提示することでデバッグできる可能性があるため，助言に成功と判定した．

4.1.2 index.html.erb の SyntaxError に対する助言
index.html.erb で発生した SyntaxError であり，助言可能ⓒ2023 Information Processing Society of Japan5

情報処理学会研究報告
IPSJ SIG Technical Report
表 10

images_controller.rb・NameError の助言成功例

ファイル名

images_controller.rb

エラーメッ
セージ

NameError

助⾔対象
コード（2022年）

最類似
エラー情報（2021年）（省略）
def update@image = Image.find(params[:id])title = params[:image][:title]@image.update(title: title, file: file)
file = params[:image][:file].read
redirect_to '/’
end
（省略）
（省略）
def create
file = params[:image][:file].read@image = Image.new(title: title , file: file)image.save
redirect_to '/’
end
（省略）

様々であり，プログラム入力を間違える場所も様々である
ため，類似するエラー情報を発見できる可能性を定量的に見積もることは困難である．
コードクローン研究では，様々な類似プログラムの探索方法が提案されている[3]．しかし，研究対象の多くがが文法的に正しいプログラムを対象としている．本研究で対象としているプログラムには誤りが含まれているため，正しいプログラムと比べると記述の自由度は高くなり，類似したプログラムを発見することは困難になる．
本稿にて実際に集めたデータを利用して調査を進めた
結果，本手法の問題点が 1 つ見えてきた．2.3 節に示した現状のアルゴリズムでは，類似するエラー情報を抽出するためには，学生がプログラミング演習で入力した全ファイル

一方，表 11 の例では，助言対象コードは変数@file にデの差分情報を求める．4.1 節で示したように，エラーが発生

ータをセットしているものの，@image.update メソッドの引したファイル以外の類似度が高い影響で誤ったエラー情報

数に@を除いた file という変数を指定している誤りである．

が抽出されてしまう可能性があった．類似度を算出するた

このエラーに対する助言は，変数 title に値をセットせずにめの差分情報を求めるファイルを，エラーが発生したファ使用している誤りである．変数名を@file と間違っていたと

イルおよびデータフローで上流にあるファイルに限定する

しても，学生としては「@file = params[:image][:file].read」

ことで，適切なエラー情報に適合できる可能性が高まり，という代入文を記述しているため，与えられる助言から誤より適切な助言が可能となることが考えられる．

りに気づくのは困難と考えられる．
表 11

images_controller.rb・NameError の助言失敗例

ファイル名

images_controller.rb

エラーメッ
セージ

NameError

助⾔対象
コード（2022年）

最類似
エラー情報（2021年）

5. まとめ
本稿では，近畿大学産業理工学部情報学科の 3 年生を対象とした Web プログラミング科目において，2021 年に（省略）
def update@image = Image.find(params[:id])title = params[:image][:title]@file = params[:image][:file].read@image.update(title: title , file: file)
redirect_to '/'
end
（省略）
（省略）
def create
file = params[:image][:file].read@image = Image.new(title: title , file: file)image.save
redirect_to '/’
end
（省略）

4.2 助言の可能性を高める対処案

収集したエラー情報をもとに 2022 年の同科目のエラー情報に対して助言が可能か調査した．結果として，2022 年に発生した 248 件の誤り情報のうち 76 件（31%）に対して助言が可能であることがわかった．
本手法は，講師がデバッグ方法を付加する手間はある
ものの，過去のエラー情報をそのまま利用して類似度を計算する単純な方式にも関わらず，2022 年のプログラミン
グ演習で発生したエラーの 3 割に助言が可能であったことは良好な結果と考える．一方，講師がデバッグ方法を付加してもその 7 割が学生によるエラーの自己解決に利用されないのは効率が悪いと考える．

前節では，助言が可能であった代表的な事例を示しなが今後，エラー情報の類似度の算出方法を改善するな

ら，助言が可能であった要因を検証した．このことを踏まど，助言の可能性を高める方法を検討したい．また，最終

えて，本手法において，助言が可能となる要件を整理する的には，プログラミング演習中に学生が発生したエラーにと，以下の 2 つが考えられる．

対して自己解決を促す支援システムを開発していきたい．

l

デバッグ DB に類似するエラー情報が存在する

l

デバッグ DB から誤り要因が同じエラー情報を発見抽出できる

本手法では，あらかじめ助言を用意しておく必要がある
ため，プログラミング演習で初めて発生した種類のエラーは助言できない．一方，前節に示したように，デバッグ DBに類似するエラー情報があったとしても，複数ファイルの差分行数を積算して類似度を決定するため，必ずしも同じ

参考文献
[1]

高橋圭一：ログファイルと Git リポジトリを用いた Ruby on
Rails の初学者の躓き要因の分析,情報教育シンポジウム 2020
論文集, pp. 69-74 (2020).
[2] 高橋 圭一：Web アプリケーション開発フレームワークの学習進度推定ツール, ソフトウェア工学の基礎ワークショップ
2021 論文集, pp. 97-102 (2021).
[3] 崔恩瀞, 藤原裕士, 吉田則裕，水野修：コードクローン検索手法の調査, コンピュータソフトウェア, 39(3), pp. 3_47-3_59(2022).

症状のエラー情報を抽出できるとは限らない．誤り要因はⓒ2023 Information Processing Society of Japan

6