(57)【特許請求の範囲】
【請求項１】
対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムであって、
対象プログラムを取得する対象プログラム取得手段と、
複数のプログラム解析・検証ツールを格納したツール記憶部と、
上記対象プログラム取得手段が取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出手段と、
上記ツール抽出手段が抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得手段と、
上記ツール取得手段が取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得手段が取得した対象プログラムを解析、検証するツール実行手段と、を備えることを特徴とするプログラム解析・検証サービス提供システム。
【請求項２】
上記対象プログラム取得手段が取得した上記対象プログラムの解析、検証に用いるプログラム解析・検証ツールを指定するツール指定情報を取得するツール指定情報取得手段をさらに備え、
上記ツール記憶部は、複数のプログラム解析・検証ツールを各プログラム解析・検証ツールのツール関連情報とそれぞれ対応付けて格納しており、
上記ツール抽出手段は、上記ツール指定情報取得手段が取得した上記ツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられたプログラム解析・検証ツールを抽出するものであることを特徴とする請求項１に記載のプログラム解析・検証サービス提供システム。
【請求項３】
上記ツール記憶部は、上記プログラム解析・検証ツールとして、当該プログラム解析・検証ツールを導入、設定した仮想マシンを格納しており、
上記ツール実行手段は、上記ツール取得手段が取得した仮想マシン上で、上記対象プログラム取得手段が取得した対象プログラムを解析、検証するものであることを特徴とする請求項１または２に記載のプログラム解析・検証サービス提供システム。
【請求項４】
プログラム解析・検証ツールを導入、設定した仮想マシンを、プログラム解析・検証ツール毎に生成する仮想マシン生成手段をさらに備え、
上記ツール記憶部は、上記プログラム解析・検証ツールとして、上記仮想マシン生成手段が生成した仮想マシンを格納していることを特徴とする請求項３に記載のプログラム解析・検証サービス提供システム。
【請求項５】
上記プログラム解析・検証サービス提供システムは、前処理前プログラムを前処理して上記対象プログラムを得る処理と、該処理によって得た上記対象プログラムを上記プログラム解析・検証ツールを用いて解析、検証する処理とを連続して行うものであって、
上記前処理前プログラムを前処理して得た上記対象プログラムを、該対象プログラムの特徴記述情報と対応付けて格納する前処理後プログラム記憶部をさらに備え、
上記対象プログラム取得手段は、上記前処理後プログラム記憶部から、上記対象プログラムを取得するものであり、
上記ツール指定情報取得手段は、上記前処理後プログラム記憶部から、上記対象プログラム取得手段が取得した上記対象プログラムに対応付けられた上記特徴記述情報を、上記ツール指定情報として取得するものであることを特徴とする請求項２に記載のプログラム解析・検証サービス提供システム。
【請求項６】
上記プログラム解析・検証サービス提供システムは、上記対象プログラムを上記プログラム解析・検証ツールを用いて解析、検証する処理と、該処理によって得た結果データを後処理する処理とを連続して行うものであって、
上記ツール実行手段が上記プログラム解析・検証ツールを用いて上記対象プログラムを解析、検証して得た結果データを、該結果データの特徴記述情報と対応付けて格納する結果データ記憶部をさらに備えるとともに、
上記ツール記憶部は、上記結果データを後処理する後処理ツールを該後処理ツールのツール関連情報と対応付けて格納しており、
上記ツール指定情報取得手段は、上記結果データ記憶部から、上記結果データに対応付けられた上記特徴記述情報を、上記ツール指定情報として取得するものであり、
上記ツール抽出手段は、上記ツール指定情報取得手段が取得した上記ツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられた後処理ツールを、上記ツール記憶部に格納された複数の後処理ツールから抽出するものであることを特徴とする請求項２に記載のプログラム解析・検証サービス提供システム。
【請求項７】
対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムの制御方法であって、
上記プログラム解析・検証サービス提供システムは、複数のプログラム解析・検証ツールを格納したツール記憶部を備え、
対象プログラムを取得する対象プログラム取得ステップと、
上記対象プログラム取得ステップにて取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出ステップと、
上記ツール抽出ステップにて抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得ステップと、
上記ツール取得ステップにて取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得ステップにて取得した対象プログラムを解析、検証するツール実行ステップと、を含むことを特徴とするプログラム解析・検証サービス提供システムの制御方法。
【請求項８】
請求項１または２に記載のプログラム解析・検証サービス提供システムの上記各手段としてコンピュータを機能させるための制御プログラム。
【請求項９】
請求項８に記載の制御プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１０】
請求項１に記載のプログラム解析・検証サービス提供システムを構成するプログラム解析・検証装置であって、
上記対象プログラム取得手段と、上記ツール取得手段と、上記ツール実行手段と、を備えることを特徴とするプログラム解析・検証装置。
【請求項１１】
請求項１に記載のプログラム解析・検証サービス提供システムを構成するプログラム解析・検証ツール管理装置であって、
上記ツール記憶部と、上記ツール抽出手段と、を備えることを特徴とするプログラム解析・検証ツール管理装置。
【請求項１２】
複数のデータ処理ツールを順次用いることにより、対象データを複数段階にデータ処理するデータ処理サービス提供システムであって、
複数のデータ処理ツールを各データ処理ツールのツール関連情報とそれぞれ対応付けて格納したツール記憶部と、
前段階のデータ処理ツールを用いてデータ処理して得られた結果データを、該結果データの特徴記述情報と対応付けて格納する結果データ記憶部と、
上記結果データ記憶部から上記結果データを取得する結果データ取得手段と、
上記結果データ取得手段が取得した上記結果データのデータ処理に用いるデータ処理ツールを指定するツール指定情報として、当該結果データに対応付けられた上記特徴記述情報を上記結果データ記憶部から取得するツール指定情報取得手段と、
上記ツール指定情報取得手段が取得した上記ツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられたデータ処理ツールを、上記ツール記憶部に格納された複数のデータ処理ツールから抽出するツール抽出手段と、
上記ツール抽出手段が抽出したデータ処理ツールを上記ツール記憶部から取得するツール取得手段と、
上記ツール取得手段が取得したデータ処理ツールを用いて、上記結果データ取得手段が取得した結果データをデータ処理するツール実行手段と、を備えることを特徴とするデータ処理サービス提供システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システム等に関する。
【背景技術】
【０００２】
プログラム解析・検証とは、計算機のプログラムが何らかの性質を満たすことを解析・検証する技術である。プログラム解析・検証は、プログラムの安全性や信頼性を保証・検証するための非常に有効な手段であると考えられている。【０００３】
近年、このプログラム解析・検証技術は飛躍的に進歩し、様々な実用的プログラムに対して解析・検証が行えるようになりつつある。実際、プログラム解析・検証を行うプログラム（以降、「プログラム解析・検証ツール」と呼ぶ）が研究用途・商業用途問わず多く開発されている。【０００４】
ここで、プログラム解析・検証ツールを共有する従来技術について、ウイルス解析・検査サイトを例に説明する。【０００５】
図１１は、ウイルス解析・検査サイトの典型的な構成例を表したものである。図１１に示すように、ウイルス解析・検査サイト９００の利用者は、ウイルス解析・検査したい対象プログラムをウイルス解析・検査サイト９００に送付する（Ｐ１）。例えば、下記の非特許文献１にリストアップされているサイトであれば、Ｗｅｂインターフェースを経由して送付する。そして、対象プログラムが送付されると、ウイルス解析・検査サイト９００は、ウイルス解析・検査ソフトウェア９０１を利用して、送付された対象プログラムの解析・検査を行う（Ｐ２）。解析・検査が終了したら、ウイルス解析・検査サイト９００はその結果を利用者へ送付する（Ｐ３）。【０００６】
このウイルス解析・検査サイト９００の利点は、サイトの利用者が解析・検査のための計算資源（ＣＰＵ時間やメモリ容量など）を用意したり、解析・検査ソフトウェアを導入したりする手間がかからないことにある。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“サンドボックスによるウイルス・マルウェア解析サイト”、［online］、２０１１年６月、［２０１１年１０月２０日検索］、インターネット＜URL：http://lhsp.s206.xrea.com/misc/virussandbox.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、従来のプログラム解析・検証ツールには、以下に述べるような実用上の問題があった。【０００９】
（１）プログラム解析・検証ツールが要する計算資源の肥大化
プログラム解析・検証技術の種類によっては、プログラム解析・検証ツールが非常に多くの計算資源（ＣＰＵ時間やメモリ容量など）を必要とすることがある。それは、複雑な性質を解析・検証する場合や、解析・検証対象のプログラムの規模が大きい場合に、特に顕著となる。このため、個々のプログラム解析・検証ツールの利用者が現実的に実行可能な解析・検証の種類や規模には限界があった。【００１０】
（２）プログラム解析・検証ツールの種類の多様化
解析・検証技術の進歩に伴い、非常に多くの種類のプログラム解析・検証ツールが存在しており、また新たに考案・開発され続けている。このため、プログラム解析・検証ツールの利用者にとって、どのプログラム解析・検証ツールを選択すれば良いかを判断することが困難である。【００１１】
（３）プログラム解析・検証ツールの導入・運用の手間・コスト
上述のとおり、多くの種類のプログラム解析・検証ツールが存在しているが、プログラム解析・検証ツールの利用者の目的が一種類のプログラム解析・検証ツールで満たされることは稀である。このため、利用者は複数のプログラム解析・検証ツールを導入し、運用・維持管理しなければならず、手間やコストが大きくなる。【００１２】
（４）プログラム解析・検証ツール自体のテストの困難さ
プログラム解析・検証ツールの有用性は広く認識されつつある。しかし、その一方で、プログラム解析・検証ツール自体が期待通りに動作するかどうかをテストすることは困難である。これは、プログラム解析・検証ツールの提供者にとっては、プログラム解析・検証ツールの利用者と同様に、プログラムの解析・検証の規模には限界があること、また、プログラム解析・検証ツールの提供者が利用・閲覧可能なプログラムおよびそのソースコードには限界があることにより、様々な対象プログラムに対してプログラム解析・検証ツールのテストができないためである。【００１３】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、複数のプログラム解析・検証ツールから用いるべきものを適切に選択して、プログラムの解析・検証を容易に実行できるプログラム解析・検証サービス提供システム等を実現することにある。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明に係るプログラム解析・検証サービス提供システムは、対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムであって、対象プログラムを取得する対象プログラム取得手段と、複数のプログラム解析・検証ツールを格納したツール記憶部と、上記対象プログラム取得手段が取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出手段と、上記ツール抽出手段が抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得手段と、上記ツール取得手段が取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得手段が取得した対象プログラムを解析、検証するツール実行手段と、を備えることを特徴としている。【００１５】
また、本発明に係るプログラム解析・検証サービス提供システムの制御方法は、対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムの制御方法であって、上記プログラム解析・検証サービス提供システムは、複数のプログラム解析・検証ツールを格納したツール記憶部を備え、対象プログラムを取得する対象プログラム取得ステップと、上記対象プログラム取得ステップにて取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出ステップと、上記ツール抽出ステップにて抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得ステップと、上記ツール取得ステップにて取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得ステップにて取得した対象プログラムを解析、検証するツール実行ステップと、を含むことを特徴としている。【００１６】
さらに、本発明に係るデータ処理サービス提供システムは、複数のデータ処理ツールを順次用いることにより、対象データを複数段階にデータ処理するデータ処理サービス提供システムであって、複数のデータ処理ツールを各データ処理ツールのツール関連情報とそれぞれ対応付けて格納したツール記憶部と、前段階のデータ処理ツールを用いてデータ処理して得られた結果データを、該結果データの特徴記述情報と対応付けて格納する結果データ記憶部と、上記結果データ記憶部から上記結果データを取得する結果データ取得手段と、上記結果データ取得手段が取得した上記結果データのデータ処理に用いるデータ処理ツールを指定するツール指定情報として、当該結果データに対応付けられた上記特徴記述情報を上記結果データ記憶部から取得するツール指定情報取得手段と、上記ツール指定情報取得手段が取得した上記ツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられたデータ処理ツールを、上記ツール記憶部に格納された複数のデータ処理ツールから抽出するツール抽出手段と、上記ツール抽出手段が抽出したデータ処理ツールを上記ツール記憶部から取得するツール取得手段と、上記ツール取得手段が取得したデータ処理ツールを用いて、上記結果データ取得手段が取得した結果データをデータ処理するツール実行手段と、を備えることを特徴としている。
【発明の効果】
【００１７】
本発明の一態様によれば、複数のプログラム解析・検証ツールから用いるべきものを適切に選択して、プログラムの解析・検証を容易に実行できるという効果を奏する。そして、プログラム解析・検証を共有システム上で行うことで、従来のプログラム解析・検証技術の実用化上の種々の問題点を解決できるという効果を奏する。また、これらの効果は、プログラムの解析・検証を行う処理に限定されない。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムの構成の詳細を示す機能ブロック図である。
【図２】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれる解析・検証実行サブシステムの構成および解析・検証の実行処理の流れを表したブロック図である。
【図３】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれる解析・検証実行サブシステムの構成および解析・検証結果の表示処理の流れを表したブロック図である。
【図４】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれる対象プログラム管理サブシステムの構成および対象プログラムの登録処理の流れを表したブロック図である。
【図５】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれる対象プログラム管理サブシステムの構成および解析・検証実行サブシステムからの対象プログラムの取得要求処理の流れを表したブロック図である。
【図６】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれるツール管理サブシステムの構成およびプログラム解析・検証ツールの登録処理の流れを表したブロック図である。
【図７】本発明の実施形態を示すものであり、プログラム解析・検証サービス提供システムに含まれるツール管理サブシステムの構成および解析・検証実行サブシステムからのプログラム解析・検証ツールのイメージを含む仮想マシン取得要求処理の流れを表したブロック図である。
【図８】図１に示したプログラム解析・検証サービス提供システムにおいて用いられるデータの説明図であり、依頼管理データベースのデータ構造を示す。
【図９】図１に示したプログラム解析・検証サービス提供システムにおいて用いられるデータの説明図であり、対象プログラム管理データベースのデータ構造を示す。
【図１０】図１に示したプログラム解析・検証サービス提供システムにおいて用いられるデータの説明図であり、ツール管理データベースのデータ構造を示す。
【図１１】従来技術を示すものであり、ウイルス解析・検査サイトの典型的な構成例を表したブロック図である。
【発明を実施するための形態】
【００１９】
以下、本発明の一実施形態について、詳細に説明する。図１〜図１０に基づいて、本実施形態に係るプログラム解析・検証サービス提供システム１について説明すれば以下のとおりである。
【００２０】
（１．プログラム解析・検証ツールの共有のためのシステムの構成手法）
最初に、前述した従来のプログラム解析・検証ツールの実用上の４つの問題を解決するための手法を説明する。なお、具体的な手法の実施例については後述する。
【００２１】
鍵となるアイデアは、近年流行のいわゆる「クラウド」的な考え方に基づき、複数のプログラム解析・検証ツールの利用者と複数のプログラム解析・検証ツールの提供者（ツール提供者）が、１つのシステムを共有して、プログラム解析・検証を行うことにある。
【００２２】
具体的には、プログラム解析・検証サービス提供システム１は、解析・検証実行サブシステム１０、対象プログラム管理サブシステム２０、ツール管理サブシステム３０の３つのサブシステムからなる。以降、それぞれのサブシステムについて説明する。なお、これらのサブシステムは、１つのコンピュータ上に３つのサブシステムのすべてを配置してもよいし、ネットワークで接続された複数のコンピュータ群に分散して配置してもよい。
【００２３】
（１．１．解析・検証実行サブシステム）
解析・検証実行サブシステム１０（図２、図３）は、利用者の要求に基づいて、まず、対象プログラム管理サブシステム２０からプログラム解析・検証の対象となる対象プログラムＰを取得し、ツール管理サブシステム３０から解析・検証ツール（仮想マシンＴ）を取得する。次に、取得した対象プログラムＰおよび解析・検証ツール（仮想マシンＴ）を用いてプログラム解析・検証を実行し、その結果（解析・検証結果データＲ）をリポジトリ１３に登録する。また、その結果を利用者に示す。
【００２４】
また、解析・検証実行サブシステム１０は、その稼働状況に応じて、利用者からの要求とは独立に対象プログラム管理サブシステム２０からプログラム解析・検証の対象となる対象プログラムＰを取得する。解析・検証実行サブシステム１０が対象プログラムＰを取得するときの稼働状況とは、具体的には、（１）システムのＣＰＵ利用率、（２）メモリ利用率、（３）外部記憶利用率などが、あらかじめ設定した閾値を下回った場合などである。解析・検証実行サブシステム１０は、対象プログラムＰを取得するとともに、ツール管理サブシステム３０からプログラム解析・検証ツール（仮想マシンＴ）を取得して、解析・検証を行い、その結果（解析・検証結果データＲ）をリポジトリ１３に登録しておく。これにより、後に利用者から要求があった場合に、リポジトリ１３に問合せをすることで、迅速に解析・検証結果を返答することが可能である。
【００２５】
このように、複数の利用者で解析・検証実行サブシステム１０を共有することで、余剰の計算資源を融通し合うことが可能となり、全体としてプログラム解析・検証のコストを抑えることができる。また、利用者の要求とは独立に、プログラム解析・検証をあらかじめ実行できるため、利用者の要求から解析・検証結果の提供までに要する計算資源のコストを隠蔽することもできる。さらに、複数のプログラム解析・検証ツールの中から適切なプログラム解析・検証ツールを選択することが容易になる。
【００２６】
（１．２．対象プログラム管理サブシステム）
対象プログラム管理サブシステム２０（図４、図５）は、利用者の要求にもとづいて、利用者が指定・提供する対象プログラムＰの維持管理（取得・保存・更新・削除）を行う。また解析・検証実行サブシステム１０からの要求に対して、適切な対象プログラムＰを提供する。
【００２７】
このように、複数の利用者によって登録された対象プログラムＰに対してプログラム解析・検証ツールを実行できるため、個々のプログラム解析・検証ツールの提供者は様々な対象プログラムＰに対してプログラム解析・検証ツールのテストを行うことができる。
【００２８】
（１．３．ツール管理サブシステム）
ツール管理サブシステム３０（図６、図７）は、利用者（プログラム解析・検証ツールの提供者）の要求・指示に基づいて、利用者の指定するプログラム解析・検証ツールの維持管理（導入・設定・削除）を行う。また、解析・検証実行サブシステム１０からの取得要求に対して、適切なプログラム解析・検証ツールを提供する。
【００２９】
このように、プログラム解析・検証ツールの提供者が導入・維持管理を行い、複数の利用者でプログラム解析・検証ツールを共有することで、利用者自身がプログラム解析・検証ツールの導入・維持管理を行う必要がなくなる。
【００３０】
（２．プログラム解析・検証ツールの共有のためのシステムの実装例）
つづいて、前述したそれぞれのサブシステムの一実装例について説明する。
【００３１】
（２．１．解析・検証実行サブシステムの一実装例）
図２は、解析・検証実行サブシステム１０の構成および解析・検証の実行処理の流れを表したブロック図である。
【００３２】
解析・検証実行サブシステム１０は、コントローラ１１、仮想マシン実行環境１２、リポジトリ１３からなる。コントローラ１１は、利用者からの実行要求の処理や、対象プログラム管理サブシステム２０やツール管理サブシステム３０とのやり取り、解析・検証の実行や、解析・検証結果のリポジトリ１３への保存を行う。仮想マシン実行環境１２は、解析・検証を行うための実行環境である。リポジトリ１３は解析・検証の結果を保存する。
【００３３】
なお、仮想マシン実行環境１２を用いて解析・検証を行う理由は、二つある。まず、第１に、仮想マシンを用いて解析・検証を実行することで、複数の利用者および複数のプログラム解析・検証ツールの提供者の間で、システムの公平な利用を容易に実現することができる。ここで、システムの公平な利用とは、例えば、ＣＰＵやメモリを大量に消費しているプログラム解析・検証ツールは実行を後回しにして、他のプログラム解析・検証ツールを先に実行するなどをいう。
【００３４】
また、第２に、仮想マシン上にプログラム解析・検証ツールを導入・設定することによって（詳細は（２．３．ツール管理サブシステムの一実装例）を参照）、プログラム解析・検証ツールの提供者は、普段自らが開発・テストしている実行環境とほぼ同様にプログラム解析・検証ツールを導入・設定できるため、特殊な実行環境に対応させるためにプログラム解析・検証ツールを修正したり、また外部とのデータのやりとりをプログラム解析・検証ツールに行わせるための仕組みを別途用意したりといった、余計な負担をプログラム解析・検証ツールの提供者に掛けないようにすることができる。
【００３５】
具体的な解析・検証の実行の流れは次のとおりである。まず、利用者から解析・検証の実行要求がコントローラ１１に送られる（Ａ１）。この実行要求は、どの対象プログラムＰに対して解析・検証を行うかを示すタグと、どのプログラム解析・検証ツール（仮想マシンＴ）を用いるかを示すタグからなる。実行要求を受け付けたコントローラ１１は、実行要求に指定されたタグおよび利用者の権限に応じて与えられるタグに基づいて、対象プログラム管理サブシステム２０から対象プログラムＰを取得し（Ａ２−ａ、Ａ３−ａ；対象プログラム取得ステップ）、ツール管理サブシステム３０からプログラム解析・検証ツールのイメージを含む仮想マシンＴを取得する（Ａ２−ｂ、Ａ３−ｂ；ツール取得ステップ）。
【００３６】
なお、上記「利用者の権限に応じて与えられるタグ」とは、個々の利用者に与えられた、対象プログラムＰおよびプログラム解析・検証ツール（仮想マシンＴ）へのアクセス権限を表すタグである。例えば、最も基礎的なものとしては、利用者Ａによる実行要求には「ＵＳＥＲ＿Ａ」のようなタグが与えられる。これにより、「ＵＳＥＲ＿Ａ」のタグが付けられた対象プログラムＰやプログラム解析・検証ツール（仮想マシンＴ）を、利用者Ａが取得することが可能となる。一方、別の利用者Ｂに対しては「ＵＳＥＲ＿Ｂ」のようなタグが与えられるため、利用者Ｂは「ＵＳＥＲ＿Ａ」のタグだけが与えられている対象プログラムＰやプログラム解析・検証ツール（仮想マシンＴ）を取得することはできない。つまり、利用者Ａの対象プログラムＰやプログラム解析・検証ツール（仮想マシンＴ）を利用者Ｂから隠蔽することができる。また、より複雑な例として、利用者Ａと利用者Ｂが共同の利用者として各自の対象プログラムＰやプログラム解析・検証ツール（仮想マシンＴ）を共有する場合には、利用者Ａ・Ｂの実行要求に対して「ＧＲＯＵＰ＿ＡＢ」のようなタグが与えられる。これにより、「ＧＲＯＵＰ＿ＡＢ」のタグが付けられた対象プログラムＰやプログラム解析・検証ツール（仮想マシンＴ）を利用者Ａ・Ｂが取得することが可能となる。
【００３７】
次に、取得した対象プログラムＰおよびツールイメージ（仮想マシンＴ）を用いて、仮想マシン実行環境１２で実際に解析・検証を実行する（Ａ４；ツール実行ステップ）。解析・検証の終了後、コントローラ１１はその結果を受け取り（Ａ５）、その結果をタグと紐付けしてリポジトリ１３に保存する（Ａ６）。なお、図２には明示的には示されていないが、前述のとおり、解析・検証実行サブシステム１０の稼働状況に応じて、利用者からの実行要求がなくても、図２の（Ａ２）以降の手順をあらかじめ行っておくことも可能である。この場合、解析・検証の結果をリポジトリ１３に保存する際に紐付けされるタグとしては、対象プログラムＰ自身およびプログラム解析・検証ツールのツールイメージ（仮想マシンＴ）自身に与えられたタグを用いることができる。
【００３８】
図３は、解析・検証実行サブシステム１０の構成および解析・検証結果の表示処理の流れを表したブロック図である。
【００３９】
リポジトリ１３に保存した解析・検証結果は、以下のように、利用者へ提示される。まず、利用者から解析・検証結果の取得要求（結果取得要求）がコントローラ１１に送られる（Ｂ１）。この結果取得要求は、前述の実行要求と同様のタグからなる。結果取得要求を受け付けたコントローラ１１は、結果取得要求に指定されたタグおよび利用者の権限に応じて与えられるタグに基づいて、リポジトリ１３から解析・検証結果を取得する（Ｂ２、Ｂ３）。次に、コントローラ１１は取得した結果を利用者に表示する（Ｂ４）。なお、リポジトリ１３に結果が保存されていない場合には、図２の（Ａ２）以降の手順を実行することが可能である。
【００４０】
（２．２．対象プログラム管理サブシステムの一実装例）
図４は、対象プログラム管理サブシステム２０の構成および対象プログラムＰの登録処理の流れを表したブロック図である。
【００４１】
対象プログラム管理サブシステム２０は、コントローラ２１とリポジトリ２２からなる。コントローラ２１は、利用者からの対象プログラム登録要求の処理や対象プログラムＰの取得、リポジトリ２２への登録を行う。リポジトリ２２は対象プログラムＰを保存する。
【００４２】
具体的な対象プログラムの登録の流れは次のとおりである。まず、利用者から対象プログラムＰの登録要求がコントローラ２１へ送られる（Ｃ１）。この登録要求には、利用者が指定したタグと対象プログラムＰの送付方法の指定からなる。登録要求に利用者が指定したタグは、利用者が任意の内容で任意の個数指定することができる。想定される利用方法は、対象プログラムＰで用いられているプログラミング言語の種類やプログラムの種類（ユーザプログラム、システムプログラムの区別など）を指定するなどである。また、対象プログラムＰの送付方法としては、ここでは利用者からの直接送付（Ｃ２）と外部システム（バージョン管理システムなど）からのインポートを想定している（Ｃ２−１、Ｃ２−２）。登録要求を受け付けたコントローラ２１は、登録要求に指定された方法で対象プログラムＰを取得し（Ｃ２、Ｃ２−１、Ｃ２−２）、登録要求に指定されているタグおよび利用者の権限に応じて与えられるタグと紐付けて、リポジトリ２２へ対象プログラムＰを保存する（Ｃ３）。
【００４３】
図５は、対象プログラム管理サブシステム２０の構成および解析・検証実行サブシステム１０からの対象プログラムＰの取得要求処理の流れを表したブロック図である。
【００４４】
解析・検証実行サブシステム１０から対象プログラムＰの取得要求を受け付けると（Ｄ１）、コントローラ２１は取得要求に指定されたタグに基づいてリポジトリ２２を検索する（Ｄ２、Ｄ３）。次いで、コントローラ２１は、リポジトリ２２から得た対象プログラムＰを解析・検証実行サブシステムに送付する（Ｄ４）。
【００４５】
（２．３．ツール管理サブシステムの一実装例）
図６は、ツール管理サブシステム３０の構成およびプログラム解析・検証ツールの登録処理の流れを表したブロック図である。
【００４６】
ツール管理サブシステム３０は、コントローラ３１、リポジトリ３２、仮想マシン実行環境３３からなる。コントローラ３１は、ツール提供者からの登録要求の処理や、プログラム解析・検証ツールの導入・設定用の仮想マシン（初期仮想マシン）の生成、ツールイメージを含む仮想マシンＴのリポジトリ３２への保存を行う。仮想マシン実行環境３３は、ツール提供者がプログラム解析・検証ツールの導入・設定を行うための環境である。リポジトリ３２は、ツール提供者がプログラム解析・検証ツールを導入・設定した仮想マシンＴのシステムイメージを保存する。
【００４７】
プログラム解析・検証ツールの登録処理の具体的な流れは次のとおりである。まず、ツール提供者からコントローラ３１へプログラム解析・検証ツールの登録要求が送られる（Ｅ１）。この登録要求はツール提供者が指定したタグからなる。登録要求のツール提供者が指定したタグは、ツール提供者が任意の内容で任意の個数指定することができる。登録要求のツール提供者が指定したタグは、（１）プログラム解析・検証ツールが扱うことができるプログラミング言語の種類およびプログラムの種類（ユーザプログラム、システムプログラムの区別など）、（２）プログラム解析・検証ツールが稼働する実行環境（オペレーティングシステムやライブラリの種類・バージョン、必要となる計算資源、すなわちＣＰＵの速度や種類、メモリやディスクのサイズなど）、などを指定するときに利用することが想定される。
【００４８】
登録要求を受け取ったコントローラ３１は、新たに仮想マシン（初期仮想マシン）を生成する（Ｅ２）。このとき、コントローラ３１は、登録要求に指定されたタグに応じて、（オペレーティングシステムの種類やバージョン、メモリやディスクのサイズなどを調整した、適切な仮想マシン（初期仮想マシン）を作成する。なお、本実施の形態では、プログラム解析・検証ツールが導入、設定される前の状態の仮想マシンを「初期仮想マシン」と記すものとする。
【００４９】
ここで、頻出するタグ指定の組合せに対しては、事前に適切なオペレーティングシステムやライブラリが導入された半完成状態の仮想マシン（初期仮想マシン）を生成して保存しておき、仮想マシンの生成時にはそれを単純にコピーしてもよい。これにより、仮想マシンの生成のコストを減らすことができる。
【００５０】
次に、ツール提供者は、コントローラ３１を経由して生成された仮想マシン（初期仮想マシン）を、仮想マシン実行環境３３上で実行し、その仮想マシン（初期仮想マシン）にプログラム解析・検証ツールを導入・設定する（Ｅ３）。このように、登録要求に指定されたタグに基づいて適切なオペレーティングシステムやライブラリ等が仮想マシン（初期仮想マシン）にあらかじめ用意される。これにより、プログラム解析・検証ツールの導入・設定は、ツール提供者が普段行っている導入・設定手順とほぼ同様に行え、実行環境に対応させるためにプログラム解析・検証ツールを修正したり、外部システムとデータをやりとりするために特別な仕組みを用意したりといった余計な手間を、ツール提供者に掛けずにすむ。
【００５１】
最後に、コントローラ３１は登録要求に指定されたタグと紐付けて、ツール提供者によってプログラム解析・検証ツールが導入・設定されたツールイメージを含む仮想マシンＴをリポジトリ３２に保存する（Ｅ４）
図７は、ツール管理サブシステム３０の構成および解析・検証実行サブシステム１０からのプログラム解析・検証ツールのイメージを含む仮想マシンＴの取得要求処理の流れを表したブロック図である。
【００５２】
解析・検証実行サブシステム１０から仮想マシンＴの取得要求を受け付けると（Ｆ１；ツール取得ステップ）、コントローラ３１は、取得要求に指定されたタグに基づいてリポジトリ３２を検索し（Ｆ２、Ｆ３；ツール抽出ステップ）、得られた仮想マシンＴを解析・検証実行サブシステム１０へ送付する（Ｆ４；ツール取得ステップ）。
【００５３】
（３．実施例の詳細）
ここでは、プログラム解析・検証サービス提供システム１の一実施例について詳細に説明する。
【００５４】
（３．１．構成）
図１および図８〜図１０を参照して、プログラム解析・検証サービス提供システム１の構成について説明する。図１は、プログラム解析・検証サービス提供システム１の構成を示す機能ブロック図である。図８〜図１０は、プログラム解析・検証サービス提供システム１において用いられるデータの説明図である。なお、以下の説明中、図２〜図７も適宜参照する。
【００５５】
プログラム解析・検証サービス提供システム１は、プログラム解析・検証ツールの利用者が、対象プログラムＰを、ツール提供者によって提供されるプログラム解析・検証ツールを用いて解析、検証するサービスを提供するものである。
【００５６】
図１に示すように、プログラム解析・検証サービス提供システム１は、解析・検証部（プログラム解析・検証装置）１００、対象プログラム管理部（プログラム解析・検証対象プログラム管理装置）２００、ツール管理部（プログラム解析・検証ツール管理装置）３００を備えて構成されている。なお、プログラム解析・検証サービス提供システム１は、１台の装置によって構成されていても良い。すなわち、解析・検証部１００、対象プログラム管理部２００、ツール管理部３００が、１台の装置に実装されていてもよい。また、プログラム解析・検証サービス提供システム１は、複数台の装置によって構成されていても良い。すなわち、解析・検証部１００、対象プログラム管理部２００、ツール管理部３００が、２台以上の装置に分散して実装されていてもよい。
【００５７】
また、解析・検証部１００、対象プログラム管理部２００、ツール管理部３００は、図２〜図７に示した、解析・検証実行サブシステム１０、対象プログラム管理サブシステム２０、ツール管理サブシステム３０にそれぞれ対応する。
【００５８】
なお、本実施の形態では、プログラム解析・検証サービス提供システム１が外部と入出力する情報および内部で処理する情報は、タグの形式で記述されている場合を例として説明するが、タグを用いた記述形式に限定されるものではない。
【００５９】
（３．１．１．解析・検証部）
まず、解析・検証部１００は、利用者から対象プログラムＰの解析、検証の実行要求を受け付け、その実行要求に従って、対象プログラムＰおよびプログラム解析・検証ツール（仮想マシンＴ）を取得して、解析、検証を実行し、解析・検証結果データＲを保存する機能を有する（図２）。また、解析・検証部１００は、利用者から結果取得要求を受け付け、保存しておいた解析・検証結果データＲを利用者に提示する機能を有する（図３）。
【００６０】
そのため、解析・検証部１００は、図１に示すように、解析・検証制御部１１０、仮想マシン実行環境部（ツール実行手段）１２０、データ記憶部１３０を備えている。なお、解析・検証制御部１１０、仮想マシン実行環境部１２０、データ記憶部１３０は、図２〜図３に示した、解析・検証実行サブシステム１０のコントローラ１１、仮想マシン実行環境１２、リポジトリ１３にそれぞれ対応する。
【００６１】
上記解析・検証制御部１１０は、解析・検証部１００の全体を制御する。詳細には、解析・検証制御部１１０は、利用者インターフェース部（ツール指定情報取得手段）１１１と、ツール実行制御部１１２と、データ管理部１１３と、対象プログラム取得部（対象プログラム取得手段）１１４と、ツール取得部（ツール取得手段）１１５とを備える。
【００６２】
利用者インターフェース部１１１は、利用者に対して操作画面を提示し、入力を受け付けるユーザインターフェースを提供する。利用者インターフェース部１１１は、ユーザの操作をキーボードやマウス等の入力装置から直接受け付けるものであってもよいし、インターネット等の通信を介して間接的に受け付けるものであってもよい。
【００６３】
具体的には、利用者インターフェース部１１１は、利用者から操作を受け付ける際、利用者の識別情報のタグ（利用者識別情報）、利用者の権限を示すタグ（利用者権限情報）を取得する。
【００６４】
また、利用者インターフェース部１１１は、利用者から実行要求を受け付ける（図２のＡ１）。実行要求には、どの対象プログラムＰに対して解析・検証を行うかを示すタグ（対象プログラム指定情報）、どのプログラム解析・検証ツール（仮想マシンＴ）を用いるかを指定するタグ（ツール指定情報）が含まれる。このツール指定情報は、対象プログラム取得部１１４が取得した対象プログラムＰの解析、検証に用いるプログラム解析・検証ツール（仮想マシンＴ）を指定するものである。
【００６５】
また、利用者インターフェース部１１１は、利用者から結果取得要求を受け付ける（図３のＢ１）。結果取得要求には、実行要求と同様のタグが含まれる。なお、結果取得要求では、ツール指定情報は省略可能である。
【００６６】
ツール実行制御部１１２は、利用者インターフェース部１１１が利用者から受け付けた実行要求に基づき、対象プログラムＰの解析・検証を行う。具体的には、ツール実行制御部１１２は、対象プログラム取得部１１４を制御して、対象プログラム指定情報に基づき対象プログラムＰを取得する（図２のＡ２−ａ、Ａ３−ａ；対象プログラム取得ステップ）。また、ツール実行制御部１１２は、ツール取得部１１５を制御して、ツール指定情報に基づき、プログラム解析・検証ツールのイメージを含む仮想マシンＴを取得する（図２のＡ２−ｂ、Ａ３−ｂ；ツール取得ステップ）。また、ツール実行制御部１１２は、仮想マシン実行環境部１２０に、取得した仮想マシンＴ上で、取得した対象プログラムＰを実行させて、プログラムの解析・検証を行わせる（図２のＡ４；ツール実行ステップ）。なお、仮想マシンＴ上での対象プログラムＰの解析・検証は、仮想マシンＴ上で対象プログラムＰを実行させて行うことが可能であるが、実行させずに行うことも可能である。さらに、ツール実行制御部１１２は、仮想マシン実行環境部１２０での解析・検証の終了後、その結果を受け取り（図２のＡ５）、データ管理部１１３を制御して、その結果（解析・検証結果データＲ）を実行要求のタグと対応付けて、データ記憶部１３０に保存させる（図２のＡ６）。
【００６７】
なお、ツール実行制御部１１２は、仮想マシン実行環境部１２０等の稼働状況（ＣＰＵ利用率やメモリ利用率、外部記憶利用率など）に応じて、利用者からの実行要求がなくても、図２の（Ａ２）以降の手順をあらかじめ行っておくことが可能である。この場合、データ記憶部１３０に結果（解析・検証結果データＲ）を保存する際に対応付けるタグは、対象プログラムＰ自身にタグ付けられたタグおよび仮想マシンＴ自身に付けられたタグとする。
【００６８】
ツール実行制御部１１２は、利用者インターフェース部１１１が利用者から受け付けた結果取得要求に基づき、データ管理部１１３を制御して、データ記憶部１３０に保存させている解析・検証結果データＲを取得し、利用者インターフェース部１１１に利用者に対して提示させる（図３のＢ１〜Ｂ４）。具体的には、解析・検証結果データＲの上記取得は、結果取得要求に含まれるタグにより依頼管理データベースＤＢｉを検索し、該当した解析・検証結果データＲ（すなわち、当該タグに紐付けされている解析・検証結果データＲ）をデータ記憶部１３０から取得することによって行う。
【００６９】
データ管理部１１３は、利用者から実行要求を受け付けたとき、含まれるタグの内容を、データ記憶部１３０の依頼管理データベースＤＢｉに格納する。また、データ管理部１１３は、解析・検証結果データＲをデータ記憶部１３０に格納する。このとき、依頼管理データベースＤＢｉに、解析・検証結果データＲの識別情報（結果データ識別情報）、実行要求のタグの情報に対応付けて格納する。また、データ管理部１１３は、利用者から結果取得要求を受け付けたとき、含まれるタグの内容に対応する解析・検証結果データＲをデータ記憶部１３０から読み出す。
【００７０】
対象プログラム取得部１１４は、対象プログラム管理部２００へ対象プログラム指定情報を含む対象プログラム取得要求を送信し（図２のＡ２−ａ）、その応答として、対象プログラムＰを取得する（図２のＡ３−ａ）。
【００７１】
ツール取得部１１５は、ツール管理部３００へツール指定情報を含む仮想マシン（ツールイメージ）取得要求を送信し（図２のＡ２−ｂ）、その応答として、プログラム解析・検証ツール（仮想マシンＴ）を取得する（図２のＡ３−ｂ）。
【００７２】
さらに、上記仮想マシン実行環境部１２０は、ツール取得部１１５が取得した仮想マシンＴ上で、対象プログラム取得部１１４が取得した対象プログラムＰを動作させることによって、対象プログラムＰを解析、検証する（図２のＡ４）。
【００７３】
データ記憶部１３０は、依頼管理データベースＤＢｉ、解析・検証結果データＲを格納する。図８に示すように、依頼管理データベースＤＢｉには、１レコードに、利用者識別情報、利用者権限情報、対象プログラム指定情報、ツール指定情報、結果データ識別情報が格納されている。解析・検証結果データＲは、結果データ識別情報によって、他の情報と対応付けられている。
【００７４】
ここで、図８に基づいて、依頼管理データベースＤＢｉに登録される各情報について、具体的に説明する。
【００７５】
・利用者識別情報は、利用者の識別情報である。記述例の“USER_A, USER_B”は、利用者A、利用者Bに割当てられるタグを表す。
【００７６】
・利用者権限情報は、利用者のアクセス権限である。記述例の“GROUP_AB”は、利用者A・Bで対象プログラムＰおよびプログラム解析・検証ツール（仮想マシンＴ）を共有するためのグループ権限を示すタグを表す。また、“PUBLIC”は、任意の利用者がアクセス可能なことを示すタグを表す。また、“ADMIN”は、管理者のみがアクセス可能なことを示すタグを表す。
【００７７】
・対象プログラム指定情報は、解析・検証を行う対象である対象プログラムＰを指定する情報である。対象プログラム指定情報は、対象プログラム管理データベースＤＢｐの対象プログラム識別情報と対象プログラム関連情報との和に相当する。記述例の“OBJP_ID_1, C,SYSTEM_PROG”は、「識別情報OBJP_ID_1を持ち、Ｃ言語プログラムであり、プログラムの種類がシステムプログラムである」対象プログラムを表す。
【００７８】
・ツール指定情報は、解析・検証に用いるプログラム解析・検証ツール（仮想マシンＴ）を指定する情報である。ツール指定情報は、ツール管理データベースＤＢｔのツール識別情報とツール関連情報との和に相当する。記述例の“TOOL_ID_0, C, USER_PROG,SYSTEM_PROG, CPU_SPEED_2G,MEM_MAX_1G”は、「識別情報TOOL_ID_0を持ち、ユーザプログラムとシステムプログラムを対象にした検証が可能であり、ＣＰＵの周波数が２ＧＨｚで、メモリを最大で１Ｇ使用する」プログラム解析・検証ツール（仮想マシンＴ）を表す。
【００７９】
・結果データ識別情報は、解析・検証の結果データ（解析・検証結果データＲ）の識別情報である。記述例の“RESULT_0,RESULT_1”は、解析・検証の結果データを参照するための識別情報を表す。
【００８０】
なお、依頼管理データベースＤＢｉに、さらに、実行要求を直接特定する情報（例えば、連番や要求の発行日時）を設けてもよい。ただし、依頼管理データベースＤＢｉに対して、対象プログラム指定情報とツール指定情報、すなわち、対象プログラムＰとプログラム解析・検証ツール（仮想マシンＴ）が一意に指定されていれば、実行要求を特定することができるので、上記の情報は必須ではない。
【００８１】
（３．１．２．対象プログラム管理部）
対象プログラム管理部２００は、利用者から対象プログラムＰの登録要求を受け付け、その登録要求に従って、対象プログラムＰを取得して、保存する機能を有する（図４）。また、対象プログラム管理部２００は、解析・検証部１００から対象プログラム取得要求を受け付け、保存しておいた対象プログラムＰを解析・検証部１００へ送付する機能を有する（図５）。
【００８２】
そのため、対象プログラム管理部２００は、図１に示すように、対象プログラム管理制御部２１０、対象プログラム記憶部２２０を備えている。なお、対象プログラム管理制御部２１０、対象プログラム記憶部２２０は、図４〜図５に示した、対象プログラム管理サブシステム２０のコントローラ２１、リポジトリ２２にそれぞれ対応する。
【００８３】
上記対象プログラム管理制御部２１０は、対象プログラム管理部２００の全体を制御する。詳細には、対象プログラム管理制御部２１０は、利用者入力部２１１と、対象プログラム取得部２１２と、対象プログラム登録・検索部２１３と、対象プログラム送付部２１４とを備える。
【００８４】
利用者入力部２１１は、利用者に対して操作画面を提示し、入力を受け付けるユーザインターフェースを提供する。利用者入力部２１１は、ユーザの操作をキーボードやマウス等の入力装置から直接受け付けるものであってもよいし、インターネット等の通信を介して間接的に受け付けるものであってもよい。
【００８５】
具体的には、利用者入力部２１１は、利用者から操作を受け付ける際、利用者の識別情報のタグ（利用者識別情報）、利用者の権限を示すタグ（利用者権限情報）を取得する。
【００８６】
また、利用者入力部２１１は、利用者から対象プログラムＰの登録要求を受け付ける（図４のＣ１）。登録要求には、利用者が指定したタグ（対象プログラム関連情報）と、対象プログラムＰの送付方法の指定（送付方法指定情報）のタグと、解析・検証を行う対象である対象プログラムＰの識別情報（対象プログラム識別情報）が含まれる。
【００８７】
対象プログラム取得部２１２は、利用者入力部２１１が利用者から受け付けた登録要求に基づき、対象プログラムＰを取得する。具体的には、登録要求に含まれる送付方法指定情報が「直接送付」である場合には、利用者が送信する対象プログラムＰを取得する（図４のＣ２）。また、登録要求に含まれる送付方法指定情報が「インポート」である場合には、外部システム（バージョン管理システムなど）から対象プログラムＰを取得する（図４のＣ２−１、Ｃ２−２）。
【００８８】
対象プログラム登録・検索部２１３は、利用者入力部２１１が利用者から登録要求を受け付けたとき、含まれるタグの内容を、対象プログラム記憶部２２０の対象プログラム管理データベースＤＢｐに格納する（図４のＣ３）。また、対象プログラム登録・検索部２１３は、対象プログラム取得部２１２が取得した対象プログラムＰを対象プログラム記憶部２２０に格納する（図４のＣ３）。このとき、対象プログラム管理データベースＤＢｐに、対象プログラムＰの識別情報（対象プログラム識別情報）、登録要求のタグの情報に対応付けて格納する。
【００８９】
また、対象プログラム登録・検索部２１３は、解析・検証部１００から対象プログラム取得要求を受け付けたとき、対象プログラム管理データベースＤＢｐを参照して、対象プログラム取得要求に含まれる対象プログラム指定情報（対象プログラム識別情報と対象プログラム関連情報の和）に対応する対象プログラムＰを対象プログラム記憶部２２０から読み出す（図５のＤ１〜Ｄ４）。
【００９０】
対象プログラム送付部２１４は、解析・検証部１００から対象プログラム識別情報を含む対象プログラム取得要求を受信し（図５のＤ１）、その応答として、対象プログラムＰを解析・検証部１００へ送信する（図５のＤ４）。
【００９１】
対象プログラム記憶部２２０は、対象プログラム管理データベースＤＢｐ、対象プログラムＰを格納する。図９に示すように、対象プログラム管理データベースＤＢｐには、１レコードに、利用者識別情報、利用者権限情報、対象プログラム関連情報、送付方法指定情報、対象プログラム識別情報が格納されている。対象プログラムＰは、対象プログラム識別情報によって、他の情報と対応付けられている。
【００９２】
ここで、図９に基づいて、対象プログラム管理データベースＤＢｐに登録される各情報について、具体的に説明する。
【００９３】
・利用者識別情報は、利用者の識別情報である。記述例の“USER_A, USER_B”は、利用者A、利用者Bに割当てられるタグを表す。
【００９４】
・利用者権限情報は、利用者のアクセス権限である。記述例の“GROUP_AB”は、利用者A・Bで対象プログラムＰおよびプログラム解析・検証ツール（仮想マシンＴ）を共有するためのグループ権限を示すタグを表す。また、“PUBLIC”は、任意の利用者がアクセス可能なことを示すタグを表す。また、“ADMIN”は、管理者のみがアクセス可能なことを示すタグを表す。
【００９５】
・対象プログラム関連情報は、利用者が任意の内容で任意の個数指定できる情報である。対象プログラム関連情報としては、例えば、対象プログラムＰで用いられているプログラミング言語の種類、プログラムの種類（ユーザプログラム、システムプログラムの区別など）などが記述できる。記述例には、「プログラミング言語の種類」および「プログラムの種類」が例として挙げられている。プログラミング言語の種類の例である“Java, C, C++,OCaml”は、対象プログラムがどんなプログラミング言語で記述されているかを表すタグの種類を例示している。また、プログラムの種類の例である“USER_PROG, SYSTEM_PROG, LIBRARY”は、対象プログラムの種類（ユーザプログラム、システムプログラム、ライブラリなど）を例示している。
【００９６】
・送付方法指定情報は、対象プログラムＰの送付方法の指定、例えば、利用者から直接送付されるのか、外部システムからインポートされるのかが記述される。記述例の“DIRECT_UPLOAD”は、対象プログラムＰが直接利用者からアップロードされていることを示すタグを表す。また、“IMPORT_git://XX…”は、対象プログラムＰを外部のレポジトリ（ここでは、git://XXX…）から取得する、もしくは、取得したことを示すタグを表す。
【００９７】
・対象プログラム識別情報は、解析・検証を行う対象である対象プログラムＰの識別情報を示す。記述例の“OBJP_ID_0, OBJP_ID_1”は、保存してある対象プログラムＰを参照するための識別情報を示すタグを表す。
【００９８】
（３．１．３．ツール管理部）
ツール管理部３００は、ツール提供者からプログラム解析・検証ツールの登録要求を受け付け、その登録要求に従って、プログラム解析・検証ツールを導入、設定した仮想マシンＴを生成して、保存する機能を有する（図６）。また、ツール管理部３００は、解析・検証部１００から仮想マシン取得要求を受け付け、このとき取得したツール指定情報に基づいて検索して抽出された仮想マシンＴを解析・検証部１００へ送付する機能を有する（図７）。
【００９９】
そのため、ツール管理部３００は、図１に示すように、ツール管理制御部３１０、ツール記憶部３２０を備えている。なお、ツール管理制御部３１０、ツール記憶部３２０は、図６〜図７に示した、ツール管理サブシステム３０のコントローラ３１、リポジトリ３２にそれぞれ対応する。そして、ツール管理サブシステム３０の仮想マシン実行環境３３については、図１のツール管理部３００では、ツール管理制御部３１０の仮想マシン生成部３１２が対応する機能を有するものとする。
【０１００】
上記ツール管理制御部３１０は、ツール管理部３００の全体を制御する。詳細には、ツール提供者入力部３１１と、仮想マシン生成部（仮想マシン生成手段）３１２と、ツール登録・検索部（ツール抽出手段）３１３と、ツール送付部３１４とを備える。
【０１０１】
ツール提供者入力部３１１は、ツール提供者に対して操作画面を提示し、入力を受け付けるユーザインターフェースを提供する。ツール提供者入力部３１１は、ユーザの操作をキーボードやマウス等の入力装置から直接受け付けるものであってもよいし、インターネット等の通信を介して間接的に受け付けるものであってもよい。
【０１０２】
具体的には、ツール提供者入力部３１１は、ツール提供者から操作を受け付ける際、ツール提供者の識別情報のタグ（ツール提供者識別情報）を取得する。
【０１０３】
また、ツール提供者入力部３１１は、ツール提供者からプログラム解析・検証ツールの登録要求を受け付ける（図６のＥ１）。登録要求には、ツール提供者が指定したタグ（ツール関連情報）と、プログラム解析・検証ツールの識別情報（ツール識別情報）のタグが含まれる。なお、ツール識別情報は、解析・検証に用いるプログラム解析・検証ツールが導入・設定されたツールイメージを含む仮想マシンＴの識別情報として使われる。また、ツール提供者入力部３１１は、登録要求に伴い、プログラム解析・検証ツールを受け付ける（図６のＥ３）。
【０１０４】
仮想マシン生成部３１２は、プログラム解析・検証ツールを導入、設定した仮想マシンＴを、プログラム解析・検証ツール毎に生成する（図６のＥ２）。仮想マシンＴの生成には、登録要求に含まれるツール関連情報が、プログラム解析・検証ツールを仮想マシンに導入、設定するためのデータとして使われる。仮想マシン生成部３１２は、初期仮想マシン生成部３１２１と、ツール導入部３１２２とを備える。
【０１０５】
初期仮想マシン生成部３１２１は、ツール関連情報に基づいて、プログラム解析・検証ツールが導入、設定される前の状態の仮想マシン（初期仮想マシン）を生成する。これにより、例えば、プログラム解析・検証ツールが扱うことができるプログラミング言語の種類やプログラムの種類（ユーザプログラム、システムプログラムの区別など）、プログラム解析・検証ツールが稼働する実行環境（オペレーティングシステムやライブラリの種類・バージョン、必要となる計算資源、すなわちＣＰＵの速度や種類、メモリやディスクのサイズなど）に適合した初期仮想マシンが得られる。
【０１０６】
ツール導入部３１２２は、初期仮想マシン生成部３１２１が生成した仮想マシン（初期仮想マシン）を実行し、ツール提供者の指示等に基づいて、プログラム解析・検証ツールを導入、設定する（図６のＥ３）。
【０１０７】
ツール登録・検索部３１３は、ツール提供者入力部３１１がツール提供者から登録要求を受け付けたとき、含まれるタグの内容を、ツール記憶部３２０のツール管理データベースＤＢｔに格納する（図６のＥ４）。また、ツール登録・検索部３１３は、仮想マシン生成部３１２が生成した仮想マシンＴをツール記憶部３２０に格納する（図４のＣ３）。このとき、ツール登録・検索部３１３は、仮想マシンＴをツールイメージのデータとしてツール記憶部３２０に格納する。
【０１０８】
また、ツール登録・検索部３１３は、ツール管理データベースＤＢｔに、仮想マシンＴの識別情報（ツール識別情報）等に対応付けて格納する。また、ツール登録・検索部３１３は、解析・検証部１００から仮想マシン（ツールイメージ）取得要求を受け付けたとき、ツール管理データベースＤＢｔを参照して、仮想マシン（ツールイメージ）取得要求に含まれるツール指定情報に適合したツール関連情報を検索する。そして、ツール指定情報に適合したツール関連情報に対応する仮想マシン（ツールイメージ）Ｔをツール記憶部３２０から読み出す（図７のＦ１〜Ｆ４）。
【０１０９】
ツール送付部３１４は、解析・検証部１００からツール指定情報を含む仮想マシン（ツールイメージ）取得要求を受信し（図７のＦ１）、その応答として、ツール登録・検索部３１３によって抽出された１または複数の仮想マシンＴを解析・検証部１００へ送信する（図７のＦ４）。
【０１１０】
ツール記憶部３２０は、ツール管理データベースＤＢｔ、仮想マシン（イメージデータ）Ｔを格納する。図１０に示すように、ツール管理データベースＤＢｔには、１レコードに、ツール提供者識別情報、ツール関連情報、ツール識別情報が格納されている。仮想マシン（イメージデータ）Ｔは、ツール識別情報によって、他の情報と対応付けられている。
【０１１１】
ここで、図１０に基づいて、ツール管理データベースＤＢｔに登録される各情報について、具体的に説明する。
【０１１２】
・ツール提供者識別情報は、ツール提供者の識別情報である。記述例の“USER_A, USER_B”は、利用者A、利用者Bに割当てられるタグを表す。
【０１１３】
・ツール関連情報は、ツール提供者が任意の内容で任意の個数指定できる情報である。ツール関連情報としては、例えば、プログラム解析・検証ツール（仮想マシンＴ）が扱うことができるプログラミング言語の種類やプログラムの種類（ユーザプログラム、システムプログラムの区別など）、プログラム解析・検証ツール（仮想マシンＴ）が稼働する実行環境（オペレーティングシステムやライブラリの種類・バージョン、必要となる計算資源（ＣＰＵの速度や種類、メモリやディスクのサイズなど）などが記述できる。記述例には、「プログラミング言語の種類」、「プログラムの種類」、「実行環境・計算資源」が例として挙げられている。プログラミング言語の種類の例である“Java, C, C++, OCaml”は、プログラム解析・検証ツール（仮想マシンＴ）がどんなプログラミング言語で記述されたプログラムを対象としているかを示すタグの種類を例示している。また、プログラムの種類の例である“USER_PROG, SYSTEM_PROG, LIBRARY”は、プログラム解析・検証ツール（仮想マシンＴ）が解析・検証の対象とできるプログラムの種類（ユーザプログラム、システムプログラム、ライブラリなど）を例示している。また、実行環境・計算資源の例である“OS_Linux 3.X, LIB_libgplk_1.X, CPU_KIND_X86, CPU_SPEED_2G, CPU_NUM_8, MEM_MAX_1G, DISK_MAX_4G”は、プログラム解析・検証ツール（仮想マシンＴ）が実行可能な実行環境・計算資源の種類を例示している。この場合、ＯＳはLinux 3.X、ライブラリとしてlibgplk 1.X、ＣＰＵの種類としてX86、実行周波数として２ＧＨｚ、ＣＰＵのコア数が８つまで、使用する最大のメモリの量が１ＧＢ、ディスクの量が４Ｇであることを表している。
【０１１４】
・ツール識別情報は、解析・検証に用いるプログラム解析・検証ツール（仮想マシンＴ）が導入・設定されたツールイメージを含む仮想マシンＴの識別情報である。記述例の“TOOL_ID_0, TOOL_ID_1”は、保存してあるプログラム解析・検証ツール、より具体的には、プログラム解析・検証ツールが導入・設定されたツールイメージを含む仮想マシンＴを参照するための識別情報である。
【０１１５】
（４．従来技術との比較）
ここでは、本実施の形態に係るプログラム解析・検証サービス提供システム１と、従来技術、特にウイルス解析・検査サイト（非特許文献１）との違いについて、〔発明が解決しようとする課題〕として挙げた問題ごとに説明する。
【０１１６】
（１）プログラム解析・検証ツールが要する計算資源の肥大化
この問題については、従来のウイルス解析・検査サイトは、利用者が計算資源を用意する必要はないが、解析・検証ツールの提供者が独自に計算資源を用意したり、また新たにＷｅｂインターフェースを作成したりする必要がある。
【０１１７】
これに対し、上記プログラム解析・検証サービス提供システム１では、複数のプログラム解析・検証ツールの提供者間で計算資源を共有することができるため、ツール提供者の負担が大きく軽減される。また、ツール提供者は、（２．３．ツール管理サブシステムの一実装例）で述べたように、あらかじめ用意された仮想マシンに対してプログラム解析・検証ツールの導入・設定を行うだけでよいため、新たにＷｅｂインターフェースなどを作成するなどの余計な手間も掛ける必要がない。
【０１１８】
（２）プログラム解析・検証ツールの種類の多様化
この問題については、非特許文献１に記載されているとおり、多数のウイルス解析・検査サイトが存在するが、個々のサイトは異なるツール提供者によって独自に運営されており、統一的なインターフェースは存在しない。そのため、プログラム解析・検証ツールの利用者にとって、どのプログラム解析・検証ツールを選択すれば良いか、すなわち、どのウイルス解析・検査サイトを選択すれば良いかを判断することが困難である。
【０１１９】
（３）プログラム解析・検証ツールの導入・運用の手間・コスト
この問題についても同様に、多数のウイルス解析・検査サイトが異なるツール提供者によって独自に運営されており、統一的なインターフェースも存在しないため、複数のサイトを効率よく利用して、解析・検証を行ったり、その結果を収集・比較したりすることは困難である。
【０１２０】
この問題の簡単な回避策として、複数のプログラム解析・検証サイトをバックエンドとして利用し、フロントエンドに統一的なインターフェースを提供するサイトを設けることが考えられる。すなわち、利用者から対象プログラムを受け取り、それを複数のプログラム解析・検証サイトに送付し、結果を収集して利用者に送付する方法である。
【０１２１】
しかし、以下に述べるとおり、この方法でも依然として問題が残る。まず、単純に複数のプログラム解析・検証サイトに対象プログラムを送るだけでは、利用者が必要としているプログラム解析・検証ツールを提供するプログラム解析・検証サイト以外のサイトにも送られてしまう。その結果、解析・検証の効率が悪く、また解析・検証の結果も膨大となり、比較検討が容易ではなくなる。これに対して、上記プログラム解析・検証サービス提供システム１では、（２．プログラム解析・検証ツールの共有のためのシステムの実装例）で述べたように、対象プログラムやプログラム解析・検証ツールをタグ付けして管理して、必要なプログラム解析・検証ツールを効率的に選択できるようになっている。
【０１２２】
また、別の問題として、単純に複数のプログラム解析・検証サイトに対象プログラムを送るだけでは、解析・検証の結果は利用者が保存・管理しなければならず、利用者にとって計算資源の負担が大きくなるか、または同じ解析・検証を不要に繰返すことになる可能性がある。これに対し、上記プログラム解析・検証サービス提供システム１では、（２．プログラム解析・検証ツールの共有のためのシステムの実装例）で述べたように、解析・検証の結果をリポジトリに統一的に保存し、タグ付けを利用した結果の検索などを行えるようになっている。
【０１２３】
さらに、複数のサイトをバックエンドとして用いる手法では、（１）（４）の問題にも対処できない。
【０１２４】
（４）プログラム解析・検証ツール自体のテストの困難さ
この問題に対しては、まず、個々の解析・検証ツールの提供者が準備できる計算資源には限界があり、実際に解析・検証を行える対象のサイズや複雑さには限界がある。そのため、解析・検証ツール自体のテストが困難であるという問題は、従来のウイルス解析・検査サイトにもある。
【０１２５】
これに対し、上記プログラム解析・検証サービス提供システム１では、複数のプログラム解析・検証ツールの提供者の間で計算資源を共有する。その結果、よりサイズが大きく複雑な対象を解析・検証できるため、プログラム解析・検証ツール自体のテストをより厳密に行うことができる。また、解析・検証対象のプログラムを複数のプログラム解析・検証ツールで共有することができるため、より多くの対象についてプログラム解析・検証ツールのテストを行える。
【０１２６】
以上のように、従来のウイルス解析・検査サイトは、利用者が解析・検査のための計算資源を用意したり、解析・検査ソフトウェアを導入したりする手間がかからないという利点があるが、本発明が解決しようとする課題（（１）〜（４））をそのまま問題点として有している。
【０１２７】
（５．多段階の解析・検証への応用など）
上記の記載では、プログラム解析・検証サービス提供システム１がプログラム解析・検証ツールを用いて、対象プログラムを１段階で解析・検証する場合について説明した。しかしながら、プログラム解析・検証サービス提供システム１は、多段階の解析・検証によって対象プログラムの解析・検証を行う場合にも、好適に利用することができる。
【０１２８】
そして、例えば、プログラム解析・検証ツールを用いて対象プログラムを解析・検証した後に、当該解析・検証で得た結果データに対してさらに解析・検証を行う場合には、各段階の解析・検証を行うツール指定情報、およびツール関連情報を対象プログラム、あるいは結果データに対して適切にタグ付けすることが好ましい。すなわち、プログラム解析・検証サービス提供システム１では、各段階の解析・検証等においてもタグを用いることで、多段階の解析・検証の工程を経て対象プログラムの解析・検証を行う場合も効率的に処理することができる。
【０１２９】
まず、プログラム解析・検証サービス提供システム１において、タグを各段階の解析・検証に用いて、多段階の解析・検証によって対象プログラムを解析・検証する例を以下に示す。
【０１３０】
ここでは、プログラム解析・検証サービス提供システム１が、対象プログラムをプログラム解析・検証ツールを用いて解析・検証する処理と、当該処理によって得た結果データに対する解析・検証（後処理）を連続して行う場合について説明する。
【０１３１】
まず、仮想マシン実行環境部（ツール実行手段）１２０がプログラム解析・検証ツールを用いて対象プログラムを解析・検証して得た結果データを、結果データの特徴記述情報（タグ）と対応付けて、データ記憶部（結果データ記憶部）１３０に格納する。一方、ツール記憶部３２０は結果データを解析・検証するプログラム解析・検証ツール（後処理ツール）を当該解析・検証ツール関連情報と対応付けてツール記憶部３２０に格納している。
【０１３２】
次に、利用者インターフェース部（ツール指定情報取得手段）１１１は、データ記憶部１３０から、結果データに対応付けられた特徴記述情報を、当該ツール指定情報として取得する。
【０１３３】
ツール登録・検索部（ツール抽出手段）３１３は、利用者インターフェース部１１１が取得したツール指定情報に基づいて、ツール関連情報を検索し、適合したツール関連情報と対応付けられた後処理ツールを、ツール記憶部３２０に格納された複数の後処理ツールの中から抽出する。
【０１３４】
そして、プログラム解析・検証サービス提供システム１は、上記のように抽出された後処理ツールを用いて、対象プログラムを解析・検証する処理の結果データに対する解析・検証（後処理）を連続して行う。
【０１３５】
上記の例で、解析・検証をする処理の結果データに好適に付けられる特徴記述情報（タグ）としては、例えば、データの種類を表すタグ（例えば、"execution_path"（実行パスを表す)、"execution_trace"（実行トレースを表す）、"program_point"（プログラム中の実行ポイントを表す））などが考えられる。また、データ解析ツールに対しても、プログラム解析・検証と同様に、ツール指定情報（タグ）を付けることができる。
【０１３６】
なお、対象プログラムを解析・検証する処理段階の数は２段階に限定されることはなく、任意の数の処理段階を用いた処理であってもよい。
【０１３７】
また、ここではプログラム解析・検証サービス提供システム１がプログラム解析・検証ツールを用いて対象プログラムに対して解析・検証する処理を行った結果データを、続けて解析・検証する場合について説明したが、他のシステムにおいて解析・検証を行った結果のデータに対して、プログラム解析・検証サービス提供システム１が解析・検証を行う場合にも、本発明を適用することができる。つまり、多段階の解析・検証を行う処理において、プログラム解析・検証サービス提供システム１がその解析・検証の処理をすべて行ってもよいし、各段階の処理を他のシステムが分担して行うようにすることも可能である。
【０１３８】
具体的には、他のシステムが解析の結果として出力した実行パスをもとに、プログラム解析・検証サービス提供システム１がより精度の高い解析・検証を行う場合などが挙げられる。
【０１３９】
プログラム解析・検証サービス提供システム１のプログラム解析・検証ツールではない、他のシステムのプログラム解析・検証ツールが対象プログラムを解析・検証した場合も、その解析・検証の結果として出力された結果データにタグ（特徴記述情報）付けを行うことで、データ解析ツールによる当該結果のデータを解析・検証することができる。
【０１４０】
すなわち、他のシステムのプログラム解析・検証ツールが対象プログラムを解析・検証した場合においても、出力される解析・検証結果のデータにタグ付けを行い、保存しておくことで、本発明の枠組みを利用することが可能である。
【０１４１】
さらに、本発明は、上記のような、対象プログラムの解析・検証、および出力される解析・検証結果のデータを対象にした解析・検証の処理（後処理）に限定的に適用されるものではない。例えば、対象プログラムの解析・検証を行うために前処理が必要である場合においても、タグ付けを好適に応用することが可能である。
【０１４２】
次に、プログラム解析・検証サービス提供システム１が解析・検証する対象プログラムを、前処理前プログラムに対して前処理を行う例を以下に示す。
【０１４３】
プログラム解析・検証ツールの種類によっては、プログラム（前処理前プログラム）に対して前処理を行った結果として対象プログラム（前処理後プログラム）とする必要がある場合が想定される。
【０１４４】
すなわち、まず第１段階として、前処理ツール（ツール）を用いて前処理前プログラムに対して前処理を行った結果である対象プログラムを出力し、対象プログラム記憶部（前処理後プログラム記憶部）２２０に当該対象プログラムを記憶する。次に第２段階として、当該前処理によって得た対象プログラムに対してプログラム解析・検証ツールを用いて解析・検証する処理を連続して行う。
【０１４５】
この場合には、前処理前のプログラムを前処理することで得た対象プログラムは、対象プログラムの特徴記述情報（タグ）と対応付けて対象プログラム記憶部（前処理後プログラム記憶部）２２０に格納される。
【０１４６】
次に、対象プログラム取得部１１４は、対象プログラム記憶部２２０から対象プログラムを取得する。一方、利用者インターフェース部（ツール指定情報取得手段）１１１は、対象プログラム記憶部２２０から対象プログラムが取得した対象プログラムに対応付けられた特徴記述情報を、ツール指定情報として取得する。
【０１４７】
このように、あるプログラムの解析・検証を行うために、プログラムの前処理を必要とする処理としては、例えば、データフロー解析、制御フロー解析、プログラムスライシング、ポインタ解析などがある。
【０１４８】
そして、前処理ツール（ツール）および対象プログラム（前処理後プログラム）にタグ付けを行い、保存しておくことで、本発明の枠組みを利用することができる。
【０１４９】
実際、前処理ツールは、解析・検証ツールと同様に様々な種類があり、計算資源を多く消費するものもあるため、解析・検証ツールの場合と同様、本発明は有効である。
【０１５０】
例えば、前処理ツール（ツール）に付けられるタグ（ツール関連情報）としては、前処理可能な対象を表すタグ（検証ツールに付けるタグと同様のもの）、および、どのような前処理を行うのかを表すタグ（例えば、"data_flow_analysis"、"control_flow_analysis"、"program_slicing"、"pointer_analysis"など前処理の種類を示したタグ）が考えられる。また、前処理結果のデータに対応付けられる特徴記述情報（タグ）としては、"data_flow_analysis"、"control_flow_analysis"、"program_slicing"、"pointer_analysis"などが有効と考えられる。
【０１５１】
また、上述の二つの例を組み合わせた例として、プログラム解析・検証サービス提供システム（データ処理サービス提供システム）１において、対象プログラムを、前処理ツール（前処理データ処理ツール）を用いて前処理を行い、次いで前処理後の対象プログラムに対してプログラム解析・検証ツールを用いて解析・検証を行い、更にその解析・検証の結果データに対して別の解析・検証ツール（後処理データ処理ツール）を用いて解析・検証を行う例を示す。
【０１５２】
まず第１段階として、前処理ツール（前処理データ処理ツール）を用いて前処理前プログラムに対して前処理を行った結果である対象プログラムを出力し、対象プログラム記憶部（前処理後プログラム記憶部）２２０に当該対象プログラムを記憶する。前処理前のプログラムを前処理することで得た対象プログラムは、前述の通り、対象プログラムの特徴記述情報（タグ）と対応付けて対象プログラム記憶部（前処理後プログラム記憶部）２２０に格納される。
【０１５３】
このとき、前処理後の対象プログラムに好適に付けられる特徴記述情報（タグ）としては、上述の例のように、例えば前処理の種類を表すタグ（"data_flow_analysis"、"control_flow_analysis"、"program_slicing"、"pointer_analysis"など）などが考えられる。
【０１５４】
次いで第２段階として、前処理によって得た対象プログラムに対してプログラム解析・検証ツールを用いて解析・検証を行う。具体的にはまず、対象プログラム取得部１１４は、対象プログラム記憶部２２０から対象プログラムを取得する。一方、利用者インターフェース部（ツール指定情報取得手段）１１１は、対象プログラム記憶部２２０から対象プログラムが取得した対象プログラムに対応付けられた特徴記述情報を、ツール指定情報として取得する。ついで仮想マシン実行環境部（ツール実行手段）１２０がプログラム解析・検証ツールを用いて対象プログラムを解析・検証し、その結果得られた結果データを、結果データの特徴記述情報（タグ）と対応付けて、データ記憶部（結果データ記憶部）１３０に格納する。
【０１５５】
このとき、結果データに好適に付けられる特徴記述情報（タグ）としては、上述の例のように、例えばデータの種類を表すタグ（"execution_path"（実行パスを表す)、"execution_trace"（実行トレースを表す）、"program_point"（プログラム中の実行ポイントを表す）など）などが考えられる。
【０１５６】
最後に第3段階として、利用者インターフェース部（ツール指定情報取得手段）１１１は、データ記憶部１３０から、結果データに対応付けられた特徴記述情報を、当該ツール指定情報として取得する。ここで、ツール記憶部３２０は、結果データを解析・検証するプログラム解析・検証ツール（後処理データ処理ツール）を当該解析・検証ツール関連情報と対応付けてツール記憶部３２０に格納している。そして、ツール登録・検索部（ツール抽出手段）３１３は、利用者インターフェース部１１１が取得したツール指定情報に基づいて、ツール関連情報を検索し、適合したツール関連情報と対応付けられた後処理ツール（後処理データ処理ツール）を、ツール記憶部３２０に格納された複数の後処理ツールの中から抽出する。その後、プログラム解析・検証サービス提供システム１は、抽出したデータ処理ツールをツール記憶部３２０から取得し、取得された後処理ツールを用いて、対象プログラムを解析・検証する処理の結果データに対する解析・検証（後処理）を連続して行う。
【０１５７】
なお、上述の組合せの例では前処理と後処理の数が一つずつとなっているが、任意の数の前処理、後処理、解析・検証処理を組み合わせることも可能である。また、前処理、後処理、解析・検証処理のいずれかを省略することも可能である。
【０１５８】
このように、多段階のデータ処理を行う場合、プログラム解析・検証サービス提供システム１は、各段階の処理の結果得られるデータ（プログラムまたはプログラム以外のデータ）に特徴記述情報（タグ）を対応付けて保存（格納）する。各段階の処理結果のデータに対して特徴記述情報（タグ）との対応付けが行われるのは、データを保存すると同時、あるいは、データの保存後で次の段階の処理で用いるツールを抽出するまでの間である。この際、対応付けられる特徴記述情報（タグ）は、各段階の処理で使用したツールに対応した、所定のルールに従って決定されることが好ましい。なお、プログラム解析・検証サービス提供システム１のユーザが手作業で、各段階の処理で得られるデータに特徴記述情報（タグ）を対応付けするようにしてもよい。
【０１５９】
上述の通り、本発明は、プログラムに前処理を行うことで対象プログラムを得る処理（前処理）と、得られた対象プログラムを解析・検証する処理とを連続して行う、多段階の解析・検証に適用した場合、以下のように構成してもよい。
【０１６０】
プログラム解析・検証サービス提供システム（プログラム解析・検証サービス提供システム１）は、前処理前プログラムを前処理して対象プログラムを得る処理と、該処理によって得た対象プログラムをプログラム解析・検証ツールを用いて解析、検証する処理とを連続して行うものであって、前処理前プログラムを前処理して得た対象プログラムを、該対象プログラムの特徴記述情報（ツール指定情報）と対応付けて格納する前処理後プログラム記憶部（対象プログラム記憶部２２０）をさらに備え、対象プログラム取得手段（対象プログラム取得部１１４）は、前処理後プログラム記憶部から、対象プログラムを取得するものであり、ツール指定情報取得手段（利用者インターフェース部１１１）は、前処理後プログラム記憶部から、対象プログラム取得手段が取得した対象プログラムに対応付けられた特徴記述情報を、ツール指定情報として取得するものであることを特徴としている。
【０１６１】
また、本発明は、対象プログラムに解析・検証する処理に続けて、得られた結果データを解析・検証する処理を行う多段階の解析・検証に適用した場合、以下のように構成してもよい。
【０１６２】
プログラム解析・検証サービス提供システム（プログラム解析・検証サービス提供システム１）は、対象プログラムをプログラム解析・検証ツールを用いて解析、検証する処理と、該処理によって得た結果データを後処理する処理とを連続して行うものであって、ツール実行手段（仮想マシン実行環境部１２０）がプログラム解析・検証ツールを用いて対象プログラムを解析、検証して得た結果データを、該結果データの特徴記述情報（ツール指定情報）と対応付けて格納する結果データ記憶部（データ記憶部１３０）をさらに備えるとともに、ツール記憶部（ツール記憶部３２０）は、結果データを後処理する後処理ツールを該後処理ツールのツール関連情報と対応付けて格納しており、ツール指定情報取得手段（利用者インターフェース部１１１）は、結果データ記憶部から、結果データに対応付けられた特徴記述情報を、ツール指定情報として取得するものであり、ツール抽出手段（ツール登録・検索部３１３）は、ツール指定情報取得手段が取得したツール指定情報に基づいて、ツール関連情報を検索し、適合したツール関連情報と対応付けられた後処理ツールを、ツール記憶部に格納された複数の後処理ツールから抽出するものであることを特徴としている。
【０１６３】
さらに、本発明は、プログラムの解析・検証を行う処理を必須としないサービス提供システムとして構成する場合、以下のように構成することも可能である。
【０１６４】
本発明に係るデータ処理サービス提供システム（プログラム解析・検証サービス提供システム１）は、複数のデータ処理ツール（プログラム解析・検証ツール、前処理ツール、後処理ツール）を順次用いることにより、対象データ（対象プログラム、結果データ）を複数段階にデータ処理するデータ処理サービス提供システムであって、複数のデータ処理ツールを各データ処理ツールのツール関連情報とそれぞれ対応付けて格納したツール記憶部（ツール記憶部３２０）と、前段階のデータ処理ツール（前処理ツール、プログラム解析・検証ツール）を用いてデータ処理して得られた結果データを、該結果データの特徴記述情報（ツール指定情報）と対応付けて格納する結果データ記憶部（データ記憶部１３０）と、結果データ記憶部から結果データを取得する結果データ取得手段（対象プログラム取得部１１４）と、結果データ取得手段が取得した結果データのデータ処理に用いるデータ処理ツール（プログラム解析・検証ツール、後処理ツール）を指定するツール指定情報として、当該結果データに対応付けられた特徴記述情報を結果データ記憶部から取得するツール指定情報取得手段（利用者インターフェース部１１１）と、ツール指定情報取得手段が取得したツール指定情報に基づいて、ツール関連情報を検索し、適合したツール関連情報と対応付けられたデータ処理ツールを、ツール記憶部に格納された複数のデータ処理ツールから抽出するツール抽出手段（ツール登録・検索部３１３）と、上記ツール抽出手段が抽出したデータ処理ツールを上記ツール記憶部から取得するツール取得手段（ツール取得部１１５）と、ツール取得手段が取得したデータ処理ツールを用いて、結果データ取得手段が取得した結果データをデータ処理するツール実行手段（仮想マシン実行環境部１２０）と、を備えることを特徴としている。
【０１６５】
（６．まとめ）
本発明に係るプログラム解析・検証サービス提供システムは、対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムであって、対象プログラムを取得する対象プログラム取得手段と、複数のプログラム解析・検証ツールを格納したツール記憶部と、上記対象プログラム取得手段が取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出手段と、上記ツール抽出手段が抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得手段と、上記ツール取得手段が取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得手段が取得した対象プログラムを解析、検証するツール実行手段と、を備えることを特徴としている。
【０１６６】
また、本発明に係るプログラム解析・検証サービス提供システムの制御方法は、対象プログラムをプログラム解析・検証ツールを用いて解析、検証するプログラム解析・検証サービス提供システムの制御方法であって、上記プログラム解析・検証サービス提供システムは、複数のプログラム解析・検証ツールを格納したツール記憶部を備え、対象プログラムを取得する対象プログラム取得ステップと、上記対象プログラム取得ステップにて取得した対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、上記ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出するツール抽出ステップと、上記ツール抽出ステップにて抽出したプログラム解析・検証ツールを上記ツール記憶部から取得するツール取得ステップと、上記ツール取得ステップにて取得した各プログラム解析・検証ツールを用いて、上記対象プログラム取得ステップにて取得した対象プログラムを解析、検証するツール実行ステップと、を含むことを特徴としている。
【０１６７】
上記の構成によれば、対象プログラムを取得するとともに、当該対象プログラムの解析、検証に用いるプログラム解析・検証ツールを、ツール記憶部に格納された複数のプログラム解析・検証ツールから抽出し、取得する。そして、取得した各プログラム解析・検証ツールを用いて、対象プログラムを解析、検証する。
【０１６８】
このように、対象プログラムを取得し、当該対象プログラムに合わせて解析、検証に用いるプログラム解析・検証ツールを、あらかじめ用意された複数のプログラム解析・検証ツールから選択できる。それゆえ、対象プログラムの解析、検証を希望する複数の利用者に対して、あらかじめ用意された複数のプログラム解析・検証ツールから、それぞれの対象プログラムに合わせて選択されたプログラム解析・検証ツール用いて、解析、検証を実行するサービスを提供することができる。また、プログラム解析・検証ツールの提供を希望する複数のツール提供者に対しても、複数の利用者から対象プログラムの解析、検証の依頼を受け付け、解析、検証を実行するサービスを提供することができる。すなわち、上記の構成によれば、プログラム解析・検証ツールの利用ための共有システムを実現できる。
【０１６９】
これにより、以下の効果を奏することができる。（１）複数の利用者でツール実行システムを共有するため、計算資源を個々の利用者が用意する必要がない。それゆえ、余剰の計算資源を融通し合うことができ、解析・検証のコストを抑えられるとともに、実行可能な解析・検証の種類や規模の制限が緩和される。（２）また、プログラム解析・検証ツールの導入・維持管理を、一括して行うことができるので、個々の利用者が導入・維持管理を行う必要がない。（３）また、統一的なユーザインターフェースを提供することが可能であるため、利用者が複数のプログラム解析・検証ツールの中から適切なものを選択することが容易になる。（４）一方、プログラム解析・検証ツールの提供者にとっては、利用者と同様に、計算資源を個々のツール提供者が用意する必要がない。それゆえ、余剰の計算資源を融通し合うことができ、コストを抑えられるとともに、実行可能な解析・検証の種類や規模の制限が緩和される。また、様々な対象プログラムに対してもプログラム解析・検証ツールのテストができる。特に、これまでは計算資源の制限により困難であった対象プログラムに対してもプログラム解析・検証ツールのテストが可能となる。
【０１７０】
それゆえ、複数のプログラム解析・検証ツールから用いるべきものを適切に選択して、プログラムの解析・検証を容易に実行できるという効果を奏する。そして、プログラム解析・検証を共有システム上で行うことで、従来のプログラム解析・検証技術の実用化上の種々の問題点を解決できるという効果を奏する。
【０１７１】
さらに、本発明に係るプログラム解析・検証サービス提供システムは、上記対象プログラム取得手段が取得した上記対象プログラムの解析、検証に用いるプログラム解析・検証ツールを指定するツール指定情報を取得するツール指定情報取得手段をさらに備え、上記ツール記憶部は、複数のプログラム解析・検証ツールを各プログラム解析・検証ツールのツール関連情報とそれぞれ対応付けて格納しており、上記ツール抽出手段は、上記ツール指定情報取得手段が取得した上記ツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられたプログラム解析・検証ツールを抽出するものであることを特徴としている。
【０１７２】
上記の構成によれば、さらに、ツール記憶部は、複数のプログラム解析・検証ツールを各プログラム解析・検証ツールのツール関連情報とそれぞれ対応付けて格納している。そして、対象プログラムの解析、検証に用いるプログラム解析・検証ツールを指定するツール指定情報を取得し、このツール指定情報に基づいて、上記ツール関連情報を検索し、適合したツール関連情報と対応付けられたプログラム解析・検証ツールを抽出する。
【０１７３】
これにより、プログラム解析・検証ツールにはツール関連情報を対応付けておき、対象プログラムとともにツール指定情報を設定することにより、対象プログラムに合わせたプログラム解析・検証ツールを選択することが可能となる。ここで、ツール関連情報には、例えば、プログラム解析・検証ツールが扱うことができるプログラミング言語の種類やプログラムの種類（ユーザプログラム、システムプログラムの区別など）、プログラム解析・検証ツールが稼働する実行環境（オペレーティングシステムやライブラリの種類・バージョン、必要となる計算資源（ＣＰＵの速度や種類、メモリやディスクのサイズ等）など）が設定できる。一方、ツール指定情報は、解析・検証に用いるプログラム解析・検証ツールを指定する情報であり、ツール関連情報として設定されている内容の中から設定できる。
【０１７４】
よって、統一的なユーザインターフェースを提供することが可能となるため、利用者が複数のプログラム解析・検証ツールの中から適切なものを選択することが容易になるという効果を奏する。
【０１７５】
さらに、本発明に係るプログラム解析・検証サービス提供システムは、上記ツール記憶部は、上記プログラム解析・検証ツールとして、当該プログラム解析・検証ツールを導入、設定した仮想マシンを格納しており、上記ツール実行手段は、上記ツール取得手段が取得した仮想マシン上で、上記対象プログラム取得手段が取得した対象プログラムを解析、検証するものであることを特徴としている。
【０１７６】
上記の構成によれば、さらに、プログラム解析・検証ツールとして、当該プログラム解析・検証ツールを導入、設定した仮想マシンを用意し、この仮想マシン上で対象プログラムを解析、検証することができる。
【０１７７】
よって、以下の効果を奏することができる。まず、第１に、仮想マシンを用いて解析・検証を実行することで、複数の利用者および複数のプログラム解析・検証ツールの提供者の間で、システムの公平な利用を容易に実現することができる。また、第２に、仮想マシン上にプログラム解析・検証ツールを導入・設定することによって、プログラム解析・検証ツールの提供者は、普段自らが開発・テストしている実行環境とほぼ同様にプログラム解析・検証ツールを導入・設定できる。それゆえ、特殊な実行環境に対応させるためにプログラム解析・検証ツールを修正したり、また外部とのデータのやりとりをプログラム解析・検証ツールに行わせるための仕組みを別途用意したりといった、余計な負担をプログラム解析・検証ツールの提供者に掛けないようにすることができる。なお、仮想マシン上での対象プログラムの解析・検証は、仮想マシン上で対象プログラムを実行させて行ってもよいし、実行させずに行ってもよい。
【０１７８】
さらに、本発明に係るプログラム解析・検証サービス提供システムは、プログラム解析・検証ツールを導入、設定した仮想マシンを、プログラム解析・検証ツール毎に生成する仮想マシン生成手段をさらに備え、上記ツール記憶部は、上記プログラム解析・検証ツールとして、上記仮想マシン生成手段が生成した仮想マシンを格納していることを特徴としている。
【０１７９】
上記の構成によれば、さらに、新たなプログラム解析・検証ツールを受け付ける際、当該プログラム解析・検証ツールを導入、設定した仮想マシンを生成して、ツール記憶部に格納することができる。
【０１８０】
よって、プログラム解析・検証ツールを導入、設定した仮想マシンの生成を、プログラム解析・検証サービス提供システムで行うため、ツール提供者が仮想マシンの生成を行う必要がない。また、それぞれ異なるプログラム解析・検証ツールが導入、設定された複数の仮想マシンを、統一した様式で、特に仮想マシンの実行環境に配慮して作成することができるため、一様にて扱うことが可能となるという効果を奏する。
【０１８１】
また、本発明に係るプログラム解析・検証装置は、上記プログラム解析・検証サービス提供システムを構成するプログラム解析・検証装置であって、上記対象プログラム取得手段と、上記ツール取得手段と、上記ツール実行手段と、を備えて構成されていてもよい。
【０１８２】
また、本発明に係るプログラム解析・検証ツール管理装置は、上記プログラム解析・検証サービス提供システムを構成するプログラム解析・検証ツール管理装置であって、上記ツール記憶部と、上記ツール抽出手段と、を備えて構成されていてもよい。
【０１８３】
なお、上記のプログラム解析・検証サービス提供システム、プログラム解析・検証装置、プログラム解析・検証ツール管理装置は、コンピュータによって実現してもよく、この場合には、コンピュータを上記各手段として動作させることにより上記のプログラム解析・検証サービス提供システム、プログラム解析・検証装置、プログラム解析・検証ツール管理装置をコンピュータにて実現させる制御プログラム、およびそれを記録したコンピュータ読み取り可能な記録媒体も、本発明の範疇に入る。
【０１８４】
（７．補足）
最後に、プログラム解析・検証サービス提供システム１、解析・検証部１００、対象プログラム管理部２００、ツール管理部３００の各ブロック、特に解析・検証制御部１１０、対象プログラム管理制御部２１０ツール管理制御部３１０は、ハードウェアロジックによって構成してもよいし、次のようにＣＰＵを用いてソフトウェアによって実現してもよい。
【０１８５】
後者の場合、プログラム解析・検証サービス提供システム１（を構成する各装置）は、各機能を実現するプログラムの命令を実行するＣＰＵ（central processing unit）、上記プログラムを格納したＲＯＭ（read only memory）、上記プログラムを展開するＲＡＭ（random access memory）、上記プログラムおよび各種データを格納するメモリ等の記憶装置（記録媒体）などを備えている。そして、本発明の目的は、上述した機能を実現するソフトウェアであるプログラム解析・検証サービス提供システム１（を構成する各装置）の制御プログラムのプログラムコード（実行形式プログラム、中間コードプログラム、ソースプログラム）をコンピュータで読み取り可能に記録した記録媒体を、上記プログラム解析・検証サービス提供システム１（を構成する各装置）に供給し、そのコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に記録されているプログラムコードを読み出し実行することによっても、達成可能である。
【０１８６】
上記記録媒体としては、例えば、磁気テープやカセットテープ等のテープ系、フロッピー（登録商標）ディスク／ハードディスク等の磁気ディスクやＣＤ−ＲＯＭ／ＭＯ／ＭＤ／ＤＶＤ／ＣＤ−Ｒ等の光ディスクを含むディスク系、ＩＣカード（メモリカードを含む）／光カード等のカード系、あるいはマスクＲＯＭ／ＥＰＲＯＭ／ＥＥＰＲＯＭ（登録商標）／フラッシュＲＯＭ等の半導体メモリ系などを用いることができる。
【０１８７】
また、プログラム解析・検証サービス提供システム１（を構成する各装置）を通信ネットワークと接続可能に構成し、上記プログラムコードを通信ネットワークを介して供給してもよい。この通信ネットワークとしては、特に限定されず、例えば、インターネット、イントラネット、エキストラネット、ＬＡＮ、ＩＳＤＮ、ＶＡＮ、ＣＡＴＶ通信網、仮想専用網（virtual private network）、電話回線網、移動体通信網、衛星通信網等が利用可能である。また、通信ネットワークを構成する伝送媒体としては、特に限定されず、例えば、ＩＥＥＥ１３９４、ＵＳＢ、電力線搬送、ケーブルＴＶ回線、電話線、ＡＤＳＬ回線等の有線でも、ＩｒＤＡやリモコンのような赤外線、Ｂｌｕｅｔｏｏｔｈ（登録商標）、８０２．１１無線、ＨＤＲ、携帯電話網、衛星回線、地上波デジタル網等の無線でも利用可能である。なお、本発明は、上記プログラムコードが電子的な伝送で具現化された、搬送波に埋め込まれたコンピュータデータ信号の形態でも実現され得る。
【０１８８】
本発明は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、実施形態に開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【０１８９】
本発明は、対象プログラムをプログラム解析・検証ツールを用いて解析、検証する装置（システム）に利用することができる。
【符号の説明】
【０１９０】
１    プログラム解析・検証サービス提供システム（データ処理サービス提供システム）
１００    解析・検証部（プログラム解析・検証装置）
１１１    利用者インターフェース部（ツール指定情報取得手段）
１１４    対象プログラム取得部（対象プログラム取得手段）
１１５    ツール取得部（ツール取得手段）
１２０    仮想マシン実行環境部（ツール実行手段）
３００    ツール管理部（プログラム解析・検証ツール管理装置）
３１２    仮想マシン生成部（仮想マシン生成手段）
３１３    ツール登録・検索部（ツール抽出手段）
３２０    ツール記憶部
Ｐ    対象プログラム
Ｔ    仮想マシン
【図１】
0005540160.tif 000002
【図２】
0005540160.tif 000003
【図３】
0005540160.tif 000004
【図４】
0005540160.tif 000005
【図５】
0005540160.tif 000006
【図６】
0005540160.tif 000007
【図７】
0005540160.tif 000008
【図８】
0005540160.tif 000009
【図９】
0005540160.tif 000010
【図１０】
0005540160.tif 000011
【図１１】
0005540160.tif 000012