(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022135795
(43)【公開日】2022-09-15
(54)【発明の名称】分析装置、分析方法及び分析プログラム
(51)【国際特許分類】
G06Q 50/20 20120101AFI20220908BHJP
G06F 8/77 20180101ALI20220908BHJP
【FI】
G06Q50/20
G06F8/77
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2021035852
(22)【出願日】2021-03-05
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(71)【出願人】
【識別番号】899000068
【氏名又は名称】学校法人早稲田大学
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】井田 安俊
(72)【発明者】
【氏名】寺本 純司
(72)【発明者】
【氏名】八木 哲志
(72)【発明者】
【氏名】後藤 正幸
(72)【発明者】
【氏名】中澤 真
(72)【発明者】
【氏名】梅澤 克之
【テーマコード(参考)】
5B376
5L049
【Fターム(参考)】
5B376BC38
5B376BC69
5L049CC34
(57)【要約】
【課題】学習中に、学習者の進捗状況をリアルタイムで分析することができる。
【解決手段】進捗分析装置30は、学習者が使用する学習装置のプログラミング学習システムから、ソースコードを取得するソースコード取得部31と、ソースコードを基にプログラムの各構成要素を分析する構成要素分析部32と、構成要素分析部32が分析した構成要素の個数を基に、学習者の進捗の逸脱度を分析する逸脱分析部33と、逸脱分析部33による分析結果を出力する逸脱者情報提示部34と、を有する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
学習者が使用する学習装置のプログラミング学習システムから、ソースコードを取得する取得部と、
前記ソースコードを基にプログラムの各構成要素を分析する第1の分析部と、
前記第1の分析部が分析した構成要素の個数を基に、前記学習者の進捗の逸脱度を分析する第2の分析部と、
前記第2の分析部による分析結果を出力する出力部と、
を有することを特徴とする分析装置。
【請求項2】
前記第2の分析部は、前記第1の分析部が分析した構成要素の個数と、学習者全体の構成要素の平均個数とを用いて、前記学習者の進捗の逸脱度を分析することを特徴とする請求項1に記載の分析装置。
【請求項3】
前記第2の分析部は、前記第1の分析部が分析した構成要素の個数を基に、学習者別の構成要素別個数を算出し、算出した学習者別の構成要素別個数を、構成要素ごとの学習者全体の平均個数と比較して、前記学習者の進捗の逸脱度を判定することを特徴とする請求項2に記載の分析装置。
【請求項4】
前記第2の分析部は、学習者別に、入れ子構造のブロックであって“{”のブロックに対応する制御文の種類を抽出して前記入れ子構造の構成要素の種類とその個数を記録し、前記入れ子構造の構成要素ごとに学習者全体の平均個数を算出し、学習者別の入れ子構造の構成要素別個数を、前記入れ子構造の構成要素ごとの学習者全体の平均個数と比較して、前記学習者の逸脱度を判定することを特徴とする請求項3に記載の分析装置。
【請求項5】
前記第2の分析部は、前記学習者ごとに、前記構成要素別個数が、前記平均個数から所定の閾値以上プラス側に逸脱しているものを正逸脱とし、前記構成要素別個数が、前記平均個数から所定の閾値以上マイナス側に逸脱しているものを負逸脱として、前記正逸脱及び前記負逸脱の個数をカウントし、前記正逸脱及び前記負逸脱の個数を基に、各学習者の進捗の逸脱度を判定することを特徴とする請求項3または4に記載の分析装置。
【請求項6】
前記第2の分析部は、前記正逸脱の個数が第1の閾値より大きく、前記負逸脱の個数が第2の閾値より大きい場合に、前記学習者の進捗の逸脱度を「特異解」と判定、前記正逸脱の個数が前記第1の閾値より大きく、前記負逸脱の個数が第2の閾値より小さい場合に、前記学習者の進捗の逸脱度を「高進捗」と判定し、前記正逸脱の個数が前記第1の閾値より小さく、前記負逸脱の個数が第2のしきい値より大きい場合に、前記学習者の進捗の逸脱度を「低進捗」と判定し、前記正逸脱の個数が第1の閾値より小さく、前記負逸脱の個数が第2のしきい値より小さい場合に、前記学習者の進捗の逸脱度を「標準」と判定することを特徴とする請求項5に記載の分析装置。
【請求項7】
分析装置が実行する分析方法であって、
学習者が使用する学習装置のプログラミング学習システムから、ソースコードを取得する取得工程と、
前記ソースコードを基にプログラムの各構成要素を分析する第1の分析工程と、
前記第1の分析工程において分析された構成要素の個数を基に、前記学習者の進捗の逸脱度を分析する第2の分析工程と、
前記第2の分析工程における分析結果を出力する出力工程と、
を含んだことを特徴とする分析方法。
【請求項8】
コンピュータを請求項1~6のいずれか一つに記載の分析装置として機能させるための分析プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分析装置、分析方法及び分析プログラムに関する。
【背景技術】
【0002】
近年、プログラミングの学習方法は多様化し、eラーニングから、教場授業とeラーニングを併用するブレンディッドラーニングまで多岐にわたっている。このような教育環境においては、LMS(Learning Management System:学習支援システム)が利用される。
【0003】
LMSは、学習コンテンツの配信、試験の実施及び採点等の多様な機能を備えている。このLMSによれば、LMSを経由した学習者の学習活動に関する操作ログ等の様々な履歴や、レポートや評価結果等の記録を収集することが可能である。そこで、学習時の編集履歴を参照可能とする学習システムの構築が提案されている(非特許文献1参照)。
【0004】
また、プログラミング学習者のプログラムの実行時のエラーメッセージを集計して学習者の弱点を分析する方法(非特許文献2参照)や、最終的な完成形のプログラムを構文解析し、正解プログラムとの差異を明らかにしようとする手法(非特許文献3参照)が知られている。また、分析までには至らないもののプログラムの作成過程の履歴を取得する環境を構築する方法(非特許文献4参照)や、手作業で分析する手法(非特許文献5参照)が報告されている。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】荒本道隆,小林学,中澤真,中野美知子,後藤正幸,平澤茂一, “編集履歴可視化システムを用いたLearning Analytics~システム構成と実装”, 情報処理学会第78回全国大会予稿集, pp.4-527-4-528, 2016.
【非特許文献2】山本耕大,他, “エラー要因事例ベースの動的学習手法を導入したC言語教育システムの開発と基礎的評価”, 電子情報通信学会技術報告, Vol.108,No.146, pp.67-72, 2008.
【非特許文献3】間嶋義喜,他, “機能に基づくプログラム構造比較に向けた類似度の策定”, 情報処理学会研究報告,CE 138 No.12, pp.1-6, 2017.
【非特許文献4】森一樹,他, “プログラミング演習支援のための細粒度履歴収集環境の開発”, 情報処理学会研究報告, SE 179 No.16, pp.1-6, 2013.
【非特許文献5】長慎也, 他, “初学者向けプログラミング授業における活動ログの評価支援機能”, 情報処理学会研究報告, CE 138 No.4, pp.1-8, 2017.
【発明の概要】
【発明が解決しようとする課題】
【0006】
このように、ソースコードを取得し学習支援に役立てる方法はいくつか提案されている。これらの方法は、学習終了の後に蓄積された学習データを用いてバッチ処理で分析するものである。これに対し、学習の効率化のために、学習中に、学習者の学習状況をリアルタイムで分析する方法が要望されている。
【0007】
本発明は、上記に鑑みてなされたものであって、学習中に、学習者の進捗状況をリアルタイムで分析することができる分析装置、分析方法及び分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するために、本発明に係る分析装置は、学習者が使用する学習装置のプログラミング学習システムから、ソースコードを取得する取得部と、ソースコードを基にプログラムの各構成要素を分析する第1の分析部と、第1の分析部が分析した構成要素の個数を基に、学習者の進捗の逸脱度を分析する第2の分析部と、第2の分析部による分析結果を出力する出力部と、を有することを特徴とする。
【発明の効果】
【0009】
本発明によれば、学習中に、学習者の進捗状況をリアルタイムで分析することができる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、実施の形態における進捗分析システムの構成の一例を示す図である。
【
図2】
図2は、実施の形態に係る進捗分析処理の処理手順を示すフローチャートである。
【
図3】
図3は、
図2に示す構成要素分析処理の処理手順の一例を示すフローチャートである。
【
図4】
図4は、
図3に示すブロック構造判定処理の処理手順の一例を示すフローチャートである。
【
図5】
図5は、
図3に示す条件分岐条件式要素判定処理の処理手順の一例を示すフローチャートである。
【
図6】
図6は、
図3に示す条件分岐ブロック判定処理の処理手順の一例を示すフローチャートである。
【
図7】
図7は、
図3に示す演算要素判定処理の処理手順の一例を示すフローチャートである。
【
図8】
図8は、
図3に示す識別子要素判定処理の処理手順の一例を示すフローチャートである。
【
図9】
図9は、
図2に示す第1の平均個数算出処理の処理手順の一例を示すフローチャートである。
【
図10】
図10は、構成要素別個数の算出処理で算出された構成要素別の個数のテキスト型言語の場合の例を示す図である。
【
図11】
図11は、構成要素別個数の算出処理で算出された構成要素別の個数のビジュアル型言語の場合の例を示す図である。
【
図12】
図12は、
図2に示す第2の平均個数算出処理の処理手順を示すフローチャートである。
【
図13】
図13は、
図1に示す逸脱分析部が入れ子の構成要素ごとに算出した個数の例を示す図である。
【
図14】
図14は、
図2に示す逸脱判定処理の処理手順の一例を示すフローチャートである。
【
図16】
図16は、プログラムが実行されることにより、進捗分析装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【0011】
以下、図面を参照して、本発明の一実施形態を詳細に説明する。なお、この実施の形態により本発明が限定されるものではない。また、図面の記載において、同一部分には同一の符号を付して示している。
【0012】
[実施の形態]
[進捗分析システムの構成]
本発明の実施の形態について説明する。
図1は、実施の形態における進捗分析システムの構成の一例を示す図である。
【0013】
図1に示すように、実施の形態に係る進捗分析システム1は、学習装置20と、進捗分析装置30(分析装置)とがネットワーク90を介して接続された構成を有する。本実施の形態の進捗分析システムの最小構成としては、
図1に例示する進捗分析装置30のみとなるが、学習装置20のプログラミング学習システム21をさらに構成に加えて進捗分析システムとしてもよい。
【0014】
学習装置20は、学習者がプログラミング学習を実行する際に操作する端末装置である。学習装置20におけるプログラミング学習システム21は、学習時に、ソースコードを逐次取得する。ソースコードは、例えば、作成途中のプログラムソースコードである。
【0015】
進捗分析装置30は、学習装置20から、分析対象の学習者の学習情報としてソースコードを学習中に取得して、プログラミング学習者の進捗状況を分析する。進捗分析装置30は、プログラミング学習システム21から取得したソースコードを基にプログラムの各構成要素を分析し、分析した構成要素の個数を基に、分析対象の学習者の進捗の逸脱度を分析する。進捗分析装置30は、分析した進捗情報を学習指導者等の提供要求者に提供する。
【0016】
[進捗分析装置の構成]
次に、進捗分析装置30の構成について説明する。進捗分析装置30は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)、CPU(Central Processing Unit)等を含むコンピュータ等に所定のプログラムが読み込まれて、CPUが所定のプログラムを実行することで実現される。
図1に示すように、進捗分析装置30は、ソースコード取得部31(取得部)、構成要素分析部32(第1の分析部)、逸脱分析部33(第2の分析部)、及び、逸脱者情報提示部34(出力部)を有する。
【0017】
ソースコード取得部31は、学習装置20のプログラミング学習システム21から、ソースコードを取得する。
【0018】
構成要素分析部32は、ソースコードを用いて学習者ごとのソースコードの構成要素を分析する。構成要素分析部32は、ソースコードを構成要素ごとに分解する。
【0019】
逸脱分析部33は、構成要素分析部32が分析した構成要素の個数と、学習者全体の構成要素の平均個数とを用いて、学習者の進捗の逸脱度を分析する。進捗の逸脱度は、学習者の進捗がどのくらい逸脱しているかを示すものである。
【0020】
逸脱分析部33は、構成要素分析部32が分析した構成要素の個数を基に、学習者別の構成要素別個数を算出する。逸脱分析部33は、構成要素ごとに学習者全体の平均個数を算出する。そして、逸脱分析部33は、算出した学習者別の構成要素別個数を、構成要素ごとの学習者全体の平均個数と比較して、学習者の進捗の逸脱度を判定する。
【0021】
具体的には、逸脱分析部33は、学習者ごとに、構成要素別個数が平均個数から閾値以上プラス側に逸脱しているものを「正逸脱」とし、平均個数から閾値以上マイナス側に逸脱しているものを「負逸脱」として、正逸脱及び負逸脱の個数をカウントする。逸脱分析部33は、カウントされた正逸脱及び負逸脱の個数に応じて、各学習者の進捗の逸脱度を判定する。
【0022】
さらに、逸脱分析部33は、ある時点の学習者別の入れ子構造のブロックを抽出し、入れ子構造の種類を判定し、入れ子構造の構成要素ごとに学習者全体の平均個数を算出し、進捗状態の判定に組み入れてもよい。入れ子構造は、プログラム内のあるブロックの中に別のブロックが入り込むような構造である。例えば、入れ子構造は、ifブロックの中にifブロックがあるような構造である。
【0023】
この場合、逸脱分析部33は、学習者別に、入れ子構造のブロックであって“{”のブロックに対応する制御文の種類を抽出して入れ子構造の構成要素の種類とその個数を記録し、入れ子構造の構成要素ごとに学習者全体の平均個数を算出する。そして、逸脱分析部33は、学習者別の入れ子構造の構成要素別個数を、入れ子構造の構成要素ごとの学習者全体の平均個数と比較して、学習者の逸脱度を判定する。
【0024】
逸脱者情報提示部34は、逸脱分析部33による分析結果を出力する。逸脱者情報提示部34は、逸脱分析部33で分析された逸脱者の情報を学習指導者に提示する。逸脱者情報提示部34は、学習指導者が指定した学習者の進捗結果を提示してもよいし、各学習者と各進捗状態の判定結果とを対応付けえた進捗結果の一覧を提示してもよい。
【0025】
なお、上述の進捗分析装置30の構成要素分析部32の処理、及び、進捗分析装置30の逸脱分析部33の処理は、学習時に逐次的に行う。また、進捗分析装置30の構成要素分析部32の処理、及び、進捗分析装置30の逸脱分析部33の処理は、学習終了後に行ってもよい。
【0026】
[進捗分析処理]
次に、進捗分析装置30による進捗分析処理について説明する。
図2は、実施の形態に係る進捗分析処理の処理手順を示すフローチャートである。
【0027】
まず、進捗分析装置30は、ソースコード取得部31が、学習装置20から取得する(ステップS31)。構成要素分析部32は、ソースコードを基に、ソースコードを構成要素に分解する構成要素分析処理を行う(ステップS32)。
【0028】
逸脱分析部33は、分解した個々の構成要素を基に、構成要素ごとの学習者全体の平均個数を算出する第1の平均個数算出処理を行う(ステップS33)。続いて、逸脱分析部33は、入れ子構造(以降、入れ子とする。)の構成要素ごとの学習者全体の平均個数を算出する第2の平均個数算出処理を行う(ステップS34)。なお、ステップS34は、省略することも可能である。
【0029】
そして、逸脱分析部33は、ステップS33,S34の結果を基に、学習者ごとに、正逸脱及び負逸脱の個数をカウントし、カウントされた正逸脱及び負逸脱の個数に応じて、進捗状態を判定する逸脱判定処理を行う(ステップS35)。逸脱者情報提示部34は、教師などの学習指導者へ逸脱分析結果を提示する(ステップS36)。
【0030】
[構成要素分析処理]
次に、
図2に示す構成要素分析処理(ステップS32)について説明する。
図3は、
図2に示す構成要素分析処理の処理手順の一例を示すフローチャートである。
【0031】
まず、構成要素分析部32は、判定対象の構成要素について、ブロック構造に該当するか否かを判定するブロック構造判定処理を行う(ステップS321)。続いて、構成要素分析部32は、判定対象の構成要素について、条件分岐の条件式に該当するか否かを判定する条件分岐条件式要素判定処理を行う(ステップS322)を行う。そして、構成要素分析部32は、判定対象の構成要素について、条件分岐のブロックに該当するか否かを判定する条件分岐ブロック判定処理を行う(ステップS323)。
【0032】
続いて、構成要素分析部32は、判定対象の構成要素について、繰り返しの条件式に該当するか否かを判定する繰り返し条件式要素判定処理を行う(ステップS324)。構成要素分析部32は、判定対象の構成要素について、繰り返しのブロックに該当するか否かを判定する繰り返しブロック判定処理を行う(ステップS325)。
【0033】
そして、構成要素分析部32は、判定対象の構成要素について、演算要素に該当するか否かを判定する演算要素判定処理を行う(ステップS326)。続いて、構成要素分析部32は、判定対象の構成要素について、識別子要素に該当するか否かを判定する識別子要素判定処理を行う(ステップS327)。
【0034】
[ブロック構造判定処理]
次に、
図3に示す条ブロック構造判定処理(ステップS321)について説明する。
図4は、
図3に示すブロック構造判定処理の処理手順の一例を示すフローチャートである。
【0035】
まず、構成要素分析部32は、判定対象のソースコードに“{”が追加されたか否かを判定する(ステップS3211)。判定対象のソースコードに“{”が追加された場合(S3211:Yes)、判定対象のソースコードがブロック構造であると判定する(ステップS3214)。
【0036】
一方、判定対象のソースコードに“{”が追加されていない場合(ステップS3211:No)、構成要素分析部32は、ソースコードに“}”が追加されたか否かを判定する(ステップS3212)。ソースコードに“}”が追加された場合(ステップS3212:Yes)、構成要素分析部32は、判定対象のソースコードがブロック構造であると判定する(ステップS3214)。
【0037】
これに対し、ソースコードに“}”が追加されていない場合(ステップS3212:No)、構成要素分析部32は、ソースコードに追加または削除された文字が“{”の右側であるか、または、“{”と“}”の内側であるか否かを判定する(ステップS3213)。
【0038】
ソースコードに追加または削除された文字が“{”の右側である、または、“{”と“}”の内側である場合(ステップS3213:Yes)、構成要素分析部32は、判定対象のソースコードがブロック構造であると判定する(ステップS3214)。ソースコードに追加または削除された文字が“{”の右側ではなく、“{”と“}”の内側でない場合(ステップS3213:No)、構成要素分析部32は、ブロック構造判定処理を終了する。
【0039】
[条件分岐条件式要素判定処理]
次に、
図3に示す条件分岐条件式要素判定処理(ステップS322)について説明する。
図5は、
図3に示す条件分岐条件式要素判定処理の処理手順の一例を示すフローチャート図である。
【0040】
まず、構成要素分析部32は、判定対象のソースコード(編集履歴)に“(”が追加され、その直前が“if”であるか否かを判定する(ステップS3221)。判定対象のソースコード(編集履歴)に“(”が追加され、その直前が“if”である場合(ステップS3221:Yes)、構成要素分析部32は、判定対象のソースコードが、条件分岐条件式要素であると判定する(ステップS3224)。
【0041】
また、判定対象のソースコード(編集履歴)に“(”が追加され、その直前が“if”でない場合(ステップS3221:No)、構成要素分析部32は、ソースコードに“)”が追加され、対応する括弧が“if(”であるか否かを判定する(ステップS3222)。ソースコードに“)”が追加され、対応する括弧が“if(”であるか場合(ステップS3222:Yes)、構成要素分析部32は、判定対象のソースコードが、条件分岐条件式要素であると判定する(ステップS3224)。
【0042】
これに対し、ソースコードに“)”が追加され、対応する括弧が“if(”でない場合(ステップS3222:No)、構成要素分析部32は、ソースコードに追加または削除された文字が“if(”の右側であるか、または、“if(”と“)”の内側であるか否かを判定する(ステップS3223)。
【0043】
ソースコードに追加または削除された文字が“if(”の右側である、または、“if(”と“)”の内側である場合(ステップS3223:Yes)、構成要素分析部32は、判定対象のソースコードが、条件分岐条件式要素であると判定する(ステップS3224)。一方、ソースコードに追加または削除された文字が“if(”の右側でなく、または、“if(”と“)”の内側でない場合(ステップS3223:No)、構成要素分析部32は、分岐条件式要素判定処理を終了する。
【0044】
[条件分岐ブロック判定]
次に、
図3に示す条件分岐ブロック判定処理(ステップS323)について説明する。
図6は、
図3に示す条件分岐ブロック判定処理の処理手順の一例を示すフローチャートである。
【0045】
まず、構成要素分析部32は、判定対象のソースコードが前述のブロック構造判定処理(ステップS321)においてブロック構造であると判定されており、左側が条件分岐条件式要素であるか否かを判定する(ステップS3231)。
【0046】
判定対象のソースコードがブロック構造であると判定されており、左側が条件分岐条件式要素である場合(ステップS3231:Yes)、構成要素分析部32は、判定対象のソースコードが条件分岐ブロックであると判定する(ステップS3233)。
【0047】
一方、ブロック構造であると判定されており、左側が条件分岐条件式要素でない場合(ステップS3231:No)、構成要素分析部32は、判定対象のソースコードが前述のブロック構造判定処理(ステップS321)においてブロック構造であると判定されており、左側が“else”であるか否かを判定する(ステップS3232)。
【0048】
判定対象のソースコードがブロック構造であると判定されており、左側が“else”である場合(ステップS3232:Yes)、構成要素分析部32は、判定対象のソースコードが条件分岐ブロックであると判定する(ステップS3233)。判定対象のソースコードがブロック構造であると判定されており、左側が“else”でない場合(ステップS3232:No)、構成要素分析部32は、条件分岐ブロック判定処理を終了する。
【0049】
なお、構成要素分析処理(ステップS32)における、繰り返し条件式要素判定処理(ステップS324)及び繰り返しブロック判定処理(ステップS325)の処理は、前述の条件分岐条件式要素判定処理(ステップS322)及び条件分岐ブロック判定処理(ステップS323)と同様に実施することができる。
【0050】
[演算要素判定処理]
次に、
図3に示す演算要素判定処理(ステップS326)について説明する。
図7は、
図3に示す演算要素判定処理の処理手順の一例を示すフローチャートである。
【0051】
まず、構成要素分析部32は、判定対象のソースコードに演算子のいずれかの記号が追加されたか否かを判定する(ステップS3261)。判定対象のソースコードに演算子のいずれかの記号が追加されたか場合(ステップS3261:Yes)、構成要素分析部32は、判定対象のソースコードが演算要素であると判定する(ステップS3263)。
【0052】
また、判定対象のソースコードに演算子のいずれかの記号が追加されていない場合(ステップS3261:No)、構成要素分析部32は、判定対象のソースコードに丸括弧が追加され、かつ、予約語や関数に対応する括弧ではないか否かを判定する(ステップS3262)。
【0053】
判定対象のソースコードに丸括弧が追加され、かつ、予約語や関数に対応する括弧ではない場合(ステップS3262:Yes)、構成要素分析部32は、判定対象のソースコードが演算要素であると判定する(ステップS3263)。一方、判定対象のソースコードに丸括弧が追加されておらず、または、予約語や関数に対応する括弧ではある場合(ステップS3262:No)、構成要素分析部32は、演算要素判定処理を終了する。
【0054】
[識別子要素判定処理]
次に、
図3に示す識別子要素判定処理(ステップS327)について説明する。
図8は、
図3に示す識別子要素判定処理の処理手順の一例を示すフローチャートである。
【0055】
まず、構成要素分析部32は、判定対象のソースコード(編集履歴)に演算子のいずれかの記号が追加され、その直前が識別子であるか否かを判定する(ステップS3271)。判定対象のソースコードに演算子のいずれかの記号が追加され、その直前が識別子である場合(ステップS3271:Yes)、構成要素分析部32は、判定対象のソースコードが識別子要素であると判定する(ステップS3274)。
【0056】
判定対象のソースコードに演算子のいずれかの記号が追加され、その直前が識別子でない場合(ステップS3271:No)、構成要素分析部32は、判定対象のソースコードに右括弧が追加され、その直前が識別子であるか否かを判定する(ステップS3272)。判定対象のソースコードに右括弧が追加され、その直前が識別子である場合(ステップS3272:Yes)、構成要素分析部32は、判定対象のソースコードが識別子要素であると判定する(ステップS3274)。
【0057】
判定対象のソースコードに右括弧が追加され、その直前が識別子でない場合(ステップS3272:No)、構成要素分析部32は、判定対象のソースコードにセミコロンやコロンが追加され、その直前が識別子であるか否かを判定する(ステップS3273)。
【0058】
判定対象のソースコードにセミコロンやコロンが追加され、その直前が識別子である場合(ステップS3273:Yes)、構成要素分析部32は、判定対象のソースコードが識別子要素であると判定する(ステップS3274)。判定対象のソースコードにセミコロンやコロンが追加され、その直前が識別子でない場合(ステップS3273:No)、構成要素分析部32は、識別子要素判定処理を終了する。
【0059】
[逸脱分析処理]
次に、
図2に示す第1の平均個数算出処理(ステップS33)について説明する。
図9は、
図2に示す第1の平均個数算出処理の処理手順の一例を示すフローチャートである。
【0060】
逸脱分析部33は、構成要素分析処理(ステップS32)において分析された構成要素を参照し、ある時点の学習者別の構成要素別個数を算出する(ステップS331)。
図10は、構成要素別個数の算出処理(ステップS331)で算出された構成要素別の個数のテキスト型言語の場合の例を示す図である。
図11は、構成要素別個数の算出処理(ステップS331)で算出された構成要素別の個数のビジュアル型言語の場合の例を示す図である。
図11の表3321及び
図12の表3322に示すように、逸脱分析部33は、ステップS331において、構成要素ごとに、カウントされた個数を対応付けた状態で記録する。
【0061】
続いて、逸脱分析部33は、構成要素ごとに学習者全体の平均個数を算出する(ステップS332)。
【0062】
[ブロック構造の逸脱分析処理]
次に、
図2に示す第2の平均個数算出処理(ステップS34)について説明する。
図12は、
図2に示す第2の平均個数算出処理の処理手順を示すフローチャートである。
【0063】
まず、逸脱分析部33は、ある時点の学習者別の入れ子構造となっているブロックを抽出する(ステップS341)。逸脱分析部33は、“{”のブロックに対応する制御文の種類を抽出し、入れ子の種類を記録する(ステップS342)。逸脱分析部33は、入れ子の構成要素の組み合わせごとに学習者全体の平均個数を算出して(ステップS343)、逸脱者の判定条件に組み入れる(ステップS344)。
【0064】
図13は、
図1に示す逸脱分析部33が入れ子の構成要素ごとに算出した個数の例を示す図である。
図13の表344に示すように、入れ子の構成要素ごとに、個数がそれぞれ対応付けて記録される。
【0065】
なお、
図13の例では、“if”及び“if”の入れ子や、“if”及び“for”の入れ子など、2つの構成要素の入れ子の例を示しているが、3重、4重あるいはそれ以上の入れ子を対象としてもよい。また、プログラムによっては、“if”ブロックの中で“for”文を使う場合と、“for”ブロックの中で“if”文を使う場合、どちらも同じ結果を生じる場合がある。このような場合には、「if:for」と「for:if」を同一として扱ってもよい。また、
図13のブロック構造の構成要素の表344を、
図10の1つの構成要素の表3321に組み込んで、同一の逸脱判定処理(ステップS35)の中で処理してもよい。
【0066】
[逸脱判定処理]
次に、
図2に示す逸脱判定処理(ステップS35)について説明する。
図14は、
図2に示す逸脱判定処理の処理手順の一例を示すフローチャートである。
【0067】
逸脱分析部33は、学習者全員について(ステップS351~ステップS353)、学習者ごとに構成要素別個数が、平均個数から閾値以上プラス側に逸脱しているものを正逸脱として個数をカウントし、平均個数から閾値以上マイナス側に逸脱しているものを負逸脱として個数をカウントし、それぞれの個数を記録する(ステップS352)。閾値は、例えば、過去の複数の学習者における構成要素別個数の分布状態を基に予め設定される。逸脱分析部33は、この記録結果に基づいて各学習者の進捗の逸脱度を判定する判定処理を行う(ステップS354)。
【0068】
[判定処理]
次に、
図14に示す判定処理(ステップS354)について説明する。
図15は、
図14に示す判定処理の処理手順の一例を示すフローチャートである。
【0069】
まず、逸脱分析部33は、正逸脱の個数が予め設定された第1の閾値より大きいか否かを判定する(ステップS3541)。正逸脱の個数が予め設定された第1の閾値より大きい場合(ステップS3541:Yes)、逸脱分析部33は、負逸脱の個数が第2の閾値より大きいか否かを判定する(ステップS3542)。
【0070】
負逸脱の個数が第2の閾値より大きい場合(ステップS3542:Yes)、逸脱分析部33は、判定結果を「特異解」とする(ステップS3543)。一方、負逸脱の個数が第2の閾値より大きくない場合(ステップS3542:No)、逸脱分析部33は、判定結果を「高進捗」とする(ステップS3544)。
【0071】
また、正逸脱の個数が予め設定された第1の閾値より大きくない場合(ステップS3541:No)、逸脱分析部33は、負逸脱の個数が、第2の閾値より大きいか否かを判定する(ステップS3545)。
【0072】
負逸脱の個数が、第2の閾値より大きい場合(ステップS3545:Yes)、逸脱分析部33は、判定結果を「低進捗」とする(ステップS3546)。一方、負逸脱の個数が、第2の閾値より大きくない場合(ステップS3545:No)、逸脱分析部33は、判定結果を「標準」とする(ステップS3547)。
【0073】
なお、第1の閾値、第2の閾値は、予め設定されている。第1の閾値、第2の閾値は、例えば、過去の複数の学習者の正逸脱の個数及びその分布状態と、負逸脱の個数及びその分布状態とを基に設定される。また、本実施の形態では、入れ子の構成要素ごとに学習者全体の平均個数を算出した結果(例えば、
図13)を、単独の構成要素について学習者全体の平均個数を算出した結果(例えば、
図10)に組み込んで、同一の逸脱判定処理(ステップS35)の中で処理した例を説明したが、入れ子の構成要素と、単独の構成要素と
に分けて逸脱判定処理を行ってもよい。
【0074】
[実施の形態の効果]
このように、本実施の形態に係る進捗分析装置30では、学習者が使用する学習装置20のプログラミング学習システム21から、ソースコードを取得し、取得したソースコードを基にプログラムの各構成要素を分析する。そして、進捗分析装置30では、分析した構成要素の個数を基に、学習者の進捗の逸脱度を分析して、逸脱度に関する分析結果を学習指導者等に対して出力する。
【0075】
言い換えると、進捗分析装置30は、学習者が現に使用する学習装置20のプログラミング学習システム21から取得した学習中のソースコードを用いて、この学習者の進捗の逸脱度を分析する。このため、進捗分析装置30によれば、学習者の学習中であっても、学習者の進捗状況をリアルタイムで分析し、学習指導者等に進捗状況を提供することで、学習の効率化を図ることができる。
【0076】
また、進捗分析装置30では、分析した構成要素の個数と、学習者全体の構成要素の平均個数とを用いて、学習者の進捗の逸脱度を分析する。具体的には、進捗分析装置30では、分析した構成要素の個数を基に、学習者別の構成要素別個数を算出し、算出した学習者別の構成要素別個数を、構成要素ごとの学習者全体の平均個数と比較して、学習者の逸脱度を判定する。このため、進捗分析装置30では、学習者全体の中で、分析対象の学習者の進捗がどのくらい逸脱しているかを適切に分析することができる。
【0077】
進捗分析装置30では、学習者別に、入れ子構造のブロックであって“{”のブロックに対応する制御文の種類を抽出して入れ子の構成要素の種類とその個数を記録し、入れ子の構成要素ごとに学習者全体の平均個数を算出する。そして、進捗分析装置30では、学習者別の入れ子の構成要素別個数を、入れ子の構成要素ごとの学習者全体の平均個数と比較して、学習者の逸脱度を判定する。このため、進捗分析装置30では、さらに入れ子の中まで分析を行うことで、学習者の進捗に対する詳細な分析が可能となる。
【0078】
進捗分析装置30では、学習者ごとに、構成要素別個数が、平均個数から所定の閾値以上プラス側に逸脱しているものを正逸脱とし、構成要素別個数が、平均個数から所定の閾値以上マイナス側に逸脱しているものを負逸脱として、正逸脱及び負逸脱の個数をカウントし、正逸脱及び負逸脱の個数を基に、各学習者の進捗の逸脱度を判定する。
【0079】
具体的には、進捗分析装置30では、正逸脱の個数を第1の閾値と比較し、負逸脱の個数を第2の閾値と比較することで、学習者の進捗の逸脱度を、「特異解」、「高進捗」、「低進捗」または「標準」のいずれかに判定する。このため、進捗分析装置30によれば、「特異解」、「高進捗」、「低進捗」、「標準」に分けて、学習者の進捗の逸脱度を学習指導者に提供することができるため、学習指導者は、この分析結果を基に効率的な学習指導を行うことができる。
【0080】
以上のように、進捗分析装置30は、学習者の進捗状況をリアルタイムで分析し、学習指導者等に進捗状況を提供することで、学習の効率化を図ることができる。
【0081】
[システム構成等]
図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部又は任意の一部が、CPU及び当該CPUにて解析実行されるプログラムにて実現され、或いは、ワイヤードロジックによるハードウェアとして実現され得る。本実施の形態に係る進捗分析装置30は、コンピュータとプログラムによっても実現でき、プログラムを記録媒体に記録することも、ネットワークを通して提供することも可能である。
【0082】
また、本実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的におこなうこともでき、或いは、手動的に行なわれるものとして説明した処理の全部又は一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0083】
[プログラム]
図16は、プログラムが実行されることにより、進捗分析装置30が実現されるコンピュータの一例を示す図である。コンピュータ1000は、例えば、メモリ1010、CPU1020を有する。また、コンピュータ1000は、ハードディスクドライブインタフェース1030、ディスクドライブインタフェース1040、シリアルポートインタフェース1050、ビデオアダプタ1060、ネットワークインタフェース1070を有する。これらの各部は、バス1080によって接続される。
【0084】
メモリ1010は、ROM1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1100に挿入される。シリアルポートインタフェース1050は、例えばマウス1110、キーボード1120に接続される。ビデオアダプタ1060は、例えばディスプレイ1130に接続される。例えば、これらの記憶媒体は、主記憶装置と補助記憶装置に分けられる。主記憶装置はプログラムを記憶する。また、補助記憶装置は、情報の書き込み及び読出しが可能であり、処理の実行によって取得された編集履歴情報、脳波情報、構成要素分析情報、ブロック構造試行錯誤分析結果及びエラー分析結果を記憶する。
【0085】
ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、進捗分析装置30の各処理を規定するプログラムは、コンピュータ1000により実行可能なコードが記述されたプログラムモジュール1093として実装される。プログラムモジュール1093は、例えばハードディスクドライブ1090に記憶される。例えば、進捗分析装置30における機能構成と同様の処理を実行するためのプログラムモジュール1093が、ハードディスクドライブ1090に記憶される。なお、ハードディスクドライブ1090は、SSD(Solid State Drive)により代替されてもよい。
【0086】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ1094として、例えばメモリ1010やハードディスクドライブ1090に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して実行する。
【0087】
なお、プログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。或いは、プログラムモジュール1093及びプログラムデータ1094は、ネットワーク(LAN、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール1093及びプログラムデータ1094は、他のコンピュータから、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
【0088】
以上、本発明者によってなされた発明を適用した実施形態について説明したが、本実施形態による本発明の開示の一部をなす記述及び図面により本発明は限定されることはない。すなわち、本実施形態に基づいて当業者等によりなされる他の実施形態、実施例及び運用技術等はすべて本発明の範疇に含まれる。
【符号の説明】
【0089】
1 進捗分析システム
20 学習装置
21 プログラミング学習システム
30 進捗分析装置
31 ソースコード取得部
32 構成要素分析部
33 逸脱分析部
34 逸脱者情報提示部