(57)【要約】【課題】プログラムの例外処理のテストを行う場合に、ソースプログラム全体を解析しながらテストを行う場合と比較して、テストを実行する際の処理負荷を抑制する。【解決手段】ＣＰＵは実行するテストを含むテストパターン及びテスト対象ソースプログラムを取得し（Ｓ１００、Ｓ１１０）、例外を発生させるクラスであるテスト用クラスを生成し（Ｓ１２０）、生成されたテスト用クラスを実行するプログラムコードが実装されたテストモジュールを生成し（Ｓ１３０）、生成されたテストモジュールを実行させてテストを実行する（Ｓ１４０）。従って、テストモジュールは、テストパターンに含まれるテストを実行するテスト用クラスを実装するため、テスト対象ソースプログラムに対する特別な解析が不要になる。【選択図】図５
2020009104.tif 000002
【特許請求の範囲】
【請求項１】
複数の関数を含み、かつ前記複数の関数のうち少なくとも１つの関数が、例外の発生する処理を含む一連の処理を表す例外発生関数を含むソースプログラムに基づいて、前記例外を発生させるテストを含むテストパターンを入力し、
前記ソースプログラムと継承関係を有し、かつ入力した前記テストパターンの前記テストに対して前記複数の関数のうちの前記例外発生関数が記述されたテスト用クラスを生成し、
生成された前記テスト用クラスを実行するテストモジュールを生成する
ことを含む処理をコンピュータに実行させるテスト支援プログラム。
【請求項２】
前記複数の関数の各々が例外発生関数を含み、
前記テストパターンは、前記複数の関数の例外発生関数の各々について例外を発生させる複数のテストを含み、
前記テスト用クラスは、前記複数のテストの各々に対して生成される複数のテスト用クラスである
請求項１に記載のテスト支援プログラム。
【請求項３】
前記複数の関数のうち少なくとも１つの関数は、複数の例外発生関数を含み、
前記テストパターンは、前記複数の例外発生関数による一連の処理で例外を発生させるテストを含む
請求項２に記載のテスト支援プログラム。
【請求項４】
前記テストモジュールは、生成されたテスト用クラスを全て実行するように生成されるテストモジュールである
請求項２又は請求項３に記載のテスト支援プログラム。
【請求項５】
前記ソースプログラムは、親クラスで実装部分を呼び出す関数形式による予め定めた書式に従って記述される
請求項１から請求項４の何れか１項に記載のテスト支援プログラム。
【請求項６】
前記ソースプログラムが変更された場合、
変更された箇所を含む例外発生関数に対応するテスト用クラスを生成する
請求項１に記載のテスト支援プログラム。
【請求項７】
前記ソースプログラムの変更が前記例外発生関数の修正である場合、
修正された例外発生関数に対応するテスト用クラスを更新する
請求項６に記載のテスト支援プログラム。
【請求項８】
前記ソースプログラムの変更が新規の例外発生関数の追加である場合、
追加された例外発生関数で例外を発生させる追加テストを前記テストパターンに追加して入力し、
前記追加テストに対して追加された例外発生関数を含むテスト用クラスを追加して生成する
請求項６に記載のテスト支援プログラム。
【請求項９】
前記ソースプログラムに基づいて、前記例外発生関数を検出し、検出した前記例外発生関数に基づいて、前記例外を発生させるテスト候補を含むテストパターン候補を生成し、
生成したテストパターン候補を前記テストパターンに決定する
請求項１に記載のテスト支援プログラム。
【請求項１０】
複数の関数を含み、かつ前記複数の関数のうち少なくとも１つの関数が、例外の発生する処理を含む一連の処理を表す例外発生関数を含むソースプログラムに基づいて、前記例外を発生させるテストを含むテストパターンを入力する入力部と、
前記ソースプログラムと継承関係を有し、かつ入力した前記テストパターンの前記テストに対して前記複数の関数のうちの前記例外発生関数が記述されたテスト用クラスを生成するテスト用クラス生成部と、
生成された前記テスト用クラスを実行するテストモジュールを生成するテストモジュール生成部と、
を備えたテスト支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト支援プログラム及びテスト支援装置に関する。
【背景技術】
【０００２】
特許文献１には、テスト対象ソースプログラムを解析し、特定クラス内に例外が発生する可能性のあるメソッドを検出した場合、クラス、メソッド、及び例外データを記憶装置に格納することをコンピュータに実行させるプログラムに関する技術が開示されている。
【０００３】
特許文献２には、オブジェクト指向言語を用いる業務システムの開発時のアプリケーションオブジェクトのソースコード及びその単体テストプログラムを自動生成するシステムに関する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３３８９８７号公報
【特許文献２】特開２０００−０２０２９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、プログラムの例外処理のテストを行う場合に、ソースプログラム全体を解析しながらテストを行う場合と比較して、テストを実行する際の処理負荷を抑制することができるテスト支援プログラム及びテスト支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
請求項１に係るテスト支援プログラムは、
複数の関数を含み、かつ前記複数の関数のうち少なくとも１つの関数が、例外の発生する処理を含む一連の処理を表す例外発生関数を含むソースプログラムに基づいて、前記例外を発生させるテストを含むテストパターンを入力し、
前記ソースプログラムと継承関係を有し、かつ入力した前記テストパターンの前記テストに対して前記複数の関数のうちの前記例外発生関数が記述されたテスト用クラスを生成し、
生成された前記テスト用クラスを実行するテストモジュールを生成する
ことを含む処理をコンピュータに実行させる。
【０００７】
請求項２に係るテスト支援プログラムは、請求項１に記載のテスト支援プログラムにおいて、
前記複数の関数の各々が例外発生関数を含み、
前記テストパターンは、前記複数の関数の例外発生関数の各々について例外を発生させる複数のテストを含み、
前記テスト用クラスは、前記複数のテストの各々に対して生成される複数のテスト用クラスである。
【０００８】
請求項３に係るテスト支援プログラムは、請求項２に記載のテスト支援プログラムにおいて、
前記複数の関数のうち少なくとも１つの関数は、複数の例外発生関数を含み、
前記テストパターンは、前記複数の例外発生関数による一連の処理で例外を発生させるテストを含む。
【０００９】
請求項４に係るテスト支援プログラムは、請求項２又は請求項３に記載のテスト支援プログラムにおいて、
前記テストモジュールは、生成されたテスト用クラスを全て実行するように生成されるテストモジュールである。
【００１０】
請求項５に係るテスト支援プログラムは、請求項１から請求項４の何れか１項に記載のテスト支援プログラムにおいて、
前記ソースプログラムは、親クラスで実装部分を呼び出す関数形式による予め定めた書式に従って記述される。
【００１１】
請求項６に係るテスト支援プログラムは、請求項１に記載のテスト支援プログラムにおいて、
前記ソースプログラムが変更された場合、
変更された箇所を含む例外発生関数に対応するテスト用クラスを生成する。
【００１２】
請求項７に係るテスト支援プログラムは、請求項６に記載のテスト支援プログラムにおいて、
前記ソースプログラムの変更が前記例外発生関数の修正である場合、
修正された例外発生関数に対応するテスト用クラスを更新する。
【００１３】
請求項８に係るテスト支援プログラムは、請求項６に記載のテスト支援プログラムにおいて、
前記ソースプログラムの変更が新規の例外発生関数の追加である場合、
追加された例外発生関数で例外を発生させる追加テストを前記テストパターンに追加して入力し、
前記追加テストに対して追加された例外発生関数を含むテスト用クラスを追加して生成する。
【００１４】
請求項９に係るテスト支援プログラムは、請求項１に記載のテスト支援プログラムにおいて、
前記ソースプログラムに基づいて、前記例外発生関数を検出し、検出した前記例外発生関数に基づいて、前記例外を発生させるテスト候補を含むテストパターン候補を生成し、
生成したテストパターン候補を前記テストパターンに決定する。
【００１５】
請求項１０に係るテスト支援装置は、
複数の関数を含み、かつ前記複数の関数のうち少なくとも１つの関数が、例外の発生する処理を含む一連の処理を表す例外発生関数を含むソースプログラムに基づいて、前記例外を発生させるテストを含むテストパターンを入力する入力部と、
前記ソースプログラムと継承関係を有し、かつ入力した前記テストパターンの前記テストに対して前記複数の関数のうちの前記例外発生関数が記述されたテスト用クラスを生成するテスト用クラス生成部と、
生成された前記テスト用クラスを実行するテストモジュールを生成するテストモジュール生成部と、
を備える。
【発明の効果】
【００１６】
請求項１及び請求項１０によれば、プログラムの例外処理のテストを行う場合に、ソースプログラム全体を解析しながらテストを行う場合と比較して、テストを実行する際の処理負荷を抑制することができる。
【００１７】
請求項２によれば、例外発生関数毎にテストモジュールを生成する場合に比べて、テストモジュールを生成する処理負荷を抑制することができる。
【００１８】
請求項３のテスト支援プログラムによれば、例外発生関数単体によるテスト用クラスによるテストモジュールを生成する場合に比べて、関連する例外発生関数を含んだテストモジュールを生成することができる。
【００１９】
請求項４のテスト支援プログラムによれば、一部のテスト用クラスを実行させる場合に比べて、テストを確実に実行させることができる。
【００２０】
請求項５のテスト支援プログラムによれば、ソースプログラムが自由な書式で記述された場合に比べて、テストモジュールを生成する処理負荷を抑制することができる。
【００２１】
請求項６のテスト支援プログラムによれば、ソースプログラムが変更された際にテストプログラム全体を変更する場合に比べて、変更に無関係な部分の処理を抑制することができる。
【００２２】
請求項７のテスト支援プログラムによれば、例外発生関数が修正された際にテストプログラム全体を修正する場合に比べて、修正に無関係な部分の処理を抑制することができる。
【００２３】
請求項８のテスト支援プログラムによれば、例外発生関数が追加された際にテストプログラム全体を修正する場合に比べて、追加に無関係な部分の処理を抑制することができる。
【００２４】
請求項９のテスト支援プログラムによれば、予めテストパターンを準備する場合に比べて、テストパターンを入力する際の入力負荷を軽減することができる。
【図面の簡単な説明】
【００２５】
【図１】第１実施形態に係るテスト支援プログラムの作成装置を実現可能なコンピュータの一例を示すブロック図である。
【図２】テスト対象ソースプログラムのプログラムコードの一例を示すイメージ図である。
【図３】テスト対象ソースプログラムにおける関数の対応関係の一例を示すイメージ図である。
【図４】例外処理を実行するテストを予め設定したテストパターンの一例を示すイメージ図である。
【図５】第１実施形態に係るテスト支援プログラムの処理の流れの一例を示すフローチャートである。
【図６】テスト用クラスの継承関係を示すを示すイメージ図である。
【図７】テスト用クラスのプログラムコードの一例を示すイメージ図である。
【図８】テストモジュールのプログラムコードの一例を示すイメージ図である。
【図９】第２実施形態に係るテスト支援プログラムの処理の流れの一例を示すフローチャートである。
【図１０】第３実施形態に係り、テストパターン生成処理の流れの一例を示すフローチャートである。
【発明を実施するための形態】
【００２６】
以下、図面を参照して実施形態に係るテスト支援装置の一例を詳細に説明する。
【００２７】
＜第１実施形態＞
図１に、第１実施形態に係るテスト支援装置を実現可能なコンピュータの一例をコンピュータ１０として示す。
なお、このコンピュータ１０は、複写機、プリンタ、ファクシミリ装置、これらの機能を兼ね備えた複合機、スキャナ、写真プリンタ等のように内部でデータ処理を行う機器に組み込まれていてもよいし、パーソナル・コンピュータ（ＰＣ）等の独立したコンピュータであってもよく、更にＰＤＡ（Personal Digital Assistant）や携帯電話機等の携帯機器に組み込まれたコンピュータであってもよい。
【００２８】
コンピュータ１０は、コンピュータ本体１２を備えており、コンピュータ本体１２は、ＣＰＵ１４、ＲＡＭ１５、ＲＯＭ１６、および入出力ポート（Ｉ／Ｏ）１７を備え、これらはバス１８を介して互いに接続されている。バス１８には、ＨＤＤ(Hard Disk Drive)及び不揮発性のフラッシュメモリ等によって実現可能な補助記憶装置２０が接続されている。また、Ｉ／Ｏ１７には、プログラムのテストを実行する専用テスト装置２２、外部装置と通信する通信回線Ｉ／Ｆ２４、及び、ディスプレイ及びキーボードなどの操作表示部２６が接続されている。専用テスト装置２２の一例としては、オブジェクト指向プログラミング言語であるＪａｖａ（登録商標）で記述されたプログラムにおけるテストの自動化を行うＪｕｎｉｔ等のテストツールが実装されたコンピュータが挙げられる。なお、このテストツールをコンピュータ１０に実装して実行可能であることは勿論である。
【００２９】
補助記憶装置２０には、コンピュータ１０をテスト支援装置として機能させるためのテスト支援プログラム２０２が記憶される。ＣＰＵ１４は、テスト支援プログラム２０２を補助記憶装置２０から読み出してＲＡＭ１５に展開して処理を実行する。これにより、テスト支援プログラム２０２を実行したコンピュータ１０はテスト支援装置として動作する。なお、テスト支援プログラム２０２は、コンピュータ１０をテスト支援装置として機能させ、プログラムの例外処理のテストを支援するために、取得プロセス２０２Ａ、テスト用クラス生成プロセス２０２Ｂ、テストモジュール生成プロセス２０２Ｃ、及びテスト実行プロセス２０２Ｄを含んでいる。
【００３０】
また、補助記憶装置２０には、テンプレート２０４、テストパターン２０６、テスト用クラス２０８、テストモジュール２１０、及びテスト対象ソースプログラム２１２も記憶される。これらは、後述するように、コンピュータ１０で実現されたテスト支援装置によりテストを実行する際の処理負荷を抑制するために、利用又は生成されるデータ及びプログラムコードの一例である。また、テスト支援プログラム２０２、テスト用クラス２０８、テストモジュール２１０、及びテスト対象ソースプログラム２１２によるプログラム群は、Ｃ＋＋、Ｃ＃、及びＪａｖａ（登録商標）等のオブジェクト指向プログラミング言語により実装される。
【００３１】
テスト対象ソースプログラム２１２は、プログラムの例外処理のテストを行うために記述されたソースコードである。なお、第１実施形態では、補助記憶装置２０にテスト対象ソースプログラム２１２が記憶される場合を説明するが、テスト対象ソースプログラム２１２は、通信回線Ｉ／Ｆ２４を介して外部装置から取得してもよい。
【００３２】
なお、テスト対象ソースプログラム２１２は、開示の技術のソースプログラムの一例である。また、テスト対象ソースプログラム２１２が実行されるコンピュータ１０は、開示の技術のテスト支援装置の一例である。
また、取得プロセス２０２Ａが実行されるコンピュータ１０は、開示の技術の入力部の一例である。テスト用クラス生成プロセス２０２Ｂが実行されるコンピュータ１０は、開示の技術のテスト用クラス生成部の一例である。テストモジュール生成プロセス２０２Ｃが実行されるコンピュータ１０は、開示の技術のテストモジュール生成部の一例である。
【００３３】
図２に、テスト対象ソースプログラム２１２のプログラムコードの一例を示す。図３に、テスト対象ソースプログラム２１２における関数の対応関係の一例を示す。
図２に示すように、テスト対象ソースプログラム２１２は、元クラス（ｍｏｄｕｌｅＡ）に、アクセス修飾子（ｐｉｂｌｉｃ）が付されアクセス制限が宣言された関数（ｆｕｎｃｔｉｏｎＡ）が記述される。この記述で、関数（ｆｕｎｃｔｉｏｎＡ）内で用いられる変数の値等が他のプログラムから読み書き可能になる。また、この関数（ｆｕｎｃｔｉｏｎＡ）には、例外処理をするためのコードとして、ｔｒｙ〜ｃａｔｃｈ〜ｆｉｎａｌｌｙ構文によるコードが記述される。
【００３４】
ｔｒｙブロック２１２Ａには、例外が発生する可能性のある処理が記述される。図２は、ｔｒｙブロック２１２Ａに、Ｎ個の関数ｓｕｂｆｕｎｃｔｉｏｎＢ１からｓｕｂｆｕｎｃｔｉｏｎＢＮが実装された例である。また、ｃａｔｃｈブロック２１２Ｂには、例外が発生した後の処理が記述され、ｆｉｎａｌｌｙブロック２１２Ｃには、例外の有無に無関係に実行される処理が記述される。図２は、ｆｉｎａｌｌｙブロック２１２Ｃに、関数ｓｕｂｆｕｎｃｔｉｏｎＣが実装された例である。
【００３５】
なお、テスト対象ソースプログラム２１２に含まれる関数の一部は、開示の技術の例外発生関数の一例である。
また、テスト対象ソースプログラム２１２は、少なくとも１つの例外発生関数を含んでいればよい。第１実施形態では、複数の例外発生関数を含む場合を説明する。
【００３６】
図３に示すように、関数ｓｕｂｆｕｎｃｔｉｏｎＢ１は、アクセス修飾子（ｐｒｏｔｅｃｔｅｄ）が付されアクセス制限が宣言された関数形式で記述される。同様に、Ｎ個の関数ｓｕｂｆｕｎｃｔｉｏｎＢ２からｓｕｂｆｕｎｃｔｉｏｎＢＮの各々も、アクセス修飾子（ｐｒｏｔｅｃｔｅｄ）が付されアクセス制限が宣言された関数形式で記述される。すなわち、ｐｕｂｌｉｃ関数のコードの内容は全て同じクラス内のｐｒｏｔｅｃｔｅｄ関数を呼び出すコードが記述され、ｎａｔｉｖｅ関数及び他クラスの関数を呼び出すコードは含まないように記述される。
【００３７】
また、ｐｒｏｔｅｃｔｅｄのアクセス修飾子が付された関数ｓｕｂｆｕｎｃｔｉｏｎＢ１は、ｎａｔｉｖｅ関数及び他クラスの関数を呼び出すコードを含んで実装される。すなわち、例外が発生する可能性のある関数（ｓｕｂｆｕｎｃｔｉｏｎＢ１〜ｓｕｂｆｕｎｃｔｉｏｎＢＮの各々）は、全てｐｒｏｔｅｃｔｅｄのアクセス修飾子が付された関数とし、同じクラス内でのみ読み書き可能なｐｒｉｖａｔｅのアクセス修飾子が付された関数が非使用のコードで実装される。
【００３８】
図２及び図３に示すように、テスト対象ソースプログラム２１２は、所定の書式に従って実装される。第１実施形態では、テスト対象ソースプログラム２１２を、所定の書式に従って実装することを容易とするために、テンプレート２０４が補助記憶装置２０に記憶される。ＣＰＵ１４は、テンプレート２０４を補助記憶装置２０から読み出して、操作表示部２６に表示したり、編集可能なコードにしたりして、ユーザに提示し、テンプレート２０４に沿うテスト対象ソースプログラム２１２の作成を支援する。これにより、テンプレート２０４を編集、又はテンプレート２０４に記述された書式を基に、テスト対象ソースプログラム２１２を作成可能になる。
【００３９】
具体的には、テンプレート２０４は、ｐｕｂｌｉｃのアクセス修飾子が付された関数の内容として全て同じクラス内のｐｒｏｔｅｃｔｅｄのアクセス修飾子が付された関数を呼び出すコードを含み、かつｎａｔｉｖｅ関数及び他クラスの関数を呼び出すコードが記述されていないサンプルコードが実装されたものである。また、テンプレート２０４は、ｐｒｏｔｅｃｔｅｄのアクセス修飾子が付された関数各々の実装では、ｎａｔｉｖｅ関数及び他クラスの関数を呼び出すコードを含んだサンプルコードが実装される。さらに、例外が発生する可能性のある関数は、全てｐｒｏｔｅｃｔｅｄのアクセス修飾子が付された関数とし、ｐｒｉｖａｔｅのアクセス修飾子が付された関数が記述されていないサンプルコードが実装される。
【００４０】
なお、第１実施形態では、補助記憶装置２０に記憶されたテンプレート２０４を用いる場合を説明するが、テンプレート２０４は、補助記憶装置２０に記憶されることに限定されるものではない。例えば、通信回線Ｉ／Ｆ２４を介して外部装置から取得してもよく、図示を省略したフラッシュメモリ等の記憶装置に記憶しておき、図示を省略した記憶装置をコンピュータ１０に接続して読み出してもよい。
【００４１】
ところで、プログラムの例外処理のテストを行う場合、例外が発生する可能性のある箇所、例えば関数を予め定めることができる。そこで、第１実施形態では、例外が発生する可能性のある関数で、例外処理を実行するテストを予め設定し、テストパターン２０６として補助記憶装置２０に記憶する。例外処理を実行するテストは、少なくとも１つの関数で例外処理を実行することを示す。なお、第１実施形態では、補助記憶装置２０に記憶されたテストパターン２０６を用いる場合を説明するが、テストパターン２０６は、補助記憶装置２０に予め記憶されることに限定されるものではない。例えば、通信回線Ｉ／Ｆ２４を介して外部装置から取得してもよく、図示を省略したフラッシュメモリ等の記憶装置に記憶しておき、図示を省略した記憶装置をコンピュータ１０に接続して読み出してもよい。
【００４２】
図４に、例外処理を実行するテストを予め設定したテストパターン２０６の一例を示す。
図４に示すように、テストパターン２０６は、Ｍ個のテスト（テスト１〜テストＭ）を含んでいる。テスト１〜テストＭの各々は、例外を発生させる関数（ｓｕｂｆｕｎｃｔｉｏｎＢ１〜ｓｕｂｆｕｎｃｔｉｏｎＢＮ、及びｓｕｂｆｕｎｃｔｉｏｎＣ）を示す情報と、期待値とを備える。例外を発生させる関数を示す情報は、例外が発生した場合に実行させる例外処理を示す情報である。また、期待値は、該当するテストで例外処理を実行した場合における結果を示す情報である。
【００４３】
例えば、テスト１には、ｓｕｂｆｕｎｃｔｉｏｎＢ２に対して「ｘｘ２Ｅｘｃｅｐｔｉｏｎ」が登録されている。すなわち、テスト１は、ｓｕｂｆｕｎｃｔｉｏｎＢ２で、例外を発生させる例外処理ｘｘ２Ｅｘｃｅｐｔｉｏｎを実行させることを示す。また、テスト１は、期待値に対応して「ｘｘ２Ｅｘｃｅｐｔｉｏｎ」が登録され、期待値として例外処理ｘｘ２Ｅｘｃｅｐｔｉｏｎの実行結果を示す情報が登録される。実行結果の一例は、実行ログ等に登録される、例外処理ｘｘ２Ｅｘｃｅｐｔｉｏｎを実行完了したことを示す情報が挙げられる。また、テスト１において「ＯＫ」を示す情報は、該当関数で例外発生せずに実行完了されることを示す。また、テスト１において「−」を示す情報は、該当関数を利用しない又は該当関数を経由しないことを示す。
【００４４】
また、テストＭには、関数ｓｕｂｆｕｎｃｔｉｏｎＢ１及び関数ｓｕｂｆｕｎｃｔｉｏｎに対して「ｘｘ２Ｅｘｃｅｐｔｉｏｎ」が登録されている。すなわち、テストＭは、複数の関数に対して例外を発生させる場合の一例が示されている。
【００４５】
次に、実施形態に係るテスト支援装置で、テストプログラムを作成し、テストを実行するコンピュータ１０の動作を説明する。コンピュータ１０は、テスト対象ソースプログラム２１２を用いて、テストプログラムを作成し、作成したテストプログラムの実行によって、例外処理のテストを行う。
【００４６】
図５に、ＣＰＵ１４によりテスト支援プログラム２０２が実行されてテスト支援装置として機能するコンピュータ１０のテストプログラム作成処理の流れの一例を示す。ＣＰＵ１４は、ユーザにより指示された際に図５に示す処理ルーチンを実行する。
【００４７】
まず、ステップＳ１００で、ＣＰＵ１４は、補助記憶装置２０に記憶されたテストパターン２０６を取得し、次のステップＳ１１０で、補助記憶装置２０に記憶されたテスト対象ソースプログラム２１２を取得する。なお、ステップＳ１００及びステップ１１０の取得順序は図５に示す順序に限定されるものではなく、ステップＳ１００及びステップ１１０の順序を逆順序にしてもよく、同時に行ってもよい。
【００４８】
次に、ＣＰＵ１４は、ステップＳ１２０で、テスト用クラスを生成し、生成されたテスト用クラスの各々をテスト用クラス２０８（図１）として補助記憶装置２０に記憶する。テスト用クラス２０８は、テストパターン２０６におけるテストの各々を実行するためのプログラムコードで表される。第１実施形態では、テスト用クラス２０８は、元クラス（ｍｏｄｕｌｅＡ）を継承したクラスで、テストパターン２０６における各テストの例外を発生させるクラスである。
【００４９】
図６に、元クラスから生成されるテスト用クラスの各々の継承関係を示す。
図６に示すように、元クラス（ｍｏｄｕｌｅＡ）から、元クラス（ｍｏｄｕｌｅＡ）を継承し、かつテストパターン２０６に含まれるテストの各々に対応するテスト用クラスの各々（ｍｏｄｕｌｅＡＴｅｓｔ１〜ｍｏｄｕｌｅＡＴｅｓｔＭ）が生成される。以下の説明では、テスト用クラスを区別して説明する場合は、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ１〜ｍｏｄｕｌｅＡＴｅｓｔＭと識別符号を付し、区別が不要の場合はテスト用クラス２０８と称して説明する。
【００５０】
図７に、テスト用クラス２０８のプログラムコードの一例を示す。
図７に示すように、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ１は、元クラス（ｍｏｄｕｌｅＡ）の継承クラスであって、関数ｓｕｂｆｕｎｃｔｉｏｎＢ２で例外処理が行われ、他の処理は実行しない内容が実装される。すなわち、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ１は、行Ｌ１で元クラス（ｍｏｄｕｌｅＡ）の継承が示され、行Ｌ２で、関数ｓｕｂｆｕｎｃｔｉｏｎＢ２で例外処理を行わせることが示され、行Ｌ３で、「ＹＹＹ」によるｘｘ２Ｅｘｃｅｐｔｉｏｎの例外を発生させることが示されている。
【００５１】
また、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ２は、元クラス（ｍｏｄｕｌｅＡ）の継承クラスであって、テストパターン２０６のテスト２に対応する関数（ｓｕｂｆｕｎｃｔｉｏｎＢ１）で例外処理が行われ、他の処理は実行しない内容が実装される。
【００５２】
同様に、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ２〜ｍｏｄｕｌｅＡＴｅｓｔＭの各々は、各々継承クラスであって、テストパターン２０６の各テストに対応する関数で例外処理が行われ、他の処理は実行しない内容が実装される。
【００５３】
図５に示すステップＳ１２０では、生成されたテスト用クラス（ｍｏｄｕｌｅＡＴｅｓｔ１〜ｍｏｄｕｌｅＡＴｅｓｔＭ）の各々がテスト用クラス２０８（図１）として補助記憶装置２０に記憶される。
【００５４】
次に、ＣＰＵ１４は、ステップＳ１３０で、テストモジュールを生成し、テストモジュール２１０（図１）として補助記憶装置２０に記憶する。テストモジュール２１０は、ステップＳ１２０で生成されたテスト用クラス２０８（ｍｏｄｕｌｅＡＴｅｓｔ１〜ｍｏｄｕｌｅＡＴｅｓｔＭ）の各々を実行するためのプログラムコードで表される。第１実施形態では、テストモジュール２１０は、テストパターン２０６の全てのテストを実行させるために、ステップＳ１２０で生成された全てのテスト用クラス２０８を実行するプログラムコードが実装される場合を説明する。
【００５５】
ここで、プログラムにおける例外処理のテストを行う場合、テストを自動的に行うＪｕｎｉｔ等の周知のテストツールを用いる場合がある。そこで、第１実施形態では、専用テスト装置２２にＪｕｎｉｔ等のテストツールが実装されたコンピュータを用いて、例外処理のテストを行う場合を一例として説明する。この場合、テストモジュール２１０は、周知のテストツールのインタフェースに適合するプログラムコードで実装する。すなわち、ステップＳ１３０では、Ｊｕｎｉｔ等のテストツールを用いて、テスト用クラス２０８の各々を実行するためのプログラムコードが生成される。
【００５６】
図８に、テストモジュール２１０のプログラムコード（実装コード）の一例を示す。
図８に示すように、テストモジュール２１０は、テスト用クラス２０８の各々に対応するテストコード２１０Ａ、２１０Ｂ、・・・、２１０Ｍが実装される。
【００５７】
具体的には、テストモジュール２１０が、テストツールに予め準備されているクラス（ＴｅｓｔＣａｓｅ）の継承クラス（ｍｏｄｕｌｅＡＴｅｓｔ）であることが行Ｌ１で実装され、行Ｌ２〜行Ｌ１２のテストコード２１０Ａに、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ１を実行するためのプログラムコードが実装される。次のテストコード２１０Ｂに、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ２を実行するためのプログラムコードが実装され、順次、テストコード２１０Ｍまで、テスト用クラスｍｏｄｕｌｅＡＴｅｓｔ２を実行するためのプログラムコードが実装される。テストコード２１０Ａ〜２１０Ｍの各々は、ｔｒｙブロックに、テスト用クラス２０８を呼び出し、期待値に適合するかを判別する処理が記述され、ｃａｔｃｈブロックには、期待値に適合した場合にテスト成功、及び期待値に非適合の場合にテスト失敗として対応する処理が記述される。
【００５８】
次に、ＣＰＵ１４は、ステップＳ１４０で、ステップＳ１３０において生成されたテストモジュール２１０を実行させることで、テストを実行した後に、本処理ルーチンを終了する。第１実施形態では、ステップＳ１４０で、Ｊｕｎｉｔ等のテストツールが実装された専用テスト装置２２に、テストモジュール２１０を送り、専用テスト装置２２でテストモジュール２１０を実行させ、テスト結果を示す情報を受け取る。これによって、テストパターン２０６の全てのテストが実行される。
【００５９】
以上説明したように、テストを実行するテストモジュール２１０は、テストパターン２０６に含まれるテストを実行するテスト用クラス２０８を生成して実装するため、テスト対象ソースプログラム２１２に対する特別な解析は不要である。例えば、テスト対象ソースプログラム２１２に対して、例外が発生する可能性のあるメソッドを検出し、クラス、メソッド及び例外のデータを抽出することを、解析ツールによって解析する処理は不要である。
【００６０】
また、テスト対象ソースプログラム２１２に対する解析ツールによる解析が不要のため、解析ツールを実行するためのメモリも不要であり、解析結果を保存するデータベースも不要である。従って、第１実施形態に係るテスト支援装置を実現可能なコンピュータ１０は、テスト対象ソースプログラム２１２を解析する処理時間を削減できるため、テスト対象ソースプログラム２１２を解析するテスト支援装置に比べて、テストを実行する際の処理負荷を抑制することができる。
【００６１】
さらに、テストモジュール２１０は、元クラスの継承子クラスとして生成された例外を発生させるテスト用クラス２０８を用いるため、例外を発生させるために特別に用意したクラスに置き換える等の複雑なロジックは不要である。
【００６２】
ここで、上記では、テストパターン２０６の全てのテストを実行させるために、生成された全テスト用クラス２０８を実行するプログラムコードが実装される場合のテストモジュール２１０を説明した。しかし、テストモジュール２１０は、全テスト用クラス２０８を実行するプログラムコードの実装に限定されない。例えば、テストモジュール２１０は、テストパターン２０６に登録された少なくとも１つのテストを実行させるために、該当する少なくとも１つのテスト用クラス２０８を実行するプログラムコードを実装してもよい。
【００６３】
詳細には、テストモジュール２１０は、テストパターン２０６に登録された何れか１つのテスト用クラス２０８を実行するプログラムコード、テストパターン２０６に登録された２つのテスト用クラス２０８を組み合わせて実行するプログラムコード、及びテストパターン２０６に登録された全てのテスト用クラス２０８を実行するプログラムコードの何れかのプログラムコードを、選択的に実装してもよい。
【００６４】
テストモジュール２１０に実装するためのテスト用クラス２０８は、予め定めた実装条件により選択することができる。
実装条件の第１例には、ユーザによるテスト用クラス２０８の指定が挙げられる。例えば、ＣＰＵ１４が、テストパターン２０６のテスト用クラス２０８のテストの少なくとも１つを指定可能に操作表示部２６へ表示し、ユーザの操作表示部２６による操作を検出して、検出されたユーザ指定のテスト用クラス２０８を実装する。これにより、ユーザが意図的に指定したテスト用クラスのテストを優先的に実行するためのテストモジュール２１０を生成することができる。
【００６５】
実装条件の第２例には、テスト用クラス２０８の優先度が挙げられる。例えば、テストパターン２０６の各々のテストに最高位から最低位の複数の優先度のうち何れか１つの優先度を予め付与しておく。優先度は、例えば、ユーザによって、各テストごとに、優先度を示す情報を付与しておけばよい。そして、例えば、ＣＰＵが、優先度を含むテストパターン２０６のテスト用クラス２０８のテストを操作表示部２６へ表示し、かつ優先度又は優先度の範囲を入力可能にした操作表示部２６によるユーザ操作を検出して、検出された優先度又は優先度の範囲のテストに該当するテスト用クラス２０８を実装する。これにより、優先度に応じたテスト用クラスのテストを実行するためのテストモジュール２１０を生成することができる。
【００６６】
実装条件の第２例におけるテスト用クラス２０８の選択は、テストの操作表示部２６への表示、及び優先度又は優先度の範囲入力に限定されない。例えば、優先度又は優先度の範囲を示す情報を、例えば補助記憶装置２０に予め記憶しておけばよい。このようにすることで、ＣＰＵが補助記憶装置２０に記憶された優先度又は優先度の範囲を示す情報を取得することによって、優先度又は優先度の範囲に対応するテスト用クラス２０８を、自動的に実装可能である。なお、優先度は、優先度又は優先度の範囲を同レベルに扱うことに限定されない。例えば、複数の優先度を指定し、複数のテストモジュール２１０を生成する。そして、複数のテストモジュール２１０のうち優先度が高いテストモジュール２１０を実行したのちに、優先度が低いテストモジュール２１０を実行するようにしてもよい。また、優先度が高いテストモジュール２１０を実行したのちに、優先度が低いテストモジュール２１０を実行するように実装した統合テストモジュールを生成してもよい。
【００６７】
テストに対する優先度は、テスト用クラス２０８のコード内容から定めることが可能である。例えば、テスト用クラス２０８のうち、例外が発生する頻度が他のテスト用クラス２０８より高いことが周知のコードを含むテスト用クラス２０８を、他のテスト用クラス２０８より高い優先度に定める。このようにすることで、例えば、例外が発生する頻度が高いテストを優先的に実行するためのテストモジュール２１０を生成することができる。
【００６８】
実装条件の第３例には、上述のように、生成されたテスト用クラス２０８の全指定が挙げられる。例えば、ＣＰＵは、テストパターン２０６のテスト用クラス２０８のテスト用に生成された全てのテスト用クラス２０８を指定し、実装する。これにより、生成された全てのテスト用クラスのテストを実行するためのテストモジュール２１０を生成することができる。
【００６９】
なお、複数のテストを実行する場合、優先度の高いテストから優先度の低いクラスまでを実行するように、優先順位を定めてもよい。
【００７０】
このように、テストモジュール２１０を、テストパターン２０６に登録された１つ以上のテスト用クラス２０８を実行するテストに対応するプログラムコードを選択的に実装することで、必要最低限のテストを実行することが可能になる。
【００７１】
＜第２実施形態＞
次に、第２実施形態を説明する。第２実施形態は、テスト対象ソースプログラム２１２に変更が施された場合の処理を含む。第２実施形態は、第１実施形態と同様の構成のため、同一部分には同一符号を付して詳細な説明を省略する。
【００７２】
なお、第２実施形態では、補助記憶装置２０には、テスト対象ソースプログラム２１２の各々の履歴を記憶することとする。すなわち、テスト対象ソースプログラム２１２に変更が施された場合、変更前のテスト対象ソースプログラム２１２は旧テスト対象ソースプログラム２１２−１とされ、変更後のテスト対象ソースプログラム２１２は新テスト対象ソースプログラム２１２−２とされる。また、テスト対象ソースプログラム２１２に対してテストモジュール２１０が生成された場合には、テスト対象ソースプログラム２１２とテストモジュール２１０との対応関係も記憶されることとする。
【００７３】
図９に、第２実施形態に係り、ＣＰＵ１４によりテスト支援プログラム２０２が実行されてテスト支援装置として機能するコンピュータ１０のテストプログラム作成処理の流れの一例を示す。ＣＰＵ１４は、ユーザにより指示された際に図９に示す処理ルーチンを実行する。
【００７４】
まず、ステップＳ２００で、ＣＰＵ１４は、テスト対象ソースプログラム２１２として、補助記憶装置２０に記憶された最新の新テスト対象ソースプログラム２１２−２を取得する。次に、ＣＰＵ１４は、補助記憶装置２０に、取得したテスト対象ソースプログラム２１２（新テスト対象ソースプログラム２１２−２）に対するテストモジュール２１０が記憶済か否かを判別することによって、テストモジュール２１０が生成済か否かを判断する。テスト対象ソースプログラム２１２として、補助記憶装置２０に、最初にテスト対象ソースプログラム２１２が記憶された場合は、ステップＳ２０２で否定判断し、ステップＳ２０４へ処理を移行する。ステップＳ２０４では、上記図５に示す処理ルーチンを実行し、本処理ルーチンを終了する。
【００７５】
ＣＰＵ１４は、ステップ２０２で肯定判断した場合、ステップＳ２０６で、新テスト対象ソースプログラム２１２−２より前、例えば直前の旧テスト対象ソースプログラム２１２−１を補助記憶装置２０から取得する。なお、テスト対象ソースプログラム２１２に対するテストモジュール２１０が複数記憶されている場合、複数記憶されたテストモジュール２１０から選択するようにしてもよい。そして、ステップＳ２０６では、旧テスト対象ソースプログラム２１２−１と、ステップ２００で取得した新テスト対象ソースプログラム２１２−２とを比較し、旧テスト対象ソースプログラム２１２−１から新テスト対象ソースプログラム２１２−２への変更有無の判定処理を実行する。
【００７６】
次のステップＳ２０８では、ＣＰＵ１４は、ステップＳ２０６の判定処理結果に基づき、変更有の場合に肯定判断し、変更無の場合に否定判断する。テスト対象ソースプログラム２１２が変更無で、ステップＳ２０８で否定判断した場合、テストモジュール２１０の変更も不要のため、ステップＳ２１０で生成済のテストモジュールを取得した後、ステップＳ２２２でテストを実行し、本処理ルーチンを終了する。
【００７７】
次に、ＣＰＵ１４は、ステップ２０８で肯定判断した場合、ステップＳ２１２で、変更箇所が、テスト対象ソースプログラム２１２の関数インタフェース（Ｉ／Ｆ）に対する変更（修正を含む）か否かを判断する。関数Ｉ／Ｆに対する変更とは、例えば、関数の戻り値、及び引数など外部と情報授受する際の情報値の変更が一例として挙げられる。例えば、コメントの変更等は関数Ｉ／Ｆに対する変更に該当しない。ステップＳ２１２で否定判断した場合、テストモジュール２１０の変更は不要のため、ステップＳ２１０へ処理を移行する。一方、ステップＳ２１２で肯定判断した場合、ステップＳ２１４で、変更箇所に該当するテスト用クラス２０８を変更箇所の内容で生成し、ステップＳ２１６へ処理を移行する。なお、ステップＳ２１４では、変更箇所に該当するテスト用クラス２０８を変更箇所の内容で更新してもよい。
【００７８】
次のステップＳ２１６では、ＣＰＵ１４は、変更箇所が、テスト対象ソースプログラム２１２に新規の関数追加か否かを判断する。ステップＳ２１６で否定判断した場合は、ステップＳ２１０へ処理を移行し、肯定判断した場合は、ステップＳ２１８へ処理を移行する。ステップＳ２１８では、ＣＰＵ１４は、新規に追加された関数に対するテストを追加する。すなわち、ＣＰＵ１４は、テストパターン２０６を取得し、テストパターン２０６に、新規に追加された関数に対するテストを追加する。次のステップＳ２２０では、ＣＰＵ１４は、図５に示すステップＳ１２０と同様に、テスト用クラス２０８を生成し、図５に示すステップＳ１３０と同様にテストモジュール２１０を生成した後、ステップＳ２２２でテストを実行し、本処理ルーチンを終了する。なお、テストモジュール２１０を生成は、既存のテストモジュールに対して、新規に追加されたテスト用クラス２０８に該当するテストを実行する部分のみの追加でもよい。
【００７９】
以上説明したように、第２実施形態では、テスト対象ソースプログラム２１２に変更が施された場合、変更箇所に対応する部分のみの実装の変更、及び追加でよく、変更に無関係な部分の処理を抑制することができる。例えば、アクセス修飾子ｐｒｏｔｅｃｔｅｄが付された関数Ｉ／Ｆに変更がない場合、テストモジュール２１０は、新規に生成することなく、既に生成済のテストモジュール２１０を利用することができる。一方、例えば、アクセス修飾子ｐｒｏｔｅｃｔｅｄが付された関数Ｉ／Ｆが変更された場合、変更箇所のみのテスト用クラス２０８を生成すればよい。また、例えば、アクセス修飾子ｐｒｏｔｅｃｔｅｄが付された関数が追加された場合、テストパターン２０６にテストを１つ追加するのみで、上記実施形態と同様の一連の流れの処理を行えばよい。
【００８０】
このように、本実施形態に係るテスト支援装置によれば、テスト対象ソースプログラム２１２が変更された際にテストモジュール２１０を再作成、すなわちテストモジュール２１０の全体を変更する場合に比べて、変更に無関係な部分の処理を抑制することができる。
【００８１】
また、本実施形態に係るテスト支援装置によれば、例外発生関数としての関数が修正された際にテストモジュール２１０を再作成、すなわちテストモジュール２１０の全体を生成する場合に比べて、修正に無関係な部分の処理を抑制することができる。
【００８２】
さらに、本実施形態に係るテスト支援装置によれば、例外発生関数としての関数が追加された際にテストモジュール２１０を再作成、すなわちテストモジュール２１０の全体を生成する場合に比べて、追加に無関係な部分の処理を抑制することができる。
【００８３】
＜第３実施形態＞
次に、第３実施形態を説明する。第３実施形態は、テスト対象ソースプログラム２１２を用いてテストパターン２０６を生成する処理を含む。第３実施形態は、第１実施形態及び第２実施形態と同様の構成のため、同一部分には同一符号を付して詳細な説明を省略する。
【００８４】
なお、第３実施形態では、テスト支援装置として機能するコンピュータ１０で、図５又は図９に示すテストプログラム作成処理が実行されるより前に、テストパターン生成処理が実行される。第３実施形態では、テスト支援プログラム２０２に、テストパターン生成処理がテストパターン生成プロセスとして含まれる。
【００８５】
図１０に、第３実施形態に係り、テスト支援装置として機能するコンピュータ１０のＣＰＵ１４により実行されるテスト支援プログラム２０２に含まれるテストパターン生成プロセスの処理の流れの一例を示す。ＣＰＵ１４は、ユーザにより指示された際に図１０に示す処理ルーチンを実行する。
【００８６】
まず、ＣＰＵ１４は、ステップＳ３００で、テスト対象ソースプログラム２１２を取得し、次のステップＳ３１０で、テスト対象ソースプログラム２１２における例外発生関数の候補を設定する。例えば、テスト対象ソースプログラム２１２に実装されているアクセス修飾子ｐｒｏｔｅｃｔｅｄが付された関数を例外発生関数の候補として設定する。
【００８７】
ステップＳ３１０における例外発生関数の候補は、テスト対象ソースプログラム２１２に実装されている関数を全て列挙してもよく、予め例外が発生する可能性がある関数をリスト化しておき、リストに含まれる関数に該当する関数を抽出してもよい。
【００８８】
また、例外発生関数の候補に設定された関数に対して指定された関数を例外発生関数として特定する。例外発生関数の特定は、ユーザによる指定によって定めることができる。例えば、ＣＰＵ１４がテスト対象ソースプログラム２１２を表示し、テスト対象ソースプログラム２１２で候補とした関数について、他のフォントの色と異なる色で表示すること、背景を予め定めた注目背景で表示すること等の注目表示する。そして、ＣＰＵ１４は、注目表示された位置の関数を選択指示可能に表示して、ユーザの操作表示部２６による操作で選択された関数を検出し、検出した関数を例外発生関数として特定することにより、例外発生関数の候補を設定できる。
【００８９】
次に、ＣＰＵ１４は、ステップＳ３２０で、テスト候補を設定する。このステップＳ３２０では、例えば、ステップＳ３１０で設定された例外発生関数の各々を実行する処理の各々をテスト候補として設定する。次に、ＣＰＵ１４は、ステップＳ３３０で、ステップＳ３２０において設定されたテスト候補を列挙した複数のテストを含むパターンをテストパターン候補として生成する。
【００９０】
次に、ＣＰＵ１４は、ステップＳ３４０で、ステップＳ３３０で生成したテストパターン候補からテストパターン２０６を決定し、本処理ルーチンを終了する。
【００９１】
なお、テストパターン２０６の決定は、ユーザによる指定によって定めることができる。例えば、ＣＰＵ１４は、ステップＳ３３０で生成したテストパターン候補を、編集可能に表示し、表示されたテストパターン候補の編集を促し、ユーザの操作表示部２６による操作で編集されたテストパターン候補をテストパターン２０６として決定する。
【００９２】
第３実施形態に係るテスト支援プログラムでは、テスト対象ソースプログラム２１２を用いて、例外発生関数を設定し、例外を発生させるテスト候補を複数含むテストパターン候補を生成し、テストパターン２０６を決定する。このように、第３実施形態に係るテスト支援プログラムによれば、予めテストパターン２０６を準備する場合に比べて、テストパターン２０６を準備、または入力する際の入力負荷を軽減することができる。
【００９３】
上記では、本発明を特定の実施形態について詳細に説明したが、本発明は係る実施形態に限定されるものではなく、本発明の範囲内にて他の種々の実施形態をとることが可能である。
【００９４】
また、上記各実施の形態では、補助記憶装置２０に記憶したプログラムを実行することにより行われる処理を説明したが、ＲＯＭ１６に記憶しておいてもよく、またプログラムの処理をハードウエアで実現してもよい。
【００９５】
さらに、上記各実施形態における処理は、プログラムとして光ディスク等の記憶媒体等に記憶して流通するようにしてもよい。
【符号の説明】
【００９６】
１０      コンピュータ（テスト支援装置の一例）
２０      補助記憶装置
２２      専用テスト装置
２６      操作表示部
２０２    テスト支援プログラム
２０２Ａ  取得プロセス
２０２Ｂ  テスト用クラス生成プロセス
２０２Ｃ  テストモジュール生成プロセス
２０２Ｄ  テスト実行プロセス
２０４    テンプレート
２０６    テストパターン
２０８    テスト用クラス
２１０    テストモジュール
【図１】
2020009104.tif 000003
【図２】
2020009104.tif 000004
【図３】
2020009104.tif 000005
【図４】
2020009104.tif 000006
【図５】
2020009104.tif 000007
【図６】
2020009104.tif 000008
【図７】
2020009104.tif 000009
【図８】
2020009104.tif 000010
【図９】
2020009104.tif 000011
【図１０】
2020009104.tif 000012