(57)【要約】【課題】正しいドライバ及びスタブを生成すること。【解決手段】初期ドライバ生成部１１が、引数の定義箇所を示す情報を引数のメンバ変数ｉｄに設定するコードを含むドライバを生成し、テスト実行部１２が、ドライバを用いてテスト対象プログラム２を実行して、エラー発生個所と未定義関数名を出力する。そして、出力コード挿入部１３が、エラー発生個所の直前に、引数のメンバ変数ｉｄに設定された情報を出力するコードをテスト対象プログラム２に追加する。そして、テスト実行部１２は、テスト対象プログラムをドライバを用いて実行する。そして、検出部１４が、出力結果に基づいて、エラー発生原因となった変数のドライバ内での定義箇所及び変数名を調べ、エラー発生原因変数の定義箇所及び変数名を特定する。そして、ドライバ再生成部１５が、エラー発生原因変数の定義箇所及び変数名と未定義関数名に基づいて、ドライバに未定義関数の定義を追加する。【選択図】図２
2018045325.tif 000002
【特許請求の範囲】
【請求項１】
動的型付けを行うプログラム言語により記載されたテスト対象プログラムのテスト時に前記テスト対象プログラムを呼び出すドライバと、前記テスト対象プログラムに呼び出されるスタブの少なくとも１つを生成して支援するテスト支援プログラムにおいて、
使用する引数の定義箇所を識別する識別情報を該引数のメンバとして追加した識別子に設定するコードを含めた前記ドライバと、使用する戻り値の定義箇所を識別する識別情報を該戻り値のメンバとして追加した識別子に設定するコードを含めた前記スタブの少なくとも１つを生成し、
生成した前記ドライバと前記スタブの少なくとも１つを前記テスト対象プログラムと共に実行してエラー発生個所と未定義関数を特定し、
特定したエラー発生個所の直前に前記識別情報を出力するコードを挿入して前記テスト対象プログラムを修正した修正プログラムを生成し、
前記ドライバを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記引数のメンバとして含まれる前記未定義関数の定義を前記ドライバに追加した修正ドライバと、前記スタブを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記戻り値のメンバとして含まれる前記未定義関数の定義を前記スタブに追加した修正スタブの少なくとも１つを生成する
処理をコンピュータに実行させることを特徴とするテスト支援プログラム。
【請求項２】
前記修正ドライバと前記修正スタブの少なくとも１つを前記テスト対象プログラムと共に実行してエラーが発生したか否かを判定し、エラーが発生しなかった場合には、前記修正ドライバと前記修正スタブの少なくとも１つを出力し、エラーが発生した場合には、前記テスト対象プログラム、及び、前記ドライバと前記スタブの少なくとも１つを修正する処理を前記コンピュータに更に実行させることを特徴とする請求項１に記載のテスト支援プログラム。
【請求項３】
動的型付けを行うプログラム言語により記載されたテスト対象プログラムのテスト時に前記テスト対象プログラムを呼び出すドライバと、前記テスト対象プログラムに呼び出されるスタブの少なくとも１つを生成して支援するテスト支援方法において、
使用する引数の定義箇所を識別する識別情報を該引数のメンバとして追加した識別子に設定するコードを含めた前記ドライバと、使用する戻り値の定義箇所を識別する識別情報を該戻り値のメンバとして追加した識別子に設定するコードを含めた前記スタブの少なくとも１つを生成し、
生成した前記ドライバと前記スタブの少なくとも１つを前記テスト対象プログラムと共に実行してエラー発生個所と未定義関数を特定し、
特定したエラー発生個所の直前に前記識別情報を出力するコードを挿入して前記テスト対象プログラムを修正した修正プログラムを生成し、
前記ドライバを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記引数のメンバとして含まれる前記未定義関数の定義を前記ドライバに追加した修正ドライバと、前記スタブを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記戻り値のメンバとして含まれる前記未定義関数の定義を前記スタブに追加した修正スタブの少なくとも１つを生成する
処理をコンピュータが実行することを特徴とするテスト支援方法。
【請求項４】
動的型付けを行うプログラム言語により記載されたテスト対象プログラムのテスト時に前記テスト対象プログラムを呼び出すドライバと、前記テスト対象プログラムに呼び出されるスタブの少なくとも１つを生成して支援するテスト支援装置において、
使用する引数の定義箇所を識別する識別情報を該引数のメンバとして追加した識別子に設定するコードを含めた前記ドライバと、使用する戻り値の定義箇所を識別する識別情報を該戻り値のメンバとして追加した識別子に設定するコードを含めた前記スタブの少なくとも１つを生成する第１生成部と、
前記第１生成部により生成された前記ドライバと前記スタブの少なくとも１つを前記テスト対象プログラムと共に実行してエラー発生個所と未定義関数を特定する特定部と、
前記特定部により特定されたエラー発生個所の直前に前記識別情報を出力するコードを挿入して前記テスト対象プログラムを修正した修正プログラムを生成する第２生成部と、
前記ドライバを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記引数のメンバとして含まれる前記未定義関数の定義を前記ドライバに追加した修正ドライバと、前記スタブを前記修正プログラムと共に実行して出力された前記識別情報に基づいて、前記戻り値のメンバとして含まれる前記未定義関数の定義を前記スタブに追加した修正スタブの少なくとも１つを生成する第３生成部と
を有することを特徴とするテスト支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト支援プログラム、テスト支援方法及びテスト支援装置に関する。
【背景技術】
【０００２】
プログラムのテストを行う場合、ドライバとスタブが必要になる。ドライバは、テスト対象プログラムに引数を与えて呼び出すプログラムである。スタブは、テスト対象プログラムから呼び出されるダミー実装のプログラムであり、戻り値を返す。
【０００３】
図５は、ドライバとスタブを説明するための図である。図５において、関数ｆｕｎｃａ()がテスト対象プログラムである。関数ｆｕｎｃａ()は引数ａｒｇを受け取り、関数ｓｕｂａ()を呼び出す。このため、関数ｍａｉｎ()がドライバとして引数ｆｏｏを与えて関数ｆｕｎｃａ()を呼び出し、関数ｓｕｂａ()がスタブとして戻り値ｂａｒを返す。
【０００４】
プログラムのテストを支援するために、ドライバ及びスタブを自動生成するテスト支援装置がある。テスト支援装置は、ドライバを生成する際には、適切な型の値を引数として与えるようにする必要があり、スタブを生成する際には、適切な型の値を返すようにする必要がある。
【０００５】
しかしながら、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ、Ｒｕｂｙ等の動的型付けを行う言語では、実行時に型を決めるので、実行前に型がわからない。したがって、動的型付けを行う言語で作成されたプログラムをテストする場合、テスト支援装置は、ドライバの引数及びスタブの戻り値として適切な型の値を与えることができない。
【０００６】
このため、アノテーションを利用してドライバ及びスタブを自動生成する方法がある。ここで、アノテーションとは、ソースコード内のコメントである。図６は、アノテーションを利用してドライバ及びスタブを自動生成する方法を説明するための図である。
【０００７】
図６において、「／＊＊」と「＊／」で挟まれた記載はコメントである。図６において、アノテーション「＠ｔｙｐｅ  ＥｖｅｎｔＩｎｆｏ」は、変数ｅｖＩｎｆｏの型がＥｖｅｎｔＩｎｆｏであることを表す。また、「ｅｖＩｎｆｏ．ｇｅｔＩｔｅｍＩｄ()」の記載は、ｅｖＩｎｆｏは、関数ｇｅｔＩｔｅｍＩｄ()が存在するＥｖｅｎｔＩｎｆｏ型であることを表す。テスト支援装置は、アノテーションから型を取得することによって、ドライバの引数及びスタブの戻り値として適切な型の値を与えることができる。
【０００８】
なお、テスト対象プログラムの特定のクラス内に例外が発生する可能性のある特定のメソッドを検出した場合、特定のクラス、特定のメソッド及び例外データに基づいて、クラス名及びメソッド名が同じであって例外を発生させるスタブクラスを生成する技術がある。この技術によれば、例外処理のテストを自動化することができる。
【０００９】
また、プログラムの実行中に所定の条件が満たされたかを監視し、所定の条件が満たされると、所定の条件に対応付けられた例外用プログラム部品を呼び出すことで、プログラムのテストを効率よく行う技術がある。
【００１０】
また、プログラムの更新後の動作記述と共通性の高い動作記述を複数の更新前動作記述から選択し、選択した更新前動作記述のテストパターンから更新後の動作記述のテストパターンを生成することで、テストパターンの生成を効率的に行う技術がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００５−３３８９８７号公報
【特許文献２】特開２０１２−１０８６９２号公報
【特許文献３】特開２００４−１１８４０３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
アノテーションを利用してドライバ及びスタブを自動生成する方法には、アノテーションに誤りがあるとテスト対象プログラムを正しく実行できないという問題がある。図７は、アノテーションを利用してドライバ及びスタブを自動生成する方法の問題を説明するための図である。図７（ａ）は、自動生成されたドライバを示し、図７（ｂ）は、テスト対象プログラムを示す。
【００１３】
図７（ａ）に示すように、ドライバは、ＥｖｅｎｔＩｎｆｏ型の変数ｅｖＩｎｆｏを生成する（ｖａｒ  ｅｖＩｎｆｏ  ＝  ｎｅｗ  ＥｖｅｎｔＩｎｆｏ()）。そして、ドライバは、ｅｖＩｎｆｏを引数としてテスト対象プログラムｆｕｎｃＵｎｄｅｒＴｅｓｔを呼び出す（ｆｕｎｃＵｎｄｅｒＴｅｓｔ(ｅｖＩｎｆｏ)）。
【００１４】
ここで、ＥｖｅｎｔＩｎｆｏが関数ｇｅｔＩｔｅｍＩｄ()のみ定義された型であるとする。図７（ｂ）のテスト対象プログラムｆｕｎｃＵｎｄｅｒＴｅｓｔ()が実行されると、ａｒｇ．ｇｅｔＩｔｅｍＩｄ()は、ＥｖｅｎｔＩｎｆｏに関数ｇｅｔＩｔｅｍＩｄ()が定義されているため、正しく実行される。しかしながら、ａｒｇ．ｇｅｔＯｂｊ()は、ＥｖｅｎｔＩｎｆｏに関数ｇｅｔＯｂｊ()が定義されていないため、正しく実行されない。
【００１５】
アノテーションに誤りが生じる場合としては、例えば、ＥｖｅｎｔＩｎｆｏの定義が開発中に変更になった場合がある。
【００１６】
本発明は、１つの側面では、テスト対象プログラムの正しい実行を可能とするドライバ及びスタブを生成することを目的とする。
【課題を解決するための手段】
【００１７】
１つの態様では、テスト支援プログラムは、動的型付けを行うプログラム言語により記載されたテスト対象プログラムのテスト時にテスト対象プログラムを呼び出すドライバを生成する処理をコンピュータに実行させる。また、テスト支援プログラムは、テスト対象プログラムに呼び出されるスタブを生成する処理をコンピュータに実行させる。テスト支援プログラムは、使用する引数の定義箇所を識別する識別情報を該引数のメンバとして追加した識別子に設定するコードを含めたドライバを生成する処理をコンピュータに実行させる。テスト支援プログラムは、使用する戻り値の定義箇所を識別する識別情報を該戻り値のメンバとして追加した識別子に設定するコードを含めたスタブを生成する処理をコンピュータに実行させる。そして、テスト支援プログラムは、生成したドライバとスタブの少なくとも１つをテスト対象プログラムと共に実行してエラー発生個所と未定義関数を特定する処理をコンピュータに実行させる。そして、テスト支援プログラムは、特定したエラー発生個所の直前に識別情報を出力するコードを挿入してテスト対象プログラムを修正した修正プログラムを生成する処理をコンピュータに実行させる。そして、テスト支援プログラムは、ドライバを修正プログラムと共に実行して出力された識別情報に基づいて、引数のメンバとして含まれる未定義関数の定義をドライバに追加した修正ドライバを生成する処理をコンピュータに実行させる。また、テスト支援プログラムは、スタブを修正プログラムと共に実行して出力された識別情報に基づいて、戻り値のメンバとして含まれる未定義関数の定義をスタブに追加した修正スタブを生成する処理をコンピュータに実行させる。
【発明の効果】
【００１８】
１つの側面では、テスト対象プログラムの正しい実行を可能とするドライバ及びスタブを生成することができる。
【図面の簡単な説明】
【００１９】
【図１Ａ】図１Ａは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第１の図である。
【図１Ｂ】図１Ｂは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第２の図である。
【図１Ｃ】図１Ｃは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第３の図である。
【図１Ｄ】図１Ｄは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第４の図である。
【図１Ｅ】図１Ｅは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第５の図である。
【図１Ｆ】図１Ｆは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第６の図である。
【図１Ｇ】図１Ｇは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第７の図である。
【図１Ｈ】図１Ｈは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための第８の図である。
【図２】図２は、実施例に係るテスト支援装置の機能構成を示す図である。
【図３】図３は、テスト支援装置による処理のフローを示すフローチャートである。
【図４】図４は、実施例に係るテスト支援プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図５】図５は、ドライバとスタブを説明するための図である。
【図６】図６は、アノテーションを利用してドライバ及びスタブを自動生成する方法を説明するための図である。
【図７】図７は、アノテーションを利用してドライバ及びスタブを自動生成する方法の問題を説明するための図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示するテスト支援プログラム、テスト支援方法及びテスト支援装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２１】
まず、実施例に係るテスト支援装置が生成するドライバ及びスタブについて説明する。図１Ａ〜図１Ｈは、実施例に係るテスト支援装置が生成するドライバ及びスタブを説明するための図である。図１Ａ（ａ）は、ドライバを示し、図１Ａ（ｂ）は、テスト対象プログラムを示す。図１Ａ（ａ）に示すように、実施例に係るテスト支援装置は、テスト対象プログラムに与える引数ｅｖＩｎｆｏの定義箇所を示す情報をメンバ変数ｉｄに設定するコード「ｅｖＩｎｆｏ．ｉｄ＝“ｄｒｉｖｅｒ０．ｊｓ，ｌｉｎｅ  １”」をドライバに追加する。
【００２２】
ここで、ｉｄは、ｅｖＩｎｆｏに動的に追加されたメンバ変数である。「ｄｒｉｖｅｒ０．ｊｓ」は、ドライバ名であり、ドライバを格納するファイルの名前である。「ｌｉｎｅ  １」は、引数ｅｖＩｎｆｏの定義箇所が１行目「ｖａｒ  ｅｖＩｎｆｏ＝ｎｅｗ  ＥｖｅｎｔＩｎｆｏ」であることを示す。実施例に係るテスト支援装置は、テスト中に引数に関してエラーが発生した際にｅｖＩｎｆｏ．ｉｄに設定された情報を出力することで、引数がドライバのどこで定義された変数かを特定することができる。
【００２３】
そして、実施例に係るテスト支援装置は、図１Ｂに示すように、ドライバに対して、テスト対象プログラム実行中に発生したエラーを補足して解析するコードを追加する。図１Ｂでは、ｃａｔｃｈ(ｅｘ)｛ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ(ｅｘ)；｝が追加されたコードであり、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()がエラーを解析する関数である。ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()は、例外オブジェクトに含まれる情報からエラー発生個所とエラーメッセージを出力する。
【００２４】
そして、実施例に係るテスト支援装置は、ドライバとテスト対象プログラムを実行する。すると、図１Ｃに示すように、「ｖａｒ  ｏｂｊ＝ａｒｇ．ｇｅｔＯｂｊ()；」でエラーが発生し、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()によって、エラー発生個所として「ｔａｒｇｅｔ．ｊｓ，ｌｉｎｅ  ６」が出力される。また、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()によって、エラーメッセージ「ＴｙｐｅＥｒｒｏｒ：ａｒｇ．ｇｅｔＯｂｊ  ｉｓ  ｎｏｔ  ａ  ｆｕｎｃｔｉｏｎ」が出力される。
【００２５】
そして、実施例に係るテスト支援装置は、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()により出力された情報を基に、図１Ｄに示すように、テスト対象プログラムのエラー発生個所の直前に未定義関数を含む変数のメンバ変数ｉｄの値を出力するコードを挿入する。図１Ｄでは、「ｃｏｎｓｏｌｅ．ｌｏｇ(ａｒｇ．ｉｄ)；」が挿入されたコードである。
【００２６】
そして、実施例に係るテスト支援装置は、ドライバとテスト対象プログラムを再実行する。すると、ｅｖＩｎｆｏ．ｉｄに設定された情報「“ｄｒｉｖｅｒ０．ｊｓ，ｌｉｎｅ  １”」が出力される。そして、実施例に係るテスト支援装置は、ｄｒｉｖｅｒ０．ｊｓの１行目で定義された変数ｅｖＩｎｆｏに関数ｇｅｔＯｂｊ()が定義されていなかったためにエラーが発生したことを特定する。
【００２７】
そして、実施例に係るテスト支援装置は、図１Ｅに示すように、未定義関数ｇｅｔＯｂｊ()のスタブ定義をドライバに追加する。図１Ｅでは、２行目〜６行目に関数ｅｖＩｎｆｏ．ｇｅｔＯｂｊ()のスタブ定義が挿入されている。３行目は、ｅｖＩｎｆｏ．ｇｅｔＯｂｊ()の戻り値ｒｅｔｖａｌを定義しているので、４行目に、戻り値ｒｅｔｖａｌの定義箇所を示す情報をメンバ変数ｉｄに設定するコード「ｒｅｔｖａｌ．ｉｄ＝“ｄｒｉｖｅｒ１．ｊｓ，ｌｉｎｅ  ３”」が追加されている。また、ドライバが修正されたため、ドライバ名が「ｄｒｉｖｅｒ１．ｊｓ」に変更されている。
【００２８】
そして、実施例に係るテスト支援装置は、ドライバとテスト対象プログラムを実行する。すると、図１Ｆに示すように、「ｏｂｊ．ｇｅｔＴｙｐｅ()；」でエラーが発生し、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()によって、エラー発生個所として「ｔａｒｇｅｔ．ｊｓ，ｌｉｎｅ  ７」が出力される。また、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()によって、エラーメッセージ「ＴｙｐｅＥｒｒｏｒ：ｏｂｊ．ｇｅｔＴｙｐｅ  ｉｓ  ｎｏｔ  ａ  ｆｕｎｃｔｉｏｎ」が出力される。
【００２９】
そして、実施例に係るテスト支援装置は、ｉｎｓｐｅｃｔＥｘｃｅｐｔｉｏｎ()により出力された情報を基に、図１Ｇに示すように、テスト対象プログラムのエラー発生個所の直前に未定義関数を含む変数のメンバ変数ｉｄの値を出力するコードを挿入する。図１Ｇでは、「ｃｏｎｓｏｌｅ．ｌｏｇ（ｏｂｊ．ｉｄ）；」が挿入されたコードである。
【００３０】
そして、実施例に係るテスト支援装置は、ドライバとテスト対象プログラムを再実行する。すると、ｒｅｔｖａｌ．ｉｄに設定された情報「“ｄｒｉｖｅｒ１．ｊｓ，ｌｉｎｅ  ３”」が出力される。そして、実施例に係るテスト支援装置は、ｄｒｉｖｅｒ１．ｊｓの３行目で定義された変数ｒｅｔｖａｌに関数ｇｅｔＴｙｐｅ()が定義されていなかったためにエラーが発生したことを特定する。
【００３１】
そして、実施例に係るテスト支援装置は、図１Ｈに示すように、未定義関数ｇｅｔＴｙｐｅ()のスタブ定義をドライバに追加する。図１Ｈでは、４行目〜８行目に関数ｒｅｔｖａｌ．ｇｅｔＴｙｐｅ()のスタブ定義が挿入されている。５行目は、ｒｅｔｖａｌ．ｇｅｔＴｙｐｅ()の戻り値ｒｅｔｖａｌ２を定義しているので、６行目に、戻り値ｒｅｔｖａｌ２の定義箇所を示す情報をメンバ変数ｉｄに設定するコード「ｒｅｔｖａｌ２．ｉｄ＝“ｄｒｉｖｅｒ２．ｊｓ，ｌｉｎｅ  ５”」が追加されている。また、ドライバが修正されたため、ドライバ名が「ｄｒｉｖｅｒ２．ｊｓ」に変更されている。
【００３２】
そして、実施例に係るテスト支援装置は、ドライバとテスト対象プログラムを再実行する。すると、エラーが発生しないため、実施例に係るテスト支援装置は、ｄｒｉｖｅｒ２．ｊｓを生成したドライバとする。
【００３３】
このように、実施例に係るテスト支援装置は、変数の型が期待したものと異なるために、プログラムに関数が未定義のエラーが存在する場合に、エラーをなくすドライバ及びスタブを生成する。このため、実施例に係るテスト支援装置は、エラー発生時の情報を基に原因となる変数と未定義の関数を特定し、必要な関数を定義したドライバ及びスタブを再生成する。
【００３４】
すなわち、実施例に係るテスト支援装置は、テスト時に使用するドライバから与える引数及びスタブから返す戻り値にメンバ変数ｉｄを追加し、定義箇所を示す情報を設定する。そして、実施例に係るテスト支援装置は、テスト実行中に発生したエラーを補足して、エラーメッセージを解析することで、エラー発生の原因となった変数の名前を特定する。
【００３５】
そして、実施例に係るテスト支援装置は、エラー発生個所の直前にメンバ変数ｉｄの値を出力するコードを挿入してプログラムを再実行することで、エラー発生個所での未定義関数名とドライバでの引数名又はスタブでの戻り値名との対応付けを行う。そして、実施例に係るテスト支援装置は、未定義関数を定義したドライバ又はスタブを再生成する。そして、実施例に係るテスト支援装置は、エラーが発生しなくなるまでドライバ又はスタブの再生成を繰り返す。
【００３６】
したがって、実施例に係るテスト支援装置は、未定義関数のないドライバ及びスタブを生成し、テスト対象プログラムを正しく実行することができる。
【００３７】
次に、実施例に係るテスト支援装置の機能構成について説明する。図２は、実施例に係るテスト支援装置の機能構成を示す図である。図２に示すように、実施例に係るテスト支援装置１は、初期ドライバ生成部１１と、テスト実行部１２と、出力コード挿入部１３と、検出部１４と、ドライバ再生成部１５と、判定部１６とを有する。
【００３８】
初期ドライバ生成部１１は、引数の定義箇所を示す情報を引数のメンバ変数ｉｄに設定するコード、及び、エラーを補足して解析するコードを含むドライバを初期ドライバとして生成する。
【００３９】
テスト実行部１２は、初期ドライバ生成部１１又はドライバ再生成部１５により生成されたドライバを用いてテスト対象プログラム２を実行し、未定義関数が原因のエラーを検出する。そして、エラー発生個所を出力コード挿入部１３に出力し、未定義関数名を検出部１４に出力する。
【００４０】
出力コード挿入部１３は、テスト実行部１２が出力したエラー発生個所から、エラー発生個所の直前に、引数又は戻り値のメンバ変数ｉｄに設定された定義箇所情報を出力するコードをテスト対象プログラム２に追加する。テスト実行部１２は、出力コード挿入部１３により出力コードが追加されたテスト対象プログラムをドライバを用いて実行する。
【００４１】
検出部１４は、出力コード挿入部１３により出力コードが追加されたテスト対象プログラムの出力結果に基づいて、エラー発生原因となった変数のドライバ又はスタブ内での定義箇所及び変数名を調べる。そして、検出部１４は、エラー発生原因変数の定義箇所及び変数名をドライバ再生部１５に出力する。
【００４２】
ドライバ再生成部１５は、エラー発生原因変数の定義箇所及び変数名と未定義関数名に基づいて、ドライバに未定義関数の定義を追加してドライバを再生成する。判定部１６は、テスト実行部１２でのエラーの有無から、テスト対象プログラムをエラーなく実行する完成ドライバ３が得られたか否かを判定し、得られたと判定した場合には、完成ドライバ３を出力する。
【００４３】
次に、テスト支援装置１による処理のフローについて説明する。図３は、テスト支援装置１による処理のフローを示すフローチャートである。図３に示すように、テスト支援装置１は、関数ｆを呼び出す初期ドライバを生成してｄとする（ステップＳ１）。ここで、関数ｆは、テスト対象プログラムである。
【００４４】
そして、テスト支援装置１は、引数の定義箇所を示す情報を設定するコード、及び、エラーを補足して解析するコードをｄに挿入してドライバを生成してｄとする（ステップＳ２）。そして、テスト支援装置１は、ドライバｄを用いて関数ｆを実行し（ステップＳ３）、未定義関数によるエラーが発生したか否かを判定する（ステップＳ４）。そして、未定義関数によるエラーが発生しなかった場合には、テスト支援装置１は、ドライバｄを完成ドライバ３として出力して処理を終了する。
【００４５】
一方、未定義関数によるエラーが発生した場合には、テスト支援装置１は、エラー情報よりエラー発生個所ｍ、未定義関数名ｕ、変数名ｉを特定する（ステップＳ５）。そして、テスト支援装置１は、エラー発生個所ｍの直前に変数名ｉの定義箇所を示す情報を出力するコードを挿入した関数ｆ’を生成する（ステップＳ６）。
【００４６】
そして、テスト支援装置１は、ドライバｄを用いて関数ｆ’を実行し、ドライバ又はスタブでの変数名ｊを取得する（ステップＳ７）。そして、テスト支援装置１は、ドライバｄで変数名ｊをもつ変数に名前がｕのスタブ関数を定義したドライバを生成してｄとし（ステップＳ８）、ステップＳ３に戻る。
【００４７】
このように、未定義関数によるエラーが発生しなくなるまでドライバの再生成を繰り返すことで、テスト支援装置１は、完成ドライバ３を生成することができる。
【００４８】
上述してきたように、実施例では、初期ドライバ生成部１１が、引数の定義箇所を示す情報を引数のメンバ変数ｉｄに設定するコードを含むドライバを初期ドライバとして生成する。そして、テスト実行部１２が、初期ドライバを用いてテスト対象プログラム２を実行して未定義関数が原因のエラーを検出し、エラー発生個所と未定義関数名を特定する。そして、出力コード挿入部１３が、エラー発生個所の直前に、引数のメンバ変数ｉｄに設定された定義箇所情報を出力するコードをテスト対象プログラム２に追加する。そして、テスト実行部１２は、出力コード挿入部１３により出力コードが追加されたテスト対象プログラムをドライバを用いて実行する。そして、検出部１４が、実行結果に基づいて、エラー発生原因となった変数に関して、ドライバ又はスタブ内での定義箇所及び変数名を特定する。そして、ドライバ再生成部１５が、エラー発生原因変数の定義箇所及び変数名と未定義関数名に基づいて、ドライバに未定義関数の定義を追加してドライバを再生成する。したがって、テスト支援装置１は、テスト対象プログラム２を正しく実行するドライバを生成することができる。
【００４９】
また、実施例では、判定部１６が、テスト実行部１２でのエラーの有無から、テスト対象プログラムをエラーなく実行する完成ドライバ３が得られたか否かを判定し、得られたと判定した場合には、完成ドライバ３を出力する。一方、完成ドライバ３が得られなかった場合には、テスト支援装置１は、テスト対象プログラム２を修正して実行する処理、エラー発生原因となった変数に関して、ドライバ又はスタブ内での定義箇所及び変数名を特定する処理、及び、ドライバを再生成する処理を繰り返す。したがって、テスト支援装置１は、テスト対象プログラム２を正しく実行するドライバを最終的に生成することができる。
【００５０】
なお、実施例では、テスト支援装置１について説明したが、テスト支援装置１が有する構成をソフトウェアによって実現することで、同様の機能を有するテスト支援プログラムを得ることができる。そこで、テスト支援プログラムを実行するコンピュータについて説明する。
【００５１】
図４は、実施例に係るテスト支援プログラムを実行するコンピュータのハードウェア構成を示す図である。図４に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ（Central  Processing  Unit）５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００５２】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００５３】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００５４】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００５５】
そして、コンピュータ５０において実行されるテスト支援プログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、テスト支援プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたテスト支援プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００５６】
また、実施例では、ドライバを生成する場合について説明したが、本発明はこれに限定されるものではなく、スタブを生成する場合にも同様に適用することができる。
【符号の説明】
【００５７】
１    テスト支援装置
２    テスト対象プログラム
３    完成ドライバ
１１    初期ドライバ生成部
１２    テスト実行部
１３    出力コード挿入部
１４    検出部
１５    ドライバ再生成部
１６    判定部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１Ａ】
2018045325.tif 000003
【図１Ｂ】
2018045325.tif 000004
【図１Ｃ】
2018045325.tif 000005
【図１Ｄ】
2018045325.tif 000006
【図１Ｅ】
2018045325.tif 000007
【図１Ｆ】
2018045325.tif 000008
【図１Ｇ】
2018045325.tif 000009
【図１Ｈ】
2018045325.tif 000010
【図２】
2018045325.tif 000011
【図３】
2018045325.tif 000012
【図４】
2018045325.tif 000013
【図５】
2018045325.tif 000014
【図６】
2018045325.tif 000015
【図７】
2018045325.tif 000016