(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-04
(45)【発行日】2024-03-12
(54)【発明の名称】情報処理装置、その制御方法、及びプログラム
(51)【国際特許分類】
G06F 11/34 20060101AFI20240305BHJP
G06F 11/30 20060101ALI20240305BHJP
【FI】
G06F11/34 133
G06F11/30 140A
(21)【出願番号】P 2022539977
(86)(22)【出願日】2020-07-31
(86)【国際出願番号】 JP2020029557
(87)【国際公開番号】W WO2022024384
(87)【国際公開日】2022-02-03
【審査請求日】2022-12-13
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100122275
【氏名又は名称】竹居 信利
(72)【発明者】
【氏名】北村 秀介
【審査官】漆原 孝治
(56)【参考文献】
【文献】Tomasz Kalbarczyk,Analyzing Performance Differences between Multiple Code Versions,[online],2017年09月24日,[令和6年2月13日検索],インターネット<URL:https://web.archive.org/web/20170924024146/http://web.cs.ucla.edu/~tianyi.zhang/perfdiff.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/34
G06F 11/30
(57)【特許請求の範囲】
【請求項1】
プログラムファイルを記録するリポジトリを管理する手段と、
ユーザから、前記リポジトリに記録されたプログラムファイルの更新要求を受け入れる手段と、
当該更新要求を受け入れた際に、予め定めた方法で、前記プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得する基準情報取得手段と、
前記受け入れた更新要求に係るプログラムファイルに基づいて仮の実行オブジェクトを作成する仮実行オブジェクト作成手段と、
前記仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得する処理負荷情報取得手段と、
前記取得した基準情報に基づいて、前記仮の実行オブジェクトに係る処理負荷情報を検証する検証手段と、を含み、
前記基準情報取得手段は、少なくとも前記更新要求を受け入れた時点と、少なくとも一つの過去の時点でリポジトリに記録されていたプログラムファイルに基づいて作成されたそれぞれの実行オブジェクトの処理負荷を計測し、当該計測の結果を基準情報として取得し、
前記検証手段は、前記取得された各基準情報に関する所定の統計量と、前記仮の実行オブジェクトに係る処理負荷情報に関する所定の統計量との比較により、前記仮の実行オブジェクトに係る処理負荷情報を検証し、
当該検証の結果が、所定の処理に供される情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
前記検証手段は、ニューラルネットワークを用いて、各基準情報及び前記処理負荷情報に係る所定の統計量に係る異常検知を行う情報処理装置。
【請求項3】
プログラムファイルを記録するリポジトリを管理する手段と、
ユーザから、前記リポジトリに記録されたプログラムファイルの更新要求を受け入れる手段と、
当該更新要求を受け入れた際に、予め定めた方法で、前記プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得する基準情報取得手段と、
前記受け入れた更新要求に係るプログラムファイルに基づいて仮の実行オブジェクトを作成する仮実行オブジェクト作成手段と、
前記仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得する処理負荷情報取得手段と、
前記取得した基準情報に基づいて、前記仮の実行オブジェクトに係る処理負荷情報を検証する検証手段と、を含み、
前記基準情報取得手段は、少なくとも前記更新要求を受け入れた時点と、少なくとも一つの過去の時点でリポジトリに記録されていたプログラムファイルに基づいて作成されたそれぞれの実行オブジェクトの処理負荷を複数回計測し、当該複数回の計測の結果を基準情報の分布として取得し、
前記処理負荷情報取得手段は、前記仮の実行オブジェクトの処理負荷を複数回計測し、当該複数回の計測の結果を、処理負荷情報の分布として取得し、
前記検証手段は、前記取得された各基準情報の分布に関する所定の統計量と、前記仮の実行オブジェクトに係る処理負荷情報の分布に関する所定の統計量との比較により、前記仮の実行オブジェクトに係る処理負荷情報を検証し、
当該検証の結果が、所定の処理に供される情報処理装置。
【請求項4】
請求項
1から3のいずれか一項に記載の情報処理装置であって、
当該情報処理装置は、前記プログラムファイルに基づいて作成された実行オブジェクトをそれぞれ実行可能な第1の実行装置と第2の実行装置とに通信可能に接続され、
前記基準情報取得手段は、前記更新要求を受け入れた時点でリポジトリに記録されているプログラムファイルに基づいて作成された実行オブジェクトを、前記第1の実行装置にて実行させてその処理負荷を計測し、
前記処理負荷情報取得手段は、前記基準情報取得手段の動作と並行して、前記第2の実行装置に前記仮の実行オブジェクトを実行させてその処理負荷を計測する情報処理装置。
【請求項5】
プログラムファイルを記録するリポジトリを管理する情報処理装置を用い、
受入手段が、ユーザから、前記リポジトリに記録されたプログラムファイルの更新要求を受け入れ、
基準情報取得手段が、当該更新要求を受け入れた際に、予め定めた方法で、前記プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得し、
仮実行オブジェクト作成手段が、前記受け入れた更新要求に係るプログラムファイルに基づいて仮の実行オブジェクトを作成し、
処理負荷情報取得手段が、前記仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得し、
検証手段が、前記取得した基準情報に基づいて、前記仮の実行オブジェクトに係る処理負荷情報を検証し、
前記基準情報取得手段は、少なくとも前記更新要求を受け入れた時点と、少なくとも一つの過去の時点でリポジトリに記録されていたプログラムファイルに基づいて作成されたそれぞれの実行オブジェクトの処理負荷を計測し、当該計測の結果を基準情報として取得し、
前記検証手段は、前記取得された各基準情報に関する所定の統計量と、前記仮の実行オブジェクトに係る処理負荷情報に関する所定の統計量との比較により、前記仮の実行オブジェクトに係る処理負荷情報を検証し、
当該検証の結果を、所定の処理に供する情報処理装置の制御方法。
【請求項6】
プログラムファイルを記録するリポジトリを管理するコンピュータを、
ユーザから、前記リポジトリに記録されたプログラムファイルの更新要求を受け入れる手段と、
当該更新要求を受け入れた際に、予め定めた方法で、前記プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得する基準情報取得手段と、
前記受け入れた更新要求に係るプログラムファイルに基づいて仮の実行オブジェクトを作成する仮実行オブジェクト作成手段と、
前記仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得する処理負荷情報取得手段と、
前記取得した基準情報に基づいて、前記仮の実行オブジェクトに係る処理負荷情報を検証する検証手段と、として機能させ、
前記基準情報取得手段として機能させる際には、コンピュータに、少なくとも前記更新要求を受け入れた時点と、少なくとも一つの過去の時点でリポジトリに記録されていたプログラムファイルに基づいて作成されたそれぞれの実行オブジェクトの処理負荷を計測させて、当該計測の結果を基準情報として取得させ、
前記検証手段として機能させる際には、コンピュータに、前記取得された各基準情報に関する所定の統計量と、前記仮の実行オブジェクトに係る処理負荷情報に関する所定の統計量との比較により、前記仮の実行オブジェクトに係る処理負荷情報を検証させて、
当該検証の結果を、所定の処理に供
させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、その制御方法、及びプログラムに関する。
【背景技術】
【0002】
近年のコンピュータプログラムの開発においては、プログラムファイルを記録するリポジトリを用意し、このリポジトリ内のプログラムファイルの変更履歴を記録、管理するgit(https://git-scm.com)などのシステムが広く利用されている。
【0003】
こうしたシステムでは、プログラムの開発者は、作成したプログラムファイルをリポジトリに記録し、また、リポジトリに記録されているプログラムファイルを読み出して更新し、更新したプログラムファイルを、リポジトリに記録するといった作業を行うこととなる。
【0004】
また、複数の開発者が関わる開発作業では、開発者の一人がプログラムファイルを更新したときに、当該更新の履歴(作業ブランチ)を、全体の更新履歴(ターゲットブランチ)に取り込む(マージする)か否かのレビューを、他の開発者に対して求める、プルリクエストを作成することも広く行われている。
【0005】
プルリクエストを受けた他の開発者は、更新の内容を検証して、修正の必要がない場合に、当該更新履歴をターゲットブランチにマージする。
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、上記従来のシステムでは、プログラムファイルの更新が行われたときに、当該更新後のプログラムファイルに基づく実行オブジェクトの処理負荷について評価が行われるとは限らない。このため、処理負荷の大きくなる更新が意図せず行われた場合に、評価されることなくターゲットブランチにマージされてしまい、その後に処理負荷が大きいことが見出されて修正を求められる場合がある。この場合、それまでに行われたどの更新により処理負荷が大きくなったかがわかりにくく、開発に負担がかかっていた。
【0007】
本発明は上記実情に鑑みて為されたもので、上記開発の負担を軽減できる情報処理装置、及びプログラムを提供することを、その目的の一つとする。
【課題を解決するための手段】
【0008】
上記従来例の問題点を解決する本発明の一態様に係る情報処理装置は、プログラムファイルを記録するリポジトリを管理する手段と、ユーザから、前記リポジトリに記録されたプログラムファイルの更新要求を受け入れる手段と、当該更新要求を受け入れた際に、予め定めた方法で、前記プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得する基準情報取得手段と、前記受け入れた更新要求に係るプログラムファイルに基づいて仮の実行オブジェクトを作成する仮実行オブジェクト作成手段と、前記仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得する処理負荷情報取得手段と、前記取得した基準情報に基づいて、前記仮の実行オブジェクトに係る処理負荷情報を検証する検証手段と、を含み、当該検証の結果が、所定の処理に供されることとしたものである。
【発明の効果】
【0009】
本発明によると、開発の負担を軽減できる。
【図面の簡単な説明】
【0010】
【
図1】本発明の実施の形態に係る情報処理装置の構成例を表すブロック図である。
【
図2】本発明の実施の形態に係る情報処理装置の例を表す機能ブロック図である。
【
図3】本発明の実施の形態に係る情報処理装置の動作例を表すフローチャート図である。
【発明を実施するための形態】
【0011】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る情報処理装置1は、家庭用ゲーム機やスマートフォン、タブレット端末、パーソナルコンピュータ等、プログラムを実行する実行装置において実行される実行オブジェクト(プログラム)の開発を支援する。
【0012】
本実施の形態の情報処理装置1は、
図1に例示するように、制御部11と、記憶部12と、通信部13とを含んで構成される。また本実施の形態の一つの態様では、この情報処理装置1は、複数の実行装置2a,2b…との間で通信可能に接続される。
【0013】
制御部11は、CPU等のプログラム制御デバイスであり、記憶部12に格納された実行オブジェクトに従って動作する。本実施の形態では、この制御部11は、プログラムファイルを格納するリポジトリを管理する。このリポジトリには、少なくとも1つの実行オブジェクトに係るプログラムファイルが格納される。各実行オブジェクトに係るプログラムファイルは複数あってもよい。また制御部11は、ユーザから、リポジトリに記録されたプログラムファイルの更新要求を受け入れると、当該更新要求を受け入れた際に、予め定めた方法で、プログラムファイルに基づく実行オブジェクトの処理負荷に係る基準情報を取得する。
【0014】
さらに制御部11は、受け入れた更新要求に係るプログラムファイルと、リポジトリ内のプログラムファイルとを統合した結果に基づいて仮の実行オブジェクトを作成し、当該作成した仮の実行オブジェクトの処理負荷を計測する。制御部11は、当該計測の結果を、処理負荷情報として取得する。
【0015】
そして制御部11は、先に取得した基準情報に基づいて、仮の実行オブジェクトに係る処理負荷情報を検証し、当該検証の結果に基づき、所定の処理を実行する。この制御部11の詳しい処理の内容については後に述べる。
【0016】
記憶部12は、ディスクデバイスを含んで構成される。本実施の形態においてこの記憶部12は、制御部11によって実行される実行オブジェクト(プログラム)を保持する。この実行オブジェクト(プログラム)は、コンピュータ可読、かつ非一時的な記録媒体に格納されて提供され、この記憶部12に複写されたものであってもよい。
【0017】
また、本実施の形態の一例では、この記憶部12は、プログラムファイルを格納するリポジトリとして機能する。さらにこの記憶部12は、メモリデバイスを含み、制御部11のワークメモリとしても動作する。なお、リポジトリは、この情報処理装置1からアクセス可能であれば、ネットワーク上の他のコンピュータ機器のストレージ等に格納されていても構わない。
【0018】
通信部13は、ネットワークインタフェースであり、ネットワークを介して、ユーザの端末(パーソナルコンピュータでよい)との間で通信可能に接続される。この通信部13はユーザの端末からプログラムファイルの更新要求等、種々の指示を受け入れて、当該受け入れた指示を制御部11に出力する。またこの通信部13は、制御部11から入力される指示に従って、種々の情報を、ユーザの端末に対して送出する。
【0019】
また本実施の形態の一態様においては、情報処理装置1は、複数の実行装置2a,2b…(以下、それぞれを区別する必要がない場合は実行装置2と書くこととする)との間で通信可能に接続されている。ここで実行装置2は、それぞれ、情報処理装置1が作成する実行オブジェクトを処理可能な、家庭用ゲーム機等のコンピュータ機器である。
【0020】
次に、本実施の形態の情報処理装置1の制御部11の動作について説明する。この制御部11は、記憶部12に格納された実行オブジェクトに基づく動作を行い、
図2に例示するように、要求受入部31と、リポジトリ管理部32と、基準情報取得部33と、仮実行オブジェクト作成部34と、処理負荷情報取得部35と、検証部36と、処理実行部37とを機能的に含む構成を実現する。
【0021】
要求受入部31は、ユーザからリポジトリに対する操作の指示を受け入れる。この操作の指示には、リポジトリにプログラムファイルを格納する指示や、リポジトリに格納されたプログラムファイルを読み出す指示、プログラムファイルの変更履歴(ブランチ)の切り分けや統合の指示、プログラムファイルの更新要求など、種々の指示が含まれる。
【0022】
リポジトリ管理部32は、要求受入部31が受け入れた指示に従い、記憶部12内のリポジトリにプログラムファイルを格納し、あるいは格納したプログラムファイルを更新する処理などを実行する。
【0023】
本実施の形態のある例では、プログラムファイルを更新するユーザは、現在リポジトリに格納されているプログラムファイル(以下区別の必要があるときはオリジナルプログラムファイルと呼ぶ)に係るブランチ(ターゲットブランチ)を複写して、ローカルブランチを作成する。そしてユーザは、当該ローカルブランチにおいてプログラムファイルを更新する。既に述べたように、一つの実行オブジェクトの作成に用いられるプログラムファイルは複数あってもよく、ユーザはそのうちの少なくとも一つのプログラムファイルを更新する。また更新が適切であれば、ユーザは、ターゲットブランチにローカルブランチを取り込む(マージする)よう、ターゲットブランチの管理者に要求し、管理者が了承すると、更新後のプログラムファイルが、オリジナルプログラムファイルに置き換えられ、ローカルブランチがターゲットブランチにマージされる。
【0024】
本実施の形態の一例では、これら要求受入部31やリポジトリ管理部32の処理は、gitによって実現される。
【0025】
基準情報取得部33は、要求受入部31がプログラムファイルの更新要求を、ユーザから受け入れた際に、予め定めた方法で、当該更新要求に係るプログラムファイル(更新前のプログラムファイル)に基づく実行オブジェクトの処理負荷に係る基準情報を取得する。ここで基準情報の取得方法には種々の方法があるが、ここでは上記更新要求を受け入れた時点でリポジトリに記録されているオリジナルプログラムファイルに基づいて作成された実行オブジェクトの処理負荷を計測し、当該計測の結果を基準情報として取得するものとする。基準情報の他の取得方法については後に説明する。
【0026】
ここでの例では、この基準情報取得部33は、少なくとも更新要求を受け入れた時点でリポジトリに記録されているオリジナルプログラムファイル(オリジナルプログラムファイルを含むプログラムファイル群)に基づいて作成された実行オブジェクトPcurを、実行装置2aに送出し、実行装置2aにて実行させる。そして基準情報取得部33は、実行装置2aにおける処理負荷に係る情報を基準情報として取得する。ここで処理負荷に係る情報は例えば、上記実行オブジェクトPcurの実行を開始してから所定の画面が現れるまでの時間(いわば起動時間)Tcurなどを含んでよい。
【0027】
仮実行オブジェクト作成部34は、受け入れた更新要求に係るプログラムファイル(更新されたプログラムファイル)と、リポジトリ内のプログラムファイル(プログラムファイル群のうち、更新されたプログラムファイルに対応するオリジナルプログラムファイルを除くプログラムファイル)とを統合した結果に基づいて仮の実行オブジェクトを作成する。
【0028】
処理負荷情報取得部35は、仮実行オブジェクト作成部34が作成した仮の実行オブジェクトの処理負荷を計測し、当該計測の結果を、処理負荷情報として取得する。具体的にこの処理負荷情報取得部35は、仮実行オブジェクト作成部34が作成した仮の実行オブジェクトPmodを、実行装置2b(基準情報取得部33が実行オブジェクトPcurを送出した実行装置2aとは異なる実行装置)へ送出する。そして処理負荷情報取得部35は、実行装置2bにおける処理負荷に係る情報を取得する。ここで処理負荷に係る情報は基準情報取得部33が取得する基準情報と対比可能な情報を含むものとする。すなわちここでは実行装置2bが上記実行オブジェクトPmodの実行を開始してから所定の画面が現れるまでの時間(いわば起動時間)Tmodなどを含む。
【0029】
検証部36は、処理負荷情報取得部35が取得した仮の実行オブジェクトPmodに係る処理負荷情報を、基準情報取得部33が取得した基準情報に基づいて検証する。具体的にこの検証部36は、基準情報取得部33が取得した基準情報としての、実行オブジェクトPcurの起動時間(実行装置2aでの起動時間)Tcurと、処理負荷情報取得部35が取得した仮の実行オブジェクトPmodの起動時間(実行装置2bでの起動時間)Tmodとを比較する。
【0030】
検証部36は、例えばTmodとTcurとの差の絶対値α=|Tmod-Tcur|が、予め定めたしきい値θ(θ>0とする)と比較する。検証部36はこの比較の結果、α>θであるときには、プログラムファイルの更新により起動時間が著しく変化したと判断し、さらにTmod>Tcurであるか否かを調べる。ここでTmod<Tcurであれば、検証部36は、プログラムファイルの更新による起動時間の変化が適正なものであったとして、その旨の情報を処理実行部37に出力する。また検証部36は、Tmod>Tcurであれば、プログラムファイルの更新による起動時間が著しく増大したと判断して、その旨の情報を処理実行部37に出力する。
【0031】
一方、α≦θであるときには、検証部36は、プログラムファイルの更新による起動時間の変化が著しいものでなく、起動時間の変化が適正なものであったとして、その旨の情報を処理実行部37に出力する。
【0032】
処理実行部37は、検証部36における判断の結果を表す情報を受け入れて、当該情報をユーザに提示する。またこの処理実行部37は、検証部36における判断の結果に基づいて、更新されたプログラムファイルをオリジナルプログラムファイルに置き換えることを許可するか否かを制御してもよい。
【0033】
[検証部の処理の他の例]
また、ここまでの説明では、基準情報取得部33が基準情報として、更新直前の実行オブジェクトPcurの起動時間(実行装置2aでの起動時間)Tcurを取得し、また、処理負荷情報取得部35が仮の実行オブジェクトPmodの起動時間(実行装置2bでの起動時間)Tmodを取得していた。そして検証部36は、これらの差の絶対値α=|Tmod-Tcur|がしきい値より大きいか否かにより、処理負荷の変化が顕著であるか否かを検証していたが、本実施の形態はこれに限られない。
【0034】
本実施の形態の別の一例では、基準情報取得部33は、更新要求を受け入れた時点でリポジトリに記録されているオリジナルプログラムファイルに基づいて作成された更新直前の実行オブジェクトPcurを含む、過去にビルドされた実行オブジェクトを、少なくとも一つの実行装置2a,2b…に送出して、当該送出先の実行装置2において当該実行オブジェクトを処理する際の処理負荷に係る情報を、基準情報として複数回取得しておく。
【0035】
ここでn回分(nはn>2なる整数とする)の基準情報を取得する方法としては、k≧nなるk台の実行装置2を用いて並列的に実行オブジェクトを実行させて複数回分の基準情報を取得することとしてもよい。また、基準情報取得部33は、k台(kはk<nの整数とする)の実行装置2を用い、少なくとも1以上の実行装置2で複数回、実行オブジェクトを実行させて基準情報を取得することとしてもよい。この後者の場合、過去にビルドされたn-j個(jはj<nなる整数とする)の、バージョンの互いに異なる実行オブジェクトを実行させた際の基準情報を記録しておき、当該記録を取得するとともに、今回の更新直前の実行オブジェクトを実行装置2に実行させた際のj回分の基準情報を取得して、n回分の基準情報を取得してもよい。
【0036】
また処理負荷情報取得部35は、仮実行オブジェクト作成部34が作成した仮の実行オブジェクトPmodを、少なくとも一つの実行装置2(基準情報取得部33としての処理において実行オブジェクトPcurの送出先となった実行装置2とは異なる実行装置2であってもよい)に対して送出して、送出先の実行装置2において当該仮の実行オブジェクトを処理する際の処理負荷に係る処理負荷情報を複数回取得する。この例でも複数回分の処理負荷情報を取得する方法としては、処理負荷情報の取得回数以上の数の実行装置2を用いて並列的に行う方法によってもよいし、少なくとも一つの実行装置2が複数回実行する方法によっても構わない。
【0037】
この例では、基準情報となる起動時間Tcurや、処理負荷情報である起動時間Tmodがそれぞれ複数回分取得される(取得回数は基準情報と処理負荷情報とで異なっていてもよい)。
【0038】
そしてこの例では検証部36は、複数回取得された基準情報の分布と、複数回取得された処理負荷情報の分布とを比較する。この検証部36における比較は、例えばマン・ホイットニーのU検定、ステューデントのt検定、あるいはウェルチのt検定など広く知られた検定方法を用いて行うことができる。検証部36は、これらの検定方法により基準情報の分布と処理負荷情報の分布との間に顕著な差があるかを、危険率1%ないし5%で検定する。
【0039】
検証部36はこの比較の結果、各分布に顕著な差があると判断したときには、プログラムファイルの更新により処理負荷(ここでは起動時間)が著しく変化したと判断し、さらに取得された基準情報に関する所定の統計量が、処理負荷情報に関する所定の統計量より大であるか否かを調べる。ここで統計量は例えば中央値や平均値(統計量の演算の対象となるデータが正規分布に従うことがわかっている場合は平均値が好適である)等でよい。一例として、基準情報の中央値が、処理負荷情報の中央値より大でなければ、検証部36は、プログラムファイルの更新による処理負荷の変化が適正なものであったとして、その旨の情報を処理実行部37に出力する。また検証部36は、基準情報の中央値が、処理負荷情報の中央値より大であれば、プログラムファイルの更新により処理負荷が著しく増大したと判断して、その旨の情報を処理実行部37に出力する。
【0040】
さらに検証部36は、上記比較の結果、各分布に顕著な差がないと判断したときには、プログラムファイルの更新による処理負荷の変化が適正なものであったとして、その旨の情報を処理実行部37に出力する。
【0041】
なお、このように検証部36は、基準情報の分布に対して、更新後のプログラムファイルに基づいて作成された実行オブジェクトの処理負荷に関する情報が顕著に変化しているか否かを検定、ないし検出できればよく、従って統計的方法でなくても、ニューラルネットワークを用いた異常検知の技術等、種々の異常検知技術を用いて、変化が顕著であるか否かを調べることとしてもよい。
【0042】
[動作]
本実施の形態の情報処理装置1は、基本的には以上の構成を備えるものであり、次のように動作する。以下では、複数のプログラムファイルに基づいてビルドされる実行オブジェクトを開発しているユーザの一人が、当該プログラムファイルの少なくともを更新する場合を例として説明する。
【0043】
このプログラムファイルを更新するユーザは、現在リポジトリに格納されているプログラムファイルに係るターゲットブランチを複写する指示を行うと、情報処理装置1は、ターゲットブランチを複写してローカルブランチを作成する。
【0044】
そしてユーザは、このローカルブランチに係るプログラムファイルを編集して更新する。なお、ユーザはここで新たなプログラムファイルを作成して、ローカルブランチに追加してもよい。
【0045】
ユーザは、プログラムファイルの更新を終了すると、プログラムファイルの更新を登録(コミットしてローカルブランチでのプログラムファイルの更新を確定)するよう情報処理装置1に対して更新要求の指示を行う。情報処理装置1は、この更新要求を受けて、次の処理を開始する。
【0046】
情報処理装置1は、
図3に例示するように、この更新要求を受け入れた時点でリポジトリに記録されているオリジナルプログラムファイルに基づいて作成された実行オブジェクトPcurを複数の実行装置2a,2b…2nに送出して、これら実行装置2にて並列的に当該実行オブジェクトPcurを実行させる(S11)。そして情報処理装置1は、これら実行装置2のそれぞれにおいて実行オブジェクトPcurの実行を開始してから所定の画面が現れるまでの起動時間Tcurの計測値を基準情報として取得する(S12)。ここで取得される起動時間Tcurの計測値はn個分(nは2以上の整数)となる。
【0047】
また情報処理装置1は、これらの実行装置2における動作とは非同期に(つまり並列して)、ローカルブランチにおいて仮の実行オブジェクトPmodをビルドして作成する(S13)。ここでビルドに用いられるプログラムファイルは、ユーザにより更新されたプログラムファイルと、ユーザにより更新されていない、オリジナルプログラムファイルと内容を同じくするプログラムファイルとを含む。
【0048】
情報処理装置1は、作成した仮の実行オブジェクトPmodを、複数の実行装置2へ送出して、当該送出先となる複数の実行装置2のそれぞれにて仮の実行オブジェクトPmodを実行させる(S14)。そして情報処理装置1は、これらの実行装置2のそれぞれにおいて仮の実行オブジェクトPmodの実行が開始されてから所定の画面が現れるまでの起動時間Tmodの計測値を処理負荷情報として取得する(S15)。ここで取得される起動時間Tmodの計測値はm個分(mは2以上の整数)となる。なお、nとmとは互いに異なっていてもよい。なお、
図3は便宜的に、ステップS11,S12とステップS13,S14,S15とがこの順で実行されるように表現されているが、既に述べたように、これらは並列的に実行されてよい。
【0049】
ここで仮の実行オブジェクトPmodを実行する実行装置2は、実行オブジェクトPcurを実行する実行装置2とは異なるものとしておくと、ステップS12での実行装置2の処理と、ステップ15での実行装置2の処理とを並行して行うことができる。また、本実施の形態のこの例の場合は、各実行装置2のシステムソフトウエアのバージョン等の条件を統一しておくことが好適である。このため情報処理装置1は、これらステップS12、S15の処理で用いる各実行装置2に対して所定のタイミング(例えば今回の処理の直前や、平時の所定の時刻)でシステムソフトウエアのアップデートを行うよう指示しておくこととしてもよい。
【0050】
情報処理装置1は、ステップS12、S15でそれぞれ取得したm個分のTmodの計測値の分布とn個分のTcurの計測値の分布とに顕著な差があるかを所定の方法で検定する(S16)。具体的には、情報処理装置1は、これらの分布の間の差を、マン・ホイットニーのU検定により、危険率5%で検定する。
【0051】
m個分のTmodの計測値の分布とn個分のTcurの計測値の分布とに顕著な差があると判断したとき(S16:Yes)には、情報処理装置1は、プログラムファイルの更新により起動時間が著しく変化したと判断し、さらにm個分のTmodの中央値Tmod_mが、n個分のTcurの中央値Tcur_mより大であるか否かを調べる(S17)。ここでTmod_m<Tcur_mであれば(S17:No)、情報処理装置1は、プログラムファイルの更新による起動時間の変化は適正なものであったとして、ターゲットブランチ内のプログラムファイルを管理するユーザ(プログラムファイルを更新するユーザやローカルブランチをターゲットブランチへマージするか否かを判断するユーザ等を含む)に対して更新箇所のレビューを依頼する(プルリクエスト)処理を行う(S18)。
【0052】
その後、このプルリクエストに応答したユーザが更新が適切であるか否かを別途検証し、当該検証により更新が適切であれば、ユーザは、ターゲットブランチにローカルブランチを取り込む(マージする)よう、情報処理装置1に指示することとなる。このとき、情報処理装置1は、ローカルブランチでの変更内容をターゲットブランチに取り込む。
【0053】
一方、ステップS17において、Tmod_m>Tcur_mであれば(S17:Yes)、情報処理装置1は、プログラムファイルの更新による起動時間が著しく増大したと判断して、その旨の情報を、プログラムファイルを更新したユーザに通知する(S19)。ユーザはこの通知を受けて、プログラムファイルの更新内容を再度検討することが可能となる。
【0054】
またステップS16において、m個分のTmodの計測値の分布とn個分のTcurの計測値の分布とに顕著な差がないと判断したとき(S16:No)には、情報処理装置1は、プログラムファイルの更新により起動時間は著しく変化していないと判断して、ステップS18へ移行して処理を続ける。
【0055】
本実施の形態のこの例によると、プログラムファイルをコミットする際に情報処理装置1が人為的に追加的操作を行うことなく起動時間等の処理負荷に係る情報を収集して検証する。これによりユーザのプログラムファイルの更新によって処理負荷が著しく増大した場合、ユーザはその旨を早期に知ることができ、また他のユーザへのプルリクエスト前に処理負荷の著しい増大に対応することが可能となるので、全体的な開発の負担を軽減できる。
【0056】
[記録]
また情報処理装置1は、ステップS12やステップS15で取得した処理負荷に係る情報をログとして、記憶部12等に蓄積して記録してもよい。ここで記録は、処理負荷を計測した日時と、処理負荷を計測したブランチを特定する情報、並びに計測された処理負荷に関する情報を互いに関連付けたものとする。
【0057】
このようにログとして記録する場合、ステップS16,S17では、ログに記録されたTcur,Tmodなどの情報を読み出して種々の検定の処理等を行うこととしてもよい。
【0058】
[基準情報の取得方法の他の例]
またここでは更新要求を受け入れた時点でリポジトリに記録されていたプログラムファイルに基づいて作成されたそれぞれの実行オブジェクトを、実際に実行装置2において実行して処理負荷を計測することとしていたが、本実施の形態はこれに限られない。
【0059】
本実施の形態の一例では、更新要求を受け入れた時点だけでなく、今回の更新要求よりも過去の少なくとも一つの時点でリポジトリに記録されていたプログラムファイルに基づいて作成された実行オブジェクトの処理負荷を計測することとしてもよい。
【0060】
この例では、制御部11は、処理負荷情報取得部35としての処理において、仮実行オブジェクト作成部34が作成した仮の実行オブジェクトPmodを、少なくとも一つの実行装置2に対して送出して、送出先の実行装置2において当該実行オブジェクトを処理する際の処理負荷に係る処理負荷情報を複数回取得する。
【0061】
そして制御部11は、検証部36としての処理として、基準情報と処理負荷情報とを比較する。具体的に検証部36は、上記複数回分の基準情報の分布と、上記複数回取得された処理負荷情報の分布とを比較する。この比較の方法も既に述べたようにマン・ホイットニーのU検定などを用いればよい。検証部36は、これらの検定方法により基準情報の分布と処理負荷情報の分布との間に顕著な差があるかを、危険率1%ないし5%で検定することとなる。
【0062】
また基準情報は必ずしも実行オブジェクトの処理実績に基づくものでなくてもよく、予め定めたものであってもよい。例えば実行オブジェクトを初めて作成した場合に、当該初めて作成された実行オブジェクトの処理負荷に対して対比する基準情報は、予め定められたものとしてもよい。
【0063】
[処理負荷の情報の他の例]
また、基準情報や処理負荷情報となる、処理負荷に関する情報は、ここまでに例示した起動時間の情報に限られない。具体的にこの処理負荷に関する情報としては、
(1)起動時間
(2)起動した状態から処理を終了するまでに要する時間
(3)バージョンアップに要する時間
(4)ハードウェア資源の使用量(CPU、GPU、メモリなどの使用量)などがある。
【0064】
また、ゲーム等を含むアプリケーション(モバイル機器で実行されるアプリケーションを含む)では、上記に加え、
(5)ユーザインタフェース画面の遷移時間
(6)ネットワークからのデータロード時間
(7)所定の操作に対応する処理を実行するのに要する時間
(8)所定の設定操作を行ってから当該設定が反映されるまでに要する時間
(9)所定の画面の描画に要する時間、
(10)ネットワークからのアプリケーションのダウンロード時間、
(11)アプリケーションのインストールに要する時間、
などを含んでもよい。
【0065】
本実施の形態では、これらの情報を、プログラムファイルのコミットごとに人為的な追加的操作なく取得し、プログラムファイルの更新前の情報を比較して著しい変化がある場合にその旨の報知が行われるので、例えばメモリ使用量等の情報からメモリリークなどの異常検知がターゲットブランチへの統合前にでき、最終製品にメモリリークなどの不具合が含まれる可能性を低減できる。またこのようにしたことで全体的な開発の負担を軽減できる。
【0066】
[実施形態の効果]
本実施の形態の情報処理装置1によると、ユーザが更新したプログラムファイルを、リポジトリにコミットしようとするごとに、当該プログラムファイルに基づいて作成される実行オブジェクトの起動時間等の処理負荷の情報が収集され、基準情報と比較されることとなる。これにより、意図せず処理負荷の大きいプログラムコードが登録されることを防止し、また他の開発者による検証(プルリクエスト)の許否も制御されるので、開発の負担が軽減される。
【0067】
さらに、パフォーマンスの劣化につながるプログラムコードが、最終製品に混入する可能性も低減できる。
【符号の説明】
【0068】
1 情報処理装置、2 実行装置、11 制御部、12 記憶部、13 通信部、31 要求受入部、32 リポジトリ管理部、33 基準情報取得部、34 仮実行オブジェクト作成部、35 処理負荷情報取得部、36 検証部、37 処理実行部。