(57)【要約】【課題】Ｃ言語等で記述されたプログラムのエラー処理のテストを自動的に行う。【解決手段】実行時の環境に依存したエラーを、その発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成し、作成したテストパターンに沿ったタイミングで関数をスタブ関数に置き換えることでエラー処理のテストを自動的に行う。【選択図】図１
2008234405.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象のソースファイルを読み込んで実行し、実行時の関数呼び出しの順序からテストパターン雛形ファイルを作成するテストパターン雛形作成処理部と、
前記ソースファイルに対応するスタブファイル及び前記テストパターン雛形ファイルを読み込み、全探索法アルゴリズムを実行し、前記テストパターン雛形ファイルに記述されている関数が前記スタブファイル中に存在する場合、前記テストパターン雛形ファイルから全探索で得られる全てのテストパターンを含むテストパターンファイルを作成するテストパターン作成処理部と、
前記ソースファイル及び前記スタブファイルを読み込んで実行し、動的に標準関数とスタブ関数を切り替え、前記テストパターンファイルに含まれるテストパターンに沿ったテストを実行するテスト実行処理部と
を具備する
異常系テスト支援装置。
【請求項２】
請求項１に記載の異常系テスト支援装置であって、
前記テストパターン雛形作成処理部は、前記ソースファイルをビルドしてステップ実行し、実行ステップが終了するまでのステップ中に関数が存在した場合、関数名を前記テストパターン雛形ファイルに書き込む
異常系テスト支援装置。
【請求項３】
請求項１又は２に記載の異常系テスト支援装置であって、
前記テストパターン作成処理部は、前記テストパターン雛形ファイルに記述されている関数のうち、前記スタブファイルが用意されている関数に切り替えフラグを付加したテストパターンファイルを作成し、
前記テスト実行処理部は、前記ソースファイル及び前記スタブファイルをビルドしてステップ実行し、最終ステップに到達するまでのステップ中に関数が存在した場合、前記テストパターンファイルを順に読み込み、対象の関数の切り替えフラグの値を取得し、対象の関数の切り替えフラグの値が０又は空のときはそのまま関数を実行し、１のときはスタブ関数を実行する
異常系テスト支援装置。
【請求項４】
請求項３に記載の異常系テスト支援装置であって、
前記テスト実行処理部は、実行した関数の切り替えフラグが同じテストパターンを削除する
異常系テスト支援装置。
【請求項５】
実行時の環境に依存したエラーを、発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成するテストパターン作成処理部と、
作成されたテストパターンに沿ったタイミングで関数をスタブ関数に置き換え、エラー処理のテストを自動的に行うテスト実行処理部と
を具備する
異常系テスト支援装置。
【請求項６】
テスト対象のソースファイルを実行し、実行時の関数呼び出しの順序からテストパターン雛形ファイルを作成するステップと、
前記ソースファイルに対応するスタブファイル及び前記テストパターン雛形ファイルを読み込み、全探索法アルゴリズムを実行し、前記テストパターン雛形ファイルに記述されている関数が前記スタブファイル中に存在する場合、前記テストパターン雛形ファイルから全探索で得られる全てのテストパターンを含むテストパターンファイルを作成するステップと、
前記ソースファイル及び前記スタブファイルをビルドして実行し、動的に標準関数とスタブ関数を切り替え、前記テストパターンファイルに含まれるテストパターンに沿ったテストを実行するステップと
を具備する
異常系テスト支援方法。
【請求項７】
請求項６に記載の異常系テスト支援方法であって、
前記ソースファイルをビルドし、ステップ実行できる環境で実行するステップと、
実行ステップ中に関数が存在するか確認するステップと、
実行ステップ中に関数が存在した場合、関数名を前記テストパターン雛形ファイルに書き込むステップと、
最終ステップに到達したか否か判定するステップと、
最終ステップに到達した場合、前記テストパターン雛形ファイルを保存するステップと
を更に具備する
異常系テスト支援方法。
【請求項８】
請求項６又は７に記載の異常系テスト支援方法であって、
前記テストパターン雛形ファイルをファイルの末尾まで順に読み込むステップと、
前記テストパターン雛形ファイル中の関数が、前記スタブファイル中に存在するとき、前記テストパターン雛形ファイルに記述されている関数のうち、前記スタブファイルが用意されている関数に切り替えフラグを付加したテストパターンファイルを作成するステップと、
ファイルの末尾に到達したか判定するステップと、
ファイルの末尾に到達すれば、作成したテストパターンファイルを保存するステップと
を更に具備する
異常系テスト支援方法。
【請求項９】
請求項６乃至８のいずれか一項に記載の異常系テスト支援方法であって、
前記ソースファイル及び前記スタブファイルをビルドし、ステップ実行するステップと、
前記スタブファイルをビルドする際に、通常の関数とスタブ関数名が同じにならないようにスタブ関数に接頭詞をつけるステップと、
実行ステップ中に関数が存在するか確認するステップと、
ステップ中に関数が存在した場合、テストパターンファイルを順に読み込み、対象の関数の切り替えフラグの値を取得するステップと、
対象の関数の切り替えフラグの値が０か１か判定するステップと、
対象の関数の切り替えフラグの値が０のとき、又は、対象の関数の切り替えフラグが空のとき（スタブ関数が存在しないとき）は、そのまま関数を実行するステップと、
対象の関数の切り替えフラグの値が１のときは、スタブ関数に制御を変更し、スタブ関数を実行するステップと
を更に具備する
異常系テスト支援方法。
【請求項１０】
請求項６乃至９のいずれか一項に記載の異常系テスト支援方法であって、
テストパターンに沿ったテストを実行する際、実行した関数を記憶するステップと、
実行したテストパターンのうち実行していない関数が存在するか確認するステップと、
実行していない関数が存在する場合、実行した関数の切り替えフラグが同じテストパターンを削除するステップと
を更に具備する
異常系テスト支援方法。
【請求項１１】
実行時の環境に依存したエラーを、発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成するステップと、
作成されたテストパターンに沿ったタイミングで関数をスタブ関数に置き換え、エラー処理のテストを自動的に行うステップと
を具備する
異常系テスト支援方法。
【請求項１２】
請求項６乃至１１のいずれか一項に記載の異常系テスト支援方法を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異常系テスト支援装置に関し、特にＣ言語等で記述されたプログラムのエラー処理のテストを行う異常系テスト支援装置に関する。
【背景技術】
【０００２】
ソフトウェア開発において、開発の全工数に占めるテスト工数の割合は非常に大きい。
【０００３】
特に、異常系の一部であるネットワークエラー、メモリ不足、ファイルアクセスエラー等実行時の環境に依存して発生するエラーのテストは実環境がないと困難である。その対策として実施されているエラーを擬似的に発生させるスタブコードを利用したテストは、実コードとスタブコードの切り替えが煩雑で、多くの工数を必要としていた。
【０００４】
なお、スタブコードとは、あるプログラムが他のプログラムを呼び出す際に仲介となるプログラムコードのことである。例えば、ユーザープログラムからシステムコールやデバイスドライバ等を利用する際に、その仲立ちとなって、複雑なインターフェイスを簡略化するために利用される。
【０００５】
特開平５−２５７７４０号公報（特許文献１）に「単体テスト実行方式」に関する技術が開示されている。この従来技術は、プログラム実行中にオブジェクトを動的に置き換える方法が記述されている。この技術を利用することで、プログラム実行中に呼び出すべき関数と、そのスタブコードを切り替えることができる。しかし、スタブコードの切り替えはそのつどユーザが何かしらの入力を行わなければならず、自動的に切り替えることについては特に述べられていない。
【０００６】
また、特開２００５−３３８９８７号公報（特許文献２）に「例外テスト支援プログラム及び例外テスト支援装置」に関する技術が開示されている。この従来技術は、ソースコードを解析して、ソースコードのカバレッジを満たすドライバを作成し、例外を発生する関数とスタブコードを切り替えるテストを行うことで例外テストの自動実行を行う。この従来技術では、例外を発生する関数は全てスタブコードに切り替えるので、ある特定のタイミングでしか例外を発生させることはできない。例えば、特許文献２の関数と例外出力の対応関係を参照すると分かるように、この従来技術では同じ関数は１箇所でしか例外を出力することができない。また、ファイルアクセス、ネットワークエラー等のエラーは任意のタイミングで発生するので、擬似エラーも任意のタイミングで発生させる必要がある。
【０００７】
また、特開２０００−１８１７４９号公報（特許文献３）に「ソフトウェアのエラー処理テストシステム、テスト方法及びテストプログラムの記録媒体」に関する技術が開示されている。この従来技術では、テスト対象プログラムの実行を指示後テスト対象プログラムによるオペレーティングシステムのアプリケーションインタフェース部の呼び出し状況を監視し、該状況を記憶装置に記憶する。該記憶された呼び出しの一つについてアプリケーションインタフェース部にてエラーとなるための細工をする。該設定後に実行されるテスト対象プログラムのエラー処理内容について判定するための実行指示後、記憶された呼び出し状況内の呼び出しの一つを実行順に選択し該呼び出しについてのエラー設定、テスト対象プログラムの実行指示、該実行に於けるエラー処理内容の判定を、呼び出し状況内の個々の呼び出しについて順次実施し判定結果を出力する。これにより、プログラムのエラー処理テストを自動実行する。この従来技術は、決められたタイミングの例外を発生する異常系テストを対象としており、任意のタイミングでの例外のテストは実行できない。
【０００８】
また、特開平３−０１０４３６号公報（特許文献４）に「電子メールシステムにおける異常処理の切り分け方式」に関する技術が開示されている。この従来技術は、異常処理を１パターン実装するだけでなく、パターンの選択を行う基となる情報を持ち動的に情報を変更可能とすることにより、全パターンを実装する。これにより、異常が発生した時の処理をユーザが設定できるようにしている。
【０００９】
【特許文献１】特開平５−２５７７４０号公報
【特許文献２】特開２００５−３３８９８７号公報
【特許文献３】特開２０００−１８１７４９号公報
【特許文献４】特開平３−０１０４３６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、実行時の環境に依存したエラーを、その発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成し、作成したテストパターンに沿ったタイミングで関数をスタブ関数に置き換えることでエラー処理のテストを自動的に行う異常系テスト支援装置を提供することである。
【課題を解決するための手段】
【００１１】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。但し、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１２】
本発明の異常系テスト支援装置は、テスト対象のソースファイル（１）を読み込んで実行し、実行時の関数呼び出しの順序からテストパターン雛形ファイルを作成するテストパターン雛形作成処理部（５）と、ソースファイル（１）に対応するスタブファイル（３）及びテストパターン雛形ファイルを読み込み、全探索法アルゴリズムを実行し、テストパターン雛形ファイルに記述されている関数がスタブファイル（３）中に存在する場合、テストパターン雛形ファイルから全探索で得られる全てのテストパターンを含むテストパターンファイルを作成するテストパターン作成処理部（７）と、ソースファイル（１）及びスタブファイル（３）を読み込んで実行し、動的に標準関数とスタブ関数を切り替え、テストパターンファイルに含まれるテストパターンに沿ったテストを実行するテスト実行処理部（９）とを具備する。
【００１３】
テストパターン雛形作成処理部（５）は、ソースファイル（１）をビルドしてステップ実行し、実行ステップが終了するまでのステップ中に関数が存在した場合、関数名をテストパターン雛形ファイルに書き込む。
【００１４】
テストパターン作成処理部（７）は、テストパターン雛形ファイルに記述されている関数のうち、スタブファイル（３）が用意されている関数に切り替えフラグを付加したテストパターンファイルを作成する。テスト実行処理部（９）は、ソースファイル（１）及びスタブファイル（３）をビルドしてステップ実行し、最終ステップに到達するまでのステップ中に関数が存在した場合、テストパターンファイルを順に読み込み、対象の関数の切り替えフラグの値を取得し、対象の関数の切り替えフラグの値が０又は空のときはそのまま関数を実行し、１のときはスタブ関数を実行する。
【００１５】
テスト実行処理部（９）は、実行した関数の切り替えフラグが同じテストパターンを削除する。
【００１６】
言い換えると、本発明の異常系テスト支援装置は、実行時の環境に依存したエラーを、発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成するテストパターン作成処理部（７）と、作成されたテストパターンに沿ったタイミングで関数をスタブ関数に置き換え、エラー処理のテストを自動的に行うテスト実行処理部（９）とを具備する。
【００１７】
本発明の異常系テスト支援方法は、テスト対象のソースファイル（１）を実行し、実行時の関数呼び出しの順序からテストパターン雛形ファイルを作成するステップと、ソースファイル（１）に対応するスタブファイル（３）及びテストパターン雛形ファイルを読み込み、全探索法アルゴリズムを実行し、テストパターン雛形ファイルに記述されている関数がスタブファイル（３）中に存在する場合、テストパターン雛形ファイルから全探索で得られる全てのテストパターンを含むテストパターンファイルを作成するステップと、ソースファイル（１）及びスタブファイル（３）をビルドして実行し、動的に標準関数とスタブ関数を切り替え、テストパターンファイルに含まれるテストパターンに沿ったテストを実行するステップとを具備する。
【００１８】
本発明の異常系テスト支援方法は、ソースファイル（１）をビルドし、ステップ実行できる環境で実行するステップと、実行ステップ中に関数が存在するか確認するステップと、実行ステップ中に関数が存在した場合、関数名をテストパターン雛形ファイルに書き込むステップと、最終ステップに到達したか否か判定するステップと、最終ステップに到達した場合、テストパターン雛形ファイルを保存するステップとを更に具備する。
【００１９】
本発明の異常系テスト支援方法は、テストパターン雛形ファイルをファイルの末尾まで順に読み込むステップと、テストパターン雛形ファイル中の関数が、スタブファイル（３）中に存在するとき、テストパターン雛形ファイルに記述されている関数のうち、スタブファイル（３）が用意されている関数に切り替えフラグを付加したテストパターンファイルを作成するステップと、ファイルの末尾に到達したか判定するステップと、ファイルの末尾に到達すれば、作成したテストパターンファイルを保存するステップとを更に具備する。
【００２０】
本発明の異常系テスト支援方法は、ソースファイル（１）及びスタブファイル（３）をビルドし、ステップ実行するステップと、スタブファイル（３）をビルドする際に、通常の関数とスタブ関数名が同じにならないようにスタブ関数に接頭詞をつけるステップと、
実行ステップ中に関数が存在するか確認するステップと、ステップ中に関数が存在した場合、テストパターンファイルを順に読み込み、対象の関数の切り替えフラグの値を取得するステップと、対象の関数の切り替えフラグの値が０か１か判定するステップと、対象の関数の切り替えフラグの値が０のとき、又は、対象の関数の切り替えフラグが空のとき（スタブ関数が存在しないとき）は、そのまま関数を実行するステップと、対象の関数の切り替えフラグの値が１のときは、スタブ関数に制御を変更し、スタブ関数を実行するステップとを更に具備する。
【００２１】
本発明の異常系テスト支援方法は、テストパターンに沿ったテストを実行する際、実行した関数を記憶するステップと、実行したテストパターンのうち実行していない関数が存在するか確認するステップと、実行していない関数が存在する場合、実行した関数の切り替えフラグが同じテストパターンを削除するステップとを更に具備する。
【００２２】
言い換えると、本発明の異常系テスト支援方法は、実行時の環境に依存したエラーを、発生の可能性のあるタイミングで発生させるテストパターンを網羅的に作成するステップと、作成されたテストパターンに沿ったタイミングで関数をスタブ関数に置き換え、エラー処理のテストを自動的に行うステップとを具備する。
【００２３】
本発明のプログラムは、上記のいずれかの異常系テスト支援方法をコンピュータに実行させる。
【発明の効果】
【００２４】
異常系のテストをより効率的にかつ網羅的にできる。その理由は、テストパターンファイルを網羅的に自動作成することができ、任意のタイミングでエラー処理を擬似的に発生することができるからである。
【発明を実施するための最良の形態】
【００２５】
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図１を参照すると、本発明の異常系テスト支援装置は、ソースファイル１と、ソースファイル格納部２と、スタブファイル３と、スタブファイル格納部４と、テストパターン雛形作成処理部５と、テストパターン雛形ファイル格納部６と、テストパターン作成処理部７と、テストパターンファイル格納部８と、テスト実行処理部９と、テスト結果ファイル１０を備える。
【００２６】
ソースファイル１は、テスト対象のソースコードが記述されたソースファイルである。ここでは、Ｃ言語等で記述されたプログラムのソースファイルを示す。ソースファイル１は、入力装置から入力しても良いし、通信装置を介してネットワーク上のサーバ等から取得しても良い。
【００２７】
ソースファイル格納部２は、情報を記憶する記憶装置である。ここでは、ソースファイル１を格納する。
【００２８】
スタブファイル３は、テスト対象のソースファイルのメタデータと移動先を示すシステムファイルである。ここでは、テスト対象のソースファイル内の関数に対応するスタブ関数が記述されている。スタブファイル３は、入力装置から入力しても良いし、通信装置を介してネットワーク上のサーバ等から取得しても良い。
【００２９】
スタブファイル格納部４、情報を記憶する記憶装置である。ここでは、スタブファイル３を格納する。
【００３０】
テストパターン雛形作成処理部５は、プログラム制御により動作するデータ処理装置である。テスト対象のソースファイルをステップ実行できる環境を備え、実行時の関数呼び出しの順序からテストパターン雛形ファイルを作成する。
【００３１】
テストパターン雛形ファイル格納部６は、情報を記憶する記憶装置である。ここでは、テストパターン雛形作成処理部５により作成されたテストパターン雛形ファイルを格納する。
【００３２】
テストパターン作成処理部７は、プログラム制御により動作するデータ処理装置である。全探索法アルゴリズムを実行できる環境を備え、テストパターンの雛形から全探索で得られる全てのテストパターンを作成し、テストパターンファイルを作成する。
【００３３】
テストパターンファイル格納部８は、情報を記憶する記憶装置である。ここでは、テストパターン作成処理部７により作成されたテストパターンファイルを格納する。
【００３４】
テスト実行処理部９は、プログラム制御により動作するデータ処理装置である。テスト対象のソースファイルをステップ実行できる環境と、動的に標準関数とスタブ関数を切り替えることができる環境を備え、テストパターンに沿ったテストを実行する。
【００３５】
テスト結果ファイル１０は、テスト実行処理部９により実行されたテストの結果を示すデータファイルである。
【００３６】
以下に、図２を参照して、全体の処理フローについて説明する。
（１）ステップＳ１０１
テストパターン雛形作成処理部５で、テスト対象のソースファイル１を実行し、テストパターン雛形ファイルを作成する。
（２）ステップＳ１０２
次に、テストパターン作成処理部７で、テストパターン雛形ファイルから、テストパターンファイルを作成する。テストパターン雛形ファイルに記述されている関数のうち、スタブファイル３が用意されている関数に切り替えフラグ（０，１）を付加する。切り替えフラグが０のときは通常の関数を実行し、１のときはスタブ関数を実行することを意味する。
（３）ステップＳ１０３
次に、テスト実行処理部でテストパターンファイルに沿ったテストを行う。
【００３７】
以下に、図３を参照して、テストパターン雛形作成処理部５でのテストパターン雛形ファイルの作成を行う場合の動作を説明する。
（１）ステップＳ２０１
まず、ソースファイル格納部からテスト対象のソースファイル１を取得する。
（２）ステップＳ２０２
取得したテスト対象のソースファイル１をコンパイラ等でビルドし、デバッガ等ステップ実行できる環境で実行する。なお、ビルドとは、ソースコードのコンパイルやライブラリのリンクなどを行い、最終的な実行可能ファイルを作成することである。
（３）ステップＳ２０３
実行ステップが終了するまで、順にステップを進める。
（４）ステップＳ２０４
最終ステップに到達したか否か判定する。
（５）ステップＳ２０５
最終ステップに到達していなければ、次のステップ実行し、実行ステップ中に関数が存在するか確認する。
（６）ステップＳ２０６
実行ステップ中に関数が存在した場合、関数名をテストパターン雛形ファイルに書き込む。
（７）ステップＳ２０７
最終ステップに到達した場合、作成したテストパターン雛形ファイルをテストパターン雛形ファイル格納部６に保存する。
【００３８】
図４に、テスト対象のソースファイル１の例を示す。
図４に示すテスト対象のソースファイルでは、繰り返し構文により「ｒｅａｄ関数」を３回呼び出し、最後に「ｐｒｉｎｔ関数」を１回呼び出す内容となっている。
【００３９】
図５に、図４のソースファイルをステップ実行した結果を示す。
図５のステップ実行では、図４のソースファイルの内容に従い、ステップ実行中に、「ｒｅａｄ関数」を３回、「ｐｒｉｎｔ関数」を１回呼び出している。すなわち、１回目の繰り返しで「ｒｅａｄ関数」を１回、２回目の繰り返しで「ｒｅａｄ関数」を１回、３回目の繰り返しで「ｒｅａｄ関数」を１回呼び出し、最後に「ｐｒｉｎｔ関数」を１回呼び出している。
【００４０】
図６に、図５のステップ実行で、実行した関数を書き込んだテストパターン雛形ファイルの例を示す。
図５のステップ実行を見ると、ステップ実行中に、「ｒｅａｄ関数」を３回、「ｐｒｉｎｔ関数」を１回呼び出しているので、テストパターン雛形ファイルは図６のようになる。図６に示すテストパターン雛形ファイルでは、「ｒｅａｄ」、「ｒｅａｄ」、「ｒｅａｄ」、「ｐｒｉｎｔ」と書き込まれている。
【００４１】
以下に、図７を参照して、テストパターン作成処理部７でのテストパターンファイルの作成のを行う場合の動作を説明する。
（１）ステップＳ３０１
テストパターン雛形ファイル格納部６からテストパターン雛形ファイルを読み込む。
（２）ステップＳ３０２
スタブファイル格納部４からスタブファイル３を読み込む。
（３）ステップＳ３０３
テストパターン雛形ファイルをファイルの末尾まで順に読み込む。
（４）ステップＳ３０４
ファイルの末尾に到達したか判定する。
（５）ステップＳ３０５
テストパターン雛形ファイルをファイルの末尾まで読み込んでいる間、読み込んだテストパターン雛形ファイル中の関数が、スタブファイル３中に存在するとき、テストパターンファイルを作成する。
（６）ステップＳ３０６
これまでに作成したテストパターンファイルから、切り替えフラグを追加したテストパターンファイルを新規に作成する。
（７）ステップＳ３０７
ファイルの末尾に到達すれば、作成したテストパターンファイルを全てテストパターンファイル格納部８に保存する。
【００４２】
図８にスタブファイル３の例を示す。
このスタブファイル３は、ファイル読み込みに失敗しＮＵＬＬを返すスタブ関数ｒｅａｄを含む。
【００４３】
図９に、テストパターンファイルの新規作成の例を示す。
これまでに作成したテストパターンファイルＤ１，Ｄ２に、「ｒｅａｄ関数」に切り替えフラグ（０、１）をそれぞれ追加したテストパターンファイルを新規に作成する。１つのテストパターンファイルから、新たに２つのテストパターンファイルを作成する。また、作成元のテストパターンファイルＤ１，Ｄ２は削除する。
【００４４】
図１０に、テストパターン雛形ファイルから作成されるテストパターンファイルの例を示す。
これまでに作成したテストパターンファイルＤ１，Ｄ２に、「ｒｅａｄ関数」に切り替えフラグ（０、１）をそれぞれ追加することで、図６のテストパターン雛形ファイルから８通りのテストパターンファイルが作成される。
【００４５】
以下に、図１１を参照して、テストパターンファイルに沿ったテストの実行を行う場合の動作を説明する。
（１）ステップＳ４０１
ソースファイル格納部からテスト対象のソースファイル１を取得する。
（２）ステップＳ４０２
テストパターンファイル格納部８からテストパターンファイルを取得する。
（３）ステップＳ４０３
スタブファイル格納部４からスタブファイル３を取得する。
（４）ステップＳ４０４
ソースファイル１、スタブファイル３をビルドし、デバッガ等ステップ実行、ユーザ入力による制御分岐ができる環境でステップ実行する。ここで、スタブファイル３をビルドする際に、通常の関数と、スタブ関数名が同じにならないようにスタブ関数に接頭詞をつける。
（５）ステップＳ４０５
最終ステップに到達するまで順にステップを進める。
（６）ステップＳ４０６
最終ステップに到達したか否か判定する。
（７）ステップＳ４０７
最終ステップに到達していなければ、次のステップ実行し、実行ステップ中に関数が存在するか確認する。
（８）ステップＳ４０８
ステップ中に関数が存在した場合、テストパターンファイルを順に読み込み、対象の関数の切り替えフラグの値を取得する。
（９）ステップＳ４０９
対象の関数の切り替えフラグの値が、０か１か判定する。
（１０）ステップＳ４１０
対象の関数の切り替えフラグの値が０のとき、又は、対象の関数の切り替えフラグが空のとき（スタブ関数が存在しないとき）は、そのまま関数を実行する。
（１１）ステップＳ４１１
対象の関数の切り替えフラグの値が１のときは、スタブ関数に制御を変更し、スタブ関数を実行する。スタブ関数への制御の変更はデバッガの制御分岐の機能を使って行う。
【００４６】
図１２に、図３のソースファイルを図６のテストパターンに沿ってテスト実行する際の例を示す。
ステップ実行を繰り返すと、「ｍａｉｎ関数」のステップ４に「ｒｅａｄ関数」が存在する。このとき、テストパターンファイルを順に読み込み、対応する関数の切り替えフラグを取得する。切り替えフラグが０なので、「ｒｅａｄ関数」をそのまま実行する。次に、ステップ実行を進めると、「ｍａｉｎ関数」のステップ６に「ｒｅａｄ関数」が存在する。テストパターンファイルを読み込み、切り替えフラグを取得する。切り替えフラグが１なので、「ｒｅａｄ関数」はスタブ関数に制御を移す。次に、ステップ実行を進めると、「ｍａｉｎ関数」のステップ８に「ｒｅａｄ関数」が存在する。対応する切り替えフラグの値が０なので「ｒｅａｄ関数」をそのまま実行する。更に、ステップ実行を進めると  「ｍａｉｎ関数」のステップ１１に「ｐｒｉｎｔ関数」が存在する。「ｐｒｉｎｔ関数」にはスタブ関数が無く、対応する切り替えフラグの値が存在しないので、「ｐｒｉｎｔ関数」をそのまま実行する。
【００４７】
図１１に示す処理でテストを実行し、テスト実行結果をテスト実行ファイルとして出力する。テスト実行結果の出力は、既存のテストの方法を使い、本特特許では特にその手法は特定しない。
【００４８】
次に、本発明の第２実施形態について詳細に説明する。
本実施形態は、テスト実行処理部でテストパターンファイルに沿ったテストを行う際、すべてのテストを行うのではなく不必要なテストを実行しないようにする。
【００４９】
以下に、図１３を参照して、テスト実行処理部でテストを行う場合の動作について説明する。
（１）ステップＳ５０１
まず、テストパターンに沿ったテストを実行する。このとき、実行した関数を記憶する。
（２）ステップＳ５０２
実行したテストパターンのうち実行していない関数が存在するか確認する。実行していない関数が存在しなければ、次のテストパターンに沿ったテストを実行する。
（３）ステップＳ５０３
実行していない関数が存在する場合、実行した関数の切り替えフラグが同じテストパターンを全て削除する。
【００５０】
図１４に不必要なテストパターンを削除する例を示す。
図１４のテストパターン１では、「ｒｅａｄ関数」を３回呼び出し、「ｐｒｉｎｔ関数」を１回呼び出す。１回目と２回目の「ｒｅａｄ関数」は、切り替えフラグの値が１となっており、３回目の「ｒｅａｄ関数」は、切り替えフラグの値が０となっている。テストパターン１をテストした結果、３回目の「ｒｅａｄ関数」を実行する前にエラーが発生し以降の処理を行わずプログラムが終了したとする。このとき、図１４で示すとおり「ｒｅａｄ関数」を２回実行している。ここでは、テストパターン１のうち、３回目の「ｒｅａｄ関数」と、「ｐｒｉｎｔ関数」を実行していないので、テストパターン削除の処理を行うステップに進む。
【００５１】
図１４で示すとおり、実行した関数とテストパターン２の対応する切り替えフラグは同じなので、テストパターン２を削除しこのテストを行わない。
【００５２】
その他の処理については、本発明の第１実施形態と同じ処理を行う。
【００５３】
本発明によれば、従来のテスト工程をより網羅的、効率的にできるようにする用途で使用できる。また、従来のテスト支援ツールでより多くのテスト項目を自動的にテストできるように強化する用途で利用できる。
【００５４】
以上のように、本発明では、実行時エラーが発生する可能性のあるタイミングのパターンを網羅的に作成し、そのパターンに沿って、テストの実行中に呼び出すべき関数と、そのスタブコードを自動的に切り替えることで、エラー処理のテストを効率的に行う仕組みを提供する。これにより、Ｃ言語等で記述されたプログラムのエラー処理のテストを自動的に行う。
【図面の簡単な説明】
【００５５】
【図１】図１は、本発明の異常系テスト支援装置の構成を示す概念図である。
【図２】図２は、全体の処理フローを示すフローチャートである。
【図３】図３は、テストパターン雛形ファイルを作成する場合のフローチャートである。
【図４】図４は、ソースファイルの例を示す図である。
【図５】図５は、ソースファイルをステップ実行した結果を示す図である。
【図６】図６は、実行した関数を書き込んだテストパターン雛形ファイルの例を示す図である。
【図７】図７は、テストパターンファイルを作成する場合のフローチャートである。
【図８】図８は、スタブファイルの例を示す図である。
【図９】図９は、テストパターンファイルの新規作成の例を示す図である。
【図１０】図１０は、８通りのテストパターンファイルの例を示す図である。
【図１１】図１１は、テストパターンファイルに沿ったテストを実行する場合のフローチャートである。
【図１２】図１２は、ソースファイルをテストパターンに沿ってテスト実行する際の例を示す図である。
【図１３】図１３は、テスト実行処理部でテストを行う場合のフローチャートである。
【図１４】図１４は、不必要なテストパターンを削除する例を示す図である。
【符号の説明】
【００５６】
１…  ソースファイル
２…  ソースファイル格納部
３…  スタブファイル
４…  スタブファイル格納部
５…  テストパターン雛形作成処理部
６…  テストパターン雛形ファイル格納部
７…  テストパターン作成処理部
８…  テストパターンファイル格納部
９…  テスト実行処理部
１０…  テスト結果ファイル
【図１】
2008234405.tif 000003
【図２】
2008234405.tif 000004
【図３】
2008234405.tif 000005
【図４】
2008234405.tif 000006
【図５】
2008234405.tif 000007
【図６】
2008234405.tif 000008
【図７】
2008234405.tif 000009
【図８】
2008234405.tif 000010
【図９】
2008234405.tif 000011
【図１０】
2008234405.tif 000012
【図１１】
2008234405.tif 000013
【図１２】
2008234405.tif 000014
【図１３】
2008234405.tif 000015
【図１４】
2008234405.tif 000016