(57)【要約】【課題】ユーザの負担を軽減し人為的ミスの発生を抑制する。【解決手段】試験対象モジュール６１と同等の機能を備えた同機能保持モジュール５１の処理実行時に、実行ソフトウェアの関数情報が格納されたメモリ５２を解析して、同機能保持モジュール５１の関数情報に関するアドレス情報を取得するメモリ解析部１１と、取得されたアドレス情報に基づき同機能保持モジュール５１の関数情報を取得する関数情報収集部１２と、取得された関数情報から、出力対象を定義した出力対象定義データ１０２に基づき、試験入力データ１１１及び期待値データ１１２を生成するデータ生成部１３とを備える。【選択図】図１
2007241432.tif 000002
【特許請求の範囲】
【請求項１】
試験対象モジュールの試験の手順や引数値を含む試験仕様を定義した試験入力データ及び上記試験対象モジュールの実行結果の期待値を表す期待値データを使用して上記試験対象モジュールを評価するソフトウェア試験装置において、
上記試験対象モジュールと同等の機能を備えた同機能保持モジュールの処理実行時に、実行ソフトウェアの関数情報が格納されたメモリを解析して、上記同機能保持モジュールの関数情報に関するアドレス情報を取得するメモリ解析部と、
該メモリ解析部により取得されたアドレス情報に基づき上記同機能保持モジュールの関数情報を取得する関数情報収集部と、
該関数情報収集部により取得された関数情報から、出力対象を定義した出力対象定義データに基づき、上記試験入力データ及び上記期待値データを生成するデータ生成部とを備えたことを特徴とするソフトウェア試験装置。
【請求項２】
関数情報収集部により取得された同機能保持モジュールの関数情報を、同機能保持モジュールと試験対象モジュールの関数間の対応付けを記述したマッピングデータに基づき、試験対象モジュールの関数情報に変換するデータ変換部を備え、
データ生成部は上記データ変換部により変換された関数情報から、出力対象定義データに基づき、上記試験入力データ及び上記期待値データを生成することを特徴とする請求項１記載のソフトウェア試験装置。
【請求項３】
関数情報収集部により取得された関数情報を保存し、必要に応じて保存した関数情報を検索して抽出するデータ管理部を備え、
データ変換部は、関数情報収集部により取得された関数情報と上記データ管理部により抽出された関数情報を、マッピングデータに基づき試験対象モジュールの関数情報に変換することを特徴とする請求項２記載のソフトウェア試験装置。
【請求項４】
試験対象モジュールの試験の手順や引数値を含む試験仕様を定義した試験入力データ及び上記試験対象モジュールの実行結果の期待値を表す期待値データを使用して上記試験対象モジュールを評価するソフトウェア試験方法において、
メモリ解析部が、上記試験対象モジュールと同等の機能を備えた同機能保持モジュールの処理実行時に、実行ソフトウェアの関数情報が格納されたメモリを解析して、上記同機能保持モジュールの関数情報に関するアドレス情報を取得するステップと、
関数情報収集部が、上記メモリ解析部により取得されたアドレス情報に基づき、上記同機能保持モジュールの関数情報を取得するステップと、
データ生成部が、上記関数情報収集部により取得された関数情報から、出力対象を定義した出力対象定義データに基づき、上記試験入力データ及び上記期待値データを生成するステップとを備えたことを特徴とするソフトウェア試験方法。
【請求項５】
試験対象モジュールの試験の手順や引数値を含む試験仕様を定義した試験入力データ及び上記試験対象モジュールの実行結果の期待値を表す期待値データを使用して上記試験対象モジュールを評価する機能を備え、
コンピュータを
上記試験対象モジュールと同等の機能を備えた同機能保持モジュールの処理実行時に、実行ソフトウェアの関数情報が格納されたメモリを解析して、上記同機能保持モジュールの関数情報に関するアドレス情報を取得するメモリ解析部と、
該メモリ解析部により取得されたアドレス情報に基づき上記同機能保持モジュールの関数情報を取得する関数情報収集部と、
該関数情報収集部により取得された関数情報から、出力対象を定義した出力対象定義データに基づき、上記試験入力データ及び上記期待値データを生成するデータ生成部と
して機能させるためのソフトウェア試験用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はソフトウェアの試験を行うソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラムに関するものである。
【背景技術】
【０００２】
プログラムモジュールのブラックボックステストの試験工程は、試験に使用する試験データを作成する試験データ作成工程と、試験データを入力して試験対象モジュールの処理を実行し実行結果を出力する処理実行工程と、実行結果の評価を行う評価工程から構成されている。
【０００３】
このブラックボックステストでは、試験対象モジュールの試験手順や引数値を含む試験仕様を定義した試験入力データを入力し、試験対象モジュールの処理を実行することにより試験を行い、試験後の評価は、試験対象モジュールの処理後の関数の戻り値や引数値等の実行結果を、実行結果の期待値である期待値データと比較することにより行う。
【０００４】
このブラックボックステストを実施する際に、試験入力データや期待値データを作成することが必要になるが、それぞれの試験対象モジュールの仕様により必要となる試験入力データや期待値データが異なるために、試験入力データや期待値データの作成を自動化することは困難であり手作業で行う必要がある。そのため、試験入力データや期待値データの作成作業は、試験規模が大きくなればなるほどユーザの負担が増加し人為的なミスの発生も多くなる。
【０００５】
特許文献１に示す「アプリケーションソフトの機能検証方法」では、アプリケーションソフトの新バージョンにおける機能情報を記憶するステップと、アプリケーションソフトの新旧バージョンにおける機能情報を比較するステップとを有し、機能情報の差異を比較検証することにより、バージョンの相違により差異の機能を見つけ出すことを特徴としている。
【０００６】
しかし、この特許文献１では、新バージョンの試験を行う際に、旧バージョンの試験のときの試験入力データや試験結果が必要となるが、旧バージョン自体が手元にあっても、試験入力データや試験結果がない場合や、旧バージョンの試験が新バージョンと異なる試験装置で試験されているために所望のフォーマットの試験結果がない場合があり、そのまま試験を自動化することは困難なケースが多々ある。
【０００７】
【特許文献１】特開平７−２６１９８７号公報（段落００１０）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来のソフトウェア試験装置は以上のように構成されているので、新バージョンのソフトウェアの試験の際に使用する試験入力データ及び期待値データを自動生成することができず、ユーザの負担が増加し人為的ミスの発生が多くなるという課題があった。
【０００９】
この発明は上記のような課題を解決するためになされたもので、新バージョンのソフトウェアの試験の際に使用する試験入力データ及び期待値データを自動生成することにより、ユーザの負担を軽減し人為的ミスの発生を抑制することができるソフトウェア試験装置、ソフトウェア試験方法及びソフトウェア試験用プログラムを得ることを目的とする。
【課題を解決するための手段】
【００１０】
この発明に係るソフトウェア試験装置は、試験対象モジュールの試験の手順や引数値を含む試験仕様を定義した試験入力データ及び上記試験対象モジュールの実行結果の期待値を表す期待値データを使用して上記試験対象モジュールを評価するものにおいて、上記試験対象モジュールと同等の機能を備えた同機能保持モジュールの処理実行時に、実行ソフトウェアの関数情報が格納されたメモリを解析して、上記同機能保持モジュールの関数情報に関するアドレス情報を取得するメモリ解析部と、該メモリ解析部により取得されたアドレス情報に基づき上記同機能保持モジュールの関数情報を取得する関数情報収集部と、該関数情報収集部により取得された関数情報から、出力対象を定義した出力対象定義データに基づき、上記試験入力データ及び上記期待値データを生成するデータ生成部とを備えたものである。
【発明の効果】
【００１１】
この発明により、ユーザの負担を軽減し人為的ミスの発生を抑制することができるという効果が得られる。
【発明を実施するための最良の形態】
【００１２】
実施の形態１．
図１はこの発明の実施の形態１によるソフトウェア試験装置の構成を示すブロック図である。このソフトウェア試験装置は、メモリ解析部１１及び関数情報収集部１２により構成されたデータ抽出部１０、データ生成部１３、処理実行部２１並びに評価部２２を備えており、試験の対象となるモジュールである試験対象モジュール６１を評価する際に使用する試験の手順や引数値を含む試験仕様を定義した試験入力データ１１１及び試験対象モジュール６１の処理結果である実行結果１１３の期待値を表す期待値データ１１２を、試験対象モジュール６１と同等の機能を備えたモジュールである同機能保持モジュール５１を含むソフトウェア５０を使用して自動生成するものである。
例えば、ソフトウェアのバージョンアップを行う際の古いバージョンが同機能保持モジュール５１に相当し、新しいバージョンが試験対象モジュール６１に相当する。
【００１３】
図１において、メモリ解析部１１は、同機能保持モジュール５１の処理実行時に、実行ソフトウェアの関数情報が格納されたメモリ５２を解析して、同機能保持モジュール５１の関数情報に関するアドレス情報を取得する。関数情報収集部１２はメモリ解析部１１により取得されたアドレス情報に基づき同機能保持モジュール５１の関数情報を取得する。データ生成部１３は関数情報収集部１２により取得された関数情報から、出力対象を定義した出力対象定義データ１０２に基づき、試験対象モジュール６１を評価する際に使用する試験の手順や引数値を含む試験仕様を定義した試験入力データ１１１及び試験対象モジュール６１の処理結果である実行結果１１３の期待値を表す期待値データ１１２を生成する。
このように、試験入力データ１１１及び期待値データ１１２は試験対象モジュール６１の関数情報に対応する同機能保持モジュール５１の関数情報に基づいて生成される。
【００１４】
処理実行部２１は、データ生成部１３により生成された試験の手順や引数値を含む試験仕様を定義した試験入力データ１１１に基づき、試験対象モジュール６１の処理を実行して実行結果１１３を出力する。評価部２２は、処理実行部２１により出力された実行結果１１３とデータ生成部１３により生成された期待値データ１１２を比較することにより、実行結果１１３の評価を行い評価結果１１４を出力する。
【００１５】
関数情報は、対象となる関数が属するクラス名、対象となる関数の関数名、対象となる関数が使用する全ての引数の型と引数値、戻り値の型及び戻り値を含んでいる。なお、ここで、関数とは引数と呼ばれるデータを受け取り定められたとおりの処理を実行して結果を返す一連の命令群を指す。
【００１６】
図２は関数情報の例を示す図である。図２において、対象となる関数Ｍｅｔｈｏｄ１の関数情報は、Ｍｅｔｈｏｄ１が属するクラス名２０１、関数名２０２、Ｍｅｔｈｏｄ１の全引数の引数の型（１−１から１−ｍ（ｍは整数値））２０３，２０５，２０７、引数値（１−１から１−ｍ（ｍは整数値））２０４，２０６，２０８、戻り値の型２０９、戻り値２１０を含んでいる。
【００１７】
また、ソフトウェア試験装置において関数情報を保持する場合は、関数宣言での引数の並び順を一意に特定できる保持形式である必要がある。例えば、関数宣言での引数の並びとソフトウェア試験装置が保持する関数情報における引数の型や引数値といった引数情報の並びを等しくしておくことにより、関数宣言での引数の並び順を一意に特定できる。
【００１８】
関数情報の取得はメモリ解析部１１及び関数情報収集部１２により構成されるデータ抽出部１０により行われる。
関数情報の取得処理の流れは以下のとおりである。
最初に、関数情報を出力したい同機能保持モジュール５１内の関数から、データ抽出部１０内のメモリ解析部１１を呼び出す（詳細は後述）。次に、呼び出されたメモリ解析部１１は、実行ソフトウェアの関数情報が格納されたメモリ５２を解析して、関数情報の取得に必要な関数アドレス、関数の戻りアドレス、関数の使用しているスタック範囲を示すアドレス（以下、これらを総称してアドレス情報とする）を抽出して、関数情報収集部１２を呼び出す。最後に、関数情報収集部１２は、抽出されたアドレス情報に基づき、コンパイラが提供するシンボル検索機能を使用して、呼び出し元の同機能保持モジュール５１内の関数の関数情報を取得する。このシンボル検索機能は、シンボル情報へアクセスする機能であり、一般的に使用されている。
【００１９】
同機能保持モジュール５１からデータ抽出部１０内のメモリ解析部１１を呼び出すための実装方法は、コンパイラで提供されている特定の関数を挿入する機能（以下、プロファイル機能とする）を利用する。
このプロファイル機能とは、実行コード内に存在する関数（正確にはオプションを指定してコンパイルされたソースコード内にある関数）の処理の前後にそれぞれ特定の関数（以下、プロファイル関数とする）を挿入する機能である。例えば、Microsoft社のMicrosoft Visual C++のプロファイル機能を利用することができる。
このプロファイル関数にメモリ解析部１１を呼び出すコードを実装することで、同機能保持モジュール５１からメモリ解析部１１を呼び出せるようにすることができる。
【００２０】
メモリ解析部１１はソフトウェアの以下の原理を利用してアドレス情報を取得する。ソフトウェアでは、関数呼び出しの際に、呼び出し元に戻るために呼び出し元のアドレス情報が必要となる。この呼び出し元のアドレス情報は関数の呼び出しの際にメモリ５２上に格納される。アドレス情報はメモリ５２上に格納されているので、メモリ５２上を解析することにより容易に取得できる。
メモリ解析部１１は、このようにしてアドレス情報を取得し、関数情報収集部１２を呼び出す。
【００２１】
関数情報収集部１２は、コンパイラが提供するシンボル検索機能を使用して、メモリ解析部１１により取得された呼び出し元のアドレス情報に基づき同機能保持モジュール５１の関数情報を取得する。
このシンボル検索機能には、アドレス情報からの関数名の検索、関数引数情報の検索、関数自動変数の情報の取得、基本型情報及び構造体等のユーザ定義型情報の取得等の機能が含まれている。関数情報収集部１２は、これらの機能を使用することで、容易にアドレス情報から同機能保持モジュール５１の関数情報を取得することができる。シンボル検索機能としては、例えば開発環境がMicrosoft社のMicrosoft Visual C++の場合、デバッグ支援ツールのＡＰＩ（application program interface）を利用する方法がある。その他の開発環境においても、一般的に同様の手段は提供されているので、必要な関数情報を検索して取得することができる。
【００２２】
同機能保持モジュール５１の関数情報は、前述のプロファイル機能を利用して、試験対象の関数処理の先頭及び末尾にプロファイル関数の呼び出しコードを同機能保持モジュール５１に埋め込み、プロファイル関数内でメモリ解析部１１を呼び出して取得している。このような方法によると、同機能保持モジュール５１の実行時に自動的にメモリ解析部１１が呼び出されるので、入力データ１０１によるインタフェースの入力操作を利用して、同機能保持モジュール５１を含むソフトウェア５０の処理を実行するだけで、同機能保持モジュール５１の関数情報を取得することができ、後述のデータ生成部１３により、取得された関数情報から試験入力データ１１１及び期待値データ１１２を生成することができる。
【００２３】
入力する入力データ１０１は、同機能保持モジュール５１を含むソフトウェア５０の仕様に合わせたものであり、例えば、同機能保持モジュール５１を含むソフトウェア５０のＧＵＩ（Graphical User Interface）操作による入力であっても良い。このように、同機能保持モジュール５１を含むソフトウェア５０のインタフェースを使用して試験入力データ１１１及び期待値データ１１２を自動生成できるため、試験装置用の入力データのフォーマット又は操作を習得するといったユーザの負担を軽減できる。
【００２４】
出力対象定義データ１０２は、データ生成部１３において試験入力データ１１１及び期待値データ１１２を出力する際に、試験入力データ１１１及び期待値データ１１２の生成に必要な関数を一意に特定するためのデータである。例えば、既存のコーディング言語の表記方法又は構文規則を用いたり、予約語により前後の文字列又は数値の意味づけをしたり、文字列又は数値の並び順により関数内の引数の構成を示したり、記号により前後の文字列又は数値の意味づけをしたりしても良い。
図３は出力対象定義データ１０２の例を示す図である。出力対象定義データ１０２は、図３に示すように、関数名、関数の型、引数の型情報を、C++のような関数宣言２１１，２１２により表しても良い。
【００２５】
データ生成部１３は、データ抽出部１０（関数情報収集部１２）により、データ抽出部１０の呼び出し元の関数処理の先頭で取得した関数情報を、出力対象定義データ１０２に基づき、後述の試験入力データ１１１の特定のフォーマットに従ってファイルに出力することにより、試験対象モジュール６１の試験入力データ１１１を生成する。また、データ生成部１３は、データ抽出部１０の呼び出し元の関数処理の末尾で取得した関数情報を、出力対象定義データ１０２に基づき、後述の期待値データ１１２の特定のフォーマットに従ってファイルに出力することにより、試験対象モジュール６１の期待値データ１１２を生成する。
【００２６】
試験入力データ１１１は、試験対象モジュール名、試験対象のクラスの名前を示す試験対象クラス名、試験対象メソッドの引数の宣言を示す引数宣言、試験対象メソッドの試験実行時の入力を示す引数入力値、試験対象のメソッドの呼び出しコードである試験対象メソッド呼び出しコードの情報を構成要素として含み、それぞれの文字列又は数値が何を意味するかを明確にするフォーマットである必要がある。
【００２７】
つまり、試験入力データ１１１は、一つの文字列又は数値が、クラス宣言、関数宣言、引数宣言、引数値、呼び出しコードのうちどれを表しているかを明確にし、関数に関連のある文字列又は数値であれば、どのクラスに属する情報であるか、引数に関連のある文字列又は数値であれば、どのクラスに属し、どの関数に属する情報であるかを明確にし、関数の引数の構成を明確にするフォーマットである必要がある。また、一つの試験入力データ１１１には、一つの関数の関数情報を定義するだけでなく、複数の関数の関数情報を定義しても良い。
【００２８】
図４は試験入力データ１１１の例を示す図である。図４に示す試験入力データ１１１は、C++のクラス宣言の構文規則を用いており、モジュールを表す予約語＠ＤｒｉｖｅｒＩｎｉｔの後に続くモジュール名２２１、クラス宣言２２２、引数宣言２２３，２２４、引数の初期化２２５，２２６、試験対象メソッドの呼び出しコード２２７を含んでいる。なお、図４では、「｛｝」記号により一つの関数に必要な情報の範囲を示している。
【００２９】
期待値データ１１２は、試験対象モジュール６１の関数の宣言を示す関数宣言、試験対象メソッドの関数処理後の戻り値（期待値）、試験対象メソッドの関数処理後の引数の期待値を示す関数処理後の引数値（期待値）を構成要素として含み、試験入力データ１１１と同様に、それぞれの文字列又は数値が何を意味するかを明確にするフォーマットである必要がある。また、一つの期待値データ１１２には、一つの関数の実行結果１１３の期待値を定義するだけでなく、複数の関数の実効結果１１３の期待値を定義しても良い。
【００３０】
図５は期待値データ１１２の例を示す図である。図５に示す期待値データ１１２は、C++の関数宣言の構文規則を用いており、関数宣言を表す予約語［ＭＥＴＨＯＤ］の後に続く関数宣言２３１、戻り値を表す予約語ＲＥＴＵＲＮの後に続く戻り値（期待値）２３２、出力引数を表す予約語［ＯＵＴ］の後に続くイコール記号の左の引数２３３、イコール記号の右の引数値２３４を含んでいる。
【００３１】
処理実行部２１はデータ生成部１３により生成された試験対象モジュール６１の試験入力データ１１１を入力して試験を行う。このとき、処理実行部２１は、ｆｏｒ文、ｉｆ文等の制御コマンドを含むC++の構文規則により構成された試験入力データ１１１をインタプリタのように上から解析して、試験対象モジュール名により、処理実行する試験対象モジュール６１の識別を行い、試験対象クラス名及び試験対象メソッド呼び出しコードにより、試験対象となるメソッドを識別して、試験入力データ１１１の引数宣言及び引数入力値から試験対象メソッドの入力値を設定し、試験対象の試験対象メソッド呼び出しコードより試験対象メソッドの呼び出しを行う。また、処理実行部２１は、試験対象メソッドの処理完了後に、処理結果として試験対象メソッドが返す戻り値や引数値をもとに試験対象メソッドの処理結果を示す実行結果１１３を作成する。
【００３２】
実行結果１１３は、試験対象メソッドの関数の宣言を表す関数宣言、試験対象メソッドの戻り値を表す戻り値、試験対象メソッドの関数処理後の引数値を表す関数処理後の引数値を構成要素として含み、試験入力データ１１１と同様に、それぞれの文字列又は数値が何を意味するかを明確にするフォーマットである必要がある。また、一つの実行結果１１３には、一つの関数の実行結果１１３を定義するだけでなく、複数の関数の実行結果１１３を定義しても良い。
【００３３】
図６は実行結果１１３の例を示す図である。図６に示す実行結果１１３は、C++の関数宣言の構文規則を用いており、関数宣言を表す予約語［ＭＥＴＨＯＤ］の後に続く関数宣言２４１、戻り値を表す予約語ＲＥＴＵＲＮの後に続く戻り値２４２、出力引数を表す予約語［ＯＵＴ］の後に続くイコール記号の左の引数２４３、イコール記号の右の引数値２４４を含んでいる。
【００３４】
評価部２２は、処理実行部２１が生成した実行結果１１３と期待値データ１１２の比較により、実行結果１１３の評価を行う。このとき、評価部２２は、実行結果１１３及び期待値データ１１２内にそれぞれ構成要素として含まれるクラス名、関数名及び引数を識別する情報により対応する引数値を特定して、引数値の部分の数値又は文字列の比較を行い、比較結果により、等しければ合格とし、等しくなければ不合格として、評価結果１１４を出力する。
【００３５】
評価部２２が出力する評価結果１１４は、クラス名、関数名、関数の型、引数の型、引数の評価の結果戻り値の評価の結果を構成要素として含み、試験入力データ１１１と同様に、それぞれの文字列又は数値が何を意味するかを明確にし、記号、数値又は文字列により評価の結果（合格か不合格か）を明確にするフォーマットである必要がある。また、一つの評価結果１１４には、一つの関数の実行結果１１３の評価を定義するだけでなく、複数の関数の実行結果１１３の評価を定義しても良い。
【００３６】
図７は評価結果１１４の例を示す図である。図７に示す評価結果１１４は、C++の関数宣言の構文規則を用いており、関数宣言を表す予約語［ＭＥＴＨＯＤ］の後に続く関数宣言２５１、戻り値を表す予約語ＲＥＴＵＲＮの後に続く関数処理後の戻り値の評価結果２５２、出力引数を表す予約語［ＯＵＴ］の後に続くイコール記号の左の引数２５３、イコール記号の右の関数処理後の引数値の評価結果２５４を含んでいる。
【００３７】
また、前述の評価結果１１４の例では、引数単位で評価の結果を出力しているが、一つの関数に関連する全ての引数値及び戻り値の評価の結果が合格の場合は合格として、一つの関数に関連する引数値および戻り値の内、一つでも不合格がある場合は不合格として出力するように関数単位毎に評価の結果を表しても良いし、試験単位毎に評価の結果を表しても良い。
【００３８】
また、評価結果１１４を関数毎又は試験毎に評価し、実行結果１１３と期待値データ１１２との比較の結果、一致しないときはその情報をファイルに出力し、一致する場合は出力しないことにより、評価結果１１４を表す形式でも良い。この方法では、評価の結果、合格だった場合はファイルサイズが０であり、不合格だった場合はファイルサイズが０より大きくなることから、評価結果１１４を簡単にチェックできる。
【００３９】
図８はソフトウェア試験装置の処理手順を示すフローチャートである。
ステップＳＴ１１において、同機能保持モジュール５１内の関数情報を出力する関数を指定するための出力対象定義データ１０２が設定され、また、コンパイラのプロファイル機能を利用してプロファイル関数の埋め込みが行われる。
ステップＳＴ１２において、同機能保持モジュール５１を含むソフトウェア５０の処理を実行するための入力データ１０１がインタフェースを介して同機能保持モジュール５１に入力される。
【００４０】
ステップＳＴ１３において、同機能保持モジュール５１の処理が呼び出され、同機能保持モジュール５１の処理が実行される。
ステップＳＴ１４において、同機能保持モジュール５１内の関数が実行されると、最初に、関数処理の先頭に埋め込まれた先頭用のプロファイル関数が実行される。先頭用のプロファイル関数内でメモリ解析部１１を呼び出す。
ステップＳＴ１５において、メモリ解析部１１は、メモリ５２を解析して関数情報の出力対象の関数のアドレス情報を抽出し、抽出したアドレス情報を入力して関数情報収集部１２を呼び出す。
【００４１】
ステップＳＴ１６において、関数情報収集部１２は、ステップＳＴ１５で抽出されたアドレス情報を入力し、コンパイラが提供するシンボル検索機能により同機能保持モジュール５１の関数情報を抽出し、抽出した関数情報を入力してデータ生成部１３を呼び出す。
ステップＳＴ１７において、データ生成部１３は、関数情報の関数名に基づき出力対象定義データ１０２内で出力指定された関数かどうかを判断し、出力指定されたデータならば試験入力データ１１１を作成し、指定外のデータならば破棄する。
ステップＳＴ１８において、同機能保持モジュール５１の関数処理の末尾において、埋め込まれた末尾用のプロファイル関数が実行される。末尾用のプロファイル関数でメモリ解析部１１を呼び出す。
【００４２】
ステップＳＴ１９において、メモリ解析部１１は、メモリ５２を解析して関数情報の出力対象のアドレス情報を抽出し、抽出したアドレス情報を入力して関数情報収集部１２を呼び出す。
ステップＳＴ２０において、関数情報収集部１２はステップＳＴ１９で抽出されたアドレス情報を入力してシンボル検索機能により同機能保持モジュール５１の関数情報を抽出し、抽出した関数情報を入力してデータ生成部１３を呼び出す。
ステップＳＴ２１において、データ生成部１３は、関数情報の関数名に基づき出力対象定義データ１０２内で出力指定された関数かどうかを判断し、出力指定されたデータならば、関数情報から期待値データ１１２を生成し、指定外のデータならば破棄する。
【００４３】
ステップＳＴ２２において、同機能保持モジュール５１の処理が終了していれば、ステップＳＴ２３へ移行し、同機能保持モジュール５１の処理が終了していなければ、ステップＳＴ１４へ移行する。
ステップＳＴ２３において、必要な試験入力データ１１１及び期待値データ１１２が揃っていれば、ステップＳＴ２４へ移行し、揃っていなければ、ステップＳＴ１２へ移行する。
ステップＳＴ２４において、処理実行部２１はステップＳＴ１７で生成された試験入力データ１１１を入力して試験対象モジュール６１を呼び出す。処理実行部２１内では、試験入力データ１１１で指定された引数値を入力し、試験入力データ１１１で指定された試験対象モジュール６１の関数を呼び出す。
【００４４】
ステップＳＴ２５において、処理実行部２１は試験対象モジュール６１を実行し、試験対象モジュール６１は、その処理の結果（戻り値、引数値）を呼び出し元へ返す。
ステップＳＴ２６において、処理実行部２１は、試験対象モジュール６１の関数の処理結果（戻り値、引数値）及び試験入力データ１１１から、試験の実行結果１１３を生成する。
ステップＳＴ２７において、評価部２２は、ステップＳＴ２６で生成された実行結果１１３と、ステップＳＴ２１で生成された期待値データ１１２を比較して、評価結果１１４を生成する。
ステップＳＴ２８において、デバッグ等により試験を繰り返す場合は、ステップＳＴ２４へ移行し、試験が完了した場合は処理を終了する。
【００４５】
以上のように、この実施の形態１によれば、試験入力データ１１１及び期待値データ１１２を同機能保持モジュール５１の実行によって自動生成することにより、ユーザの負担や人為的ミスの発生を軽減することができるという効果が得られる。
【００４６】
また、この実施の形態１によれば、試験入力データ１１１及び期待値データ１１２を生成する際に、同機能保持モジュール５１を実行するような上位関数を用意する必要がなく、同機能保持モジュール５１を含むソフトウェア５０のインタフェースを使用して試験入力データ１１１と期待値データ１１２を自動生成することにより、試験装置用のフォーマットや操作を習得するといったユーザの負担を軽減することができるという効果が得られる。
【００４７】
実施の形態２．
図９はこの発明の実施の形態２によるソフトウェア試験装置の構成を示すブロック図である。このソフトウェア試験装置は、メモリ解析部１１及び関数情報収集部１２により構成されたデータ抽出部１０、データ変換部１４、データ生成部１３、処理実行部２１並びに評価部２２を備えており、上記実施の形態１の図１に示す構成に、関数情報収集部１２により取得された関数情報をマッピングデータ１０３によりデータ変換するデータ変換部１４を追加したものである。
【００４８】
この図９に示す構成により、同機能保持モジュール５１と試験対象モジュール６１のインタフェースが異なっていても、上記実施の形態１と同様に、試験対象モジュール６１を評価する際に使用する試験入力データ１１１及び期待値データ１１２を、同機能保持モジュール５１を含むソフトウェア５０を使用して自動生成することができる。
【００４９】
図９において、データ変換部１４は関数情報収集部１２により取得された同機能保持モジュール５１の関数情報を、同機能保持モジュール５１と試験対象モジュール６１の関数間の対応付けを記述したマッピングデータ１０３に基づき、試験対象モジュール６１の関数情報に変換する。データ生成部１３はデータ変換部１４により変換された関数情報から、出力対象定義データ１０２に基づき、試験入力データ１１１及び期待値データ１１２を生成する。その他の構成は上記実施の形態１の図１に示す構成と同じである。
【００５０】
マッピングデータ１０３は、同機能保持モジュール５１と試験対象モジュール６１の関数情報間の対応付けを記述しており、同機能保持モジュール５１の関数名とそれに対応する試験対象モジュール６１の関数名、同機能保持モジュール５１の関数の引数の識別子とそれに対応する試験対象モジュール６１の関数の引数の識別子、試験対象モジュール６１に新規に追加される引数の型と追加場所を示す情報、同機能保持モジュール５１の関数内の削除する引数の識別子を構成要素として含み、試験入力データ１１１のように、それぞれの文字列又は数値が何を意味するかを明確にするフォーマットである必要がある。
【００５１】
図１０はマッピングデータ１０３の例を示す図である。図１０に示すマッピングデータ１０３は、クラスを表す予約語［ＣＬＡＳＳ］の後に続く同機能保持モジュール５１のクラス名２６１、予約語［ＣＬＡＳＳ］と等しい行にある試験対象モジュール６１のクラス名２６２、関数を表す予約語［ＭＥＴＨＯＤ］の後に続く同機能保持モジュール５１の関数名２６３、予約語［ＭＥＴＨＯＤ］と等しい行にある試験対象モジュール６１の関数名２６４、引数の識別子として、関数の先頭の引数から何番目かという位置情報を示す数値を用い、引数を表す予約語［ＡＲＧＵＭＥＮＴ］の後に続く同機能保持モジュール５１の引数の位置情報２６５，２６７、予約語［ＡＲＧＵＭＥＮＴ］と等しい行にある試験対象モジュール６１の引数の位置情報２６６，２６８、試験対象モジュール６１の関数情報へ引数の情報を新規追加することを表す予約語［ＡＤＤ］の後に記号「，」の左側の新規に追加する試験対象モジュール６１の引数の位置情報２６９、記号「，」の右側の新規に追加する試験対象モジュール６１の引数の型２７０、同機能保持モジュール５１の関数情報から引数の情報を削除することを表す予約語［ＤＥＬＥＴＥ］の後の同機能保持モジュール５１から削除する引数の位置情報２７１を含んでいる。
【００５２】
このように、図１０に示すマッピングデータのフォーマットは、関数情報のクラス名や関数名の変更方法、ソフトウェア試験装置における関数情報（引数の型、引数値）の保持する順番の変更方法、関数情報への引数の型の追加方法、関数情報からの引数の型や引数値の削除方法を表している。
【００５３】
データ変換部１４は、関数情報収集部１２により取得された同機能保持モジュール５１の関数情報を、同機能保持モジュール５１と試験対象モジュール６１の関数情報間の対応付けを記述したマッピングデータ１０３に基づき、試験対象モジュール６１の関数情報に変換する。すなわち、データ変換部１４は、マッピングデータ１０３に基づき、関数情報収集部１２により取得された同機能保持モジュール５１の関数情報のクラス名や関数名を変更したり、ソフトウェア試験装置における関数情報（引数の型、引数値）が保持する順番を変更したり、関数情報に新たに引数の型を追加したり、関数情報から引数の型や引数値を削除したりする。
【００５４】
引数を新規に追加する場合は、引数値を特定することができないので、例えば、その部分に修正が必要であることを想起させる文字列を出力しておき、手作業により、関数情報から生成されるテストデータに、引数値を追加することでテストデータを完成させる等の処理が必要である。
【００５５】
図１１はソフトウェア試験装置の処理手順を示すフローチャートである。
ステップＳＴ３１において、同機能保持モジュール５１内の関数情報を出力する関数を指定するための出力対象定義データ１０２が設定され、試験対象モジュール６１の試験対象関数と同機能保持モジュール５１の関数における関数情報に差異がある場合に、データの対応付けを示すマッピングデータ１０３が設定され、コンパイラのプロファイル機能を利用してプロファイル関数の埋め込みが行われる。（コンパイラ作業）
ステップＳＴ３２において、同機能保持モジュール５１を含むソフトウェア５０の処理を実行するための入力データ１０１がインタフェースを介して同機能保持モジュール５１に入力される。
【００５６】
ステップＳＴ３３において、同機能保持モジュール５１の処理が呼び出され、同機能保持モジュール５１の処理が実行される。
ステップＳＴ３４において、同機能保持モジュール５１内の関数が実行されると、最初に、関数処理の先頭に埋め込まれた先頭用のプロファイル関数が実行され、先頭用のプロファイル関数内でメモリ解析部１１が呼び出される。
ステップＳＴ３５において、メモリ解析部１１は、メモリ５２を解析して関数情報の出力対象の関数のアドレス情報を抽出し、抽出したアドレス情報を入力して関数情報収集部１２を呼び出す。
【００５７】
ステップＳＴ３６において、関数情報収集部１２はステップＳＴ３５で抽出されたアドレス情報を入力して、コンパイラが提供するシンボル検索機能により、同機能保持モジュール５１内の関数の関数情報を抽出し、抽出した関数情報を入力してデータ変換部１４を呼び出す。
ステップＳＴ３７において、データ変換部１４は、マッピングデータ１０３に基づき、ステップＳＴ３６で取得された同機能保持モジュール５１の関数情報を対応する試験対象モジュール６１の関数の関数情報に変換し、変換後の関数情報を入力してデータ生成部１３を呼び出す。
ステップＳＴ３８において、データ生成部１３は、関数情報の関数名に基づき出力対象定義データ１０２内で出力指定された関数かどうかを判断し、出力指定されたデータならば試験入力データ１１１を作成し、指定外のデータならば破棄する。
【００５８】
ステップＳＴ３９において、同機能保持モジュール５１の関数処理の末尾において、埋め込まれた末尾用のプロファイル関数が実行される。末尾用のプロファイル関数でメモリ解析部１１を呼び出す。
ステップＳＴ４０において、メモリ解析部１１は、メモリ５２を解析して、関数情報の出力対象のアドレス情報を抽出し、抽出した関数のアドレス、関数の戻りアドレス、関数の使用しているスタック範囲を示すアドレスを入力して関数情報収集部１２を呼び出す。
ステップＳＴ４１において、ステップＳＴ４０で抽出されたアドレス情報を入力してシンボル検索機能により関数情報を抽出し、抽出した関数情報を入力しデータ変換部１４を呼び出す。
【００５９】
ステップＳＴ４２において、データ変換部１４は、マッピングデータ１０３に基づき、ステップＳＴ４１で抽出された同機能保持モジュール５１の関数情報を対応する試験対象モジュール６１の関数の関数情報に変換し、変換後の関数情報を入力してデータ生成部１３を呼び出す。
ステップＳＴ４３において、データ生成部１３は、関数情報の関数名に基づき出力対象定義データ１０２内で出力指定された関数かどうかを判断し、出力指定されたデータならば、関数情報から期待値データ１１２を生成し、指定外のデータならば破棄する。
ステップＳＴ４４において、同機能保持モジュール５１の処理が終了していれば、ステップＳＴ４５へ移行し、同機能保持モジュール５１の処理が終了していなければ、ステップＳＴ３４へ移行する。
【００６０】
ステップＳＴ４５において、必要な試験入力データ１１１及び期待値データ１１２が揃っていればステップＳＴ４６へ移行し、揃っていなければステップＳＴ３２へ移行する。
ステップＳＴ４６において、処理実行部２１はステップＳＴ３８で生成された試験入力データ１１１を入力して試験対象モジュール６１を呼び出す。このとき、処理実行部２１は、試験入力データ１１１で指定された引数値を入力し、試験入力データ１１１で指定された試験対象モジュール６１の関数を呼び出す。
ステップＳＴ４７において、処理実行部２１は試験対象モジュール６１を実行し、試験対象モジュール６１は、その処理結果（戻り値、引数値）を呼び出し元へ返す。
【００６１】
ステップＳＴ４８において、処理実行部２１は試験対象モジュール６１の関数の処理結果（戻り値、引数値）及び試験入力データ１１１から試験の実行結果１１３を生成する。
ステップＳＴ４９において、評価部２２はステップＳＴ４８で生成された実行結果１１３とステップＳＴ４３で生成された期待値データ１１２を比較して評価結果１１４を生成する。
ステップＳＴ５０において、デバッグ等により試験を繰り返す場合は、ステップＳＴ４６へ移行し、試験が完了した場合は処理を終了する。
【００６２】
以上のように、この実施の形態２によれば、データ変換部１４が関数情報収集部１２により取得された同機能保持モジュール５１の関数情報を、マッピングデータ１０３に基づき試験対象モジュール６１の関数情報に変換することにより、同機能保持モジュール５１と試験対象モジュール６１のインタフェースが異なっていても、同機能保持モジュール５１から試験対象モジュール６１の試験入力データ１１１及び期待値データ１１２を自動生成することができ、ユーザの負担や人為的ミスの発生を軽減することができるという効果が得られる。
【００６３】
実施の形態３．
図１２はこの発明の実施の形態３によるソフトウェア試験装置の構成を示すブロック図である。このソフトウェア試験装置は、メモリ解析部１１及び関数情報収集部１２により構成されたデータ抽出部１０、データ管理部１５を含むデータ変換部１４、データ生成部１３、処理実行部２１並びに評価部２２を備えており、上記実施の形態２の図９に示す構成に、データ抽出部１０より受け取った関数情報のうち必要な関数情報を関数情報１０４として保存したり、必要に応じて保存した関数情報１０４を検索するデータ管理部１５を追加したものである。
【００６４】
この図１２に示す構成により、試験対象モジュール６１の関数に必要な関数情報が同機能保持モジュール５１の一つの関数情報から抽出できない場合にも、上記実施の形態１と同様に、試験対象モジュール６１を評価する際に使用する試験入力データ１１１及び期待値データ１１２を、同機能保持モジュール５１を含むソフトウェア５０を使用して自動生成することができる。
【００６５】
上記実施の形態２では、関数情報収集部１２から受け取った関数情報のクラス名及び関数名を変更したり、引数の並びを変更したりと、試験対象モジュール６１の関数に必要な関数情報が、同機能保持モジュール５１の一つの関数情報から抽出できる場合にのみにしか対応できない。
試験対象モジュール６１の関数に必要な関数情報を抽出するのに、同機能保持モジュール５１の複数の関数情報を必要とする場合もあるが、この実施の形態３では、このような場合にも試験入力データ１１１及び期待値データ１１２を生成するものである。
【００６６】
図１２において、データ管理部１５は関数情報収集部１２により取得された関数情報を保存し、必要に応じて保存した関数情報を検索して抽出する。データ変換部１４は、関数情報収集部１２により取得された関数情報とデータ管理部１５により抽出された関数情報を、マッピングデータ１０３に基づき試験対象モジュール６１の関数情報に変換する。その他の構成は上記実施の形態２の図９に示す構成と同じである。
【００６７】
データ管理部１５は、同機能保持モジュール５１の一つ以上の関数情報から試験対象モジュール６１の関数情報を作成する際に、後述のマッピングデータ１０３に基づき、必要となる全ての関数情報が揃っているかどうかを判断し、必要となる全ての関数情報が揃っている場合は、関数情報収集部１２より受け取った関数情報を関数処理の先頭と末尾で取得した関数情報であるかを区別できる形式で、かつ、それぞれのデータが何を意味するかが特定できるフォーマットで保存し、必要となる全ての関数情報が揃っておらず、現在保持している関数情報以外に必要となる関数情報がある場合には、保存している関数情報１０４の中から必要となる関数情報を検索して抽出し、試験対象モジュール６１の関数情報の作成に必要な全ての関数情報をデータ変換部１４に渡す。
【００６８】
マッピングデータ１０３は、同機能保持モジュール５１の一つ以上の関数情報から、試験対象モジュール６１の関数情報を作成するのに必要となる試験対象モジュール６１のクラス名、関数名、試験対象モジュール６１の引数の型と引数値の作成に必要な同機能保持モジュール５１の引数を識別する情報、試験対象モジュール６１の戻り値の型と戻り値の作成に必要な同機能保持モジュール５１の関数を識別する情報の他に、必要に応じて、新規に追加される引数の型と位置情報を構成要素として含み、試験入力データ１１１と同様に、それぞれの文字列又は数値が何を意味するかを明確にするフォーマットである必要がある。
【００６９】
図１３はマッピングデータの例を示す図である。図１３に示すマッピングデータは、試験対象モジュール６１のクラスであることを表す予約語［ＮＥＷＣＬＡＳＳ］の後に続く試験対象モジュール６１のクラス名２８１、試験対象モジュール６１の関数であることを表す予約語［ＮＥＷＭＥＴＨＯＤ］の後に続く試験対象モジュール６１の関数名２８２、試験対象モジュール６１の引数であることを表す予約語［ＡＲＧＵＭＥＮＴ］の後の記号「，」の左側の試験対象モジュール６１の引数の位置情報２８３，２８５，２８７、記号「，」の右側の同機能保持モジュール５１のクラス名（記号「：：」の左側）と同機能保持モジュール５１の関数名（記号「：：」の右側のＭｅｔｈｏｄ１，Ｍｅｔｈｏｄ２）と同機能保持モジュール５１の引数の位置情報（関数名の右側）２８４，２８６，２８８、試験対象モジュール６１の関数情報へ引数の情報を新規追加することを表す予約語［ＡＤＤ］の後の記号「，」の左側の試験対象モジュール６１の引数の位置情報２８９、記号「，」の右側の試験対象モジュール６１の関数情報へ新規に追加する引数の型２９０、試験対象モジュール６１の戻り値であることを表す予約語［ＲＥＴＵＲＮ］の後の同機能保持モジュール５１のクラス名（記号「：：」の左側）と同機能保持モジュール５１の関数名（記号「：：」の右側）２９１を含んでいる。
【００７０】
このように、図１３に示すマッピングデータのフォーマットは、関数情報への新規の引数の型の追加方法、予約語［ＲＥＴＵＲＮ］の後に関数を識別する情報を記述することにより関数情報の戻り値に関する情報の作成方法を表している。
【００７１】
前述の例では、新規に関数情報を作成する際に、引数及び戻り値に一つの関数の関数情報の要素を指定しているが、複数の関数情報の要素を四則演算等により合成して作成しても良い。また、複雑な合成方法をプログラム等により指定して作成しても良い。
【００７２】
データ変換部１４は、上記実施の形態２における機能に加えて、マッピングデータ１０３に基づき、データ管理部１５より受け取った複数の関数情報を合成することにより、試験対象モジュール６１内の関数の新たな関数情報を作成する機能を持つ。
【００７３】
引数を新規に追加する場合は、引数値を特定することができないので、例えば、その部分に修正が必要であることを想起させる文字列を出力しておき、手作業により、関数情報から生成されるテストデータに、引数値を追加することでテストデータを完成させる等の処理が必要である。
【００７４】
以上のように、この実施の形態３によれば、上記実施の形態２と同様の効果が得られると共に、試験対象モジュール６１の関数に必要な関数情報が、同機能保持モジュール５１の一つの関数情報から抽出できない場合にも、データ管理部１５が関数情報収集部１２により取得された関数情報を保存し、必要に応じて保存した関数情報を検索して抽出し、データ変換部１４が、関数情報収集部１２により取得された関数情報とデータ管理部１５により抽出された関数情報を、マッピングデータ１０３に基づき試験対象モジュール６１の関数情報に変換することにより、試験対象モジュール６１の試験入力データ１１１及び期待値データ１１２を自動生成することができ、ユーザの負担や人為的ミスの発生を軽減することができるという効果が得られる。
【図面の簡単な説明】
【００７５】
【図１】この発明の実施の形態１によるソフトウェア試験装置の構成を示すブロック図である。
【図２】この発明の実施の形態１における関数情報の例を示す図である。
【図３】この発明の実施の形態１における出力対象定義データの例を示す図である。
【図４】この発明の実施の形態１における試験入力データの例を示す図である。
【図５】この発明の実施の形態１における期待値データの例を示す図である。
【図６】この発明の実施の形態１における実行結果の例を示す図である。
【図７】この発明の実施の形態１における評価結果の例を示す図である。
【図８】この発明の実施の形態１によるソフトウェア試験装置の処理手順を示すフローチャートである。
【図９】この発明の実施の形態２によるソフトウェア試験装置の構成を示すブロック図である。
【図１０】この発明の実施の形態２におけるマッピングデータの例を示す図である。
【図１１】この発明の実施の形態２によるソフトウェア試験装置の処理手順を示すフローチャートである。
【図１２】この発明の実施の形態３によるソフトウェア試験装置の構成を示すブロック図である。
【図１３】この発明の実施の形態３におけるマッピングデータの例を示す図である。
【符号の説明】
【００７６】
１０  データ抽出部、１１  メモリ解析部、１２  関数情報収集部、１３  データ生成部、１４  データ変換部、１５  データ管理部、２１  処理実行部、２２  評価部、５０  ソフトウェア、５１  同機能保持モジュール、５２  メモリ、６１  試験対象モジュール、１０１  入力データ、１０２  出力対象定義データ、１０３  マッピングデータ、１０４  関数情報、１１１  試験入力データ、１１２  期待値データ、１１３  実行結果、１１４  評価結果、２０１  クラス名、２０２  関数名、２０３  引数の型、２０４  引数値、２０５  引数の型、２０６  引数値、２０７  引数の型、２０８  引数値、２０９  戻り値の型、２１０  戻り値、２１１  関数宣言、２１２  関数宣言、２２１  試験対象モジュール名、２２２  クラス宣言、２２３  引数宣言、２２４  引数宣言、２２５  引数の初期化、２２６  引数の初期化、２２７  試験対象メソッドの呼び出しコード、２３１  関数宣言、２３２  戻り値、２３３  引数、２３４  引数値、２４１  関数宣言、２４２  戻り値、２４３  引数、２４４  引数値、２５１  関数宣言、２５２  評価結果、２５３  引数、２５４  評価結果、２６１  同機能保持モジュールのクラス名、２６２  試験対象モジュールのクラス名、２６３  同機能保持モジュールの関数名、２６４  試験対象モジュールの関数名、２６５  同機能保持モジュールの引数の位置情報、２６６  試験対象モジュールの引数の位置情報、２６７  同機能保持モジュールの引数の位置情報、２６８  試験対象モジュールの引数の位置情報、２６９  新規に追加する試験対象モジュールの引数の位置情報、２７０  新規に追加する試験対象モジュールの引数の型、２７１  同機能保持モジュールから削除する引数の位置情報、２８１  試験対象モジュールのクラス名、２８２  試験対象モジュールの関数名、２８３  試験対象モジュールの引数の位置情報、２８４  同機能保持モジュールのクラス名、同機能保持モジュールの関数名、同機能保持モジュールの引数の位置情報、２８５  試験対象モジュールの引数の位置情報、２８６  同機能保持モジュールのクラス名、同機能保持モジュールの関数名、同機能保持モジュールの引数の位置情報、２８７  試験対象モジュールの引数の位置情報、２８８  同機能保持モジュールのクラス名、同機能保持モジュールの関数名、同機能保持モジュールの引数の位置情報、２８９  試験対象モジュールの引数の位置情報、２９０  試験対象モジュールの関数情報へ新規に追加する引数の型、２９１  同機能保持モジュールのクラス名、同機能保持モジュールの関数名。
【図１】
2007241432.tif 000003
【図２】
2007241432.tif 000004
【図３】
2007241432.tif 000005
【図４】
2007241432.tif 000006
【図５】
2007241432.tif 000007
【図６】
2007241432.tif 000008
【図７】
2007241432.tif 000009
【図８】
2007241432.tif 000010
【図９】
2007241432.tif 000011
【図１０】
2007241432.tif 000012
【図１１】
2007241432.tif 000013
【図１２】
2007241432.tif 000014
【図１３】
2007241432.tif 000015