(57)【要約】      （修正有）【課題】過去に実行された処理手順を容易に再現可能とする。【解決手段】情報処理装置１０は、機器に所定の処理を実行させるアプリ１２から要求を受け付けるリクエスト管理部１１１と、要求に応じて機器によって実行される処理を模倣するエミュレータ部１１と、エミュレータ部の状態の変更指示をユーザから受け付けるＵＩ部１１９と、変更指示に応じた状態の変更をエミュレータ部に実行させる状態変更部１１７と、リクエスト管理部が受け付ける要求又はＵＩ部が受け付ける変更指示に関する履歴情報を、ログ記憶部１４０に記憶するイベント検知部１３１と、ログ記憶部に記憶されている履歴情報に基づいて、リクエスト管理部及びＵＩ部への入力命令を生成するシナリオ生成部１３２と、生成部によって生成された命令を実行するシナリオ実行部１３３とを有する。エミュレータ部は、状態変更部によって変更された状態において機器が実行する処理を模倣する。【選択図】図２
2016146097.tif 000002
【特許請求の範囲】
【請求項１】
機器に所定の処理を実行させるプログラムから要求を受け付ける要求受付部と、
前記要求に応じて前記機器によって実行される処理を模倣する模倣部と、
前記模倣部の状態の変更指示を、ユーザから受け付ける指示受付部と、
前記変更指示に応じた状態の変更を、前記模倣部に実行させる状態変更部と、
前記要求受付部が受け付ける要求、又は前記指示受付部が受け付ける変更指示に関する履歴情報を、第一の記憶部に記憶する記憶処理部と、
前記第一の記憶部に記憶されている履歴情報に基づいて、前記要求受付部への要求の入力命令、及び前記変更指示の前記指示受付部への入力命令を生成する生成部と、
前記生成部によって生成された命令を実行する実行部とを有し、
前記模倣部は、前記状態変更部によって変更された状態において前記機器が実行する処理を模倣することを特徴とする情報処理装置。
【請求項２】
前記記憶処理部は、前記模倣部が前記機器によって実行される処理を模倣する過程において発生する事象を示す第一の履歴情報と、当該事象の発生に応じて前記指示受付部が受け付けた前記模倣部の状態の変更指示を示す第二の履歴情報とを前記第一の記憶部に記憶し、
前記生成部は、前記第一の履歴情報が示す事象が発生した場合に、前記第二の履歴情報が示す前記模倣部の状態の変更指示の前記指示受付部への入力命令を生成する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記模倣部が前記機器によって実行される処理を模倣する過程において発生する事象に関する情報を、前記状態変更部に配信する配信部を有し、
前記状態変更部は、前記配信部から配信される情報に基づいて特定されるタイミングで、前記変更指示に応じた状態の変更を、前記模倣部に実行させる請求項１又は２記載の情報処理装置。
【請求項４】
前記配信部は、前記状態変更部に対して配信対象とされる事象を示す情報を記憶する第二の記憶部を参照して、前記模倣部が前記要求に応じて前記機器によって実行される処理を模倣する過程において発生する事象のうち、特定の事象に関する情報を前記状態変更部に配信することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記模倣部は、当該模倣部を構成する複数の構成部を含み、
前記配信部は、前記要求受付部が受け付けた要求を、前記各構成部に対して配信対象とされる要求を示す情報を記憶する第二の記憶部を参照して特定される構成部に、配信することを特徴とする請求項３又は４記載の情報処理装置。
【請求項６】
前記模倣部が前記機器によって実行される処理を模倣する過程において発生する事象に関する情報をユーザに通知するユーザ通知部を有することを特徴とする請求項１乃至５いずれか一項記載の情報処理装置。
【請求項７】
１以上のコンピュータを含む情報処理システムであって、
機器に所定の処理を実行させるプログラムから要求を受け付ける要求受付部と、
前記要求に応じて前記機器によって実行される処理を模倣する模倣部と、
前記模倣部の状態の変更指示を、ユーザから受け付ける指示受付部と、
前記変更指示に応じた状態の変更を、前記模倣部に実行させる状態変更部と、
前記要求受付部が受け付ける要求、又は前記指示受付部が受け付ける変更指示に関する履歴情報を、第一の記憶部に記憶する記憶処理部と、
前記第一の記憶部に記憶されている履歴情報に基づいて、前記要求受付部への要求の入力命令、及び前記変更指示の前記指示受付部への入力命令を生成する生成部と、
前記生成部によって生成された命令を実行する実行部とを有し、
前記模倣部は、前記状態変更部によって変更された状態において前記機器が実行する処理を模倣することを特徴とする情報処理システム。
【請求項８】
コンピュータが実行する情報処理方法であって、
前記コンピュータの要求受付部が、機器に所定の処理を実行させるプログラムから要求を受け付ける手順と、
前記コンピュータの模倣部が、前記要求に応じて前記機器によって実行される処理を模倣する手順と、
前記コンピュータの指示受付部が、前記模倣部の状態の変更指示を、ユーザから受け付ける手順と、
前記コンピュータの状態変更部が、前記変更指示に応じた状態の変更を、前記模倣部に実行させる状態変更手順と、
前記コンピュータの記憶処理部が、前記要求受付部が受け付ける要求の発生、又は前記指示受付部が受け付ける変更指示の発生に応じ、前記要求を示す情報又は前記変更指示に関する履歴情報を、第一の記憶部に記憶する記憶処理手順と、
前記第一の記憶部に記憶されている履歴情報に基づいて、前記要求受付部への要求の入力命令、及び前記変更指示の前記指示受付部への入力命令を生成する生成手順と、
前記生成手順において生成された命令を実行する実行手順とを有し、
前記模倣部は、前記状態変更部によって変更された状態において前記機器が実行する処理を模倣することを特徴とする情報処理方法。
【請求項９】
前記記憶処理手順は、前記模倣部が前記機器によって実行される処理を模倣する過程において発生する事象を示す第一の履歴情報と、当該事象の発生に応じて前記指示受付部が受け付けた前記模倣部の状態の変更指示を示す第二の履歴情報とを前記第一の記憶部に記憶し、
前記生成手順は、前記第一の履歴情報が示す事象が発生した場合に、前記第二の履歴情報が示す前記模倣部の状態の変更指示の前記指示受付部への入力命令を生成する、
ことを特徴とする請求項８記載の情報処理方法。
【請求項１０】
前記コンピュータの配信部が、前記模倣部が前記機器によって実行される処理を模倣する過程において発生する事象に関する情報を、前記状態変更部に配信する手順を有し、
前記状態変更部が、前記配信部から配信される情報に基づいて特定されるタイミングで、前記変更指示に応じた状態の変更を、前記模倣部に実行させる請求項８又は９記載の情報処理方法。
【請求項１１】
前記配信する手順は、前記状態変更部に対して配信対象とされる事象を示す情報を記憶する記憶部を参照して、前記模倣部が前記要求に応じて前記機器によって実行される処理を模倣する過程において発生する事象のうち、特定の事象に関する情報を前記状態変更部に配信することを特徴とする請求項１０記載の情報処理方法。
【請求項１２】
前記模倣部は、当該模倣部を構成する複数の構成部を含み、
前記配信する手順は、前記要求受付部が受け付けた要求を、前記各構成部に対して配信対象とされる要求を示す情報を記憶する記憶部を参照して特定される構成部に、配信することを特徴とする請求項１０又は１１記載の情報処理方法。
【請求項１３】
機器に所定の処理を実行させるプログラムから要求を受け付ける要求受付部と、
前記要求に応じて前記機器によって実行される処理を模倣する模倣部と、
前記模倣部の状態の変更指示を、ユーザから受け付ける指示受付部と、
前記変更指示に応じた状態の変更を、前記模倣部に実行させる状態変更部と、
前記要求受付部が受け付ける要求、又は前記指示受付部が受け付ける変更指示に関する履歴情報を、第一の記憶部に記憶する記憶処理部と、
前記第一の記憶部に記憶されている履歴情報に基づいて、前記要求受付部への要求の入力命令、及び前記変更指示の前記指示受付部への入力命令を生成する生成部と、
前記生成部によって生成された命令を実行する実行部としてコンピュータを機能させ、
前記模倣部は、前記状態変更部によって変更された状態において前記機器が実行する処理を模倣することを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理方法、及び情報処理プログラムに関する。
【背景技術】
【０００２】
複合機等の画像形成装置をはじめとする様々な機器では、アプリケーションプラットフォームを有し、当該アプリケーションプラットフォームが提供するＡＰＩ（Application Program Interface）を利用したアプリケーションプログラム（以下、「アプリ」という。）の実装が可能とされているものがある。斯かるＡＰＩが公開されることにより、機器を製造する企業のみならず、当該企業外のサードベンダ等によっても、アプリの開発を行うことが可能となる。
【０００３】
開発中のアプリの動作確認等は、機器を用いて行われるのが望ましい。しかし、開発者ごとに機器を用意するのは経済的ではない。また、一台の機器を複数の開発者で利用するのは効率的ではない。そこで、機器のハードウェアや、アプリケーションプラットフォーム等の動作をエミュレート又はシミュレート等（以下、「エミュレート」で統一する。）するソフトウェア（以下「エミュレータ」という。）が利用されている。例えば、エミュレータを、各開発者のＰＣ（Personal Computer）等にインストールすることで、各開発者は、開発中のアプリの動作確認等を効率的に行うことができる。また、新機種の機器のエミュレータを用意することで、機器自体の開発と、アプリの開発とを並行して行うことも可能となる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のエミュレータでは、例えば、テスト仕様書等によって入力手順が規定されていない、ユーザの任意による入力（ランダムな入力）によるテストにおいて発見されたアプリの異常等の再現については、ユーザの記憶に頼るところが大きかった。すなわち、ユーザが、どのような入力を行ったかについて自らの記憶を辿り、その記憶を頼りに異常等の再現が試みられていた。
【０００５】
本発明は、上記の点に鑑みてなされたものであって、過去に実行された処理手順を容易に再現可能とすることを目的とする。
【課題を解決するための手段】
【０００６】
そこで上記課題を解決するため、情報処理装置は、機器に所定の処理を実行させるプログラムから要求を受け付ける要求受付部と、前記要求に応じて前記機器によって実行される処理を模倣する模倣部と、前記模倣部の状態の変更指示を、ユーザから受け付ける指示受付部と、前記変更指示に応じた状態の変更を、前記模倣部に実行させる状態変更部と、前記要求受付部が受け付ける要求、又は前記指示受付部が受け付ける変更指示に関する履歴情報を、第一の記憶部に記憶する記憶処理部と、前記第一の記憶部に記憶されている履歴情報に基づいて、前記要求受付部への要求の入力命令、及び前記変更指示の前記指示受付部への入力命令を生成する生成部と、前記生成部によって生成された命令を実行する実行部とを有し、前記模倣部は、前記状態変更部によって変更された状態において前記機器が実行する処理を模倣する。
【発明の効果】
【０００７】
過去に実行された処理手順を容易に再現可能とすることができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。
【図２】本発明の実施の形態における情報処理装置の機能構成例を示す図である。
【図３】各モジュール間においてイベントが直接的に通知される様子を示す図である。
【図４】イベント配信情報の登録処理の処理手順の一例を説明するためのシーケンス図である。
【図５】イベント配信情報記憶部の構成例を示す図である。
【図６】イベント配信処理の処理手順の一例を説明するためのフローチャートである。
【図７】アプリの動作確認時に実行される処理手順の一例を説明するためのシーケンス図である。
【図８】イベント配信情報記憶部の記憶内容の変化例を示す図である。
【図９】ログ情報の一例を示す図である。
【図１０】評価シナリオの生成及び実行に関する処理手順の一例を説明するためのシーケンス図である。
【図１１】ログ情報から評価シナリオへの変換を説明するための図である。
【図１２】評価シナリオの一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における情報処理装置のハードウェア構成例を示す図である。図１の情報処理装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、インタフェース装置１０５、表示装置１０６、及び入力装置１０７等を有する。
【００１０】
情報処理装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記憶した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１１】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って情報処理装置１０に係る機能を実現する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１０６はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０７はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【００１２】
なお、情報処理装置１０は、図１に示される構成を有する１以上の集合であるコンピュータシステムであってもよい。
【００１３】
図２は、本発明の実施の形態における情報処理装置の機能構成例を示す図である。図２において、情報処理装置１０は、エミュレータ部１１を有する。また、情報処理装置１０には、１以上のアプリ１２がインストールされる。アプリ１２は、エミュレータ部１１がエミュレートする画像形成装置（以下、「対象機器」という。）が有するアプリケーションプラットフォームにおいて動作可能なアプリケーションプログラムである。すなわち、エミュレータ部１１は、対象機器におけるアプリケーションプラットフォームや、対象機器のハードウェア等の動作をエミュレート（模倣）する。したがって、エミュレータ部１１は、アプリ１２に対して、対象機器と同様の動作環境を提供することができる。なお、エミュレータ部１１は、情報処理装置１０にインストールされたプログラムが、ＣＰＵ１０４に実行させる処理により実現される。なお、本実施の形態において、エミュレート又は模倣には、シミュレートの意味も包含される。
【００１４】
図２において、エミュレータ部１１は、リクエスト管理部１１１、レスポンス生成部１１２、ディスパッチ部１１３、ジョブ管理部１１４、サービス管理部１１５、システム管理部１１６、状態変更部１１７、状態監視部１１８、ＵＩ部１１９、及び評価シナリオ処理部１３０等を含む。エミュレータ部１１は、また、イベント配信情報記憶部１２０及びログ記憶部１４０等を利用する。これら各記憶部は、例えば、補助記憶装置１０２又は情報処理装置１０にネットワークを介して接続される記憶装置等を用いて実現可能である。
【００１５】
リクエスト管理部１１１は、対象機器のアプリケーションプラットフォームが備えるＡＰＩ（Application Program Interface）と同じＡＰＩを有し、当該ＡＰＩを介してアプリ１２からの要求を受け付ける。当該ＡＰＩは、関数又はメソッドであってもよいし、ＷｅｂＡＰＩであってもよい。ここで、ＷｅｂＡＰＩとは、ＨＴＴＰ（HyperText Transfer Protocol）通信を利用したＡＰＩをいう。但し、ＨＴＴＰ以外の通信プロトコルが利用されてもよい。
【００１６】
レスポンス生成部１１２は、アプリ１２からの要求に対する応答を生成するための処理を実行する。レスポンス生成部１１２は、また、アプリ１２からの要求を、イベントとしてディスパッチ部１１３に通知する。
【００１７】
ディスパッチ部１１３は、イベント配信情報記憶部１２０を参照して、レスポンス生成部１１２、ジョブ管理部１１４、サービス管理部１１５、システム管理部１１６、状態変更部１１７、又は状態監視部１１８から通知される各種のイベントの配信又は通知の仲介を行う。イベントとは、エミュレータ部１１が対象機器の動作を模倣する過程において発生する事象に関する情報、又は当該事象の発生を示す情報である。イベント配信情報記憶部１２０には、イベントの種類ごとに、当該イベントの配信先（通知先）を示す情報（以下、「イベント配信情報」という。）が記憶されている。又は、イベント配信情報は、各部に対して配信対象とされるイベントを示す情報であるともいえる。ディスパッチ部１１３によって、イベントの配信が仲介されることにより、各部（各モジュール）が、イベントの配信先を意識する必要性を低減させることができる。その結果、或るイベントの配信先を変更する必要が生じた場合、当該イベントの通知元のモジュール等を改変する必要性を低減させることができる。
【００１８】
ジョブ管理部１１４は、対象機器における、ジョブの実行等の管理を模倣する。ジョブ管理部１１４は、ジョブの種類ごとに、当該種類に係るジョブを管理するモジュールを含む。例えば、対象機器において、コピージョブ、スキャンジョブ、ＦＡＸ送信ジョブ、及び印刷ジョブ等を実行可能な場合、ジョブ管理部１１４は、コピージョブ、スキャンジョブ、ＦＡＸ送信ジョブ、及び印刷ジョブごとに、モジュールを含む。ジョブ管理部１１４は、ジョブの状態の変化に関するイベントを通知する。
【００１９】
サービス管理部１１５は、ジョブの実行に応じて利用される、対象機器のハードウェア（エンジン部分）の制御機構を模倣する。当該制御機構は、例えば、ハードウェアに対応するドライバプログラムによって実現されてもよい。サービス管理部１１５は、例えば、対象機器のハードウェアの状態の変化に関するイベントを通知する。斯かる状態の変化としては、トナー切れ、ジャムの発生、スキャンの開始若しくは終了、印刷の開始若しくは終了等が有る。
【００２０】
システム管理部１１６は、ジョブの実行とは独立して変化する、対象機器の状態の管理を模倣する。斯かる状態の一例として、ユーザのログイン状態、省エネ状態等が挙げられる。システム管理部１１６は、このような状態の変化に関するイベントを通知する。
【００２１】
状態変更部１１７は、ＵＩ部１１９からの要求に応じ、ユーザから指定されたタイミングで、エミュレータ部１１の状態を強制的に変更させる。例えば、状態変更部１１７は、トナー切れ、ジャム等を強制的に発生させる。また、状態変更部１１７は、仮想的な給紙トレイにおける用紙枚数を強制的に設定したり、ログインユーザの情報を強制的に設定したりすることもできる。エミュレータ部１１は、状態変更部１１７によって変更された状態において対象機器が実行する処理を模倣する。
【００２２】
状態監視部１１８は、エミュレータ部１１において発生しているイベントを、ＵＩ部１１９に通知する。
【００２３】
ＵＩ部１１９は、ユーザインタフェースを提供する。例えば、ＵＩ部１１９は、表示装置１０６に画面を表示させ、当該画面を介して、エミュレータ部１１の状態の変更指示の入力を受け付ける。ＵＩ部１１９は、また、当該画面を介して、エミュレータ部１１において発生しているイベントを、ユーザに通知する。
【００２４】
評価シナリオ処理部１３０は、評価シナリオの生成や、評価シナリオの実行等を行う。評価シナリオとは、ＵＩ部１１９が提供する画面を介して入力されたユーザによる指示（エミュレータ部１１の状態の変更指示等）を示すイベント、又はエミュレータ部１１が対象機器の動作をエミュレートする過程において発生するイベント等を時系列に再現するための命令が記録されたデータである。なお、評価シナリオの実行とは、評価シナリオに記録された命令を実行することをいう。
【００２５】
図２において、評価シナリオ処理部１３０は、イベント検知部１３１、シナリオ生成部１３２、シナリオ実行部１３３、及び擬似イベント生成部１３４等を含む。
【００２６】
イベント検知部１３１は、アプリ１２に関して発生するイベントを検知し、当該イベントに関するログ情（履歴情報）報を、ログ記憶部１４０に記憶する。アプリ１２に関して発生するイベントの一例として、アプリ１２による、リクエスト管理部１１１が有するＡＰＩの呼び出しが挙げられる。当該ＡＰＩの呼び出しは、例えば、情報処理装置１０のＯＳ（Operating System）を介して検知することができる。また、アプリ１２に対する実行指示（例えば、アプリ１２のアイコンの押下）や、アプリ１２に対する設定情報の設定等）が、アプリ１２に関して発生するイベントに含まれてもよい。
【００２７】
シナリオ生成部１３２は、ログ記憶部１４０に記憶されているログ情報に基づいて評価シナリオを生成する。ログ記憶部１４０には、アプリ１２やエミュレータ部１１によって生成されるログ情報が記憶される。例えば、イベント検知部１３１によって検知されるイベント、ＵＩ部１１９が提供する画面を介して入力されたユーザによる指示（エミュレータ部１１の状態の変更指示等）を示すイベント、又はエミュレータ部１１が対象機器の動作をエミュレートする過程において発生するイベント等に関するログ情報が、ログ記憶部１４０に記憶される。
【００２８】
シナリオ実行部１３３は、シナリオ生成部１３２によって生成される評価シナリオに記録されている命令を実行する。その結果、当該命令の元となったログ情報が示すイベントが再現される。当該ログ情報が示すイベントのうち、アプリ１２によるＡＰＩの呼び出しに関するイベントは、擬似イベント生成部１３４によって再現される。
【００２９】
なお、評価シナリオ処理部１３０は、エミュレータ部１１に含まれなくてもよい。すなわち、評価シナリオ処理部１３０は、エミュレータ部１１からは独立した存在であってもよい。
【００３０】
ところで、ジョブ管理部１１４、サービス管理部１１５、及びシステム管理部１１６は、対象機器において、高いリアルタイム性が要求される部分である。したがって、これら各モジュールの特定のイベントのやり取りについては、直接的に行われてもよい。
【００３１】
図３は、各モジュール間においてイベントが直接的に通知される様子を示す図である。例えば、対象機器においてリアルタイム性が要求されるイベントは、図３に示されるように、ディスパッチ部１１３を介さずに、直接的に行われてもよい。そうすることにより、エミュレータ部１１の動作を、対象機器により近いものとすることができる。なお、図３において、各矢印は、イベントを示す。
【００３２】
以下、情報処理装置１０が実行する処理手順について説明する。図４は、イベント配信情報の登録処理の処理手順の一例を説明するためのシーケンス図である。図４における各モジュールは、ジョブ管理部１１４、サービス管理部１１５、システム管理部１１６、及びレスポンス生成部１１２である。例えば、図４の処理は、各モジュールの起動時に実行される。
【００３３】
ステップＳ１０１において、各モジュールは、当該モジュールの識別情報と、当該モジュールに配信されるべきイベントの識別情報（以下、「イベント名」という。）とを含むイベント配信情報の登録要求を、ディスパッチ部１１３に送信する。ディスパッチ部１１３は、当該要求に含まれているイベント配信情報を、イベント配信情報記憶部１２０に登録（記憶）する（Ｓ１０２）。
【００３４】
図５は、イベント配信情報記憶部の構成例を示す図である。図５において、イベント配信情報記憶部１２０の各レコードは、イベント名、配信先、及び配信パラメータ等を対応付けて記憶する。
【００３５】
イベント名は、配信対象とされるイベントのイベント名である。配信先は、イベント名に係るイベントの配信先（すなわち、当該イベントの通知の要求元）の識別情報である。配信パラメータは、イベントに付随するパラメータのうち、イベントと共に配信先に配信されるパラメータである。「ＡＬＬ」は、全てのパラメータが配信されることを示す。配信パラメータも、イベント配信情報の構成要素であり、各モジュールからの登録要求に含まれる。
【００３６】
図５に示されるように、イベント名には、正規表現の指定が可能とされてもよい。例えば、「ＲＥＱ＿＊＿ＪＯＢ」は、「ＲＥＱ＿ＣＯＰＹ＿ＪＯＢ」、「ＲＥＱ＿ＳＣＡＮ＿ＪＯＢ」、「ＲＥＱ＿ＦＡＸ＿ＪＯＢ」、及び「ＲＥＱ＿ＰＲＩＮＴ＿ＪＯＢ」等の集合を示す。「ＲＥＱ＿＊＿ＪＯＢ」は、「＊」の部分で識別される種類のジョブの実行要求を示す。また、「ＲＥＱ＿ＧＥＴ＿＊＿ＪＯＢ＿ＳＴＡＴＥ」は、「＊」の部分で識別される種類のジョブの状態の取得要求を示す。なお、「ＲＥＱ」で始まるイベント名は、アプリ１２からの要求に応じて、リクエスト管理部１１１から通知される、当該要求を示すイベント（以下、「リクエストイベント」という。）のイベント名である。一方、「ＲＥＳ」で始まるイベント名は、リクエストイベントに対する応答として通知されるイベント（以下、「レスポンスイベント」という。）のイベント名である。
【００３７】
図５において、「ＲＥＱ＿＊＿ＪＯＢ」及び「ＲＥＱ＿ＧＥＴ＿＊＿ＪＯＢ＿ＳＴＡＴＥ」は、ジョブ管理部１１４に配信されることが示されている。換言すれば、ジョブ管理部１１４から、「ＲＥＱ＿＊＿ＪＯＢ」及び「ＲＥＱ＿ＧＥＴ＿＊＿ＪＯＢ＿ＳＴＡＴＥ」の配信が要求されたことが示されている。ジョブの実行やジョブの状態は、ジョブ管理部１１４によって管理されるため、「ＲＥＱ＿＊＿ＪＯＢ」及び「ＲＥＱ＿ＧＥＴ＿＊＿ＪＯＢ＿ＳＴＡＴＥ」は、ジョブ管理部１１４に配信される必要が有るからである。
【００３８】
一方、「ＲＥＳ＿＊」は、レスポンス生成部１１２に配信されることが示されている。換言すれば、レスポンス生成部１１２から、「ＲＥＳ＿＊」の配信が要求されたことが示されている。レスポンス生成部１１２は、レスポンスイベントに基づいて、アプリケーションからの要求に応じた応答を示す情報（以下、「レスポンス情報」という。）を生成するため、「ＲＥＳ＿＊」は、レスポンス生成部１１２に配信される必要が有るからである。
【００３９】
また、「ＥＭＵＬＡＴＥ＿ＪＡＭ＿ＣＲＥＡＴＥ」は、擬似的又は仮想的なジャム状態の発生命令（ジャム状態への移行命令）を示すイベント（以下、「ジャム発生命令イベント」という。）のイベント名である。「ＥＭＵＬＡＴＥ＿ＪＡＭ＿ＲＥＣＯＶＥＲ」は、擬似的又は仮想的なジャム状態の解除命令（ジャム状態からの復帰命令）を示すイベント（以下、「ジャム解除命令イベント」という。）のイベント名である。図８において、ジャム発生命令イベント及びジャム解除命令イベントは、サービス管理部１１５に配信されることが示されている。換言すれば、サービス管理部１１５から、ジャム発生命令イベント及びジャム解除命令イベントの配信が要求されたことが示されている。ジャム状態の擬似的又は仮想的な発生は、サービス管理部１１５によって実現されるからである。
【００４０】
なお、２以上のモジュールから、同じイベント名に係るイベント配信情報の登録が要求された場合、当該イベント名に対して、当該２以上のモジュールが配信先として登録される。すなわち、一つのイベントが、複数のモジュールに対して配信されてもよい。例えば、図５では、「ＲＥＱ＿＊＿ＪＯＢ」について、ジョブ管理部１１４に加えて、システム管理部１１６が配信先とされている。このことは、システム管理部１１６からも、「ＲＥＱ＿＊＿ＪＯＢ」の配信が要求されたことを意味する。例えば、エミュレータ部１１が、省エネ状態であった場合、ジョブの実行時には、エミュレータ部１１を省エネ状態から復帰させる必要が有るため、システム管理部１１６にも「ＲＥＱ＿＊＿ＪＯＢ」の配信が必要とされるのである。
【００４１】
なお、エミュレータ部１１の動作過程において、或モジュールにおいて、或るイベントの通知が必要になったり不要になったりすることがある。例えば、ジョブ管理部１１４は、実行中のジョブ又はスプールされているジョブが存在する場合は、サービス管理部１１５から通知されるイベントを受信する必要が有るが、該当するジョブが存在しなければイベントを受信する必要はない。この場合、ジョブ管理部１１４は、該当するジョブが発生した際に、配信が必要なイベントに係るイベント配信情報の登録要求を、ディスパッチ部１１３に対して送信してもよい。また、ジョブが存在しなくなったときに、ジョブ管理部１１４は、配信が不要となったイベントに係るイベント配信情報の登録解除要求を、ディスパッチ部１１３に対して送信してもよい。ディスパッチ部１１３は、登録解除要求に係るレコードを、イベント配信情報記憶部１２０から削除する。
【００４２】
すなわち、イベント配信情報の登録又は削除は、各モジュールの任意のタイミングで行われてもよい。そうすることにより、ディスパッチ部１１３は、各モジュールが必要なイベントを必要な時に配信することができる。
【００４３】
なお、状態変更部１１７及び状態監視部１１８は、基本的に、ユーザからの指示に応じてイベント配信情報の登録をディスパッチ部１１３に要求する。但し、ユーザからの指示が無くても状態変更部１１７又は状態監視部１１８としての機能を実現するために必要となるイベントが有る場合には、状態変更部１１７及び状態監視部１１８も、図４における各モジュールに含まれてもよい。
【００４４】
なお、イベントの通知と、イベントに対する応答とは、必ずしも、非同期に行われなくてもよい。例えば、イベントは、関数又はメソッド等の呼び出しによって、各モジュールに通知されてもよい。
【００４５】
続いて、ディスパッチ部１１３によるイベントの配信処理について説明する。図６は、イベント配信処理の処理手順の一例を説明するためのフローチャートである。
【００４６】
ディスパッチ部１１３は、レスポンス生成部１１２、ジョブ管理部１１４、サービス管理部１１５、及びシステム管理部１１６の各モジュールからのイベントの受信を待機している（Ｓ２０１）。いずれかのモジュールからのイベントが受信されると（Ｓ２０１でＹｅｓ）、ディスパッチ部１１３は、当該イベントの配信先の有無を、イベント配信情報記憶部１２０（図５）を参照して判定する（Ｓ２０２）。具体的には、当該イベントに含まれているイベント名を含むレコードが、イベント配信情報記憶部１２０から検索される。該当するレコードが存在する場合、当該イベントの配信先は有ると判定される。該当するレコードが存在しない場合、当該イベントの配信先は無いと判定される。
【００４７】
配信先が有る場合（Ｓ２０２でＹｅｓ）、ディスパッチ部１１３は、ステップＳ２０２において検索されたレコードの配信先に基づいて特定されるモジュールに、当該イベントを配信する（Ｓ２０３）。また、当該イベントに含まれているパラメータのうち、当該レコードの配信パラメータに該当するパラメータも、当該モジュールに配信される。
【００４８】
一方、配信先が無い場合（Ｓ２０２でＮｏ）、ディスパッチ部１１３は、当該イベントの配信は行わない。
【００４９】
続いて、エミュレータ部１１を利用したアプリ１２の動作確認時に実行される処理手順について説明する。図７は、アプリの動作確認時に実行される処理手順の一例を説明するためのシーケンス図である。図７は、例えば、ユーザの任意の入力によるアプリ１２のテストの実施時に実行される。
【００５０】
ＵＩ部１１９は、例えば、表示装置１０６に表示されている画面を介して、エミュレータ部１１の強制的な状態変更の指示をユーザから受け付けると、当該指示を、状態変更部１１７に通知する（Ｓ４０１）。当該指示においては、状態変更のタイミングの指定も可能である。図７では、１０枚印刷した時点でジャムを発生させること（ジャム状態とすること）が指示された例が示されている。状態変更部１１７は、当該指示に応じ、指定されたタイミングを検知又は特定するためのイベントが自らに通知されるように、当該イベントに係るイベント配信情報の登録要求をディスパッチ部１１３に送信する（Ｓ４０２）。具体的には、印刷カウンタイベント（「ＪＯＢ＿ＰＲＩＮＴ＿ＣＯＵＮＴＥＲ」）に係るイベント配信情報の登録要求がディスパッチ部１１３に送信される。印刷カウンタイベントは、印刷カウンタの値が増加するたびに、ジョブ管理部１１４から通知されるイベントをいう。印刷カウンタとは、対象機器において印刷の累積枚数が記憶される記憶領域をいう。なお、「ＪＯＢ」で始まるイベント名は、ジョブ管理部１１４から通知されるイベントであることを示す。
【００５１】
続いて、ＵＩ部１１９は、例えば、表示装置１０６に表示されている画面を介して、エミュレータ部１１の状態の監視指示を受け付けると、当該監視指示を、状態監視部１１８に通知する（Ｓ４０３）。図７では、ジャムの発生を監視することが指示された例が示されている。状態監視部１１８は、当該監視指示に応じ、ジャムの発生を検知又は特定するためのイベントが自らに通知されるように、当該イベントに係るイベント配信情報の登録要求をディスパッチ部１１３に送信する（Ｓ４０４）。具体的には、ジャム発生イベント（「ＳＥＲＶＩＣＥ＿ＪＡＭ＿ＯＮ」）に係るイベント配信情報の登録要求がディスパッチ部１１３に送信される。ジャム発生イベントは、ジャムの発生時に、サービス管理部１１５から通知されるイベントをいう。なお、「ＳＥＲＶＩＣＥ」で始まるイベント名は、サービス管理部１１５から通知されるイベントであることを示す。
【００５２】
上記の処理の結果、イベント配信情報記憶部１２０の記憶内容は、例えば、図８にされるように変化する。
【００５３】
図８は、イベント配信情報記憶部の記憶内容の変化例を示す図である。図８では、「ＪＯＢ＿ＰＲＩＮＴ＿ＣＯＵＮＴＥＲ」に係るレコードと、「ＳＥＲＶＩＣＥ＿ＪＡＭ＿ＯＮ」に係るレコードとが新たに追加されている。
【００５４】
続いて、ユーザによって、アプリ１２に対する指示が入力されると、アプリ１２は、当該アプリ１２に実装されたロジックに従った処理を実行する。例えば、アプリ１２は、或る文書データ（以下、「文書Ａ」という。）の印刷要求を示すＨＴＴＰリクエストを、リクエスト管理部１１１に送信する（Ｓ４１１）。当該印刷要求には、印刷条件も含まれる。図７では、印刷条件の一部として、２０枚の印刷が指定されたことが示されている。なお、印刷対象の文書データ及び印刷条件等は、ユーザによる操作によって、アプリ１２に対して設定される。また、アプリ１２からリクエスト管理部１１１への要求は、例えば、ＵＲＬ（Uniform Resource Locator）によって識別される。
【００５５】
アプリ１２に関するイベントを監視しているイベント検知部１３１は、当該ＨＴＴＰリクエストを検知すると（Ｓ４１０）、当該ＨＴＴＰリクエストに関するログ情報を生成し、当該ログ情報をログ記憶部１４０に記憶する。例えば、文書Ａの印刷要求及び当該印刷要求に含まれている印刷条件等が、ログ情報として記憶される。なお、ユーザによるアプリ１２に対する指示が、イベント検知部１３１によって検知され、当該指示の内容が、ログ情報として記憶されてもよい。
【００５６】
なお、図７においては、便宜上、ステップＳ４１０が、ステップＳ４１１より上に記載されているが、ステップＳ４１０は、ステップＳ４１１の実行に応じて実行される。また、ステップＳ４１０を示す矢印は、便宜上、アプリ１２の軸を起点としているが、これは、アプリ１２がイベント検知部１３１を呼び出すことを示すものではない。イベント検知部１３１は、例えば、ＯＳ等を介して、アプリ１２に関するイベントを検知する。したがって、アプリ１２は、評価シナリオ処理部１３０の存在を意識しなくてもよい。
【００５７】
一方、アプリ１２からの印刷要求を受信したリクエスト管理部１１１は、ＵＲＬによって示される要求をイベントに変換し、当該イベントをレスポンス生成部１１２に通知する（Ｓ４１２）。本実施の形態において、印刷要求を示すイベント（以下、「印刷要求イベント」という。）のイベント名は、「ＲＥＱ＿ＰＲＩＮＴ＿ＪＯＢ」であるとする。また、当該イベントには、印刷条件も含まれる。
【００５８】
続いて、レスポンス生成部１１２は、印刷要求イベントを、ディスパッチ部１１３に通知する（Ｓ４１３）。ディスパッチ部１１３は、印刷要求イベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、印刷要求イベントは、ジョブ管理部１１４に配信される（Ｓ４１４）。なお、図８によれば、印刷要求イベント（「ＲＥＱ＿ＰＲＩＮＴ＿ＪＯＢ」）は、システム管理部１１６にも配信されるが、図７では、便宜上、省略されている。
【００５９】
ジョブ管理部１１４は、印刷要求イベントが正常に受理されたことを示すレスポンスイベント（「ＲＥＳ＿ＲＥＱＵＥＳＴ＿ＲＥＣＥＩＶＥＤ」）を、ディスパッチ部１１３に通知する（Ｓ４１５）。ディスパッチ部１１３は、当該レスポンスイベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、当該レスポンスイベントは、レスポンス生成部１１２に配信される（Ｓ４１６）。
【００６０】
レスポンス生成部１１２は、ステップＳ４１３において印刷要求イベントをディスパッチ部１１３に通知後、印刷要求イベントに対する応答に必要な情報を含むイベントが通知されるのを待機している。例えば、レスポンス生成部１１２は、印刷要求イベントに対するレスポンス情報のデータ構造を知っており、当該データ構造に対応したメモリ領域を、メモリ装置１０３に確保しておく。レスポンス生成部１１２は、ディスパッチ部１１３からレスポンスイベントが通知されるたびに、当該メモリ領域において当該レスポンスに対応する部分（対応する変数）に、当該レスポンスイベントが示す値を格納する。レスポンス生成部１１２は、当該メモリ領域を構成する全ての変数の値が埋められると、待機状態を解除し、当該メモリ領域に格納されているレスポンス情報を、リクエスト管理部１１１に返信する。
【００６１】
レスポンス生成部１１２が、このような処理を実行するのは、レスポンス生成部１１２からディスパッチ部１１３へ通知されたリクエストイベントが、複数のモジュールに配信され、複数のモジュールからのレスポンスイベントが相互に非同期に返信される可能性が考えられるからである。図７の例では、ジョブ管理部１１４からのレスポンスイベントがレスポンス生成部１１２に配信された時点で、レスポンス生成部１１２は、レスポンス情報をリクエスト管理部１１１に返信する（Ｓ４１７）。
【００６２】
但し、例えば、エミュレータ部１１の状態の逐次的な通知が要求された場合、レスポンス生成部１１２は、待機を行うことなく、ストリーミング形式で、レスポンス情報をアプリ１２に返信してもよい。
【００６３】
続いて、リクエスト管理部１１１は、当該レスポンス情報を含むＨＴＴＰレスポンスを、アプリ１２に返信する（Ｓ４１８）。
【００６４】
一方、ジョブ管理部１１４は、印刷要求イベントに対するレスポンスイベントの通知後（Ｓ４１５）、当該印刷要求イベントを、サービス管理部１１５に直接的に通知する（Ｓ４１９）。なお、イベント配信情報記憶部１２０における、印刷要求イベントに対する配信先に、サービス管理部１１５を登録しておき、ステップＳ４１５において、ジョブ管理部１１４と共にサービス管理部１１５に対してもディスパッチ部１１３から印刷要求イベントが配信されてもよい。この場合、ステップＳ４１９は実行されなくてもよい。
【００６５】
印刷要求イベントに応じ、サービス管理部１１５は、擬似的又は仮想的な印刷を開始する（Ｓ４２０）。擬似的又は仮想的な印刷は、例えば、印刷の実行に応じて変化すべきパラメータの値の更新によって実現される。例えば、印刷カウンタが、１枚分の印刷の実行速度に応じた周期で更新（インクリメント）される。
【００６６】
一方、ジョブ管理部１１４は、印刷カウンタを監視している。ジョブ管理部１１４は、印刷カウンタの値が１増加するたびに、印刷カウンタイベント（「ＪＯＢ＿ＰＲＩＮＴ＿ＣＯＵＮＴＥＲ」）をディスパッチ部１１３に通知する（Ｓ４２１）。ディスパッチ部１１３は、印刷カウンタイベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、印刷カウンタイベントは、状態変更部１１７に配信される（Ｓ４２２）。
【００６７】
本実施の形態では、ステップＳ４２１及びＳ４２２が１０回繰り返された時点（すなわち、１０枚の印刷が行われた時点）で、状態変更部１１７は、ジャム発生命令イベント（「ＥＭＵＬＡＴＥ＿ＪＡＭ＿ＣＲＥＡＴＥ」）を、ディスパッチ部１１３に通知する（Ｓ４３１）。すなわち、印刷カウンタイベントに基づいて、ジャム発生命令イベント通知するタイミングが特定される。なお、ステップＳ４３１の前後において、状態変更部１１７は、印刷カウンタイベントの配信の解除を、ディスパッチ部１１３に要求してもよい。本実施の形態において、状態変更部１１７は、１０枚の印刷が実行されたことを検知すればよく、以降の印刷カウンタイベントの配信は状態変更部１１７にとって不要だからである。
【００６８】
ディスパッチ部１１３は、ジャム発生命令イベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、ジャム発生命令イベントは、サービス管理部１１５に配信される（Ｓ４３２）。
【００６９】
サービス管理部１１５は、ジャム発生命令イベントの受信に応じ、擬似的又は仮想的な印刷を停止させる（Ｓ４３３）。その結果、印刷カウンタ等、各種のパラメータの更新が停止する。続いて、サービス管理部１１５は、ジャム発生イベント（「ＳＥＲＶＩＣＥ＿ＪＡＭ＿ＯＮ」）を、ジョブ管理部１１４に通知する（Ｓ４３４）。ジョブ管理部１１４は、ジャム発生イベントの受信に応じ、例えば、印刷カウンタの監視を中止する。続いて、サービス管理部１１５は、ジャム発生イベントを、ディスパッチ部１１３に通知する（Ｓ４３５）。
【００７０】
ディスパッチ部１１３は、ジャム発生イベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、ジャム発生イベントは、状態監視部１１８に配信される（Ｓ４３６）。状態監視部１１８は、ジャムの発生をＵＩ部１１９に通知する（Ｓ４３７）。ＵＩ部１１９は、例えば、表示装置１０６に、ジャムの発生を示すメッセージを表示させる。
【００７１】
続いて、ＵＩ部１１９によって表示されたメッセージを確認したユーザが、表示装置１０６に表示されている画面を介して、ジャムの解除指示を入力すると、ＵＩ部１１９は、ジャムの解除命令を、状態変更部１１７に送信する（Ｓ４３８）。ジャムの解除指示の入力は、詰まっている用紙の、擬似的又は仮想的な除去作業に相当する。
【００７２】
ＵＩ部１１９からのジャムの解除命令を受信した状態変更部１１７は、ジャムの解除命令に応じ、ジャム解除命令イベント（「ＥＭＵＬＡＴＥ＿ＪＡＭ＿ＲＥＣＯＶＥＲ」）を、ディスパッチ部１１３に通知する（Ｓ４３９）。ディスパッチ部１１３は、ジャム解除命令イベントの受信に応じ、イベント配信処理（図６）を実行する。その結果、ジャム解除命令イベントは、サービス管理部１１５に配信される（Ｓ４４０）。
【００７３】
サービス管理部１１５は、ジャム解除命令イベントの受信に応じ、擬似的又は仮想的な印刷を再開させる（Ｓ４４１）。続いて、サービス管理部１１５は、印刷の再開を示すイベント（「ＳＥＲＶＩＣＥ＿ＰＲＩＮＴ＿ＲＥＳＵＭＥ」）を、ジョブ管理部１１４に、直接的に通知する（Ｓ４４２）。ジョブ管理部１１４は、当該イベントの受信に応じ、印刷カウンタの監視を再開する。その結果、ステップＳ４２１〜Ｓ４２２が、繰り返し実行される。但し、状態変更部１１７が、既に、印刷カウンタイベントの配信の解除をディスパッチ部１１３に要求している場合、ステップＳ４２２は実行されない。
【００７４】
その後、２０枚分の印刷が完了すると、サービス管理部１１５は、印刷の終了を示すイベント（「ＳＥＲＶＩＣＥ＿ＰＲＩＮＴ＿ＥＮＤ」）を、ジョブ管理部１１４に通知する（Ｓ４４３）。
【００７５】
なお、図７の説明では、便宜上、ログ情報の生成については、イベント検知部１３１についてのみ言及されているが、他の各部によっても、図７の処理過程において、随時ログ情報が生成される。その結果、例えば、図９に示されるようなログ情報が、ログ記憶部１４０に記憶される。
【００７６】
図９は、ログ情報の一例を示す図である。図９では、図７の処理が実行されることによりログ記憶部１４０に記憶されるログ情報が、時系列に示されている。各ログ情報には、行番号が付されている。行番号は、説明の便宜上付されたものであり、ログ情報の構成要素でなくてもよい。また、ログ情報には、日時情報が含まれていてもよい。
【００７７】
１行目のログ情報は、ステップＳ４０１の実行時に、ＵＩ部１１９によって生成されたログ情報である。すなわち、当該ログ情報は、１０枚印刷した時点でジャムを発生させることが指示されたことを示している。なお、「状態変更：」で始まるログ情報は、コロン（：）以降の状態変更に関する指示が、エミュレータ部１１に入力されたことを示す。
【００７８】
２行目のログ情報は、ステップＳ４０３の実行時に、ＵＩ部１１９によって生成されたログ情報である。すなわち、当該ログ情報は、ジャムの発生を監視することが指示されたことを示している。なお、「監視：」で始まるログ情報は、コロン以降の事象（イベント）の監視指示が、エミュレータ部１１に入力されたことを示す。
【００７９】
３行目及び４行目のログ情報は、ステップＳ４１１の実行時に、アプリ１２によって生成されたログ情報である。すなわち、アプリ１２も、任意のタイミングでログ情報を生成する。アプリ１２が、いずれのタイミングでログ情報を生成するかについて、また、アプリ１２が生成するログ情報の内容については、アプリ１２の実装に依存する。なお、「アプリ：」で始まるログ情報は、アプリ１２によって生成されたログ情報である。
【００８０】
５行目のログ情報は、ステップＳ４１０に応じて、イベント検知部１３１によって生成されたログ情報である。すなわち、当該ログ情報は、文書Ａの印刷要求が検知されたこと、及び当該印刷要求の内容を示す。なお、「リクエスト：」で開始されるログ情報は、コロン以降の要求（アプリ１２からの要求）がエミュレータ部１１によって検知されたことを示す。
【００８１】
６行目のログ情報は、ステップＳ４３７に応じて、ＵＩ部１１９によって生成されたログ情報である。すなわち、当該ログ情報は、ジャムの発生が検知されたことを示す。なお、「イベント：」で始まるログ情報は、コロン以降のイベントが検知されたことを示す。７及び８行目は、当該ジャムの発生に関して、アプリ１２が任意に生成したログ情報である。
【００８２】
９行目のログ情報は、ステップＳ４３８の実行時に、ＵＩ部１１９によって生成されたログ情報である。すなわち、当該ログ情報は、ジャムの解除指示が入力されたことを示す。１０及び１１行目のログ情報は、ジャムの解除に応じて、アプリ１２が任意に生成したログ情報である。
【００８３】
なお、例えば、リクエスト管理部１１１、レスポンス生成部１１２、ディスパッチ部１１３、ジョブ管理部１１４、サービス管理部１１５、システム管理部１１６、状態変更部１１７、又は状態監視部１１８等によってもログ情報が生成されてもよい。
【００８４】
なお、図７において、アプリ１２は、ステップＳ４１８において応答を受信した後、ジョブの状態を監視するように実装されていてもよい。この場合、ジャムの発生やジャムの解除に応じて、アプリ１２が期待通り動作するか否かを、ユーザは確認することができる。または、動作確認の対象のアプリ１２は、図７におけるアプリ１２と別のアプリ１２であってもよい。すなわち、図７におけるアプリ１２が印刷を実行させており、当該印刷の途中でジャムが発生した場合に、並列的に動作している動作確認対象のアプリ１２に対するジャムによる影響が期待通りであるか否かが確認されてもよい。
【００８５】
また、図７は、或る一つのシナリオに対応する処理手順を示したものであり、本実施の形態における情報処理装置１０において実行可能な処理手順は、図７示したものに限定されない。例えば、状態変更部１１７は、トナー切れや用紙切れ等、対象機器において発生しうる各種の事象を発生させてもよい。また、アプリ１２からの要求は、印刷要求に限定されない。リクエスト管理部１１１は、リクエスト管理部１１１が有するＡＰＩ（すなわち、対象機器のアプリケーションプラットフォームが提供するＡＰＩ）を介して受け付け可能な各種の要求を受け付けることができる。
【００８６】
続いて、評価シナリオの生成及び評価シナリオの実行に関する処理手順について説明する。図１０は、評価シナリオの生成及び実行に関する処理手順の一例を説明するためのシーケンス図である。図１０中、図７と同一ステップには、同一ステップ番号を付し、その説明は、適宜省略する。なお、図７において、評価シナリオ処理部１３０に関連するステップ（Ｓ５０１〜Ｓ５０９）と、評価シナリオ処理部１３０に関連しないステップ（Ｓ４０１〜Ｓ４４３）とについては、便宜上、ステップ番号の系列が異なる。
【００８７】
例えば、表示装置１０６に表示されている画面を介して、評価シナリオの生成指示がユーザによって入力されると、ＵＩ部１１９は、当該生成指示をシナリオ生成部１３２に通知する（Ｓ５０１）。当該生成指示に応じ、シナリオ生成部１３２は、ログ記憶部１４０に記憶されているログ情報に基づいて、評価シナリオを生成する。ここで、ログ記憶部１４０には、エミュレータ部１１において、アプリ１２の動作確認が行われるたびにログ情報が記憶されるため、大量のログ情報が蓄積されている可能性が有る。そこで、ユーザは、ログ記憶部１４０から、再現させたい処理に係るログ情報を抽出しておいてもよい。又は、ログ情報に日時情報が含まれている場合には、再現させたい処理が含まれている日時の範囲がユーザによって指定されてもよい。シナリオ生成部１３２は、抽出されたログ情報、又は指定された日時の範囲に含まれるログ情報に基づいて評価シナリオを生成してもよい。そうすることで、エミュレータ部１１を利用してアプリ１２の不正動作を発見した場合に、当該不正動作に関係する処理を効率的に再現することができる。
【００８８】
ログ情報に基づく評価シナリオの生成（ログ情報から評価シナリオへの変換）は、特定のログ情報に基づいて行われる。本実施の形態において、特定のログ情報とは、「状態変更：」、「監視：」、「リクエスト：」、又は「イベント：」で開始されるログ情報である。例えば、図９に示されるログ情報は、図１１に示されるように評価シナリオに変換される。
【００８９】
図１１は、ログ情報から評価シナリオへの変換を説明するための図である。図１１には、評価シナリオの命令に変換されるログ情報に対して、変換後の命令が示されている。例えば、１行目のログ情報は、「ＵＩ：状態変更指示（１０枚印刷でジャム発生）」に変換されている。また、２行目のログ情報は、「ＵＩ：状態監視指示（ジャム）」に変換されている。すなわち、基本的に、「状態変更：」又は「監視：」で始まるログ情報は、「ＵＩ：」で始まる命令に変換される。
【００９０】
また、５行目のログ情報は、「ＥＶＥＮＴ：印刷要求（文書Ａ、２０枚、・・・）」に変換されている。すなわち、基本的に、「リクエスト：」で開始されるログ情報は、「ＥＶＥＮＴ：」で始まる命令に変換される。
【００９１】
一方、６行目のログ情報は、「ＩＦ  ジャム発生」に変換され、９行目のログ情報は、「ＴＨＥＮ  ジャム解除命令」に変換されている。ステップＳ４３７におけるジャムの発生の検知と、ステップＳ４３８におけるジャムの解除指示とは、対をなすイベントだからである。すなわち、ジャムの解除指示は、ジャムの発生に応じて、ユーザによって入力された指示である。このようなイベントに関して、シナリオ生成部１３２は、ジャムの発生を条件（ＩＦ文）とし、ジャムの解除指示を結果（ＴＨＥＮ文）とする命令を生成する。一般化すると、シナリオ生成部１３２は、「イベント：」で開始されるログ情報（すなわち、イベントの検知を示すログ情報）については、ＩＦ文に変換し、当該ログ情報の後の「状態変更：」で開始されるログ情報については、当該ＩＦ文に対応するＴＨＥＮ文に変換する。
【００９２】
以上のような変換処理が行われた結果、例えば、図１２に示されるような評価シナリオが生成される。
【００９３】
図１２は、評価シナリオの一例を示す図である。評価シナリオｎ１の各行は、「＜行番号＞：＜入力先＞：＜命令内容＞」の形式で記載されている。行番号は、命令の実行順を示す。入力先は、当該命令の入力先を示す。「ＵＩ」は、ＵＩ部１１９に対する命令であることを示す。「ＥＶＥＮＴ」は、擬似イベント生成部１３４に対する命令であることを示す。なお、４行目におけるＩＦ−ＴＨＥＮ構文に関しては、命令先は示されていない。ＩＦ−ＴＨＥＮ構文におけるＴＨＥＮ文に係る命令の入力先は、ＵＩ部１１９であることが自明だからである。
【００９４】
シナリオ生成部１３２は、生成された評価シナリオｎ１を、ＵＩ部１１９に出力する（Ｓ５０２）。
【００９５】
続いて、ＵＩ部１１９は、評価シナリオｎ１の実行指示をシナリオ実行部１３３に通知する（Ｓ５０３）。なお、当該実行指示には、実行対象とされる評価シナリオｎ１が含まれる。続いて、シナリオ実行部１３３は、評価シナリオｎ１の実行を開始する。
【００９６】
まず、シナリオ実行部１３３は、評価シナリオｎ１の１行目に基づいて、１０枚印刷した時点でジャムを発生させることの指示を、ＵＩ部１１９に入力する（Ｓ５０４）。シナリオ実行部１３３からの当該指示に応じ、ステップＳ４０１及びＳ４０２が実行される。
【００９７】
続いて、シナリオ実行部１３３は、評価シナリオｎ１の２行目に基づいて、ジャムの発生の監視指示をＵＩ部１１９に入力する（Ｓ５０５）。シナリオ実行部１３３からの当該指示に応じ、ステップＳ４０３及びＳ４０４が実行される。
【００９８】
続いて、シナリオ実行部１３３は、評価シナリオｎ１の３行目に基づいて、文書Ａの印刷要求イベントの発生指示を、擬似イベント生成部１３４に入力する（Ｓ５０６）。当該発生指示には、印刷要求に関する印刷条件も含まれる。擬似イベント生成部１３４は、当該発生指示に基づいて、印刷要求を示すイベントを擬似的に発生させる（Ｓ５０７）。当該イベントの擬似的な発生は、例えば、リクエスト管理部１１１のＡＰＩの呼び出しによって実現されてもよいし、ユーザによるアプリ１２に対する指示に相当する擬似的なイベントの生成によって実現されてもよい。前者の場合、当該イベントに応じ、ステップＳ４１２〜Ｓ４３６が実行される。後者の場合、当該イベントに応じ、ステップＳ４１１〜Ｓ４３６が実行される。
【００９９】
シナリオ実行部１３３は、評価シナリオｎ１の４行目の実行については、ＩＦ文に示されている条件が満たされるまで待機する。
【０１００】
その後、ステップＳ４３７に応じて、ＵＩ部１１９からジャムの発生が通知されると（Ｓ５０８）、シナリオ実行部１３３は、ジャムの発生が、評価シナリオｎ１の４行目のＩＦ文の条件を満たすか否かを判定する。ジャムの発生は、当該４行目のＩＦ文の条件を満たすため、シナリオ実行部１３３は、当該４行目のＴＨＥＮ文に基づいて、ジャムの解除指示をＵＩ部１１９に入力する（Ｓ５０９）。当該解除指示に応じ、ステップＳ４３８〜Ｓ４４３が実行される。
【０１０１】
上述したように、本実施の形態によれば、アプリ１２の動作確認において実行された処理の履歴がログ情報として記憶され、当該ログ情報に基づいて評価シナリオが生成される。また、当該評価シナリオに基づいて、当該処理の履歴が再現される。したがって、過去に実行された処理手順を容易に再現可能とすることができる。
【０１０２】
また、ユーザは、ＵＩ部１１９及び状態変更部１１７を介して、エミュレータ部１１の状態を強制的に、かつ、任意のタイミングで変更することができる。したがって、ユーザは、対象機器において発生しうる各種の状態を容易に再現させて、当該状態においてアプリ１２の動作確認等を実行することができる。
【０１０３】
また、各モジュールからのイベントの配信は、ディスパッチ部１１３によって、イベント配信情報記憶部１２０に基づいて仲介される。したがって、イベントの配信先の変更等に伴う、各モジュールのソースコードの変更等の必要性を低減させることができる。
【０１０４】
なお、本実施の形態では、エミュレータ部１１がエミュレートする機器（対象機器）が、画像形成装置である例について説明したが、エミュレータ部１１がエミュレートする機器は、プロジェクタ、テレビ会議システム、デジタルカメラ等、画像形成装置以外の機器がエミュレートの対象であってもよい。
【０１０５】
また、本実施の形態における情報処理装置１０の機能は、クラウドサービス、ＡＳＰ（Application Service Provider）が提供するサービス、又はＷｅｂサービス等、ネットワークを介して利用されるサービスとして提供されてもよい。この場合、アプリ１２は、情報処理装置１０にネットワークを介して接続される、ユーザ側のＰＣ（Personal Computer）等に配置されてもよいし、情報処理装置１０に対してアップロードされてもよい。
【０１０６】
なお、本実施の形態において、情報処理装置１０は、情報処理装置及び情報処理システムの一例である。リクエスト管理部１１１は、要求受付部の一例である。エミュレータ部１１は、模倣部及び記憶処理部の一例である。ＵＩ部１１９は、指示受付部及びユーザ通知部の一例である。シナリオ生成部１３２は、生成部の一例である。ログ記憶部１４０は、第一の記憶部の一例である。シナリオ実行部１３３は、実行部の一例である。ディスパッチ部１１３は、配信部の一例である。イベント配信情報記憶部１２０は、第二の記憶部の一例である。ジョブ管理部１１４、及びサービス管理部１１５は、構成部の一例である。
【０１０７】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【０１０８】
１０          情報処理装置
１１          エミュレータ部
１２          アプリ
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        表示装置
１０７        入力装置
１１１        リクエスト管理部
１１２        レスポンス生成部
１１３        ディスパッチ部
１１４        ジョブ管理部
１１５        サービス管理部
１１６        システム管理部
１１７        状態変更部
１１８        状態監視部
１１９        ＵＩ部
１２０        イベント配信情報記憶部
１３０        評価シナリオ処理部
１３１        イベント検知部
１３２        シナリオ生成部
１３３        シナリオ実行部
１３４        擬似イベント生成部
１４０        ログ記憶部
Ｂ            バス
【先行技術文献】
【特許文献】
【０１０９】
【特許文献１】特開２００４−１８５５９５号公報
【図１】
2016146097.tif 000003
【図２】
2016146097.tif 000004
【図３】
2016146097.tif 000005
【図４】
2016146097.tif 000006
【図５】
2016146097.tif 000007
【図６】
2016146097.tif 000008
【図７】
2016146097.tif 000009
【図８】
2016146097.tif 000010
【図９】
2016146097.tif 000011
【図１０】
2016146097.tif 000012
【図１１】
2016146097.tif 000013
【図１２】
2016146097.tif 000014