以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置1は、テスト対象のソフトウェアを実行し、当該ソフトウェアの動作テストを行う。情報処理装置1は、複数のプロセスを実行可能である。プロセスは情報処理装置1により実行される種々のソフトウェアのプログラムの実行単位の1つである。例えば、情報処理装置1により実行されるオペレーティングシステム(OS:Operating System)が、各ソフトウェアのプロセスの生成・実行待ち・実行・終了などを管理する。
情報処理装置1は、記憶部1aおよび演算部1bを有する。記憶部1aは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。演算部1bは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。演算部1bは、プログラムを実行するプロセッサであってもよい。“プロセッサ”には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。第1の実施の形態の情報処理は、演算部1bが記憶部1aに記憶されたプログラムを実行することで実現されてもよい。
記憶部1aは、現存しているプロセスごとの実行された累積の時間(累積実行時間ということがある)を示す管理情報2を記憶する。例えば、情報処理装置1により実行されるOSが、現時点において存在しているプロセスごとに実行された累積の時間を管理情報2に記録する。存在しているプロセスとは、生成済のプロセスである。存在しているプロセスは、OSによるプロセッサやRAMなどのリソースの割当てがあるプロセスともいえる。存在していないプロセスとは、過去に存在していたが、現在は終了して消去されたプロセスである。存在していないプロセスは、OSにより割当てられていたリソースが解放されたプロセスともいえる。実行された累積の時間は、該当のプロセスが実行状態であった時間の累積である。
演算部1bは、テスト対象のソフトウェアのテストを開始する際に、存在しているプロセスごとに、実行された累積の時間を示す第1の情報を取得する。演算部1bは、記憶部1aを参照して、当該テスト開始時に存在しているプロセスごとの第1の情報を取得し得る。例えば、演算部1bは、取得した第1の情報をプロセスに対応付けて記憶部1aに格納された記録情報3に登録する。
演算部1bは、テスト対象のソフトウェアのテストを終了する際に、存在しているプロセスごとに、実行された累積の時間を示す第2の情報を取得する。演算部1bは、記憶部1aを参照して、当該テスト終了時に存在しているプロセスごとの第2の情報を取得し得る。例えば、演算部1bは、取得した第2の情報をプロセスに対応付けて記録情報3に登録する。
演算部1bは、プロセスごとに取得された第1および第2の情報に基づいて、テスト対象のソフトウェアのテストを行う際に情報収集の対象とするプロセスを選択する。
ここで、図1の管理情報2および記録情報3では、あるソフトウェアのテストを行った後、所定時間が経過した時点の登録内容を例示している。例えば、当該時点において、管理情報2には各プロセスに対して次の累積実行時間が登録されている。プロセスA1の累積実行時間t12。プロセスA2の累積実行時間t22。プロセスA4の累積実行時間t42。プロセスA5の累積実行時間t52。
また、例えば記録情報3には、テスト開始時に存在していたプロセスに対して次のようにテスト開始時の累積実行時間が登録されている。登録なし(ハイフン“−”を表記)は、当該時点において存在していなかったため、累積実行時間を取得できなかったことを示す。プロセスA1の累積実行時間t10。プロセスA2の累積実行時間t20。プロセスA3の累積実行時間t30。同様に、テスト終了時に存在していたプロセスに対して次のようにテスト終了時の累積実行時間が登録されている。プロセスA1の累積実行時間t11。プロセスA2の累積実行時間t20。プロセスA4の累積実行時間t41。
例えば、演算部1bは、記録情報3を参照して、プロセスごとにテスト開始時の累積実行時間(第1の情報)とテスト終了時の累積実行時間(第2の情報)とを比較する。例えば、演算部1bは、テスト開始時の累積実行時間(第1の情報)とテスト終了時の累積実行時間(第2の情報)とが異なるプロセスを、情報収集の対象として選択する。テスト期間中に累積実行時間が変動していれば、当該プロセスは、テスト中のソフトウェアの処理に関連して実行された可能性が高いからである。
記録情報3の例でいえば、プロセスA1はテスト開始時とテスト終了時とで累積実行時間が異なっている。よって、演算部1bはプロセスA1を情報収集の対象とする。一方、演算部1bはテスト開始時およびテスト終了時の累積実行時間が同じであるプロセスA2を情報収集の対象としない。
演算部1bは、第1および第2の情報のうちの何れか一方のみが取得されているプロセスをソフトウェアの情報収集の対象として選択してもよい。例えば、テスト開始時には存在しておらず、テスト終了時には存在していたプロセスA4は、テスト中のソフトウェアの処理に関連して生成された可能性があるからである。また、テスト開始時には存在しており、テスト終了時には存在していなかったプロセスA3は、テスト中のソフトウェアの処理に関連して終了された可能性があるからである。よって、演算部1bはプロセスA3,A4を情報収集の対象とする。
情報処理装置1によれば、演算部1bにより、ソフトウェアのテストが開始される際に、存在しているプロセスごとに、実行された累積の時間を示す第1の情報が取得される。演算部1bにより、ソフトウェアのテストを終了する際に、存在しているプロセスごとに、実行された累積の時間を示す第2の情報が取得される。演算部1bにより、プロセスごとに取得された第1および第2の情報に基づいて、情報収集の対象とするプロセスが選択される。
これにより、テストの効率化を図れる。ここで、例えば、情報収集の対象とするプロセスを選択して、エラー時に採取する情報を予め絞り込めば、余計な(ソフトウェアのテストとは明らかに関連のない)プロセスの情報を採取するよりも、原因究明の分析作業を効率化し得る。そこで、ソフトウェアのテストでは、情報処理装置1上に多数存在するソフトウェアのプロセスの中から、情報収集の対象とするプロセスをどのようにして効率的に選択するかが問題となる。
例えば、ソフトウェアのテストを行っている最中に、存在している全プロセスについてログやトレースデータなどの情報を網羅的に取得し、取得した情報を分析してテストと関連して実行されたプロセスを選択することも考えられる。しかし、網羅的に情報を取得しようとすると、当該情報を取得する処理に伴う情報処理装置1の負荷が問題となる。情報処理装置1の負荷が増大すると、テスト対象のソフトウェアの処理が適正に行われなくなるおそれがある。また、網羅的に情報を取得すると、取得される情報の情報量も増大し得る。分析対象の情報量が増大すると、分析作業におけるユーザの負担が過大となるおそれもある。
そこで、情報処理装置1では、テスト開始時およびテスト終了時に各プロセスの累積実行時間を取得し、当該累積実行時間に基づいて、情報収集の対象とするプロセスを選択する。取得した累積実行時間の変化は、プロセスが実行された実績を示すから、テスト中に累積実行時間に変化があったプロセスは、テストに関連して実行されたプロセスであると推測できる。よって、累積実行時間に基づいてプロセスを選択し、情報収集すれば、明らかにテストと関係ないと考えられるプロセスを情報収集の対象から除外できる。
また、例えば、累積実行時間は、情報処理装置1上のオペレーティングシステムにより、プロセスごとに記憶部1aに格納される情報である。演算部1bは、累積実行時間を取得するために、記憶部1aから該当のプロセスの累積実行時間を読み出せばよい。このため、上記のように網羅的に情報を取得しなくてよく、プロセス選択用の情報の取得に伴う負荷を比較的小さく抑えられる。よって、情報処理装置1の負荷がテストに与える影響を軽減できる。また、テスト開始時およびテスト終了時の各プロセスの累積実行時間に基づいて、情報収集の対象とするプロセスを選択するので、ユーザに対して当該プロセスを選択する作業を強いずに済む。よって、ユーザの作業の省力化を図れる。
特に、テスト対象のソフトウェアが他のソフトウェアと連携して所定の機能を実現する場合、当該連携が適正に行われるかをテストすることもある(システムテストと呼ばれることがある)。システムテストでは、他のソフトウェアとの連携で生ずるエラーの分析が行われる。しかし、他のソフトウェアは、自身とは異なる開発者、ベンダなどにより作成されたものである場合もある。このため、他のソフトウェアがブラックボックス化されていると、どのようなプロセスが実行されるのかを事前に把握することは容易でない。したがって、このような場合には、テスト対象のソフトウェアを実際に動かしてみて他のソフトウェアとの連携を確認することが多い。情報処理装置1によれば、このようなブラックボックステストを行う場合にも、情報収集の対象とするプロセスを効率的に選択でき、テストの効率化を図れる。
また、情報処理装置1は、テスト対象のソフトウェアのテストを再び行う際に、選択したプロセスを指定して、トレースログやメモリダンプなどの情報を収集し得る。すなわち、情報の収集範囲を、選択したプロセスに絞り込める。このため、当該情報収集に要する負荷を軽減できる。よって、当該テスト中にも情報処理装置1の負荷がテストに与える影響を軽減できる。また、ソフトウェアのテストとは明らかに関連しないプロセスに関する情報(余計な情報)を収集しない。よって、分析対象とする情報量を低減でき、分析作業の省力化を図れる。
[第2の実施の形態]
図2は、第2の実施の形態のテスト装置のハードウェア例を示す図である。テスト装置100は、テスト対象のソフトウェアに関するテストを行うコンピュータである。第2の実施の形態では、当該ソフトウェアに対するシステムテストを想定する。システムテストでは、例えば、テスト対象のソフトウェアと他のソフトウェア(OSやデバイスドライバなどを含む)とが連携して、設計された機能を実現できることを確認する。ただし、以下に示す機能をシステムテスト以外に適用することを妨げるものではない。例えば、単体テストや結合テストなどにも適用し得る。
テスト装置100は、プロセッサ101、RAM102、HDD103、通信部104、画像信号処理部105、入力信号処理部106、ディスクドライブ107および機器接続部108を有する。各ユニットはテスト装置100のバスに接続されている。
プロセッサ101は、テスト装置100の情報処理を制御する。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、CPU、DSP、ASICまたはFPGAのうちの2以上の要素の組合せであってもよい。
RAM102は、テスト装置100の主記憶装置である。RAM102は、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、テスト装置100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。テスト装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
通信部104は、ネットワーク10を介して他のコンピュータと無線通信を行えるインタフェースである。通信部104は、有線インタフェースでもよい。
画像信号処理部105は、プロセッサ101からの命令に従って、テスト装置100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部106は、テスト装置100に接続された入力デバイス12から入力信号を取得し、プロセッサ101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
ディスクドライブ107は、レーザ光などを利用して、光ディスク13に記録されたプログラムやデータを読み取る駆動装置である。光ディスク13として、例えば、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などを使用できる。ディスクドライブ107は、例えば、プロセッサ101からの命令に従って、光ディスク13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
機器接続部108は、テスト装置100に周辺機器を接続するための通信インタフェースである。例えば、機器接続部108にはメモリ装置14やリーダライタ装置15を接続できる。メモリ装置14は、機器接続部108との通信機能を搭載した記録媒体である。リーダライタ装置15は、メモリカード16へのデータの書き込み、またはメモリカード16からのデータの読み出しを行う装置である。メモリカード16は、カード型の記録媒体である。機器接続部108は、例えば、プロセッサ101からの命令に従って、メモリ装置14またはメモリカード16から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
図3は、テスト装置の機能例を示す図である。テスト装置100は、記憶部110、OS120、テスト処理部130、情報収集部140、テスト対象ソフトウェア150およびソフトウェア群160を有する。記憶部110は、RAM102やHDD103の所定の記憶領域を用いて実現できる。テスト処理部130および情報収集部140は、プロセッサ101によって実行されるプログラムのモジュールであってもよい。
記憶部110は、テスト装置100の各部の処理に用いられる情報を記憶する。記憶部110は、現時点において存在しているプロセスごとに実行された累積の時間(累積実行時間)を記憶する。記憶部110が記憶する情報には、テスト管理テーブル、開始テーブルおよび終了テーブルが含まれる。
テスト管理テーブルは、テスト対象のソフトウェアとテスト内容との対応関係を示すテーブルである。テスト内容は、1以上のテスト項目と各テスト項目の実行順とを含む。開始テーブルおよび終了テーブルはプロセスごとの累積実行時間を記録するために用いられるテーブルである。
OS120は、各種ソフトウェアの実行を管理する基本ソフトウェアである。例えば、OS120は、各ソフトウェアのプロセスの生成・実行待ち・実行・終了などを管理する。プロセスは、ソフトウェアに含まれるプログラムのOS120による実行単位の1つである。また、OS120は、現時点において存在しているプロセスごとの累積実行時間を記憶部110に格納する。OS120は、現存するプロセスの累積実行時間を常時計測し、記憶部110に記録された累積実行時間を更新する。
例えば、OS120として、Unix(登録商標)やLinux(登録商標)およびWindows(登録商標)などを利用できる。
テスト処理部130は、テスト管理テーブルを参照して、テスト対象ソフトウェア150に応じたテストを実行する。例えば、テスト処理部130は、テスト対象ソフトウェア150に対して所定のデータを入力し、テスト対象ソフトウェア150やソフトウェア群160から出力を得ることで、テスト管理テーブルに登録されたテスト項目を順次実行する。テスト処理部130は、入力に対する出力が適正か否かを判定することで、テストの成否を決定する。テスト処理部130は、次のようにテストを進める。まず、情報収集対象のプロセスを選択するためのテストを行う(1回目)。次に、選択されたプロセスについて情報収集を行うためのテストを行う(2回目以降)。
情報収集部140は、テスト処理部130による1回目のテストの際に、テスト項目ごとに情報収集の対象とするプロセスを選択する。具体的には、情報収集部140は、テスト項目ごとに、テスト開始時に存在していたプロセスに対し、累積実行時間を取得する。情報収集部140は、テスト開始時点のプロセスごとの累積実行時間を記憶部110に記憶された開始テーブルに記録する。情報収集部140は、テスト項目ごとに、テスト終了時に存在していたプロセスに対し、累積実行時間を取得する。情報収集部140は、テスト終了時点のプロセスごとの累積実行時間を記憶部110に記憶された終了テーブルに記録する。
各プロセスの各時点における累積実行時間は、前述のようにOS120により記憶部110に格納されている。例えば、情報収集部140は、各時点において、OS120に対してプロセスを指定した所定のコマンドを発行することで、当該プロセスの累積実行時間を取得し得る。例えば、OS120がUnixやLinuxであれば、psコマンドを用いてプロセスごとの累積実行時間を取得してもよい。あるいは、OS120がWindowsであれば、GetProcessTimesコマンドを用いてプロセスごとの累積実行時間を取得してもよい。
情報収集部140は、プロセスごとのテスト開始時およびテスト終了時の累積実行時間に基づいて、テスト項目ごとに情報収集の対象とするプロセスを選択する。
情報収集部140は、テスト処理部130による2回目以降のテストの際に、テスト項目ごとに、選択したプロセスについて、エラー分析用の情報を収集する。具体的には、情報収集部140は、エラー分析用の情報として、プロセスごとのメモリダンプ(RAM102上の任意領域をHDD103上にファイル出力したもの)やトレースデータを収集する。例えば、OS120がUnixであれば、trussコマンドを用いてプロセスごとのトレースデータを取得してもよい。あるいは、OS120がLinuxであれば、straceコマンドを用いてプロセスごとのトレースデータを取得してもよい。
テスト対象ソフトウェア150は、テストの対象とするソフトウェアである。テスト対象ソフトウェア150は、OS120やソフトウェア群160と連携して、所定の機能を実現する。
ソフトウェア群160は、OS120上で実行される、テスト対象ソフトウェア150以外のソフトウェアの集合である。ソフトウェア群160は、テスト装置100のハードウェアを制御する各種のデバイスドライバを含む。ソフトウェア群160は、テスト対象ソフトウェア150を実行するための基盤となるミドルウェアを含む。ソフトウェア群160は、テスト対象ソフトウェア150と通信する他のアプリケーションを含む。
図4は、プロセスの状態遷移を示す図である。プロセスの状態は、OS120により次のように管理される。例えば、プロセスの状態は、実行中状態21(Running)、ブロック状態22(Blocked)および実行可能状態23(Ready)を含む。実行中状態21は、当該プロセスがプロセッサ101により実行されている状態である。ブロック状態22は、所定の外部イベントが発生するまで当該プロセスが実行不可となっている状態である。実行可能状態23は、プロセスに対してスケジューリングされたプロセッサ101の割当て時間を待機している状態である。ただし、上記の状態の他、プロセスは仮想メモリにスワップされることもある。
例えば、(1)プロセスの一連のステップにおいて、所定の外部イベント(リソースの確保や他のプロセスからの入力など)の発生を待つ段階になれば、実行中状態21からブロック状態22に遷移する。(2)第1のプロセスが実行中状態21のときに、第2のプロセスのプロセッサ割当て時間になれば、第1のプロセスは実行可能状態23に遷移する。(3)実行可能状態23であった第2のプロセスは実行中状態21に遷移する。(4)ブロック状態22にあるプロセスは、所定の外部イベントが発生すれば、ブロック状態22から実行可能状態23に遷移する。
例えば、生成されたプロセスは実行可能状態23となる。プロセスの一連のステップが終了すれば、当該プロセスに対するプロセッサ101、RAM102およびHDD103などのリソースは解放され、当該プロセスは消滅する。
ブロック状態22、実行可能状態23およびスワップされた状態は、プロセスとしてRAM102やHDD103上に存在するが、実行を待っている状態といえる。例えば、前述の累積実行時間は、各プロセスが実行中状態21であった時間でもよい。あるいは、累積実行時間は、実行中状態21および実行可能状態23であった時間の和でもよい。
図5は、テスト時におけるプロセスの実行パターンの例を示す図である。図5において、実線は、プロセスが継続的に、または、断続的に実行された(実行中状態21であった)ことを示している。破線は、プロセスが実行されていない(実行中状態21とならなかった)ことを示している。
実行パターンP1は、テスト開始時からテスト終了時までの間にプロセスが実行されるパターンである。実行パターンP1のプロセスは、テスト対象ソフトウェア150のテストに関連して実行された可能性が高いと判断できる。
実行パターンP2は、テスト開始時からテスト途中のある時点までにプロセスが実行されるが、テスト終了時までに当該プロセスが終了されるパターンである。実行パターンP2のプロセスはテスト対象ソフトウェア150のテストに関連して終了された可能性がある。
実行パターンP3は、テスト開始時には存在しておらず、テスト途中のある時点にプロセスが生成され、テスト終了時までの間に当該プロセスが実行されるパターンである。実行パターンP3のプロセスはテスト対象ソフトウェア150のテストに関連して生成され、実行された可能性がある。
実行パターンP4は、テスト開始時およびテスト終了時には存在しておらず、テスト途中で生成され、テスト終了時までに終了するパターンである。実行パターンP4のプロセスはテスト対象ソフトウェア150のテストに関連して生成され、実行された可能性がある。
実行パターンP5は、テスト開始時からテスト終了時の間に当該プロセスが実行されていないパターンである。実行パターンP5のプロセスは、テスト対象ソフトウェア150のテストに関連して実行されるものではないと判断できる。
図6は、候補プロセステーブルの例を示す図である。候補プロセステーブル111は、情報収集の対象とするプロセスの候補をテスト対象のソフトウェアごとに登録した情報である。例えば、ユーザは、情報収集の対象とするプロセスの候補を指定したい場合、候補プロセステーブル111に登録する。候補プロセステーブル111は、記憶部110に予め格納される。候補プロセステーブル111は、ソフトウェア名およびプロセス名の項目を含む。
ソフトウェア名の項目にはテスト対象のソフトウェアの名称が登録される。プロセス名の項目には情報収集の対象候補とするプロセスの名称が登録される。
例えば、候補プロセステーブル111には、ソフトウェア名が“SW1”、プロセス名が“smss、providerMGR、providermonit、stubprovider、ccSvcHst、printMGR、・・・”という情報が登録されている。これは、テスト対象ソフトウェア150が“SW1”である場合、情報収集の対象候補のプロセスは“smss、providerMGR、providermonit、stubprovider、ccSvcHst、printMGR、・・・”であることを示す。ここで、ソフトウェア名“SW1”は、テスト対象ソフトウェア150のソフトウェア名である。
図7は、除外プロセステーブルの例を示す図である。除外プロセステーブル112は、情報収集の対象外とするプロセスの候補をテスト対象のソフトウェアごとに登録した情報である。例えば、ユーザは、情報収集の対象外とするプロセスの候補を指定したい場合、除外プロセステーブル112に登録する。除外プロセステーブル112は、記憶部110に予め格納される。除外プロセステーブル112は、ソフトウェア名およびプロセス名の項目を含む。
ソフトウェア名の項目にはテスト対象のソフトウェアの名称が登録される。プロセス名の項目には情報収集の対象外するプロセスの名称が登録される。
例えば、除外プロセステーブル112には、ソフトウェア名が“SW1”、プロセス名が“System Idle Process、System、svchost、・・・”という情報が登録されている。これは、テスト対象ソフトウェア150が“SW1”である場合、情報収集の対象外のプロセスは“System Idle Process、System、svchost、System、svchost、・・・”であることを示す。
図8は、テスト管理テーブルの例を示す図である。テスト管理テーブル113は、テスト対象のソフトウェアごとのテスト項目およびテスト項目で用いられる情報の対応関係を示す情報である。テスト管理テーブル113は、記憶部110に予め格納される。テスト管理テーブル113は、ソフトウェア名、テスト項目およびテスト情報の項目を含む。
ソフトウェア名の項目には、テスト対象のソフトウェア名が登録される。テスト項目の項目には、テスト項目の識別情報が登録される。テスト情報の項目には、当該テスト項目において用いられる入力データ、イベントを発生用の情報およびテスト成否の判定用の情報などが登録される。
例えば、テスト管理テーブル113には、ソフトウェア名が“SW1”、テスト項目が“T1”、テスト情報が“test1”という情報が登録されている。また、ソフトウェア名が“SW1”、テスト項目が“T2”、テスト情報が“test2”という情報が登録されている。これは、テスト対象ソフトウェア150について、テスト項目“T1”およびテスト項目“T2”を順にテストすることを示している。また、テスト項目“T1”のテストを行う場合、テスト情報として“test1”を用いることを示す。テスト項目“T2”のテストを行う場合、テスト情報として“test2”を用いることを示す。
図9は、開始テーブルの例を示す図である。開始テーブル114は、テスト開始時のプロセスごとの累積実行時間の記録に用いられる。開始テーブル114は、記憶部110に格納される。開始テーブル114は、ソフトウェア名、テスト項目、プロセス名および累積実行時間の項目を含む。
ソフトウェア名の項目には、テスト対象のソフトウェアの名称が登録される。テスト項目の項目には、テスト項目の識別情報が登録される。プロセス名の項目には、累積実行時間の取得対象のプロセス名が登録される。累積実行時間の項目には、テスト開始時に取得された累積実行時間が登録される。
例えば、開始テーブル114には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“smss”、累積実行時間が“00:05:45.126”という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテスト開始時におけるプロセス“smss”の累積実行時間が、“00:05:45.126”であったことを示す。
図10は、終了テーブルの例を示す図である。終了テーブル115は、テスト終了時のプロセスごとの累積実行時間の記録に用いられる。終了テーブル115は、記憶部110に格納される。終了テーブル115は、ソフトウェア名、テスト項目、プロセス名および累積実行時間の項目を含む。
ソフトウェア名の項目には、テスト対象のソフトウェアの名称が登録される。テスト項目の項目には、テスト項目の識別情報が登録される。プロセス名の項目には、累積実行時間の取得対象のプロセス名が登録される。累積実行時間の項目には、テスト終了時に取得された累積実行時間が登録される。
例えば、終了テーブル115には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“smss”、累積実行時間が“00:12:45.877”という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテスト終了時におけるプロセス“smss”の累積実行時間が、“00:12:45.877”であったことを示す。
図11は、比較テーブルの例を示す図である。比較テーブル116は、開始テーブル114および終了テーブル115を合わせた情報であり両者の比較用に用いられる。比較テーブル116は、記憶部110に格納される。比較テーブル116は、ソフトウェア名、テスト項目、プロセス名および累積実行時間(開始時および終了時)の項目を含む。
ソフトウェア名の項目には、テスト対象のソフトウェアの名称が登録される。テスト項目の項目には、テスト項目の識別情報が登録される。プロセス名の項目には、累積実行時間が取得されたプロセス名が登録される。累積実行時間(開始時)の項目には、テスト開始時に取得された累積実行時間が登録される。累積実行時間(終了時)の項目には、テスト終了時に取得された累積実行時間が登録される。
例えば、比較テーブル116には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“smss”、累積実行時間の開始時が“00:05:45.126”、累積実行時間の終了時が“00:12:45.877”という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテストを行ったときのプロセス“smss”のテスト開始時の累積実行時間が“00:05:45.126”、テスト終了時の累積実行時間が“00:12:45.877”であったことを示す。テスト開始時の累積実行時間とテスト終了時の累積実行時間が異なるので、プロセス“smss”はテスト中に実行されたことが分かる。すなわち、プロセス“smss”は実行パターンP1のプロセスである。
また、例えば、比較テーブル116には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“providerMGR”、累積実行時間の開始時が“00:01:12.122”、累積実行時間の終了時が登録なし(“−(ハイフン)”)という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテストを行ったときのプロセス“providerMGR”のテスト開始時の累積実行時間が“00:01:12.122”であったことを示す。また、テスト終了時にプロセス“providerMGR”が終了していた(存在していなかった)ため、情報収集部140は累積実行時間を取得できなかったことを示す。プロセス“providerMGR”は、テスト開始時には実行されていたが、テスト途中に当該プロセスは終了していたと判断できる。すなわち、プロセス“providerMGR”は実行パターンP2のプロセスである。
また、例えば、比較テーブル116には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“providermonit”、累積実行時間の開始時が登録なし、累積実行時間の終了時が“00:00:00.098”という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテストを行ったときのプロセス“providermonit”のテスト終了時の累積実行時間が“00:00:00.098”であったことを示す。また、テスト開始時にプロセス“providermonit”が生成されていなかった(存在していなかった)ため、情報収集部140は累積実行時間を取得できなかったことを示す。プロセス“providermonit”は、テスト開始時には生成されていなかったが、テスト途中に生成され、実行されたと判断できる。すなわち、プロセス“providermonit”は、実行パターンP3のプロセスである。
また、例えば、比較テーブル116には、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“ccSvcHst”、累積実行時間の開始時が“00:00:08.356”、累積実行時間の終了時が“00:00:08.356”という情報が登録されている。これは、テスト対象ソフトウェア150のテスト項目“T1”のテストを行ったときのプロセス“ccSvcHst”のテスト開始時の累積実行時間が“00:00:08.356”、テスト終了時の累積実行時間が“00:00:08.356”であったことを示す。テスト開始時の累積実行時間とテスト終了時の累積実行時間が同じなので、プロセス“ccSvcHst”は、テスト時に実行されなかったと判断できる。すなわち、プロセス“ccSvcHst”は、実行パターンP5のプロセスである。
図12は、プロセス履歴テーブルの例を示す図である。プロセス履歴テーブル117は、記憶部110に格納される。プロセス履歴テーブル117は、プロセス名、ログID(IDentifier)、ログ生成時刻、種別および詳細情報の項目を含む。
プロセス名の項目には、プロセスの名称が登録される。ログIDの項目には、ログのIDが登録される。ログ生成時刻の項目には、ログの生成時刻が登録される。種別の項目には、ログの種別が登録される。例えば、プロセスの生成を示す場合、種別は“生成”となる。プロセスに関するエラーを示す場合、種別は“エラー”となる。プロセスの終了を示す場合、種別は“終了”となる。詳細情報の項目には、生成されたプロセスと通信する他のプロセスが異常を生じさせた場合にその内容を示す情報が登録される。
詳細情報には、エラーコード、関連プロセスID、関連プロセス名および検出箇所コードが含まれる。エラーコードは、異常内容を識別するための情報である。関連プロセスIDは、当該他のプロセスのプロセスIDである。関連プロセス名は、当該プロセスIDに対応するプロセス名である。検出箇所コードは、当該他のプロセスにおいて異常が検出されたステップを示す情報である。
例えば、プロセス履歴テーブル117には、プロセス名が“stubprovider”、ログIDが“L1”、ログ生成時刻が“15:16:17.203”、種別が“生成”という情報が登録されている。これは、時刻“15:16:17.203”にプロセス名“stubprovider”のプロセスが生成されたことを示す。
また、例えば、プロセス履歴テーブル117には、プロセス名が“stubprovider”、ログIDが“L2”、ログ生成時刻が“15:16:18.358”、種別が“エラー”、エラーコードが“1275”、関連プロセスIDが“1054”、関連プロセス名“rcvy”、検出箇所コード“3388”という情報が登録されている。
これは、プロセス名“stubprovider”のプロセスで、時刻“15:16:18.358”にエラーが発生したことを示す。また、当該エラーでは、当該プロセス“stubprovider”と通信するプロセス“rcvy”がエラーコード“1275”で示される異常を生じさせたこと、当該異常のあったステップが“3388”で示される箇所であることを示す。
なお、プロセス履歴テーブル117に記録されるログは、情報収集部140により生成されるものでもよいし、OS120や他のソフトウェアが出力したログを収集したものでもよい。
図13は、プロセステーブルの例を示す図である。プロセステーブル118は、情報収集対象として選択されたプロセスを登録するテーブルである。プロセステーブル118は、記憶部110に格納される。プロセステーブル118は、項番、テスト開始時間、テスト終了時間、ソフトウェア名、テスト項目およびプロセス名の項目を含む。
項番の項目には、レコードを識別するための番号が登録される。テスト開始時間の項目には、該当のテスト項目のテストを開始した時間が登録される。テスト終了時間の項目には、該当のテスト項目のテストを終了した時間が登録される。テスト開始時間やテスト終了時間として時分秒を記録するものとするが、年月日などを記録してもよい。ソフトウェア名の項目には、テスト対象のソフトウェアの名称が登録される。テスト項目の項目には、テスト項目の識別情報が登録される。プロセス名の項目には、情報収集の対象とするプロセスの名称が登録される。
例えば、プロセステーブル118には、項番が“1”、テスト開始時間が“15:16:16”、テスト終了時間が“15:19:17”、ソフトウェア名が“SW1”、テスト項目が“T1”、プロセス名が“smss、providerMGR、providermonit、stubprovider、rcvy、・・・”という情報が登録されている。
これは、時間“15:16:16〜15:19:17”に行われたテスト対象ソフトウェア150のテスト項目“T1”のテストにおいて、情報収集対象のプロセスとして“smss、providerMGR、providermonit、stubprovider、rcvy、・・・”が選択されたことを示す。
図14は、ソフトウェアのテストの処理例を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
(ステップS11)テスト処理部130は、テスト対象としてテスト対象ソフトウェア150の指定を受け付ける。例えば、テスト対象のソフトウェアは、ユーザによって指定される。
(ステップS12)情報収集部140は、プロセス選択モードの指定を受け付ける。プロセス選択モードは、情報収集対象のプロセスを選択する方法を示す。プロセス選択モードには、“プロセス指定”および“全プロセス指定”の2種類がある。“プロセス指定”は、ユーザにより指定された候補プロセス(候補プロセステーブル111)の中から、プロセスを絞り込むことで情報収集対象のプロセスを選択するモードである。“全プロセス指定”は、あらゆるプロセスの中からテストに関連して実行されたと推測されるプロセスを全て選択するモードである。“全プロセス指定”では、除外プロセステーブル112により、情報収集の対象外とするプロセスを設定できる。ユーザは、テストに応じて何れかの方法を選択できる。
(ステップS13)テスト処理部130は、テスト対象ソフトウェア150に対して1回目のテストを行う。情報収集部140は、プロセス選択処理を行う。プロセス選択処理では、以降のステップにおいて情報収集の対象とするプロセスを選択する。
(ステップS14)テスト処理部130は、テスト対象ソフトウェア150に対して2回目のテストを行う。情報収集部140は、ステップS13で選択されたプロセスについてメモリダンプを取得する。
(ステップS15)テスト処理部130は、テスト対象ソフトウェア150に対して3回目のテストを行う。情報収集部140は、ステップS13で選択されたプロセスについて、トレースデータを取得する。
次に、ステップS13のプロセス選択処理の手順を説明する。
図15は、プロセス選択処理の例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。
(ステップS21)テスト処理部130は、変数nに1を代入する。
(ステップS22)テスト処理部130は、記憶部110に記憶されたテスト管理テーブル113を参照し、テスト項目Tnのテスト情報を取得する。例えば、テスト対象ソフトウェア150(“SW1”)のテスト項目“T1”であれば、テスト情報“test1”を取得する。
(ステップS23)テスト処理部130は、テスト対象ソフトウェア150に対するテスト項目Tnのテスト開始を情報収集部140に通知する。
(ステップS24)情報収集部140は、テスト開始時処理を行う。詳細は後述する。情報収集部140は、記憶部110に記憶されたプロセステーブル118にテスト開始時間、ソフトウェア名およびテスト項目を登録しておく。
(ステップS25)テスト処理部130は、ステップS22で取得したテスト情報を用いて、テスト対象ソフトウェア150に対するテスト項目Tnのテストを行う。
(ステップS26)情報収集部140は、テスト時に生成、エラー、終了となったプロセスのログを収集し、記憶部110に記憶されたプロセス履歴テーブル117に記録する。情報収集部140は、当該ログをソフトウェア名やテスト項目に対応付けて、プロセス履歴テーブル117に記録してもよい。
(ステップS27)テスト処理部130は、テスト対象ソフトウェア150に対するテスト項目Tnのテストを終了する。テスト処理部130は、情報収集部140にテスト項目Tnのテスト終了を通知する。
(ステップS28)情報収集部140は、テスト終了時処理を行う。詳細は後述する。情報収集部140は、プロセステーブル118に当該テストのテスト終了時間を登録しておく。
(ステップS29)情報収集部140は、ステップS24,S28で取得されたプロセスごとの累積実行時間の比較処理を行う。詳細は後述する。
(ステップS30)テスト処理部130は、テスト管理テーブル113を参照し、全てのテスト項目がテスト済みであるか判定する。全てテスト済みの場合、処理を終了する。未実行のテストがある場合、処理をステップS31に進める。例えば、テスト対象ソフトウェア150(“SW1”)の場合、テスト管理テーブル113を参照し、テスト項目“T1”および“T2”の両方をテスト済みなら全てテスト済みである。
(ステップS31)テスト処理部130は、変数nに1を加算する。そして、処理をステップS22に進める。
次に、ステップS24のテスト開始時処理の手順を説明する。
図16は、テスト開始時処理の例を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
(ステップS41)情報収集部140は、ステップS41の時点で存在しているプロセスを取得する。例えば、情報収集部140は、OS120に対して所定のコマンドを発行することで、現存しているプロセスのプロセスIDやプロセス名を取得できる。
(ステップS42)情報収集部140は、プロセス選択モードを判定する。“プロセス指定”の場合、処理をステップS43に進める。“全プロセス指定”の場合、処理をステップS44に進める。
(ステップS43)情報収集部140は、記憶部110に記憶された候補プロセステーブル111を参照し、テスト対象のソフトウェアに対応するプロセスを取得する。情報収集部140は、ステップS41で取得したプロセスと候補プロセステーブル111から取得したプロセスの両方に存在するプロセスに絞り込む。例えば、ステップS41で取得されたプロセスが、プロセス“smss、providerMGR、ccSvcHst、・・・”であるとする。候補プロセステーブル111によれば、ソフトウェア名“SW1”に対応する候補プロセスは“smss、providerMGR、providermonit、stubprovider、ccSvcHst、printMGR、・・・”である。よって、情報収集部140は、両方に存在するプロセス“smss、providerMGR、ccSvcHst、・・・”に絞り込む。そして、処理をステップS45に進める。
(ステップS44)情報収集部140は、記憶部110に記憶された除外プロセステーブル112を参照し、除外対象のプロセスを取得する。情報収集部140は、ステップS41で特定したプロセスから除外対象のプロセスを除くことで、プロセスを絞り込む。除外プロセステーブル112によれば、ソフトウェア名“SW1”に対応する除外プロセスは、“System Idle Process、System、svchost、・・・”である。よって、情報収集部140は、ステップS41で取得されたプロセスから当該除外プロセスを除外する。そして、処理をステップS45に進める。
(ステップS45)情報収集部140は、ステップS43またはステップS44で絞り込んだプロセスを、記憶部110に記憶された開始テーブル114に登録する。
(ステップS46)情報収集部140は、ステップS45で開始テーブル114に登録したプロセスごとに、累積実行時間を取得し、開始テーブル114に登録する。OS120は、現存するプロセスの累積実行時間を記憶部110に格納している。情報収集部140は、記憶部110を参照することで、プロセスごとの累積実行時間を取得できる。情報収集部140は、前述のようにOS120に対して所定のコマンドを発行することで、プロセスごとの累積実行時間を取得してもよい。
次に図15のステップS28のテスト終了時処理の手順を説明する。
図17は、テスト終了時処理の例を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。
(ステップS51)情報収集部140は、ステップS51の時点で存在しているプロセスを取得する。例えば、情報収集部140は、OS120に対して所定のコマンドを発行することで、現存しているプロセスのプロセスIDやプロセス名を取得できる。
(ステップS52)情報収集部140は、プロセス選択モードを判定する。“プロセス指定”の場合、処理をステップS53に進める。“全プロセス指定”の場合、処理をステップS54に進める。
(ステップS53)情報収集部140は、記憶部110に記憶された候補プロセステーブル111を参照し、テスト対象のソフトウェアに対応するプロセスを取得する。情報収集部140は、ステップS51で取得したプロセスと候補プロセステーブル111から取得したプロセスの両方に存在するプロセスに絞り込む。具体的な方法は、ステップS43と同様である。そして、処理をステップS55に進める。
(ステップS54)情報収集部140は、記憶部110に記憶された除外プロセステーブル112を参照し、除外対象のプロセスを取得する。情報収集部140は、ステップS51で特定したプロセスから除外対象のプロセスを除くことで、プロセスを絞り込む。具体的な方法は、ステップS44と同様である。そして、処理をステップS55に進める。
(ステップS55)情報収集部140は、ステップS53またはステップS54で絞り込んだプロセスを、記憶部110に記憶された終了テーブル115に登録する。
(ステップS56)情報収集部140は、ステップS55で終了テーブル115に登録したプロセスごとに、累積実行時間を取得し、終了テーブル115に登録する。OS120は、現存するプロセスの累積実行時間を記憶部110に格納している。情報収集部140は、記憶部110を参照することで、プロセスごとの累積実行時間を取得できる。情報収集部140は、前述のようにOS120に対して所定のコマンドを発行することで、プロセスごとの累積実行時間を取得してもよい。
次に、図15のステップS29の比較処理の手順を説明する。
図18は、比較処理の例を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。
(ステップS61)情報収集部140は、開始テーブル114および終了テーブル115に基づいて比較テーブル116を作成する。
(ステップS62)情報収集部140は、比較テーブル116からプロセスを1つ抽出する。
(ステップS63)情報収集部140は、抽出したプロセスについて、テスト開始時およびテスト終了時の両方に累積実行時間が登録されているか判定する。登録されている場合、処理をステップS64に進める。登録されていない場合、処理をステップS65に進める。
(ステップS64)情報収集部140は、テスト開始時点およびテスト終了時点の累積実行時間は同じであるか判定する。同じである場合、処理をステップS66に進める。同じでない場合、処理をステップS65に進める。
(ステップS65)情報収集部140は、ステップS62で抽出したプロセスをプロセステーブル118に登録する。ステップS65では、実行パターンP1,P2,P3のプロセスが登録され得る。
(ステップS66)情報収集部140は、テスト対象ソフトウェア150のテスト項目Tnの現テストについて、比較テーブル116の全てのプロセスを確認済みであるか判定する。確認済みの場合、処理をステップS67に進める。確認済みでない場合、処理をステップS62に進める。
(ステップS67)情報収集部140は、プロセス履歴テーブル117を参照し、テスト中に生成されたプロセスのログがあるか否か判定する。プロセス生成のログがある場合、処理をステップS68に進める。ログがない場合、処理を終了する。なお、“プロセス指定”モードの場合、テスト中に生成されたプロセスが候補プロセスにもなっている(候補プロセステーブル111に登録されている)場合に、ステップS68に進める(候補プロセスでなければ、処理を終了する)。また、“全プロセス指定”モードの場合、テスト中に生成されたプロセスが除外プロセスになっていない(除外プロセステーブル112に登録されていない)場合に、ステップS68に進める(除外プロセスであれば処理を終了する)。なお、テスト中の時間帯はプロセステーブル118に登録されている。
(ステップS68)情報収集部140は、ステップS67で特定したプロセス(テスト中に生成されたプロセス)をプロセステーブル118に登録する。ステップS68では、実行パターンP4のプロセスが登録される。
(ステップS69)情報収集部140は、プロセス履歴テーブル117を参照し、プロセステーブル118に登録されたプロセスのうち、テスト中にエラーとなったプロセスを特定する。情報収集部140は、特定したプロセスのログの詳細情報に関連プロセスの登録があるか否かを判定する。登録がある場合、処理をステップS70に進める。登録がない場合、処理を終了する。
(ステップS70)情報収集部140は、ステップS69で特定した関連プロセスをプロセステーブル118に登録する。
次に、図14のステップS14のメモリダンプ取得処理の手順を説明する。
図19は、メモリダンプ取得処理の例を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。
(ステップS71)テスト処理部130は、変数nに1を代入する。
(ステップS72)テスト処理部130は、記憶部110に記憶されたテスト管理テーブル113を参照し、テスト項目Tnのテスト情報を取得する。
(ステップS73)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目Tnのテストを開始する。
(ステップS74)テスト処理部130は、テスト対象ソフトウェア150に対するテスト項目Tnのテストを終了する。
(ステップS75)テスト処理部130は、ステップS72で取得したテスト情報に基づいてテスト結果が不正(エラー)であるか否かを判定する。テスト結果が不正である場合、その旨を情報収集部140に通知して、処理をステップS76に進める。テスト結果が適正である場合、処理をステップS77に進める。
(ステップS76)情報収集部140は、プロセステーブル118を参照し、テスト対象ソフトウェア150(“SW1”)に対応するテスト項目Tnのプロセスを特定する。情報収集部140は、特定したプロセスに関するメモリダンプをHDD103の所定の記憶領域にファイルとして出力する。
(ステップS77)テスト処理部130は、テスト管理テーブル113を参照し、全てのテスト項目がテスト済みであるか判定する。全てテスト済みの場合、処理を終了する。未実行のテストがある場合、処理をステップS78に進める。
(ステップS78)テスト処理部130は、変数nに1を加算する。そして、処理をステップS72に進める。
次に、図14のステップS15のトレースデータ取得処理の手順を説明する。
図20は、トレースデータ取得処理の例を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。
(ステップS81)テスト処理部130は、変数nに1を代入する。
(ステップS82)テスト処理部130は、記憶部110に記憶されたテスト管理テーブル113を参照し、テスト項目Tnのテスト情報を取得する。
(ステップS83)テスト処理部130は、テスト対象ソフトウェア150のテスト項目Tnについてトレースデータの取得開始を情報収集部140に指示する。情報収集部140は、プロセステーブル118を参照し、テスト対象ソフトウェア150(“SW1”)に対応するテスト項目Tnのプロセスを特定する。情報収集部140は、特定したプロセスについて、トレースデータの取得を開始する。
(ステップS84)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目Tnのテストを開始する。
(ステップS85)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目Tnのテストを終了する。
(ステップS86)テスト処理部130は、トレースデータの取得終了を情報収集部140に指示する。情報収集部140は、トレースデータの取得を終了する。
(ステップS87)テスト処理部130は、ステップS82で取得したテスト情報に基づいてテスト結果が不正(エラー)であるか否かを判定する。テスト結果が不正である場合、その旨を情報収集部140に通知して、処理をステップS88に進める。テスト結果が適正である場合、処理をステップS89に進める。
(ステップS88)情報収集部140は、ステップS83〜S86の間に取得されたプログラムごとのトレースデータをHDD103の所定の記憶領域にファイルとして出力する。
(ステップS89)テスト処理部130は、テスト管理テーブル113を参照し、全てのテスト項目がテスト済みであるか判定する。全てテスト済みの場合、処理を終了する。未実行のテストがある場合、処理をステップS90に進める。
(ステップS90)テスト処理部130は、変数nに1を加算する。そして、処理をステップS82に進める。
図21は、プロセス選択処理の具体例を示すシーケンス図である。以下、図21に示す処理をステップ番号に沿って説明する。
(ステップST101)テスト処理部130は、情報収集部140にテスト項目T1のテスト開始を通知する。情報収集部140は、当該テスト開始の通知を受け付ける。
(ステップST102)情報収集部140は、テスト開始時処理を行う。具体的には、当該時点において存在しているプロセスについて、累積実行時間を取得する。
(ステップST103)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを開始する。
(ステップST104)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを終了する。
(ステップST105)テスト処理部130は、情報収集部140にテスト項目T1のテスト終了通知を行う。情報収集部140は、当該テスト終了の通知を受け付ける。
(ステップST106)情報収集部140は、テスト終了時処理を行う。具体的には、当該時点において存在しているプロセスについて、累積実行時間を取得する。
(ステップST107)情報収集部140は、比較処理を行う。具体的には、ステップST102,ST106で取得したプロセスごとの累積実行時間に基づいて、テスト対象ソフトウェア150のテスト項目T1のテストの際に、情報収集の対象とするプロセスを選択する。
(ステップST108)テスト処理部130は、情報収集部140にテスト項目T2のテスト開始通知を行う。
そして、テスト装置100は、全てのテスト項目が終了するまで、ステップST101からステップST107までの処理を繰り返す。こうして、テスト項目ごとに情報収集の対象とするプロセスが選択される。
図22は、プロセス選択の具体例を示す図である。図22では、テスト項目T1に対してプロセステーブル118に登録されたプロセスを例示している。情報収集部140は、開始テーブル114、終了テーブル115およびプロセス履歴テーブル117に登録された情報に基づいて、図18の手順を実行することでテスト対象ソフトウェア150のテスト項目T1について、情報収集の対象とするプロセスを得る。
例えば、プロセス“smss”の累積実行時間は、テスト開始時とテスト終了時で異なる。すなわち、プロセス“smss”は実行パターンP1のプロセスである。よって、情報収集部140は、プロセス“smss”を情報収集の対象として選択する。
また、プロセス“providerMGR”について、テスト開始時の累積実行時間は取得されているが、テスト終了時の累積実行時間は取得されていない。これは、テスト開始時からテスト終了時までの間にプロセス“providerMGR”が実行され、終了したことを示す。すなわち、プロセス“providerMGR”は、実行パターンP2のプロセスである。よって、情報収集部140は、プロセス“providerMGR”を情報収集の対象として選択する。
また、プロセス“providermonit”について、テスト開始時の累積実行時間は取得されていないが、テスト終了時の累積実行時間は取得されている。これは、テスト開始時からテスト終了時までの間にプロセス“providermonit”が生成され、実行されたことを示す。すなわち、プロセス“providermonit”は、実行パターンP3のプロセスである。よって、情報収集部140は、プロセス“providermonit”を情報収集の対象として選択する。
また、プロセス“ccSvcHst”の累積実行時間はテスト開始時とテスト終了時で同じであるため、プロセス“ccSvcHst”はテスト中に実行されなかったことを示す。すなわち、プロセス“ccSvcHst”は、実行パターンP5のプロセスである。よって、情報収集部140は、プロセス“ccSvcHst”を情報収集の対象としない。
更に、情報収集部140は、プロセス履歴テーブル117を参照し、テスト時に生成されたプロセス“stubprovider”を特定する。プロセス“stubprovider”は、テスト開始時およびテスト終了時に存在していなかったため、開始テーブル114および終了テーブル115に登録されていない。これは、テスト開始時からテスト終了時までの間にプロセス“providermonit”が生成され、実行され、終了されたことを示す。すなわち、プロセス“providermonit”は、実行パターンP4のプロセスである。よって、情報収集部140は、プロセス“stubprovider”を情報収集の対象として選択する。
また、情報収集部140は、プロセス履歴テーブル117を参照し、プロセス“stubprovider”に関連するプロセスがテスト中に異常を生じさせたことを特定する。情報収集部140は、当該関連するプロセス“rcvy”を情報収集の対象として選択する。
情報収集部140は、以上のようにして情報収集の対象とするプロセス“smss、providerMGR、providermonit、stubprovider、rcvy”を選択し、プロセステーブル118に登録する。情報収集部140は、このようにして、テスト対象のソフトウェアごと、テスト項目ごとに情報収集の対象とするプロセスを選択する。そして、情報収集部140は、選択したプロセスについて情報収集を行う。
図23は、情報収集処理の具体例を示すシーケンス図である。以下、図23に示す処理をステップ番号に沿って説明する。
(ステップST111)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを開始する。
(ステップST112)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを終了する。
(ステップST113)テスト処理部130は、テスト項目T1のテスト結果が不正であると判断する。
(ステップST114)テスト処理部130は、メモリダンプの出力を情報収集部140に指示する。情報収集部140は、当該指示を受け付ける。
(ステップST115)情報収集部140は、テスト対象ソフトウェア150のテスト項目T1に対して情報収集の対象として選択済のプロセスに関するメモリダンプを、HDD103にファイルとして出力する。情報収集部140は、出力したファイルがテスト対象ソフトウェア150のテスト項目T1に対して取得されたものであることが分かるように識別情報をファイルに付与する。
(ステップST116)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T2のテストを開始する。
そして、全てのテスト項目が終了するまで、ステップST111からステップST115までの処理を繰り返す。
(ステップST117)テスト処理部130は、テスト対象ソフトウェア150のテスト項目T1について、トレースデータの取得開始を情報収集部140に指示する。情報収集部140は、テスト対象ソフトウェア150のテスト項目T1について、情報収集の対象として選択済のプロセスに関してトレースデータの取得を開始する。
(ステップST118)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを開始する。
(ステップST119)テスト処理部130は、テスト対象ソフトウェア150に対して、テスト項目T1のテストを終了する。
(ステップST120)テスト処理部130は、情報収集部140にトレースデータの取得終了を情報収集部140に指示する。情報収集部140は、トレースデータの取得を終了する。
(ステップST121)テスト処理部130は、テスト項目T1のテスト結果が不正であると判断する。
(ステップST122)テスト処理部130は、トレースデータの出力を情報収集部140に指示する。情報収集部140は、当該指示を受け付ける。
(ステップST123)情報収集部140は、ステップST117〜ST120の間に取得したトレースデータを、HDD103にファイルとして出力する。情報収集部140は、出力したファイルがテスト対象ソフトウェア150のテスト項目T1に対して取得されたものであることが分かるように識別情報をファイルに付与する。
(ステップST124)テスト処理部130は、テスト対象ソフトウェア150のテスト項目T2について、トレースデータの取得開始を情報収集部140に指示する。
そして、全てのテスト項目が終了するまで、ステップST117からステップST123までの処理を繰り返す。
ここで、例えば、情報収集の対象とするプロセスを選択して、エラー時に採取する情報を予め絞り込めば、余計な(ソフトウェアのテストとは関連のない)プロセスの情報を採取するよりも、原因究明の分析作業を効率化し得る。そこで、ソフトウェアのテストでは、テスト装置100上に多数存在するソフトウェアのプロセスの中から、情報収集の対象とするプロセスをどのようにして効率的に選択するかが問題となる。
例えば、ソフトウェアのテストを行っている最中に、存在している全プロセスについてログやトレースデータなどの情報を網羅的に取得し、取得した情報を分析してテストと関連したプロセスを特定することも考えられる。しかし、網羅的に情報を取得しようとすると、当該情報の取得の処理に伴うテスト装置100の負荷が問題となる。テスト装置100の負荷が増大すると、テスト対象のソフトウェアの処理が適正に行われなくなるおそれがある。また、網羅的に情報を取得すると、その情報量も増大し得る。このため、分析作業におけるユーザの負担が過大となるおそれもある。
そこで、テスト装置100では、テスト開始時およびテスト終了時に各プロセスの累積実行時間を取得し、当該累積実行時間に基づいて、ソフトウェアのテストに関連するプロセスを選択する。このため、全てのプロセスについて網羅的に情報を取得しなくてよく、プロセス選択用の情報の取得に伴う負荷を比較的小さく抑えられる。よって、テスト装置100の負荷がテストに与える影響を軽減できる。また、テスト開始時およびテスト終了時の各プロセスの累積実行時間に基づいて、情報収集の対象とするプロセスを選択するので、ユーザに対して当該プロセスを特定する作業を強いずに済む。よって、ユーザの作業の省力化を図れる。
例えば、テスト装置100は、当該テストを再実行する際に、選択したプロセスを指定して、トレースログやメモリダンプなどの情報を収集し得る。このとき、情報の収集範囲を選択したプロセスに絞り込めるので、当該情報収集に要する負荷を軽減できる。
また、ソフトウェアのテストが成功しなかった場合、原因を特定し、テストが成功するまでテスト環境を保持しておくことが多い。テスト環境に用いるリソースを有効活用したい場合は、短期間でテストを終了して、当該リソースを解放することが求められる。この点、第2の実施の形態を用いることで、原因分析の負担を軽減できるため、短い期間でテストを終了できる可能性も高まる。
また、前述のように、情報収集部140は、OS120が提供するAPI(Application Programming Interface)を利用して、テスト開始時およびテスト終了時の累積実行時間を取得してもよい。そうすれば、情報収集部140(または、OS120)は、例えばRAM102上の所定の領域を参照してプロセスごとの累積実行時間を取得できるので、プロセス選択用の情報を取得するための負荷を比較的小さくできる。すなわち、テスト中の余計な負荷を軽減し、テストのための本来の処理に対する影響を抑制できる。
以上のように、テスト装置100によれば、テストの効率化を図れる。
次に、プロセステーブル118の他の利用例を説明する。プロセステーブル118には、テスト対象のソフトウェアごとに情報収集の対象とするプロセスが登録されている。同じソフトウェアについてあるテスト項目を複数回実行した場合に、同じプロセスが複数回選択されていれば、プログラム走行時に同じルートで処理が実行された可能性が高い。このようなテスト項目は、テスト実行時のリソース利用に関して再現性が高く、有効性の高いテスト項目であるといえる。ブラックボックステストにおいて、リソース利用の再現性を確保できなければ、ソフトウェアのエラーに対して原因となる証拠を得るのが難しくなり、的確な分析を行えないからである。
有効性の高いテスト項目を抽出できれば、テストの効率化を図れる。例えば、ソフトウェア改版に伴うリグレッションテスト(Regression Test)を行う場合である。改版前のソフトウェアのテスト結果に基づいて、有効性の高いテスト項目に絞って改版後のソフトウェアのテストを行うことが考えられる。そこで、プロセステーブル118に基づく、テスト項目の有効性の検証機能を提供する。
図24は、テスト項目の有効性の検証例を示すフローチャートである。以下、図24に示す処理をステップ番号に沿って説明する。
(ステップS91)情報収集部140は、ユーザの入力により検証対象のソフトウェアおよびテスト項目の指定を受け付ける。例えば、ソフトウェア名“SW2”およびテスト項目“T1”が指定される。
(ステップS92)情報収集部140は、プロセステーブル118を参照し、指定を受けたソフトウェアとテスト項目を特定する。
(ステップS93)情報収集部140は、情報収集の対象とするプロセスが一致するかを判定する。例えば、プロセステーブル118によれば、項番“3”、“4”のそれぞれのレコードに含まれるプロセスが一致するか否かを判定する。
(ステップS94)情報収集部140は、判定結果をディスプレイ11に出力する。そして、処理を終了する。情報収集部140は、一致するプロセスまたは不一致のプロセスを出力してもよい。例えば、情報収集部140は、全てのプロセスが一致する場合に、当該テスト項目を有効と評価し、当該テスト項目をリグレッションテストに採用すると決定してもよい。情報収集部140は、何れかのプロセスが一致しない場合に、当該テスト項目を有効でないと評価し、当該テスト項目をリグレッションテストに採用しないと決定してもよい。
このように、情報収集部140は、テスト対象ソフトウェア150のテスト項目を複数回テストし、各回で選択されたプロセスが一致する割合に基づいて、当該テスト項目が有効であるか否かを評価する。例えば、各回で選択されたプロセスが一致する割合を次のようにして求めることが考えられる。第1には、あるテスト項目に対して今回選択されたプロセスのうち前回も選択されていたプロセスの数を、今回選択されたプロセスの総数で割ることで求めてもよい。第2には、各回で選択されたプロセスが一致する割合を、あるテスト項目に対して今回選択されたプロセスのうち前回までに選択されたことがあるプロセスの数を、今回選択されたプロセスの総数で割ることで求めてもよい。例えば、完全一致の場合に有効と判断する以外にも、所定の割合(例えば、90%、95%など)以上で一致する場合に有効と判断してもよい。
これにより、テスト項目数の肥大化を抑制し、かつ、より有効性の高いテスト項目に絞れる。よって、リグレッションテスト時に、改版後のソフトウェアのテストを効率的に行えるようになる。
また、ソフトウェア改版時のリグレッションテストでは、ソフトウェアに不具合がないかをテストすることもある。例えば、プロセステーブル118をリグレッションテスト時のテスト項目の抽出に用いることも考えられる。
図25は、テスト項目の抽出処理の例を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。
(ステップS101)情報収集部140は、ユーザの入力によりテスト対象のソフトウェアおよびプロセスの指定を受ける。プロセスの指定は複数であってもよい。例えば、情報収集部140は、ソフトウェア“SW1”およびプロセス“smss”の指定を受け付ける。
(ステップS102)情報収集部140は、プロセステーブル118を参照し、ユーザから指定されたソフトウェアおよびプロセスを基にテスト項目を特定する。情報収集部140は、プロセステーブル118を参照する。情報収集部140は、ソフトウェア“SW1”でプロセス“smss”が登録されたテスト項目“T1”および“T2”を特定する。
(ステップS103)情報収集部140は、特定したテスト項目をディスプレイ11に出力する。そして、処理を終了する。
このように、プロセステーブル118を利用して、実行されるプロセスのテスト項目を容易に抽出できる。リグレッションテスト時には、ソフトウェアの改版前後で同じプロセスが実行され得る。よって、上記のようにテスト対象のソフトウェアとプロセスとを指定して改版前のテスト時のテスト項目を抽出することで、改版後のテスト項目を効率的に作成できる。情報収集部140は、抽出したテスト項目に基づいて、リグレッションテスト時のテスト項目を生成し、テスト管理テーブル113に登録してもよい。このようにすれば、ユーザによるテスト項目の作成作業の負担を軽減することができる。
以上のように、テスト装置100によればテストの効率化を図れる。
なお、前述のように、第1の実施の形態の情報処理は、演算部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体(例えば、光ディスク、メモリ装置およびメモリカードなど)に記録できる。
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。
また、上記の情報処理の少なくとも一部を、DSP、ASIC、PLD(Programmable Logic Device)などの電子回路で実現することもできる。