(57)【要約】  実行模擬部（１２１）は、複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、実行シミュレータとして機能する。実行シミュレータは、ターゲットシステムによるターゲットプログラムの実行を模擬する。入出力模擬部（１３１）は、複数の実行命令のうちの入出力命令の実行が模擬される場合に、入出力シミュレータとして機能する。入出力シミュレータは、入出力装置の動作を模擬する。実行模擬部は、実行ログファイルに基づいて、ターゲットプログラムにおける複数の実行命令の実行順とは逆順に、ターゲットプログラムに含まれる実行命令の実行を模擬する。
2017212549.tif 000002
【特許請求の範囲】
【請求項１】
複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、前記ターゲットシステムによる前記ターゲットプログラムの実行を模擬する実行シミュレータとして機能する実行模擬部と、
前記複数の実行命令のうちの入出力命令の実行が模擬される場合に、前記入出力装置の動作を模擬する入出力シミュレータとして機能する入出力模擬部と
を備えるシミュレーション装置。
【請求項２】
前記シミュレーション装置は、実行命令の実行が模擬される前の実行シミュレータの状態情報を含んだ実行ログファイルを記憶する記憶部を備え、
前記実行模擬部は、前記実行ログファイルに基づいて、前記ターゲットプログラムにおける前記複数の実行命令の実行順とは逆順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬する
請求項１に記載のシミュレーション装置。
【請求項３】
前記記憶部は、入出力命令の実行が模擬される前の入出力シミュレータの状態情報を含んだ入出力ログファイルを記憶し、
前記シミュレーション装置は、入出力命令の実行が模擬される場合に、前記入出力ログファイルを用いて、入出力命令の実行が模擬される前の前記入出力シミュレータの状態情報を復元する入出力復元部を備え、
前記入出力模擬部は、前記入出力シミュレータの復元された状態情報を用いて、前記入出力装置の動作を模擬する
請求項２に記載のシミュレーション装置。
【請求項４】
前記シミュレーション装置は、前記入出力ログファイルを生成する入出力ログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記入出力ログ生成部は、入出力命令の実行が模擬される場合に、入出力命令の実行が模擬される前の前記入出力シミュレータの状態情報を前記入出力ログファイルに登録する
請求項３に記載のシミュレーション装置。
【請求項５】
前記シミュレーション装置は、実行命令の実行が模擬される場合に、前記実行ログファイルを用いて、実行命令の実行が模擬される前の前記実行シミュレータの状態情報を復元する実行復元部を備え、
前記実行模擬部は、前記実行シミュレータの復元された状態情報を用いて、実行命令の実行を模擬する
請求項２から請求項４のいずれか１項に記載のシミュレーション装置。
【請求項６】
前記シミュレーション装置は、前記実行ログファイルを生成する実行ログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記実行ログ生成部は、実行命令の実行が模擬される場合に、実行命令の実行が模擬される前の前記実行シミュレータの状態情報を前記実行ログファイルに登録する
請求項５に記載のシミュレーション装置。
【請求項７】
前記記憶部は、前記ターゲットシステムにおけるリソースモデルと、実行命令の実行が模擬される前の前記リソースモデルの状態情報を含んだリソースログファイルとを記憶し、
前記シミュレーション装置は、実行命令の実行が模擬される場合に、前記リソースログファイルを用いて、実行命令の実行が模擬される前の前記リソースモデルの状態情報を復元するリソース復元部を備え、
前記実行模擬部は、前記実行シミュレータの復元された状態情報と前記リソースモデルの復元された状態情報とを用いて実行命令の実行を模擬する
請求項５または請求項６に記載のシミュレーション装置。
【請求項８】
前記シミュレーション装置は、前記リソースログファイルを生成するリソースログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記リソースログ生成部は、実行命令の実行が模擬される場合に、実行命令の実行が模擬される前の前記リソースモデルの状態情報を前記リソースログファイルに登録する
請求項７に記載のシミュレーション装置。
【請求項９】
複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、前記ターゲットシステムによる前記ターゲットプログラムの実行を模擬する実行シミュレータとして機能する実行模擬処理と、
前記複数の実行命令のうちの入出力命令の実行が模擬される場合に、前記入出力装置の動作を模擬する入出力シミュレータとして機能する入出力模擬処理と
をコンピュータに実行させるためのシミュレーションプログラム。
【請求項１０】
前記実行シミュレータは、実行命令の実行が模擬される前の実行シミュレータの状態情報を含んだ実行ログファイルに基づいて、前記ターゲットプログラムにおける前記複数の実行命令の実行順とは逆順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬する
請求項９に記載のシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーションを行う技術に関するものである。
【背景技術】
【０００２】
命令セットシミュレーションとＩＯシミュレーションとを連係して、ターゲットシステムの動作を模擬する技術がある。ＩＯはＩｎｐｕｔおよびＯｕｔｐｕｔの略称である。
命令セットシミュレーションは、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）によって命令の実行とプログラムカウンタの操作とを模擬する技術である。
ＩＯシミュレーションは、キーボード、ディスプレイおよび通信装置などの入出力装置の動作を模擬する技術である。
これらのシミュレーションが同一のスレッドで実行される場合、同一のスレッド内でシミュレーションが切り替えられる。これらのシミュレーションが別のスレッドで実行される場合、スレッド呼び出しによってスレッド同士が連携し、これらのシミュレーションが実行される。【０００３】
シミュレーションの実行中にエラーが発生した場合、エラー要因を特定するには、シミュレーションを複数回再実行して、変数の値およびシステムの動作を確認する必要がある。そのため、エラー要因の特定に時間がかかってしまう。
特に、シミュレーションが開始されてからエラーが発生するまでの時間が長いほど、シミュレーションの再実行に要する時間および確認作業に要する時間が増大する。
さらに、エラー要因を絞り込むために、多くの経験および勘が必要である。そのため、初心者がエラー要因を特定することは困難である。【０００４】
エラー要因はエラー発生時の命令の近くに存在する場合が多いため、命令を逆順に実行するシミュレーション逆実行を行うことができれば、エラー要因を特定し易くなると考えられる。
シミュレーション逆実行により、シミュレーションを最初から実行し直す必要がなくなるため、エラー要因を特定する際にシミュレーションの実行に要する時間を削減できる。さらに、経験および勘に頼ってエラー要因を絞り込む必要がなくなる。【０００５】
特許文献１および特許文献２は、命令セットシミュレーションの逆実行に関する技術を開示している。
しかし、これらの特許文献には、命令セットシミュレーションとＩＯシミュレーションとを連携した場合のシミュレーション逆実行については、開示も示唆もされていない。
そのため、これらの特許文献に記載された技術を用いても、命令セットシミュレーションとＩＯシミュレーションとを連携した場合のシミュレーション逆実行を実現することはできない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平４−３５２２４５号公報
【特許文献２】特許第２５３３４８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、命令セットシミュレーションとＩＯシミュレーションとを連携してターゲットシステムのシミュレーションを行えるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明のシミュレーション装置は、
複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、前記ターゲットシステムによる前記ターゲットプログラムの実行を模擬する実行シミュレータとして機能する実行模擬部と、
前記複数の実行命令のうちの入出力命令の実行が模擬される場合に、前記入出力装置の動作を模擬する入出力シミュレータとして機能する入出力模擬部とを備える。
【発明の効果】
【０００９】
本発明によれば、命令セットシミュレーションに相当する実行シミュレータとＩＯシミュレーションに相当する入出力シミュレータとを連携してターゲットシステムのシミュレーションを行うことが可能となる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１におけるシミュレーション装置１００の構成図。
【図２】実施の形態１における記憶部１９１の構成図。
【図３】実施の形態１における実行ログファイル２２０の構成図。
【図４】実施の形態１におけるリソースログファイル２３０の構成図。
【図５】実施の形態１における入出力ログファイル２５０の構成図。
【図６】実施の形態１におけるシミュレーション方法のフローチャート。
【図７】実施の形態１における実行模擬処理［順実行］のフローチャート。
【図８】実施の形態１における実行ログ生成処理のフローチャート。
【図９】実施の形態１における入出力模擬処理［順実行］のフローチャート。
【図１０】実施の形態１における入出力ログ生成処理のフローチャート。
【図１１】実施の形態１におけるリソースログ生成処理のフローチャート。
【図１２】実施の形態１における逆実行方法（Ｓ３００）のフローチャート。
【図１３】実施の形態１における逆実行方法（Ｓ３００）のフローチャート。
【図１４】実施の形態１における入出力復元処理のフローチャート。
【図１５】実施の形態１における順実行方法（Ｓ２００）の具体例を示す図。
【図１６】実施の形態１における逆実行方法（Ｓ３００）の具体例を示す図。
【図１７】実施の形態１における逆実行方法（Ｓ３００）の具体例を示す図。
【図１８】実施の形態におけるシミュレーション装置１００のハードウェア構成図。
【発明を実施するための形態】
【００１１】
実施の形態および図面において、同じ要素または互いに相当する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略する。
【００１２】
実施の形態１．
ターゲットシステムによるターゲットプログラムの実行を模擬するシミュレーション装置１００について、図１から図１７に基づいて説明する。
【００１３】
ターゲットシステムは、シミュレーションの対象となるシステムであり、入出力装置を有する。入出力装置は、キーボードまたはマウスなどの入力装置と、ディスプレイまたは通信装置などの出力装置との総称である。
ターゲットプログラムは、複数の命令を含んだプログラムであって、ターゲットシステムによって実行されるプログラムである。
実施の形態１では、ターゲットプログラムに含まれる命令を実行命令という。また、入出力を伴う実行命令を入出力命令という。
【００１４】
＊＊＊構成の説明＊＊＊
図１に基づいて、シミュレーション装置１００の構成を説明する。
シミュレーション装置１００は、プロセッサ９０１とメモリ９０２と補助記憶装置９０３と入力装置９０４とディスプレイ９０５といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００１５】
プロセッサ９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）であり、他のハードウェアを制御する。具体的には、プロセッサ９０１は、ＣＰＵ、ＤＳＰまたはＧＰＵである。ＣＰＵはＣｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称であり、ＤＳＰはＤｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒの略称であり、ＧＰＵはＧｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略称である。
メモリ９０２は揮発性の記憶装置である。メモリ９０２は、主記憶装置またはメインメモリとも呼ばれる。具体的には、メモリ９０２はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
補助記憶装置９０３は不揮発性の記憶装置である。具体的には、補助記憶装置９０３は、ＲＯＭ、ＨＤＤまたはフラッシュメモリである。ＲＯＭはＲｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙの略称であり、ＨＤＤはＨａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略称である。
プロセッサ９０１とメモリ９０２と補助記憶装置９０３とをまとめたハードウェアを「プロセッシングサーキットリ」という。
【００１６】
入力装置９０４は、入力を受け付ける装置である。具体的には、入力装置９０４は、キーボード、マウス、テンキーまたはタッチパネルである。
ディスプレイ９０５は、画像等を表示する表示装置である。具体的には、ディスプレイ９０５は液晶ディスプレイである。ディスプレイ９０５はモニタともいう。
【００１７】
シミュレーション装置１００は、制御部１１０と実行模擬部１２１と実行ログ生成部１２２とリソースログ生成部１２３と入出力模擬部１３１と入出力ログ生成部１３２と実行復元部１４１とリソース復元部１４２と入出力復元部１４３といった「部」を機能構成の要素として備える。「部」の機能はソフトウェアで実現される。「部」の機能については後述する。
【００１８】
補助記憶装置９０３には、「部」の機能を実現するプログラムが記憶されている。「部」の機能を実現するプログラムは、メモリ９０２にロードされて、プロセッサ９０１によって実行される。
さらに、補助記憶装置９０３にはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が記憶されている。ＯＳの少なくとも一部は、メモリ９０２にロードされて、プロセッサ９０１によって実行される。
つまり、プロセッサ９０１は、ＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
「部」の機能を実現するプログラムを実行して得られるデータは、メモリ９０２、補助記憶装置９０３、プロセッサ９０１内のレジスタまたはプロセッサ９０１内のキャッシュメモリといった記憶装置に記憶される。
【００１９】
メモリ９０２は、シミュレーション装置１００で使用、生成、入力、出力、送信または受信されるデータが記憶される記憶部１９１として機能する。但し、他の記憶装置が記憶部１９１として機能してもよい。
入力装置９０４は入力を受け付ける受付部１９２として機能する。
ディスプレイ９０５は画像等を表示する表示部１９３として機能する。
【００２０】
シミュレーション装置１００は、プロセッサ９０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、「部」の機能を実現するプログラムの実行を分担する。
「部」の機能を実現するプログラムは、磁気ディスク、光ディスクまたはフラッシュメモリ等の不揮発性の記憶媒体にコンピュータ読み取り可能に記憶することができる。不揮発性の記憶媒体は、一時的でない有形の媒体である。
「部」は「処理」または「工程」に読み替えてもよい。「部」の機能はファームウェアで実現してもよい。
【００２１】
図２に基づいて、記憶部１９１の構成を説明する。
記憶部１９１には、ターゲットプログラム２００、実行シミュレータ２１０、リソースモデル２１１、実行ログファイル２２０、リソースログファイル２３０、入出力シミュレータ２４０および入出力ログファイル２５０などが記憶される。
ターゲットプログラム２００は、複数の実行命令を含んだプログラムであってターゲットシステムによって実行されるプログラムである。
実行シミュレータ２１０は、ターゲットシステムによるターゲットプログラム２００の実行を模擬するソフトウェアである。実行シミュレータ２１０には、実行シミュレータ２１０の状態情報が含まれる。具体的な状態情報は、実行シミュレータ２１０で用いられる変数である。具体的には、実行シミュレータ２１０は、命令セットシミュレータまたはＣＰＵ命令シミュレータと呼ばれるものである。
リソースモデル２１１は、ターゲットシステムのリソースを模した擬似的なリソースとして用いられるデータである。リソースモデル２１１には、擬似的なリソースの状態を示す状態情報が含まれる。具体的には、擬似的なリソースは、擬似レジスタおよび擬似メモリである。疑似レジスタは、ターゲットシステムに備わるレジスタを模した擬似的なレジスタである。疑似メモリは、ターゲットシステムに備わるメモリを模した擬似的なメモリである。
実行ログファイル２２０は、実行命令の実行が模擬される前の実行シミュレータ２１０の状態情報を含んだファイルである。
リソースログファイル２３０は、実行命令の実行が模擬される前のリソースモデル２１１の状態情報を含んだファイルである。
入出力シミュレータ２４０は、ターゲットシステムの入出力装置の動作を模擬するソフトウェアである。入出力シミュレータ２４０には、入出力シミュレータ２４０の状態情報が含まれる。具体的な状態情報は、入出力シミュレータ２４０で用いられる変数である。入出力シミュレータ２４０は、模擬の対象となる入出力装置毎に存在する。
入出力ログファイル２５０は、入出力命令の実行が模擬される前の入出力シミュレータ２４０の状態情報を含んだファイルである。入出力ログファイル２５０は、入出力シミュレータ２４０毎に存在する。
【００２２】
図３に基づいて、実行ログファイル２２０の構成を説明する。
実行ログファイル２２０は、カウンタログテーブル２２１と状態ログテーブル２２２と最終番号データ２２３と最終状態テーブル２２４とを含む。
【００２３】
カウンタログテーブル２２１は、ターゲットプログラム２００における実行命令の実行順を示すテーブルである。
カウンタログテーブル２２１には、「実行番号」と「プログラムカウンタ」とが互いに対応付けられる。「実行番号」と「プログラムカウンタ」との組をカウンタログレコードという。
「実行番号」は、実行番号を示す欄である。実行番号は、ターゲットプログラム２００における実行命令の実行順を示す番号である。
「プログラムカウンタ」は、プログラムカウンタを示す欄である。プログラムカウンタは、実行命令を識別する情報である。具体的には、プログラムカウンタは、ターゲットプログラム２００がロードされた記憶領域の中で実行命令が位置する部分のアドレスである。実施の形態１の説明において、プログラムカウンタという用語は、ターゲットプログラム２００用のプログラムカウンタを意味する。
【００２４】
状態ログテーブル２２２は、実行命令が実行される前の実行シミュレータ２１０の状態情報と実行命令が実行された後の実行シミュレータ２１０の状態情報とを示すテーブルである。
状態ログテーブル２２２には、「実行番号」と「変数」と「更新前」と「更新後」とが互いに対応付けられる。「実行番号」と「変数」と「更新前」と「更新後」との組を状態ログレコードという。
「実行番号」は、実行番号を示す欄である。実行番号は、ターゲットプログラム２００における実行命令の実行順を示す番号である。
「変数」は、実行シミュレータ２１０で用いられる変数の変数名を示す欄である。変数名は、変数を識別する識別子である。
「更新前」は、更新前の変数の値を示す欄である。更新前とは、実行命令が実行される前である。
「更新後」は、更新後の変数の値を示す欄である。更新後とは、実行命令が実行された後である。
【００２５】
最終番号データ２２３は、最終番号を示すデータである。最終番号は、最終の実行命令の実行順を示す番号である。最終の実行命令は、ターゲットプログラム２００において最後に実行される実行命令である。
【００２６】
最終状態テーブル２２４は、最終の実行命令が実行された後の実行シミュレータ２１０の状態情報の全体を示すテーブルである。
最終状態テーブル２２４には、「変数」と「値」とが互いに対応付けられる。「変数」と「値」との組を最終状態レコードという。
「変数」は、実行シミュレータ２１０で用いられる変数の変数名を示す欄である。
「値」は、実行シミュレータ２１０で用いられる変数の変数値を示す欄である。変数値は、変数に設定された値である。
【００２７】
図４に基づいて、リソースログファイル２３０の構成を説明する。
リソースログファイル２３０は、状態ログテーブル２３１と最終状態テーブル２３２とを含む。
【００２８】
状態ログテーブル２３１は、実行命令が実行される前のリソースモデル２１１の状態情報と実行命令が実行された後のリソースモデル２１１の状態情報とを示すテーブルである。
状態ログテーブル２３１には、「実行番号」と「アドレス」と「更新前」と「更新後」とが互いに対応付けられる。「実行番号」と「アドレス」と「更新前」と「更新後」との組を状態ログレコードという。
「実行番号」は、実行番号を示す欄である。
「アドレス」は、リソースモデル２１１の状態情報が記憶された記憶領域における更新部分のアドレスである。更新部分は更新された部分である。アドレスは記憶領域内の位置を識別する識別子である。
「更新前」は、更新前の更新部分の値を示す欄である。
「更新後」は、更新後の更新部分の値を示す欄である。
【００２９】
最終状態テーブル２３２は、最終の実行命令が実行された後のリソースモデル２１１の状態情報の全体を示すテーブルである。
最終状態テーブル２３２には、「アドレス」と「値」とが対応付けられる。「アドレス」と「値」との組を最終状態レコードという。
「アドレス」は、リソースモデル２１１の状態情報が記憶された記憶領域におけるアドレスを示す欄である。
「値」は、設定された値を示す欄である。
【００３０】
図５に基づいて、入出力ログファイル２５０の構成を説明する。
入出力ログファイル２５０は、入出力ログテーブル２５１と状態ログテーブル２５２と最終状態テーブル２５３とを含む。
【００３１】
入出力ログテーブル２５１は、入出力命令が実行される前の入出力シミュレータ２４０の状態情報と入出力命令が実行された後の入出力シミュレータ２４０の状態情報とを示すテーブルである。
入出力ログテーブル２５１には、「入出力番号」と「開始番号」と「終了番号」とが互いに対応付けられる。「入出力番号」と「開始番号」と「終了番号」との組を入出力ログレコードという。
「入出力番号」は、入出力番号を示す欄である。入出力番号は、入出力命令の実行順を示す番号である。
「開始番号」は、入出力命令である実行命令の実行番号である。
「終了番号」は、入出力命令が終了したときに実行されていた実行命令の実行番号である。
【００３２】
状態ログテーブル２５２は、入出力命令が実行される前の入出力シミュレータ２４０の状態情報と入出力命令が実行された後の入出力シミュレータ２４０の状態情報とを示すテーブルである。
状態ログテーブル２５２には、「入出力番号」と「変数」と「更新前」と「更新後」とが互いに対応付けられる。「入出力番号」と「変数」と「更新前」と「更新後」との組を状態ログレコードという。
「入出力番号」は、入出力番号を示す欄である。
「変数」は、入出力シミュレータ２４０で用いられる変数の変数名を示す欄である。
「更新前」は、更新前の変数の値を示す欄である。
「更新後」は、更新後の変数の値を示す欄である。
【００３３】
最終状態テーブル２５３は、最終の入出力命令が実行された後の入出力シミュレータ２４０の状態情報の全体を示すテーブルである。
最終状態テーブル２５３には、「変数」と「値」とが互いに対応付けられる。「変数」と「値」との組を最終状態レコードという。
「変数」は、入出力シミュレータ２４０で用いられる変数の変数名を示す欄である。
「値」は、入出力シミュレータ２４０で用いられる変数の変数値を示す欄である。
【００３４】
＊＊＊動作の説明＊＊＊
シミュレーション装置１００の動作はシミュレーション方法に相当する。また、シミュレーション方法の手順はシミュレーションプログラムの手順に相当する。
【００３５】
図６に基づいて、シミュレーション方法を説明する。
ステップＳ１０１において、制御部１１０は、順実行と逆実行とのいずれの実行方法でシミュレーションを実行するか判定する。
順実行は、ターゲットプログラム２００に含まれる複数の実行命令の実行順に、ターゲットプログラム２００に含まれる実行命令の実行を模擬する実行方法である。
逆実行は、ターゲットプログラム２００に含まれる複数の実行命令の実行順とは逆順に、ターゲットプログラム２００に含まれる実行命令の実行を模擬する実行方法である。
【００３６】
具体的には、実行方法は以下のように判定される。
まず、利用者は、入力装置９０４を操作して、順実行または逆実行を実行方法としてシミュレーション装置１００に入力する。但し、逆実行は、順実行が行われる前に指定することはできず、順実行が行われた後に指定することが可能となる。
次に、受付部１９２は、入力された実行方法を受け付ける。
そして、制御部１１０は、受け付けられた実行方法が順実行と逆実行とのいずれであるか判定する。
【００３７】
実行方法が順実行であると判定された場合、処理はステップＳ２００に進む。
実行方法が逆実行であると判定された場合、処理はステップＳ３００に進む。
【００３８】
ステップＳ２００は順実行方法である。
ステップＳ２００において、制御部１１０は、実行模擬部１２１と実行ログ生成部１２２とリソースログ生成部１２３と入出力模擬部１３１と入出力ログ生成部１３２とを起動する。起動された要素は、以下のように動作する。
【００３９】
実行模擬部１２１は、ターゲットプログラム２００に基づいて、実行シミュレータ２１０として機能する。
具体的には、実行模擬部１２１は、ターゲットプログラム２００における複数の実行命令の実行順に、ターゲットプログラム２００に含まれる実行命令の実行を模擬する。
実行模擬部１２１の動作の詳細については後述する。
【００４０】
実行ログ生成部１２２は、実行ログファイル２２０を生成する。
具体的には、実行ログ生成部１２２は、ターゲットプログラム２００に含まれる実行命令の実行が模擬される毎に、実行命令の実行が模擬される前の実行シミュレータ２１０の状態情報などを、実行ログファイル２２０に登録する。
実行ログ生成部１２２の動作の詳細については後述する。
【００４１】
リソースログ生成部１２３は、リソースログファイル２３０を生成する。
具体的には、リソースログ生成部１２３は、ターゲットプログラム２００に含まれる実行命令の実行が模擬される毎に、実行命令の実行が模擬される前のリソースモデル２１１の状態情報などを、リソースログファイル２３０に登録する。
リソースログ生成部１２３の動作の詳細については後述する。
【００４２】
入出力模擬部１３１は、入出力命令の実行が模擬される場合に、入出力シミュレータ２４０として機能する。
入出力模擬部１３１の動作の詳細については後述する。
【００４３】
入出力ログ生成部１３２は、入出力ログファイル２５０を生成する。
具体的には、入出力ログ生成部１３２は、入出力命令の実行が模擬される場合に、入出力命令の実行が模擬される前の入出力シミュレータ２４０の状態情報を入出力ログファイル２５０に登録する。
入出力ログ生成部１３２の動作の詳細については後述する。
【００４４】
ステップＳ３００は逆実行方法である。
ステップＳ３００において、制御部１１０は、実行模擬部１２１と入出力模擬部１３１と実行復元部１４１とリソース復元部１４２と入出力復元部１４３とを起動する。起動された要素は、以下のように動作する。
【００４５】
実行模擬部１２１は、ターゲットプログラム２００に基づいて、実行シミュレータ２１０として機能する。
具体的には、実行模擬部１２１は、実行ログファイル２２０に基づいて、ターゲットプログラム２００における複数の実行命令の実行順とは逆順に、ターゲットプログラム２００に含まれる実行命令の実行を模擬する。
【００４６】
実行命令の実行は、以下のように模擬される。
まず、実行復元部１４１は、実行ログファイル２２０を用いて、実行命令の実行が模擬される前の実行シミュレータ２１０の状態情報を復元する。
また、リソース復元部１４２は、リソースログファイル２３０を用いて、実行命令の実行が模擬される前のリソースモデル２１１の状態情報を復元する。
そして、実行模擬部１２１は、実行シミュレータ２１０の復元された状態情報とリソースモデル２１１の復元された状態情報とを用いて、実行命令の実行を模擬する。
【００４７】
実行復元部１４１とリソース復元部１４２と実行模擬部１２１とのそれぞれの動作の詳細については後述する。
【００４８】
入出力模擬部１３１は、入出力命令の実行が模擬される場合に、入出力シミュレータ２４０として機能する。そして、入出力模擬部１３１は、入出力装置の動作を模擬する。
【００４９】
具体的には、入出力装置の動作は、以下のように模擬される。
まず、入出力復元部１４３は、入出力シミュレータ２４０を用いて、入出力命令の実行が模擬される前の入出力シミュレータ２４０の状態情報を復元する。
そして、入出力模擬部１３１は、入出力シミュレータ２４０の復元された状態情報を用いて、入出力装置の動作を模擬する。
【００５０】
入出力復元部１４３と入出力模擬部１３１とのそれぞれの動作の詳細については後述する。
【００５１】
ステップＳ１０２において、制御部１１０は、実行方法の変更の要否を判定する。実行方法の変更は、順実行のシミュレーションが行われた後に逆実行のシミュレーションを行うこと、および、逆実行のシミュレーションが行われた後に順実行のシミュレーションを行うことを意味する。
【００５２】
具体的には、実行方法の変更の要否は以下のように判定される。
実行方法の変更を希望する利用者は、入力装置９０４を操作して、変更指示をシミュレーション装置１００に入力する。実行方法の変更を希望しない利用者は、入力装置９０４を操作して、終了指示をシミュレーション装置１００に入力する。
受付部１９２は、入力された変更指示または終了指示を受け付ける。
変更指示が受け付けられた場合、制御部１１０は、実行方法の変更が必要であると判定する。
終了指示が受け付けられた場合、制御部１１０は、実行方法の変更が不要であると判定する。
【００５３】
実行方法の変更が必要であると判定された場合、処理はステップ１０１に進む。順実行のシミュレーションの後であれば、ステップＳ１０１において、制御部１１０は、実行方法が逆実行であると判定する。逆実行のシミュレーションの後であれば、ステップＳ１０１において、制御部１１０は、実行方法が順実行であると判定する。
実行方法の変更が不要であると判定された場合、処理は終了する。
【００５４】
図７に基づいて、実行模擬処理［順実行］を説明する。
実行模擬処理［順実行］は、順実行方法（Ｓ２００）において実行される。
実行模擬処理［順実行］において、実行模擬部１２１は、実行シミュレータ２１０として機能する。
【００５５】
ステップＳ２０１において、実行シミュレータ２１０は、プログラムカウンタを初期化する。
具体的には、実行シミュレータ２１０は、ターゲットプログラム２００の先頭のアドレスをプログラムカウンタに設定する。
【００５６】
ステップＳ２０２において、実行シミュレータ２１０は、プログラムカウンタに対応する実行命令をターゲットプログラム２００から読み出す。
プログラムカウンタに対応する実行命令とは、プログラムカウンタが示すアドレスで識別される記憶領域に書き込まれた実行命令である。
【００５７】
ステップＳ２０３において、実行シミュレータ２１０は、読み出された実行命令の実行を模擬する。そして、表示部１９３は、模擬結果を表示する。
【００５８】
実行命令の実行が模擬されることによって、実行命令に応じてリソースモデル２１１が更新され、模擬結果に応じて実行シミュレータ２１０の状態情報が更新される。
【００５９】
入出力命令の実行が模擬される場合、実行シミュレータ２１０は、リソースモデル２１１の中の入出力要求領域に要求情報を書き込む。入出力領域は、入出力の要求に用いられる記憶領域である。要求情報は、入出力の内容を示す情報である。
【００６０】
ステップＳ２０４において、実行シミュレータ２１０は、ステップＳ２０２で読み出した実行命令が最終の実行命令であるか判定する。
ステップＳ２０２で読み出した実行命令が最終の実行命令である場合、実行模擬部１２１は模擬終了を実行ログ生成部１２２に通知する。そして、処理は終了する。
ステップＳ２０２で読み出した実行命令が最終の実行命令でない場合、処理はステップＳ２０５に進む。
【００６１】
ステップＳ２０５において、実行シミュレータ２１０は、プログラムカウンタを次のアドレスに更新する。
ステップＳ２０５の後、処理はステップＳ２０２に進む。
【００６２】
図８に基づいて、実行ログ生成処理を説明する。
実行ログ生成処理は、順実行方法（Ｓ２００）において実行される。
【００６３】
ステップＳ２１１は、実行ログ生成部１２２の起動時に実行される。
ステップＳ２１１において、実行ログ生成部１２２は、実行番号に１を設定する。
【００６４】
ステップＳ２１２は、プログラムカウンタの初期化時（図７のＳ２０１）および更新時（図７のＳ２０５）に実行される。具体的には、実行ログ生成部１２２は、プログラムカウンタを監視する。そして、実行ログ生成部１２２は、プログラムカウンタが更新されたときにステップＳ２１２を実行する。
ステップＳ２１２において、実行ログ生成部１２２は、カウンタログテーブル２２１を更新する。
具体的には、実行ログ生成部１２２は、カウンタログレコードを生成し、生成されたカウンタログレコードをカウンタログテーブル２２１に登録する。
【００６５】
ステップＳ２１３は、実行命令の実行が模擬されたとき（図７のＳ２０３）に実行される。
ステップＳ２１３において、実行ログ生成部１２２は、実行シミュレータ２１０の状態が変化したか判定する。
具体的には、実行ログ生成部１２２は、実行シミュレータ２１０の状態情報を監視し、実行シミュレータ２１０の状態情報の更新を検出する。実行シミュレータ２１０の状態情報の更新が検出された場合、実行ログ生成部１２２は、実行シミュレータ２１０の状態が変化したと判定する。
実行シミュレータ２１０の状態が変化したと判定された場合、処理はステップＳ２１４に進む。
実行シミュレータ２１０の状態が変化しなかったと判定された場合、処理はステップＳ２１５に進む。
【００６６】
ステップＳ２１４において、実行ログ生成部１２２は、状態ログテーブル２２２を更新する。
具体的には、実行ログ生成部１２２は、状態ログレコードを生成し、生成された状態ログレコードを状態ログテーブル２２２に登録する。
【００６７】
ステップＳ２１５において、実行ログ生成部１２２は、ターゲットプログラム２００の模擬が終了したか判定する。ターゲットプログラム２００の模擬とは、ターゲットシステムによるターゲットプログラム２００の実行を模擬することである。
具体的には、制御部１１０から模擬終了が通知された場合に、実行ログ生成部１２２は、ターゲットプログラム２００の模擬が終了したと判定する。
ターゲットプログラム２００の模擬が終了したと判定された場合、処理はステップＳ２１７に進む。
ターゲットプログラム２００の模擬が終了していないと判定された場合、処理はステップＳ２１６に進む。
【００６８】
ステップＳ２１６において、実行ログ生成部１２２は、実行番号の値を１増やす。
ステップＳ２１６の後、処理はステップＳ２１２に進む。
【００６９】
ステップＳ２１７において、実行ログ生成部１２２は、最終番号データ２２３と最終状態テーブル２２４とを更新する。
具体的には、実行ログ生成部１２２は、最終番号データ２２３に示される最終番号の値を実行番号の値に変更する。さらに、実行ログ生成部１２２は、実行シミュレータ２１０の状態情報毎に最終状態レコードを生成し、生成された最終状態レコードを最終状態テーブル２２４に登録する。
【００７０】
図９に基づいて、入出力模擬処理［順実行］を説明する。
入出力模擬処理［順実行］は、順実行方法（Ｓ２００）において実行される。
入出力模擬処理［順実行］において、入出力模擬部１３１は、入出力シミュレータ２４０として機能する。
【００７１】
ステップＳ２２１からステップＳ２２３は、リソースモデル２１１の中の入出力要求領域に要求情報が書き込まれたとき（図７のＳ２０３）に実行される。
【００７２】
ステップＳ２２１において、入出力シミュレータ２４０は、入出力要求を監視し、入出力要求領域への要求情報の書込みを検出する。
【００７３】
ステップＳ２２２において、入出力シミュレータ２４０は、入出力要求領域に書き込まれた要求情報に基づいて、入出力装置の動作を模擬する。そして、表示部１９３は、模擬結果を表示する。
【００７４】
ステップＳ２２３において、入出力シミュレータ２４０は、リソースモデル２１１の中の入出力応答領域に応答情報を書き込む。入出力応答領域は、入出力の応答に用いられる記憶領域である。応答情報は、入出力の終了を通知する情報である。
【００７５】
図１０に基づいて、入出力ログ生成処理を説明する。
入出力ログ生成処理は、順実行方法（Ｓ２００）において実行される。
【００７６】
ステップＳ２３１は、入出力ログ生成部１３２の起動時に実行される。
ステップＳ２３１において、入出力ログ生成部１３２は、入出力番号に１を設定する。
【００７７】
ステップＳ２３２は、リソースモデル２１１の中の入出力要求領域への書込み時（図７のＳ２０３）に実行される。具体的には、入出力ログ生成部１３２は、入出力要求を監視する。そして、入出力ログ生成部１３２は、入出力要求への書込みを検出したときにステップＳ２３２を実行する。
ステップＳ２３２において、入出力ログ生成部１３２は、入出力ログテーブル２５１を更新する。
具体的には、入出力ログ生成部１３２は、入出力番号と開始番号とが設定された入出力ログレコードを生成し、生成された入出力ログレコードを入出力ログテーブル２５１に登録する。
【００７８】
ステップＳ２３３は、入出力装置の動作が模擬されたとき（図９のＳ２２２）に実行される。
ステップＳ２３３において、入出力ログ生成部１３２は、入出力シミュレータ２４０の状態が変化したか判定する。
具体的には、入出力ログ生成部１３２は、入出力シミュレータ２４０の状態情報を監視し、入出力シミュレータ２４０の状態情報の更新を検出する。入出力シミュレータ２４０の状態情報の更新が検出された場合、入出力ログ生成部１３２は、入出力シミュレータ２４０の状態が変化したと判定する。
入出力シミュレータ２４０の状態が変化したと判定された場合、処理はステップＳ２３４に進む。
入出力シミュレータ２４０の状態が変化しなかったと判定された場合、処理はステップＳ２３５に進む。
【００７９】
ステップＳ２３４において、入出力ログ生成部１３２は、状態ログテーブル２５２を更新する。
具体的には、入出力ログ生成部１３２は、状態ログレコードを生成し、生成された状態ログレコードを状態ログテーブル２５２に登録する。
【００８０】
ステップＳ２３５において、入出力ログ生成部１３２は、入出力ログテーブル２５１を更新する。
具体的には、入出力ログ生成部１３２は、ステップＳ２３２で入出力ログテーブル２５１に登録した入出力ログレコードに終了番号を設定する。
【００８１】
ステップＳ２３６において、入出力ログ生成部１３２は、ターゲットプログラム２００の模擬が終了したか判定する。
具体的には、制御部１１０から模擬終了が通知された場合に、入出力ログ生成部１３２は、ターゲットプログラム２００の模擬が終了したと判定する。
ターゲットプログラム２００の模擬が終了したと判定された場合、処理はステップＳ２３８に進む。
ターゲットプログラム２００の模擬が終了していないと判定された場合、処理はステップＳ２３７に進む。
【００８２】
ステップＳ２３７において、入出力ログ生成部１３２は、入出力番号の値を１増やす。
ステップＳ２３７の後、処理はステップＳ２３２に進む。
【００８３】
ステップＳ２３８において、入出力ログ生成部１３２は、最終状態テーブル２５３を更新する。
具体的には、入出力ログ生成部１３２は、入出力シミュレータ２４０の状態情報毎に最終状態レコードを生成し、生成された最終状態レコードを最終状態テーブル２５３に登録する。
【００８４】
図１１に基づいて、リソースログ生成処理を説明する。
リソースログ生成処理は、順実行方法（Ｓ２００）において実行される。
【００８５】
ステップＳ２４１において、リソースログ生成部１２３は、リソースモデル２１１の状態が変化したか判定する。
具体的には、リソースログ生成部１２３は、リソースモデル２１１の状態情報を監視し、リソースモデル２１１の状態情報の更新を検出する。リソースモデル２１１の状態情報の更新が検出された場合、リソースログ生成部１２３は、リソースモデル２１１の状態が変化したと判定する。
リソースモデル２１１の状態が変化したと判定された場合、処理はステップＳ２４２に進む。
リソースモデル２１１の状態が変化しなかったと判定された場合、処理はステップＳ２４３に進む。
【００８６】
ステップＳ２４２において、リソースログ生成部１２３は、状態ログテーブル２３１を更新する。
具体的には、リソースログ生成部１２３は、状態ログレコードを生成し、生成された状態ログレコードを状態ログテーブル２３１に登録する。
【００８７】
ステップＳ２４３において、リソースログ生成部１２３は、ターゲットプログラム２００の模擬が終了したか判定する。
具体的には、制御部１１０から模擬終了が通知された場合に、リソースログ生成部１２３は、ターゲットプログラム２００の模擬が終了したと判定する。
ターゲットプログラム２００の模擬が終了したと判定された場合、処理はステップＳ２４４に進む。
ターゲットプログラム２００の模擬が終了していないと判定された場合、処理はステップＳ２４１に進む。
【００８８】
ステップＳ２４４において、リソースログ生成部１２３は、最終状態テーブル２３２を更新する。
具体的には、リソースログ生成部１２３は、リソースモデル２１１の状態情報毎に最終状態レコードを生成し、生成された最終状態レコードを最終状態テーブル２３２に登録する。
【００８９】
図１２および図１３に基づいて、逆実行方法（Ｓ３００）の手順を説明する。
逆実行方法（Ｓ３００）において、実行復元部１４１による処理を実行復元処理といい、リソース復元部１４２による処理をリソース復元処理といい、入出力復元部１４３による処理を入出力復元処理という。また、実行模擬部１２１による処理を実行模擬処理［逆実行］といい、入出力模擬部１３１による処理を入出力模擬処理［逆実行］という。
【００９０】
図１２のステップＳ３０１において、実行復元部１４１は、実行ログファイル２２０に基づいて、実行シミュレータ２１０の最終状態を復元する。
具体的には、実行復元部１４１は、最終状態テーブル２２４を用いて、実行シミュレータ２１０の状態情報を更新する。
【００９１】
さらに、リソース復元部１４２は、リソースログファイル２３０に基づいて、リソースモデル２１１の最終状態を復元する。
具体的には、リソース復元部１４２は、最終状態テーブル２３２を用いて、リソースモデル２１１の状態情報を更新する。
【００９２】
ステップＳ３０２において、制御部１１０は、実行番号に最終番号の値を設定する。
具体的には、実行復元部１４１は、最終番号データ２２３から最終番号を読み出し、実行番号の値を最終番号の値に更新する。
【００９３】
ステップＳ３１１において、実行復元部１４１は、実行ログファイル２２０に基づいて、実行シミュレータ２１０の前状態を復元する。前状態とは、実行番号に対応する実行命令の実行が模擬される前の状態である。
具体的には、実行復元部１４１は、状態ログテーブル２２２から、ステップＳ３０２またはステップＳ３２３で更新された実行番号と同じ実行番号を含んだ状態ログレコードを選択する。そして、実行復元部１４１は、選択された状態ログレコードに含まれる更新前の値を用いて、実行シミュレータ２１０の状態情報を更新する。更新される状態情報は、選択された状態ログレコードに含まれる変数名で識別される変数である。該当する状態ログレコードがない場合、実行復元部１４１は、実行シミュレータ２１０の状態情報を更新しない。
【００９４】
さらに、リソース復元部１４２は、リソースログファイル２３０に基づいて、リソースモデル２１１の前状態を復元する。
具体的には、リソース復元部１４２は、状態ログテーブル２３１から、ステップＳ３０２またはステップＳ３２３で更新された実行番号と同じ実行番号を含んだ状態ログレコードを選択する。そして、リソース復元部１４２は、選択された状態ログレコードに含まれる更新前の値を用いて、リソースモデル２１１の状態情報を更新する。更新される状態情報は、選択された状態ログレコードに含まれるアドレスに対応するデータである。アドレスに対応するデータとは、アドレスで識別される記憶領域に記憶されたデータである。該当する状態ログレコードがない場合、リソース復元部１４２は、リソースモデル２１１の状態情報を更新しない。
【００９５】
ステップＳ３１２において、制御部１１０は、入出力ログファイル２５０に基づいて、実行番号に対応する実行命令が入出力命令であるか判定する。
具体的には、制御部１１０は、入出力ログテーブル２５１から、実行番号と同じ値の開始番号を含んだ入出力ログレコードを検索する。該当する入出力ログレコードがある場合、制御部１１０は、実行番号に対応する実行命令が入出力命令であると判定する。
実行番号に対応する実行命令が入出力命令であると判定された場合、処理は図１３のステップＳ３３１に進む。
実行番号に対応する実行命令が入出力命令でないと判定された場合、処理はステップＳ３１３に進む。
【００９６】
ステップＳ３１３において、実行模擬部１２１は実行シミュレータ２１０として機能し、実行シミュレータ２１０は実行番号に対応する実行命令を模擬する。
【００９７】
具体的には、実行番号に対応する実行命令は、以下のように模擬される。
まず、制御部１１０は、カウンタログテーブル２２１から、ステップＳ３０２またはステップＳ３２３で更新された実行番号と同じ実行番号を含んだカウンタログレコードを選択する。
次に、実行シミュレータ２１０は、ターゲットプログラム２００用のプログラムカウンタの値を、選択されたカウンタログレコードに含まれるプログラムカウンタの値に更新する。
そして、実行シミュレータ２１０は、更新されたプログラムカウンタに対応する実行命令をターゲットプログラム２００から読み出し、読み出された実行命令の実行を模擬する。また、表示部１９３は、模擬結果を表示する。
【００９８】
ステップＳ３２１において、実行復元部１４１は、実行ログファイル２２０に基づいて、実行シミュレータ２１０の前状態を復元する。
さらに、リソース復元部１４２は、リソースログファイル２３０に基づいて、リソースモデル２１１の前状態を復元する。
前状態を復元する方法は、ステップＳ３１１と同じである。
【００９９】
ステップＳ３２２において、制御部１１０は、実行番号に対応する実行命令が先頭命令であるか判定する。先頭命令は、ターゲットプログラム２００における１番目の実行命令である。実行番号の値が１である場合、制御部１１０は、実行番号に対応する実行命令が先頭命令であると判定する。
実行番号に対応する実行命令が先頭命令であると判定された場合、処理は終了する。
実行番号に対応する実行命令が先頭番号でないと判定された場合、処理はステップＳ３２３に進む。
【０１００】
ステップＳ３２３において、制御部１１０は、実行番号の値を１減らす。
ステップＳ３２３の後、処理はステップＳ３１１に進む。
【０１０１】
図１３のステップＳ３３１において、制御部１１０は、入出力状態の復元を入出力復元部１４３に要求する。入出力状態の復元とは、入出力シミュレータ２４０の状態情報を復元することである。具体的には、制御部１１０は、入出力復元部１４３を呼び出す。
【０１０２】
ステップＳ３３２において、制御部１１０は、復元の終了を確認する。
具体的には、制御部１１０は、入出力復元部１４３から終了通知を受ける。
【０１０３】
ステップＳ３３３において、実行復元部１４１は実行シミュレータ２１０として機能し、実行シミュレータ２１０は入出力命令の実行を模擬する。そして、表示部１９３は、模擬結果を表示する。
さらに、入出力模擬部１３１は入出力シミュレータ２４０として機能し、入出力シミュレータ２４０は入出力装置の動作を模擬する。そして、表示部１９３は、模擬結果を表示する。
【０１０４】
具体的には、実行シミュレータ２１０および入出力シミュレータ２４０は、以下のように動作する。
まず、実行シミュレータ２１０は、入出力命令の実行を模擬し、リソースモデル２１１の中の入出力要求領域に要求情報を書き込む。
次に、入出力シミュレータ２４０は、入出力要求領域への要求情報の書込みを検出し、要求情報に基づいて、入出力装置の動作を模擬する。
そして、入出力シミュレータ２４０は、リソースモデル２１１の中の入出力応答領域に応答情報を書き込む。
【０１０５】
ステップＳ３３３の後、制御部１１０は模擬終了を入出力復元部１４３に通知し、処理は図１２のステップＳ３２１に進む。
【０１０６】
図１４に基づいて、入出力復元処理を説明する。
入出力復元処理は、逆実行方法（Ｓ３００）において実行される。
【０１０７】
ステップＳ３４１は、入出力復元部１４３が起動されたときに実行される。
ステップＳ３４１において、入出力復元部１４３は、入出力ログファイル２５０に基づいて、入出力シミュレータ２４０の最終状態を復元する。
具体的には、入出力復元部１４３は、最終状態テーブル２５３を用いて、入出力シミュレータ２４０の状態情報を更新する。
【０１０８】
ステップＳ３４２からステップＳ３４４は、入出力状態の復元が要求されたとき（図１３のＳ３３１）に実行される。
【０１０９】
ステップＳ３４２において、入出力復元部１４３は、復元要求を検出する。
具体的には、入出力復元部１４３は、制御部１１０から呼び出される。
【０１１０】
ステップＳ３４３において、入出力復元部１４３は、入出力ログファイル２５０に基づいて、入出力シミュレータ２４０の前状態を復元する。
【０１１１】
具体的には、入出力復元部１４３は、以下のように入出力シミュレータ２４０の前状態を復元する。
まず、入出力復元部１４３は、入出力ログテーブル２５１から、実行番号と同じ値の開始番号を含んだ入出力ログレコードを選択する。
次に、入出力復元部１４３は、選択された入出力ログレコードから、入出力番号を読み出す。
次に、入出力復元部１４３は、状態ログテーブル２５２から、読み出された入出力番号と同じ入出力番号を含んだ状態ログレコードを選択する。
そして、入出力復元部１４３は、選択された状態ログレコードに含まれる更新前の値を用いて、入出力シミュレータ２４０の状態情報を更新する。更新される状態情報は、選択された状態ログレコードに含まれる変数名で識別される変数である。該当する状態ログレコードがない場合、入出力復元部１４３は、入出力シミュレータ２４０の状態情報を更新しない。
【０１１２】
ステップＳ３４４において、入出力復元部１４３は、復元の終了を制御部１１０に通知する。
【０１１３】
ステップＳ３４５は、入出力命令の実行が模擬された後（図１３のＳ３３３）に実行される。具体的には、入出力復元部１４３は、制御部１１０から模擬終了が通知されたときに、ステップＳ３４５を実行する。
ステップＳ３４５において、入出力復元部１４３は、入出力ログファイル２５０に基づいて、入出力シミュレータ２４０の前状態を復元する。前状態を復元する方法は、ステップＳ３４３と同じである。
【０１１４】
ステップＳ３４６において、入出力復元部１４３は、ターゲットプログラム２００の逆実行が終了したか判定する。ターゲットプログラム２００の逆実行とは、ターゲットプログラム２００に含まれる実行命令を逆順に模擬することである。
具体的には、制御部１１０から逆実行終了が通知された場合に、入出力復元部１４３は、ターゲットプログラム２００の逆実行が終了したと判定する。
ターゲットプログラム２００の逆実行が終了したと判定された場合、処理は終了する。
ターゲットプログラム２００の逆実行が終了していないと判定された場合、処理はステップＳ３４２に戻る。
【０１１５】
図１５に基づいて、順実行方法（Ｓ２００）の具体例を説明する。
実行シミュレータ２１０は、命令１から命令８まで順番に実行命令の実行を模擬する。
実行ログ生成部１２２は、命令１から命令８までの実行命令が模擬される間、実行ログを収集する。その結果、図３に示すような実行ログファイル２２０が得られる。
【０１１６】
命令２、命令５および命令６は入出力命令である。
命令２、命令５または命令６の実行が模擬される場合、実行シミュレータ２１０は、リソースモデル２１１の中の入出力要求領域への書込みを行う。
入出力要求領域への書込みが行われた場合、入出力シミュレータ２４０は、入出力装置の動作を模擬する。ＩＯ１およびＩＯ２は模擬される入出力である。
ＩＯ１またはＩＯ２が終了した場合、入出力シミュレータ２４０は、リソースモデル２１１の中の入出力応答領域への書込みを行う。
入出力ログ生成部１３２は、ＩＯ１およびＩＯ２が模擬されている間、入出力ログを収集する。その結果、図５に示すような入出力ログファイル２５０が得られる。
リソースログ生成部１２３は、命令２から命令８までの実行命令が模擬される間、リソースログを収集する。その結果、図４に示すようなリソースログファイル２３０が得られる。
【０１１７】
図１６および図１７に基づいて、逆実行方法（Ｓ３００）の具体例を説明する。
図１６において、実行復元部１４１は、命令８の実行が模擬される前の実行シミュレータ２１０の状態情報を復元する。また、リソース復元部１４２は、命令８の実行が模擬される前のリソースモデル２１１の状態情報を復元する。
そして、実行シミュレータ２１０は、命令８の実行を模擬する。
【０１１８】
次に、実行復元部１４１は、命令７の実行が模擬される前の実行シミュレータ２１０の状態情報を復元する。また、リソース復元部１４２は、命令７の実行が模擬される前のリソースモデル２１１の状態情報を復元する。
そして、実行シミュレータ２１０は、命令７の実行を模擬する。
【０１１９】
図１７において、実行復元部１４１は、命令６の実行が模擬される前の実行シミュレータ２１０の状態情報を復元する。また、リソース復元部１４２は、命令６の実行が模擬される前のリソースモデル２１１の状態情報を復元する。
そして、実行シミュレータ２１０は、命令６の実行を模擬する。
【０１２０】
また、入出力復元部１４３は、命令６の実行が模擬される前の入出力シミュレータ２４０の状態情報を復元する。
そして、入出力シミュレータ２４０は、ＩＯ２を模擬する。
【０１２１】
次に、実行復元部１４１は、命令６の実行が模擬される前の実行シミュレータ２１０の状態情報を復元する。また、リソース復元部１４２は、命令６の実行が模擬される前のリソースモデル２１１の状態情報を復元する。
そして、実行シミュレータ２１０は、命令６の実行を模擬する。
【０１２２】
その後、同様にして、命令４から命令１まで逆順に実行命令の実行が模擬される。また、命令２が模擬されるときにＩＯ１が模擬される。
【０１２３】
＊＊＊実施の形態１の効果＊＊＊
命令セットシミュレーションとＩＯシミュレーションとを連携してターゲットシステムのシミュレーションを行うことが可能となる。
逆実行方法（Ｓ３００）により、シミュレーションを最初から実行し直す必要がなくなるため、エラー要因を特定する際にシミュレーションの実行に要する時間を削減できる。さらに、経験および勘に頼ってエラー要因を絞りこむ必要がなくなる。したがって、デバッグの効率が向上する。
【０１２４】
＊＊＊他の構成＊＊＊
実行シミュレータ２１０および入出力シミュレータ２４０は、ハードウェアで実現されたシミュレータであってもよい。
実行シミュレータ２１０と入出力シミュレータ２４０とは、別のスレッドで実行されてもよいし、同一のスレッドで実行されてもよい。
【０１２５】
＊＊＊実施の形態の補足＊＊＊
実施の形態において、シミュレーション装置１００の機能はハードウェアで実現してもよい。
図１８に、シミュレーション装置１００の機能がハードウェアで実現される場合の構成を示す。
シミュレーション装置１００は処理回路９９０を備える。処理回路９９０はプロセッシングサーキットリともいう。
処理回路９９０は、制御部１１０と実行模擬部１２１と実行ログ生成部１２２とリソースログ生成部１２３と入出力模擬部１３１と入出力ログ生成部１３２と実行復元部１４１とリソース復元部１４２と入出力復元部１４３と記憶部１９１といった「部」の機能を実現する専用の電子回路である。
具体的には、処理回路９９０は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。ＧＡはＧａｔｅ  Ａｒｒａｙの略称であり、ＡＳＩＣはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称であり、ＦＰＧＡはＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略称である。
【０１２６】
シミュレーション装置１００は、処理回路９９０を代替する複数の処理回路を備えてもよい。複数の処理回路は、「部」の機能を分担する。
【０１２７】
シミュレーション装置１００の機能は、ソフトウェアとハードウェアとの組み合わせで実現してもよい。つまり、「部」の機能の一部をソフトウェアで実現し、「部」の機能の残りをハードウェアで実現してもよい。
【０１２８】
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【符号の説明】
【０１２９】
１００  シミュレーション装置、１１０  制御部、１２１  実行模擬部、１２２  実行ログ生成部、１２３  リソースログ生成部、１３１  入出力模擬部、１３２  入出力ログ生成部、１４１  実行復元部、１４２  リソース復元部、１４３  入出力復元部、１９１  記憶部、１９２  受付部、１９３  表示部、２００  ターゲットプログラム、２１０  実行シミュレータ、２１１  リソースモデル、２２０  実行ログファイル、２２１  カウンタログテーブル、２２２  状態ログテーブル、２２３  最終番号データ、２２４  最終状態テーブル、２３０  リソースログファイル、２３１  状態ログテーブル、２３２  最終状態テーブル、２４０  入出力シミュレータ、２５０  入出力ログファイル、２５１  入出力ログテーブル、２５２  状態ログテーブル、２５３  最終状態テーブル、９０１  プロセッサ、９０２  メモリ、９０３  補助記憶装置、９０４  入力装置、９０５  ディスプレイ、９９０  処理回路。
【図１】
2017212549.tif 000003
【図２】
2017212549.tif 000004
【図３】
2017212549.tif 000005
【図４】
2017212549.tif 000006
【図５】
2017212549.tif 000007
【図６】
2017212549.tif 000008
【図７】
2017212549.tif 000009
【図８】
2017212549.tif 000010
【図９】
2017212549.tif 000011
【図１０】
2017212549.tif 000012
【図１１】
2017212549.tif 000013
【図１２】
2017212549.tif 000014
【図１３】
2017212549.tif 000015
【図１４】
2017212549.tif 000016
【図１５】
2017212549.tif 000017
【図１６】
2017212549.tif 000018
【図１７】
2017212549.tif 000019
【図１８】
2017212549.tif 000020
【手続補正書】
【提出日】平成28年10月7日(2016.10.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、前記ターゲットシステムによる前記ターゲットプログラムの実行を模擬する実行シミュレータとして機能する実行模擬部と、
前記複数の実行命令のうちの入出力命令の実行が模擬される場合に、前記入出力装置の動作を模擬する入出力シミュレータとして機能する入出力模擬部と、
実行命令の実行が模擬される前の実行シミュレータの状態情報を含んだ実行ログファイルと、入出力命令の実行が模擬される前の入出力シミュレータの状態情報を含んだ入出力ログファイルとを記憶する記憶部と、
入出力命令の実行が模擬される場合に、前記入出力ログファイルを用いて、入出力命令の実行が模擬される前の前記入出力シミュレータの状態情報を復元する入出力復元部と、
前記ターゲットプログラムにおける前記複数の実行命令の実行順とは逆順に、次の実行命令が入出力命令であるか、前記入出力ログファイルに基づいて判定する制御部とを備え、
前記入出力復元部は、逆順における前記次の実行命令が入出力命令であると判定された後に、前記入出力ログファイルを用いて、前記次の実行命令の実行が模擬される前の前記入出力シミュレータの状態情報を復元し、
前記実行模擬部は、前記次の実行命令の実行が模擬される前の前記入出力シミュレータの状態情報が復元された後に、前記実行ログファイルに基づいて、前記次の実行命令である入出力命令の実行を模擬し、入出力要求領域に要求情報を書き込み、
前記入出力模擬部は、前記入出力要求領域への前記要求情報の書込みを検出し、前記入出力シミュレータの復元された状態情報を用いて、前記要求情報に基づいて前記入出力装置の動作を模擬する
シミュレーション装置。
【請求項２】
前記シミュレーション装置は、前記入出力ログファイルを生成する入出力ログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記入出力ログ生成部は、入出力命令の実行が模擬される場合に、入出力命令の実行が模擬される前の前記入出力シミュレータの状態情報を前記入出力ログファイルに登録する
請求項１に記載のシミュレーション装置。
【請求項３】
前記シミュレーション装置は、実行命令の実行が模擬される場合に、前記実行ログファイルを用いて、実行命令の実行が模擬される前の前記実行シミュレータの状態情報を復元する実行復元部を備え、
前記実行模擬部は、前記実行シミュレータの復元された状態情報を用いて、実行命令の実行を模擬する
請求項１または請求項２に記載のシミュレーション装置。
【請求項４】
前記シミュレーション装置は、前記実行ログファイルを生成する実行ログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記実行ログ生成部は、実行命令の実行が模擬される場合に、実行命令の実行が模擬される前の前記実行シミュレータの状態情報を前記実行ログファイルに登録する
請求項３に記載のシミュレーション装置。
【請求項５】
前記記憶部は、前記ターゲットシステムにおけるリソースモデルと、実行命令の実行が模擬される前の前記リソースモデルの状態情報を含んだリソースログファイルとを記憶し、
前記シミュレーション装置は、実行命令の実行が模擬される場合に、前記リソースログファイルを用いて、実行命令の実行が模擬される前の前記リソースモデルの状態情報を復元するリソース復元部を備え、
前記実行模擬部は、前記実行シミュレータの復元された状態情報と前記リソースモデルの復元された状態情報とを用いて実行命令の実行を模擬する
請求項３または請求項４に記載のシミュレーション装置。
【請求項６】
前記シミュレーション装置は、前記リソースログファイルを生成するリソースログ生成部を備え、
前記実行模擬部は、前記ターゲットプログラムにおける前記複数の実行命令の実行順に、前記ターゲットプログラムに含まれる実行命令の実行を模擬し、
前記リソースログ生成部は、実行命令の実行が模擬される場合に、実行命令の実行が模擬される前の前記リソースモデルの状態情報を前記リソースログファイルに登録する
請求項５に記載のシミュレーション装置。
【請求項７】
複数の実行命令を含んだプログラムであって入出力装置を有するターゲットシステムによって実行されるプログラムであるターゲットプログラムに基づいて、前記ターゲットシステムによる前記ターゲットプログラムの実行を模擬する実行シミュレータとして機能する実行模擬処理と、
前記複数の実行命令のうちの入出力命令の実行が模擬される場合に、前記入出力装置の動作を模擬する入出力シミュレータとして機能する入出力模擬処理と、
入出力命令の実行が模擬される前の入出力シミュレータの状態情報を含んだ入出力ログファイルを用いて、入出力命令の実行が模擬される場合に入出力命令の実行が模擬される前の前記入出力シミュレータの状態情報を復元する入出力復元処理と、
前記ターゲットプログラムにおける前記複数の実行命令の実行順とは逆順に、次の実行命令が入出力命令であるか、前記入出力ログファイルに基づいて判定する判定処理と
をコンピュータに実行させるためのシミュレーションプログラムであって、
前記入出力復元処理によって、逆順における前記次の実行命令が入出力命令であると判定された後に、前記入出力ログファイルを用いて、前記次の実行命令の実行が模擬される前の前記入出力シミュレータの状態情報を復元し、
前記実行模擬処理によって、前記次の実行命令の実行が模擬される前の前記入出力シミュレータの状態情報が復元された後に、実行命令の実行が模擬される前の実行シミュレータの状態情報を含んだ実行ログファイルに基づいて、前記次の実行命令である入出力命令の実行を模擬し、入出力要求領域に要求情報を書き込み、
前記入出力模擬処理によって、前記入出力要求領域への前記要求情報の書込みを検出し、前記入出力シミュレータの復元された状態情報を用いて、前記要求情報に基づいて前記入出力装置の動作を模擬する
シミュレーションプログラム。
【国際調査報告】
2017212549.tif 000021
2017212549.tif 000022
2017212549.tif 000023
2017212549.tif 000024