プログラムの性能評価に用いられるテストデータを生成する方法であって、性能評価対象のソースプログラムと、サンプルデータと、生成されるテストデータのサイズを決めるために用いられる生成パラメータとを入力装置から受け取る入力ステップと、プロセッサが前記サンプルデータを用いて前記ソースプログラムを実行し、当該ソースプログラム中の複数の文各々について、実行回数を取得する実行回数取得ステップと、前記サンプルデータのサイズの前記生成パラメータ倍のサイズを有するテストデータであって、前記ソースプログラム中の前記複数の文各々についての実行頻度が、前記サンプルデータを用いて前記ソースプログラムを実行した際の当該複数の分各々についての実行頻度と同じとなるテストデータを、取得された前記実行回数に基いて前記プロセッサが生成するテストデータ生成ステップとを有することを特徴とするテストデータ生成方法。請求項1記載のテストデータ生成方法であって、前記実行頻度とは、前記ソースプログラムの各文の実行回数の比であることを特徴とするテストデータ生成方法。請求項1記載のテストデータ生成方法であって、前記実行回数取得ステップは、前記ソースプログラムから当該ソースプログラムを構成する複数の基本ブロックを有する基本ブロックグラフを生成するステップと、前記複数の基本ブロックの各々について当該基本ブロックの基本ブロック番号と当該基本ブロックに含まれる一以上の文各々の文番号とを出力するための第一の命令を前記基本ブロックグラフに挿入するステップと、前記複数の基本ブロックの各々について、当該基本ブロック中に当該基本ブロックの基本ブロック番号を出力するための第二の命令を挿入するステップと、前記第一の命令および一以上の前記第二の命令が挿入された基本ブロックグラフをコンパイルして実行コードを生成するステップと、前記サンプルデータを用いて前記実行コードを実行することにより、前記第一の命令および一以上の前記第二の命令によって出力される情報を中間情報として得るステップと、前記中間情報から、前記ソースプログラム中の複数の文各々についての、前記実行回数を取得するステップを有することを特徴とするテストデータ生成方法。請求項3記載のテストデータ生成方法であって、前記テストデータ生成ステップは、前記ソースプログラムをループ解析して、当該ソースプログラムに含まれる一以上のループを抽出するループ解析ステップと、前記実行回数に基いて、前記一以上のループ各々について、当該ループの実行回数であるループ実行回数を取得するステップと、前記一以上のループ各々について、当該ループ内のプログラム実行経路である一以上のパスと当該パスの実行回数であるパス実行回数を取得するステップと、前記一以上のループ各々について、当該ループを前記生成パラメータと当該ループのループ実行回数の積の値倍に展開するループ展開ステップと、ループ展開後のソースプログラムに含まれる全ての文を通るような入力データを生成するデータ生成ステップとを有することを特徴とするテストデータ生成方法。請求項4記載のテストデータ生成方法であって、前記データ生成ステップは、記号実行法を用いて前記ループ展開後のソースプログラムに含まれる全ての文を通るような入力データを生成することを特徴とするテストデータ生成方法。請求項4記載のテストデータ生成方法であって、前記ループ展開ステップは、前記一以上のループ各々について、当該ループに含まれる各パスのパス実行回数に基いて、当該ループを展開することを特徴とするテストデータ生成方法。プログラムの性能評価に用いられるテストデータを生成するための計算機であって、性能評価対象のソースプログラムと、サンプルデータと、生成されるテストデータのサイズを決めるために用いられる生成パラメータとを受け付ける入力装置と、前記サンプルデータを用いて前記ソースプログラムを実行し、当該ソースプログラム中の複数の文各々について、実行回数を取得する実行回数取得ステップと、前記サンプルデータのサイズの前記生成パラメータ倍のサイズを有するテストデータであって、前記ソースプログラム中の前記複数の文各々についての実行頻度が、前記サンプルデータを用いて前記ソースプログラムを実行した際の当該複数の分各々についての実行頻度と同じとなるテストデータを、取得された前記実行回数に基いて生成するテストデータ生成ステップとを実行するプロセッサを有する計算機。請求項7記載の計算機であって、前記実行回数取得ステップにおいて前記プロセッサは、前記ソースプログラムから当該ソースプログラムを構成する複数の基本ブロックを有する基本ブロックグラフを生成し、前記複数の基本ブロックの各々について当該基本ブロックの基本ブロック番号と当該基本ブロックに含まれる一以上の文各々の文番号とを出力するための第一の命令を前記基本ブロックグラフに挿入し、前記複数の基本ブロックの各々について、当該基本ブロック中に当該基本ブロックの基本ブロック番号を出力するための第二の命令を挿入し、前記第一の命令および一以上の前記第二の命令が挿入された基本ブロックグラフをコンパイルして実行コードを生成し、前記サンプルデータを用いて前記実行コードを実行することにより、前記第一の命令および一以上の前記第二の命令によって出力される情報を中間情報として取得し、前記中間情報から、前記ソースプログラム中の複数の文各々についての、前記実行回数を取得することを特徴とする計算機。請求項8記載の計算機であって、前記テストデータ生成ステップにおいて前記プロセッサは、前記ソースプログラムをループ解析して、当該ソースプログラムに含まれる一以上のループを抽出し、前記実行回数に基いて、前記一以上のループ各々について、当該ループの実行回数であるループ実行回数を取得し、前記一以上のループ各々について、当該ループ内のプログラム実行経路である一以上のパスと当該パスの実行回数であるパス実行回数を取得し、前記一以上のループ各々について、当該ループに含まれる各パスのパス実行回数に基いて、前記生成パラメータと当該ループのループ実行回数の積の値倍に当該ループを展開し、ループ展開後のソースプログラムに含まれる全ての文を通るような入力データを生成することを特徴とする計算機。プログラムの性能評価に用いられるテストデータを生成するたに計算機で実行されるプログラムを記録した記録媒体であって、性能評価対象のソースプログラムと、サンプルデータと、生成されるテストデータのサイズを決めるために用いられる生成パラメータとを受け付けるためのコードと、前記サンプルデータを用いて前記ソースプログラムを実行し、当該ソースプログラム中の複数の文各々について、実行回数を取得する実行回数取得ステップを実行するためのコードと、前記サンプルデータのサイズの前記生成パラメータ倍のサイズを有するテストデータであって、前記ソースプログラム中の前記複数の文各々についての実行頻度が、前記サンプルデータを用いて前記ソースプログラムを実行した際の当該複数の分各々についての実行頻度と同じとなるテストデータを、取得された前記実行回数に基いて生成するテストデータ生成ステップを実行するためのコードとを有するプログラムを記録した記録媒体。請求項10記載の記録媒体であって、前記実行回数取得ステップを実行するためのコードは、前記ソースプログラムから当該ソースプログラムを構成する複数の基本ブロックを有する基本ブロックグラフを生成し、前記複数の基本ブロックの各々について当該基本ブロックの基本ブロック番号と当該基本ブロックに含まれる一以上の文各々の文番号とを出力するための第一の命令を前記基本ブロックグラフに挿入し、前記複数の基本ブロックの各々について、当該基本ブロック中に当該基本ブロックの基本ブロック番号を出力するための第二の命令を挿入し、前記第一の命令および一以上の前記第二の命令が挿入された基本ブロックグラフをコンパイルして実行コードを生成し、前記サンプルデータを用いて前記実行コードを実行することにより、前記第一の命令および一以上の前記第二の命令によって出力される情報を中間情報として取得し、前記中間情報から、前記ソースプログラム中の複数の文各々についての、前記実行回数を取得するためのコードを有することを特徴とする記録媒体。請求項11記載の記録媒体であって、前記テストデータ生成ステップを実行するためにおいて前記プロセッサは、前記ソースプログラムをループ解析して、当該ソースプログラムに含まれる一以上のループを抽出し、前記実行回数に基いて、前記一以上のループ各々について、当該ループの実行回数であるループ実行回数を取得し、前記一以上のループ各々について、当該ループ内のプログラム実行経路である一以上のパスと当該パスの実行回数であるパス実行回数を取得し、前記一以上のループ各々について、当該ループに含まれる各パスのパス実行回数に基いて、前記生成パラメータと当該ループのループ実行回数の積の値倍に当該ループを展開し、ループ展開後のソースプログラムに含まれる全ての文を通るような入力データを生成するためのコードを有することを特徴とする記録媒体。従来技術の問題は2つある。第1の問題は、テストデータの生成方法をユーザが指定する必要がある点である。そのため、性能評価対象プログラムの振る舞いが実稼動時と類似したものになるようテストデータを生成するためには、ユーザがソースプログラムを調査し、適切なテストデータ生成ルールあるいはパターンを考案する必要がある。しかしながら、ソースプログラムからそのプログラムの振る舞いを把握し、テストデータ生成方法を考案するのは困難で時間のかかる作業である。また、指定できるテストデータの生成方法は限られているため、どのようなテストデータを生成すればよいかが判明しても、適切なテストデータの生成方法を指定できない場合もある。第2の問題は、従来技術がデータベース用のテストデータを生成する技術であり、データベース用プログラムの性能評価にしか利用できない点である。まず性能評価対象のソースプログラムと、サンプルデータと、生成されるテストデータのサイズを決めるために用いられる生成パラメータとを入力装置から受け取る。そして、プロセッサがサンプルデータを用いてソースプログラムを実行し、当該ソースプログラム中の複数の文各々について、実行回数を取得する。更に、サンプルデータサイズの生成パラメータ倍のサイズを有するテストデータであって、ソースプログラム中の複数の文各々についての実行頻度が、サンプルデータを用いてソースプログラムを実行した際の当該複数の分各々についての実行頻度と同じとなるテストデータを、取得された実行回数に基いてプロセッサが生成する。ユーザは、実稼働時に入力されるデータの傾向を反映した小規模のサンプルデータを用意するだけで、サンプルデータと実行特性に関する共通性を持つ任意の大きさのテストデータを得ることができる。これにより、プログラムの性能評価に要する開発工数を削減できる。以下、図面を用いて発明の実施形態の一例を説明する。図1はテストデータ生成装置が稼動する計算機システムの構成例を示す図である。図示するように、計算機システムはCPU101、主記憶装置102、外部記憶装置103、ディスプレイ装置などの出力装置104、キーボードなどの入力装置105より構成されている。外部記憶装置103には性能評価対象であるソースプログラム106、サンプルデータ107、生成パラメータ108が、入力装置から入力されて格納される。ソースプログラム106、サンプルデータ107、生成パラメータ108が格納された外部記憶装置103がインタフェースを介してCPU101からアクセス可能に接続されても良い。主記憶装置102には、テストデータ生成プログラム109、コンパイラ110、プロファイラ111、プログラム実行器112、実行コード113、中間情報114、実行頻度情報115、テストデータ116が保持される。テストデータ生成処理はCPU101が主記憶装置102に格納されたソフトウェアを実行することにより行われる。キーボード105はユーザからのコマンドをテストデータ生成プログラム109に与えるのに用いる。ディスプレイ装置104はテストデータ生成の終了をユーザに知らせる。図2はテストデータ生成処理の流れを示したフローチャートである。最初にステップ201で、CPU101によりコンパイラ110が実行され、この結果ソースプログラム106から実行コード113が生成される。このステップ201においてコンパイラは、最初にプログラムから、基本ブロックグラフを生成する。基本ブロックグラフは基本ブロック分岐のない文の列をノードとするグラフであり、コンパイラにおいて、実行コードの生成を単純化するために一般的に用いられている。基本ブロックグラフの生成方法は非特許文献1に示されている。基本ブロック内の文は上から順に実行され、すべての文の実行終了後は、その基本ブロックの後続基本ブロックその基本ブロックを始点とする有向エッジの終点に相当する基本ブロックの実行に移る。図4に示すプログラムに対する基本ブロックグラフの例を図13に示す。各ノード内の先頭のB1、B2等の記号は基本ブロック番号を表す。以降では、基本ブロックBの番号とそれに含まれる文番号の列をそれぞれID、STMTで表す。次にコンパイラは、各基本ブロックBの先頭に、その基本ブロックの番号IDを中間情報114として出力する文printfを挿入する。更にコンパイラは、main関数の基本ブロックグラフの入口ノードに相当する基本ブロック図13ではB1に、すべての基本ブロックの基本ブロック番号と、その基本ブロックを構成している文の文番号の列を中間情報114として出力する文printfSTMTnprintfSTMTnnを挿入する。図13の基本ブロックにこの処理を適用した結果を図14に示す。最後にコンパイラは、通常のコンパイラの処理にもとづいて、printf文が挿入された基本ブロックグラフから実行コード113を生成する。これにより、実行コード113が実行されたとき、基本ブロック番号と対応する文番号の列の関係、および実行された基本ブロック番号の列が中間情報114として記録される。なお、ここで示した方法は実行頻度情報を取得する方法の一例であり、プロファイル処理を単純化できるという特徴を持っている。次にステップ202で、プログラム実行器112により実行コード113をサンプルデータ107に対して実行し、中間情報114を生成する。サンプルデータは、プログラムが処理可能な形式で記述した入力データである。サンプルデータの例としては図4に示すデータbがある。この例は3つの数値データ要素および終端記号1を含んでおり、図4に示すプログラムaで処理可能である。図4に示すプログラムaから得られた実行コード113を、図4に示すデータbに対して実行して得られる中間情報114を図8に示す。基本ブロック番号とその基本ブロックを構成している文の文番号の列は、基本ブロック番号ごとに、記号で区切って表される。たとえば、基本ブロック番号B13に対対応する文番号の列は1314である。最終行は、実行された基本ブロック番号の列である。これは、基本ブロック番号B1から記された順に基本ブロックが実行が行われたことを表している。次にステップ203で、プロファイラ111により中間情報114から実行頻度情報115を生成する。実行頻度情報は、プログラムの文番号をその文が実行された順に並べたものである。実行頻度情報の例を図5に示す。この例は図4に示すプログラムaから得られた実行コード113を、図4に示すデータbに対して実行して得られた中間情報114から生成された、実行頻度情報115である。たとえば、列の最初の5つは12378であるが、これは、プログラムの実行が文1、文2、文3、文7、文8の順に行われたことを表している。実行頻度情報115の生成は、中間情報114に記録されている基本ブロック番号の列を、各基本ブロックを構成している文の文番号の列に置き換えることで行う。この処理により、図8の中間情報114から図5の実行頻度情報115が生成される。なお、一般的なプロファイラは、関数の実行回数を表示する機能、文ごとにその実行回数を表示する機能等の各種の統計処理機能を備えているが、本発明に必要なのは、文の実行順序列を得る機能のみである。最後にステップ204で、テストデータ生成プログラム109によりソースプログラム106、生成パラメータ108、および実行頻度情報115から性能評価用のテストデータ116を生成する。ここで生成パラメータは、生成されるテストデータのサイズを指定するために用いられるパラメータである。具体的には、テストデータ生成プログラム109はサンプルデータサイズの生成パラメータ倍の大きさサイズを有するテストデータを生成する。図3は、ステップ204でCPU101がテストデータ生成プログラム109を実行することにより行う処理の流れを詳しく例示したフローチャートである。最初にステップ301で、ソースプログラム106から、すべてのループの集合を求めるLSとする。ループは終了条件を判定する文であるヘッダおよび繰り返し処理を行う文の集合である本体によって構成される。これらの情報は、非特許文献1のループ解析方法を用いて求めることができる。次にステップ302で、ループ集合LSに未処理のループが残っているかを調べ、残っていれば、ステップ304へ進み、ひとつループを取り出す取り出したループをL、LのヘッダをH、Lの本体をBとする。次にステップ305で、実行頻度情報115をもとにBの実行回数を求めるNとする。次にステップ306で、実行頻度情報115をもとにB内のすべてのパスプログラムの実行経路と各パスの実行回数を求める。パスとその実行回数の組の集合をPFとする。尚、B内のパスは、実行頻度情報115から、ループヘッダHではさまれた部分列を取り出し、各部分列からBの文以外を除き、さらに重複を除くことで得られる。たとえば図5の実行頻度情報115においては、ループヘッダである文2ではさまれた部分列は37812413145、3789105、3789118911812413145の3つである。ここからBの文以外を除くと345、35、345となり、重複を除くと345および35の2つのパスが得られる。各パスの実行回数は上記で重複を除く前の出現回数となる。先ほどの例ではパス345の実行回数は2回、パス35の実行回数は1回となる。次にステップ307で、展開回数を生成パラメータとNの積として求めるPNとする。次にステップ308~312で、LをPN倍に展開する。まずステップ308で、文列を保持する変数Xを空に初期化する。次に、ステップ309で、ステップ310~312の処理をPN回実行したか繰り返しがPN回に到達したかの判定を行う。到達していればステップ313へ、そうでなければステップ310へ進む。ステップ310で、Hを複製し、複製されたHの最後の繰り返し判定文を繰り返しが成立することを保証するassert文に変換した上で、Xの末尾に追加する。ステップ311で、PFのなかからパスを1つ選択するPとする。選択は、各パスの実行回数にもとづいて行う。即ちPFの各パスをそれぞれ実行回数だけ複製した多重集合を作成し、そこからランダムに選択していく。たとえばPFが3つのパスp1、p2、p3を含んでおり、それぞれの実行回数が1回2回3回の場合、p1p2p2p3p3p3という多重集合を作成し、そこから要素をランダムに選択していく。これにより、各パスが実行回数に比例した割合で選択される。ステップ312で、Pを複製し、複製されたP内の条件分岐文をassert文に変換した上で、Xの末尾に追加する。ステップ313では、ソースプログラム内のLをXに置き換える。置き換えた結果をPRとする。その後、ステップ302へ戻り、未処理のループの処理に移る。最後にステップ314で、PR内のXのすべての文を通るような入力データをテストデータとして生成する。生成は、非特許文献2の方法を用いて行うことができる。生成方法は記号実行法にもとづくものである。記号実行法では、記号状態という実行状態の論理式表現を用いて、プログラムを仮想的に実行しながら、指定されたパスを実行するための条件を求める。記号状態は、メモリ内容変数の値などおよびパスの実行条件で構成される。初期状態におけるメモリ内容はプログラム内で明示的に初期値が指定されている変数の値がその指定値に等しいことを表す論理式であり、実行条件は真である。記号実行法では、初期状態から開始し、指定されたパス文の列を順に処理しながら、文の意味にもとづいて状態を更新していく。たとえば、代入文の場合、現在の状態にもとづいて右辺の値を表す論理式を計算し、左辺の値をその式に置き換える。また、assert文の場合、パスの実行を継続するためにはassert文で指定された条件を満たす必要がある。そのため、現在の状態にもとづいて指定された条件の内容を表す論理式を計算し、実行条件に追加する。関数呼び出し文の場合、プログラム内部で定義されている関数については、その関数の先頭に移動し、実行を継続する。入力データを取得する関数のようにプログラム外部で定義されている関数については、その結果を新しい論理変数を導入して表現する。与えられたパスを最後まで実行した後、求めた実行条件を満たすために論理変数が取るべき値を計算する。これはSatisfiabilityModuloTheoriesSolver等の制約解消系ツールを用いて計算することができる。最終的なテストデータは、入力データ取得関数の結果を表す論理変数の値を出現順に並べた列である。続いて、本実施例の適用例を具体的に示す。適用例の特徴は、入力データが構造を持っており、データ要素の繰り返しと終端記号によって構成されていること、およびデータ要素間にプログラムの構造によって決まる依存関係があることである。このような場合、単純にサンプルデータを複製して生成されたテストデータを用いてプログラムを実行した場合と、サンプルデータを用いてプログラムを実行した場合とではプログラムの実行の流れが大きく変化してしまうため、適切な性能評価を行うことができない。従って図2、3に示す方法で生成されるテストデータを用いることが、適切なプログラムの性能評価にとって重要となる。適用例1本適用例では、入力データとして、図4に示すソースプログラム、サンプルデータ、および生成パラメータを用いる。尚、本適用例では、ソースプログラムの行番号を用いて、ソースプログラム内の各文実行命令を示す。図4のソースプログラムにおいて、文行番号1~5が入力データを順次処理するループである。図4のサンプルデータにおいて、1はデータの終了を表す終端記号である。上述の様に、図2のステップ203の結果、図5に示す実行頻度情報114が生成される。次にステップ204で、ソースプログラムの構造にもとづくテストデータ生成を行う。ステップ204を詳しく説明した図3に従って説明すると、最初にステップ301で、ソースプログラムからループ集合を求める。ループ解析の結果、ループ集合LSとしてが得られる。ここで、LSの要素であるループはヘッダ2と本体345の組で構成されている。次にステップ302で、ループ集合LSに未処理のループが残っているか調べ、ステップ304へ進み、未処理のループをひとつ取り出す。ここではループLとしてが取り出される。ヘッダHは2、本体Bは345となる。次にステップ305で、実行頻度情報をもとにBの実行回数Nを求める。Bの最初の文文3はBを実行するたびに必ず実行されるため、Bの実行回数は文3の実行回数に等しくなる。図5に示す実行頻度情報から、Nとして3が得られる。次にステップ306で、実行頻度情報をもとにB内のすべてのパスとその実行回数の組の集合PFを求める。図5の情報から、PFとしてが得られる。ここで、内に記載されているが各行番号で示す分を通過するパスであり、内にの後に記載されている数字が当該パスの実行回数である。次にステップ307で、生成パラメータとNの積PNを求める。図4に示す生成パラメータは今2であるので、PNとして6が得られる。次にステップ308~312で、Lを6倍に展開する。ステップ308で、文列を保持する変数Xを空に初期化する。続いてステップ310~312を6回繰り返す。ステップ310で、H2を複製し、繰り返し判定文である文2を繰り返しが成立することを保証するassert文に変換しXの末尾に追加する。これによりXはassertとなる。ステップ311で、PFのなかから各パスの実行頻度にもとづいてパスを1つ選択する。ここではパスとしてP345が選択されたとする。ステップ312で、Pを複製し、P内の条件分岐文をassert文に変換した上で、Xの末尾に追加する。これによりXはassertassertinsertxinとなる。以後、同様に処理を進めることで、ステップ310~312の繰り返し終了時にはXはassertassertinsertxinassertassertxinassertassertinsertxinassertassertinsertxinassertassertxinassertassertinsertxinassertとなる。次にステップ313で、ソースプログラム106内のLをXに置き換える。置き換えた結果のmain関数を図6に示す。次にステップ302へ戻り、LSに残っている未処理ループがないため、ステップ303へ進む。最後にステップ303で、図6のプログラムのXに対応するすべての文を通るような入力データをテストデータとして生成する。非特許文献2の方法を用いることで、図7のようなテストデータが得られる。図7のテストデータが、サンプルデータの傾向を反映していることを説明する。図4のサンプルデータaは、3つの要素112と終端記号1によって構成されている。これを入力としてプログラムを実行した場合、1番目の要素1および3番目の要素2は挿入されるinsertが呼び出されるが、2番目の要素1は、すでに同じ値が挿入されているため挿入されない。すなわちinsertが呼び出されるデータとそうでないデータを21の割合で含んでいる。生成した図7のテストデータを入力としてプログラムを実行した場合、1番目3、3番目4、4番目5、6番目6の要素が挿入され、2番目3および5番目3の要素は挿入されない。すなわちサンプルデータと同じように、insertが呼び出されるデータとそうでないデータを21の割合で含んでいる。この様に、サンプルデータと生成されたテストデータとでは、ソースプログラムの各分の実行頻度即ちソースプログラムの各分の実行回数の比が同じに保たれていることが分かる。これに対して単純にサンプルデータを複製して2倍にした場合、終端記号である1まで複製されてしまうため、処理されるデータの量が2倍にならない。仮に、終端記号を人手によって特別に処理した場合、得られるデータは1121121となる。これを入力としてプログラムを実行した場合、1番目1、3番目2の要素が挿入され、2番目1、4番目1、5番目1および6番目2の要素は挿入されない。すなわちサンプルデータと異なり、insertが呼び出されるデータとそうでないデータを12の割合で含んでいるため、実行頻度はサンプルデータの傾向とは大きく異なったものになってしまう。適用例2適用例1で使用した図4に示すソースプログラムは入力処理ループが1つしか存在しなかった。そこで適用例2として、入力処理ループが複数存在する場合を示す。本適用例では、入力データとして、図9に示すソースプログラム、サンプルデータ、および生成パラメータを用いる。尚、本適用例では、図9に示すソースプログラムの行番号を用いて、ソースプログラム内の各文実行命令を示す。図9のソースプログラムにおいて、文行番号2~5および7~9が入力データを順次処理するループである。図9のサンプルデータにおいて、1および2はデータの終了を表すマーカーである。図2のステップ203の結果、図10に示す実行頻度情報が生成される。次にステップ204で、ソースプログラムの構造にもとづくテストデータ生成を行う。ステップ204を詳しく説明した図3に従って説明すると、最初にステップ301で、ソースプログラムからループ集合を求める。ループ解析の結果、ループ集合LSとしてが得られる。ここで、LSの要素であるループおよびは各々ヘッダと本体の組である。次にステップ302で、ループ集合LSに未処理のループが残っているか調べ、ステップ304へ進み、未処理のループをひとつ取り出す。ここではループLとしてが取り出される。ヘッダHは2、本体Bは345となる。ステップ305からステップ313までの処理は先ほどの適用例1と同じである。次にステップ302へ戻り、LSに未処理のループが残っているかを調べ、ステップ304へ進み、未処理のループをひとつ取り出す。ここではループLとしてが取り出される。ヘッダHは7、本体Bは89となる。次にステップ305で、実行頻度情報をもとにBの実行回数Nを求める。図5に示す実行頻度情報から、Nとして2が得られる。次にステップ306で、実行頻度情報をもとにB内のすべてのパスとその実行回数の組の集合PFを求める。図5の情報から、PFとしてが得られる。次にステップ307で、生成パラメータとNの積PNを求める。図4の情報から生成パラメータは今2であるので、PNとして4が得られる。次にステップ308~312で、Lを4倍に展開する。ステップ308で、文列を保持する変数Xを空に初期化する。続いてステップ310~312を6回繰り返す。ステップ310で、H2を複製し、繰り返し判定文である文7を繰り返しが成立することを保証するassert文に変換しXの末尾に追加する。これによりXはassertとなる。ステップ311で、PFのなかから各パスの実行頻度にもとづいてパスを1つ選択する。パスとしてP89が選択される。ステップ312で、Pを複製し、P内の条件分岐文をassert文に変換した上で、Xの末尾に追加する。これによりXはassertinsertzinとなる。以後、同様に処理を進めることで、ステップ310~312の繰り返し終了時にはXはassertinsertzinassertinsertzinassertinsertzinassertinsertzinassertとなる。次にステップ313で、ソースプログラム106内のLをXに置き換える。置き換えた結果のmain関数を図11に示す。次にステップ302へ戻り、LSに残っている未処理ループがないため、ステップ303へ進む。最後にステップ303で、図11のプログラムのXに対応するすべての文を通るような入力データをテストデータとして生成する。非特許文献2の方法を用いることで、図12のようなテストデータが得られる。なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。たとえば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の構成に置き換えることが可能であり、また、ある実施例の構成に他の構成を加えることも可能である。また、実施例の構成の一部について、他の構成の追加削除置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、ファイル等の情報は、メモリや、ハードディスク、SSDSolidStateDrive等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。