(57)【要約】【課題】オブジェクト指向プログラミング言語を用いて作成されたプログラムの例外処理のテストを自動的に行う。【解決手段】テスト対象ソースプログラムを解析するステップと、テスト対象ソースプログラムに含まれるクラスのメソッドを呼び出すドライバクラスを生成するステップと、ドライバクラスを実行させ、当該ドライバクラスによって実行される、テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて格納するステップと、例外が発生する可能性がある特定のメソッドを呼び出している行を実行させるドライバクラスを抽出するステップと、例外を当該例外を発生する可能性のある特定のメソッドと同名のメソッドで発生させ且つ当該メソッドを含む特定のクラスと同名のクラスである例外発生スタブクラスを生成するステップと、ドライバクラス及び例外発生スタブクラスを実行させ、実行結果データを格納するステップとを含む。【選択図】図１
2006190325.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを前記解析結果格納部に格納する解析ステップと、
前記解析結果格納部を参照して、特定された前記クラスの前記メソッドを呼び出すドライバクラスを生成し、ドライバ格納部に格納するステップと、
前記ドライバ格納部に格納された前記ドライバクラスを実行させ、当該ドライバクラスによって実行される、前記テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納するステップと、
前記解析結果格納部に格納されたデータと前記実行行データ格納部に格納されたデータとに基づいて、前記特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出ステップと、
をコンピュータに実行させる例外テスト支援プログラム。
【請求項２】
前記解析ステップが、
前記テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、前記特定のクラス及び前記特定のメソッドに対応して前記例外のデータを前記解析結果格納部に格納するステップ
を含み、
さらに、
前記解析結果格納部に格納されたデータを参照して、前記例外を前記特定のメソッドと同名のメソッドで発生させる前記特定のクラスと同名のクラスである例外発生スタブクラスを生成し、例外発生スタブ格納部に格納する例外発生スタブ生成ステップと、
前記記憶装置に格納された前記ドライバクラスのデータに従って、前記ドライバ格納部に格納された前記ドライバクラス及び前記例外発生スタブ格納部に格納された前記例外発生スタブクラスを実行させ、実行結果データを実行結果格納部に格納する実行結果取得ステップと、
をコンピュータに実行させる請求項１記載の例外テスト支援プログラム。
【請求項３】
前記実行結果格納部に格納されたデータを用いて例外処理確認用の画面を表示装置に表示するステップ
をさらにコンピュータに実行させる請求項２記載の例外テスト支援プログラム。
【請求項４】
前記ドライバクラスのデータが、前記ドライバクラスと前記特定のクラスの前記特定のメソッドとの対応データを含み、
前記実行結果取得ステップが、
特定のドライバクラスを実行する際に、前記対応データを参照して、当該特定のドライバクラスに対応する前記特定のクラスの前記特定のメソッドを、前記特定のクラスと同名の例外発生スタブクラスのメソッドに動的に置き換えさせるステップ
を含む請求項２記載の例外テスト支援プログラム。
【請求項５】
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを前記解析結果格納部に格納する解析手段と、
前記解析結果格納部を参照して、特定された前記クラスの前記メソッドを呼び出すドライバクラスを生成し、ドライバ格納部に格納する手段と、
前記ドライバ格納部に格納された前記ドライバクラスを実行させ、当該ドライバクラスによって実行される、前記テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納する手段と、
前記解析結果格納部に格納されたデータと前記実行行データ格納部に格納されたデータとに基づいて、前記特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出手段と、
を有する例外テスト支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばＪａｖａ（Sun Microsystems社の商標）やＣ＋＋のようなオブジェクト指向プログラミング言語を用いて作成されたプログラムにおける例外処理のテスト技術に関する。
【背景技術】
【０００２】
プログラム開発において、テスト工程にて必要となる工数は非常に大きい。品質を重視する場合、プログラミング工程及びテスト工程において、工数比はプログラミング：テスト＝２：８程度になる。
【０００３】
このようにプログラム開発における大きな課題であるテストの効率化の為に、通常はテスト支援ツールが用いられる。現在のテスト支援ツールにおいては、プログラミング内容を解析する静的テスト、実際にコンパイルを行ったプログラムを実行させて行う動的テストがある。それぞれのテストを実施することで、ソフトウェア的に想定されたテストの実施は可能である。しかし、プログラム実行時におけるメモリ不足、ハード障害等のハードウェアに依存するテストや、ＯＳ、他ソフトウェア等に関連する問題が起きた場合に発生し得る例外処理等については、その例外状態を発生させるのが非常に困難である。そのため、オブジェクト指向プログラミング言語を用いた開発において例外を処理する箇所のテストは、人手によって例外が発生するような環境をハードウェア的に作成するか、もしくは専用のテスト環境を別に準備してから実施するしかなかった。すなわち、実際に例外処理のロジックを組み込めるプログラミング言語によりプログラミングを行っていても完全にテストを行う事が困難であるのが現状である。
【０００４】
なお、例えば特開平５−２５７７４０号公報には以下のような技術が開示されている。すなわち、複数のオブジェクトにつき個々の単体でテスト実行する場合において、ソースプログラムを翻訳しオブジェクトと外部インタフェース情報を生成する翻訳処理と、オブジェクトの中に未解決な外部呼出し及び外部参照に対して外部インタフェース情報を基にオブジェクトを生成し実行形式のプログラムを生成する結合編集処理と、実行形式プログラムの実行制御を行う実行処理と、実行形式プログラムの入力情報を記憶する入力データ情報記憶と、実行形式プログラムの出力情報を記憶する出力データ情報記憶と、記憶した入力情報を基に自動的に実行を行う自動実行処理と、記憶した出力情報と自動実行処理によって出力された出力情報とを調べ実行結果を自動判定する手段とを有する。本公報では、例外については特に述べていない。
【特許文献１】特開平５−２５７７４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
このように従来技術には、例外処理のテストを特別な環境を用意せずに自動的に行うことを可能とするものはない。
【０００６】
従って、本発明の目的は、オブジェクト指向プログラミング言語を用いて作成されたプログラムの例外処理のテストを自動的に行うための新規な技術を提供することである。
【課題を解決するための手段】
【０００７】
本発明の第１の態様に係る例外テスト支援方法は、テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、上記特定のクラス、上記特定のメソッド及び上記例外のデータを記憶装置に格納するステップと、上記記憶装置を参照して、上記例外を特定のメソッドと同名のメソッドで発生させる特定のクラスと同名のクラスである例外発生スタブクラスを生成し、記憶装置に格納するステップとを含む。このように例外発生スタブクラスを自動生成することにより、擬似的に例外を発生させることができるようになるので、例外処理のテストを自動化することが可能となる。
【０００８】
また、本発明の第２の態様に係る例外テスト支援方法は、テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを解析結果格納部に格納する解析ステップと、解析結果格納部を参照して、特定されたクラスのメソッドを呼び出すドライバクラス（ドライバプログラムとも呼ぶ）を生成し、ドライバ格納部に格納するステップと、ドライバ格納部に格納されたドライバクラスを実行させ、当該ドライバクラスによって実行される、テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納するステップと、解析結果格納部に格納されたデータと実行行データ格納部に格納されたデータとに基づいて、特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出ステップとを含む。
【０００９】
このようにドライバクラスを一度実行して実行行データを収集することにより、どのドライバクラスを実行すれば、例外が発生する可能性のある特定のメソッドを呼び出すことができるか確認でき、可能な限り漏れのない例外テストに必要なドライバクラスを特定できるようになる。
【００１０】
また、上で述べた解析ステップが、テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、特定のクラス及び特定のメソッドに対応して例外のデータを前記解析結果格納部に格納するステップをさらに含むようにしてもよい。そしてその際には、本発明の第２の態様において、解析結果格納部に格納されたデータを参照して、例外を特定のメソッドと同名のメソッドで発生させる特定のクラスと同名のクラスである例外発生スタブクラスを生成し、例外発生スタブ格納部に格納するステップと、記憶装置に格納された上記ドライバクラスのデータに従って、ドライバ格納部に格納されたドライバクラス及び例外発生スタブ格納部に格納された例外発生スタブクラスを実行させ、実行結果データを実行結果格納部に格納する実行結果取得ステップとをさらに含むようにしても良い。このようにすることにより、例外を発生させる例外発生スタブクラスが、上で特定されたドライバクラスにより呼び出されて、例外発生時のテストを実行できるようになる。
【００１１】
なお、上で述べたドライバクラスのデータが、ドライバクラスと上記特定のクラスの上記特定のメソッドとの対応データを含むようにしてもよい。その際には、上記実行結果取得ステップが、特定のドライバクラスを実行する際に、対応データを参照して、当該特定のドライバクラスに対応する上記特定のクラスの上記特定のメソッドを、上記特定のクラスと同名の例外発生スタブクラスのメソッドに動的に置き換えさせる（ホットスワップさせる）ステップを含むようにしてもよい。このようにすることにより、必要なときだけ例外発生スタブクラスを実行させることができる。
【００１２】
本発明の例外テスト支援方法は、コンピュータに実行させるためのプログラムを作成することができ、このプログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等の記憶媒体又は記憶装置に格納される。また、ネットワークなどを介してデジタル信号として配信される場合もある。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【発明の効果】
【００１３】
本発明によれば、オブジェクト指向プログラミング言語を用いて作成されたプログラムの例外処理のテストを自動的に行うことができる。
【発明を実施するための最良の形態】
【００１４】
図１に本実施の形態における例外テスト支援装置の機能ブロック図を示す。例外テスト支援装置は、ソースファイル格納部１と、ソース解析部３と、ソース解析結果データベース（ＤＢ）５と、ドライバ生成処理部７と、ドライバ格納部１２と、ドライバ実行処理部１３と、カバレッジデータ格納部１５と、ドライバ抽出処理部１７と、抽出ドライバデータ格納部１９と、テスト実行管理部２１と、例外発生スタブ生成処理部９と、例外発生スタブ格納部１１と、実行結果データ格納部２３と、出力処理部２５とを有する。
【００１５】
ソースファイル格納部１は、テスト対象のソースプログラム等のファイルを格納する。ソース解析部３は、ソースファイル格納部１に格納されているテスト対象のソースプログラムの解析処理を実施し、解析結果をソース解析結果ＤＢ５に格納する。ドライバ生成処理部７は、ソース解析結果ＤＢ５に格納されたデータを用いてテスト対象のソースプログラム内の全てのメソッドを呼び出すためのドライバクラスを自動生成し、生成したドライバクラスのデータをドライバ格納部１２に格納する。ドライバ実行処理部１３は、ドライバ格納部１２に格納されたドライバクラスを実行させることによりソースファイル格納部１に格納されたテスト対象のソースプログラムの該当行を実行させ、実行行についてのデータをカバレッジデータ格納部１５に格納する。ドライバ抽出処理部１７は、ソース解析結果ＤＢ５に格納されたデータとカバレッジデータ格納部１５に格納されたデータを参照して、ドライバ格納部１２に格納されているドライバクラスのうち、テスト対象のソースプログラムにおいて例外を発生させる可能性があるメソッドを呼び出させるドライバクラスを抽出し、当該ドライバクラスのデータを抽出ドライバデータ格納部１９に格納する。例外発生スタブ生成処理部９は、ソース解析データ格納部５のデータを参照し、テスト対象のソースプログラムにおいて例外を発生させる可能性があるメソッドに対応して例外発生スタブクラスを自動生成し、付随データと共に例外発生スタブ格納部１１に格納する。テスト実行管理部２１は、抽出ドライバデータ格納部１９に格納されたデータ等を参照して、ドライバ格納部１２に格納されたドライバクラスのうちドライバ抽出処理部１７により抽出されたドライバクラスを実行させ、例外を発生させる可能性があるメソッドに代わって例外発生スタブ格納部１１に格納された例外発生スタブクラスのメソッドを実行させ、実行結果を実行結果データ格納部２３に格納する。出力処理部２５は、実行結果データ格納部２３に格納されたデータを、ユーザに対して提示する。なお、各処理部においては、図１においては図示していない記憶部を参照する場合もある。
【００１６】
次に、図２乃至図１１を用いて図１に示した例外テスト支援装置の処理フローを説明する。図２に例外テスト支援装置の処理フローを示す。まず、ソース解析部３は、ソースファイル格納部１からテスト対象のソースプログラム及び当該ソースプログラムから呼び出されるプログラムを読み出し、所定の解析を実施して、解析結果をソース解析結果ＤＢ５に格納する（ステップＳ１）。ソース解析部３は、テスト対象のソースプログラムのクラス情報、メソッド情報、引数情報及び例外処理情報、並びに当該テスト対象のソースプログラムから呼び出されるクラスのクラス情報、メソッド情報、戻り値情報、例外処理情報を抽出し、ソース解析結果ＤＢ５に格納する。より詳しくは、テスト対象のクラス及び当該テスト対象のクラスから呼び出されるクラスの各々について、クラス名、当該クラスに含まれるメソッド名及び当該メソッド名を定義している行番号、そしてメソッド毎に、ソースコード有効行番号（プログラム中実際に実行される行の番号）、例外が発生する可能性があるメソッドを呼び出している行の行番号、例外が発生する可能性がある処理及び発生した例外の処理（Ｊａｖａの場合、try-catch）が記述されている行番号及びその内容、コメント行の内容及びその定義行番号、ソースプログラム内で呼ばれている他のメソッドの情報（引数を含む）名及びその定義行番号、発生する例外のデータ（Ｊａｖａの場合、throws宣言の後の例外名及び実際に例外を投げるメソッド）などが含まれている。
【００１７】
例えば図３に示すようなＭｅｍＴｅｓｔクラスのＭｅｍＧｅｔ（）メソッドがテスト対象のソースプログラムであるとする。また、図４及び図５のようなクラスが呼び出されているものとする。この例の場合、ＭｅｍＴｅｓｔクラスについては、当該クラスに含まれるメソッド名及び当該メソッド名を定義している行番号として「ＭｅｍＧＥＴ（）」及び「２７」、ソースコード有効行番号として「２９、３０、３１、３２、３３、３６及び３７」、例外が発生する可能性があるメソッドを呼び出している行の行番号として「３２」及び「３３」、例外が発生する可能性がある処理及び発生した例外の処理が記述されている行番号及びその内容として「２８乃至３８」及び「２８乃至３８行目の内容」、コメント行の内容及びその定義行番号として「３５」及び「処理Ａ」、ソースプログラム内で呼ばれている他のメソッド名及びその定義行番号として「Exclass1.memtest(a)」及び「３２」並びに「Exclass2.memtest(a)」及び「３３」などがソース解析結果ＤＢ５に格納される。
【００１８】
また、ＭｅｍＴｅｓｔクラスのＭｅｍＧｅｔ（）メソッドにより呼び出されるＥｘＣｌａｓｓ１クラス（図４）については、当該クラスに含まれるメソッド名及び当該メソッド名を定義している行番号として「memtest()」及び「２」、ソースコード有効行番号として「５」「１１」及び「１３」、例外が発生する可能性がある処理及び発生した例外の処理が記述されている行番号及びその内容として「４乃至１４」及び「４乃至１４行目の内容」、コメント行の内容及びその定義行番号として「３」及び「内部処理」、発生する例外のデータとして「E1_Exception」及び「E2_Exception」などがソース解析結果ＤＢ５に格納される。
【００１９】
さらに、ＭｅｍＴｅｓｔクラスのＭｅｍＧｅｔ（）メソッドにより呼び出されるＥｘＣｌａｓｓ２クラス（図５）については、当該クラスに含まれるメソッド名及び当該メソッド名を定義している行番号として「memtest()」及び「２」、ソースコード有効行番号として「５」「１１」及び「１３」、例外が発生する可能性がある処理及び発生した例外の処理が記述されている行番号及びその内容として「４乃至１４」及び「４乃至１４行目の内容」、コメント行の内容及びその定義行番号として「３」及び「内部処理」、発生する例外のデータとして「E3_Exception」及び「E4_Exception」などがソース解析結果ＤＢ５に格納される。
【００２０】
次に、ドライバ生成処理部７は、ソース解析結果ＤＢ５を参照して、全てのメソッドを実行するためのドライバプログラムを生成し、ドライバ格納部１２に格納する（ステップＳ３）。上で述べたように、ソース解析結果ＤＢ５には、テスト対象のソースプログラムについて、クラス毎に当該クラスに含まれるメソッド名が登録されているので、当該データを用いてドライバプログラムを生成する。通常、テスト対象のソースプログラムには様々な分岐が含まれており、漏れなく例外テストを実施するためには全ての分岐を通過するようなドライバを生成する必要がある。従って、本実施の形態では、各メソッドについて、当該メソッドを実行するためのドライバプログラムを生成する。基本的に、当該ドライバプログラムは、特定のメソッドを呼び出すことができればよいので、（１）実行準備（接続処理など（Enterprise Java Beans（ＥＪＢ）やサーブレットなどの場合））、（２）コンストラクタ呼び出し（テストされるクラスのコンストラクタ呼び出し）、（３）テスト対象のソースプログラムにおける特定のメソッド呼び出し（メソッドパラメタ準備、メソッド戻り値準備、メソッド呼び出し及びメソッド戻り値結果記録を含む）、（４）終了処理（切断処理など）の機能を有する。例えば図３に示したＭｅｍＴｅｓｔクラスのＭｅｍＧｅｔ（）メソッドを呼び出すためのドライバプログラムの場合、図６のようになる。すなわち、１行目でテスト対象のクラスを定義し、４行目でコンストラクタ呼び出しを行い、５行目でテスト対象のメソッドを呼び出している。図３の例では戻り値は無いので、図６ではそのための処理は含まれていない。
【００２１】
次に、ドライバ実行処理部１３は、ドライバ格納部１２に格納されているドライバプログラムを全て実行させ、各ドライバプログラムを実行した際に通過した、テスト対象のソースプログラム等における実行行情報（カバレッジ・データと呼ぶ）を取得し、カバレッジデータ格納部１５に格納する（ステップＳ５）。カバレッジ・データは、ドライバ毎に管理される。
【００２２】
例えば図３に示したＭｅｍＴｅｓｔクラスのＭｅｍＧｅｔ（）メソッドの場合、図６に示したドライバプログラムを実行させると、例えば図７のようなカバレッジ・データが取得される。図７の例では、列７１には実行日時が、列７２には実行したテスト対象のソースプログラムのファイル名（複数のファイル名が含まれる場合もある）が、列７３にはファイル内の行番号が、列７４には実行されたソースコードが含まれる。
【００２３】
また、例外発生スタブ生成処理部９は、ソース解析結果ＤＢ５を参照して、発生するとされる例外を投げる処理のみを行う例外発生スタブクラスを生成し、例外発生スタブ格納部１１に格納する（ステップＳ７）。より具体的には、ソース解析結果ＤＢ５において、発生する例外のデータ（throws宣言された例外名）、当該データが登録されているクラス及び例外が発生するメソッドを特定し、例外発生スタブ生成のためのテーブルを作成し、当該テーブルに従って例外発生スタブクラスのソースプログラムを生成する。例外発生スタブ生成のためのテーブルについても、図３乃至図５の例の場合、ＥｘＣｌａｓｓ１クラス及びＥｘＣｌａｓｓ２クラスのｍｅｍｔｅｓｔ（）メソッドにおいて、発生する例外のデータ「E1_Exception」及び「E2_Exception」並びに「E3_Exception」及び「E4_Exception」が登録されている。従って、例えば図８に示すようなテーブルを例外発生スタブ生成のために用意する。すなわち、クラスの列と、メソッドの列と、発生する例外の列とを有し、発生する各例外につき１レコード用意される。例外発生スタブ生成処理部９は、図８のようなテーブルの１レコード毎に例外発生スタブクラスのソースファイルを生成し、ビルドし、例外発生スタブ格納部１１に格納する。なお、例外発生スタブ格納部１１とソースファイル格納部１は、物理的に別の記憶装置でなくともよいが、少なくともディレクトリを分ける必要がある。これは後の実際のテストにおいて正常に動作させるためには、例外発生スタブクラスの名前を、例外が発生する可能性があるクラスと同名にしなければならないためである。また、同じメソッドにつき複数種類の例外が発生する場合には例外発生スタブクラスの名前も重複する必要があるので、例えば例外名で識別できるように各例外発生スタブクラスは別々のディレクトリに格納される。
【００２４】
図９に、図３乃至図５の場合にステップＳ７で生成される例外発生スタブクラスのソースプログラムの一例を示す。図９（ａ）は、図８の第１レコードに対応する例外発生スタブクラスで、例外が発生する可能性があるクラスＥｘＣｌａｓｓ１と同名となっている。図９（ｂ）は、図８の第２レコードに対応する例外発生スタブクラスで、例外が発生する可能性があるクラスＥｘＣｌａｓｓ１と同名となっている。図９（ｃ）は、図８の第３レコードに対応する例外発生スタブクラスで、例外が発生する可能性があるクラスＥｘＣｌａｓｓ２と同名となっている。図９（ｄ）は、図８の第４レコードに対応する例外発生スタブクラスで、例外が発生する可能性があるクラスＥｘＣｌａｓｓ２と同名となっている。
【００２５】
次に、ドライバ抽出処理部１７は、カバレッジデータ格納部１５に格納されたカバレッジ・データ及びソース解析結果ＤＢ５に格納されたソース解析結果を用いて、例外を発生させる可能性のあるメソッドを呼び出すドライバプログラムを抽出し、例外を発生させる可能性のあるメソッドとドライバの対応関係などのデータを抽出ドライバデータ格納部１９に登録する（ステップＳ９）。ソース解析結果を参照すれば、例外が発生する可能性があるメソッドを呼び出す行の行番号を特定することができる。一方、カバレッジ・データには、各ドライバプログラムにつきどの行を実行したかについてのデータが含まれる。従って、例外が発生する可能性があるメソッドを呼び出す行の行番号をソース解析結果から特定し、当該行番号を含むカバレッジ・データを特定して、当該カバレッジ・データに対応するドライバプログラムを抽出する。そして、ドライバプログラム名と例外が発生する可能性があるメソッドとを抽出ドライバデータ格納部１９に格納する。
【００２６】
例えばソース解析結果に図３の「３２」及び「３３」行目に例外が発生する可能性のあるメソッドを呼び出す行が存在するというデータが含まれ、図７に示すようなドライバプログラム（ＴｅｓｔＤｒｉｖｅｒ）のカバレッジ・データが得られた場合には、「３２」及び「３３」でカバレッジ・データを検索する。そうすると、ドライバプログラム（ＴｅｓｔＤｒｉｖｅｒ）のカバレッジ・データには３２行目及び３３行目が含まれているため、ドライバプログラム（ＴｅｓｔＤｒｉｖｅｒ）が抽出され、メソッド名「ＥｘＣｌａｓｓ１．ｍｅｍｔｅｓｔ（）」及び「ＥｘＣｌａｓｓ２．ｍｅｍｔｅｓｔ（）」に対応させて登録する。例えば図１０に示すようなデータを格納する。図１０の例では、メソッド名の列と、ドライバ名の列とが設けられており、抽出されたドライバ名と例外が発生する可能性のあるメソッド名とが登録されている。
【００２７】
なお、例外が発生する可能性があるメソッドを呼び出す行の行番号が複数のドライバプログラムのカバレッジ・データに登録されている場合もある。そのような場合には、最初に検出されたドライバプログラムを抽出する。但し、呼び出す対象のメソッドへのルートが一番短いドライバプログラムが最適であり、できればこのようなドライバプログラムを抽出する。なお、ルートが短いという場合、実行行数が少ないという場合と実行時間が一番短い場合とがあり、後者の場合にはそのときのマシン環境やデータ等様々な条件で変わり得る。但し、場合によっては、複数のドライバプログラムから１つのドライバプログラムの選定を行う場合には、実行行数が少ないものを選択する場合もある。
【００２８】
そして、テスト実行管理部２１は、抽出ドライバデータ格納部１９と例外発生スタブ格納部１１とドライバ格納部１２とを参照して、ステップＳ９で抽出されたドライバを実行させると共に適切な例外発生スタブクラスを動的に置き換えて（ホットスワップして）実行させ、実行結果データを実行結果データ格納部２３に蓄積する（ステップＳ１１）。より具体的には、抽出ドライバデータ格納部１９に格納されている、例外を発生させる可能性のあるメソッドとドライバの対応関係のデータ（図１０）を用いて、実行すべきドライバプログラムを特定する。また、当該ドライバプログラムに対応するメソッドについては、例外発生スタブ格納部１１に格納されている例外発生スタブ生成のためのテーブル（図８）を参照して同名のメソッド（クラス及びメソッド）について発生させるべき例外を特定する。なお、同じメソッドで複数種類の例外を発生させる場合には、図８及び図９に示したように複数の例外発生スタブクラスが用意されている。従って、ドライバプログラムとメソッドの同じ組み合わせであっても、ドライバプログラムと例外発生スタブクラスとの組み合わせは異なる場合がある。従って、発生させるべき例外をベースにドライバプログラムと例外発生スタブクラスの組み合わせを特定して、当該組み合わせ毎に、ドライバプログラムをドライバ格納部１２から読み出して実行させると共に、当該ドライバプログラムに対応するメソッドについては直前に当該組み合わせに係る例外発生スタブクラスを例外発生スタブ格納部１１から読み出して動的に置き換えさせ（ホットスワップさせ）、実行させる。デバック実行を行えば、ステップ毎に実行結果を蓄積することができる。このようにすれば検討すべき例外のみを１度のドライバプログラム実行で強制的に発生させることができ、実行結果の検証が可能となる。
【００２９】
図１０の場合には、ドライバプログラムＴｅｓｔＤｒｉｖｅｒに対応して２つのメソッド（ＥｘＣｌａｓｓ１．ｍｅｍｔｅｓｔ（）及びＥｘＣｌａｓｓ２．ｍｅｍｔｅｓｔ（））が登録されているが、図８を参照すると各メソッドについて２つの例外が規定されている。従って、（１）ドライバＴｅｓｔＤｒｉｖｅｒと例外Ｅ１＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ１とが組み合わせられ、ドライバプログラムＴｅｓｔＤｒｉｖｅｒを実行し、メソッドＥｘＣｌａｓｓ１．ｍｅｍｔｅｓｔ（）を実行する直前に例外Ｅ１＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ１を動的に置き換えさせる（ホットスワップさせる）ストーリと、（２）ドライバＴｅｓｔＤｒｉｖｅｒと例外Ｅ２＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ１とが組み合わせられ、ドライバプログラムＴｅｓｔＤｒｉｖｅｒを実行し、メソッドＥｘＣｌａｓｓ１．ｍｅｍｔｅｓｔ（）を実行する直前に例外Ｅ２＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ１を動的に置き換えさせる（ホットスワップさせる）ストーリと、（３）ドライバＴｅｓｔＤｒｉｖｅｒと例外Ｅ３＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ２とが組み合わせられ、ドライバプログラムＴｅｓｔＤｒｉｖｅｒを実行し、メソッドＥｘＣｌａｓｓ２．ｍｅｍｔｅｓｔ（）を実行する直前に例外Ｅ３＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ２を動的に置き換えさせる（ホットスワップさせる）ストーリと、（４）ドライバＴｅｓｔＤｒｉｖｅｒと例外Ｅ４＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ２とが組み合わせられ、ドライバプログラムＴｅｓｔＤｒｉｖｅｒを実行し、メソッドＥｘＣｌａｓｓ２．ｍｅｍｔｅｓｔ（）を実行する直前に例外Ｅ４＿Ｅｘｃｅｐｔｉｏｎを発生させる例外発生スタブＥｘＣｌａｓｓ２を動的に置き換えさせる（ホットスワップさせる）ストーリとが全て実行される。
【００３０】
実行結果としては、実行されたクラス及びメソッド、処理すべき例外（Ｊａｖａの場合、catchされる例外）、例外の呼び出し元のメソッド、当該メソッドにより投げられた例外、出力結果などが実行結果データ格納部２３に格納される。
【００３１】
そして、出力処理部２５は、ユーザからの要求に応じて、実行結果データ格納部２３に格納されたデータを用いて表示画面を構成し、表示装置に表示する（ステップＳ１３）。例えば、図１１に示すような画面を表示させる。図１１の例では、テスト対象のクラス名の列１１０と、テスト対象のメソッド名の列１１１と、処理すべき例外（Ｊａｖａの場合、catchすべき例外）を示すためのcatchの列１１２と、呼び出し元のメソッド名である呼び出しメソッドの列１１３と、発生された例外を示すためのthrowされた例外の列１１４と、評価の列１１５と、承認の列１１６とが設けられている。クラス名の列１１０には、テスト対象のソースプログラム内のクラス名が全て含まれる。また、メソッド名の列１１１には、クラス名の列１１０に列挙されたクラスのメソッド名が全て含まれる。catchの列１１２には、クラスの列１１０及びメソッドの列１１１において特定されたメソッドで処理すべき例外を全て含む。なお、このデータのためソースファイル格納部１やソース解析結果ＤＢ５を参照する場合もある。また、各メソッドにつき、「catchされない例外」及び「未実行」という行も追加される。この「catchされない例外」は、catchされなかった実行例外のための行である。また「未実行」については、未実行の呼び出し元メソッドが存在するような場合に表示される。また、このデータのためソースファイル格納部１やソース解析結果ＤＢ５を参照する場合もある。呼び出しメソッド名の列１１３には、catchの列１１２に規定される例外処理を生じさせたメソッドのメソッド名が含まれる。なお、引数の型、数が違うものについては別メソッド扱いとなり、複数示される場合がある。また、実行されていないメソッドが存在している場合には「未実行」の行に示される。throwされた例外の列１１４には、呼び出しメソッド名の列１１３に示されているメソッドが投げた例外を示している。評価の列１１５には、throwされた例外の列１１４の値とcatchの列１１２の値が一致する場合にその行には「○」が示され、catchの列１１２の値がＥｘｃｅｐｔｉｏｎでthrowされた例外の列１１４の値と異なる場合には「△」が示され、未実行のメソッドがある場合やcatchされない例外が存在している場合には「×」が示される。出力処理部２５は、図１１に示すような表示を可能にするための処理を実施する。
【００３２】
そして、承認の列１１６には、ユーザが表示内容から問題無いか判断して、承認する場合（問題がない場合）にはチェックを付すようになっている。すなわち、チェックの入力については、出力処理部２５が受け付けて例えば実行結果データ格納部２３に登録しておき、後に参照できるようにしておく。
【００３３】
このような表示により、漏れなくテストできているか、プログラミングに問題が無いか、さらにException()でのみcatchしている例外についての確認も行うことができる。さらに、不具合がある場合に手直しの必要な部分を見つけることも可能となる。
【００３４】
以上のように本実施の形態によれば、ユーザが開発したソフトウェアに実装されている例外処理のロジックを、自動生成した環境でテストできるようになり、今までソフトウェアテストの環境作成にかけていた工数を大幅に削減できる。また、ソフトウェアテスト環境を実際に作成する事が難しく、テスト工程でも厳密に検証作業がなされていなかった例外処理の箇所について厳密なテストを実施することができるようになる。このことから、より信頼性の高いプログラムテストを実施することができ、ソフトウェアの品質向上を図ることができる。
【００３５】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、図１の機能ブロック図は一例であって必ずしもプログラムの構成が直接対応していない場合もある。また、図２の処理フローにおいてステップＳ７は、ステップＳ１の後ステップＳ１１までのいずれのタイミングで実施しても良い。さらにそれらの他のステップと並列して実行しても良い。図７、図８及び図１０のようなデータテーブルも一例であって同様の内容を保持できればどのような態様にてデータを保持していても良い。図１１に示した画面例は一例であって、他の画面構成を採用しても良い。また、出力処理部２５により、より多くの分析を行うようにしても良い。
【００３６】
以上述べた例外テスト支援装置は、コンピュータであって、コンピュータは図１２に示すような構成を有する。すなわち、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ）及び上で述べた処理を実施するアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。このようなコンピュータは、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で詳細に述べたような各種機能を実現する。
【００３７】
（付記１）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、前記特定のクラス、前記特定のメソッド及び前記例外のデータを記憶装置に格納するステップと、
前記記憶装置を参照して、前記例外を前記特定のメソッドと同名のメソッドで発生させる前記特定のクラスと同名のクラスである例外発生スタブクラスを生成し、記憶装置に格納するステップと、
をコンピュータに実行させる例外テスト支援プログラム。
【００３８】
（付記２）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを前記解析結果格納部に格納する解析ステップと、
前記解析結果格納部を参照して、特定された前記クラスの前記メソッドを呼び出すドライバクラスを生成し、ドライバ格納部に格納するステップと、
前記ドライバ格納部に格納された前記ドライバクラスを実行させ、当該ドライバクラスによって実行される、前記テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納するステップと、
前記解析結果格納部に格納されたデータと前記実行行データ格納部に格納されたデータとに基づいて、前記特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出ステップと、
をコンピュータに実行させる例外テスト支援プログラム。
【００３９】
（付記３）
前記解析ステップが、
前記テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、前記特定のクラス及び前記特定のメソッドに対応して前記例外のデータを前記解析結果格納部に格納するステップ
を含み、
さらに、
前記解析結果格納部に格納されたデータを参照して、前記例外を前記特定のメソッドと同名のメソッドで発生させる前記特定のクラスと同名のクラスである例外発生スタブクラスを生成し、例外発生スタブ格納部に格納する例外発生スタブ生成ステップと、
前記記憶装置に格納された前記ドライバクラスのデータに従って、前記ドライバ格納部に格納された前記ドライバクラス及び前記例外発生スタブ格納部に格納された前記例外発生スタブクラスを実行させ、実行結果データを実行結果格納部に格納する実行結果取得ステップと、
をコンピュータに実行させる付記２記載の例外テスト支援プログラム。
【００４０】
（付記４）
前記実行結果格納部に格納されたデータを用いて例外処理確認用の画面を表示装置に表示するステップ
をさらにコンピュータに実行させる付記３記載の例外テスト支援プログラム。
【００４１】
（付記５）
前記ドライバクラスのデータが、前記ドライバクラスと前記特定のクラスの前記特定のメソッドとの対応データを含み、
前記実行結果取得ステップが、
特定のドライバクラスを実行する際に、前記対応データを参照して、当該特定のドライバクラスに対応する前記特定のクラスの前記特定のメソッドを、前記特定のクラスと同名の例外発生スタブクラスのメソッドに動的に置き換えさせるステップ
を含む付記３記載の例外テスト支援プログラム。
【００４２】
（付記６）
前記ドライバ抽出ステップが、
前記特定のメソッドを呼び出している行を実行させるドライバクラスが複数検出された場合、前記特定のメソッドを呼び出している行を最短で実行させることができるドライバクラスを特定するステップ
を含む付記２記載の例外テスト支援プログラム。
【００４３】
（付記７）
前記例外発生スタブ生成ステップが、
前記特定のメソッドにおいて複数種類の例外が発生する可能性がある場合、前記特定のメソッドと例外との第２の対応データを生成し、記憶装置に格納するステップ、
を含み、
前記実行結果取得ステップが、
前記記憶装置に格納された前記第２の対応データを参照して、今回発生させるべき例外を発生させる例外発生スタブクラスを動的な置換のために特定するステップ
をさらに含む付記５記載の例外テスト支援プログラム。
【００４４】
（付記８）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、前記特定のクラス、前記特定のメソッド及び前記例外のデータを記憶装置に格納するステップと、
前記記憶装置を参照して、前記例外を前記特定のメソッドと同名のメソッドで発生させる前記特定のクラスと同名のクラスである例外発生スタブクラスを生成し、記憶装置に格納するステップと、
を含み、コンピュータに実行される例外テスト支援方法。
【００４５】
（付記９）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを前記解析結果格納部に格納する解析ステップと、
前記解析結果格納部を参照して、特定された前記クラスの前記メソッドを呼び出すドライバクラスを生成し、ドライバ格納部に格納するステップと、
前記ドライバ格納部に格納された前記ドライバクラスを実行させ、当該ドライバクラスによって実行される、前記テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納するステップと、
前記解析結果格納部に格納されたデータと前記実行行データ格納部に格納されたデータとに基づいて、前記特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出ステップと、
を含み、コンピュータに実行される例外テスト支援方法。
【００４６】
（付記１０）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、前記特定のクラス、前記特定のメソッド及び前記例外のデータを記憶装置に格納する手段と、
前記記憶装置を参照して、前記例外を前記特定のメソッドと同名のメソッドで発生させる前記特定のクラスと同名のクラスである例外発生スタブクラスを生成し、記憶装置に格納する手段と、
を有する例外テスト支援装置。
【００４７】
（付記１１）
テスト対象ソースプログラムを解析し、当該テスト対象ソースプログラムに含まれるクラス及び当該クラスに含まれるメソッドを特定し、当該クラス及びメソッドのデータを解析結果格納部に格納すると共に、当該テスト対象ソースプログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合には、当該特定のメソッドを呼び出している行データを前記解析結果格納部に格納する解析手段と、
前記解析結果格納部を参照して、特定された前記クラスの前記メソッドを呼び出すドライバクラスを生成し、ドライバ格納部に格納する手段と、
前記ドライバ格納部に格納された前記ドライバクラスを実行させ、当該ドライバクラスによって実行される、前記テスト対象ソースプログラム内の行データを当該ドライバクラスに対応付けて実行行データ格納部に格納する手段と、
前記解析結果格納部に格納されたデータと前記実行行データ格納部に格納されたデータとに基づいて、前記特定のメソッドを呼び出している行を実行させるドライバクラスを抽出し、当該ドライバクラスのデータを記憶装置に格納するドライバ抽出手段と、
を有する例外テスト支援装置。
【図面の簡単な説明】
【００４８】
【図１】本発明の実施の形態に係る例外テスト支援装置の機能ブロック図である。
【図２】本発明の実施の形態に係る処理フローを示す図である。
【図３】テスト対象のソースプログラムの一例を示す図である。
【図４】テスト対象のソースプログラムから呼び出される第１のソースプログラムの一例を示す図である。
【図５】テスト対象のソースプログラムから呼び出される第２のソースプログラムの一例を示す図である。
【図６】テストプログラムの一例を示す図である。
【図７】カバレッジ・データの一例を示す図である。
【図８】例外発生スタブクラスを生成するためのデータ・テーブルの一例を示す図である。
【図９】（ａ）乃至（ｄ）は、例外発生スタブクラスの一例を示す図である。
【図１０】メソッドとドライバプログラムとの対応関係を示す図である。
【図１１】表示画面例を示す図である。
【図１２】通常のコンピュータの機能ブロック図を示す。
【符号の説明】
【００４９】
１  ソースファイル格納部    ３  ソース解析部
５  ソース解析結果ＤＢ    ７  ドライバ生成処理部
９  例外発生スタブ生成処理部    １１  例外発生スタブ格納部
１２  ドライバ格納部    １３  ドライバ実行処理部
１５  カバレッジデータ格納部    １７  ドライバ抽出処理部
１９  抽出ドライバデータ格納部１９
２１  テスト実行管理部    ２３  実行結果データ格納部
２５  出力処理部
【図１】
2006190325.tif 000003
【図２】
2006190325.tif 000004
【図３】
2006190325.tif 000005
【図４】
2006190325.tif 000006
【図５】
2006190325.tif 000007
【図６】
2006190325.tif 000008
【図７】
2006190325.tif 000009
【図８】
2006190325.tif 000010
【図９】
2006190325.tif 000011
【図１０】
2006190325.tif 000012
【図１１】
2006190325.tif 000013
【図１２】
2006190325.tif 000014