(57)【特許請求の範囲】
【請求項１】
テストの対象プログラムに含まれるグローバル変数を定義する所定のコードを判別し、
前記判別された所定のコードの前後に定義済のグローバル変数を出力する出力コードを前記対象プログラムに挿入し、
前記出力コードを挿入後の対象プログラムを実行して得られる前記所定のコードの前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するテストドライバを生成する
処理をコンピュータに実行させることを特徴とする生成プログラム。
【請求項２】
前記テストドライバを生成する処理は、前記差分に基づいて、前記所定のコードの後において新たに定義されているグローバル変数をシンボル化するテストドライバを生成する
ことを特徴とする請求項１に記載の生成プログラム。
【請求項３】
前記判別する処理は、前記グローバル変数を定義する複数のコードの中で、予め指定されたコードを判別する
ことを特徴とする請求項１または２に記載の生成プログラム。
【請求項４】
テストの対象プログラムに含まれるグローバル変数を定義する所定のコードを判別し、
前記判別された所定のコードの前後に定義済のグローバル変数を出力する出力コードを前記対象プログラムに挿入し、
前記出力コードを挿入後の対象プログラムを実行して得られる前記所定のコードの前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するテストドライバを生成する
処理をコンピュータが実行することを特徴とする生成方法。
【請求項５】
テストの対象プログラムに含まれるグローバル変数を定義する所定のコードを判定する判定部と、
前記判定された所定のコードの前後に定義済のグローバル変数を出力する出力コードを前記対象プログラムに挿入する挿入部と、
前記出力コードを挿入後の対象プログラムを実行して得られる前記所定のコードの前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するテストドライバを生成する生成部と
を有することを特徴とする生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、生成プログラム、生成方法および生成装置に関する。
【背景技術】
【０００２】
従来、ソフトウェア開発において、開発対象のプログラムに対してテストケースを生成する技術としてシンボリック実行が知られている。シンボリック実行は、テスト対象のプログラム（以下、対象プログラム）中の変数値を具体化せずに記号（シンボル値）のまま実行することによりプログラムを分析する技術である。
【０００３】
対象プログラムをシンボリック実行してテストケースを生成する際には、対象プログラムにおいてシンボル化する変数の宣言（シンボル宣言）などを行うテストドライバを生成する。そして、生成されたテストドライバを用いてシンボリック実行することで、対象プログラムに含まれる制御構造で実行可能なパス条件を網羅的に繰り返してテストケース（テストデータ）を取得する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１４６１７８号公報
【特許文献２】特開２０１５−３２２８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の従来技術では、全てのグローバル変数をテストの生成対象とするなどのテストに要する時間が長くなるケースがあり、実用的な時間でテストを行うことが困難な場合があるという問題がある。
【０００６】
図９は、対象プログラムの制御構造を説明する説明図である。図９に示すように、シンボリック実行では、対象プログラム３００に含まれる変数の中でテストドライバで示された変数（図示例では引数（ａ、ｂ））をシンボル変数として制御構造３０１を求める。次いで、制御構造３０１より実行可能なパス条件を取得する。図示例では、ｂｌｏｃｋ１を経由するプログラムパスはランタイムエラーとして検出され、各プログラムパスにおけるシンボルの取り得る実行可能なパス条件（３×２＝６ケース）が得られる。
【０００７】
図１０は、生成されるテストケースを説明する説明図である。図１０に示すように、制御構造３０１における実行可能な各パス条件について、充足性判定ツール（ＳＭＴソルバ）を用いてパス条件を満たす具体値を得ることで、各パス条件のテストケース３０２を取得することができる。
【０００８】
図１１は、テストを行うためのテストドライバを説明する説明図である。図１１に示すように、ドライバ３０３は、テストの対象プログラム３００を呼び出すプログラムであり、例えばテストの対象とする関数を引数を与えて呼び出す。シンボリック実行では、ドライバ３０３より与える引数をシンボル変数とし、各パス条件についてのテストケース３０２が取得される。
【０００９】
図１２、１３は、テストデータの生成対象を説明する説明図である。図１２、１３に示すように、対象プログラム３００は、環境初期化コード３１０、テスト対象コード３１１、アプリ初期化コード３１２およびテストドライバ３１３を有する。環境初期化コード３１０は、処理系における変数定義や環境などの初期化を示すコードである。テスト対象コード３１１は、テストの対象とするコードである。アプリ初期化コード３１２は、アプリ用のグローバル変数を定義するコードである。テストドライバ３１３は、テストの対象とするテスト対象コード３１１を引数を与えて呼び出すコードである。
【００１０】
ＪａｖａＳｃｒｉｐｔ（登録商標）などのインタプリタ型言語では、動的に定義されたグローバル変数の値に応じて実行されるコードが存在する。例えば、図１２に示すように、動的に定義されたグローバル変数をシンボル変数とするドライバを生成しない場合は、テスト対象コード３１１において、グローバル変数のテストデータが生成されないこととなる。このため、全てのグローバル変数をシンボル変数とする場合が考えられる。しかしながら、図１３に示すように、全てのグローバル変数をシンボル変数とすると、シンボル変数が大量になる場合がある。この場合、処理系・環境内部のロジックまで考慮した複雑なパス条件が得られることから、テストデータの生成に要する処理時間が大幅に長くなり、実用的な時間でテストを行うことが困難なものとなる。
【００１１】
１つの側面では、テストの対象プログラムよりテストケースを生成する際の処理時間を短縮することを可能とする生成プログラム、生成方法および生成装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
第１の案では、生成プログラムは、判別する処理と、挿入する処理と、生成する処理とをコンピュータに実行させる。判別する処理は、テストの対象プログラムに含まれるグローバル変数を定義する所定のコードを判別する。挿入する処理は、判別された所定のコードの前後に定義済のグローバル変数を出力する出力コードを対象プログラムに挿入する。生成する処理は、出力コードを挿入後の対象プログラムを実行して得られる所定のコードの前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するテストドライバを生成する。
【発明の効果】
【００１３】
本発明の１実施態様によれば、テストの対象プログラムよりテストケースを生成する際の処理時間を短縮することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施形態にかかる生成装置の機能構成を例示するブロック図である。
【図２】図２は、実施形態にかかる生成装置の動作例を示すフローチャートである。
【図３】図３は、対象プログラムへのコードの挿入を説明する説明図である。
【図４】図４は、シンボル化コードとテストドライバとを説明する説明図である。
【図５】図５は、最終的なテストドライバを説明する説明図である。
【図６】図６は、ユーザがテスト対象コードの位置を指定する場合を説明する説明図である。
【図７】図７は、ユーザがアプリ初期化コードを指定する場合を説明する説明図である。
【図８】図８は、実施形態にかかる生成装置のハードウエア構成の一例を示すブロック図である。
【図９】図９は、対象プログラムの制御構造を説明する説明図である。
【図１０】図１０は、生成されるテストケースを説明する説明図である。
【図１１】図１１は、テストを行うためのテストドライバを説明する説明図である。
【図１２】図１２は、テストデータの生成対象を説明する説明図である。
【図１３】図１３は、テストデータの生成対象を説明する説明図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、実施形態にかかる生成プログラム、生成方法および生成装置を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する生成プログラム、生成方法および生成装置は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
【００１６】
図１は、実施形態にかかる生成装置の機能構成を例示するブロック図である。図１に示すように、生成装置１は、アプリ初期化コード判定部１０、コード挿入部１１、実行部１２、シンボル化コード生成部１３およびテストドライバ生成部１４を有し、対象プログラム２０よりシンボリック実行を行ってテストケースを得るためのテストドライバ３０を生成する装置である。
【００１７】
アプリ初期化コード判定部１０には、対象プログラム２０が入力される。アプリ初期化コード判定部１０は、入力された対象プログラム２０を解析し、対象プログラム２０におけるアプリのロジックに影響し、テストデータ生成の対象となるグローバル変数を定義するコード（アプリ初期化コードと呼ぶ）を判定する。アプリ初期化コード判定部１０の判定結果はコード挿入部１１に入力される。
【００１８】
対象プログラム２０（ソースコード）において、アプリ初期化コードは、コードの末尾などの予め定められた領域に定義されている。例えば、アプリ初期化コードの領域は、コメント（アノテーション）などが挿入され、ユーザが容易に認識できる形式を用いて定義されている。一例として、対象プログラム２０では、「／／ＡＰＰ  ＩＮＩＴ．ＢＥＧＩＮＳ」のコメントで始まり、「／／ＡＰＰ  ＩＮＩＴ．ＥＮＤＳ」のコメントで終わる領域にアプリ初期化コードが定義されている。例えば、アプリ初期化コード判定部１０は、対象プログラム２０の構文解析により、上記のコメントで示されている領域に定義されているアプリ初期化コードを判別する。
【００１９】
コード挿入部１１には、アプリ初期化コード判定部１０の判定結果、対象プログラム２０および定義済変数出力コード２１が入力される。定義済変数出力コード２１は、定義済のグローバル変数を出力するための出力コードである。定義済変数出力コード２１の一例としては、「ｖａｒ  ｇｌｏｂａｌ＿ｖａｒ＿ｓｅｔ＿ｂｅｆｏｒｅ＝ｄｕｍｐ＿ａｌｌ＿ｇｒｏｂａｌ（）」、「ｖａｒ  ｇｌｏｂａｌ＿ｖａｒ＿ｓｅｔ＿ａｆｔｅｒ＝ｄｕｍｐ＿ａｌｌ＿ｇｒｏｂａｌ（）」などがある。この定義済変数出力コード２１は、ユーザにより予め定義され、メモリなどに格納されている。
【００２０】
コード挿入部１１は、対象プログラム２０において、アプリ初期化コード判定部１０により判定されたアプリ初期化コードの前後に定義済変数出力コード２１を挿入する。定義済変数出力コード２１が挿入された対象プログラム２０は実行部１２に入力される。
【００２１】
実行部１２は、対象プログラム２０を実行する一般的な処理系であり、コード挿入部１１より入力された対象プログラム２０について、記述された内容に従って順次処理を行う。
【００２２】
この実行部１２の実行結果では、対象プログラム２０のアプリ初期化コードの前後に挿入された定義済変数出力コード２１により、アプリ初期化コードの前後における定義済のグローバル変数の集合が得られる。この得られた実行結果は、シンボル化コード生成部１３に入力される。
【００２３】
シンボル化コード生成部１３は、アプリ初期化コードの前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するコードを生成する。
【００２４】
具体的には、シンボル化コード生成部１３は、アプリ初期化コードの前後におけるグローバル変数の集合の差分より、アプリ初期化コードの実行後に定義されており、アプリ初期化コードの実行前に定義されていない変数、すなわちアプリ初期化コードの実行により新たに定義された変数を求める。次いで、シンボル化コード生成部１３は、求めた変数をシンボル化するコードを生成する。シンボル化コード生成部１３により生成されたコードはテストドライバ生成部１４に入力される。
【００２５】
なお、シンボル化する変数の型については、アプリ初期化コードの実行後に変数がとる値の型より求める。例えば、アプリ初期化コードの実行により新たに定義された変数の型が「””」などである場合は「Ｓｔｒｉｎｇ型」、「０」などである場合は「Ｎｕｍｂｅｒ型」、「ｔｒｕｅ」などである場合は「Ｂｏｏｌｅａｎ型」とする。
【００２６】
テストドライバ生成部１４は、シンボル化コード生成部１３で生成されたコードおよび対象プログラム２０をもとに、対象プログラム２０を呼び出すテストドライバ３０を生成する。
【００２７】
具体的には、テストドライバ生成部１４は、公知の手法により対象プログラム２０内のテスト対象関数を引数を与えて呼び出すテストドライバを求める。次いで、テストドライバ生成部１４は、シンボル化コード生成部１３で生成された、アプリ初期化コードの実行により新たに定義された変数をシンボル化するコードを、公知の手法により求めたテストドライバに連結してテストドライバ３０を生成する。
【００２８】
次に、生成装置１の動作について詳細に説明する。図２は、実施形態にかかる生成装置１の動作例を示すフローチャートである。
【００２９】
図２に示すように、処理が開始されると、アプリ初期化コード判定部１０は、対象プログラム２０に含まれるアプリ初期化コードを判定する（Ｓ１）。次いで、コード挿入部１１は、判定されたアプリ初期化コードの前後に定義済変数出力コード２１を挿入する（Ｓ２）。
【００３０】
図３は、対象プログラム２０へのコードの挿入を説明する説明図である。図３に示すように、対象プログラム２０は、環境初期化コード２０１、テスト対象コード２０２およびアプリ初期化コード２０３を有する。
【００３１】
アプリ初期化コード２０３の領域は、「／／ＡＰＰ  ＩＮＴ．ＢＥＧＩＮＳ」、「／／ＡＰＰ  ＩＮＴ．ＥＮＤＳ」などのコメントが挿入されている。アプリ初期化コード判定部１０は、このコメントをもとにアプリ初期化コード２０３を判定する。次いで、コード挿入部１１は、アプリ初期化コード２０３の前後に定義済変数出力コード２０４ａ、２０４ｂを挿入して対象プログラム２０ａを求める。
【００３２】
次いで、実行部１２は、コード挿入部１１による定義済変数出力コード２０４ａ、２０４ｂを挿入した後の対象プログラム２０ａを実行する。これにより、シンボル化コード生成部１３は、アプリ初期化コード２０３の実行前における定義済のグローバル変数の集合である初期化前変数集合（ＶＳｂｅｆｏｒｅ）と、アプリ初期化コード２０３の実行後における定義済のグローバル変数の集合である初期化後変数集合（ＶＳａｆｔｅｒ）とを得る（Ｓ３）。
【００３３】
次いで、シンボル化コード生成部１３は、初期化前変数集合（ＶＳｂｅｆｏｒｅ）と、初期化後変数集合（ＶＳａｆｔｅｒ）との差集合（ＶＳｂｅｆｏｒｅ−ＶＳａｆｔｅｒ）を計算する。
【００３４】
一例として、初期化前変数集合（ＶＳｂｅｆｏｒｅ）には次の要素が含まれているものとする。
・ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０：””（Ｓｔｒｉｎｇ型）
・ｆｕｎｃ：．．．（ｆｕｎｃｔｉｏｎ型）
【００３５】
また、初期化後変数集合（ＶＳａｆｔｅｒ）には次の要素が含まれているものとする。
・ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０：””（Ｓｔｒｉｎｇ型）
・ｆｕｎｃ：．．．（ｆｕｎｃｔｉｏｎ型）
・ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０：””（Ｓｔｒｉｎｇ型）
【００３６】
この場合の差集合（ＶＳｂｅｆｏｒｅ−ＶＳａｆｔｅｒ）では、「ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０：””（Ｓｔｒｉｎｇ型）」が得られる。
【００３７】
次いで、シンボル化コード生成部１３は、計算した差集合により得られた変数、すなわち、アプリ初期化コード２０３の実行により新たに定義された変数をシンボル変数とし、このシンボル変数を代入するシンボル化コード（ｄｇ）を得る（Ｓ４）。
【００３８】
このシンボル変数の型については、アプリ初期化コード２０３実行後の値と同じ型とする。例えば、上記の例では、「ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０：””（Ｓｔｒｉｎｇ型）」であることから、「ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０」について「Ｓｔｒｉｎｇ型」のシンボル変数を生成するシンボル化コード（ｄｇ）が得られる。
【００３９】
次いで、テストドライバ生成部１４は、対象プログラム２０のテスト対象コード２０２をもとに、公知の手法によりテスト対象コード２０２内のテスト対象関数の引数をシンボル変数とするテストドライバ（ｄａ）を得る（Ｓ５）。
【００４０】
図４は、シンボル化コードとテストドライバとを説明する説明図である。図４に示すように、Ｓ４では、アプリ初期化コード２０３の実行により新たに定義された変数をシンボル変数とするシンボル化コード２０５ａ（ｄｇ）が得られる。また、Ｓ５では、ソースコードのコメント（アノテーション）から型を取得しテストドライバを自動生成する公知の手法により、テスト対象コード２０２内のテスト対象関数の引数をシンボル変数とするテストドライバ２０５ｂ（ｄａ）が得られる。
【００４１】
次いで、テストドライバ生成部１４は、シンボル化コード（ｄｇ）と、テストドライバ（ｄａ）とを連結（ｄｇ＋ｄａ）し、最終的なテストドライバ３０として出力する（Ｓ６）。
【００４２】
図５は、最終的なテストドライバ３０を説明する説明図である。図５に示すように、テストドライバ生成部１４は、対象プログラム２０の環境初期化コード２０１、テスト対象コード２０２およびアプリ初期化コード２０３に、シンボル化コード（ｄｇ）およびテストドライバ（ｄａ）を連結したテストドライバ２０５を付加したものを最終的なテストドライバ３０として出力する。
【００４３】
このように、テストドライバ３０では、全てのグローバル変数をシンボル変数とするのではなく、アプリ初期化コードの実行により新たに定義された変数をシンボル変数としている。したがって、テストドライバ３０によりシンボリック実行してテストケースを生成することで、全てのグローバル変数をシンボル変数とする場合と比較して、テストケースの生成に要する処理時間を短くできる。このため、テストドライバ３０によりシンボリック実行してテストケースを生成する場合には、テストケースの生成に要する処理時間が大幅に長くなることを抑止できることから、実用的な時間でテストを行うことができる。
【００４４】
なお、テスト対象コード２０２およびアプリ初期化コード２０３などのコード位置については、ユーザがコメント（アノテーション）などにより適宜指定してもよい。図６は、ユーザがテスト対象コード２０２の位置を指定する場合を説明する説明図である。図７は、ユーザがアプリ初期化コード２０３を指定する場合を説明する説明図である。
【００４５】
図６に示すように、対象プログラム２０ａでは、「／／ＴＥＳＴ  ＴＡＲＧＥＴ  ＢＥＧＩＮＳ」および「／／ＴＥＳＴ  ＴＡＲＧＥＴ  ＥＮＤＳ」のコメントがユーザにより挿入されることで、テスト対象コード２０２の位置が指定されている。
【００４６】
生成装置１では、アプリ初期化コード判定部１０における前処理として対象プログラム２０ａにおけるコメントの削除・置換・挿入を行う。例えば、「／／ＴＥＳＴ  ＴＡＲＧＥＴ  ＢＥＧＩＮＳ」については削除し、テスト対象コード２０２の終了位置である「／／ＴＥＳＴ  ＴＡＲＧＥＴ  ＥＮＤＳ」については、以後でアプリ初期化コード２０３が始まることを示す「／／ＡＰＰ  ＩＮＴ．ＢＥＧＩＮＳ」に置換する。また、ファイルの末尾には、アプリ初期化コード２０３が終了することを示す「／／ＡＰＰ  ＩＮＴ．ＥＮＤＳ」を挿入する。これにより、アプリ初期化コード判定部１０では、アプリ初期化コード２０３の判定を行うことができる。
【００４７】
図７に示すように、対象プログラム２０ｂでは、「／／ＡＰＰ  ＩＮＴ．ＢＥＧＩＮＳ」および「／／ＡＰＰ  ＩＮＴ．ＥＮＤＳ」のコメントがユーザにより挿入されることで、アプリ初期化コード２０３ａ、２０３ｃと、アプリ初期化コード指定外２０３ｂとが指定されている。具体的には、ユーザは、「／／ＡＰＰ  ＩＮＴ．ＢＥＧＩＮＳ」のコメントで始まり、「／／ＡＰＰ  ＩＮＴ．ＥＮＤＳ」のコメントで終わる領域に含めることでアプリ初期化コード２０３ａ、２０３ｃを指定し、その領域から外すことでアプリ初期化コード指定外２０３ｂを指定している。
【００４８】
アプリ初期化コード判定部１０は、対象プログラム２０ｂにおいてユーザにより指定されたアプリ初期化コード２０３ａ、２０３ｃを判定する。そして、コード挿入部１１は、判別されたアプリ初期化コード２０３ａ、２０３ｃのそれぞれについて定義済変数出力コード２１を挿入する。次いで、シンボル化コード生成部１３では、アプリ初期化コード２０３ａ、２０３ｃのそれぞれについて、実行前後におけるグローバル変数の集合の差集合（ＶＳｂｅｆｏｒｅ−ＶＳａｆｔｅｒ）を求める。そして、シンボル化コード生成部１３は、アプリ初期化コード２０３ａ、２０３ｃのそれぞれについて得られた差集合の和集合を計算し、テストデータ生成対象の変数集合とする。
【００４９】
例えば、アプリ初期化コード２０３ａの実行前後における差集合が次のように求められているものとする。
・（ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０，ｆｕｎｃ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０）−（ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０，ｆｕｎｃ０）＝（ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０）
【００５０】
また、アプリ初期化コード指定外２０３ｃの実行前後における差集合が次のように求められているものとする。
・（ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０，ｆｕｎｃ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ１，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ２）−（ｅｎｖ＿ｇｌｏｂａｌ＿ｓｔｒ０，ｆｕｎｃ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ１）＝（ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ２）
【００５１】
この時の和集合は、（ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０）＋（ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ２）＝（ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ０，ａｐｐ＿ｇｌｏｂａｌ＿ｓｔｒ２）となる。この和集合をテストデータ生成対象の変数集合とすることで、ユーザにより指定されたアプリ初期化コード２０３ａ、２０３ｃについてのシンボリック実行を行うことができる。
【００５２】
以上のように、生成装置１は、対象プログラム２０に含まれるグローバル変数を定義するアプリ初期化コード２０３を判別し、判別されたアプリ初期化コード２０３の前後に定義済変数出力コード２０４ａ、２０４ｂを挿入する。また、生成装置１は、定義済変数出力コード２０４ａ、２０４ｂを挿入後の対象プログラム２０ａを実行して得られる、アプリ初期化コード２０３の実行前後におけるグローバル変数の集合の差分に基づいてシンボル化する変数を定義するテストドライバ３０を生成する。このようにして得られたテストドライバ３０では、全てのグローバル変数をシンボル変数とするのではなく、アプリ初期化コード２０３の実行により新たに定義された変数をシンボル変数としている。したがって、テストドライバ３０によりシンボリック実行してテストケースを生成することで、テストケースの生成に要する処理時間を短くでき、実用的な時間でテストを行うことができる。
【００５３】
なお、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００５４】
また、生成装置１で行われる各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行されるプログラム上、またはワイヤードロジックによるハードウエア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。また、生成装置１で行われる各種処理機能は、クラウドコンピューティングにより、複数のコンピュータが協働して実行してもよい。
【００５５】
ところで、上記の実施形態で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の実施形態と同様の機能を有するプログラムを実行するコンピュータ（ハードウエア）の一例を説明する。図８は、実施形態にかかる生成装置１のハードウエア構成の一例を示すブロック図である。
【００５６】
図８に示すように、生成装置１は、各種演算処理を実行するＣＰＵ１０１と、データ入力を受け付ける入力装置１０２と、モニタ１０３と、スピーカ１０４とを有する。また、生成装置１は、記憶媒体からプログラム等を読み取る媒体読取装置１０５と、各種装置と接続するためのインタフェース装置１０６と、有線または無線により外部機器と通信接続するための通信装置１０７とを有する。また、生成装置１は、各種情報を一時記憶するＲＡＭ１０８と、ハードディスク装置１０９とを有する。また、生成装置１内の各部（１０１〜１０９）は、バス１１０に接続される。
【００５７】
ハードディスク装置１０９には、上記の実施形態で説明したアプリ初期化コード判定部１０、コード挿入部１１、実行部１２、シンボル化コード生成部１３およびテストドライバ生成部１４における各種の処理を実行するためのプログラム１１１が記憶される。また、ハードディスク装置１０９には、プログラム１１１が参照する各種データ１１２（対象プログラム２０、定義済変数出力コード２１など）が記憶される。入力装置１０２は、例えば、生成装置１の操作者から操作情報の入力を受け付ける。モニタ１０３は、例えば、操作者が操作する各種画面を表示する。インタフェース装置１０６は、例えば印刷装置等が接続される。通信装置１０７は、ＬＡＮ（Local  Area  Network）等の通信ネットワークと接続され、通信ネットワークを介した外部機器との間で各種情報をやりとりする。
【００５８】
ＣＰＵ１０１は、ハードディスク装置１０９に記憶されたプログラム１１１を読み出して、ＲＡＭ１０８に展開して実行することで、各種の処理を行う。なお、プログラム１１１は、ハードディスク装置１０９に記憶されていなくてもよい。例えば、生成装置１が読み取り可能な記憶媒体に記憶されたプログラム１１１を読み出して実行するようにしてもよい。生成装置１が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤディスク、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ等に接続された装置にこのプログラム１１１を記憶させておき、生成装置１がこれらからプログラム１１１を読み出して実行するようにしてもよい。
【符号の説明】
【００５９】
１…生成装置
１０…アプリ初期化コード判定部
１１…コード挿入部
１２…実行部
１３…シンボル化コード生成部
１４…テストドライバ生成部
２０、２０ａ、２０ｂ…対象プログラム
２１…定義済変数出力コード
３０、２０５ｂ、２０５…テストドライバ
１０１…ＣＰＵ
１０２…入力装置
１０３…モニタ
１０４…スピーカ
１０５…媒体読取装置
１０６…インタフェース装置
１０７…通信装置
１０８…ＲＡＭ
１０９…ハードディスク装置
１１０…バス
１１１…プログラム
１１２…各種データ
２０１…環境初期化コード
２０２…テスト対象コード
２０３、２０３ａ、２０３ｃ…アプリ初期化コード
２０３ｂ…アプリ初期化コード指定外
２０４ａ、２０４ｂ…定義済変数出力コード
２０５ａ…シンボル化コード
【図１】
0006579022.tif 000002
【図２】
0006579022.tif 000003
【図３】
0006579022.tif 000004
【図４】
0006579022.tif 000005
【図５】
0006579022.tif 000006
【図６】
0006579022.tif 000007
【図７】
0006579022.tif 000008
【図８】
0006579022.tif 000009
【図９】
0006579022.tif 000010
【図１０】
0006579022.tif 000011
【図１１】
0006579022.tif 000012
【図１２】
0006579022.tif 000013
【図１３】
0006579022.tif 000014