(57)【特許請求の範囲】
【請求項１】
稼動しているプロセスのうち、孤児プロセスを特定する第１処理を実行する特定部と、
検証対象のプログラムへの入力データを設定する第２処理を実行する設定部と、
前記検証対象のプログラムを起動する第３処理を実行する起動部と、
前記検証対象のプログラムの動作を検証する第４処理を実行する検証部と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理を実行する停止部と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す制御部と
を有するテスト管理装置。
【請求項２】
更に、
前記第４処理を終えた時点で稼動しているプロセスのうち、前記第１処理で特定した前記孤児プロセス以外の第２孤児プロセスを特定する第６処理を実行する第２特定部と、
前記第２孤児プロセスと、前記第２孤児プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第３プロセスとを終了させる第７処理を実行する第２停止部と
を有し、
前記制御部は、前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とに加えて、前記第６処理と、前記第７処理とを繰り返す
請求項１記載のテスト管理装置。
【請求項３】
稼動しているプロセスのうち、孤児プロセスを特定する第１処理と、
検証対象のプログラムへの入力データを設定する第２処理と、
前記検証対象のプログラムを起動する第３処理と、
前記検証対象のプログラムの動作を検証する第４処理と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す処理と
をコンピュータに実行させるテスト管理プログラム。
【請求項４】
稼動しているプロセスのうち、孤児プロセスを特定する第１処理と、
検証対象のプログラムへの入力データを設定する第２処理と、
前記検証対象のプログラムを起動する第３処理と、
前記検証対象のプログラムの動作を検証する第４処理と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す処理と
を含み、コンピュータにより実行されるテスト管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムをテストする技術に関する。
【背景技術】
【０００２】
プログラムのテストフェーズでは、複数タイプの入力データを準備して、各タイプの入力データによるプログラムの動作を検証することがある。そして、プログラムが期待通りに動作するか否かをチェックする。例えば、ファイルファジングでは、内容の異なるファイルを複数用意し、各ファイルを検証対象のプログラムに読み込ませて動作を検証する。
【０００３】
また、各種類の入力データによるプログラムの動作検証を自動的に繰り返すように制御することがある。このような場合には、各動作検証において検証対象のプログラムが起動される時点で、動作環境が同じであることが望ましい。
【０００４】
そのため、１回の動作検証を終えると、次の動作検証に移る前に、検証対象のプログラムのプロセス及び当該プロセスによって直接的又は間接的に呼び出された他のプロセス（つまり子孫プロセス）を強制的に終了させる。
【０００５】
このとき、誤って検証対象のプログラムのプロセス及び子孫プロセス以外のプロセスを終了させてしまうと、テストに支障が生じることがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−１０８４４５号公報
【特許文献２】特開平８−３２０８０９号公報
【特許文献３】特開平４−２６４６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、一側面では、プログラムの動作検証を繰り返すテストを、より安定的に行えるようにすることである。
【課題を解決するための手段】
【０００８】
一態様に係るテスト管理装置は、（Ａ）稼動しているプロセスのうち、孤児プロセスを特定する第１処理を実行する特定部と、（Ｂ）検証対象のプログラムへの入力データを設定する第２処理を実行する設定部と、（Ｃ）検証対象のプログラムを起動する第３処理を実行する起動部と、（Ｄ）検証対象のプログラムの動作を検証する第４処理を実行する検証部と、（Ｅ）検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ孤児プロセスに該当しない第２プロセスとを終了させる第５処理を実行する停止部と、（Ｆ）第１処理と、第２処理と、第３処理と、第４処理と、第５処理とを繰り返す制御部とを有する。
【発明の効果】
【０００９】
一側面としては、プログラムの動作検証を繰り返すテストを、より安定的に行える。
【図面の簡単な説明】
【００１０】
【図１】図１は、テストの手順を示す図である。
【図２】図２は、稼働中プロセスの例を示す図である。
【図３】図３は、稼働中プロセスの例を示す図である。
【図４】図４は、稼働中プロセスの例を示す図である。
【図５】図５は、プロセスツリーの例を示す図である。
【図６】図６は、稼働中プロセスの例を示す図である。
【図７】図７は、テスト管理装置のモジュール構成例を示す図である。
【図８】図８は、条件テーブルの例を示す図である。
【図９】図９は、メイン処理フローを示す図である。
【図１０】図１０は、孤児特定処理フローを示す図である。
【図１１】図１１は、プロセスデータの例を示す図である。
【図１２】図１２は、孤児データの例を示す図である。
【図１３】図１３は、クリア処理（Ａ）フローを示す図である。
【図１４】図１４は、ツリー生成処理フローを示す図である。
【図１５】図１５は、プロセスデータの例を示す図である。
【図１６】図１６は、サブルーチン処理（Ａ）フローを示す図である。
【図１７】図１７は、ツリーデータの例を示す図である。
【図１８】図１８は、クリア処理（Ｂ）フローを示す図である。
【図１９】図１９は、サブルーチン処理（Ｂ）フローを示す図である。
【図２０】図２０は、第２孤児プロセスの例を示す図である。
【図２１】図２１は、実施の形態３に係るテスト部のモジュール構成例を示す図である。
【図２２】図２２は、実施の形態３に係るメイン処理フローの一部を示す図である。
【図２３】図２３は、第２孤児データの例を示す図である。
【図２４】図２４は、第２孤児特定処理フローを示す図である。
【図２５】図２５は、第２クリア処理（Ａ）フローを示す図である。
【図２６】図２６は、第２ツリー生成処理フローを示す図である。
【図２７】図２７は、第２クリア処理（Ｂ）フローを示す図である。
【図２８】図２８は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１１】
［実施の形態１］
図１に、本実施の形態におけるテストの手順を示す。本実施の形態では、図１の１段目乃至６段目に示す手順に従って、プログラムの動作検証を行う。
【００１２】
１段目について説明する。ＯＳ（オペレーティング・システム）及びテスト管理プロセスは、メモリ空間に展開されている。テスト管理プロセスは、ＯＳに対してテスト対象プログラムの起動を命令する。このとき、テスト管理プロセスは、テスト対象プログラムに入力するファイル（以下、入力ファイルという。）の名前を指定する。ＯＳは、テスト対象プログラムをメモリ空間にロードする。
【００１３】
２段目について説明する。メモリ空間にロードされたテスト対象プログラムは、テスト対象プロセスとして動作する。テスト対象プロセスは、テスト管理プロセスに指定された入力ファイル１０１ａを読み込んで動作する。このとき、ＯＳは、テスト対象プロセスの状態を管理している。
【００１４】
テスト管理プロセスは、ＯＳからテスト対象プロセスの状態を取得して、テスト対象プロセスの動作を検証する。この例では、テスト管理プロセスは、所定時間内にテスト対象プロセスがストールした場合に、エラーが生じたと判定する。一方、テスト管理プロセスは、所定時間内にテスト対象プロセスがストールしなかった場合に、テスト対象プロセスが正常に動作したと判定する。検証結果は、結果記憶部１０３に記憶される。
【００１５】
３段目について説明する。１回目の動作検証を終えると、テスト管理プロセスは、ＯＳを介して、テスト対象プロセスを終了させる。つまり、テスト管理プロセスは、動作検証のために起動したプロセスをクリアする。このようにして、テスト管理プロセスは、１段目と同じ状態に戻してから、２回目の動作検証に移る。テスト管理プロセスを強制的に終了させれば、テスト対象プロセス自身の終了手順によって自らをクリアする場合に比べて、早く次の動作検証に移ることができる。
【００１６】
４段目について説明する。１回目の動作検証の場合と同様に、テスト管理プロセスは、ＯＳに対してテスト対象プログラムの起動を命令する。このとき、テスト管理プロセスは、次の入力ファイル１０１ｂの名前を指定する。
【００１７】
５段目について説明する。２回目の動作検証で、テスト対象プロセスは、テスト管理プロセスに指定された入力ファイル１０１ｂを読み込んで動作する。テスト管理プロセスは、１回目の動作検証の場合と同様に、ＯＳからテスト対象プロセスの状態を取得して、テスト対象プロセスの動作を検証する。検証結果は、結果記憶部１０３に記憶される。
【００１８】
６段目について説明する。２回目の動作検証を終えると、テスト管理プロセスは、１回目の動作検証の場合と同様に、ＯＳを介して、テスト対象プロセスを終了させる。テスト管理プロセスは、再び１段目と同じ状態に戻してから、３回目の動作検証に移る。このように、テスト管理プロセスは、その都度１段目と同じ状態に戻してから、次の動作検証に移る。
【００１９】
余計なプロセスの影響を排除すれば、メモリ領域の不足を招きにくい。また、残存プロセスによる悪い作用を防げる。その結果、システムの挙動が安定化し、テストを継続しやすくなる。
【００２０】
図１では、１つのテスト対象プロセスの発生と消滅とについて説明したが、実際にはテスト対象プロセスによってサブプロセスが起動されることがある。また、他のプロセスも存在する。以下では、孤児プロセスと、孤児プロセスが存在する場合の課題とについて説明する。
【００２１】
図２に、稼働中プロセスの例を示す。図２は、プロセス「Ｘ」、プロセス「Ｄ」、プロセス「Ａ」、プロセス「Ｂ」、プロセス「Ｃ」、プロセス「Ｅ」、プロセス「Ｆ」、プロセス「Ｙ」及びプロセス「Ｇ」が稼動している状態を示している。
【００２２】
この例では、稼働中のプロセス自身のＩＤを、稼働中プロセスＩＤという。図示するように、プロセス「Ｘ」のＩＤは「１０」であり、プロセス「Ｄ」のＩＤは「３０」であり、プロセス「Ａ」のＩＤは「２０」であり、プロセス「Ｂ」のＩＤは「２１」であり、プロセス「Ｃ」のＩＤは「２２」である。また、プロセス「Ｅ」のＩＤは「５０」であり、プロセス「Ｆ」のＩＤは「５１」であり、プロセス「Ｙ」のＩＤは「４０」であり、プロセス「Ｇ」のＩＤは「５５」である。
【００２３】
これらのプロセスのうち、親プロセスＩＤが設定されているものは、他のプロセスによって呼び出されたプロセスである。プロセス「Ｄ」の親プロセスＩＤは「１０」であるので、プロセス「Ｄ」は、プロセスＩＤ「１０」のプロセス「Ｘ」によって、呼び出されたことを表している。プロセス「Ｂ」の親プロセスＩＤは「２０」であるので、プロセス「Ｂ」は、プロセスＩＤ「２０」のプロセス「Ａ」によって、呼び出されたことを表している。プロセス「Ｃ」の親プロセスＩＤも「２０」であるので、プロセス「Ｃ」も、プロセスＩＤ「２０」のプロセス「Ａ」によって、呼び出されたことを表している。このように、同じ親プロセスが複数の子プロセスを呼び出すことがある。プロセス「Ｆ」の親プロセスＩＤは「５０」であるので、プロセス「Ｆ」は、プロセスＩＤ「５０」のプロセス「Ｅ」によって、呼び出されたことを表している。プロセス「Ｇ」の親プロセスＩＤは「４０」であるので、プロセス「Ｇ」は、プロセスＩＤ「４０」のプロセス「Ｙ」によって、呼び出されたことを表している。
【００２４】
一方、親プロセスＩＤが設定されていないプロセス（この例では、プロセス「Ｘ」、プロセス「Ａ」、プロセス「Ｅ」及びプロセス「Ｙ」）は、他のプロセスの呼び出しによらず起動したものである。この例において、親プロセスＩＤの「なし」は、アイドルプロセスのＩＤ「０」に相当する。
【００２５】
図３は、プロセス「Ｘ」が、プロセス「Ｄ」よりも先に終了し、更にプロセス「Ｙ」が、プロセス「Ｇ」よりも先に終了した状態を示している。
【００２６】
このように、先に親プロセスが終了した場合、当該親プロセスに呼び出された子プロセスは残存する。残存する子プロセスを、孤児プロセスという。この例では、孤児プロセスの親プロセスＩＤは、書き換えられないものとする。また、図３乃至図６において、孤児プロセスの枠を便宜的に破線で示している。
【００２７】
孤児プロセス「Ｄ」の親プロセスＩＤは「１０」であるが、プロセスＩＤ「１０」に相当するプロセスは存在しない。孤児プロセス「Ｇ」の親プロセスＩＤは「４０」であるが、プロセスＩＤ「４０」に相当するプロセスは存在しない。尚、プロセス「Ａ」、プロセス「Ｂ」、プロセス「Ｃ」、プロセス「Ｅ」及びプロセス「Ｆ」は、図２の場合と同様である。
【００２８】
図４を用いて、その後テスト対象プログラムが起動され、テスト対象プログラムがサブプログラムを呼び出した状態について説明する。
【００２９】
プロセス「Ａ」、プロセス「Ｂ」、プロセス「Ｃ」、プロセス「Ｄ」、プロセス「Ｅ」、プロセス「Ｆ」及びプロセス「Ｇ」は、図３の場合と同様である。
【００３０】
プロセス「Ｈ」は、起動されたテスト対象プログラムに相当する。プロセス「Ｈ」のＩＤは「１０」であって、親プロセスは存在しない。
【００３１】
プロセス「Ｉ」では、プロセス「Ｈ」によって呼び出されたサブプログラムが動作している。プロセス「Ｉ」のＩＤは「１１」であって、親プロセスＩＤ「１０」はプロセス「Ｈ」に相当する。
【００３２】
プロセス「Ｊ」では、プロセス「Ｈ」によって呼び出された別のサブプログラムが動作している。プロセス「Ｊ」のＩＤは「１２」であって、親プロセスＩＤ「１０」はプロセス「Ｈ」に相当する。
【００３３】
テスト対象プログラムのプロセス「Ｈ」のＩＤとして、既に消滅したプロセス「Ｘ」に割り当てられていたＩＤ「１０」が、再び用いられている。そのため、プロセス「Ｄ」の親プロセスＩＤ「１０」が、テスト対象プログラムのプロセス「Ｈ」に相当する状態となっている。
【００３４】
図５に、テスト対象プログラムに相当するプロセス「Ｈ」をルートノードとするプロセスツリーを示す。
【００３５】
プロセス「Ｉ」は、プロセス「Ｈ」に呼び出されたものであるので、プロセス「Ｈ」とプロセス「Ｉ」との親子関係は、正しい。また、プロセス「Ｊ」も、プロセス「Ｈ」に呼び出されたものであるので、プロセス「Ｈ」とプロセス「Ｊ」との親子関係は、正しい。
【００３６】
一方、プロセス「Ｄ」は、プロセス「Ｈ」に呼び出されたものではないので、プロセス「Ｈ」とプロセス「Ｄ」との親子関係は、正しくない。つまり、プロセス「Ｄ」は、プロセス「Ｈ」の下位プロセスに該当するが、実質的な子プロセスではない。
【００３７】
図６に、図５に示したプロセスツリーに基づいてプロセスをクリアした状態を示す。テスト対象プログラムの起動に起因するプロセスのグループを、このプロセスツリーに基づいて特定し、そのグループに含まれるプロセスを停止する。その結果、プロセス「Ｈ」、プロセス「Ｉ」及びプロセス「Ｊ」に加えてプロセス「Ｄ」も消滅する。もし、プロセス「Ｄ」がテスト対象プログラムの動作検証に関る機能を担っている場合には、プロセス「Ｄ」が動作しなくなることによって、テスト対象プログラムの動作検証に支障が生じるかも知れない。
【００３８】
本実施の形態では、図６に示した状態を回避し、図３に示した元の状態に戻るように制御する。このようにすれば、プロセス「Ｄ」がテスト対象プログラムの動作検証に関る機能を担っている場合であっても、テスト対象プログラムの動作検証に支障が生じない。以上で、本実施の形態の概要についての説明を終える。
【００３９】
続いて、テスト管理装置７００の動作について説明する。図７に、テスト管理装置７００のモジュール構成例を示す。テスト管理装置７００は、生成部７０１を有する。生成部７０１は、プログラムの動作検証に用いられる入力ファイル１０１ａ乃至１０１ｃを生成する。生成部７０１は、自動的に入力ファイル１０１ａ乃至１０１ｃを生成してもよい。又は、生成部７０１は、ユーザ操作に基づいて入力ファイル１０１ａ乃至１０１ｃを生成してもよい。
【００４０】
テスト管理装置７００は、入力データ記憶部７０３と条件テーブル記憶部７０５とを有する。入力データ記憶部７０３は、入力ファイル１０１ａ乃至１０１ｃを記憶する。条件テーブル記憶部７０５は、条件テーブルを記憶する。条件テーブルについては、図８を用いて後述する。
【００４１】
テスト管理装置７００は、プログラム記憶部７０７を有する。プログラム記憶部７０７は、メインプログラム７０９とサブプログラム７１１ａ及び７１１ｂとを記憶する。メインプログラム７０９は、検証対象のプログラムである。サブプログラム７１１ａ及び７１１ｂは、メインプログラム７０９によって呼び出されるプログラムである。この例では、サブプログラム７１１を検証対象としない。但し、サブプログラム７１１を検証対象としてもよい。
【００４２】
テスト管理装置７００は、テスト部７１３を有する。テスト部７１３は、検証対象のプログラムの動作検証を繰り返すテストを行う。テスト部７１３が行うテストは、例えばファイルファジングである。テスト部７１３は、制御部７１５、特定部７１７、設定部７１９、起動部７２１、検証部７２３、停止部７２５、プロセスデータ記憶部７３１、孤児記憶部７３３、ツリー記憶部７３５及び結果記憶部１０３を有する。
【００４３】
制御部７１５は、メインプログラム７０９の動作検証を繰り返す処理を制御する。特定部７１７は、孤児プロセスを特定する。設定部７１９は、メインプログラム７０９を起動する関数の引数に入力ファイル名を設定する。起動部７２１は、メインプログラム７０９を起動する。検証部７２３は、メインプログラム７０９の動作を検証する。停止部７２５は、メインプログラム７０９及びメインプログラム７０９に呼び出されたサブプログラム７１１のプロセスを停止する。
【００４４】
プロセスデータ記憶部７３１は、プロセスデータを記憶するために用いられる。プロセスデータについては、図１１を用いて後述する。孤児記憶部７３３は、孤児データを記憶するために用いられる。孤児データについては、図１２を用いて後述する。ツリー記憶部７３５は、ツリーデータを記憶するために用いられる。ツリーデータについては、図１７を用いて後述する。結果記憶部１０３は、テスト結果を記憶する。
【００４５】
テスト管理装置７００は、ＯＳ７４１を有する。ＯＳ７４１は、例えばプロセスを管理する。また、ＯＳ７４１は、ＡＰＩ（Application Programming Interface）によって、テスト部７１３へプロセスに関するデータを提供する。
【００４６】
上述した生成部７０１、テスト部７１３、制御部７１５、特定部７１７、設定部７１９、起動部７２１、検証部７２３及び停止部７２５は、ハードウエア資源（例えば、図２８）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【００４７】
上述した入力データ記憶部７０３、条件テーブル記憶部７０５、プログラム記憶部７０７、プロセスデータ記憶部７３１、孤児記憶部７３３、ツリー記憶部７３５及び結果記憶部１０３は、ハードウエア資源（例えば、図２８）を用いて実現される。
【００４８】
図８に、条件テーブルの例を示す。この例における条件テーブルは、動作検証の条件に対応するレコード（以下、条件レコードという。）を有している。条件レコードは、条件ＩＤを設定するためのフィールドと、入力ファイル名を設定するためのフィールドとを有している。
【００４９】
条件ＩＤは、動作検証の条件を識別する。入力ファイル名は、動作検証の条件としてテスト対象プログラムに読み込ませる入力ファイルの名前である。
【００５０】
図示した１番目の条件レコードは、ＩＤ「Ｃ００１」で識別される条件の下では、入力ファイル「ＩＮ００１」をテスト対象プログラムに読み込ませて動作検証を行うことを示している。同じく２番目の条件レコードは、ＩＤ「Ｃ００２」で識別される条件の下では、入力ファイル「ＩＮ００２」をテスト対象プログラムに読み込ませて動作検証を行うことを示している。同じく３番目の条件レコードは、ＩＤ「Ｃ００３」で識別される条件の下では、入力ファイル「ＩＮ００３」をテスト対象プログラムに読み込ませて動作検証を行うことを示している。
【００５１】
次に、テスト管理装置７００における処理について説明する。図９に、メイン処理フローを示す。制御部７１５は、条件レコードを１つ特定する（Ｓ９０１）。例えば、制御部７１５は、順次条件レコードを特定する。
【００５２】
特定部７１７は、孤児特定処理を実行する（Ｓ９０３）。孤児特定処理において、特定部７１７は、孤児プロセスを特定する。
【００５３】
図１０に、孤児特定処理フローを示す。特定部７１７は、ＯＳ７４１からプロセスデータを取得する（Ｓ１００１）。プロセスデータは、プロセス一覧あるいはプロセスリストと呼ばれることがある。プロセスデータは、現在稼動しているプロセスに関する。
【００５４】
図１１に、プロセスデータの例を示す。この例におけるプロセスデータは、テーブル形式である。但し、プロセスデータは、テーブル形式以外の形式であってもよい。この例におけるプロセスデータは、稼働中プロセスに対応するレコード（以下、プロセスレコードという。）を有している。プロセスレコードは、プロセス名を設定するためのフィールドと、稼働中プロセスＩＤを設定するためのフィールドと、親プロセスＩＤを設定するためのフィールドとを有している。
【００５５】
プロセス名は、稼働しているプロセスの名前である。稼働中プロセスＩＤは、稼働しているプロセスを識別する。親プロセスＩＤは、稼働しているプロセスを呼び出した親プロセスを識別する。尚、図１１に示したプロセスデータは、図３に示した稼働中プロセスに相当する。
【００５６】
図１０の説明に戻る。特定部７１７は、プロセスレコードを１つ特定する（Ｓ１００３）。例えば、特定部７１７は、順次プロセスレコードを特定する。
【００５７】
特定部７１７は、当該プロセスレコードに設定されている親プロセスＩＤを取得する（Ｓ１００５）。特定部７１７は、当該親プロセスＩＤが、いずれかのプロセスレコードに設定されている稼働中プロセスＩＤと一致するか否かを判定する（Ｓ１００７）。当該親プロセスＩＤが、いずれかのプロセスレコードに設定されている稼働中プロセスＩＤと一致すると判定した場合には、親子関係が正常であるので、孤児データに新たなレコードを設けない。従って、Ｓ１０１１の処理に移る。
【００５８】
一方、Ｓ１００５で取得した親プロセスＩＤが、いずれのプロセスレコードに設定されている稼働中プロセスＩＤにも一致しないと判定した場合には、特定部７１７は、Ｓ１００３において特定されたプロセスレコードの稼動中プロセスＩＤを、孤児データの新たなレコードに設定する（Ｓ１００９）。
【００５９】
孤児データについて説明する。図１２に、孤児データの例を示す。この例における孤児データは、テーブル形式である。但し、孤児データは、テーブル形式以外の形式であってもよい。この例における孤児データは、孤児プロセスに対応するレコード（以下、孤児レコードという。）を有している。孤児レコードは、プロセス名を設定するためのフィールドと、孤児プロセスＩＤを設定するためのフィールドと、親プロセスＩＤを設定するためのフィールドとを有している。
【００６０】
プロセス名は、孤児プロセスの名前である。孤児プロセスＩＤは、孤児プロセスを識別する。親プロセスＩＤは、先に終了した親プロセスに割り振られていたＩＤである。
【００６１】
図示した１番目の孤児レコードは、ＩＤ「３０」で識別されるプロセス「Ｄ」は、孤児プロセスに該当し、先に終了した親プロセスにＩＤ「１０」が割り振られていたことを示している。図示した２番目の孤児レコードは、ＩＤ「５５」で識別されるプロセス「Ｇ」は、孤児プロセスに該当し、先に終了した親プロセスにＩＤ「４０」が割り振られていたことを示している。
【００６２】
図１０に示したＳ１００９の処理の説明に戻る。特定部７１７は、Ｓ１００３において特定されたプロセスレコードの稼動中プロセスＩＤを、孤児プロセスＩＤのフィールドに設定する。更に、特定部７１７は、当該プロセスレコードのプロセス名と親プロセスＩＤとを、新たな孤児レコードに設定する。
【００６３】
そして、特定部７１７は、未処理のプロセスレコードがあるか否かを判定する（Ｓ１０１１）。未処理のプロセスレコードがあると判定した場合には、Ｓ１００３に示した処理に戻って、上述した処理を繰り返す。一方、未処理のプロセスレコードがないと判定した場合には、孤児特定処理を終える。孤児特定処理を終えると、呼び出し元のメイン処理に復帰する。
【００６４】
図９の説明に戻る。設定部７１９は、メインプログラム７０９を起動する関数の引数に、Ｓ９０１で特定した条件レコードから取得した入力ファイル名を設定する（Ｓ９０５）。そして、起動部７２１は、メインプログラム７０９を起動する（Ｓ９０７）。
【００６５】
検証部７２３は、メインプログラム７０９のプロセスを特定する（Ｓ９０９）。例えば、検証部７２３は、プロセス名に基づいてメインプログラム７０９のプロセスＩＤを特定する。
【００６６】
検証部７２３は、メインプログラム７０９のプロセスのストールを検出したか否かを判定する（Ｓ９１１）。具体的には、検証部７２３は、ＯＳ７４１から取得したメインプログラム７０９のプロセスに関するデータに基づいて、メインプログラム７０９のプロセスがストールしたか否かを判定する。メインプログラム７０９のプロセスのストールを検出したと判定した場合には、検証部７２３は、エラーを記録する（Ｓ９１３）。例えば、検証部７２３は、メインプログラム７０９においてエラーが発生した旨と、Ｓ９０１で特定した条件レコードに設定されている条件ＩＤとを結果記憶部１０３に記憶する。そして、Ｓ９１９の処理に移る。
【００６７】
一方、メインプログラム７０９のプロセスのストールを検出していないと判定した場合には、検証部７２３は、Ｓ９０９においてメインプログラム７０９のプロセスを特定した時点から所定時間が経過したか否かを判定する（Ｓ９１５）。当該所定時間が経過していないと判定した場合には、Ｓ９１１に示した処理に戻って、上述した処理を繰り返す。
【００６８】
一方、当該所定時間が経過したと判定した場合には、検証部７２３は、正常の旨を記録する（Ｓ９１７）。例えば、検証部７２３は、Ｓ９０１で特定した条件レコードに設定されている条件ＩＤと、正常であった旨とを結果記憶部１０３に記憶する。そして、Ｓ９１９の処理に移る。
【００６９】
停止部７２５は、クリア処理を実行する（Ｓ９１９）。クリア処理において、停止部７２５は、メインプログラム７０９及びメインプログラム７０９に呼び出されたサブプログラム７１１のプロセスを停止する。
【００７０】
図１３に、クリア処理（Ａ）フローを示す。まず、停止部７２５は、ツリー生成処理を実行する（Ｓ１３０１）。ツリー生成処理において、停止部７２５は、メインプログラム７０９及びメインプログラム７０９に呼び出されたサブプログラム７１１のプロセスに関するツリーデータを生成する。
【００７１】
図１４に、ツリー生成処理フローを示す。停止部７２５は、ＯＳ７４１からプロセスデータを取得する（Ｓ１４０１）。
【００７２】
図１５に、この時点で取得されるプロセスデータの例を示す。図１５に示したプロセスデータは、図４に示した稼働中プロセスに相当する。
【００７３】
図１４の説明に戻る。停止部７２５は、メインプログラム７０９のプロセスＩＤをサブルーチン処理（Ａ）の引数に設定する（Ｓ１４０３）。メインプログラム７０９のプロセスＩＤは、例えばプロセス名に基づいて特定される。停止部７２５は、サブルーチン処理（Ａ）を実行する（Ｓ１４０５）。サブルーチン処理（Ａ）において、停止部７２５は、引数に設定されたプロセスＩＤに基づいて、当該ＩＤのプロセスの子に相当する下位プロセスを探索する。
【００７４】
図１６に、サブルーチン処理（Ａ）フローを示す。停止部７２５は、Ｓ１４０１で取得したプロセスデータに含まれるプロセスレコードを１つ特定する（Ｓ１６０１）。
【００７５】
停止部７２５は、Ｓ１６０１で特定したプロセスレコードに設定されている親プロセスＩＤが、引数のプロセスＩＤと一致するか否かを判定する（Ｓ１６０３）。当該プロセスレコードに設定されている親プロセスＩＤが、引数のプロセスＩＤと一致しないと判定した場合には、Ｓ１６１１の処理に移る。
【００７６】
一方、Ｓ１６０１で特定したプロセスレコードに設定されている親プロセスＩＤが、引数のプロセスＩＤと一致すると判定した場合には、停止部７２５は、当該プロセスレコードに設定されている稼働中プロセスＩＤが、孤児データに含まれるいずれかの孤児プロセスＩＤと一致するか否かを判定する（Ｓ１６０５）。当該プロセスレコードに設定されている稼働中プロセスＩＤが、いずれかの孤児プロセスＩＤと一致すると判定した場合には、Ｓ１６１１の処理に移る。例えば、図１５の第４プロセスレコード（プロセス「Ｄ」）の場合には、稼働中プロセスＩＤ「３０」が図１２の第１孤児レコードにおける孤児プロセスＩＤ「３０」と一致するので、Ｓ１６１１に移る。つまり、プロセス「Ｄ」は孤児プロセスであるので、子孫プロセスと看做されない。
【００７７】
一方、当該プロセスレコードに設定されている稼働中プロセスＩＤが、いずれの孤児プロセスＩＤにも一致しないと判定した場合には、当該稼働中プロセスは子プロセスに該当する。この場合、停止部７２５は、当該稼働中プロセスを親プロセスと看做して更に子プロセスを探索する。つまり、例えばルートノードのプロセスの孫に相当する下位プロセスを探す。そのため、停止部７２５は、Ｓ１６０１で特定したプロセスレコードに設定されている稼働中プロセスＩＤを、サブルーチン処理（Ａ）の引数に設定し（Ｓ１６０７）、更にサブルーチン処理（Ａ）を実行する（Ｓ１６０９）。つまり、Ｓ１６０９におけるサブルーチン処理（Ａ）の実行は、再帰呼び出しである。このようにすれば、直接の下位プロセスに加えて、間接の下位プロセスも抽出できる。
【００７８】
Ｓ１６０９におけるサブルーチン処理（Ａ）の実行を終えると、停止部７２５は、未処理のプロセスレコードがあるか否かを判定する（Ｓ１６１１）。未処理のプロセスレコードがあると判定した場合には、Ｓ１６０１に示した処理に戻って、上述した処理を繰り返す。
【００７９】
一方、未処理のプロセスレコードがないと判定した場合には、停止部７２５は、ツリーデータに新たなレコードを追加する（Ｓ１６１３）。
【００８０】
ツリーデータについて説明する。図１７に、ツリーデータの例を示す。この例におけるツリーデータは、テーブル形式である。但し、ツリーデータは、テーブル形式以外の形式であってもよい。この例におけるツリーデータは、ツリーに含まれるノードに対応するレコード（以下、ノードレコードという。）を有している。ノードレコードは、プロセス名を設定するためのフィールドと、ノードプロセスＩＤを設定するためのフィールドと、親プロセスＩＤを設定するためのフィールドとを有している。
【００８１】
プロセス名は、ツリーに含まれるノードに相当するプロセスの名前である。ノードプロセスＩＤは、当該ノードに相当するプロセスを特定する。親プロセスＩＤは、当該ノードの親ノードに相当するプロセスを特定する。
【００８２】
１番目のノードレコードは、ＩＤ「１１」のプロセス「Ｉ」が、ＩＤ「１０」のプロセスを親ノードとする子ノードとして当該ツリーに含まれることを示している。２番目のノードレコードは、ＩＤ「１２」のプロセス「Ｊ」が、ＩＤ「１０」のプロセスを親ノードとする子ノードとして当該ツリーに含まれることを示している。３番目のノードレコードは、ＩＤ「１０」のプロセス「Ｈ」が、ルートノードとして当該ツリーに含まれることを示している。
【００８３】
図１６の説明に戻る。Ｓ１６１３において、停止部７２５は、引数のプロセスＩＤを、新たなノードレコードに設定する。更に、停止部７２５は、引数のプロセスＩＤに関するプロセスレコードに設定されているプロセス名及び親プロセスＩＤを、新たなノードレコードに設定する。
【００８４】
図１６に示したサブルーチン処理（Ａ）のＳ１６０９において更にサブルーチン処理（Ａ）を実行した場合には、呼び出されたサブルーチン処理（Ａ）を終えると、呼び出し元のサブルーチン処理（Ａ）に復帰する。
【００８５】
一方、図１４に示したツリー生成処理のＳ１４０５においてサブルーチン処理（Ａ）を実行した場合には、呼び出されたサブルーチン処理（Ａ）を終えると、ツリー生成処理に復帰する。そして、そのままツリー生成処理を終え、クリア処理（Ａ）に復帰する。
【００８６】
図１３の説明に戻る。停止部７２５は、Ｓ１３０１において生成されたツリーデータに基づいて、ツリーのノードに相当するプロセスを終了させる。
【００８７】
そのため、停止部７２５は、ツリーデータにおけるノードレコードを１つ特定する（Ｓ１３０３）。例えば、停止部７２５は、順次ノードレコードを特定する。
【００８８】
停止部７２５は、特定したノードレコードに設定されているノードプロセスＩＤによって特定される稼働中プロセスを終了させる（Ｓ１３０５）。
【００８９】
停止部７２５は、未処理のノードレコードがあるか否かを判定する（Ｓ１３０７）。未処理のノードレコードがあると判定した場合には、Ｓ１３０３に示した処理に戻って、上述した処理を繰り返す。
【００９０】
一方、未処理のノードレコードがないと判定した場合には、クリア処理を終えると、呼び出し元のメイン処理に復帰する。
【００９１】
図９の説明に戻る。制御部７１５は、未処理の条件レコードがあるか否かを判定する（Ｓ９２１）。未処理の条件レコードがあると判定した場合には、Ｓ９０１に示した処理に戻って、上述した処理を繰り返す。一方、未処理の条件レコードがないと判定した場合には、メイン処理を終える。
【００９２】
本実施の形態によれば、プログラムの動作検証を繰り返すテストを、より安定的に行える。
【００９３】
［実施の形態２］
上述した実施の形態では、子孫プロセスを探索する手順によってツリーデータを生成して、その後に親プロセス及び子孫プロセスを一括して停止する例について説明したが、子孫プロセスを探索する手順の中で、探索した子孫プロセスを順次停止するようにしてもよい。
【００９４】
本実施の形態では、図１３に示したクリア処理（Ａ）に代えて、クリア処理（Ｂ）を実行する。クリア処理（Ｂ）では、ツリーデータの生成を省き、探索した子孫プロセスを順次停止する。
【００９５】
図１８に、クリア処理（Ｂ）フローを示す。停止部７２５は、ＯＳ７４１からプロセスデータを取得する（Ｓ１８０１）。
【００９６】
停止部７２５は、メインプログラム７０９のプロセスＩＤをサブルーチン処理（Ｂ）の引数に設定する（Ｓ１８０３）。メインプログラム７０９のプロセスＩＤは、例えばプロセス名に基づいて特定される。停止部７２５は、サブルーチン処理（Ｂ）を実行する（Ｓ１８０５）。サブルーチン処理（Ｂ）において、引数に設定されたプロセスＩＤに基づいて、当該ＩＤが指すプロセスの子に相当するプロセスを探索し、探索したプロセスを停止する。
【００９７】
図１９に、サブルーチン処理（Ｂ）フローを示す。Ｓ１９０１乃至Ｓ１９０５に示した処理は、図１６に示したサブルーチン処理（Ａ）のＳ１６０１乃至Ｓ１６０５に示した処理の場合と同様である。
【００９８】
Ｓ１９０７において、停止部７２５は、Ｓ１９０１で特定したプロセスレコードに設定されている稼働中プロセスＩＤを、サブルーチン処理（Ｂ）の引数に設定する。そして、停止部７２５は、サブルーチン処理（Ｂ）を実行する（Ｓ１９０９）。Ｓ１９０９におけるサブルーチン処理（Ｂ）の実行は、再帰呼び出しである。
【００９９】
Ｓ１９１１に示した処理は、図１６に示したサブルーチン処理（Ａ）のＳ１６１１に示した処理の場合と同様である。
【０１００】
Ｓ１９１１において、未処理のプロセスレコードがないと判定した場合には、停止部７２５は、引数のプロセスＩＤによって特定される稼動中プロセスを終了させる（Ｓ１９１３）。
【０１０１】
図１９に示したサブルーチン処理（Ｂ）のＳ１９０９においてサブルーチン処理（Ｂ）を実行した場合には、呼び出されたサブルーチン処理（Ｂ）を終えると、呼び出し元のサブルーチン処理（Ｂ）に復帰する。一方、図１８に示したクリア処理（Ｂ）のＳ１８０５においてサブルーチン処理（Ｂ）を実行した場合には、呼び出されたサブルーチン処理（Ｂ）を終えると、クリア処理（Ｂ）に復帰する。クリア処理（Ｂ）を終えると、メイン処理に復帰する。
【０１０２】
本実施の形態によれば、ツリーデータを記憶する領域が不要になる。
【０１０３】
［実施の形態３］
上述した実施の形態では、例えば図５に示したテスト対象プログラムに相当するプロセス「Ｈ」、その下位プロセス「Ｉ」及び「Ｊ」が、動作検証を行っても消滅しないことを前提とする。
【０１０４】
本実施の形態では、テスト対象プログラムに相当するプロセス又はその下位プロセスのいずれかが、動作検証において消滅することを想定する。
【０１０５】
実施の形態１又は２の場合には、動作検証において消滅したプロセスの子プロセス（つまり、新たな孤児プロセス）及びその下位に相当するプロセスが残存することになる。従って、状態が変化することになり、動作検証を繰り返して行う上で好ましくない。従って、本実施の形態では、新たな孤児プロセス及びその下位に相当するプロセスを終了させる。以下では、テスト対象プログラムに相当するプロセス及びその下位プロセスのいずれかが動作検証の過程で消滅したために、新たに生じた孤児プロセスを第２孤児プロセスという。
【０１０６】
図２０に、第２孤児プロセスの例を示す。図５に示したテスト対象プログラムに相当するプロセス「Ｈ」、その下位プロセス「Ｉ」及び「Ｊ」のうち、プロセス「Ｈ」が動作検証の過程で消滅した場合、その下位プロセス「Ｉ」及び「Ｊ」は、第２孤児プロセスとなる。
【０１０７】
この例では、第２孤児プロセスの下位にプロセスが存在しない。但し、第２孤児プロセスの下位にプロセスが存在する場合もある。その場合には、下位に相当するプロセスも第２孤児プロセスと共に停止させる。尚、下位に相当するプロセスが孤児特定処理で特定された孤児プロセスに該当する場合、つまり動作検証を始める段階で既に存在していた場合には、当該孤児プロセスは停止させない。当該孤児プロセスを終了させてしまうと、テストに支障が生じることがあるからである。
【０１０８】
図２１に、実施の形態３に係るテスト部７１３のモジュール構成例を示す。テスト部７１３は、図７に示したモジュールに加えて、第２特定部２１０１、第２停止部２１０３及び第２孤児記憶部２３０１を有する。
【０１０９】
第２特定部２１０１は、第２孤児特定処理を実行する。第２停止部２１０３は、第２クリア処理を実行する。第２孤児記憶部２３０１は、第２孤児データを記憶する。第２孤児データについては、図２３を用いて後述する。
【０１１０】
上述した第２特定部２１０１及び第２停止部２１０３は、ハードウエア資源（例えば、図２８）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【０１１１】
上述した第２孤児記憶部２３０１は、ハードウエア資源（例えば、図２８）を用いて実現される。
【０１１２】
図２２に、実施の形態３に係るメイン処理フローの一部を示す。本実施の形態では、図９に示したＳ９０１乃至Ｓ９１９の処理を実行した後に、第２特定部２１０１は、第２孤児特定処理を実行する（Ｓ２２０１）。第２孤児特定処理では、第２孤児プロセスが特定され、第２孤児データが生成される。尚、Ｓ９０１乃至Ｓ９１７の処理は、図示しない。
【０１１３】
図２３に、第２孤児データの例を示す。第２孤児データの形式は、孤児データの場合と同様に、テーブル形式である。但し、第２孤児データは、テーブル形式以外の形式であってもよい。この例における第２孤児データは、第２孤児プロセスに対応するレコード（以下、第２孤児レコードという。）を有している。第２孤児レコードは、プロセス名を設定するためのフィールドと、第２孤児プロセスＩＤを設定するためのフィールドと、親プロセスＩＤを設定するためのフィールドとを有している。
【０１１４】
プロセス名は、第２孤児プロセスの名前である。第２孤児プロセスＩＤは、第２孤児プロセスを識別する。親プロセスＩＤは、動作検証の過程で終了した親プロセスに割り振られていたＩＤである。
【０１１５】
図示した１番目の第２孤児レコードは、ＩＤ「１１」で識別されるプロセス「Ｉ」は、第２孤児プロセスに該当し、動作検証の過程で終了した親プロセスにＩＤ「１０」が割り振られていたことを示している。図示した２番目の第２孤児レコードは、ＩＤ「１２」で識別されるプロセス「Ｊ」は、第２孤児プロセスに該当し、動作検証の過程で終了した親プロセスにＩＤ「１０」が割り振られていたことを示している。
【０１１６】
図２４に、第２孤児特定処理フローを示す。第２特定部２１０１によるＳ１００１乃至Ｓ１００７の処理は、図１０における特定部７１７による処理の場合と同様である。Ｓ１００７において、Ｓ１００５で取得した親プロセスＩＤが、いずれのプロセスレコードに設定されている稼働中プロセスＩＤにも一致しないと判定した場合には、第２特定部２１０１は、Ｓ１００３で特定したプロセスレコードに設定されている稼働中プロセスＩＤが、孤児データに含まれるいずれかの孤児プロセスＩＤと一致するか否かを判定する（Ｓ２４０１）。
【０１１７】
Ｓ１００３で特定したプロセスレコードに設定されている稼働中プロセスＩＤが、孤児データに含まれるいずれかの孤児プロセスＩＤと一致すると判定した場合には、元々存在していた孤児プロセスであるので、消去の対象としない。従って、そのままＳ１０１１の処理に移る。
【０１１８】
一方、Ｓ１００３で特定したプロセスレコードに設定されている稼働中プロセスＩＤが、孤児データに含まれるいずれの孤児プロセスＩＤとも一致しないと判定した場合には、第２特定部２１０１は、当該稼動中プロセスＩＤを、第２孤児データの新たな第２孤児レコードに設定する（Ｓ２４０３）。具体的には、第２特定部２１０１は、Ｓ１００３において特定されたプロセスレコードの稼動中プロセスＩＤを、第２孤児プロセスＩＤのフィールドに設定する。更に、第２特定部２１０１は、当該プロセスレコードのプロセス名と親プロセスＩＤとを、新たな第２孤児レコードに設定する。
【０１１９】
第２特定部２１０１によるＳ１０１１の処理は、図１０における特定部７１７による処理の場合と同様である。第２孤児特定処理を終えると、呼び出し元のメイン処理に復帰する。
【０１２０】
図２２の説明に戻る。第２停止部２１０３は、第２クリア処理を実行する（Ｓ２２０３）。第２クリア処理では、第２孤児プロセス及びその下位プロセスを停止する。但し、上述したように、Ｓ９０３の孤児特定処理で特定されている孤児プロセスに該当する場合には停止しない。
【０１２１】
本実施の形態では、第２クリア処理（Ａ）を実行する。図２５に、第２クリア処理（Ａ）フローを示す。第２停止部２１０３は、第２孤児データに含まれる第２孤児レコードを１つ特定する（Ｓ２５０１）。第２停止部２１０３は、特定した第２孤児レコードに基づいて、第２ツリー生成処理を実行する（Ｓ２５０３）。第２ツリー生成処理では、第２孤児プロセスをルートノードとするツリーデータが生成される。
【０１２２】
図２６に、第２ツリー生成処理フローを示す。第２停止部２１０３は、図１４に示したＳ１４０１の処理の場合と同様に、プロセスデータを取得する。第２停止部２１０３は、図２５のＳ２５０１で特定した第２孤児レコードに設定されている第２孤児プロセスＩＤをサブルーチン処理（Ａ）の引数に設定する（Ｓ２６０１）。第２停止部２１０３は、サブルーチン処理（Ａ）を実行する（Ｓ１４０５）。サブルーチン処理（Ａ）は、クリア処理（Ａ）の場合（図１６）と同様である。第２ツリー生成処理を終えると、呼び出し元の第２クリア処理（Ａ）に復帰する。
【０１２３】
図２５の説明に戻る。Ｓ１３０３乃至Ｓ１３０７では、第２ツリー生成処理によって生成されたツリーデータに基づいて、図１３の場合と同様の処理を行う。Ｓ１３０７において未処理のノードレコードがないと判定した場合には、第２停止部２１０３は、未処理の第２孤児レコードがあるか否かを判定する（Ｓ２５０５）。
【０１２４】
未処理の第２孤児レコードがあると判定した場合には、Ｓ２５０１に示した処理に戻って、上述した処理を繰り返す。一方、未処理の第２孤児レコードがないと判定した場合には、第２クリア処理（Ａ）を終える。そして、呼び出し元のメイン処理に復帰する。
【０１２５】
図２２の説明に戻る。第２クリア処理を終えると、Ｓ９２１の処理に移る。Ｓ９２１の処理は、図９の場合と同様である。
【０１２６】
ここでは、Ｓ９１９でクリア処理を実行した後に、第２孤児特定処理及び第２クリア処理を実行する例を示した。但し、Ｓ９１９でクリア処理を実行する前、つまり図９のＳ９１３の処理又はＳ９１７の処理を終えた後に、第２孤児特定処理及び第２クリア処理を実行するようにしてもよい。
【０１２７】
本実施の形態によれば、動作検証の過程で生じた第２孤児プロセスを残さないので、プログラムの動作検証を繰り返すテストを、更に安定的に行えるようになる。
【０１２８】
［実施の形態４］
本実施の形態では、第２クリア処理において下位プロセスを探索する手順の中で、探索した下位プロセスを順次停止する例について説明する。
【０１２９】
本実施の形態では、第２クリア処理（Ａ）に代えて、第２クリア処理（Ｂ）を実行する。図２７に、第２クリア処理（Ｂ）フローを示す。第２停止部２１０３は、図１８のＳ１８０１に示した停止部７２５による処理の場合と同様に、ＯＳ７４１からプロセスデータを取得する。
【０１３０】
第２停止部２１０３は、図２５に示したＳ２５０１の処理の場合と同様に、第２孤児データに含まれる第２孤児レコードを１つ特定する（Ｓ２７０１）。第２停止部２１０３は、Ｓ２７０１で特定した第２孤児レコードに設定されている第２孤児プロセスＩＤをサブルーチン処理（Ｂ）の引数に設定する（Ｓ２７０３）。そして、第２停止部２１０３は、サブルーチン処理（Ｂ）を実行する（Ｓ１８０５）。サブルーチン処理（Ｂ）は、クリア処理（Ｂ）の場合（図１９）と同様である。
【０１３１】
第２停止部２１０３は、未処理の第２孤児レコードがあるか否かを判定する（Ｓ２７０５）。未処理の第２孤児レコードがあると判定した場合には、Ｓ２７０１に示した処理に戻って、上述した処理を繰り返す。一方、未処理の第２孤児レコードがないと判定した場合には、第２クリア処理（Ｂ）を終える。そして、呼び出し元のメイン処理に復帰する。
【０１３２】
他の処理は、実施の形態３の場合と同様である。
【０１３３】
本実施の形態によれば、動作検証の過程で生じた第２孤児プロセスを消去する際に、ツリーデータを記憶する領域を要しない。
【０１３４】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
【０１３５】
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
【０１３６】
なお、上で述べたテスト管理装置７００は、コンピュータ装置であって、図２８に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１３７】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１３８】
本実施の形態に係るテスト管理装置は、（Ａ）稼動しているプロセスのうち、孤児プロセスを特定する第１処理を実行する特定部と、（Ｂ）検証対象のプログラムへの入力データを設定する第２処理を実行する設定部と、（Ｃ）検証対象のプログラムを起動する第３処理を実行する起動部と、（Ｄ）検証対象のプログラムの動作を検証する第４処理を実行する検証部と、（Ｅ）検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ孤児プロセスに該当しない第２プロセスとを終了させる第５処理を実行する停止部と、（Ｆ）第１処理と、第２処理と、第３処理と、第４処理と、第５処理とを繰り返す制御部とを有する。
【０１３９】
このようにすれば、プログラムの動作検証を繰り返すテストを、より安定的に行える。
【０１４０】
更に、第４処理を終えた時点で稼動しているプロセスのうち、第１処理で特定した上記孤児プロセス以外の第２孤児プロセスを特定する第６処理を実行する第２特定部と、第２孤児プロセスと、第２孤児プロセスの下位プロセスであって且つ上記孤児プロセスに該当しない第３プロセスとを終了させる第７処理を実行する第２停止部とを有するようにしてもよい。そして、制御部は、第１処理と、第２処理と、第３処理と、第４処理と、第５処理とに加えて、第６処理と、第７処理とを繰り返すようにすればよい。
【０１４１】
このようにすれば、動作検証の過程で生じた第２孤児プロセスを残さないので、プログラムの動作検証を繰り返すテストを、更に安定的に行えるようになる。
【０１４２】
なお、上で述べたテスト管理装置をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
【０１４３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１４４】
（付記１）
稼動しているプロセスのうち、孤児プロセスを特定する第１処理を実行する特定部と、
検証対象のプログラムへの入力データを設定する第２処理を実行する設定部と、
前記検証対象のプログラムを起動する第３処理を実行する起動部と、
前記検証対象のプログラムの動作を検証する第４処理を実行する検証部と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理を実行する停止部と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す制御部と
を有するテスト管理装置。
【０１４５】
（付記２）
更に、
前記第４処理を終えた時点で稼動しているプロセスのうち、前記第１処理で特定した前記孤児プロセス以外の第２孤児プロセスを特定する第６処理を実行する第２特定部と、
前記第２孤児プロセスと、前記第２孤児プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第３プロセスとを終了させる第７処理を実行する第２停止部と
を有し、
前記制御部は、前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とに加えて、前記第６処理と、前記第７処理とを繰り返す
付記１記載のテスト管理装置。
【０１４６】
（付記３）
稼動しているプロセスのうち、孤児プロセスを特定する第１処理と、
検証対象のプログラムへの入力データを設定する第２処理と、
前記検証対象のプログラムを起動する第３処理と、
前記検証対象のプログラムの動作を検証する第４処理と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す処理と
をコンピュータに実行させるテスト管理プログラム。
【０１４７】
（付記４）
稼動しているプロセスのうち、孤児プロセスを特定する第１処理と、
検証対象のプログラムへの入力データを設定する第２処理と、
前記検証対象のプログラムを起動する第３処理と、
前記検証対象のプログラムの動作を検証する第４処理と、
前記検証対象のプログラムの第１プロセスと、当該第１プロセスの下位プロセスであって且つ前記孤児プロセスに該当しない第２プロセスとを終了させる第５処理と、
前記第１処理と、前記第２処理と、前記第３処理と、前記第４処理と、前記第５処理とを繰り返す処理と
を含み、コンピュータにより実行されるテスト管理方法。
【符号の説明】
【０１４８】
１０１  入力ファイル    １０３  結果記憶部
７００  テスト管理装置    ７０１  生成部
７０３  入力データ記憶部    ７０５  条件テーブル記憶部
７０７  プログラム記憶部    ７０９  メインプログラム
７１１  サブプログラム    ７１３  テスト部
７１５  制御部    ７１７  特定部
７１９  設定部    ７２１  起動部
７２３  検証部    ７２５  停止部
７３１  プロセスデータ記憶部    ７３３  孤児記憶部
７３５  ツリー記憶部    ７４１  ＯＳ
２１０１  第２特定部    ２１０３  第２停止部
２３０１  第２孤児記憶部
【図１】
0006627626.tif 000002
【図２】
0006627626.tif 000003
【図３】
0006627626.tif 000004
【図４】
0006627626.tif 000005
【図５】
0006627626.tif 000006
【図６】
0006627626.tif 000007
【図７】
0006627626.tif 000008
【図８】
0006627626.tif 000009
【図９】
0006627626.tif 000010
【図１０】
0006627626.tif 000011
【図１１】
0006627626.tif 000012
【図１２】
0006627626.tif 000013
【図１３】
0006627626.tif 000014
【図１４】
0006627626.tif 000015
【図１５】
0006627626.tif 000016
【図１６】
0006627626.tif 000017
【図１７】
0006627626.tif 000018
【図１８】
0006627626.tif 000019
【図１９】
0006627626.tif 000020
【図２０】
0006627626.tif 000021
【図２１】
0006627626.tif 000022
【図２２】
0006627626.tif 000023
【図２３】
0006627626.tif 000024
【図２４】
0006627626.tif 000025
【図２５】
0006627626.tif 000026
【図２６】
0006627626.tif 000027
【図２７】
0006627626.tif 000028
【図２８】
0006627626.tif 000029