(57)【要約】【課題】所定の処理の実行時の振舞いと同一の振舞いを再現しつつ、再現時間を短縮することを目的とする。【解決手段】所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定する特定部と、前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する処理変更部と、を有する再現装置が提供される。【選択図】図８
2018156431.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定する特定部と、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する処理変更部と、
を有する再現装置。
【請求項２】
前記処理変更部は、前記待機処理を、特定した前記入力ログ情報のうち最も遅く記憶された入力ログ情報が到達する個数まで待つ処理に変更する、
請求項１に記載の再現装置。
【請求項３】
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定し、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する、
処理をコンピュータが実行する再現方法。
【請求項４】
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定し、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する、
処理をコンピュータに実行させるための再現プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、再現装置、再現方法及び再現プログラムに関する。
【背景技術】
【０００２】
アプリケーション実行時の入力情報を記憶した入力ログ情報から入力モジュール（ドライバ）を作成し、入力モジュールを用いてアプリケーション実行時に発生した振る舞いを別環境で再現する技術が知られている（例えば、特許文献１参照）。
【０００３】
センサデバイスなどを扱うＩｏＴシステムでは、センサの検出データが連続かつ長時間送信されるため、入力ログ情報の記録量が多くなる。このため、入力情報が入力されたときの時間間隔で入力ログ情報を入力し、再現すると、再現時間が膨大になり、時間制約上望ましくない。
【０００４】
これに対して、ソフトウェアに対するオペレータの操作内容を記憶し、その操作内容を操作時間によらず任意の再生速度で再現する手法がある。これによれば、調整可能な再生速度を最大にすることで、別環境における再現時間を、オペレータによる操作時、すなわち、入力情報の記録時に要した時間よりも短縮することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１０８７７３号公報
【特許文献２】特開２００９−２９５０８２号公報
【特許文献３】特開２０００−１３２４１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、入力ログ情報を用いてアプリケーション実行中に起きた状況を再現する際には、再現する処理が、入力ログ情報の記録時に実行された処理と同一の振舞いになるようにすることが不可欠である。これに対して、センサデバイス等を扱うＩｏＴシステムでは、上記手法のように再生速度を変更すると、再現時の処理の振舞いが、アプリケーション実行時の処理の振舞いと変わってしまうことが発生し得る。
【０００７】
例えば、心拍センサーを備えるＩｏＴシステムにおいて、アプリケーションが「心拍数が一定時間以上閾値を超えた場合に警告を促す」処理を実行中に、警告が発生した状況で心拍値の入力ログ情報が記憶されたとする。再現時に再生速度を変更し、最大速度で心拍値の入力ログ情報を連続的に再生装置に与えて再生すると、入力ログ情報を再生装置に与える速度が速いために、警告が発生しないということが起こり得る。つまり、警告を促す一定時間が経過する前に閾値を超えないデータが再生装置に与えられたり、一定時間以上経つ前にすべての入力ログ情報が与えられたりするため、上記処理の条件を満たす状況が発生しないためである。この場合、上記処理の条件、すなわち、「心拍数が一定時間以上閾値を超えた場合に警告を促す」処理の振舞いを再現することはできない。
【０００８】
そこで、１つの側面では、本発明は、所定の処理の実行時の振舞いと同一の振舞いを再現しつつ、再現時間を短縮することを目的とする。
【課題を解決するための手段】
【０００９】
１つの実施態様では、所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定する特定部と、前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する処理変更部と、を有する再現装置が提供される。
【発明の効果】
【００１０】
１つの側面では、本発明は、所定の処理の実行時の振舞いと同一の振舞いを再現しつつ、再現時間を短縮することができる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態に係る再現装置の機能構成の一例を示す図。
【図２】一実施形態に係るソースコードの断片例を示す図。
【図３】一実施形態に係る中断情報ファイルの一例を示す図。
【図４】一実施形態に係る入力ログ情報ＤＢの一例を示す図。
【図５】一実施形態に係る待機時間に到着した入力ログ情報の特定を説明する図。
【図６】一実施形態に係る変更プログラムの一例を示す図。
【図７】一実施形態に係るブレイクポイントファイルの一例を示す図。
【図８】一実施形態に係る再現装置のハードウェア構成の一例を示す図。
【図９】一実施形態に係る再現処理の一例を示すフローチャート。
【図１０】一実施形態に係る中断情報抽出処理の一例を示すフローチャート。
【図１１】一実施形態に係る入力ログ情報特定処理の一例を示すフローチャート。
【図１２】一実施形態に係るプログラム変更処理の一例を示すフローチャート。
【図１３】図１２のプログラム変更処理の詳細を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について添付の図面を参照しながら説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複した説明を省く。
【００１３】
［はじめに］
ＩｏＴシステムでは、バッチ処理などと異なり、センサからの入力データを受信する時刻の時間間隔ｓや入力データを入力するまでの待機時間ｔがその他の実行計算時間αよりも膨大である事が多い。このため、入力データを入力する時間間隔ｓを保ったまま、入力データを記録した入力ログ情報を用いて処理を再現すると、再現時間が膨大になり、時間制約上望ましくない。よって、処理の再現時に入力ログ情報を入力する時間間隔ｓや入力ログ情報を入力するまでの待機時間ｔを削減できれば実行計算時間αが処理実行時と同程度の時間であっても、再現時間の短縮に大きな効果が期待できる。
【００１４】
例えば、処理の実行時、時間間隔ｓ毎に入力情報を入力する。この場合、一の入力情報を取得するために少なくとも時間ｓがかかる。これに対して、本実施形態に係る再現装置１０によれば、入力ログ情報をデバッグ装置２０に与える再現時には、入力ログ情報が記憶されたときの順番を維持すれば、ほぼ同時に入力ログ情報をデバッグ装置２０に投入してもよく、かつ、時間待機メソッド（以下、「待機メソッド」という。）で待機時間ｔを待つことなく、処理実行時と同一の振舞いを再現することができる。
【００１５】
つまり、本実施形態に係る再現装置１０では、入力ログ情報の入力順を、入力情報の記憶時と同一にすれば時間間隔ｓよりも十分短い時間間隔ｓ’（＜ｓ）で入力ログ情報をデバッグ装置２０に投入することができる。例えば、１秒おきに入力情報を記憶していた場合であっても、再現時には０．１秒おきに入力ログ情報をデバッグ装置２０に与えてもよい。これにより、再現時間を画期的に短縮することができる。
【００１６】
また、本実施形態に係る再現装置１０は、再現時、待機メソッド実行のトリガとなる入力ログ情報を特定する。そして、その入力ログ情報のタイムスタンプをｓ０とすると、再現装置１０は、タイムスタンプがｓ０以上であって、ｓ０に待機メソッドの実行時の待機時間ｔを加え、タイムスタンプが(ｓ０＋ｔ)以下のタイムスタンプを持つ入力ログ情報を特定する。また、再現装置１０は、待機メソッドが実行する待機時間ｔまで待機する処理を、特定した入力ログ情報のうち、タイムスタンプ(ｓ０＋ｔ)以下で該タイムスタンプ(ｓ０＋ｔ)に最も近いタイムスタンプを持つ入力ログ情報が到達するまで待機する処理に変更する。
【００１７】
これにより、本実施形態に係る再現装置１０によれば、入力ログ情報の入力順序を維持すれば、デバッグ装置２９にほぼ同時に投入でき、かつ待機メソッドで待機時間ｔを待つことなく所定の処理の実行時と同一の処理の振る舞いを再現することが可能となる。これにより、所定の処理の再現時において、処理の実行時の振舞いと同一の振舞いを再現しつつ、再現時間を短縮することができる。
【００１８】
なお、本実施形態に係る再現装置１０が行う再現方法では、再現時、待機メソッドが実行されるトリガとなる入力ログ情報を判定する際の実行計算時間αを無視しているが、実行計算時間αは、入力情報の時間間隔ｓや待機時間ｔと比べて想定的に小さいため無視しても誤判定となることが少ない。また、本実施形態に係る再現方法では、実行計算時間αを再現処理に使用しないため、特定メソッドの稼働時刻などを記憶する必要がなくなる。具体的には、本実施形態に係る再現方法では、入力ログ情報の受信時刻である「タイムスタンプ」を用いて処理の実行時の振舞いと同一の振舞いを再現しつつ、再現時間を短縮する。このため、本実施形態に係る再現方法では、実施する際のコストを低くすることができる。
【００１９】
［再現装置の機能構成］
まず、本発明の一実施形態に係るシステムの全体構成と再現装置の機能構成の一例について、図１を参照しながら説明する。図１は、本実施形態に係るシステムの全体構成と再現装置１０等の機能構成の一例を示す。本システムでは、プログラムの欠陥等を取り除くデバッグが行われる。
【００２０】
本システムは、再現装置１０とデバッグ装置２０とを有する。再現装置１０は、所定の処理実行時における入力情報が記憶された入力ログ情報をデバッグ装置２０に与え、入力情報の記憶時（すなわち、処理実行時）の実行環境を提供する。デバッグ装置２０は、再現装置１０から与えられた入力ログ情報に基づき、処理メソッドを実行し、ソースコードの欠陥等を検出する。なお、本実施形態では、デバッグ装置２０は、再現装置１０と別体としているが、これに限らない。デバッグ装置２０の機能を実現するデバッガを再現装置１０に組み込むことにより、再現装置１０とデバッグ装置２０とを一体化させ、再現装置１０にてデバッグを実行してもよい。
【００２１】
再現装置１０は、サーバ装置、ＰＣ（パーソナルコンピュータ）、タブレット端末等の情報処理装置により実現可能である。デバッグ装置２０は、プログラム実行中に事前に指定したステップで実行を停止し、その後の振る舞いを動的に変更できる実行環境（デバッガなど）を備える。再現装置１０が扱う処理メソッドを記述するプログラム言語は、特定のプログラム言語に依存するものではなく、あらゆる言語で作成されたプログラムが本実施形態に係るソースコードとなり得る。
【００２２】
再現装置１０は、記憶部１１、中断情報抽出部１２、特定部１３、処理変更部１４及びデバッガ制御部１５を有する。記憶部１１は、ソースコードＤＢ１６、中断情報ファイル１７、入力ログ情報ＤＢ１８、変更プログラム１９及び再現プログラム３０を記憶する。
【００２３】
ソースコードＤＢ１６は、所定の処理を示すプログラム（処理メソッド）等の情報群の一例である。所定の処理を示す情報群は、所定のプログラムに限らず、所定のデータ構造を有するデータベース等であってもよい。図２は、本実施形態に係るソースコードＤＢ１６に格納されたソースコードの断片の一例を示す。図２のソースコードの断片は、待機処理を示す待機メソッド（「ｗａｉｔＭｏｄｕｌｅ」）のソースコード１６ａの一例である。
【００２４】
ソースコード１６ａの３行目では、実行環境（ａｐｐ）で「ｂｅｆｏｒｅＭｏｄｕｌｅ」からｄａｔａを受け取る。５〜９行目では、５０００ミリ秒の待機時間ｔが経過したらｆｕｎｃｔｉｏｎの中身（７行目及び８行目）の処理を実行する。７行目では、「ａｌｅｒｔＭｏｄｕｌｅ」へｄａｔａを送る。８行目では、Ｆｇという変数ｔｒｕｅに設定する。変数Ｆｇは、「ａｌｅｒｔＭｏｄｕｌｅ」にデータを送り続けないように制御するための変数である。つまり、変数Ｆｇが、「ｆａｌｓｅ」のとき、５０００ミリ秒の待機時間ｔ経過後にｄａｔａを送信する。
【００２５】
なお、変数Ｆｇは、初期化時にはｆａｌｓｅと設定され、ａｌｅｒｔＭｏｄｕｌｅにデータを一度送ったら、ｔｒｕｅに設定される。これにより、ａｌｅｒｔＭｏｄｕｌｅに一度データを送ったら、その後データを送り続けないように制御することができる。
【００２６】
中断情報抽出部１２は、与えられたソースコードから待機処理に関する中断情報を抽出する。中断情報抽出部１２は、ソースコードから待機処理を記述した待機メソッドを探索し、ソースコード中に待機メソッドがある場合、待機メソッドに定義される待機時間情報を含む中断情報を抽出する。抽出した中断情報は、中断情報ファイル１７に記憶される。図３には、本実施形態に係る中断情報ファイル１７の一例を示す。
【００２７】
中断情報ファイル１７には、中断情報毎にＩＤ、ファイル名、行番号及び待機時間が記憶される。例えば、図２に示した待機メソッドのソースコード１６ａでは、待機メソッドのファイル名が「ｗａｉｔＭｏｄｕｌｅ」であり、５〜９行目に記述されているように、５０００ミリ秒（待機時間）が経過したらｆｕｎｃｔｉｏｎの中身（７、８行目）の処理を実行する。この場合、中断情報ファイル１７には、中断情報のＩＤ（ここでは「１」）に対応して、ファイル名「ｗａｉｔＭｏｄｕｌｅ」、行番号「５」及び待機時間５０００（ミリ秒）が記憶される。
【００２８】
特定部１３は、中断情報に基づき、ソースコード１６ａの処理実行時における入力情報が記憶された入力ログ情報ＤＢ１８のうち、待機メソッドの実行により待機時間に記憶された入力ログ情報を特定する。そのために、特定部１３は、まず、入力ログ情報ＤＢ１８から待機メソッドの実行のトリガとなる入力ログ情報を特定する。特定部１３は、特定したトリガとなる入力ログ情報のタイムスタンプから待機時間（ここでは、５０００ミリ秒）以内に記憶された入力ログ情報を特定する。
【００２９】
図４は、本実施形態に係る入力ログ情報ＤＢ１８に記憶された入力ログ情報１８ａの一例を示す。入力ログ情報１８ａには、例えば、入力情報を受信した時刻を示すタイムスタンプと入力値とが記憶されている。特定部１３は、待機メソッドが実行される直前の、トリガとなった入力ログ情報のタイムスタンプを使用して、該タイムスタンプ以上、該タイムスタンプ＋待機時間ｔ以下の時間に記憶された入力ログ情報１８ａを特定する。
【００３０】
例えば、本実施形態では、図５に示す中断情報ファイル１７に、待機メソッドの中断情報として、ファイル名「ｗａｉｔＭｏｄｕｌｅ」、行番号「５」及び待機時間「５０００（ミリ秒）」が記憶されている。デバッグ装置２０において中断時の実行環境データ５０が、メソッド「ｗａｉｔＭｏｄｕｌｅ（５）」、ｄａｔａ「１３１」、・・・である場合、デバッグ中の変数を取得する際、ｄａｔａという変数に「１３１」が格納されているとき、ｗａｉｔＭｏｄｕｌｅの待機メソッドが開始されることを示す。
【００３１】
つまり、この場合、ファイル名「ｗａｉｔＭｏｄｕｌｅ」の待機メソッドが開始されるトリガとなる入力ログ情報は、入力ログ情報１８ａのうち、入力値が「１３１」のタイムスタンプ「１４７９５３３５００」であると特定される。
【００３２】
よって、特定部１３は、入力ログ情報Ａ（トリガとなる入力ログ情報１８ａ）のタイムスタンプから、入力ログ情報Ａのタイムスタンプ＋待機時間が示す時刻までの間に記憶された入力ログ情報１８ａを特定する。この例では、到着時刻（タイムスタンプ）が、ｓ０以上、かつ、（ｓ０＋５０００（待機時間））以下であって、（ｓ０＋５０００）の値に最も近いタイムスタンプの入力ログ情報Ｂを最大の入力ログ情報１８ａとし、入力ログ情報Ａ〜入力ログ情報Ｂの間のｎ（ｎ≧１）個の入力ログ情報１８ａを特定する。図５では、一例として、特定した入力ログ情報１８ａの個数である待機数ｎを５としている。
【００３３】
処理変更部１４は、待機メソッドにより実行される待機処理（すなわち、待機時間が経過するまで待機する処理）を、特定した入力ログ情報が到達するまで待つ処理に変更する。すなわち、処理変更部１４は、待機メソッドが呼ばれる直前に、定められた待機時間だけ待つ待機処理を「トリガとなる入力ログ情報のタイムスタンプ（図５のｓ０）＋待機時間以下であって、かつ（タイムスタンプｓ０＋待機時間）に最も近い時刻のタイムスタンプのデータが到達するまで待つ」という処理に置き換える。
【００３４】
例えば、図５の例では、処理変更部１４は、入力ログ情報Ａが入力されたことをトリガとして実行される待機メソッド「ｗａｉｔＭｏｄｕｌｅ」において、５０００ミリ秒の待機時間が経過するまで待機する待機処理を、入力ログ情報Ａのタイムスタンプｓ０に待機時間５０００を加算した時刻「１４７９５３８５００」以下の値であって、その値に最も近いタイムスタンプ「１４７９５３７５１１」の入力ログ情報Ｂが到達するまで待つ処理に変更される。具体的には、待機数ｎの個数の入力ログ情報が到達するまで待つ処理になる。
【００３５】
図６は、本実施形態に係る変更プログラム１９の一例を示す。図６では、本実施形態の「ｗａｉｔＭｏｄｕｌｅ」の待機メソッドにおいて、変更前の「５０００ミリ秒待ってから「ａｌｅｒｔＭｏｄｕｌｅ」へデータを送る処理（図２のソースコード１６ａの５行目〜９行目の「ｓｅｔＴｉｍｅｏｕｔ」）」を、変更後の「トリガの入力ログ情報から待機数ｎ（図５の例ではｎ＝５）の入力ログ情報が到着するまで待ってから「ａｌｅｒｔＭｏｄｕｌｅ」へデータを送る処理」に変更するプログラムが作成されている。
【００３６】
なお、図１の再現プログラム３０は、再現処理（中断情報抽出処理、入力ログ情報特定処理、プログラム変更処理を含む）をコンピュータに実行させるためのプログラムである。
【００３７】
デバッガ制御部１５は、デバッグ装置２０と連携するための制御を行う。例えば、デバッガ制御部１５は、中断したプログラムの再開を指示する。
【００３８】
デバッグ装置２０は、記憶部２１及びデバッグ実行部２２を有する。記憶部２１は、ブレイクポイントファイル２３を記憶する。図７は、本実施形態に係るブレイクポイントファイル２３の一例を示す。ブレイクポイントファイル２３は、中断情報抽出部１２が抽出した中断情報から作成され、再現装置１０から送信され、記憶部２１に記憶される。図７のブレイクポイントファイル２３では、「ｗａｉｔＭｏｄｕｌｅ」の待機メソッドの５行目になる直前でデバッグのプログラムを一時停止することを定義している。
【００３９】
デバッグ実行部２２は、デバッガを使用して再現装置１０から入力する入力ログ情報を使用してプログラムのデバッグを行う。
【００４０】
［ハードウェア構成］
次に、本実施形態に係る再現装置１０のハードウェア構成について、図８を参照して説明する。図８は、本実施形態に係る再現装置１０のハードウェア構成の一例を示す。再現装置１０は、入力装置１０１、出力装置１０２、外部Ｉ／Ｆ１０３、ＲＡＭ（Random  Access  Memory）１０４、ＲＯＭ（Read  Only  Memory）１０５、ＣＰＵ（Central  Processing  Unit）１０６、通信Ｉ／Ｆ１０７、及びＨＤＤ（Hard  Disk  Drive）１０８などを備え、それぞれがバスＢで相互に接続されている。
【００４１】
入力装置１０１は、キーボードやマウスなどを含み、再現装置１０に情報の入力等の各操作信号を入力するために用いられる。出力装置１０２は、ＬＣＤ（Liquid  crystal  Display）モニタ等のディスプレイ、プリンタ、ＣＲＴ（Cathode  Ray  Tube）などを含み、各種の処理結果を出力する。通信Ｉ／Ｆ１０７は、再現装置１０をネットワークに接続するインターフェースである。これにより、再現装置１０は、通信Ｉ／Ｆ１０７を介して、他の機器（デバッグ装置２０等）とデータ通信を行うことができる。
【００４２】
ＨＤＤ１０８は、再現プログラム３０等のプログラム及びデータ等を格納している不揮発性の記憶装置である。格納されるプログラムやデータには、再現装置１０の全体を制御する基本ソフトウェア及びアプリケーションソフトウェアがある。例えば、ＨＤＤ１０８には、各種のデータベースやファイル等が格納されてもよい。
【００４３】
外部Ｉ／Ｆ１０３は、外部装置とのインターフェースである。外部装置には、記憶媒体１０３ａなどがある。これにより、再現装置１０は、外部Ｉ／Ｆ１０３を介して記憶媒体１０３ａの読み取り及び／又は書き込みを行うことができる。記憶媒体１０３ａには、ＣＤ（Compact  Disk）、及びＤＶＤ（Digital  Versatile  Disk）、ならびに、ＳＤメモリカード（SD  Memory  card）やＵＳＢメモリ（Universal  Serial  Bus  memory）等がある。
【００４４】
ＲＯＭ１０５は、電源を切っても内部データを保持することができる不揮発性の半導体メモリである。ＲＯＭ１０５には、ネットワーク設定等のプログラム及びデータが格納されている。ＲＡＭ１０４は、プログラムやデータを一時保持する揮発性の半導体メモリである。ＣＰＵ１０６は、ＨＤＤ１０８やＲＯＭ１０５などの記憶装置から、プログラムやデータをＲＡＭ１０４上に読み出し、処理を実行することで、装置全体の制御や搭載機能を実現する演算装置である。
【００４５】
かかる構成により、本実施形態に係る再現装置１０では、ＣＰＵ１０６が、例えばＲＡＭ１０４、ＲＯＭ１０５、ＨＤＤ１０８内に格納された再現プログラム３０及びデータを用いて、再現処理、中断情報抽出処理、入力ログ情報特定処理及びプログラム変更処理を実行する。
【００４６】
なお、ソースコードＤＢ１６、中断情報ファイル１７及び入力ログ情報ＤＢ１８は、再現装置１０内のＨＤＤ１０８等の記憶領域又はネットワークを介して再現装置１０に接続されるクラウド上のサーバ等に格納され得る。
【００４７】
図２に示す再現装置１０の各機能部のうち、中断情報抽出部１２、特定部１３、処理変更部１４は、再現プログラム３０がＣＰＵ１０１に実行させる処理により実現される。デバッガ制御部１５は、デバッガを制御するためのプログラムがＣＰＵ１０１に実行させる処理により実現可能である。記憶部１１の機能は、例えば、ＲＡＭ１０４、ＲＯＭ１０５及びＨＤＤ１０８により実現可能である。なお、図２は機能に着目したブロック図を描いており、これらの機能ブロックで示した各部のソフトウェアを実行するプロセッサはハードウェアである。
【００４８】
［再現処理］
次に、本実施形態に係る再現装置１０により実行される再現処理の全体について図９を参照して説明する。図９は、一実施形態に係る再現処理の一例を示すフローチャートである。
【００４９】
本処理が開始されると、中断情報抽出部１２は、ソースコードＤＢ１６から中断情報を抽出する（ステップＳ１０）。抽出した中断情報は、中断情報ファイル１７に記憶される。ステップＳ１０の中断情報抽出処理の詳細は、図１０を参照して後述される。
【００５０】
次に、デバッガ制御部１５は、抽出した中断情報から作成したブレイクポイントファイル２３をデバッグ装置２０へ送信し、再現対象のソースコードのプログラムの実行開始を指示する（ステップＳ１２）。これにより、デバッグ装置２０において再現対象のソースコードのプログラムが開始される。また、デバッグ装置２０において、ブレイクポイントファイル２３が記憶部２１に記憶される。
【００５１】
次に、デバッガ制御部１５は、デバッグ装置２０において実行中のプログラムの中断を検出する（ステップＳ１４）。プログラムの中断が検出されると、特定部１３は、中断情報から中断時の実行環境情報を取得し、待機メソッド開始のトリガとなった入力ログ情報を特定する（ステップＳ１６）。
【００５２】
次に、特定部１３は、トリガとなった入力ログ情報のタイムスタンプｓ０以上であって、タイムスタンプｓ０＋待機時間）以下のタイムスタンプを持つ入力ログ情報と、特定した入力ログ情報の待機数ｎを特定する（ステップＳ１８）。ステップＳ１６及びＳ１８の入力ログ情報特定処理の詳細は、図１１を参照して後述される。
【００５３】
次に、処理変更部１４は、実行中の処理において待機メソッドが呼ばれる直前に、待機メソッドの処理をトリガの入力ログ情報のタイムスタンプｓ０に待機時間を加算した時刻以下であって、最大のタイムスタンプの入力ログ情報が到達するまで待つ」という処理に変更する変更プログラムを作成する（ステップＳ２０）。ステップＳ２０のプログラム変更処理の詳細は、図１２及び図１３を参照して後述される。
【００５４】
デバッガ制御部１５は、待機メソッドの処理が変更プログラムに書き替えられたプログラムの実行の再開を制御し（ステップＳ２２）、本処理を終了する。
【００５５】
［中断情報抽出処理］
次に、図９のステップＳ１０にて実行される中断情報抽出処理の詳細について図１０を参照して説明する。図１０は、一実施形態に係る中断情報抽出処理の一例を示すフローチャートである。
【００５６】
図１０の中断情報抽出処理では、中断情報抽出部１２は、ソースコードＤＢ１６から待機メソッド（例えばｓｅｔＴｉｍｅｏｕｔ）を探索する（ステップＳ３０）。次に、中断情報抽出部１２は、待機メソッドが見つかったかを判定する（ステップＳ３２）。中断情報抽出部１２は、待機メソッドが見つからなかったかと判定した場合、中断情報抽出処理を終了する。
【００５７】
ステップＳ３２において、中断情報抽出部１２は、待機メソッドが見つかったかと判定した場合、待機メソッドのファイル名と行番号を取得する（ステップＳ３４）。次に、中断情報抽出部１２は、取得したファイル名と行番号を中断箇所としたデバッグ装置２０用のブレイクポイントファイル２３を作成し、出力する（ステップＳ３６）。
【００５８】
次に、中断情報抽出部１２は、当該待機メソッドの引数に含まれる待機時間を取得し、ＩＤ、ファイル名、行番号及び待機時間を中断情報として中断情報ファイル１７に記憶し（ステップＳ３８）、中断情報抽出処理を終了する。
【００５９】
なお、本実施形態では、図９のステップＳ１２において、再現処理中に中断情報抽出処理を行っているが、これに限らない。例えば、ステップＳ１２の中断情報抽出処理は、再現処理を行う前に予め実行されてもよい。この場合、中断情報抽出部１２は、再現処理の実行前に事前にソースコードを解析し、中断情報を抽出して中断情報ファイル１７及びブレイクポイントファイル２３を作成しておいてもよい。
【００６０】
［入力ログ情報特定処理］
次に、図９のステップＳ１６及びＳ１８にて実行される入力ログ情報特定処理の詳細について図１１を参照して説明する。図１１は、一実施形態に係る入力ログ情報特定処理の一例を示すフローチャートである。
【００６１】
図１１の入力ログ情報特定処理では、特定部１３は、待機メソッドに渡されている中断地点のデータをデバッグの実行環境から取得する（ステップＳ４０）。図５の例では、中断時の実行環境データ５０に基づき、中断地点のデータの「１３１」が取得される。
【００６２】
図１１に戻り、次に、特定部１３は、入力ログ情報ＤＢ１８をタイムスタンプの早い順に探索し、取得したデータと同値の入力ログ情報を、待機メソッドを実行するトリガとなる入力ログ情報と特定する（ステップＳ４２）。図５の例では、タイムスタンプの早い順に入力ログ情報１８ａを探索すると、入力値が「１３１」の入力ログ情報Ａが見つかる。特定部１３は、この入力ログ情報Ａを、待機メソッドを実行するトリガとなる入力ログ情報、つまり、待機メソッドが実行される直前の入力ログ情報と特定する。
【００６３】
図１１に戻り、次に、特定部１３は、中断地点のファイル名、行番号に相当する中断情報を取得し、待機時間の情報を得る（ステップＳ４４）。次に、特定部１３は、入力ログ情報ＤＢ１８から、特定したトリガの入力ログ情報のタイムスタンプに待機時間を加算した値以下の条件を満たす入力リグ情報のうち、最大のタイムスタンプを持つ入力ログ情報を特定する（ステップＳ４６）。
【００６４】
次に、特定部１３は、特定したトリガの入力ログ情報から最大のタイムスタンプを持つ入力ログ情報までの入力ログ情報の個数を示す待機数ｎを記憶部１１に記憶する（ステップＳ４８）、入力ログ情報特定処理を終了する。
【００６５】
図５の例では、特定部１３は、トリガとなる入力ログ情報Ａと、入力ログ情報Ａのタイムスタンプｓ０に待機時間ｔ（＝５０００）を加算した（ｓ０＋ｔ）の値に最も近い最大のタイムスタンプの入力ログ情報Ｂを特定する。そして、特定部１３は、入力ログ情報Ａから入力ログ情報Ｂまでの入力ログ情報の個数である待機数ｎ（ｎ≧１）を特定する。図５では、一例として、特定した入力ログ情報１８ａの待機数ｎを５としている。待機数ｎは、記憶部１１に記憶される。
【００６６】
［プログラム変更処理］
次に、図９のステップＳ２０にて実行されるプログラム変更処理の詳細について図１２及び図１３を参照して説明する。図１２は、一実施形態に係るプログラム変更処理の一例を示すフローチャートである。図１３は、図１２のプログラム変更処理の詳細を示すフローチャートである。
【００６７】
図１２のプログラム変更処理では、処理変更部１４は、次のステップで実行しようとしているメソッドを待機メソッドと特定する（ステップＳ６０）。次に、処理変更部１４は、特定した待機メソッド変更処理を行い（ステップＳ６２）、プログラム変更処理を終了する。
【００６８】
ステップＳ６２の待機メソッド変更処理の詳細を図１３に示す。図１３では、処理変更部１４は、まず、変数Ｆｇを初期化する（ステップＳ６３）。次に、処理変更部１４は、変数ｉが未定義か否かを判定する（ステップＳ６４）。処理変更部１４は、変数ｉが未定義であると判定した場合、変数ｉに０を設定し（ステップＳ６６）、本処理を終了する。一方、処理変更部１４は、変数ｉが定義されていると判定した場合、変数ｉを１インクリメントし（ステップＳ６８）、変数ｉが、待機数ｎ以上かを判定する（ステップＳ７０）。処理変更部１４は、変数ｉが待機数ｎ以上であると判定した場合、待機メソッドに渡される予定のコールバック関数を呼び出し（ステップＳ７２）、本処理を終了する。一方、処理変更部１４は、変数ｉが待機数ｎ未満であると判定した場合、本処理を終了する。図６の変更プログラム１９の例では、コールバック関数は、「ａｌｅｒｔＭｏｄｕｌｅ」である。また、一度この関数が呼び出され、データの受け渡しが行われた後は、変数Ｆｇをｆａｌｓｅからｔｒｕｅに変更することで、「ａｌｅｒｔＭｏｄｕｌｅ」の関数にデータを送り続けないように制御される。
【００６９】
以上に説明したように、本実施形態に係る再現方法によれば、待機メソッドが実行されるトリガとなる入力情報の記憶時のタイムスタンプ（図５のｓ０）が特定される。そして、待機メソッドにより実行される「待機時間停止する処理」を、「中断させる（待機メソッドを実行させる）トリガの入力ログ情報のタイムスタンプ（ｓ０）以上であって、そのタイムスタンプ（ｓ０）に待機時間ｔを加えたタイムスタンプ(ｓ０＋ｔ)以下の条件を満たす最大のタイムスタンプを持つ入力ログ情報が到達するまで待機する処理」に変更する。より具体的には、「待機時間停止する処理」を、「待機数ｎが示す個数の入力ログ情報が到達するまで待機する処理」に変更する。
【００７０】
これにより、実際に待機メソッドにおいて待機時間を待つ必要はなくなり、待機数ｎの入力ログ情報が到達するまで待つことで、処理実行時と同一の振舞いを再現し、かつ再現時には入力ログ情報を順序を維持すればほぼ同時に投入でき、再現時間を短縮できる。
【００７１】
以上、再現装置、再現方法及び再現プログラムを上記実施形態により説明したが、本発明に係る再現装置、再現方法及び再現プログラムは上記実施形態に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能である。また、上記実施形態及び変形例が複数存在する場合、矛盾しない範囲で組み合わせることができる。
【００７２】
例えば、上記実施形態では、処理変更部１４は、待機処理を、特定した入力ログ情報のうち最大のタイムスタンプを持つ入力ログ情報が到達する個数まで（＝待機数ｎの入力ログ情報が到達するまで）待つ処理に変更した。しかしながら、これに限らず、処理変更部１４は、待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更してもよい。所定個は、待機数ｎよりも少ない値であってもよい。ただし、待機処理を、待機数ｎの入力ログ情報が到達するまで待つ処理することで、処理の振舞いを変えずに再現時間を最も短縮できる。
【００７３】
また、上記実施形態では、再現装置１０をプログラムの欠陥を検出するためのデバッガに使用した。しかしながら、本発明に係る再現装置１０は、プログラムのデバッグに限らず、その他の用途に用いることができる。例えば、ＩｏＴシステムにおいてセンサが取得した心拍数に関する入力ログ情報から患者等の心拍数に関する解析や検査を行うために、本発明に係る再現方法を用いて心拍数の状態を再現することができる。これにより、心拍数の記録時と再現時の処理の振舞いを同一にしつつ、再現時間を短縮することで、データの解析や検査を迅速に行うことができる。
【００７４】
以上の説明に関し、更に以下の項を開示する。
（付記１）
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間内に記憶された入力ログ情報を特定する特定部と、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する処理変更部と、
を有する再現装置。
（付記２）
前記特定部は、特定した前記入力ログ情報の個数を特定し、
前記処理変更部は、前記待機処理を、特定した前記入力ログ情報が前記特定した個数到達するまで待つ処理に変更する、
が到達するまで待つ処理に変更する、
付記１に記載の再現装置。
（付記３）
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定し、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する、
処理をコンピュータが実行する再現方法。
（付記４）
特定した前記入力ログ情報の個数を特定し、
前記待機処理を、特定した前記入力ログ情報のうち最も遅く記憶された入力ログ情報が到達する個数まで待つ処理に変更する、
付記３に記載の再現方法。
（付記５）
所定の処理を示す情報群から抽出した待機処理に関する中断情報に基づき、前記処理の実行時の入力情報が記憶された入力ログ情報のうち、前記待機処理の実行により発生する待機時間に記憶された入力ログ情報を特定し、
前記待機処理を、特定した前記入力ログ情報が所定個到達するまで待つ処理に変更する、
処理をコンピュータに実行させるための再現プログラム。
（付記６）
特定した前記入力ログ情報の個数を特定し、
前記待機処理を、特定した前記入力ログ情報のうち最も遅く記憶された入力ログ情報が到達する個数まで待つ処理に変更する、
付記５に記載の再現プログラム。
【符号の説明】
【００７５】
１０  再現装置
１１  記憶部
１２  中断情報抽出部
１３  特定部
１４  処理変更部
１５  デバッガ制御部
１６  ソースコードＤＢ
１７  中断情報ファイル
１８  入力ログ情報ＤＢ
１９  変更プログラム
２０  デバッグ装置
２１  記憶部
２２  デバッグ実行部
２３  ブレイクポイントファイル
３０  再現プログラム
【図１】
2018156431.tif 000003
【図２】
2018156431.tif 000004
【図３】
2018156431.tif 000005
【図４】
2018156431.tif 000006
【図５】
2018156431.tif 000007
【図６】
2018156431.tif 000008
【図７】
2018156431.tif 000009
【図８】
2018156431.tif 000010
【図９】
2018156431.tif 000011
【図１０】
2018156431.tif 000012
【図１１】
2018156431.tif 000013
【図１２】
2018156431.tif 000014
【図１３】
2018156431.tif 000015