以下に、本願に係る解析システム、解析装置、解析方法及び解析プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る解析システム、解析装置、解析方法及び解析プログラムが限定されるものではない。
(第1の実施形態)
[解析システムの構成]
最初に、図1を用いて、第1の実施形態に係る解析システムについて説明する。図1は、第1の実施形態に係る解析システム1の構成例を示す図である。図1に例示した解析システム1には、実行装置10と、解析装置100とが含まれる。実行装置10と解析装置100とは、互いに通信可能に接続される。なお、実行装置10と解析装置100とは、図示しないネットワークを介して通信可能に接続されてもよい。
実行装置10は、解析装置100によって解析されるアプリケーションソフトウェア(以下、単に「アプリケーション」と表記する)の実行環境を提供するエミュレータである。かかる実行装置10は、例えば、PC(Personal Computer)や携帯電話機やPDA(Personal Digital Assistant)等の物理マシンによって実現されてもよいし、仮想マシンによって実現されてもよい。
なお、実行装置10は、解析装置100によって解析されるアプリケーションとして、図1に示す解析対象アプリケーション11を実行するものとする。解析対象アプリケーション11は、解析装置100によって解析されるアプリケーションであり、例えば、所定のサイト(サーバ装置)からダウンロード可能である。このような解析対象アプリケーション11は、解析装置100を利用する解析者が開発したものではなく、解析者にとって仕様が明らかでないものとする。
以下では、解析対象アプリケーション11は、一例として、スマートフォンやタブレットPC等において、Android OS(Operating System)上で動作するアプリケーションであるものとする。このような解析対象アプリケーション11は、GUIを前提としたものが多く、ユーザ操作に応じて画面が遷移する。例えば、解析対象アプリケーション11は、指や専用器具(例えば、タッチペン)等によって、タッチパネル式の表示画面が押下されることで各種ユーザ操作を受け付ける。ユーザ操作の一例としては、表示画面を指で押下して短時間で離すタップ操作や、表示画面を2回押下するダブルタップ操作や、表示画面を押下した状態で指をスライドさせるドラッグ操作や、表示画面を2本の指で押下した状態で双方の指を近づけたり遠ざけたりするピンチ操作等が挙げられる。また、解析対象アプリケーション11は、表示画面が押下されるユーザ操作に限らず、スマートフォン等の実機に備えられているハードキーが押下されるユーザ操作も受け付ける。以下、解析対象アプリケーション11が受け付けることが可能なユーザ操作を「ユーザイベント」と表記する場合がある。
解析装置100は、実行装置10に対して解析対象アプリケーション11を実行させることにより、解析対象アプリケーション11の動作を解析する。かかる解析装置100は、例えば、PC(Personal Computer)等の物理マシンによって実現されてもよいし、仮想マシンによって実現されてもよい。
ここで、図2を用いて、解析装置100による解析処理について簡単に説明する。図2は、第1の実施形態に係る解析装置100による解析処理の一例を示す図である。第1の実施形態に係る解析装置100は、図2に例示するように、画面の遷移モデルを生成しながら、生成した遷移モデルを巡回するようにユーザイベントを実行装置10に対して模擬的に実行させる。このとき、解析装置100は、解析対象アプリケーション11の実行中に実際に表示され得る各画面をそれぞれ異なる画面として扱うのではなく、類似している画面群を同一の画面として扱う。
具体的には、解析装置100は、実行装置10にユーザイベントを模擬的に実行させた後に、解析対象アプリケーション11により表示される画面の構造を解析することにより画面状態を取得する。ここでいう「画面状態」とは、画面構造の特徴的な部品(コンポーネント)等によって表される抽象的な画面構造を示す。すなわち、画面構造の特徴的な部品が同一である画面群は、画面状態も同一となる。
そして、解析装置100は、図2に示すように、画面状態をノード(「接点」や「頂点」等とも呼ばれる)とし、かつ、ユーザイベントをエッジ(「枝」や「辺」等とも呼ばれる)としたグラフを遷移モデルとして生成する。このようにして、解析装置100は、画面状態をノードとするグラフを生成し、生成したグラフに含まれる各画面状態において未実行のユーザイベント(エッジ)を実行装置10に順次実行させる。
例えば、図2では、画面状態v11においてユーザイベント「ボタンAをタップ」が実行された場合には、画面状態v11から遷移しないことを示している。ここで、実際には、ユーザイベント「ボタンAをタップ」が実行されることで、異なる画面に遷移している可能性もある。しかし、第1の実施形態に係る解析装置100は、抽象的な画面構造を示す「画面状態」により画面の遷移を判定するので、画面状態v11においてユーザイベント「ボタンAをタップ」が実行された場合であっても、画面状態が同一である限り新たな画面状態をグラフに追加しない。
ここで、図3を用いて、類似している画面群を同一の画面として扱う理由について説明する。図3は、アプリケーションにより表示される画面の一例を示す図である。図3は、電卓のアプリケーションにおいて表示される画面例を示す。具体的には、図3(a)は、数値や演算子等を入力するための画面例を示す。また、図3(b)は、図3(a)の状態において数値「1」が入力された状態の画面例を示す。また、図3(c)は、図3(a)の状態において数値「2」が入力された状態の画面例を示す。また、図3(d)は、図3(a)〜(c)と異なる演算子を入力するための画面例を示す。
このような各種画面のうち、図3(a)〜(d)の全てを異なる画面として扱った上で動的解析を行う場合、図3(a)〜(c)のそれぞれにおいて、数値「0」〜「9」や小数点や各種演算子が入力される各種ユーザイベントを実行することとなる。しかし、図3(a)〜(c)のそれぞれにおいて、同様のユーザイベントを発生させることは冗長であり、効率的なアプリケーションの動的解析であるとは言えない。
例えば、図3(b)において演算子「+」が入力された際の電卓アプリケーションの挙動と、図3(c)において演算子「+」が入力された際の電卓アプリケーションの挙動とは、同一である可能性が高い。また、図3(b)及び(c)では、数値「1」又は「2」が入力されている状態について示したが、これらの数値以外(例えば、「0.1」や「3」や「10」や「100」等)が入力されている各状態において、演算子「+」が入力された際の電卓アプリケーションの挙動についても同一である可能性が高い。仮に、入力されている数値が異なる複数の画面をそれぞれ異なる画面として扱った上で動的解析を行う場合、ユーザイベントを過剰に実行させることとなり、動的解析にかかるコストを増大させることとなる。
そこで、第1の実施形態に係る解析装置100は、類似している画面群を同一の画面として扱う。例えば、解析装置100は、図3(a)〜(c)に例示されている各画面については同一画面として扱い、図3(d)の画面については図3(a)〜(c)の各画面と異なる画面として扱う。この場合、解析装置100は、図3(a)の状態で演算子「+」を入力するユーザイベントを実行させた後には、図3(b)や(c)の状態で演算子「+」を入力するユーザイベントを実行させない。なお、この例に限られず、解析装置100は、図3(b)及び(c)を同一画面として扱い、図3(a)については、図3(b)及び(c)と異なる画面として扱ってもよい。
このように、第1の実施形態に係る解析装置100は、抽象的な画面構造である画面状態をノードとするグラフ(遷移モデル)を生成しながら、各画面状態において未実行のユーザイベントを実行装置10に実行させる。すなわち、解析装置100は、類似する各画面を同一の画面状態として扱うことで、実質的に同一である複数の画面において同じようなユーザイベントが実行されることを防止できるので、効率的に解析対象アプリケーション11を実行することができる。さらに、解析装置100は、グラフのノードである各画面状態において未実行のユーザイベントを順次実行させるので、解析対象アプリケーション11を網羅的に実行することができる。このようなことから、第1の実施形態に係る解析装置100は、GUI操作を伴うアプリケーションの動的解析においてコードカバレッジを効率的に高めることができる。以下、このような解析処理を実現する実行装置10及び解析装置100について、詳細に説明する。
[実行装置の構成]
まず、図1を用いて、上述した実行装置10の構成について説明する。図1に例示するように、実行装置10は、解析対象アプリケーション11と、構造情報提供部12と、実行部13とを有する。解析対象アプリケーション11については既に説明したのでここでは説明を省略する。
構造情報提供部12は、解析対象アプリケーション11により表示される画面毎に、かかる画面の構造を示す構造情報を解析装置100に提供する。なお、構造情報提供部12は、例えば「Window Manager」等によって実現される。ここで、図4を用いて、構造情報について説明する。図4は、第1の実施形態に係る構造情報を説明するための図である。
図4に示したGUI画面G10は、メールアドレスを入力するための画面である。かかるGUI画面G10は、最上位のレイアウトC11の中に、レイアウトC21及びC22が含まれる。また、レイアウトC21には、ユーザとのインタラクションが行われるボタンC31(OKボタン)やボタンC32(Cancelボタン)が含まれる。また、レイアウトC22には、「Enter e−mail:」といったテキストC33や、ユーザとのインタラクションが行われるテキストボックスC34が含まれる。
このようなGUI画面G10を表すためのデータ構造として、一般的に、図4に右側に示すような木構造が用いられる。かかる木構造のうち、葉ノード(leaf node)には、実際にユーザとのインタラクションが行われるコンポーネント(ボタンC31、ボタンC32、テキストC33、テキストボックスC34等)が配置される。また、かかる木構造のうち、葉ノード以外の根ノード(root node)や内部ノード(internal node)には、レイアウト等に関するコンポーネント(レイアウトC11、C21、C22等)が配置される。
構造情報提供部12は、図4の右側に示されるような木構造により表される構造情報を解析装置100に提供することとなる。なお、このような木構造により表される構造情報は、Androidアプリケーションにおける「View Hierarchy」や、Web画面におけるHTML(HyperText Markup Language)等に該当する。
図1の説明に戻って、実行部13は、解析対象アプリケーション11を実行する。具体的には、実行部13は、後述する解析装置100のイベント実行制御部132による指示に従って、解析対象アプリケーション11に対してユーザイベントを模擬的に実行する。ここでいう「模擬的に実行」とは、例えばユーザイベントがタップ操作である場合に、実行装置10の表示画面に対して実際にタップ操作を行うのではなく、タップ操作が行われた際の処理を実行するよう解析対象アプリケーション11に指示することを示す。なお、実行部13は、例えば、Android OSにおける「adbd(adbデーモン)」等によって実現される。
[解析装置の構成]
次に、上述した解析装置100の構成について説明する。図1に示すように、解析装置100は、遷移モデル記憶部110と、遷移モデル生成部120と、端末制御部130とを有する。
遷移モデル記憶部110は、例えば、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子、又は、ハードディスク、光ディスク等によって実現される。かかる遷移モデル記憶部110は、解析対象アプリケーション11における画面遷移を示す遷移モデルを記憶する。具体的には、第1の実施形態に係る遷移モデル記憶部110は、遷移モデルとして、図2に例示したようなグラフを記憶する。
ここで、図5に、第1の実施形態に係る遷移モデル記憶部110の一例を示す。図5に示した例では、遷移モデル記憶部110は、「ノード」、「エッジ」、「遷移先ノード」、「画面状態情報」、「ログ情報」といった項目を有する。なお、図5では、図2に例示したグラフに対応する各種情報が記憶されている例を示す。
「ノード」は、遷移モデルにおける画面状態を示す。「エッジ」は、遷移モデルにおけるユーザイベントを示す。「遷移先ノード」は、「ノード」によって示される画面状態において「エッジ」によって示されるユーザイベントが実行された場合における遷移先の画面状態を示す。「画面状態情報」は、画面状態を識別するための情報であって、「ノード」によって示される画面状態における画面構造の特徴的な部品(コンポーネント)によって表される抽象的な画面構造の情報を示す。「ログ情報」は、「ノード」によって示される画面状態において「エッジ」によって示されるユーザイベントが実行された際に、後述するログ取得部133によって取得されたログを示す。なお、画面状態情報や、ログ取得部133によって取得されるログについては後述する。
例えば、図5は、画面状態v11では、ユーザイベント「ボタンAのタップ」、「ハードキーXの押下」、「テキスト入力」が実行可能であることを示している。また、図5は、画面状態v11においてユーザイベント「ボタンAのタップ」が実行された場合には、画面状態v11に遷移し、その際にログ取得部133によって取得されたログ情報が「ログL11」であることを示している。また、図5は、画面状態v11を識別するための画面状態情報が「I11」であることを示している。
図1の説明に戻って、遷移モデル生成部120は、構造情報提供部12によって提供される構造情報を解析することにより、遷移モデルを生成する。かかる遷移モデル生成部120は、構造情報取得部121と、遷移モデル更新部122とを有する。
構造情報取得部121は、実行装置10に対して構造情報を要求することにより、かかる要求に応答して構造情報提供部12により提供される構造情報を取得する。具体的には、構造情報取得部121は、実行装置10の実行部13によりユーザイベントが実行されるたびに、端末制御部130による指示に従って解析対象アプリケーション11により現に表示される画面(以下、「現画面」と表記する場合がある)に関する構造情報を構造情報提供部12から取得する。例えば、構造情報取得部121は、「Window Manager」等によって実現される構造情報提供部12から、「View Hierarchy」のダンプを構造情報として取得する。
遷移モデル更新部122は、構造情報取得部121によって取得された構造情報に基づいて遷移モデルを生成し、遷移モデル記憶部110に記憶されている遷移モデルを更新する。具体的には、遷移モデル更新部122は、構造情報取得部121によって取得された構造情報から画面状態情報を生成する。そして、遷移モデル更新部122は、生成した画面状態情報が、遷移モデル記憶部110に記憶されているか否かを判定する。これにより、遷移モデル更新部122は、構造情報が取得済みである既知の画面と現画面との類似性を判定することとなる。
そして、遷移モデル更新部122は、既知の画面と類似していない現画面が遷移モデルに追加されるように遷移モデル記憶部110を更新する。具体的には、遷移モデル更新部122は、現画面の画面状態情報を遷移モデル記憶部110の「ノード」や「遷移先ノード」に登録する。
ここで、図6を用いて、遷移モデル更新部122によって生成される画面状態情報について説明する。図6は、第1の実施形態に係る画面状態情報の一例を示す図である。上記の通り、実行装置10の構造情報提供部12によって提供される各画面の構造情報は、木構造により表される。例えば、構造情報提供部12は、図6の左側に示すように、構造情報をダンプした木構造データT11を提供する。かかる木構造データT11のうち、各行の左に示した数値は、木構造における深さ(根ノードから内部ノードや葉ノードまでのエッジ数)を示す。また、木構造データT11のうち、ユーザイベントの対象となるノードには、数値の右側に「*」(アスタリスク)が付加されている。なお、図6では図示することを省略したが、構造情報提供部12によって提供される木構造データT11には、ノード毎に、かかるノード配置位置や、かかるノードが表示されるか否かといった属性情報も含まれる。
遷移モデル更新部122は、このような木構造データT11が構造情報取得部121により取得された場合に、かかる木構造データT11に含まれるノードの中から、木構造データT11に含まれる各ノードの属性情報や、木構造におけるノードの位置に基づいて、ユーザイベントの対象となるノードを決定する。
具体的には、遷移モデル更新部122は、下記の条件(1)〜(4)を満たすノードをユーザイベントの対象ノードとして決定する。なお、遷移モデル更新部122は、各ノードの属性情報に基づいて、下記の条件(1)〜(3)を満たすか否かを判定できる。
条件(1):画面外に配置されていないノード
条件(2):画面において非表示に指定されていないノード
条件(3):ユーザイベントに対応するノード
(すなわち、深さを示す数値の右側に「*」が付加されているノード)
条件(4):木構造において葉ノードとなっているノード
遷移モデル更新部122は、このようにして決定した対象ノードから根ノードまでの経路に存在しない他の全てのノード及びエッジを取り除くことにより、画面状態情報を生成する。
図6に示した例を用いて説明すると、遷移モデル更新部122は、木構造データT11に含まれる各ノードのうち、2個の葉ノード「6:[*]android.widget.Button」をユーザイベントの対象ノードとして決定したものとする。かかる場合に、遷移モデル更新部122は、2個の葉ノード「6:[*]android.widget.Button」から、根ノード「0:com.android.internal.policy.impl.…」までの経路に存在しない他の全てのノード及びエッジを取り除くことにより、図6の右側に示した木構造データT12を生成する。そして、遷移モデル更新部122は、木構造データT12から、木構造に関する情報のみを抽出して文字列化したデータ(例えば、「0、1、2、3、4、5、6*、6*」)をハッシュ化することにより、画面状態情報を生成する。
このように、遷移モデル更新部122は、上記の条件(1)〜(4)を満たすノードをユーザイベントの対象ノードとして画面状態情報を生成することで、各画面における類似性の判定を高精度に行うことができる。すなわち、遷移モデル更新部122は、実質的に異なる画面を同一の画面として扱うことを防止できるので、ユーザイベントの実行漏れを防止することができる。また、遷移モデル更新部122は、ユーザイベントの対象ノードから根ノードまでの経路に存在しない他の全てのノード及びエッジを取り除くことにより、実質的には同一であるような画面を同一の画面状態として扱うことが可能になる。すなわち、遷移モデル更新部122は、実質的に同一である画面を遷移モデルに重複登録することを防止できるので、過剰なユーザイベントの実行を減らすことができる。
なお、遷移モデル更新部122は、木構造に関する情報のみを抽出して文字列化したデータ(例えば、「0、1、2、3、4、5、6*、6*」)に、パッケージ名、アクティビティ名、テキストボックスの入力状態(例えば、全てのテキストボックスに情報が入力されているか否かの2値)等を連結した後にハッシュ化したデータを画面状態情報として生成してもよい。ここでいう「パッケージ名」とは、例えば、アプリケーションを識別するための名称を示す。また、「アクティビティ名」とは、例えば、アプリケーション開発者等が、画面操作を行うモジュールに付与する名称である。なお、異なる画面であっても同一のモジュールによって制御される場合があるので、同一のアクティビティ名が異なる画面に対応する場合もある。例えば、図3(a)〜(d)に示した全ての画面には、同一のアクティビティ名が対応する場合もある。この例に限られず、図3(a)〜(c)に示した画面には同一のアクティビティ名が対応し、図3(d)に示した画面には、図3(a)〜(c)の画面と異なるアクティビティ名が対応する場合もある。
また、例えば、画面状態情報に、テキストボックスの入力状態(全てのテキストボックスに情報が入力されているか否かの2値)が含まれる場合、図3(a)の画面状態は、図3(b)及び(c)の画面状態と異なることとなる。一方、画面状態情報に、テキストボックスの入力状態が含まれない場合、図3(a)〜(d)の画面状態は、全て異なることとなる。このような画面状態情報に、パッケージ名、アクティビティ名、テキストボックスの入力状態を含めるか否かは、解析装置100を利用する解析者によって設定可能である。
図1の説明に戻って、端末制御部130は、実行装置10に対して解析対象アプリケーション11を実行させるとともに、実行装置10からログを取得する。かかる端末制御部130は、イベント特定部131と、イベント実行制御部132と、ログ取得部133とを有する。
イベント特定部131は、遷移モデル記憶部110に記憶されている遷移モデルのうち、現画面に対応する画面状態において未実行のユーザイベントを特定する。また、イベント特定部131は、現画面に対応する画面状態において未実行のユーザイベントが存在しない場合には、他の画面状態において未実行のユーザイベントを探索する処理を行う。かかるイベント特定部131による処理については、図7及び図8A〜図8Cを用いて後述する。
イベント実行制御部132は、イベント特定部131によって特定されたユーザイベントを実行装置10の実行部13に模擬的に実行させる。かかるイベント実行制御部132による処理については、図7及び図8A〜図8Cを用いて後述する。
ログ取得部133は、イベント実行制御部132による制御に応じて実行部13によりユーザイベントが実行されるたびに、実行装置10からログ情報を取得する。例えば、ログ取得部133は、実行装置10から、実行環境に関する情報(アプリケーションの実行ログ、システムログ、通信ログなど)や、実行装置10の表示画面におけるスクリーンショット等をログとして取得する。かかるログ取得部133による処理については、図7及び図8A〜図8Cを用いて後述する。
なお、上述してきた遷移モデル生成部120及び端末制御部130は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等によって、図示しない記憶装置に記憶されているプログラムがRAMを作業領域として実行されることにより実現される。また、例えば、遷移モデル生成部120及び端末制御部130は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積回路により実現される。
[解析処理手順]
次に、解析装置100による解析処理の手順について説明する。なお、以下では、最初に、図7を用いて解析処理の流れを説明し、次に、図8A〜図8Cを用いて解析処理の具体例について説明する。図7は、第1の実施形態に係る解析装置100による解析処理手順を示すフローチャートである。
図7に示すように、解析装置100の構造情報取得部121は、解析対象アプリケーション11により現に表示されている現画面の構造情報を構造情報提供部12から取得する(ステップS101)。
続いて、遷移モデル更新部122は、構造情報取得部121によって取得された構造情報から画面状態情報を生成する(ステップS102)。具体的には、遷移モデル更新部122は、図6を用いて説明したように、ユーザイベントの対象となるノードから根ノードまでの経路に存在しない他の全てのノード及びエッジを取り除くなどして、画面状態情報を生成する。
続いて、遷移モデル更新部122は、ステップS102において生成した画面状態情報が遷移モデル記憶部110に記憶されているか否かを判定することにより、現画面の画面状態が未知の画面状態であるか否かを判定する(ステップS103)。
そして、遷移モデル更新部122は、現画面の画面状態が未知の画面状態である場合には(ステップS103肯定)、遷移モデル記憶部110に記憶されている遷移モデルに、現画面の画面状態をノードとして追加する(ステップS104)。具体的には、遷移モデル更新部122は、遷移モデル記憶部110の「ノード」に、現画面の画面状態を識別するための情報を格納するとともに、遷移モデル記憶部110の「画面状態情報」に、ステップS102において生成した画面状態情報を格納する。さらに、遷移モデル更新部122は、遷移モデル記憶部110の「エッジ」に、画面状態情報から得られるユーザイベントを格納する。
すなわち、遷移モデル記憶部110の「ノード」に新たな画面状態が格納される場合には、「エッジ」及び「画面状態情報」も格納されることとなる。これにより、後述するイベント特定部131は、「遷移先ノード」に情報が格納されていない「エッジ」が未実行のユーザイベントであると判定することができる。
続いて、遷移モデル更新部122は、現画面の画面状態が未知の画面状態でない場合や(ステップS103否定)、ステップS104における処理の後に、前回実行したユーザイベントが存在するか否かを判定する(ステップS105)。すなわち、遷移モデル更新部122は、実行部13によってユーザイベントが実行された後に、ステップS101〜S104における処理が行われたか否かを判定する。
そして、遷移モデル更新部122は、前回実行したユーザイベントが存在する場合には(ステップS105肯定)、遷移モデル記憶部110に記憶されている遷移モデルに、前回の画面状態から現画面の画面状態に対するエッジを追加する(ステップS106)。具体的には、遷移モデル更新部122は、遷移モデル記憶部110に記憶されている各レコードのうち、前回の画面状態を識別するための情報が「ノード」に格納されているレコードの「遷移先ノード」に現画面の画面状態を識別するための情報を格納する。
続いて、イベント特定部131は、現画面の画面状態において未実行のユーザイベントが存在するか否かを判定する(ステップS107)。具体的には、イベント特定部131は、上記の通り、現画面の画面状態に対応付けて遷移モデル記憶部110に記憶されている「エッジ」のうち、「遷移先ノード」に情報が格納されていない「エッジ」が存在する場合には、未実行のユーザイベントが存在すると判定する。
そして、イベント特定部131は、未実行のユーザイベントが存在する場合には(ステップS107肯定)、かかる未実行のユーザイベントを実行装置10に実行させるユーザイベントとして特定する。ここで、イベント特定部131は、未実行のユーザイベントが複数存在する場合には、任意のユーザイベントを実行装置10に実行させるユーザイベントとして特定する。
続いて、イベント実行制御部132は、イベント特定部131によって特定されたユーザイベントを実行装置10の実行部13に実行させる(ステップS108)。また、ログ取得部133は、実行部13によってユーザイベントが実行された後に、実行装置10からログを取得して遷移モデル記憶部110に格納する(ステップS108)。このとき、ログ取得部133は、遷移モデル記憶部110に記憶されている各レコードのうち、実行部13によってユーザイベントが実行される前の画面状態が「ノード」に格納されており、かつ、実行部13によって実行されたユーザイベントが「エッジ」に格納されているレコードの「ログ情報」に、実行装置10から取得したログを格納する。
そして、解析装置100は、現画面の画面状態において未実行のユーザイベントが存在する限り(ステップS107肯定)、ステップS101〜S108における処理手順を繰り返し行う。
一方、イベント特定部131は、現画面の画面状態において未実行のユーザイベントが存在しない場合には(ステップS107否定)、所定の変数「i」に「1」を設定する(ステップS109)。
続いて、イベント特定部131は、遷移モデル記憶部110に記憶されている遷移モデルを参照することにより、現画面において実行可能なユーザイベント毎に、かかるユーザイベントが実行されることで遷移可能となる画面状態であり、かつ、現画面の画面状態から遷移可能な深さ「i」(ここの例では、i=1)までの画面状態において未実行のユーザイベントの総数(スコア)を算出する(ステップS110)。言い換えれば、イベント特定部131は、現画面において実行可能なユーザイベント毎に、現画面の画面状態からの画面遷移数が「i」までの画面状態において未実行のユーザイベントの総数(スコア)を算出する。
続いて、イベント特定部131は、ステップS110において算出したスコアが「0」でないユーザイベントが存在するか否かを判定する(ステップS111)。
そして、イベント特定部131は、スコアが「0」でないユーザイベントが存在する場合には(ステップS111肯定)、スコアが最大であるユーザイベントを実行装置10に実行させるユーザイベントとして特定する。
続いて、イベント実行制御部132は、実行装置10の実行部13に対して、イベント特定部131によって特定されたユーザイベントを実行させる(ステップS112)。
一方、イベント特定部131は、スコアが「0」でないユーザイベントが存在しない場合には(ステップS111否定)、現画面の画面状態から遷移可能な画面状態までのホップ数(画面の遷移数)の最大値「Dmax」を求め、求めた「Dmax」が「i」よりも大きいか否かを判定する(ステップS113)。
そして、イベント特定部131は、「Dmax」が「i」よりも大きい場合には(ステップS113肯定)、「i」をインクリメントし(ステップS114)、ステップS110の処理に戻る。
一方、イベント特定部131は、「Dmax」が「i」よりも大きくない場合には(ステップS113否定)、現画面の画面状態と、解析対象アプリケーション11の実行開始時における画面状態とが同一であるか否かを判定する(ステップS115)。
そして、イベント特定部131は、現画面の画面状態と開始時の画面状態とが同一である場合には(ステップS115肯定)、解析処理を終了する。一方、現画面の画面状態と開始時の画面状態とが同一でない場合には(ステップS115否定)、イベント実行制御部132は、現画面から1個前の画面に戻るユーザイベントを実行部13に実行させる(ステップS116)。ここでいう「1個前の画面に戻るユーザイベント」とは、解析対象アプリケーション11によって提供されるユーザイベントではなく、例えば、OS等によって提供されるユーザイベントや、解析対象アプリケーション11を動作させるアプリケーション(ブラウザ等)によって提供されるユーザイベントに該当する。
なお、ログ取得部133は、1個前の画面に戻るユーザイベントが実行された後にも、実行装置10からログを取得して遷移モデル記憶部110に格納してもよい。この場合、ログ取得部133は、遷移モデル記憶部110のエッジに「BACK」といったユーザイベントを格納するとともに、遷移モデル記憶部110のログ情報に実行装置10から取得したログを格納する。
また、上記図7の説明では、現画面の画面状態と開始時の画面状態とが同一でない場合に、現画面から1個前の画面に戻るユーザイベントを実行部13に実行させた。しかし、解析装置100は、現画面の画面状態と開始時の画面状態とが同一でない場合であっても、1個前の画面に戻るユーザイベントを実行させることなく、処理を終了してもよい。
[具体例]
次に、図8A〜図8Cを用いて、解析装置100による解析処理の具体例について説明する。図8A〜図8Cは、第1の実施形態に係る解析処理の具体例を説明するための図である。以下では、図7に示したステップ番号と対応付けながら解析処理の具体例について説明する。また、図8A〜図8Cにおいて、円形は、画面状態を示すノードであり、点線矢印は、未実行のユーザイベントを示すエッジであり、実線矢印は、実行済みのユーザイベントを示すエッジである。
なお、以下の説明において、初期状態は、実行装置10において解析対象アプリケーション11が起動されて、解析対象アプリケーション11により初期画面が表示されている状態であるものとする。また、解析装置100による解析処理の開始時には、遷移モデル記憶部110には各種情報が記憶されていないものとする。
まず、構造情報取得部121は、構造情報提供部12から現画面(初期画面)の構造情報を取得する(ステップS101)。そして、遷移モデル更新部122は、構造情報取得部121によって取得された構造情報に基づいて、現画面の画面状態情報を生成する(ステップS102)。
ここでは、遷移モデル記憶部110には各種情報が記憶されていないので、遷移モデル更新部122は、生成した画面状態情報が遷移モデル記憶部110に記憶されていないと判定する。すなわち、遷移モデル更新部122は、現画面の画面状態(画面状態v0とする)が未知の画面状態であると判定し(ステップS103肯定)、遷移モデル記憶部110の「ノード」に、現画面の画面状態v0を識別するための情報(「v0」とする)を格納するとともに、遷移モデル記憶部110の「画面状態情報」に、現画面の画面状態情報を格納する(ステップS104)。また、遷移モデル更新部122は、現画面の画面状態情報に基づいて、現画面の画面状態v0において実行可能な全てのユーザイベントを遷移モデル記憶部110の「エッジ」に格納する(ステップS104)。
これにより、遷移モデル記憶部110に記憶されている遷移モデルをグラフで表すと、図8A(a)に示す状態となる。図8A(a)は、画面状態v0において未実行のユーザイベントe11及びe12が存在していることを示している。すなわち、遷移モデル記憶部110には、ノード「v0」と、エッジ「e11」と、画面状態v0の画面状態情報とが対応付けて記憶されているとともに、ノード「v0」と、エッジ「e12」と、画面状態v0の画面状態情報とが対応付けて記憶されていることとなる。
続いて、イベント特定部131は、図8A(a)の遷移モデルを参照することにより、未実行のユーザイベントe11及びe12のいずれか一方を実行装置10に実行させるユーザイベントとして特定する。ここでは、イベント特定部131は、ユーザイベントe11を特定したものとする。したがって、イベント実行制御部132は、ユーザイベントe11を実行部13に実行させる(ステップS108)。また、ログ取得部133は、実行部13によりユーザイベントe11が実行された後に、実行装置10からログを取得し、取得したログを、ノード「v0」及びエッジ「e11」に対応する遷移モデル記憶部110のログ情報に格納する(ステップS108)。
その後に、端末制御部130は、構造情報取得部121に対して、構造情報を取得するように依頼する。これにより、構造情報取得部121は、構造情報提供部12から現画面の構造情報を取得する(ステップS101)。そして、遷移モデル更新部122は、取得された構造情報に基づいて、現画面の画面状態情報を生成する(ステップS102)。
ここでは、現画面の画面状態は、ユーザイベントe11を実行する前の画面状態v0と異なるものとする。すなわち、遷移モデル更新部122は、現画面の画面状態(画面状態v1とする)が未知の画面状態であると判定し(ステップS103肯定)、遷移モデル記憶部110の「ノード」に「v1」を格納し、「画面状態情報」に現画面の画面状態情報を格納し、「エッジ」に画面状態v1において実行可能なユーザイベントe13、e14及びe15を格納する(ステップS104)。
また、遷移モデル更新部122は、前回実行したユーザイベントe11が存在するので(ステップS105肯定)、前回の画面状態v0から現画面の画面状態v1に対するエッジ「e11」を追加する(ステップS106)。具体的には、遷移モデル更新部122は、ノード「v0」及びエッジ「e11」に対応する遷移モデル記憶部110の「遷移先ノード」に「v1」を格納する。
これにより、遷移モデル記憶部110に記憶されている遷移モデルをグラフで表すと、図8A(b)の状態となる。図8A(b)は、画面状態v0においてユーザイベントe11が実行済みであることを示している。また、図8A(b)は、ユーザイベントe11が実行されることで、画面状態v0から画面状態v1に遷移することを示している。また、図8A(b)は、画面状態v1において未実行のユーザイベントe13、e14及びe15が存在していることを示している。
続いて、イベント特定部131は、図8A(b)の遷移モデルを参照することにより、実行装置10に実行させるユーザイベントを特定する。ここでは、イベント特定部131は、未実行のユーザイベントe13、e14及びe15のうち、ユーザイベントe13を特定したものとする。したがって、イベント実行制御部132は、ユーザイベントe13を実行部13に実行させる(ステップS108)。なお、以下では、ログ取得部133によるログ取得処理については説明を省略するが、ログ取得部133は、実行部13によりユーザイベントが実行されるたびに、実行装置10からログを取得して遷移モデル記憶部110のログ情報に格納する(ステップS108)。
その後に、構造情報取得部121は、構造情報提供部12から現画面の構造情報を取得し(ステップS101)、遷移モデル更新部122は、取得された構造情報に基づいて、現画面の画面状態情報を生成する(ステップS102)。
ここでは、現画面の画面状態は、ユーザイベントe13を実行する前の画面状態v1と同一であるものとする。すなわち、遷移モデル更新部122は、現画面の画面状態v1が未知の画面状態でないと判定するので(ステップS103否定)、遷移モデル記憶部110の「ノード」に「v1」を追加しない。
ただし、遷移モデル更新部122は、前回実行したユーザイベントe13が存在するので(ステップS105肯定)、前回の画面状態v1から現画面の画面状態v1に対するエッジ「e13」を追加する(ステップS106)。具体的には、遷移モデル更新部122は、ノード「v1」及びエッジ「e13」に対応する遷移モデル記憶部110の「遷移先ノード」に「v1」を格納する。
続いて、イベント特定部131は、現画面の画面状態v1において未実行のユーザイベントe14及びe15のうち、ユーザイベントe14を実行装置10に実行させるユーザイベントとして特定するものとする。したがって、イベント実行制御部132は、ユーザイベントe14を実行部13に実行させる(ステップS108)。
その後に、構造情報取得部121は、構造情報提供部12から現画面の構造情報を取得し(ステップS101)、遷移モデル更新部122は、取得された構造情報に基づいて、現画面の画面状態情報を生成する(ステップS102)。
ここでは、現画面の画面状態は、ユーザイベントe14を実行する前の画面状態v1と異なるものとする。すなわち、遷移モデル更新部122は、現画面の画面状態(画面状態v2とする)が未知の画面状態であると判定し(ステップS103肯定)、遷移モデル記憶部110の「ノード」に「v2」を格納し、「画面状態情報」に現画面の画面状態情報を格納し、さらに、「エッジ」に、画面状態v2において実行可能なユーザイベントe16、e17及びe18を格納する(ステップS104)。
また、遷移モデル更新部122は、前回実行したユーザイベントe14が存在するので(ステップS105肯定)、ノード「v1」及びエッジ「e14」に対応する遷移モデル記憶部110の「遷移先ノード」に「v2」を格納する(ステップS106)。これにより、遷移モデル記憶部110に記憶されている遷移モデルをグラフで表すと、図8A(c)の状態となる。
上述してきた処理を繰り返し行うことにより、イベント実行制御部132は、図8B(d)に示すように、画面状態v2においてユーザイベントe16を実行させたものとする。これにより、画面状態v2から画面状態v1に遷移する。さらに、イベント実行制御部132は、画面状態v1において未実行のユーザイベントe15を実行させたものとする。これにより、画面状態v1から画面状態v3に遷移したものとする。その後に、イベント実行制御部132は、画面状態v3において未実行のユーザイベントe19を実行させたものとする。これにより、画面状態v3から画面状態v1に遷移したものとする。
このような順に各ユーザイベントが実行された場合、現画面の画面状態v1において未実行のユーザイベントは存在しないこととなる(ステップS107否定)。したがって、イベント特定部131は、変数「i」に「1」を設定し(ステップS109)、現画面の画面状態v1において実行可能なユーザイベントe14及びe15のそれぞれについて、かかるユーザイベントが実行されることで遷移可能な画面状態であり、かつ、現画面の画面状態v1からの画面遷移数が「1」までの画面状態において未実行のユーザイベントの総数(スコア)を算出する(ステップS110)。
ここでは、図8B(d)に示すように、画面状態v2ではユーザイベントe17及びe18が未実行であり、画面状態v3ではユーザイベントe20、e21及びe22が未実行である。したがって、イベント特定部131は、ユーザイベントe14のスコアとして「2」(画面状態v2における未実行のユーザイベントの総数)を算出し、ユーザイベントe15のスコアとして「3」(画面状態v3における未実行のユーザイベントの総数)を算出することとなる。
なお、ここの例において、イベント特定部131は、現画面の画面状態へのユーザイベント(図8B(e)の例では、ユーザイベントe13)については、スコアを算出しない。これは、各ユーザイベントの遷移先の画面状態からの探索において現画面の画面状態を経由することにより、各ユーザイベントのスコアが類似してしまうことを防止するためである。
続いて、イベント特定部131は、スコアが「0」でないユーザイベントが存在するので(ステップS111肯定)、ユーザイベントe14及びe15のうち、スコアが最大であるユーザイベントe15を特定する。そして、イベント実行制御部132は、イベント特定部131によって特定されたユーザイベントe15を実行部13に実行させる(ステップS112)。
これにより、画面状態v1から画面状態v3に遷移することとなる。そして、現画面の画面状態v3において未実行のユーザイベントe20〜e22が存在するので(ステップS107肯定)、イベント特定部131がいずれかのユーザイベントを特定し、イベント実行制御部132が、イベント特定部131によって特定されたユーザイベントを実行部13に実行させることとなる(ステップS112)。ここでは、イベント実行制御部132が、ユーザイベントe20を実行させたものとする。
これにより、図8B(e)に示すように、画面状態v3から画面状態v4に遷移するものとする。ここで、画面状態v4においては、未実行のユーザイベントが存在せず(ステップS107否定)、かつ、画面状態v4から遷移可能な画面状態も存在しないものとする(ステップS111否定、かつ、ステップS113否定)。
この場合、現画面の画面状態v4と開始時の画面状態v0とが同一でないので(ステップS115否定)、イベント実行制御部132は、現画面から1個前の画面に戻るユーザイベントを実行部13に実行させる(ステップS116)。なお、図8B(e)において、画面状態v4から画面状態v3への一点鎖線矢印は、画面を戻るユーザイベントを示すものとする。
上述してきた処理を繰り返し行うことにより、イベント実行制御部132は、図8C(f)に示すように、画面状態v3においてユーザイベントe21を実行させ、遷移先の画面状態v5においてユーザイベントe23を実行させたものとする。これにより、現画面の画面状態は、画面状態v3となる。その後に、イベント実行制御部132は、画面状態v3においてユーザイベントe22を実行させ、遷移先の画面状態v6においてユーザイベントe29を実行させたものとする。これにより、現画面の画面状態は、画面状態v1となる。
そして、ステップS109〜S112における処理により、イベント実行制御部132は、図8C(g)に示すように、画面状態v1から画面状態v2に遷移させた後に、画面状態v2においてユーザイベントe17を実行させ、遷移先の画面状態v7においてユーザイベントe30を実行させたものとする。これにより、現画面の画面状態は、画面状態v2となる。その後に、イベント実行制御部132は、画面状態v2においてユーザイベントe18を実行させ、遷移先の画面状態v8においてユーザイベントe32を実行させたものとする。これにより、現画面の画面状態は、画面状態v1となる。
このような順に各ユーザイベントが実行された場合、現画面の画面状態v1において未実行のユーザイベントは存在しないこととなる(ステップS107否定)。したがって、イベント特定部131は、変数「i」に「1」を設定し(ステップS109)、現画面の画面状態v1において実行可能なユーザイベントe14及びe15のそれぞれについて、かかるユーザイベントが実行されることで遷移可能な画面状態であり、かつ、現画面の画面状態v1からの画面遷移数が「1」までの画面状態において未実行のユーザイベントの総数(スコア)を算出する(ステップS110)。
ここでは、図8C(g)に示すように、画面状態v2及びv3において未実行のユーザイベントが存在しない。したがって、イベント特定部131は、ユーザイベントe14及びe15のスコアとして、「0」を算出することとなる。
続いて、イベント特定部131は、スコアが「0」でないユーザイベントが存在しないので(ステップS111否定)、変数「i」に「1」を加算することで、「i」=「2」にする(ステップS114)。
そして、イベント特定部131は、現画面の画面状態v1において実行可能なユーザイベントe14及びe15のそれぞれについて、かかるユーザイベントが実行されることで遷移可能な画面状態であり、かつ、現画面の画面状態v1からの画面遷移数が「2」までの画面状態において未実行のユーザイベントの総数(スコア)を算出する(ステップS110)。ここでは、イベント特定部131は、ユーザイベントe14のスコアとして「3」(画面状態v7における未実行のユーザイベントの総数「1」と、画面状態v8における未実行のユーザイベントの総数「2」との和)を算出する。また、イベント特定部131は、ユーザイベントe15のスコアとして「5」(画面状態v5における未実行のユーザイベントの総数「3」と、画面状態v6における未実行のユーザイベントの総数「2」との和)を算出する。
続いて、イベント特定部131は、スコアが「0」でないユーザイベントが存在するので(ステップS111肯定)、スコアが最大であるユーザイベントe15を実行装置10に実行させるユーザイベントとして特定する。これにより、イベント実行制御部132は、ユーザイベントe15を実行部13に実行させる(ステップS112)。この結果、現画面の画面状態は、画面状態v3となる。
そして、図8C(g)に示すように、画面状態v3においても未実行のユーザイベントが存在しないので(ステップS107否定)、イベント特定部131は、変数「i」に「1」を設定し(ステップS109)、現画面の画面状態v3において実行可能なユーザイベントe20〜e22のそれぞれについてスコアを算出する(ステップS110)。この結果、イベント特定部131は、スコアが最大であるユーザイベントe21を特定し、イベント実行制御部132は、ユーザイベントe21を実行させることとなる。この後に、イベント特定部131は、画面状態v5において未実行のユーザイベントe24〜e26のいずれかを特定し、イベント実行制御部132は、イベント特定部131によって特定されたユーザイベントを実行部13に実行させることとなる。
このようにして、解析装置100は、画面状態をノードとするグラフ(遷移モデル)を生成しながら、かかるグラフ(遷移モデル)を巡回するように、未実行のユーザイベントを実行装置10に実行させる。
[第1の実施形態の効果]
上述してきたように、第1の実施形態に係る解析システム1は、実行装置10と、解析装置100とを含む。実行装置10は、構造情報提供部12と、実行部13とを有する。そして、実行部13は、ユーザ操作であるユーザイベントに応じて画面が遷移するアプリケーションを実行する。また、構造情報提供部12は、アプリケーションにより表示される画面毎に、かかる画面の構造を示す構造情報を解析装置100に提供する。解析装置100は、遷移モデル記憶部110と、構造情報取得部121と、遷移モデル更新部122と、イベント実行制御部132と、ログ取得部133とを有する。そして、遷移モデル記憶部110は、アプリケーションにおける画面遷移を示す遷移モデルを記憶する。構造情報取得部121は、実行部13によりユーザイベントが実行されるたびに、アプリケーションにより現に表示される現画面に関する構造情報を構造情報提供部12から取得する。遷移モデル更新部122は、構造情報取得部121により取得された構造情報に基づいて、構造情報が取得済みである既知の画面と現画面との類似性を判定し、既知の画面と類似していない現画面が追加されるように遷移モデルを更新する。イベント実行制御部132は、遷移モデルのうち現画面に対応する画面において未実行のユーザイベントを実行部13に実行させる。ログ取得部133は、実行部13によりユーザイベントが実行されるたびに、実行装置10からログ情報を取得する。
すなわち、第1の実施形態に係る解析システム1は、類似する各画面を同一の画面状態として扱った上で画面の遷移モデルを生成しながら、かかる遷移モデルを参照して未実行のユーザイベントを実行装置10に実行させる。これにより、第1の実施形態に係る解析システム1は、実質的に同一である複数の画面において同じようなユーザイベントが実行されることを防止できるので、効率的に解析対象アプリケーション11を実行することができる。さらに、解析システム1は、未実行のユーザイベントを順次実行させるので、解析対象アプリケーション11を網羅的に実行することができる。このようなことから、第1の実施形態に係る解析システム1は、GUI操作を伴うアプリケーションの動的解析においてコードカバレッジを効率的に高めることができる。
例えば、第1の実施形態に係る解析システム1を用いた場合、高いコードカバレッジを実現できるので、解析装置100を利用する解析者は、遷移モデル記憶部110に記憶されているログを参照することにより、解析対象アプリケーション11がマルウェアであるか否かを高精度に解析することができる。
また、第1の実施形態に係る解析システム1において、構造情報提供部12は、画面のレイアウトに関するコンポーネント、及び、画面においてユーザイベントに対応するコンポーネントをノードとする木構造により表される構造情報を提供する。また、遷移モデル更新部122は、構造情報を表す木構造のうち、根ノードから、ユーザイベントに対応するコンポーネントに対応するノードまでの経路に含まれるノード群が同一であるか否かに基づいて、既知の画面と現画面との類似性を判定する。
これにより、第1の実施形態に係る解析システム1は、各画面における類似性の判定を高精度に行うことができるので、実質的に異なる画面を同一の画面として扱うことを防止できる。この結果、解析システム1は、ユーザイベントの実行漏れを防止することができる。また、解析システム1は、実質的に同一である画面を遷移モデルに重複登録することを防止できるので、過剰なユーザイベントの実行を減らすことができる。
また、第1の実施形態に係る解析システム1において、解析装置100が有するイベント特定部131は、現画面に対応する画面において未実行のユーザイベントが存在しない場合に、遷移モデルに基づいて、現画面において実行可能なユーザイベント毎に、当該ユーザイベントが実行されることで遷移可能となる画面であり、かつ、現画面からの画面遷移数が最小である画面において未実行のユーザイベントの総数を算出し、算出した総数が最大であるユーザイベントを特定する。また、イベント実行制御部132は、イベント特定部131により特定されたユーザイベントを実行部13に実行させる。
これにより、第1の実施形態に係る解析システム1は、現画面からの画面遷移数が少ない画面であり、かつ、未実行のユーザイベントが多い画面を優先して、未実行のユーザイベントを実行させるので、遷移モデルを効率的に巡回することができる。
また、第1の実施形態に係る解析システム1において、イベント実行制御部132は、イベント特定部131によりユーザイベントが特定されない場合に、現画面から1個前の画面に戻るユーザイベントを実行部13に実行させる。
これにより、第1の実施形態に係る解析システム1は、現画面が画面遷移のない画面状態(完了画面等)になった場合であっても、未実行のユーザイベントを探索することが可能となるので、GUI操作を伴うアプリケーションの動的解析においてコードカバレッジを効率的に高めることができる。
(第2の実施形態)
上述した解析システム1は、上記実施形態以外にも種々の異なる形態にて実施されてよい。そこで、第2の実施形態では、上記の解析システム1の他の実施形態について説明する。
[システム構成]
上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
例えば、図1に示した例において、構造情報取得部121と遷移モデル更新部122とは統合されてもよい。また、例えば、イベント特定部131とイベント実行制御部132とは統合されてもよい。
[プログラム]
また、上記実施形態において説明した解析装置100が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、解析装置100が実行する処理をコンピュータが実行可能な言語で記述した解析プログラムを作成することもできる。この場合、コンピュータが解析プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる解析プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された解析プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、一例として、図1に示した解析装置100と同様の機能を実現する解析プログラムを実行するコンピュータの一例を説明する。
図9は、解析プログラムを実行するコンピュータ1000を示す図である。図9に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図9に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図9に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、図9に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。シリアルポートインタフェース1050は、図9に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、図9に例示するように、例えばディスプレイ1061に接続される。
ここで、図9に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記の解析プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。例えば、図1に例示した構造情報取得部121と同様の情報処理を実行する構造情報取得手順と、遷移モデル更新部122と同様の情報処理を実行する遷移モデル更新手順と、イベント特定部131と同様の情報処理を実行するイベント特定手順と、イベント実行制御部132と同様の情報処理を実行するイベント実行制御手順と、ログ取得部133と同様の情報処理を実行するログ取得手順とが記述されたプログラムモジュール1093が、ハードディスクドライブ1031に記憶される。
また、上記実施形態で説明した遷移モデル記憶部110が保持する各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、構造情報取得手順、遷移モデル更新手順、イベント特定手順、イベント実行制御手順、ログ取得手順を実行する。
なお、解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。