(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-31
(45)【発行日】2022-11-09
(54)【発明の名称】情報処理システム、情報処理方法、開発装置、および開発装置用のプログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20221101BHJP
A63F 13/60 20140101ALI20221101BHJP
A63F 13/77 20140101ALI20221101BHJP
A63F 13/30 20140101ALI20221101BHJP
【FI】
G06F11/36 136
A63F13/60
A63F13/77
A63F13/30
(21)【出願番号】P 2019158338
(22)【出願日】2019-08-30
【審査請求日】2021-07-19
(73)【特許権者】
【識別番号】000233778
【氏名又は名称】任天堂株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(74)【代理人】
【識別番号】100130269
【氏名又は名称】石原 盛規
(72)【発明者】
【氏名】山崎 孝裕
(72)【発明者】
【氏名】鈴木 清人
【審査官】小林 秀和
(56)【参考文献】
【文献】特表2016-524730(JP,A)
【文献】特開平05-204699(JP,A)
【文献】特開2008-158634(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
A63F 13/60
A63F 13/77
A63F 13/30
(57)【特許請求の範囲】
【請求項1】
プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるよう
に当該プログラムを生成する生成手段と、
前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定する決定手段と、
前記解析支援情報と前記ハッシュ値との前記組を格納するデータ格納手段と、
前記プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するハッシュ値格納手段と、
前記ハッシュ値格納手段により格納された前記ハッシュ値の少なくとも一部を用いて、当該ハッシュ値と前記組とされた前記解析支援情報を出力する情報出力手段とを備える、情報処理システム。
【請求項2】
前記生成手段は、前記算出されたハッシュ値が当該ハッシュ値算出命令に対応する位置で出力されるように、前記プログラムを生成する、請求項1に記載の情報処理システム。
【請求項3】
前記情報出力手段は、前記プログラムの実行中に発生したエラーを基準にして、対応する解析支援情報を出力する、請求項1または2に記載の情報処理システム。
【請求項4】
前記生成手段は、前記ソースコードに含まれる前記ハッシュ値算出命令を、対応するハッシュ値を配置するための命令とみな
して、前記プログラムを生成する、請求項1~3のいずれか1項に記載の情報処理システム。
【請求項5】
前記解析支援情報は、対応するハッシュ値算出命令が含まれていたソースコードを特定するための情報と、対応するハッシュ値算出命令が含まれていた位置を特定するための情報とを含む、請求項1~4のいずれか1項に記載の情報処理システム。
【請求項6】
前記解析支援情報は、対応するハッシュ値算出命令が含まれていたソースコードのリビジョン情報を含む、請求項1~5のいずれか1項に記載の情報処理システム。
【請求項7】
前記ハッシュ値格納手段は、前記プログラムが実行されることで出力されるハッシュ値の順序を特定するための情報を含む、請求項1~6のいずれか1項に記載の情報処理システム。
【請求項8】
前記ハッシュ値格納手段は、前記プログラムの実行中にエラーが発生するか否かに依存せず、前記プログラムが実行されることで出力されるハッシュ値を時系列に格納する、請求項1~7のいずれか1項に記載の情報処理システム。
【請求項9】
前記ハッシュ値格納手段は、前記プログラムの実行中にエラーが発生すると、当該エラーが発生したタイミングに関連付けられた所定期間に亘るハッシュ値あるいは所定個数のハッシュ値を保持し、前記情報出力手段へ渡す、請求項1~8のいずれか1項に記載の情報処理システム。
【請求項10】
開発装置が、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるように、当該プログラムを生成するステップと、
前記開発装置が、前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定するステップと、
前記開発装置またはデータベースサーバが、前記解析支援情報と前記ハッシュ値との組を格納するステップと、
前記プログラムを実行する装置が、前記プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するステップと、
前記格納されたハッシュ値を提供された装置が、前記格納されたハッシュ値の少なくとも一部を用いて、当該ハッシュ値と前記組とされた前記解析支援情報を出力するステップとを備える、情報処理方法。
【請求項11】
プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるように、当該プログラムを生成する生成手段と、
前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定する決定手段と、
前記解析支援情報と前記ハッシュ値との前記組を格納するデータ格納手段と、
前記プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を用いて、当該ハッシュ値と前記組とされた前記解析支援情報を出力する情報出力手段とを備える、情報処理システム。
【請求項12】
開発装置が、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるように、当該プログラムを生成するステップと、
前記開発装置が、前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定するステップと、
前記開発装置またはデータベースサーバが、前記解析支援情報と前記ハッシュ値との組を格納するステップと、
前記開発装置またはデータ収集サーバが、前記プログラムが実行されることで出力される1または複数のハッシュ
値の少なくとも一部を用いて、当該ハッシュ値と前記組とされた前記解析支援情報を出力するステップとを備える、情報処理方法。
【請求項13】
プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるように、当該プログラムを生成する生成手段と、
前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定する決定手段と、
前記解析支援情報と前記ハッシュ値との前記組を格納するデータ格納手段と、
前記プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するハッシュ値格納手段とを備える、開発装置。
【請求項14】
開発装置用のプログラムであって、コンピュータに
アプリケーションプログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づい
てハッシュ値
を算出し、当該算出されたハッシュ値が出力されるように、前記
アプリケーションプログラムを生成するステップと、
前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値との組を決定するステップと、
前記解析支援情報と前記ハッシュ値との組を格納するステップと、
前記
アプリケーションプログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するステップとを実行させる、開発装置用のプログラム。
【請求項15】
プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいてハッシュ値を算出し、当該算出されたハッシュ値が出力されるように当該プログラムを生成する生成手段と、
解析支援情報とハッシュ値との組を格納するデータ格納手段を備え、前記解析支援情報とハッシュ値との組は、
前記ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令に
基づいて算出されたハッシュ値とを関連付けたものであり、
前記プログラムが実行されることで出力された1または複数のハッシュ値の少なくとも一部を用いて、当該ハッシュ値と前記組とされた前記解析支援情報を出力する情報出力手段を備える、情報処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プログラムのデバッグや改良に適したプログラムの実行に係る情報を収集する技術に関する。
【背景技術】
【0002】
従来から、ビデオゲームを含めて様々なプログラムには、開発時には見つからなかった不具合が発見されることがある。また、プログラム開発中においても、プログラム中の不具合をより効率的に解消できる仕組みが要望されている。
【0003】
例えば、ゲーム機の分野において、特開2010-099211号公報(特許文献1)は、ゲームセンタや店舗などに設置されているゲーム機のエラー画面や設定画面の画像をサーバ装置に送ることで、問題の解決をより迅速化するシステムを開示する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
特開2010-099211号公報(特許文献1)に開示される技術においては、表示されたエラー画面や設定画面の画像を送信されることを解決手段としているが、送信された画像のデータサイズは相対的に大きい。
【0006】
本開示の目的は、このような課題の解決に向けられたものであり、プログラムの実行に係る情報をより少ないデータサイズで収集できる解決手段を提供することである。
【課題を解決するための手段】
【0007】
ある実施の形態に従う情報処理システムは、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出されたハッシュ値が出力されるように、当該プログラムを生成する生成手段と、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定する決定手段と、解析支援情報とハッシュ値との組を格納するデータ格納手段と、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するハッシュ値格納手段と、ハッシュ値格納手段により格納されたハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報を出力する情報出力手段とを含む。
【0008】
この構成によれば、プログラムの実行に応じて、比較的少ないデータサイズのハッシュ値が出力されるので、プログラムの実行に係る情報をより少ないデータサイズで収集できる。
【0009】
生成手段は、算出されたハッシュ値が当該ハッシュ値算出命令に対応する位置で出力されるように、プログラムを生成してもよい。この構成によれば、出力されたハッシュ値に対応する位置に応じて、各種解析が可能になる。
【0010】
情報出力手段は、プログラムの実行中に発生したエラーを基準にして、対応する解析支援情報を出力するようにしてもよい。この構成によれば、プログラムの実行により何らかのエラーが発生した場合には、その発生したエラーを基準にして、必要な解析支援情報を出力できる。
【0011】
生成手段は、ソースコードに含まれるハッシュ値算出命令を、対応するハッシュ値を配置するための命令とみなすようにしてもよい。この構成によれば、ソースコードに含まれるハッシュ値算出命令に関する情報が生成されるプログラムに組み込まれないので、プログラム自体のデータサイズを抑制できるとともに、プログラムの開発に係る情報などを秘匿できる。
【0012】
解析支援情報は、対応するハッシュ値算出命令が含まれていたソースコードを特定するための情報と、対応するハッシュ値算出命令が含まれていた位置を特定するための情報とを含んでいてもよい。この構成によれば、プログラムの実行により何らかのハッシュ値が出力された場合に、プログラム内のいずれの位置が実行されたのかを特定できる。
【0013】
解析支援情報は、対応するハッシュ値算出命令が含まれていたソースコードのリビジョン情報を含んでいてもよい。この構成によれば、プログラムの実行により何らかのハッシュ値が出力された場合に、いずれのリビジョンのプログラムで生じたものであるかを特定できる。
【0014】
ハッシュ値格納手段は、プログラムが実行されることで出力されるハッシュ値の順序を特定するための情報を含んでいてもよい。この構成によれば、プログラムの実行状態をより容易に推定できる。
【0015】
ハッシュ値格納手段は、プログラムの実行中にエラーが発生するか否かに依存せず、プログラムが実行されることで出力されるハッシュ値を時系列に格納するようにしてもよい。この構成によれば、プログラムの実行中には常にハッシュ値が格納されるので、いずれの期間についても、プログラムの実行状態を推定できる。
【0016】
ハッシュ値格納手段は、プログラムの実行中にエラーが発生すると、当該エラーが発生したタイミングに関連付けられた所定期間に亘るハッシュ値あるいは所定個数のハッシュ値を保持し、情報出力手段へ渡すようにしてもよい。この構成によれば、発生したエラーに関係する情報を選択的に表示できるので、原因究明を効率化できる。
【0017】
別の実施の形態に従う情報処理方法は、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出されたハッシュ値が出力されるように、当該プログラムを生成するステップと、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定するステップと、解析支援情報とハッシュ値との組を格納するステップと、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するステップと、格納されたハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報を出力するステップとを含む。
【0018】
さらに別の実施の形態に従う情報処理システムは、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出されたハッシュ値が出力されるように、当該プログラムを生成する生成手段と、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定する決定手段と、解析支援情報とハッシュ値との組を格納するデータ格納手段と、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報を出力する情報出力手段とを含む。
【0019】
さらに別の実施の形態に従う情報処理方法は、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出されたハッシュ値が出力されるように、プログラムを生成するステップと、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定するステップと、解析支援情報とハッシュ値との組を格納するステップと、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するステップと、格納されたハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報を出力するステップとを含む。
【0020】
さらに別の実施の形態に従う開発装置は、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出算出されたハッシュ値が出力されるように、当該プログラムを生成する生成手段と、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定する決定手段と、解析支援情報とハッシュ値との組を格納するデータ格納手段と、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するハッシュ値格納手段とを含む。
【0021】
さらに別の実施の形態に従う開発装置用のプログラムは、コンピュータに、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に基づいて算出算出されたハッシュ値が出力されるように、プログラムを生成するステップと、ハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値との組を決定するステップと、解析支援情報とハッシュ値との組を格納するステップと、プログラムが実行されることで出力される1または複数のハッシュ値の少なくとも一部を格納するステップとを実行させる。
【0022】
さらに別の実施の形態に従う情報処理システムは、解析支援情報とハッシュ値との組を格納するデータ格納手段を備え、解析支援情報とハッシュ値との組は、プログラムを生成するためのソースコードに含まれるハッシュ値算出命令に関連付けられる解析支援情報と当該ハッシュ値算出命令によって算出されたハッシュ値とを関連付けたものであり、プログラムが実行されることで出力された1または複数のハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報を出力する情報出力手段を含む。
【発明の効果】
【0023】
本開示によれば、プログラムの実行に係る情報をより少ないデータサイズで収集できる。
【図面の簡単な説明】
【0024】
【
図1】本実施の形態に従う情報処理システムの概要を説明するための模式図である。
【
図2】本実施の形態に従う端末装置のハードウェア構成例を示す模式図である。
【
図3】本実施の形態に従う開発装置のハードウェア構成例を示す模式図である。
【
図4】本実施の形態に従うデータベースサーバのハードウェア構成例を示す模式図である。
【
図5】本実施の形態に従う情報処理システムの開発装置におけるコンパイル処理を説明するための模式図である。
【
図6】本実施の形態に従う情報処理システムの開発装置におけるコンパイル処理の主要部を示すフローチャートである。
【
図7】本実施の形態に従う情報処理システムの開発装置により算出されるハッシュ値テーブルの一例を示す図である。
【
図8】実施の形態に従う情報処理システムにおける解析支援出力の決定処理について説明するための図である。
【
図9】実施の形態に従う情報処理システムにおける解析支援出力の決定処理手順を示すフローチャートである。
【
図10】本実施の形態に従う情報処理システムにおける解析支援出力の決定に係る実装形態のバリエーションを示す図である。
【
図11】本実施の形態に従う情報処理システムにおいて収集されるハッシュ値ログのデータ構造の一例を示す図である。
【
図12】本実施の形態に従う情報処理システムにおいてエラー発生をトリガーとして収集されるハッシュ値ログの一例を示す図である。
【発明を実施するための形態】
【0025】
本実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
【0026】
[A.概要]
まず、本実施の形態に従う情報処理システム1の概要について説明する。情報処理システム1は、任意のプログラムの実行に係る情報を容易に収集できる構成を提供する。
【0027】
図1は、本実施の形態に従う情報処理システム1の概要を説明するための模式図である。
図1を参照して、情報処理システム1は、(1)アプリケーションプログラム30の開発、(2)アプリケーションプログラム30の実行、ならびに、(3)アプリケーションプログラム30の実行による出力される情報の収集および解析といった3つの局面を包含するものである。
【0028】
情報処理システム1は、典型的には、1または複数の端末装置100と、開発装置200と、データベースサーバ300と、データ収集サーバ400とを含む。(1)アプリケーションプログラム30の開発は、主として、開発装置200により実行され、(2)アプリケーションプログラム30の実行は、主として、1または複数の端末装置100の各々において実行され、(3)アプリケーションプログラム30の実行により出力されるハッシュ値の収集および解析は、主として、データベースサーバ300およびデータ収集サーバ400により実行される。
【0029】
(1)アプリケーションプログラム30の開発
アプリケーションプログラム30は、1または複数の開発装置200が提供する開発環境2を利用して開発される。アプリケーションプログラム30は、基本的には、実行形式のプログラムとなっており、端末装置100のプロセッサで実行できるような命令コードを含む。但し、アプリケーションプログラム30の一部または全部のコードが中間コードの形式になっていてもよい。
【0030】
より具体的には、開発者は、アプリケーションプログラム30を生成するためのソースコード10を作成する。開発者は、アプリケーションプログラム30に何らかのエラーまたはイベントが発生した場合などに、その原因の究明を支援できるような情報(以下、「解析支援情報」とも称す。)を決定するための命令(以下、「ハッシュ出力命令」とも称す。)をソースコード10の任意の位置に配置できる。
【0031】
本明細書において、「解析支援情報」は、任意のプログラムの実行状態を推定するために利用できる任意の情報、および、任意のプログラムに生じた何らかのエラーの原因究明に利用できる任意の情報を含む。
【0032】
なお、ハッシュ出力命令12は、例外処理の一部としてソースコード10内に配置されてもよいし、ソースコード10に含まれる任意の目的となる処理の直後に配置されてもよい。
【0033】
図1に示すソースコード10においては、ハッシュ値算出命令13および引数14が指定されたファンクションの形でハッシュ出力命令12が規定されている。ハッシュ値算出命令13は、コンパイルの際にハッシュ値を算出するための命令である。引数14としては、例えば、任意の文字列を設定することができる。
【0034】
開発装置200は、ソースコード10をコンパイルすることで、アプリケーションプログラム30を生成する。ソースコード10のコンパイル処理の一部として、ソースコード10の内容が解析される。この内容解析において、開発装置200(
図3に示すコンパイラ2141)は、ソースコード10を解釈して、ソースコード10に含まれるハッシュ値算出命令13に基づいて算出されたハッシュ値24が出力されるようにアプリケーションプログラム30を生成(ビルド)する。併せて、開発装置200(
図3に示すテーブル生成モジュール2142)は、ハッシュ値算出命令13に関連付けられる解析支援情報26とハッシュ値算出命令13によって算出されたハッシュ値24との組を決定する。
【0035】
算出されたハッシュ値24は、ハッシュ値算出命令13に対応する位置で出力されるように配置されてもよい。あるいは、算出されたハッシュ値24と当該ハッシュ値24が出力されるべき位置とを関連付け、そのハッシュ値24と位置との関係を任意の方法で格納するようにしてもよい。
【0036】
図1には、説明の便宜上、ソースコード10のコンパイル処理の過程において、ソースコード10がどのように解釈されるのかを示す疑似ソースコード20を示す。以下では、疑似ソースコード20に基づいて処理内容の一部を説明するが、疑似ソースコード20の実体が生成される必要はない。
【0037】
ハッシュ値算出命令13が決定するハッシュ値24については、任意の桁数(データ長さ)とすることができる。また、ハッシュ値算出命令13におけるハッシュ値24の決定メソッドについても任意のものを用いることができる。
【0038】
疑似ソースコード20においては、ソースコード10のハッシュ出力命令12の対象のハッシュ値算出命令13に代えて、特定のハッシュ値24が配置されている。そのため、アプリケーションプログラム30には、基本的には、算出されたハッシュ値24の情報のみが組み込まれることになる。アプリケーションプログラム30に組み込まれたハッシュ値24は、ソースコード10(あるいは、疑似ソースコード20)においてハッシュ出力命令12およびハッシュ値算出命令13が配置された位置が実行されたときに出力されることになる。すなわち、疑似ソースコード20のプログラム構造が反映されたアプリケーションプログラム30が生成される。
【0039】
図1には、1つのハッシュ出力命令12およびハッシュ値算出命令13のみを含むソースコード10の例を示すが、複数のハッシュ出力命令12およびハッシュ値算出命令13をソースコード10の任意の位置に任意の組み合わせで配置できる。
【0040】
なお、開発装置200がそれぞれ生成したプログラムをまとめて、1つのアプリケーションプログラム30を構成することもできる。生成されたアプリケーションプログラム30は、任意の方法で、1または複数の端末装置100の各々へ提供される。
【0041】
ソースコード10を内容解析することで決定された解析支援情報26とハッシュ値24との組は、ハッシュ値テーブル316としてデータベースサーバ300に格納される。なお、ハッシュ値テーブル316は開発装置200に格納されてもよい。ハッシュ値テーブル316には、ハッシュ値24をキーとして、対応する解析支援情報26が格納される。すなわち、ハッシュ値テーブル316は、ハッシュ値24をキーとする解析支援情報26を含む辞書データに相当する。
【0042】
(2)アプリケーションプログラム30の実行
アプリケーションプログラム30が1または複数の端末装置100の各々で実行されることで、アプリケーションプログラム30に埋め込まれた1または複数のハッシュ値出力命令22からハッシュ値24が出力される。出力されるハッシュ値24は、アプリケーションプログラム30の実行状態に応じたものとなる。すなわち、アプリケーションプログラム30に含まれる複数の命令がどのような順序で実行されたのかに応じて、1または複数のハッシュ値出力命令22から出力されるハッシュ値24の順序も変化することになる。そのため、ハッシュ値24および対応する解析支援情報26の順序などの情報も参照しつつ、エラーの原因究明やデバッグなどを行うことができる。
【0043】
端末装置100において実行されるアプリケーションプログラム30から出力されるハッシュ値24は、端末装置100に順次格納されてもよいし、周期的あるいは何らかの送信条件が成立した場合に、端末装置100からデータ収集サーバ400へ送信するようにしてもよい。
【0044】
(3)アプリケーションプログラム30の実行により出力されるハッシュ値の収集および解析
端末装置100においてアプリケーションプログラム30が実行されることで出力された1または複数のハッシュ値24は、データ収集サーバ400へ送信されてもよい。なお、後述するように、ハッシュ値24を端末装置100の内部に格納したまま利用してもよい。
【0045】
データ収集サーバ400は、1または複数の端末装置100から送信される1または複数のハッシュ値24をデータベースサーバ300へ出力する。
【0046】
データベースサーバ300は、データ収集サーバ400からの1または複数のハッシュ値24をキーにして、ハッシュ値テーブル316を検索することで、各ハッシュ値24に対応する解析支援情報26を抽出する。そして、データベースサーバ300は、抽出した解析支援情報26を含む解析支援出力500を出力する。データベースサーバ300は、端末装置100またはデータ収集サーバ400により格納されたハッシュ値の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報26を出力する。
【0047】
開発者は、出力される解析支援出力500を参照することで、アプリケーションプログラム30に発生したエラーの原因究明やデバッグなどを行うことができる。
【0048】
このように、本実施の形態に従う情報処理システム1においては、アプリケーションプログラム30の開発段階で、エラーの原因究明やデバッグなどを支援するための情報を出力する命令をソースコード10に埋め込んでおけば、アプリケーションプログラム30に発生し得るエラーなどの不具合への対応が容易化される。
【0049】
また、本実施の形態に従う情報処理システム1においては、アプリケーションプログラム30の実行によりハッシュ値24のみが出力されるので、データサイズを低減できる。さらに、出力されるハッシュ値24の意味は、ハッシュ値テーブル316を参酌しなければ知ることはできないので、アプリケーションプログラム30から出力される情報に基づいて、悪意の第三者がアプリケーションプログラム30を解析するような可能性を低減できる。
【0050】
[B.ハードウェア構成]
まず、本実施の形態に従う情報処理システム1のハードウェア構成の一例について説明する。
【0051】
(b1:端末装置100の構成例)
図2は、本実施の形態に従う端末装置100のハードウェア構成例を示す模式図である。端末装置100は、アプリケーションプログラムを実行可能な任意のコンピュータを包含する。典型的には、端末装置100は、スマートフォンやタブレットなどの携帯型(あるいは可搬型)の汎用コンピュータが想定されるが、携帯型あるいは据置型のパーソナルコンピュータであってもよいし、ゲーム専用機のようなコンピュータであってもよい。
【0052】
図2を参照して、端末装置100は、主たるハードウェアコンポーネントとして、プロセッサ102と、主メモリ104と、ディスプレイ106と、タッチパネル108と、ストレージ110と、入力部120と、インジケータ122と、スピーカ124と、通信モジュール126と、マイク128と、カメラ130とを含む。これらのハードウェアコンポーネントは、バス132を介して通信可能に接続される。
【0053】
プロセッサ102は、主メモリ104に展開されたプログラムコードに従って命令を実行する演算部であり、例えば、CPU(central processing unit)やGPU(graphics processing unit)などで構成される。
【0054】
主メモリ104は、プロセッサ102が命令を実行するためのプログラムコードや各種ワークデータを一時的に格納する不揮発性記憶装置であり、例えば、DRAM(dynamic random access memory)やSRAM(static random access memory)などで構成される。
【0055】
ディスプレイ106は、プロセッサ102での演算処理によって生成される映像情報を表示し、例えば、LCD(liquid crystal display)や有機EL(electroluminescent)ディスプレイなどの表示デバイスで構成される。
【0056】
タッチパネル108は、ディスプレイ106の表示面に配置され、ユーザ操作を受け付ける。より具体的には、タッチパネル108は、ユーザによるタッチ操作を示す情報をプロセッサ102へ出力する。
【0057】
ストレージ110は、端末装置100において利用あるいは生成されたデータを不揮発的に格納する不揮発性記憶装置であり、例えば、フラッシュメモリやハードディスクドライブなどで構成される。典型的には、ストレージ110には、OS(operating system)やドライバなどを含むシステムプログラム112と、ゲーム処理などを実質的に実行するためのアプリケーションプログラム30とが格納される。なお、アプリケーションプログラム30は、システムプログラム112が提供するライブラリなどを利用しつつ、ゲーム処理を実行することもある。
【0058】
さらに、ストレージ110には、アプリケーションプログラム30の実行中に出力される1または複数のハッシュ値24からなるハッシュ値ログ116が格納されてもよい。ストレージ110は、アプリケーションプログラム30が実行されることで出力される1または複数のハッシュ値24の少なくとも一部を格納する。例えば、アプリケーションプログラム30が実行されることで出力されるハッシュ値24のすべてを格納するようにしてもよいが、例えば、アプリケーションプログラム30が実行されることで出力されるハッシュ値24が十分に長い桁数を有している場合などにおいては、出力されるハッシュ値24の一部(例えば、先頭から8文字分など)のみを格納するようにしてもよい。
【0059】
アプリケーションプログラム30は、端末装置100の製造段階においてストレージ110に格納されていてもよいし、任意の配信サーバ(図示しない)からダウンロードの形で提供されてもよい。さらに、アプリケーションプログラム30を格納するコンピュータ読取可能記憶媒体(例えば、USB(universal serial bus)メモリや任意のメモリカード)(図示しない)を端末装置100に装着し、装着されたコンピュータ読取可能記憶媒体からアプリケーションプログラム30を読み出してストレージ110にインストールするようにしてもよい。
【0060】
入力部120は、例えば、ユーザ操作を受け付ける1または複数のボタンや、マウスなどの入力デバイスで構成される。
【0061】
インジケータ122は、端末装置100の筐体に露出して配置され、端末装置100のユーザに対して任意の情報を視覚的に通知する。インジケータ122は、例えば、LED(light emitting diode)などの発光デバイスで構成される。
【0062】
スピーカ124は、端末装置100の筐体に露出して配置され、端末装置100のユーザに対して任意の音声情報を提供する。
【0063】
通信モジュール126は、外部装置との間で無線通信するためのモジュールであり、例えば、5G(generation)、LTE(long term evolution)、WiMAXなどに従う広域通信モジュールや、無線LAN(local area network)、Bluetooth(登録商標)、赤外線通信などに従う狭域通信モジュールなどで構成される。
【0064】
マイク128は、端末装置100の筐体に露出して配置され、端末装置100の周囲で発生する音声を収集する。
【0065】
カメラ130は、端末装置100の筐体に露出して配置され、端末装置100の周囲を撮像して得られる画像を出力する。
【0066】
なお、
図2には、プロセッサ102がプログラム(システムプログラム112およびアプリケーションプログラム30)を実行することで各種処理を実現する形態(すなわち、ソフトウエア実装)を例示するが、これらの処理の一部をハードワイヤード回路で実現してもよい。具体的には、ASIC(application specific integrated circuit)またはFPGA(field-programmable gate array)を含む演算回路(processing circuitry)が本実施の形態に従う端末装置100が実行すべき処理の一部を担当するようにしてもよい。なお、演算回路には、プロセッサ102および主メモリ104を含めるようにしてもよい。したがって、本実施の形態に従う端末装置100に係る処理は、プロセッサ102および主メモリ104、ならびに/または、ASICもしくはFPGAのようなハードワイヤード回路を含む、演算回路によって実行されるとも言える。
【0067】
(b2:開発装置200の構成例)
図3は、本実施の形態に従う開発装置200のハードウェア構成例を示す模式図である。開発装置200は、アプリケーションプログラムの開発環境を提供するための任意のコンピュータを包含する。典型的には、開発装置200は、据置型あるいは携帯型のパーソナルコンピュータで実現される。
【0068】
図3を参照して、開発装置200は、主たるハードウェアコンポーネントとして、プロセッサ202と、主メモリ204と、ディスプレイ206と、入力部208と、ストレージ210と、通信モジュール222とを含む。これらのハードウェアコンポーネントは、バス232を介して通信可能に接続される。
【0069】
プロセッサ202は、主メモリ204に展開されたプログラムコードに従って命令を実行する演算部であり、例えば、CPUやGPUなどで構成される。
【0070】
主メモリ204は、プロセッサ202が命令を実行するためのプログラムコードや各種ワークデータを一時的に格納する不揮発性記憶装置であり、例えば、DRAMやSRAMなどで構成される。
【0071】
ディスプレイ206は、プロセッサ202での演算処理によって生成される映像情報を表示し、例えば、LCDや有機ELディスプレイなどの表示デバイスで構成される。
【0072】
入力部208は、例えば、ユーザ操作を受け付けるマウスやキーボードなどの入力デバイスで構成される。
【0073】
ストレージ210は、開発装置200において利用あるいは生成されたデータを不揮発的に格納する不揮発性記憶装置であり、例えば、フラッシュメモリやハードディスクドライブなどで構成される。典型的には、ストレージ210には、OSやドライバなどを含むシステムプログラム212と、アプリケーションプログラムを開発するための開発プログラム214とが格納される。
【0074】
開発プログラム214は、アプリケーションプログラムのソースコードの作成編集、ソースコードのコンパイル、実行形式のアプリケーションプログラムへのパッケージなどの開発に必要な処理が実行される。より具体的には、開発プログラム214は、コンパイラ2141およびテーブル生成モジュール2142を含む。コンパイラ2141は、生成手段に対応し、ソースコードからアプリケーションプログラムの生成に係る処理を担当し、テーブル生成モジュール2142は、決定手段に対応し、解析支援情報とハッシュ値との組を決定する。これらの詳細については、後述する。
【0075】
開発プログラム214は、開発装置200の製造段階においてストレージ210に格納されていてもよいし、任意の配信サーバ(図示しない)からダウンロードの形で提供されてもよい。さらに、開発プログラム214を格納するコンピュータ読取可能記憶媒体(例えば、USBメモリや任意のメモリカード)(図示しない)を開発装置200に装着し、装着されたコンピュータ読取可能記憶媒体から開発プログラム214を読み出してストレージ210にインストールするようにしてもよい。
【0076】
なお、コンパイラ2141およびテーブル生成モジュール2142が互いに独立したモジュールとした構成例を示すが、これらを単一のモジュールに統合してもよい。すなわち、
図6に示されるコンパイル処理は、コンパイラ2141およびテーブル生成モジュール2142がそれぞれの処理を実行することで実現されてもよいし、これらを統一化したモジュールがすべての処理を実行することで実現されてもよい。
【0077】
通信モジュール222は、外部装置との間で無線通信するためのモジュールであり、例えば、イーサネット(登録商標)や無線LANなどのモジュールで構成される。
【0078】
なお、
図3には、プロセッサ202がプログラム(システムプログラム212および開発プログラム214)を実行することで各種処理を実現する形態(すなわち、ソフトウエア実装)を例示するが、これらの処理の一部をハードワイヤード回路で実現してもよい。具体的には、ASICまたはFPGAを含む演算回路が本実施の形態に従う開発装置200が実行すべき処理の全部または一部を担当するようにしてもよい。なお、演算回路には、プロセッサ202および主メモリ204を含めるようにしてもよい。したがって、本実施の形態に従う開発装置200に係る処理は、プロセッサ202および主メモリ204、ならびに/または、ASICもしくはFPGAのようなハードワイヤード回路を含む、演算回路によって実行されるとも言える。
【0079】
(b3:データベースサーバ300の構成例)
図4は、本実施の形態に従うデータベースサーバ300のハードウェア構成例を示す模式図である。データベースサーバ300は、後述するようなハッシュ値に対応付けられた情報を格納するための任意のコンピュータを包含する。典型的には、データベースサーバ300は、典型的には、ネットワーク接続された汎用コンピュータからなる。データベースサーバ300は、単一のコンピュータで構成されてもよいし、互いに連携した複数のコンピュータで構成されてもよい。各コンピュータは、1または複数のプロセッサを有している。各コンピュータが有している各プロセッサは、複数のプロセッサコアを有していてもよい。
【0080】
図4を参照して、データベースサーバ300は、主たるハードウェアコンポーネントとして、プロセッサ302と、主メモリ304と、ディスプレイ306と、入力部308と、ストレージ310と、通信モジュール322,324とを含む。これらのハードウェアコンポーネントは、バス332を介して通信可能に接続される。これらのハードウェアコンポーネントは、
図3に示すデータベースサーバ300のハードウェアコンポーネントと同様であるので、詳細な説明は繰り返さない。
【0081】
典型的には、ストレージ310には、OSやドライバなどを含むシステムプログラム312と、後述するような検索処理を実行するための検索プログラム314と、開発装置200により生成されるハッシュ値テーブル316とが格納される。
【0082】
検索プログラム314は、ハッシュ値をキーにした検索要求に対して、ハッシュ値テーブル316に格納される情報を応答する。
【0083】
なお、
図4には、プロセッサ302がプログラム(システムプログラム312および検索プログラム314)を実行することで各種処理を実現する形態(すなわち、ソフトウエア実装)を例示するが、これらの処理の一部をハードワイヤード回路で実現してもよい。具体的には、ASICまたはFPGAを含む演算回路が本実施の形態に従うデータベースサーバ300が実行すべき処理の全部または一部を担当するようにしてもよい。なお、演算回路には、プロセッサ302および主メモリ304を含めるようにしてもよい。したがって、本実施の形態に従うデータベースサーバ300に係る処理は、プロセッサ302および主メモリ304、ならびに/または、ASICもしくはFPGAのようなハードワイヤード回路を含む、演算回路によって実行されるとも言える。
【0084】
(b4:データ収集サーバ400の構成例)
本実施の形態に従うデータ収集サーバ400のハードウェア構成例は、
図4に示すデータベースサーバ300のハードウェア構成例と同様であるので、詳細な説明は繰り返さない。但し、データ収集サーバ400のストレージには、検索プログラム314およびハッシュ値テーブル316(
図4)は格納されない。
【0085】
[C.コンパイルおよびハッシュ値テーブル316の生成]
次に、アプリケーションプログラム30を生成するためのソースコード10のコンパイル処理について説明する。
【0086】
図5は、本実施の形態に従う情報処理システム1の開発装置200におけるコンパイル処理を説明するための模式図である。
図5には、
図1と同様に、ソースコード10がハッシュ出力命令12を含む例を示す。ハッシュ出力命令12には、ハッシュ値算出命令13および引数14が指定されている。ハッシュ出力命令12は、ハッシュ値算出命令13を内包するものであってもよいし、別の個所のハッシュ値算出命令13によって算出されたハッシュ値を用いてもよい。引数14として、任意の文字列(この例では、"Open varIN")が設定されている。この任意の文字列は、一種のコメントとして用いることもできる。
【0087】
開発装置200(の開発プログラム214)は、ソースコード10を内容解析することで、ハッシュ値算出命令13に関連付けられる解析支援情報26を決定する。例えば、解析支援情報26は、任意文字列261、行番号262、ソースコードファイル名263、ソースコードリビジョン264、更新日時265、および、任意定数値266のうち少なくともいずれか一つを含んでいてもよい。
【0088】
任意文字列261は、ソースコード10に含まれるハッシュ値算出命令13に関連付けて任意に入力された文字列である。任意文字列261の内容、数および長さなどについては、何ら制約はなく、開発者は任意の文字を記載できる。
【0089】
行番号262は、ソースコード10に含まれるハッシュ値算出命令13が存在する位置を示す情報であり、開発装置200がソースコード10を内容解析することで、その値を算出および決定する。行番号262は、対応するハッシュ値算出命令13が含まれていたソースコード10内の位置を特定するための情報に相当する。
【0090】
ソースコードファイル名263、ソースコードリビジョン264および更新日時265は、ソースコード10を含むソースコードファイル18に含まれる属性情報16(メタ情報)の典型例である。これらの情報に限られず、ソースコードファイル18に含まれる任意の情報を解析支援情報26として出力するようにしてもよい。ソースコードファイル名263は、対応するハッシュ値算出命令13が含まれていたソースコード10を特定するための情報に相当する。ソースコードリビジョン264は、対応するハッシュ値算出命令13が含まれていたソースコード10のリビジョン情報に相当する。更新日時265も一種の対応するハッシュ値算出命令13が含まれていたソースコード10のリビジョン情報に相当する。
【0091】
任意定数値266は、ソースコード10のコンパイル時に算出される値を意味し、例えば、動的に変化することが予定されている変数について、コンパイル時にその値が決定できるものについては、その算出された値が任意定数値266として出力される。
【0092】
また、開発装置200は、解析支援情報26とハッシュ値24との組を含むレコード28を出力する。このレコード28がデータベースサーバ300のハッシュ値テーブル316に順次追加される。
【0093】
なお、ハッシュ値算出命令13により算出されるハッシュ値24は、全くのランダムに算出されてもよいし、あるいは解析支援情報26の一部または全部をシードにして算出されてもよい。
【0094】
図6は、本実施の形態に従う情報処理システム1の開発装置200におけるコンパイル処理の主要部を示すフローチャートである。
図6に示す各ステップは、典型的には、開発装置200のプロセッサ202が開発プログラム214(コンパイラ2141およびテーブル生成モジュール2142)を実行することで実現される。
【0095】
図6を参照して、開発装置200は、ソースコードファイル18からソースコード10の先頭行を読み込み(ステップS100)、読み込んだ行にハッシュ値算出命令13が含まれるか否かを判断する(ステップS102)。
【0096】
ハッシュ値算出命令13が含まれていれば(ステップS102においてYES)、開発装置200は、アプリケーションプログラム30を生成するためのソースコード10に含まれるハッシュ値算出命令13に基づいて算出されたハッシュ値24が出力されるように、アプリケーションプログラム30を生成する処理を実行する。併せて、開発装置200は、ハッシュ値算出命令13に関連付けられる解析支援情報26とハッシュ値算出命令13によって算出されたハッシュ値24との組を決定する。
【0097】
より具体的には、開発装置200は、ソースコード10中のハッシュ値算出命令13の位置を示す情報の一例として行番号を算出する(ステップS104)とともに、開発装置200は、ソースコードファイル18の属性情報16を取得する(ステップS106)。また、開発装置200は、関連する変数が示す任意定数値を取得する(ステップS108)。そして、開発装置200は、対象のハッシュ値算出命令13についてのハッシュ値24を決定し(ステップS110)、対象のハッシュ値算出命令13を、算出された対応するハッシュ値24を配置するための命令とみなす(ステップS112)。さらに、開発装置200は、ハッシュ値算出命令13に関連付けられる解析支援情報26(ステップS104~S108で収集した情報)とハッシュ値算出命令13によって算出されたハッシュ値24との組(すなわち、解析支援情報26と上記関連付けられたハッシュ値算出命令13によって算出されたハッシュ値24との組)を含むレコード28を出力する(ステップS114)。
【0098】
ハッシュ値算出命令13が含まれていなければ(ステップS102においてNO)、ステップS104~S114の処理はスキップされる。
【0099】
開発装置200は、ソースコードファイル18に含まれるソースコード10の最終行まで処理が完了したか否かを判断する(ステップS116)。ソースコードファイル18に含まれるソースコード10の最終行まで処理が完了していなければ(ステップS116においてNO)、開発装置200は、ソースコードファイル18からソースコード10の次の行を読み込み(ステップS118)、ステップS102以下の処理を再度実行する。
【0100】
ソースコードファイル18に含まれるソースコード10の最終行まで処理が完了していれば(ステップS116においてYES)、開発装置200は、ソースコード10中のハッシュ値算出命令13を対応するハッシュ値(疑似ソースコード20中のハッシュ値出力命令22によって出力されるハッシュ値24に相当)を配置するための命令とみなし、ソースコード10(あるいは、疑似ソースコード20)からアプリケーションプログラム30を生成する(ステップS120)。また、開発装置200は、決定された解析支援情報26とハッシュ値24との組を格納する。より具体的には、開発装置200は、ステップS114において出力したレコード28をハッシュ値テーブル316に追加する(ステップS122)。なお、ハッシュ値テーブル316が存在しない場合には、ハッシュ値テーブル316が新たに生成する。そして、アプリケーションプログラム30の生成処理は終了する。
【0101】
[D.ハッシュ値テーブル316の決定および利用]
次に、アプリケーションプログラム30を生成するためのソースコード10のコンパイル処理によるハッシュ値テーブル316の決定および利用について説明する。
【0102】
図7は、本実施の形態に従う情報処理システム1の開発装置200により決定されるハッシュ値テーブル316の一例を示す図である。
図7を参照して、ハッシュ値テーブル316は、ハッシュ値コラム3161と、任意文字列コラム3162と、行番号コラム3163と、ソースコードファイル名コラム3164と、ソースコードリビジョンコラム3165と、更新日時コラム3166と、任意定数値コラム3167とを含む。
【0103】
ハッシュ値テーブル316には、開発装置200により決定されるレコード28が順次追加される。レコード28に含まれるハッシュ値24がハッシュ値コラム3161に格納され、レコード28に含まれる解析支援情報26(任意文字列261、行番号262、ソースコードファイル名263、ソースコードリビジョン264、更新日時265、および、任意定数値266)が、任意文字列コラム3162、行番号コラム3163、ソースコードファイル名コラム3164、ソースコードリビジョンコラム3165、更新日時コラム3166、および、任意定数値コラム3167にそれぞれ格納される。
【0104】
ハッシュ値テーブル316は、ソースコード10あるいはソースコードファイル毎に生成してもよい。但し、十分に大きな桁数のハッシュ値24を用意することで、ハッシュ値24同士の衝突は実質的に生じないので、複数のアプリケーションプログラム30からそれぞれ出力されるハッシュ値に対応する解析支援情報26を同一のハッシュ値テーブル316にまとめて格納するようにしてもよい。
【0105】
図7に示すハッシュ値テーブル316に含まれる、ソースコードファイル名コラム3164およびソースコードリビジョンコラム3165の値を参照することで、いずれのアプリケーションプログラム30から出力されたハッシュ値24に対応する解析支援情報26であるかを特定できる。
【0106】
図7に示すようなハッシュ値テーブル316を用いることで、任意のアプリケーションプログラム30から出力される1または複数のハッシュ値24に基づいて、アプリケーションプログラム30の実行状態を推定できる。
【0107】
図8は、実施の形態に従う情報処理システム1における解析支援出力500の決定処理について説明するための図である。
図8(A)を参照して、いずれかの端末装置100でのアプリケーションプログラム30の実行により出力された1または複数のハッシュ値24からなるハッシュ値ログ116が、データ収集サーバ400などを介してデータベースサーバ300へ提供されたとする。
【0108】
データ収集サーバ400は、ハッシュ値ログ116に含まれる各ハッシュ値24をキーにして、ハッシュ値テーブル316を参照することで、キーとなるハッシュ値24に対応する解析支援情報26(
図7など参照)を抽出する。そして、抽出した1または複数の解析支援情報26をフォーマッティングした上で、
図8(B)に示すような解析支援出力500を決定する。
【0109】
決定された解析支援出力500は、任意の方式で、対象のアプリケーションプログラム30の開発者などへ提供される。例えば、データベースサーバ300に接続されたディスプレイ306に表示されてもよいし、任意のプリンティングデバイスから印刷物として出力されてもよい。あるいは、データベースサーバ300にWebサーバ機能を実装し、Webサーバ機能を介して、任意のブラウザからWebアクセスできるようにしてもよい。
【0110】
なお、
図8(B)に示す解析支援出力500においては、行番号562および行番号570にあるハッシュ値24を出力する処理が2回繰り返し実行された後に、行番号650にあるハッシュ値24を出力する処理が実行されたことを示している。解析支援出力500に示される内容を参照することで、アプリケーションプログラム30の実行状態を推定できる。
【0111】
このとき、データ収集サーバ400は、アプリケーションプログラム30の実行中に発生したエラーを基準にして、対応する解析支援情報26を出力するようにしてもよい。発生したエラーを基準として対応する解析支援情報26をすることで、エラーの原因究明を容易化できる。
【0112】
図9は、実施の形態に従う情報処理システム1における解析支援出力500の決定処理手順を示すフローチャートである。
図9に示す各ステップは、典型的には、データベースサーバ300のプロセッサ302が検索プログラム314を実行することで実現される。
【0113】
図9を参照して、データベースサーバ300は、ハッシュ値ログ116を受信すると(ステップS200)、データベースサーバ300は、ハッシュ値ログ116に含まれるハッシュ値24の少なくとも一部を用いて、当該ハッシュ値と組とされた解析支援情報26を出力する処理を実行する。
【0114】
より具体的には、データベースサーバ300は、受信したハッシュ値ログ116に含まれる先頭のハッシュ値24を読み出す(ステップS202)。データベースサーバ300は、読み出したハッシュ値24をキーにして、ハッシュ値テーブル316から対応する解析支援情報26を抽出する(ステップS204)。
【0115】
データベースサーバ300は、ハッシュ値ログ116に含まれるすべてのハッシュ値24について処理が完了したか否かを判断する(ステップS206)。ハッシュ値ログ116に含まれるすべてのハッシュ値24について処理が完了していなければ(ステップS206においてNO)、データベースサーバ300は、ハッシュ値ログ116に含まれる次のハッシュ値24を読み出し(ステップS208)、ステップS204以下の処理を再度実行する。
【0116】
ハッシュ値ログ116に含まれるすべてのハッシュ値24について処理が完了していれば(ステップS206においてYES)、データベースサーバ300は、ステップS204において抽出した1または複数の解析支援情報26から解析支援出力500を決定する(ステップS210)。そして、解析支援出力500の決定処理は終了する。
【0117】
[E.解析支援出力500の決定に係る実装形態のバリエーション]
上述の説明においては、端末装置100で実行されるアプリケーションプログラム30から出力される1または複数のハッシュ値24からなるハッシュ値ログ116を、データ収集サーバ400を介してデータベースサーバ300に提供し、データベースサーバ300が解析支援出力500を決定する実装形態について説明した。しかしながら、上述したような実装形態に限られず、目的や用途に応じて任意の実装形態を採用できる。
【0118】
図10は、本実施の形態に従う情報処理システム1における解析支援出力500の決定に係る実装形態のバリエーションを示す図である。
【0119】
図10(A)には、端末装置100と、データ収集サーバ400と、データベースサーバ300とからなる実装形態を示す。具体的には、端末装置100において実行されるアプリケーションプログラム30から出力される1または複数のハッシュ値24からなるハッシュ値ログ116は、端末装置100からデータ収集サーバ400へ送信される。データ収集サーバ400は、検索プログラム314を有しており、データベースサーバ300のハッシュ値テーブル316を参照することで、解析支援出力500を決定する。
【0120】
すなわち、
図10(A)に示す実装形態においては、検索プログラム314とハッシュ値テーブル316とが別体の装置に実装されている。
図10(A)に示す実装形態を採用することで、1つのハッシュ値テーブル316を複数の検索プログラム314で共有するような構成を採用できる。
【0121】
図10(B)には、端末装置100と、開発装置200と、データベースサーバ300とからなる実装形態を示す。具体的には、端末装置100において実行されるアプリケーションプログラム30から出力される1または複数のハッシュ値24からなるハッシュ値ログ116は、開発装置200により収集される。開発装置200は、検索プログラム314を有しており、データベースサーバ300のハッシュ値テーブル316を参照することで、解析支援出力500を決定する。
【0122】
すなわち、
図10(B)に示す実装形態においては、開発装置200がアプリケーションプログラム30から出力されるハッシュ値ログ116を参照して、解析支援出力500を決定できるので、開発者へのフィードバックを迅速に行うことができる。
【0123】
図10(C)に示す実装形態は、開発装置200を用いたアプリケーションプログラム30の開発を想定したものであり、開発装置200においては、アプリケーションプログラム30を実行されるとともに、アプリケーションプログラム30の実行により出力される1または複数のハッシュ値24からなるハッシュ値ログ116も格納される。また、開発装置200は、検索プログラム314およびハッシュ値テーブル316も有しており、ハッシュ値ログ116から解析支援出力500を適宜決定する。
【0124】
このような実装形態を採用することで、アプリケーションプログラム30に内在する不具合を解消しつつ、アプリケーションプログラム30を開発できる。
【0125】
なお、
図10(A)~(C)にそれぞれ示される実装形態に限定されることなく、目的や用途に応じた任意の実装形態を採用できる。
【0126】
[F.ハッシュ値の時系列での格納]
次に、ハッシュ値を時系列で格納する処理について説明する。アプリケーションプログラム30から出力されるハッシュ値24を時系列に格納することで、エラーの原因究明などに有効である。
【0127】
図11は、本実施の形態に従う情報処理システム1において収集されるハッシュ値ログのデータ構造の一例を示す図である。
【0128】
図11(A)に示すハッシュ値ログ116Aは、出力されたハッシュ値24の各々に、発生順番を示す番号25が関連付けられているデータ構造を有している。
図11(A)に示すデータ構造を採用することで、番号25を参照することで、ハッシュ値24がアプリケーションプログラム30から出力された順序を把握でき、この順序によって、アプリケーションプログラム30の実行状態の推定を支援できる。
【0129】
図11(B)に示すハッシュ値ログ116Bは、出力されたハッシュ値24の各々に、発生時刻27が関連付けられているデータ構造を有している。
図11(B)に示すデータ構造を採用することで、発生時刻27を参照することで、ハッシュ値24がアプリケーションプログラム30から出力された順序を把握でき、この順序によって、アプリケーションプログラム30の実行状態をより確実に推定できる。
【0130】
なお、
図11(A)および(B)に示すデータ構造に限られず、アプリケーションプログラム30から出力されるハッシュ値24を時系列に格納できる構成であれば、あるいは、アプリケーションプログラム30から出力されるハッシュ値24の発生順序が特定できる構成であれば、どのような構成を採用してもよい。
【0131】
図11(A)および(B)に示すように、アプリケーションプログラム30から出力されるハッシュ値24を順次格納するようにしてもよいが、何らかのイベントの発生を条件として、所定期間あるいは所定数のハッシュ値24をハッシュ値ログ116として出力するようにしてもよい。
【0132】
図11(A)および(B)に示すように、ハッシュ値ログ116には、アプリケーションプログラム30が実行されることで出力されるハッシュ値24の順序を特定するための明示的な情報(番号25および発生時刻27)が含まれていてもよい。なお、アプリケーションプログラム30が実行されることで出力されるハッシュ値24をハッシュ値ログ116に順次格納するのであれば、その格納される順序自体が発生順序を意味するので、順序を特定するための明示的な情報を省略してもよい。
【0133】
図12は、本実施の形態に従う情報処理システム1においてエラー発生をトリガーとして収集されるハッシュ値ログの一例を示す図である。
図12を参照して、アプリケーションプログラム30において何らかのエラーが発生すると、アプリケーションプログラム30から順次出力されるハッシュ値24のうち、当該エラーの発生を基準とする所定期間に亘るハッシュ値24、あるいは、当該エラーの発生を基準とする所定数のハッシュ値24を、ハッシュ値ログ116として出力するようにしてもよい。
【0134】
図12に示すように、ハッシュ値ログ116に含まれるハッシュ値24を、エラーなどの任意のイベント発生に関連付けて限定することで、アプリケーションプログラム30に生じた何らかのエラーの原因究明に必要な解析支援情報26のみからなる解析支援出力500を決定できる。この場合、解析支援出力500においては、アプリケーションプログラム30の実行中に発生したエラーを基準にして、対応する解析支援情報が出力される。
【0135】
このように、端末装置100は、アプリケーションプログラム30の実行中にエラーが発生すると、当該エラーが発生したタイミングに関連付けられた所定個数のハッシュ値を保持し、データ収集サーバ400あるはデータベースサーバ300へ渡すようにしてもよい。
【0136】
図12に示すような構成に代えて、端末装置100は、アプリケーションプログラム30の実行中にエラーが発生するか否かに依存せず、アプリケーションプログラム30が実行されることで出力されるハッシュ値24を時系列に格納するようにしてもよい。
【0137】
[G.その他の実施形態]
ハッシュ値算出命令13を含むハッシュ出力命令12がソースコード10に任意の位置に配置される例を示すが、ハッシュ値を動的に算出するハッシュ値算出命令13ではなく、予め用意された複数のハッシュ値を予め定められた規則に沿って参照する、あるいは、ランダムに参照するような関数を用いてもよい。
【0138】
また、ハッシュ値算出命令13により算出されるハッシュ値24を明示的に埋め込んだ疑似ソースコード20を生成し、生成された疑似ソースコード20からアプリケーションプログラム30を生成するようにしてもよい。さらに、ソースコード10および/または疑似ソースコード20のコンパイル処理についても、どのような実装形態を採用してもよい。
【0139】
ハッシュ値算出命令13を含むハッシュ出力命令12がソースコード10に任意の位置に配置される例を示すが、ハッシュ値をコンパイル時の計算によって算出するハッシュ値算出命令13ではなく、予め用意された複数のハッシュ値を予め定められた規則に沿って参照する、あるいは、ランダムに参照するような関数を用いてもよい。
【0140】
また、ハッシュ値算出命令13により算出されるハッシュ値24を明示的に埋め込んだ疑似ソースコード20を生成し、生成された疑似ソースコード20からアプリケーションプログラム30を生成するようにしてもよい。さらに、ソースコード10および/または疑似ソースコード20のコンパイル処理についても、どのような実装形態を採用してもよい。
【0141】
[H.利点]
本実施の形態によれば、アプリケーションプログラム30のソースコード10にハッシュ値算出命令13を組み込んでおくことで、アプリケーションプログラム30の実行に応じてハッシュ値24が順次出力される。一方で、ハッシュ値算出命令13に関連付けられる解析支援情報26とハッシュ値24との組からなるハッシュ値テーブル316を用意しておくことで、アプリケーションプログラム30から順次出力されるハッシュ値24の意味を取得できる。
【0142】
このような構成を採用することで、パフォーマンス、セキュリティ、ユーザビリティの観点において利点がある。
【0143】
パフォーマンスについては、アプリケーションプログラム30が実行されることで出力されるハッシュ値24は予め定められた桁数であるので、少ないデータサイズでアプリケーションプログラム30の実行状態を推定できる。そのため、リソースの消費もわずかで済む。また、ハッシュ値24のデータサイズは固定であるので、ハッシュ値24の出力に必要なリソースを予め見積もることができ、経済的なハードウェア設計などが可能となる。
【0144】
セキュリティについては、アプリケーションプログラム30から出力されるハッシュ値24自体には何ら意味を有さないので、ハッシュ値24はアプリケーションプログラム30に対するリバースエンジニアリングなどを行うための情報を何ら有していない。また、配布されるアプリケーションプログラム30にも出力されるハッシュ値24のみが埋め込まれており、不要な情報が漏洩するようなリスクがない。
【0145】
ユーザビリティについては、開発者は、出力されるハッシュ値24などを意識することなく、ハッシュ出力命令12およびハッシュ値算出命令13をソースコード10の必要な位置に挿入するだけでよい。その上で、コンパイル時に、ソースコード10を内容解析することで生成された解析支援情報26とハッシュ値24との組がハッシュ値テーブル316として自動的に決定される。このように、開発者は特に意識することなく従来と同様の操作をするだけで、本実施の形態に従うハッシュ値を用いた解析支援機能を実現できる。
【0146】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0147】
1 情報処理システム、2 開発環境、10 ソースコード、12 ハッシュ出力命令、13 ハッシュ値算出命令、14 引数、16 属性情報、18 ソースコードファイル、20 疑似ソースコード、22 ハッシュ値出力命令、24 ハッシュ値、25 番号、26 解析支援情報、27 発生時刻、28 レコード、30 アプリケーションプログラム、100 端末装置、102,202,302 プロセッサ、104,204,304 主メモリ、106,206,306 ディスプレイ、108 タッチパネル、110,210,310 ストレージ、112,212,312 システムプログラム、116,116A,116B ハッシュ値ログ、120,208,308 入力部、122 インジケータ、124 スピーカ、126,222,322,324 通信モジュール、128 マイク、130 カメラ、132,232,332 バス、200 開発装置、214 開発プログラム、261 任意文字列、262,562,570,650 行番号、263 ソースコードファイル名、264 ソースコードリビジョン、265 更新日時、266 任意定数値、300 データベースサーバ、314 検索プログラム、316 ハッシュ値テーブル、400 データ収集サーバ、500 解析支援出力、3161 ハッシュ値コラム、3162 任意文字列コラム、3163 行番号コラム、3164 ソースコードファイル名コラム、3165 ソースコードリビジョンコラム、3166 更新日時コラム、3167 任意定数値コラム。