(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数の第１コンポーネントを記載したコードであって複数のリクエストそれぞれの受信に応じて前記複数の第１コンポーネントの少なくとも一部が実行される第１コードと、前記第１コードから変更されたコードであって複数の第２コンポーネントを記載した第２コードとを比較し、前記複数の第２コンポーネントのうち前記複数の第１コンポーネントの何れとも異なる差分コンポーネントを抽出し、
前記複数の第２コンポーネントが配備された実行装置に対して前記複数のリクエストを送信して、前記差分コンポーネントの実行状況を示す第１ログ情報を取得し、前記第１ログ情報に基づいて、前記複数のリクエストのうち前記差分コンポーネントの実行に関連する関連リクエストを特定し、
特定した前記関連リクエストを前記実行装置に対して送信して、前記複数の第２コンポーネントの実行状況を示す第２ログ情報を取得し、前記第２ログ情報に基づいて、前記複数の第２コンポーネントのうち前記関連リクエストの受信に応じて実行される第２コンポーネントに関するパス情報を生成する、
処理を実行させる分析プログラム。
【請求項２】
前記第１ログ情報の取得では、実行状況を監視する対象を前記差分コンポーネントに限定し、前記実行装置に対して前記複数のリクエストを送信する、
請求項１記載の分析プログラム。
【請求項３】
前記第２ログ情報の取得では、実行状況を監視する対象を前記複数の第２コンポーネントの全てとし、前記実行装置に対して前記関連リクエストのみを送信する、
請求項１記載の分析プログラム。
【請求項４】
前記パス情報と、前記複数のリクエストと前記複数の第１コンポーネントとの間の関係を示す第１パス情報とに基づき、前記複数のリクエストと前記複数の第２コンポーネントとの間の関係を示す第２パス情報を生成する、
請求項１記載の分析プログラム。
【請求項５】
複数の第１コンポーネントを記載したコードであって複数のリクエストそれぞれの受信に応じて前記複数の第１コンポーネントの少なくとも一部が実行される第１コードと、前記第１コードから変更されたコードであって複数の第２コンポーネントを記載した第２コードを記憶する記憶部と、
前記第１コードと前記第２コードとを比較し、前記複数の第２コンポーネントのうち前記複数の第１コンポーネントの何れとも異なる差分コンポーネントを抽出し、前記複数の第２コンポーネントが配備された実行装置に対して前記複数のリクエストを送信して、前記差分コンポーネントの実行状況を示す第１ログ情報を取得し、前記第１ログ情報に基づいて、前記複数のリクエストのうち前記差分コンポーネントの実行に関連する関連リクエストを特定し、特定した前記関連リクエストを前記実行装置に対して送信して、前記複数の第２コンポーネントの実行状況を示す第２ログ情報を取得し、前記第２ログ情報に基づいて、前記複数の第２コンポーネントのうち前記関連リクエストの受信に応じて実行される第２コンポーネントに関するパス情報を生成する分析部と、
を有する分析装置。
【請求項６】
コンピュータが、
複数の第１コンポーネントを記載したコードであって複数のリクエストそれぞれの受信に応じて前記複数の第１コンポーネントの少なくとも一部が実行される第１コードと、前記第１コードから変更されたコードであって複数の第２コンポーネントを記載した第２コードとを比較し、前記複数の第２コンポーネントのうち前記複数の第１コンポーネントの何れとも異なる差分コンポーネントを抽出し、
前記複数の第２コンポーネントが配備された実行装置に対して前記複数のリクエストを送信して、前記差分コンポーネントの実行状況を示す第１ログ情報を取得し、前記第１ログ情報に基づいて、前記複数のリクエストのうち前記差分コンポーネントの実行に関連する関連リクエストを特定し、
特定した前記関連リクエストを前記実行装置に対して送信して、前記複数の第２コンポーネントの実行状況を示す第２ログ情報を取得し、前記第２ログ情報に基づいて、前記複数の第２コンポーネントのうち前記関連リクエストの受信に応じて実行される第２コンポーネントに関するパス情報を生成する、
分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は分析プログラム、分析装置および分析方法に関する。
【背景技術】
【０００２】
アプリケーションやネットワークサービスなどは、運用時にシステムのスローダウンなどの不具合が発生することがある。不具合が発生したとき、システムの管理者は、遅延個所や異常個所を発見するための分析を行う。例えば、遅延個所の分析では、対象のアプリケーションやネットワークサービスの処理を実行するプログラムに多数の監視箇所を設け、監視箇所において大量のログを採取する。管理者は、監視箇所で採取したログに付されたタイムスタンプによって、監視箇所間の処理に要した時間を検出し、遅延個所を特定する。同様に、採取したログに基づき、例えば、想定外の実行状況にある箇所を異常個所として特定することができる。しかしながら、遅延個所などの絞り込みや特定にあたっては、多数の監視箇所で大量のログを採取することが好ましい。このため、運用状況にあるシステムに多大な実行オーバーヘッドとネットワーク負荷が発生するおそれがある。
【０００３】
例えば、運用前にプログラムを分析し、アプリケーションがリクエストを受け付けたときに、アプリケーションが利用するコンポーネントを示すパス情報を生成する分析装置がある。ここで、パスは、リクエストに応じたアプリケーションが利用するコンポーネントの集合を指す。事前分析では、分析装置は、多数の監視箇所で詳細なログを採取する設定を行い、システムなどで想定される全リクエストパターンを送信して詳細なログ情報を取得する。分析装置は、取得した詳細なログ情報に基づいてパス情報を生成し、アプリケーションの運用時の不具合箇所の検出に利用する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２４１４２６号公報
【特許文献２】特開２０１３−９２９７７号公報
【特許文献３】特開２０１４−１３２４２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、システムテストなどで想定される全てのリクエストパターンを用いてプログラムを実行し、その詳細なログ情報を採取するには多大な時間を要する。
分析の対象のプログラムには、既存のプログラムの一部分を変更しただけのものがある。しかしながら、一部の変更であっても変更がパスに及ぼす影響をソースコードの分析といった静的な分析から検出することは容易ではない。コンポーネントの呼び出しが動的に決定されるプログラムでは、実際にプログラムを実行しなければコンポーネントの呼び出し関係を検出することができない。変更されたコンポーネントが、既存のコンポーネントを利用する場合もあるため、プログラムの分析にあたっては、想定され得る全リクエストパターンを用いてプログラムを実行し、詳細なログを採取する。よって、既存のプログラムからの変更量がわずかなプログラムであっても、分析の処理時間を短縮することが容易ではなかった。
【０００６】
１つの側面では、本発明は、プログラムの分析の処理時間を短縮できる分析プログラム、分析装置および分析方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの態様では、コンピュータに以下の処理を実行させる分析プログラムが提供される。複数の第１コンポーネントを記載したコードであって複数のリクエストそれぞれの受信に応じて複数の第１コンポーネントの少なくとも一部が実行される第１コードを取得する。第１コードから変更されたコードであって複数の第２コンポーネントを記載した第２コードを取得する。第１コードと第２コードとを比較し、複数の第２コンポーネントのうち複数の第１コンポーネントの何れとも異なる差分コンポーネントを抽出する。複数の第２コンポーネントが配備された実行装置に対して複数のリクエストを送信して、差分コンポーネントの実行状況を示す第１ログ情報を取得する。第１ログ情報に基づいて、複数のリクエストのうち差分コンポーネントの実行に関連する関連リクエストを特定する。特定した関連リクエストを実行装置に対して送信して、複数の第２コンポーネントの実行状況を示す第２ログ情報を取得する。第２ログ情報に基づいて、複数の第２コンポーネントのうち関連リクエストの受信に応じて実行される第２コンポーネントに関するパス情報を生成する。
【０００８】
また、１つの態様では、記憶部と分析部とを有する分析装置が提供される。
また、１つの態様では、コンピュータが実行する分析方法が提供される。
【発明の効果】
【０００９】
１つの側面では、プログラムの分析の処理時間を短縮できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態の分析装置の例を示す図である。
【図２】第２の実施の形態の分析装置のハードウェア例を示すブロック図である。
【図３】第２の実施の形態の分析装置の機能例を示すブロック図である。
【図４】旧ソースコードと新ソースコードの例を示す図である。
【図５】旧コンポーネント定義情報および新コンポーネント定義情報の例を示す図である。
【図６】第１ログ情報と関連機能情報の例を示す図である。
【図７】変更・削除コンポーネントの関連機能の特定処理の例を示す図である。
【図８】第２ログ情報と差分パス情報の例を示す図である。
【図９】新パス情報の設定処理の例を示す図である。
【図１０】事前分析処理の手順例を示すフローチャートである。
【図１１】関連機能特定処理の手順例を示すフローチャートである。
【図１２】コンポーネントの呼び出し関係表の表示画面の例を示す図である。
【図１３】コンポーネントの呼び出し関係図の表示画面の例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。図１は、第１の実施の形態の分析装置の例を示す図である。
【００１２】
第１の実施の形態の分析装置１０は、ユーザが操作するクライアントコンピュータでもよいし、クライアントコンピュータからアクセスされるサーバコンピュータでもよい。分析装置１０は、プログラムの分析に用いられる。当該プログラムの分析は、例えば、当該プログラムの運用開始前の事前分析として行われる。分析は、第１コード１３と、第１コード１３から変更された第２コード１４とを用いて行う。
【００１３】
分析装置１０は、記憶部１１および分析部１２を有し、実行装置２０に接続する。記憶部１１は、例えば、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置、または、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性の記憶装置である。分析部１２は、例えば、ＣＰＵ（Central Processing Unit）などのプロセッサである。ただし、分析部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭなどのメモリに記憶されたプログラムを実行する。プログラムには、分析プログラムが含まれる。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。実行装置２０は、分析装置１０と同様に、記憶装置とプロセッサを有し、コンポーネントを記載したコードが記憶装置に格納される。実行装置２０は、リクエストを受信し、受信したリクエストに対応するコンポーネントを実行する。
【００１４】
記憶部１１は、外部装置より取得した第１コード１３および第２コード１４と、第１ログ情報１５、第２ログ情報１６およびパス情報１７と、を記憶する。
第１コード１３は、アプリケーションのソースコードやオブジェクトコードを含む。第１コード１３は、複数の第１コンポーネントを記載したコードである。第１コード１３は、例えば、オブジェクトコードとして実行装置２０に格納することも可能である。その場合、実行装置２０は、複数のリクエストそれぞれの受信に応じて複数の第１コンポーネントの少なくとも一部を実行することになる。図１の例では、第１コンポーネントには、ｐ１，ｐ２，ｐ３，ｐ４が含まれる。第２コード１４は、第１コード１３から変更されたコードであって、複数の第２コンポーネントを記載したコードである。第２コード１４は、例えば、オブジェクトコードとして実行装置２０に格納することも可能である。その場合、実行装置２０は、リクエストそれぞれの受信に応じて複数の第２コンポーネントの少なくとも一部を実行することになる。図１の例では、第２コード１４に記載される第２コンポーネントには、ｐ１，ｐ２，ｐ３，ｐ４，ｐ５が含まれる。以下では、実行装置２０をリクエストの受信に応じてコンポーネントを実行する状態にすることを、実行装置２０にコンポーネントを配備するという。なお、コンポーネントは、例えば、メソッドや関数の呼び出し単位や利用者指定のログ出力箇所単位、あるいはこれらの単位を組み合わせたものである。以下において、複数の第２コンポーネントのうち、複数の第１コンポーネントの何れとも異なる第２コンポーネントを差分コンポーネント１４ａと呼ぶ。
【００１５】
第１ログ情報１５は、複数の第２コンポーネントの一部である差分コンポーネント１４ａの実行状況を示す情報である。第２ログ情報１６は、差分コンポーネント１４ａを含む複数の第２コンポーネントそれぞれの実行状況を示す情報である。パス情報１７は、差分コンポーネント１４ａの実行に関連する関連リクエストに応じて実行される第２コンポーネントを示す情報である。
【００１６】
分析部１２は、記憶部１１から第１コード１３および第２コード１４を読み出し、第１コード１３と第２コード１４を比較して差分コンポーネント１４ａを抽出する。図１の例では、分析部１２は、差分コンポーネント１４ａとしてコンポーネントｐ５を抽出する。
【００１７】
分析部１２は、複数の第２コンポーネントが配備された実行装置２０に対し複数のリクエストを送信して、差分コンポーネント１４ａの実行状況を示す第１ログ情報１５を取得する。このとき実行装置２０に送信するリクエストは、例えば、少なくとも一部の第２コンポーネントを呼び出す可能性がある全てのリクエストである。分析部１２は、実行装置２０に対し、差分コンポーネント１４ａについてのみログを出力するよう指示してもよい。分析部１２は、第１ログ情報１５に基づき、差分コンポーネント１４ａの実行に関連する関連リクエストを特定する。図１の例では、分析部１２は、実行装置２０に対して、実行状況の監視対象をコンポーネントｐ５のみと指示し、全リクエストＲ１，Ｒ２，Ｒ３，Ｒ４，Ｒ５を順次送信してログを採取する。第１ログ情報１５は、採取したログを表形式で表したものである。第１ログ情報１５において、「−」は実行装置２０がログを採取していないことを表す。空欄はリクエスト実行時にコンポーネントが実行されなかったことを表し、「１」はコンポーネントが実行されたことを表す。第１ログ情報１５は、コンポーネントｐ１，ｐ２，ｐ３，ｐ４についてのログが採取されていないことを示す。また、第１ログ情報１５は、分析部１２がリクエストＲ２とリクエストＲ４を送信したときに、コンポーネントｐ５が実行されたことを示す。分析部１２は、第１ログ情報１５に基づき、リクエストＲ２とリクエストＲ４を、差分コンポーネント１４ａに関連する関連リクエストとして特定する。
【００１８】
分析部１２は、関連リクエストを実行装置２０に送信し、関連リクエストに応じた差分コンポーネント１４ａを含む複数の第２コンポーネントの実行状況を示す第２ログ情報１６を取得する。このとき実行装置２０に送信するリクエストは、関連リクエストに限定され、関連リクエスト以外のリクエストを含まなくてよい。分析部１２は、実行装置２０に対し、差分コンポーネント１４ａを含む複数の第２コンポーネント、例えば、全第２コンポーネントについてログを出力するように指示してもよい。分析部１２は、第２ログ情報１６に基づき、複数の第２コンポーネントのうち、関連リクエストの受信に応じて実行される第２コンポーネントを示すパス情報１７を生成する。図１の例では、実行装置２０に対しログを採取する監視対象をコンポーネントｐ１，ｐ２，ｐ３，ｐ４，ｐ５と指示し、関連リクエストＲ２，Ｒ４を順次送信してログを採取する。第２ログ情報１６の形式は、第１ログ情報１５と同様である。第２ログ情報１６は、リクエストＲ２を実行装置２０に送信したときに、コンポーネントｐ１，ｐ３，ｐ４，ｐ５が実行されたことを示す。同様に、リクエストＲ４を実行装置２０に送信したときに、コンポーネントｐ２，ｐ４，ｐ５が実行されたことを示す。分析部１２は、この第２ログ情報１６に基づき、リクエストＲ２に関するパスとしてｐ１，ｐ３，ｐ４，ｐ５を検出し、パス情報１７に登録する。分析部１２は、同様に、リクエストＲ４に関するパスとしてｐ２，ｐ４，ｐ５を検出し、パス情報１７に登録する。
【００１９】
第１の実施の形態の分析装置１０によれば、差分コンポーネント１４ａの実行状況を示す第１ログ情報１５に基づいて差分コンポーネント１４ａの実行に関連する関連リクエストを特定する。続いて、分析装置１０は、特定した関連リクエストを実行装置２０に送信して、第２ログ情報１６を生成し、パス情報１７を生成する。パス情報１７の生成では、実行装置２０が関連リクエストの受信に応じて実行した第２コンポーネントに関する情報があればよい。このため、分析装置１０では、第２ログ情報１６を採取するときに、実行装置２０へ送信するリクエストを関連リクエストに限定することができる。関連リクエストに限定することで、全リクエストを送信してログを採取する場合と比べて、ログの採取に要する処理時間を短縮できる。これにより、プログラムの分析の処理時間を短縮できる。
【００２０】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の分析装置のハードウェア例を示すブロック図である。
【００２１】
第２の実施の形態の分析装置１００は、旧プログラムの一部を変更した新プログラムに関し、運用前の事前分析を支援する。分析装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、バス１０８に接続されている。
【００２２】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、分析装置１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。
【００２３】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、分析装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００２４】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、分析プログラムが含まれる。なお、分析装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００２５】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、分析装置１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００２６】
入力信号処理部１０５は、分析装置１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、分析装置１００に、複数の種類の入力デバイスが接続されていてもよい。
【００２７】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００２８】
通信インタフェース１０７は、ネットワーク１１４に接続され、ネットワーク１１４を介して他のコンピュータと通信を行うことができる。通信インタフェース１０７は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、アクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００２９】
なお、分析装置１００は、媒体リーダ１０６を備えなくてもよい。また、ユーザが操作する端末装置からネットワーク１１４経由で分析装置１００にアクセスできる場合、分析装置１００は、画像信号処理部１０４や入力信号処理部１０５を備えなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、分析装置１００の筐体と一体に形成されてもよい。分析装置１００は、第１の実施の形態の分析装置１０に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。ＣＰＵ１０１は、第１の実施の形態の分析部１２に対応する。
【００３０】
図３は、第２の実施の形態の分析装置の機能例を示すブロック図である。
分析装置１００は、記憶部１２０、パス分析部１３０、ログ情報採取部１４０および表示制御部１５０を有する。記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。パス分析部１３０、ログ情報採取部１４０および表示制御部１５０は、ＣＰＵ１０１が実行するプログラムのモジュールとして実現できる。
【００３１】
記憶部１２０は、旧ソースコード２０１、旧コンポーネント定義情報２０２、旧パス情報２０３、新ソースコード２０４、新コンポーネント定義情報２０５、新パス情報２０６、リクエスト情報２１１、第１ログ情報２１２、第２ログ情報２１３、関連機能情報２１４および差分パス情報２１５を記憶する。
【００３２】
旧ソースコード２０１は、既存のソースコードであり、既に事前分析が行われ、対応する旧コンポーネント定義情報２０２および旧パス情報２０３が生成されている。ソースコードは、人間が理解容易なプログラミング言語を用いて記述される。旧コンポーネント定義情報２０２は、旧ソースコード２０１に含まれるコンポーネントを定義した情報である。コンポーネントは、パス分析部１３０が予め決められた規則に従ってソースコードを区切った単位である。コンポーネントには、例えば、メソッド、クラス、ｉｆ文や｛｝で区切られたブロック、利用者指定のログ出力箇所などを単位として、これらの単位が１または複数含まれる。旧パス情報２０３は、旧ソースコード２０１について事前分析されたパスに関する情報である。パスは、リクエストによって呼び出されるリクエスト単位によって実行されるコンポーネントの集合である。第２の実施の形態では、提供するサービスをＷｅｂサービスとする。Ｗｅｂサービスのリクエスト単位は、ＵＲＬ（Uniform Resource Locator）＋ＣＧＩ（Common Gateway Interface）／ＰＯＳＴパラメータなどで表す。以下の説明ではこのリクエスト単位を「機能」と呼ぶ。
【００３３】
新ソースコード２０４は、旧ソースコード２０１の一部が更新されたソースコードである。更新には、コンポーネントの追加、削除、変更がある。新コンポーネント定義情報２０５は、新ソースコード２０４に含まれるコンポーネントを定義した情報である。新コンポーネント定義情報２０５は、パス分析部１３０が、新ソースコード２０４について旧コンポーネント定義情報２０２と同様の処理を行って生成する。
【００３４】
リクエスト情報２１１には、機能を利用するリクエストパターンが登録される。リクエストパターンは、例えば、機能に紐付けされており、リクエスト情報２１１から任意の機能を利用するリクエストパターンを抽出することができる。リクエストパターンは、例えば、テスト用のシナリオに基づいて作成しておくか、または、運用時に採取しておく。第１ログ情報２１２は、新ソースコード２０４中の旧ソースコード２０１と異なる差分コードに関連する機能の特定に用いるログ情報である。第２ログ情報２１３は、特定された差分コードに関連する機能のパスの検出に用いるログ情報である。関連機能情報２１４は、新ソースコード２０４中の差分コードに関連する機能に関する情報である。差分パス情報２１５は、新ソースコード２０４中の関連機能情報２１４に登録される機能が呼び出すコンポーネントを含むパスの情報である。
【００３５】
パス分析部１３０は、旧ソースコード２０１と、新ソースコード２０４とを比較し、差分を抽出する。パス分析部１３０は、新ソースコード２０４に追加されている部分があるときは、追加部分に含まれる追加コンポーネントを抽出する。パス分析部１３０は、追加コンポーネントについて詳細ログの出力を設定し、全リクエストパターンによるログの取得をログ情報採取部１４０に指示し、第１ログ情報２１２を取得する。パス分析部１３０は、第１ログ情報２１２に基づいて、追加コンポーネントに関連する機能を特定し、関連機能情報２１４に登録する。また、パス分析部１３０は、新ソースコード２０４に削除部分または変更部分があるときは、旧コンポーネント定義情報２０２に基づき、変更された変更コンポーネントおよび削除された削除コンポーネントを抽出する。続いて、パス分析部１３０は、旧パス情報２０３に基づき、変更コンポーネントおよび削除コンポーネントに関する機能を特定し、関連機能情報２１４に登録する。こうして、関連機能情報２１４には、旧ソースコード２０１を新ソースコード２０４に更新するときに、追加、変更および削除された全てのコンポーネント（以下において差分コンポーネントとする）に関連する機能が登録される。パス分析部１３０は、全コンポーネントの詳細ログの出力を設定し、関連機能情報２１４に登録される機能に対応するリクエストを用いたログ採取をログ情報採取部１４０に指示し、第２ログ情報２１３を得る。パス分析部１３０は、第２ログ情報に基づいて、各機能のパスを検出し、差分パス情報２１５を生成する。そして、パス分析部１３０は、旧パス情報２０３と差分パス情報２１５とを合成し、新パス情報２０６を生成する。
【００３６】
ログ情報採取部１４０は、ネットワーク１１４を介して対象のアプリケーションを実行するサーバ３００と接続し、パス分析部１３０に従ってリクエストの送信と、ログ情報の採取を行う。サーバ３００は、例えば、Ｗｅｂサーバであり、リクエストを受信すると、リクエストに応じた処理を実行する。サーバ３００には、リクエストの送信前に詳細ログを出力する設定がなされる。分析装置１００は、例えば、Ｊａｖａ（登録商標）のバイトコードインジェクションによってサーバ３００に対し、所望のコンポーネントの詳細ログ出力を設定する。また、予め、サーバ３００に詳細ログ出力の設定処理を埋め込んでおき、分析装置１００からの設定指示で任意のコンポーネントの詳細ログを採取できるようにするとしてもよい。以下において、「詳細ログ出力を設定する」処理は、上記のような手順によって、サーバ３００が指定されたコンポーネントの詳細ログを出力する状態を設定する手順を指す。また、分析装置１００では、パス分析部１３０からの指示によってログ情報採取部１４０が指定されたコンポーネントの詳細ログ出力の設定を行う。リクエストを受け取ったサーバ３００は、リクエストに応じた処理を実行し、アクセスログと、アクセスログに対応する詳細ログを生成する。詳細ログは、設定によって指定されたコンポーネントについて生成される。ログ情報採取部１４０は、リクエストを送信したサーバ３００からログ情報としてアクセスログと詳細ログを取得し、第１ログ情報２１２および第２ログ情報２１３を生成する。
【００３７】
表示制御部１５０は、例えば、パス分析部１３０による新ソースコード２０４に関するパス分析の終了後、パス分析部１３０による分析結果を画像信号処理部１０４経由でディスプレイ１１１に表示する表示制御を行う。表示制御部１５０は、例えば、差分パス情報２１５に基づいて、変更されたコンポーネントの呼び出し関係を示す表示情報を生成し、ディスプレイ１１１に表示する。
【００３８】
以下、具体例を挙げて説明する。分析装置１００は、旧ソースコード２０１の一部を更新した新ソースコード２０４の事前分析を行う。旧ソースコード２０１については、既に、旧コンポーネント定義情報２０２および旧パス情報２０３が生成され、記憶部１２０に記憶されている。
【００３９】
図４は、旧ソースコードと新ソースコードの例を示す図である。
新ソースコード２０４は、旧ソースコード２０１の一部を更新したプログラムである。図４の例では、新ソースコード２０４の点線で囲む部分が旧ソースコード２０１から更新されている。追加２０４ａ部分では、「ｃｌａｓｓ  Ｃ４｛・・・｝」のクラスが追加されている。変更２０４ｂ部分では、旧ソースコード２０１の「ｃｌａｓｓ  Ｃ３｛・・・｝」に「Ｃ４」を加える変更が行われている。削除２０４ｃ部分では、旧ソースコード２０１の「ｃｌａｓｓ  Ｃ０｛・・・｝」が削除されている。なお、Ｃ０，Ｃ１，Ｃ３，Ｃ４はそれぞれクラス名を表す。
【００４０】
パス分析部１３０は、新ソースコード２０４を分析し、新コンポーネント定義情報２０５を生成する。パス分析部１３０は、例えば、同じ階層など、予め決められた規則に基づいて、新ソースコード２０４のクラスやメソッド、ブロックなどをコンポーネントに割り当てる。なお、新ソースコード２０４による新コンポーネント定義情報２０５の生成は、パス分析部１３０による分析処理の前に事前に生成されていてもよい。
【００４１】
図５は、旧コンポーネント定義情報および新コンポーネント定義情報の例を示す図である。
旧コンポーネント定義情報２０２は、旧ソースコード２０１のコンポーネントと、コンポーネントに含まれるクラス、メソッド、ブロックとが対応付けられた情報である。図５の例の旧コンポーネント定義情報２０２では、コンポーネントＢには、クラスＣ１とブロックＢ３が含まれ、コンポーネントＣには、クラスＣ２が含まれることを示している。
【００４２】
新コンポーネント定義情報２０５は、新ソースコード２０４の新コンポーネントと、新コンポーネントに含まれるクラスなどが対応付けられた情報である。図５の例の新コンポーネント定義情報２０５は、コンポーネントＡ，Ｂ，Ｃ，Ｄについては、旧コンポーネント定義情報２０２と同じである。また、新コンポーネント定義情報２０５には、新ソースコード２０４で新たに追加されたクラスＣ４に対応して、新コンポーネントＥが定義されている。一方、新コンポーネント定義情報２０５では、新ソースコード２０４で削除されたクラスＣ０に関し、旧コンポーネント定義情報２０２のクラスＣ０に対応するコンポーネントＦが削除されている。
【００４３】
パス分析部１３０は、新コンポーネント定義情報２０５と、旧コンポーネント定義情報２０２とに基づいて、新ソースコード２０４で追加されたコンポーネントＥに関連する関連機能を特定する処理を行う。関連機能を特定することを目的とする第１ログ情報２１２の取得では、コンポーネントＥに関連する機能が特定できればよいので、詳細ログの対象はコンポーネントＥに限定する。また、どのような機能がコンポーネントＥを呼び出すかは特定できないので、全リクエストパターンを送信し、全機能を呼び出す。パス分析部１３０は、コンポーネントＥを詳細ログの出力対象とし、全てのリクエストパターンを送信してログを採取するようにログ情報採取部１４０に指示する。ログ情報採取部１４０は、コンポーネントＥの詳細ログ出力を設定し、リクエスト情報２１１に格納される全リクエストパターンのリクエストをサーバ３００に順次送信する。ログ情報採取部１４０は、全リクエストパターンの送信を終了した後、リクエストを実行したサーバ３００からアクセスログと詳細ログを採取し、第１ログ情報２１２を生成する。なお、サーバ３００からのアクセスログと詳細ログの採取は、リクエストの送信ごとに行ってもよい。
【００４４】
図６は、第１ログ情報と関連機能情報の例を示す図である。
アクセスログ２１２１は、ログ情報採取部１４０がリクエストを送信することによって呼び出された機能に関するアクセス情報である。アクセスログ２１２１は、サーバ３００がリクエストを受け付けたときにサーバ３００によって採取される。図６の例では、アクセスログ２１２１は、呼び出し先のＵＲＬ情報（ｕｒｌ）と、トランザクションｉｄ（ｔｉｄ）と、タイムスタンプ（ｔｉｍｅｓｔａｍｐ）を含む。詳細ログ２１２２は、機能を実行したサーバ３００が指定されたクラスやメソッドを利用したときの利用履歴に関する情報である。詳細ログ２１２２は、リクエストに応じてサーバ３００上で指定されたコンポーネントが起動されたときにサーバ３００によって採取される。図６の例では、詳細ログ２１２２は、トランザクションｉｄ（ｔｉｄ）と、タイムスタンプ（ｔｉｍｅｓｔａｍｐ）と、呼び出したクラス名やメソッド名と、を含む。
【００４５】
ログ情報採取部１４０は、アクセスログ２１２１および詳細ログ２１２２に基づき、機能（ｕｒｌ）ごとに対応する詳細ログをまとめた第１ログ情報２１２を生成し、記憶部１２０に格納する。第１ログ情報２１２には、全リクエストパターンを実行して得られた全機能について、指定されたコンポーネントＥ（クラスＣ４）の詳細ログが設定されている。機能とコンポーネントの関係は、トランザクションｉｄを用いて判断することが可能である。図６の例では、機能「ｕｒｌ１」は、コンポーネントＥ（クラスＣ４）に関する詳細ログがない。すなわち、機能「ｕｒｌ１」では、コンポーネントＥ（クラスＣ４）は利用されていない。また、機能「ｕｒｌ２」は、コンポーネントＥ（クラスＣ４）を利用したという詳細ログがある。すなわち、機能「ｕｒｌ２」は、コンポーネントＥ（クラスＣ４）を利用する。同様に、機能「ｕｒｌ３」がコンポーネントＥを利用せず、機能「ｕｒｌ４」がコンポーネントＥを利用する。
【００４６】
なお、上記の例では、詳細ログの対象コンポーネントは１つであったが、複数の場合も同様である。ログ情報採取部１４０は、詳細ログの対象コンポーネントを全て指定し、全リクエストパターンを送信してログを採取する。また、ログ情報採取部１４０は、アクセスログ２１２１と、詳細ログ２１２２とをそれぞれ取得するとしたが、例えば、サーバ３００が詳細ログ２１２２にアクセスログ２１２１の内容を付加した情報を送付するとしてもよい。
【００４７】
このように、ログ情報採取部１４０による第１ログ情報２１２の採取は、詳細ログを取得する対象を新ソースコード２０４に新たに追加されたコンポーネントに限定して行う。
パス分析部１３０は、第１ログ情報２１２に基づき、詳細ログの対象を呼び出したＵＲＬを関連機能として特定する。図６の例では、ｕｒｌ２とｕｒｌ４を関連機能として抽出し、関連機能情報２１４に登録する。この時点では、追加コンポーネントに対応する関連機能の特定が終了しているのみであるので、続いて変更コンポーネントおよび削除コンポーネントについて関連機能の特定を行う。
【００４８】
図７は、変更・削除コンポーネントの関連機能の特定処理の例を示す図である。
パス分析部１３０は、旧コンポーネント定義情報２０２と、旧パス情報２０３とに基づき、新ソースコード２０４に更新する際に変更および削除されたコンポーネントに関連する関連機能を特定する。
【００４９】
パス分析部１３０は、旧ソースコード２０１と新ソースコード２０４との比較によって、新ソースコード２０４では、クラスＣ０が削除され、クラスＣ３が変更されていることを検出している。コンポーネントの変更と削除では、このコンポーネントを利用する側の機能に変更は生じない。パス分析部１３０は、旧コンポーネント定義情報２０２および旧パス情報２０３を用いて、関連する機能を特定することができる。図７の例では、パス分析部１３０は、変更されたクラス「Ｃ３」を含むコンポーネント「Ｄ」を変更コンポーネント、削除されたクラス「Ｃ０」を含むコンポーネント「Ｆ」を削除コンポーネントとして抽出する。パス分析部１３０は、旧パス情報２０３に基づいて、抽出したコンポーネントＤ，Ｆに対応する機能を特定する。例えば、旧パス情報２０３には、機能「ｕｒｌ３」、「ｕｒｌ４」は、コンポーネント「Ｄ」を利用することが登録されている。パス分析部１３０は、旧パス情報２０３に基づいて、ｕｒｌ３とｕｒｌ４を関連機能として抽出する。同様に、旧パス情報２０３に基づき、コンポーネントＦの関連機能として、ｕｒｌ５を抽出する。パス分析部１３０は、抽出した関連機能を関連機能情報２１４に追加登録する。これにより、関連機能情報２１４には、追加コンポーネントについて特定した関連機能と、変更コンポーネントおよび削除コンポーネントについて特定した関連機能とが登録される。
【００５０】
以上の処理手順が実行されることにより、分析装置１００は、新ソースコード２０４において更新された差分部分に含まれるコンポーネントに関連する関連機能を抽出する。新ソースコード２０４の静的な解析では、運用時にパラメータの取り得る値の組み合わせを検出することが難しいため、関連機能の特定はできない。分析装置１００では、上記の処理によって、関連機能の特定が可能となる。
【００５１】
次に、パス分析部１３０は、関連機能情報２１４に基づいて、関連機能に関する第２ログ情報２１３を取得する処理を行う。第２ログ情報２１３は、関連機能が利用するコンポーネントを検出することを目的とする。パス分析部１３０は、全コンポーネントについて詳細ログ出力を設定し、送信するリクエストパターンを関連機能に限定してログ採取を行うようにログ情報採取部１４０に指示する。ログ情報採取部１４０は、全コンポーネントの詳細ログ出力を設定し、リクエスト情報２１１から関連機能を呼び出すリクエストパターンを抽出する。ログ情報採取部１４０は、抽出したリクエストパターンに基づいてサーバ３００にリクエストを送信する。リクエストを受け付けたサーバ３００は、全コンポーネントの詳細ログ出力の設定に基づき、リクエストに応じた処理でコンポーネントを利用するごとにその詳細ログを生成する。ログ情報採取部１４０は、サーバ３００が生成した詳細ログおよびアクセスログを取得する。ログ情報採取部１４０は、関連機能を呼び出す全リクエストパターンについてサーバ３００にリクエストを送信し、サーバ３００からアクセスログおよび詳細ログの採取を行って第２ログ情報２１３を生成する。なお、対象のサーバが複数の場合は、それぞれのサーバについて全コンポーネントの詳細ログ出力を設定し、リクエストの送信とログの採取を行う。このように、サーバに送信するリクエストパターンを関連機能に限定することによって、全リクエストパターンを送信してログを採取する場合と比較し、ログ採取に要する処理時間を短縮することができる。また、関連機能に限定するため、関連機能の数が少ない場合は、より処理時間を短縮できる。
【００５２】
図８は、第２ログ情報と差分パス情報の例を示す図である。図８は、図７に示す関連機能ｕｒｌ２，ｕｒｌ３，ｕｒｌ４，ｕｒｌ５についてログ情報採取部１４０が採取した情報を示している。
【００５３】
第２ログ情報２１３は、機能ごとに、サーバ３００から採取した詳細ログが記録されている。図８の例では、ｕｒｌ２（２１３ａ）は、ブロックＢ１、クラスＣ２、クラスＣ３およびクラスＣ４を利用したことを示している。ｕｒｌ３（２１３ｂ）は、クラスＣ１、クラスＣ２およびクラスＣ３を利用したことを示している。ｕｒｌ４（２１３ｃ）は、クラスＣ１、クラスＣ３、クラスＣ４を利用したことを示している。そして、ｕｒｌ５（２１３ｄ）は、ブロックＢ１を利用したことを示している。
【００５４】
パス分析部１３０は、新コンポーネント定義情報２０５に基づき、第２ログ情報２１３の各機能に対応するコンポーネントを特定し、差分パス情報２１５に登録する。図８の例では、ｕｒｌ２が利用するコンポーネントとして、ブロックＢ１を含むコンポーネントＡ、クラスＣ２を含むコンポーネントＣ、クラスＣ３を含むコンポーネントＤおよびクラスＣ４を含むコンポーネントＥを登録する。パス分析部１３０は、同様の処理をｕｒｌ３，ｕｒｌ４，ｕｒｌ５について実行し、関連機能に対応する差分パス情報２１５を生成する。
【００５５】
図９は、新パス情報の設定処理の例を示す図である。
パス分析部１３０は、差分パス情報２１５と、旧パス情報２０３とを合成して、新パス情報２０６を生成する。図９の例では、旧パス情報２０３には、機能ｕｒｌ１，ｕｒｌ２，ｕｒｌ３，ｕｒｌ４，ｕｒｌ５についてパス情報が登録されている。このうち、差分パス情報２１５に登録されている機能ｕｒｌ２，ｕｒｌ３，ｕｒｌ４，ｕｒｌ５については、新たなパスが検出されている。
【００５６】
ここで、新ソースコード２０４に対応する機能のうち、パス分析部１３０が特定した関連機能以外の機能のパスは、旧パス情報２０３と同様である。よって、パス分析部１３０は、新ソースコード２０４に対応する機能のうち、差分パス情報２１５に登録された機能のパスについては差分パス情報２１５の情報を選択する。一方、パス分析部１３０は、差分パス情報２１５に登録されていない機能のパスについては、旧パス情報２０３の情報を選択する。パス分析部１３０は、このようにして差分パス情報２１５と旧パス情報２０３を合成し、新ソースコード２０４に対応する新パス情報２０６を生成する。パス分析部１３０は、生成した新パス情報２０６を記憶部１２０に格納する。
【００５７】
以上の処理によって、分析装置１００は新ソースコード２０４に対応する新パス情報２０６を生成し、記憶部１２０に格納する。これにより、例えば、新ソースコード２０４の運用時の不具合の分析に新パス情報２０６を利用することができる。
【００５８】
このように、分析装置１００によれば、新ソースコード２０４の事前分析において、旧ソースコード２０１からの差分部分に対応する関連機能に限定したリクエストパターンを送信し、パス分析に必要な第２ログ情報２１３を採取する。これにより、全機能に対応する全リクエストパターンを送信してログを採取する場合と比較し、事前分析処理に要する処理時間を短縮することができる。特に、分析装置１００は、関連機能に限定してログを採取するので、特定した関連機能の数が少ないほど、事前分析処理に要する処理時間を短縮することができる。
【００５９】
次に、分析装置１００による事前分析処理の手順について、フローチャートを用いて説明する。
図１０は、事前分析処理の手順例を示すフローチャートである。
【００６０】
［ステップＳ１０］パス分析部１３０は、記憶部１２０に格納される新ソースコード２０４と旧ソースコード２０１を比較し、新ソースコード２０４中の旧ソースコード２０１と異なる差分部分を検出する。
【００６１】
［ステップＳ１１］パス分析部１３０は、差分部分を解析し、差分部分に応じたコンポーネントを抽出する。パス分析部１３０は、差分部分に応じたコンポーネントとして、新ソースコード２０４において追加された追加コンポーネントと、変更された変更コンポーネントと、削除された削除コンポーネントを抽出する。
【００６２】
［ステップＳ１２］パス分析部１３０は、追加コンポーネント、削除コンポーネントおよび変更コンポーネントに関連する関連機能を特定する関連機能特定処理を行う。関連機能特定処理の詳細は、図１１のフローチャートを用いて説明する。
【００６３】
［ステップＳ１３］パス分析部１３０は、特定した関連機能について、第２ログ情報２１３を取得する。第２ログ情報２１３は、関連機能の実行時に利用されたコンポーネントに関する情報である。パス分析部１３０は、ログ情報採取部１４０に対し、全コンポーネントの詳細ログ出力を設定し、関連機能を呼び出すリクエストパターンを送信してログ採取を行うよう指示する。ログ情報採取部１４０は、パス分析部１３０の指示に基づいて、サーバ３００に全コンポーネントの詳細ログ出力を設定し、関連機能に対応するリクエストをサーバ３００に送信する。ログ情報採取部１４０は、サーバ３００がリクエストに応じた処理を実行して生成した詳細ログおよびアクセスログをサーバ３００から採取する。ログ情報採取部１４０は、採取した詳細ログとアクセスログに基づき、関連機能と、関連機能が利用したコンポーネントとを対応付けた第２ログ情報２１３を生成し、記憶部１２０に格納する。
【００６４】
［ステップＳ１４］パス分析部１３０は、第２ログ情報２１３に基づき、関連機能に関する差分パス情報２１５を生成し、記憶部１２０に格納する。
［ステップＳ１５］パス分析部１３０は、差分パス情報２１５に対応する旧パス情報２０３のパスを差分パス情報２１５のパスに置き換え、新パス情報２０６を生成する。パス分析部１３０は、生成した新パス情報２０６を記憶部１２０に格納する。
【００６５】
図１１は、関連機能特定処理の手順例を示すフローチャートである。
新ソースコード２０４中の旧ソースコード２０１と異なる差分部分に応じた差分コンポーネントが抽出されて、処理が開始される。
【００６６】
［ステップＳ１２１］パス分析部１３０は、抽出された差分コンポーネントの中に追加コンポーネントがあるか否かを判定する。パス分析部１３０は、追加コンポーネントがあるときは処理をステップＳ１２２に進め、追加コンポーネントがないときは処理をステップＳ１２５に進める。
【００６７】
［ステップＳ１２２］パス分析部１３０は、追加コンポーネントについてのみ詳細ログを出力する設定をログ情報採取部１４０に指示する。
［ステップＳ１２３］パス分析部１３０は、ログ情報採取部１４０に対し、ステップＳ１２２において指示した設定で、全リクエストパターンを送信してログを採取するように指示する。ログ情報採取部１４０は、追加コンポーネントのみの詳細ログ出力を設定し、全リクエストパターンのリクエストをサーバ３００に順次送信する。ログ情報採取部１４０は、リクエストに応じた機能を実行したサーバ３００が生成した詳細ログとアクセスログを取得し、第１ログ情報２１２を生成する。
【００６８】
［ステップＳ１２４］パス分析部１３０は、第１ログ情報２１２から追加コンポーネントを利用する関連機能を抽出する。
［ステップＳ１２５］パス分析部１３０は、旧コンポーネント定義情報２０２に基づいて、変更コンポーネントおよび削除コンポーネントを利用する機能を抽出する。
【００６９】
［ステップＳ１２６］パス分析部１３０は、追加コンポーネントに対応する関連機能に、変更コンポーネントおよび削除コンポーネントに対応する機能を加え、関連機能として保持する。
【００７０】
以上の処理手順が実行されることにより、新ソースコード２０４において追加、変更および削除された差分コンポーネントに関連する関連機能が抽出される。分析装置１００では、このようにして関連機能を特定することによって、新ソースコード２０４の事前分析において関連機能に限定してログを採取し、新パス情報２０６を生成することができる。これにより、分析装置１００では、新ソースコード２０４の全機能に対応する全リクエストパターンを用いてログの採取を行う場合と比較し、事前分析に要する処理時間を短縮することができる。
【００７１】
分析装置１００は、生成したパス情報を利用者に提供することができる。分析装置１００は、外部装置からの要求に応じて、記憶部１２０に格納する旧パス情報２０３、差分パス情報２１５および新パス情報２０６を提供することができる。また、例えば、分析装置１００は、パス情報に基づくコンポーネントの呼び出し関係を表示画面に表示して利用者に示すことができる。
【００７２】
図１２は、コンポーネントの呼び出し関係表の表示画面の例を示す図である。
表示画面６１０は、更新前のコンポーネント呼び出し関係の表６１１と、更新後のコンポーネント呼び出し関係の表６１２を表示する。図１２の例では、「機能１」および「機能２」は、新ソースコード２０４において検出された差分コンポーネントを利用する関連機能である。また、各機能に対応する欄において、「１」は対象のコンポーネントを表す。その左隣の（）は対象のコンポーネントの呼び出し元のコンポーネントを示し、右隣の（）は対象のコンポーネントが呼び出すコンポーネントを示す。例えば、更新前のコンポーネント呼び出し関係の表６１１の「（Ｂ）１（Ｃ）」は、リクエストに応じた「機能１」の処理において、コンポーネントＢがコンポーネントＡを呼び出し、コンポーネントＡがコンポーネントＣを呼び出したことを示す。
【００７３】
更新前のコンポーネント呼び出し関係の表６１１は、表示制御部１５０が、差分パス情報２１５および旧パス情報２０３に基づいて生成する。表示制御部１５０は、旧パス情報２０３のうち、差分パス情報２１５に対応する機能のパスを抽出し、機能とコンポーネントの対応表を生成する。なお、呼び出し元と呼び出し先の呼び出し関係は、表示制御部１５０が、例えば、第２ログ情報２１３に基づいて検出する。また、パス分析部１３０が、パスの抽出時に呼び出し関係を抽出しておいてもよい。
【００７４】
更新後のコンポーネント呼び出し関係の表６１２は、表示制御部１５０が、差分パス情報２１５に基づいて生成する。表示制御部１５０は、差分パス情報２１５に登録されている機能とそのパスとの対応表を生成する。
【００７５】
このように、プログラムの更新前と更新後で変更を検出したパス情報を表示画面に表示することにより、利用者が更新に伴って変更されたパスの確認を容易に行うことができる。利用者は、表示画面６１０から、例えば、新ソースコード２０４では、「機能２」に追加したコンポーネント「Ｄ」が、コンポーネント「Ｅ」から呼び出されることを確認できる。例えば、利用者は、更新前のコンポーネント呼び出し関係の表６１１と、更新後のコンポーネント呼び出し関係の表６１２とを比較することにより、機能による意図しないコンポーネント呼び出しを容易に発見することができる。
【００７６】
なお、表示制御部１５０は、更新後のコンポーネント呼び出し関係の表６１２の更新前のコンポーネント呼び出しの表６１１と異なる箇所を強調表示するとしてもよい。これにより、利用者の確認をより容易にすることができる。
【００７７】
また、表示制御部１５０は、コンポーネントの呼び出し関係を関係図で提供するとしてもよい。
図１３は、コンポーネントの呼び出し関係図の表示画面の例を示す図である。図１３は、図１２に示したコンポーネントの呼び出し関係を図形式で表示した表示画面である。
【００７８】
コンポーネントの呼び出し関係図を示す表示画面６２０は、更新前のコンポーネント呼び出し関係図６２１と、更新後のコンポーネント呼び出し関係図６２２と、を表示する。図１３に示す表示画面６２０の「Ｆ１」は図１２の「機能１」に対応し、同様に「Ｆ２」は「機能２」に対応する。「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、「Ｅ」は、コンポーネントに対応する。このように、コンポーネントの呼び出し関係を関係図にすることにより、利用者はより容易に新ソースコード２０４のコンポーネントの呼び出し関係を確認できる。
【００７９】
また、分析装置１００では、新パス情報２０６を生成する際、新パス情報２０６に版数を設定するとしてもよい。パス分析部１３０は、例えば、解析を行った新ソースコード２０４の版数を取得し、新パス情報２０６に設定した版数と対応付けて記憶部１２０に格納しておく。これにより、例えば、運用時に不具合が検出されたアプリケーションの不具合箇所を検出する際、対象のアプリケーションに応じたパス情報を選択して利用することができる。
【００８０】
上記のように、分析装置１００が生成するパス情報によって、利用者は、ソースコードを静的に解析するだけではわからないリクエスト送信時のコンポーネントの呼び出し関係を把握することが可能となる。例えば、アプリケーションのデバッグ時に、旧パス情報２０３と新パス情報２０６を比較することによって、同じリクエストパターンに対するコンポーネントの呼び出し関係の変化を検出できる。これにより、デバッグが容易になる。また、パス情報は、アプリケーションの運用時において、サーバ３００で遅延が発生した場合の原因の絞り込みに利用することができる。例えば、あるリクエストパターンのみサーバ３００で遅延が発生した場合に、その原因となっているコンポーネント群を特定することができる。これにより、遅延発生時における原因分析に要する時間を短縮することができる。
【００８１】
また、上記の分析装置１００は、関連機能に限定してログの採取を行って新パス情報２０６を生成するとしたが、限定によって事前分析の処理時間が短縮できないときは、全機能についてログを採取する通常のログ採取を行うとしてもよい。例えば、特定した関連機能の数が多くなるにつれて、第２ログ情報２１３の取得に用いるリクエストパターンも増加し、第２ログ情報２１３を取得する時間も増加する。また、パス分析部１３０は、第２ログ情報２１３に基づいて差分パス情報２１５を生成した後、旧パス情報２０３と合成して新パス情報２０６を生成する。関連機能の数に応じて、差分パス情報２１５と、旧パス情報２０３とを合成する処理時間も増大する。このため、関連機能に限定した第２ログ情報２１３の取得に要する時間と、新パス情報２０６を生成する処理時間とを合わせた処理時間が、従来の手法による処理時間より短縮されない場合がある。従来の手法とは、全機能に対応する全リクエストパターンについて全コンポーネントの詳細ログを取得し、新パス情報を生成する手法である。パス分析部１３０は、第２ログ情報２１３の取得を開始する前に、第２ログ情報２１３を取得した場合の処理時間Ｈ１と、従来の手法による処理時間Ｈ２とを算出し、時間が短い方を選択するとしてもよい。
【００８２】
第２ログ情報２１３を用いる場合の処理時間Ｈ１は、次の式で表すことができる。
Ｈ１＝  関連機能のログ採取時間＋差分パス情報の生成と旧パス情報との合成処理時間
一方、従来の手法による処理時間Ｈ２は、次の式で表すことができる。
【００８３】
Ｈ２＝  全リクエストパターンによるログ採取時間＋新パス情報生成時間
ログ採取時間は、例えば、事前に、全コンポーネントについて詳細ログを出力した場合に要する時間を機能ごとに計測しておく。また、例えば、シミュレーションなどによって各コンポーネントが詳細ログを出力した場合の処理時間を設定し、設定した処理時間に基づいて機能ごとの処理時間を算出してもよい。コンポーネントの処理時間は、粒度（クラス単位、メソッド単位など）に応じて調整してもよい。分析装置１００は、いずれかの方法によって、事前に、機能ごとのログ採取時間を算出し、記憶部１２０に格納しておく。また、差分パス情報２１５の生成に要する処理時間、旧パス情報２０３との合成処理時間も予め設定しておく。全リクエストパターンのログから新パス情報の生成に要する時間も設定しておく。それぞれの処理について事前に計測した時間を設定しておいてもよいし、シミュレーションなどによって設定してもよい。また、例えば、１つの機能のパス情報を生成するのに要する時間を設定しておき、機能数に応じた処理時間を求めるとしてもよい。
【００８４】
パス分析部１３０は、第２ログ情報２１３の採取前に、上記の算出式に基づいて処理時間Ｈ１と、処理時間Ｈ２を算出する。パス分析部１３０は、処理時間Ｈ１について、関連機能の処理時間を積算し、差分パス情報の生成と合成の処理時間を加えて算出する。また、パス分析部１３０は、処理時間Ｈ２について、全機能の処理時間を積算し、新パス情報の生成に要する処理時間を加えて算出する。パス分析部１３０は、算出した処理時間Ｈ１と、処理時間Ｈ２を比較し、いずれの処理を行うか判定する。パス分析部１３０は、Ｈ１＜Ｈ２であるときは、関連機能に限定したログ採取を行ってパス情報を生成する。パス分析部１３０は、また、Ｈ１≧Ｈ２であるときは、全機能のログ採取を行ってパス情報を生成する。
【００８５】
分析装置１００は、ログ採取に要する時間を算出し、関連機能に限定したログ採取で時間短縮を図れるか否かを判定し、時間短縮を図れるときのみ関連機能に限定したログ採取を行う。これにより、より効果的に事前分析に要する処理時間を短縮することができる。
【００８６】
なお、第１の実施の形態の情報処理は、分析装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、分析装置１００にプログラムを実行させることで実現できる。
【００８７】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【００８８】
１０  分析装置
１１  記憶部
１２  分析部
１３  第１コード
１４  第２コード
１４ａ  差分コンポーネント
１５  第１ログ情報
１６  第２ログ情報
１７  パス情報
２０  実行装置
【図１】
0006512055.tif 000002
【図２】
0006512055.tif 000003
【図３】
0006512055.tif 000004
【図４】
0006512055.tif 000005
【図５】
0006512055.tif 000006
【図６】
0006512055.tif 000007
【図７】
0006512055.tif 000008
【図８】
0006512055.tif 000009
【図９】
0006512055.tif 000010
【図１０】
0006512055.tif 000011
【図１１】
0006512055.tif 000012
【図１２】
0006512055.tif 000013
【図１３】
0006512055.tif 000014