(57)【要約】【課題】多種多様なプログラム構造を有する複数のテストプログラムの生成を少ない工数で実現するプログラム生成装置を提供する。【解決手段】生成すべきプログラムの複数通りのプログラム構造を指定する１つのＨＬＳＬ（ハイレベルスクリプト言語）スクリプトを受け付け、当該ＨＬＳＬスクリプトにより指定された複数通りのプログラム構造のうち互いに異なる１つのプログラム構造を記述する複数のＭＬＳＬ（ミドルレベルスクリプト言語）スクリプトに翻訳する翻訳部２と、複数の第２スクリプトのそれぞれに対応するプログラムを生成する生成部３とを備える。【選択図】図５
2005032212.tif 000002
【特許請求の範囲】
【請求項１】
生成すべきプログラムの複数通りのプログラム構造を指定する第１スクリプトを受け付ける受付手段と、
前記第１スクリプトにより指定された複数通りのプログラム構造のうち互いに異なる１つのプログラム構造を記述する複数の第２スクリプトを生成するスクリプト生成手段と
を備えることを特徴とするプログラム生成装置。
【請求項２】
前記第１スクリプトは、生成すべきプログラムにおける制御構造の複数通りの配置の仕方を示すことにより複数通りのプログラム構造を指定し、
前記各第２スクリプトは、制御構造を一意に配置したプログラム構造を記述し、
前記スクリプト生成手段は、第１スクリプトに指定された配置の仕方に基づいて制御構造を配置することにより前記複数の第２スクリプトを生成する
ことを特徴とする請求項１記載のプログラム生成装置。
【請求項３】
前記制御構造は、ループ構造である
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項４】
前記制御構造は、分岐構造である
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項５】
前記は分岐構造は、ｉｆ−ｔｈｅｎ型分岐構造である
ことを特徴とする請求項４記載のプログラム生成装置。
【請求項６】
前記は分岐構造は、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型分岐構造である
ことを特徴とする請求項４記載のプログラム生成装置。
【請求項７】
前記第１スクリプトは、前記配置の仕方として前記制御構造の並列度に関する指定を含む
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項８】
前記第１スクリプトは、前記配置の仕方として前記制御構造の入れ子に関する指定を含む
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項９】
前記第１スクリプトは、前記配置の仕方として制御構造の並列度及び入れ子に関する指定を含む
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項１０】
前記第１スクリプトは、生成すべきプログラムの数の指定を含み、
前記スクリプト生成手段は、第１スクリプトにおいて指定された数の第２スクリプトを、第１スクリプトに指定された複数通りのプログラム構造からランダムに生成する
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項１１】
前記スクリプト生成手段は、第１スクリプトに指定された複数通りのプログラム構造の全てに対応する複数の第２スクリプトを生成する
ことを特徴とする請求項２記載のプログラム生成装置。
【請求項１２】
前記第１スクリプトは、さらに、プログラム中の複数箇所に特定のプログラム文を設定することを指示するパラメータを有し、
前記スクリプト生成手段は、第２スクリプトのそれぞれに対して、前記パラメータを示すマークを複数箇所に付与する
ことを特徴とする請求項１記載のプログラム生成装置。
【請求項１３】
前記特定のプログラム文は、文字列と変数の何れかを出力する出力文である
ことを特徴とする請求項１２記載のプログラム生成装置。
【請求項１４】
前記特定のプログラム文は、データ依存関係を有する代入文ペアである
ことを特徴とする請求項１２記載のプログラム生成装置。
【請求項１５】
前記第１スクリプトは、生成すべきプログラムに設定すべき制御構造を示す第１パラメータと、その制御構造の複数通りの配置の仕方を示す第２パラメータとを含み、
前記各第２スクリプトは、制御構造を一意に配置したプログラム構造を記述し、
前記スクリプト生成手段は、
第１スクリプトから第１及び第２パラメータを読み取る読み取り手段と、
読み取られた第１及び第２パラメータが示す制御構造及び配置の仕方に基づいて前記複数の第２スクリプトを生成する制御構造生成手段と
を有することを特徴とする請求項１記載のプログラム生成装置。
【請求項１６】
前記第１パラメータは、前記制御構造としてループ構造及び分岐構造の少なくとも１つを示し、
前記第２パラメータは、第１パラメータが示す制御構造を並列に設定すべき数的範囲及び当該制御構造を入れ子に設定すべき数的範囲の少なくとも一方を示す
ことを特徴とする請求項１５記載のプログラム生成装置。
【請求項１７】
前記制御構造生成手段は、
第２パラメータに示される数的範囲の最大限の配置に対応する完全木を示す完全木データを生成する完全木生成手段と、
生成された完全木の部分木を示す複数の部分木データを生成する部分木生成手段と、
生成された各部分木が示す制御構造を一意に配置したプログラム構造を記述した第２スクリプトを生成する第２スクリプト生成手段と
を有することを特徴とする請求項１６記載のプログラム生成装置。
【請求項１８】
前記完全木生成手段は、
前記第２パラメータに示される入れ子数的範囲の最大数に１を加算した値を、前記完全木のノードの階層数である高さと決定し、
前記第２パラメータに示される並列に設定すべき制御構造の数的範囲の最大数を、前記完全木の各ノードの子ノード数と決定し、
決定された高さと子ノード数に従うツリー構造データを前記完全木として生成し、
その際、第１パラメータがｉｆ−ｔｈｅｎ−ｅｌｓｅ型の分岐構造を示す場合には、ルートノード以外の各ノードを双子ノードとして生成し、双子ノード中の各ノードが決定された前記子ノード数の双子ノードを有するように前記完全木を生成する
ことを特徴とする請求項１７記載のプログラム生成装置。
【請求項１９】
前記第１スクリプトは、さらに、データ依存関係の設定指示と設定すべきデータ依存関係の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第１スクリプト中のデータ依存関係の設定指示に応じて、制御構造生成手段で生成された第２スクリプトのそれぞれに、データ依存関係を設定すべき位置を示す依存マークを、指定された数に従って付与するマーク付与手段を有する
ことを特徴とする請求項１５記載のプログラム生成装置。
【請求項２０】
前記マーク付与手段は、隣合う２つの基本ブロックにマークペアを前記依存マークとして付与する
ことを特徴とする請求項１９記載のプログラム生成装置。
【請求項２１】
前記制御構造は、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型分岐構造であり、
前記マーク付与手段は、ｔｈｅｎに対応する基本ブロック及びｅｌｓｅに対応する基本ブロックに前記マークペアを付与する
ことを特徴とする請求項１９記載のプログラム生成装置。
【請求項２２】
前記第１スクリプトは、さらに、出力文の設定指示と設定すべき出力文の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第１スクリプト中の出力文の設定指示に応じて、制御構造生成手段で生成された第２スクリプトのそれぞれに対して、前記指定された数の基本ブロックにランダムに、出力文を設定すべき位置を示す出力マークを付与するマーク付与手段を有する
ことを特徴とする請求項１５記載のプログラム生成装置。
【請求項２３】
前記第１スクリプトは、さらに、出力文の設定指示と設定すべき出力文の数の指定とを含み、
前記スクリプト生成手段は、さらに、
第１スクリプト中の出力文の設定指示に応じて、制御構造生成手段で生成された第２スクリプトのそれぞれに対して、前記指定された数ずつの間隔を置いた基本ブロック毎に、出力文を設定すべき位置を示す出力マークを付与するマーク付与手段を有する
ことを特徴とする請求項１５記載のプログラム生成装置。
【請求項２４】
前記プログラム生成装置は、さらに、
スクリプト生成手段によって生成された複数の第２スクリプトのそれぞれに対応するプログラムを生成するプログラム生成手段を備える
ことを特徴とする請求項１記載のプログラム生成装置。
【請求項２５】
生成すべきプログラムの複数通りのプログラム構造を指定する第１スクリプトを受け付ける受付ステップと、
前記第１スクリプトにより指定された複数通りのプログラム構造のうち互いに異なるに１つのプログラム構造を記述する複数の第２スクリプトを生成するスクリプト生成ステップと
を有することを特徴とするプログラム生成方法。
【請求項２６】
プログラムを生成するためにコンピュータで実行される生成プログラムであって、
生成すべきプログラムの複数通りのプログラム構造を指定する第１スクリプトを受け付ける受付ステップと、
前記第１スクリプトにより指定された複数通りのプログラム構造に含まれる１つプログラム構造を記述する複数の第２スクリプトを生成する第１生成ステップと
をコンピュータに実行させることを特徴とする生成プログラム。
【請求項２７】
プログラムを生成するためのプログラム生成装置において、１つのハイレベルスクリプトから複数のミドルレベルスクリプトに変換され、さらに複数のミドルレベルスクリプトから生成すべき複数のプログラムに変換される際に処理されるデータ構造を有するハイレベルスクリプト及びミドルレベルスクリプトを含むスクリプトであって、
前記ハイレベルスクリプトは、
生成すべきプログラムに設定すべき制御構造を示す第１パラメータと、その制御構造の複数通りの配置の仕方を示す第２パラメータと、第２パラメータの数的範囲を指定する第３パラメータとを含み、生成すべきプログラムにおける制御構造の複数通りの配置の仕方を示すことにより複数通りのプログラム構造を指定し、
前記ミドルレベルスクリプトは、
制御構造を示す複数の第４パラメータの組み合わせとして記述され、前記制御構造の複数通りの配置の仕方のうち１つの配置を示す
ことを特徴とするスクリプト。
【請求項２８】
前記ハイレベルスクリプトは、１つの第１パラメータに対応して複数の第２パラメータと第３パラメータとの組を有する
ことを特徴とする請求項２７記載のスクリプト。
【請求項２９】
前記第２パラメータは、さらに、データ依存関係を有するプログラム文及び出力を指示するプログラム文の何れかの設定を指定する
ことを特徴とする請求項２７記載のスクリプト。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを自動的に生成するプログラム生成装置に関し、特にコンパイラ等の言語処理装置の動作を検証するためのソースプログラムをテストプログラムとして生成するプログラム生成装置に関する。
【背景技術】
【０００２】
従来のプログラム生成装置は例えば特許文献１に開示されている。この従来技術は、コンパイラなどの言語処理プロセッサの動作を検証するためのテストプログラムを生成するプログラム生成装置であって、プログラム中の制御構造を示す構造データをテンプレートとして予め複数用意しておき、１つ以上のテンプレートを指定するスクリプトに従ってテストプログラムを生成している。
【０００３】
図１は、上記従来技術における構造データ例を示す図である。同図のように番号１の構造データは、繰り返し実行という制御構造（１つのＬＯＯＰ構造）を示している。番号２０の構造データは、1つのＬＯＯＰ構造の中に、２並列のＬＯＯＰ構造が入れ子になっている。
【０００４】
図２は、上記従来技術におけるスクリプト及びテストプログラムの一例を示す。同図においてスクリプト２ａは番号１の構造データすなわちＬＯＯＰ構造を２つ指定する。このスクリプト２ａに従ってテストプログラム２ｂが自動生成される。テストプログラム２ｂは、ｆｏｒ文によるループ構造を２つ並列に有するプログラム構造になっている。
【０００５】
図３はスクリプト及びテストプログラムの他の一例を示す。同図のスクリプト３ａは番号１の構造データと番号２０の構造データを１つずつ指定する。このスクリプト３ａに従ってテストプログラム３ｂが自動生成される。テストプログラム２ｂは、ｆｏｒ文によりループ構造を２つ並列に有し、２つめのループ構造には２並列のループ構造が入れ子になっているというプログラム構造になっている。
【０００６】
このように従来のプログラム自動生成装置は、スクリプトに指定された構造データに対応する制御構造を有するテストプログラムを生成する。プログラマは、構造データを指定する簡単なスクリプトを記述するだけでよく、テストプログラムの細部を記述する工数の低減を図っている。
【特許文献１】特開平５−３４２０５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術におけるプログラム自動生成装置によれば、多種多様なプログラム構造を有する多数のテストプログラムを生成するためには、スクリプト作成の工数を多大に要するという問題がある。なぜなら、１つのスクリプトから生成されるテストプログラムは１つであり、多種多様なプログラム構造を有する複数のテストプログラムを生成するためには、同数のスクリプトをプログラマが作成する必要があるからである。さらに、予め用意されている構造データも多数作成しておく必要がある。
【０００８】
例えば、コンパイラの動作を検証するためには、多種多様なプログラム構造を有する複数のテストプログラムを生成するランダムテストをする場合や、特定の制御構造（ＬＯＯＰ構造、ｉｆ構造など）を多様に組み合わせテストプログラムを必要とする場合に、テストプログラム個別に上記スクリプトを作成するのは、多大な工数を要してしまい、上記従来技術は多種多様なテストプログラムの生成には実用的ではない。
【０００９】
本発明の目的は、多種多様なプログラム構造を有する複数のテストプログラムの生成を少ない工数で実現するプログラム生成装置を提供することにある。
本発明の他の目的は、テストプログラムの実行結果をプログラマが容易に確認することができるプログラム生成装置を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明のプログラム生成装置は、生成すべきプログラムの複数通りのプログラム構造を指定する第１スクリプトを受け付ける受付手段と、前記第１スクリプトにより指定された複数通りのプログラム構造のうち互いに異なる１つのプログラム構造を記述する複数の第２スクリプトを生成するスクリプト生成手段とを備える。
この構成によれば、プログラム生成装置は、１つの第１スクリプトから複数の第２スクリプトを生成するので、プログラマは、たった１つの第１スクリプトを作成するだけでよく、多種多様なプログラム構造を有する複数のプログラムを少ない工数で実現することができる。
【００１１】
ここで、前記第１スクリプトは、生成すべきプログラムにおける制御構造の複数通りの組み合わせ方を示すことにより複数通りのプログラム構造を指定し、前記各第２スクリプトは、制御構造を一意に組み合わせたプログラム構造を記述し、前記スクリプト生成手段は、第１スクリプトに指定された組み合わせ方に基づいて制御構造を組み合わせることにより前記複数の第２スクリプトを生成する構成としてもよい。
【００１２】
この構成によれば、第１スクリプトは制御構造の複数通りの組み合わせ方を示すので、プログラマは第１スクリプトの作成を簡単にすることができる。
ここで、前記制御構造は、ループ構造、ｉｆ−ｔｈｅｎ型分岐構造、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型分岐構造の少なくとも１つとしてもよい。
また、前記第１スクリプトは、前記組み合わせ方として、制御構造を並列な組み合わ方及び制御構造を入れ子にする組み合わせ方を示すようにしてもよい。
【００１３】
また、前記第１スクリプトは、生成すべきプログラムの数の指定を含み、前記スクリプト生成手段は、第１スクリプトにおいて指定された数の第２スクリプトを、第１スクリプトに指定された複数通りのプログラム構造からランダムに生成する構成としてもよい。
この構成によれば、プログラム生成装置は、指定された数のプログラムを生成するので、プログラマは所望する数のプログラムをプログラム生成装置に生成させることができる。
【００１４】
ここで、プログラム生成装置は、さらに、スクリプト生成手段によって生成された複数の第２スクリプトのそれぞれに対応するプログラムを生成するプログラム生成手段を備える構成としてもよい。
この構成によれば、受付手段、スクリプト生成手段、プログラム生成手段が順に連動することによって、１つの第１スクリプトの受付から複数の第２スクリプト、複数のテストプログラムと順次生成することができる。
【００１５】
ここで、前記第１スクリプトは、さらに、プログラム中の複数箇所に特定のプログラム文を設定することを指示するパラメータを有し、前記スクリプト生成手段は、第２スクリプトのそれぞれに対して、前記パラメータを示すマークを複数箇所に付与し、前記プログラム生成手段は、第２スクリプトに付与されたマークの位置に対応するプログラムの位置に、前記特定のプログラム文を設定する構成としてもよい。
【００１６】
また、前記特定のプログラム文は、文字列と変数の何れかを出力する出力文及びデータ依存関係を有する代入文ペアの何れかである構成としてもよい。
この構成によれば、プログラム生成装置は、生成すべきプログラム中に特定プログラム文を挿入するので、コンパイル後のプログラム実行において、特定プログラム文（データ依存関係、出力文）の実行によって、プログラマによるコンパイラの動作検証を容易にし、より確実にすることができる。
また、本発明のプログラム生成方法、プログラムを生成するための生成プログラム、スクリプトについても上記と同様の構成、作用及び効果を有する。
【発明の効果】
【００１７】
本発明のプログラム生成装置によれば、１つの第１スクリプトから複数の第２スクリプトを生成するので、プログラマは、たった１つの第１スクリプトを作成するだけでよく、多種多様なプログラム構造を有する複数のプログラムを少ない工数で実現することができる。
【発明を実施するための最良の形態】
【００１８】
本発明の実施の形態におけるプログラム生成装置について説明する。
＜外観＞
図４は、本発明の実施の形態におけるプログラム生成装置１の外観を示す図である。同図のようにプログラム生成装置１は、制御部１ａと表示装置１ｂと入力装置１ｃを備える。このハードウェア構成は、一般的なパーソナルコンピュータ又はワークステーションと同様である。本発明のプログラム生成装置は、その機能（あるいは本発明のプログラム生成方法）を記述した特定のソフトウェアを上記ハードウェア上で実行することにより実現される。
【００１９】
＜概略構成＞
図５は、プログラム生成装置１の構成を示す機能ブロック図を示す。同図において、プログラム生成装置１は翻訳部２と生成部３を備える。
【００２０】
翻訳部２は、ハイ・レベル・スクリプト言語で記述された１つのファイルからミドル・レベル・スクリプト言語で記述された複数のファイルを生成する。
生成部３は、ミドルレベルスクリプト言語で記述された各々のファイルから１つテストプログラムを生成する。
これにより、プログラマがハイレベルスクリプト言語で記述した１つのファイルを作成すればよく、プログラム生成装置１は、そのファイルから多種多様な複数のプログラム構造を有するテストプログラムを生成することができる。
【００２１】
以下、ハイレベルスクリプト言語をＨＬＳＬ、ミドルレベルスクリプト言語をＭＬＳＬと呼ぶ。また、ＨＬＳＬで記述されたファイルをＨＬＳＬスクリプト、ＭＬＳＬで記述されたファイルをＭＬＳＬスクリプトと呼ぶ。
図５には機能ブロックの他の、ＨＬＳＬスクリプトｈ１、ｎ個のＭＬＳＬスクリプトｍ１〜ｍｎ、ｎ個のテストプログラムｔ１〜ｔｎを図示してある。
【００２２】
ここで、ＨＬＳＬスクリプトは、プログラム中の制御構造について複数通りの配置の仕方（又は組み合わせ方）を指定するファイルであり、その複数通りの配置（又は組み合わせ）により定まる複数通りのプログラム構造を包括的に表現する。言い換えれば、ＨＬＳＬスクリプトは、制御構造の指定と、その指定された制御構造をプログラム中の複数箇所に配置する仕方を複数通り示す。また、ＭＬＳＬスクリプトとは、図２、図３に示したスクリプト２ａ、３ａのように、１つのプログラム構造を表現したファイルであり、制御構造をプログラム中の複数箇所に一意に配置する仕方を示す。
プログラム生成装置は、１つのＨＬＳＬスクリプトから複数のＭＬＳＬスクリプト及び複数のテストプログラムを生成することができる。
【００２３】
＜生成例＞
図６は、ＨＬＳＬスクリプト、ＭＬＳＬスクリプト及びテストプログラムの一例を示す図である。同図では、１つのＨＬＳＬスクリプトからｎ個のＭＬＳＬスクリプト及びｎ個のテストプログラムが生成されている。
【００２４】
図中のＨＬＳＬスクリプトｈ１は、ＬＯＯＰ構造の指定と、ＬＯＯＰ構造の組み合わせ方をパラメータ類によって指定する一例である。すなわち、ＬＯＯＰ構造の入れ子の数を１〜２、ＬＯＯＰ構造の並列数を１〜２と指定している。
ＭＬＳＬスクリプトｍ１〜ｍｎは、ＨＬＳＬスクリプトｈ１に指定された複数通りの配置の仕方のうち、１つを記述するファイルである。例えば、従来技術の図２、図３で説明したスクリプト２ａ、３ａに相当する。
【００２５】
テストプログラムｔ１〜ｔｎは、ＭＬＳＬスクリプトｍ１〜ｍｎに１対１で対応するテストプログラムである。同図では、Ｃ言語のソースプログラムとして生成されている。
このように、プログラム生成装置１は、１つのＨＬＳＬスクリプトからｎ個のＭＬＳＬスクリプトを生成し、さらにｎ個のＭＬＳＬスクリプトからｎ個のテストプログラムを生成する。
【００２６】
生成されたそれぞれのテストプログラムは、図５に示したコンパイラ１０によりコンパイルされることにより機械語プログラムに変換される。この機械語プログラムは、コンパイラの動作検証のために、図５に示したターゲットコンピュータ（またはそのシミュレータ）１１により実行される。なお、コンパイラ１０は例えば、図４に示した外観のパーソナルコンピュータ上でコンパイラ・ソフトウェアを実行することにより実現される。また、ターゲットコンピュータ（またはそのシミュレータ）１１は、汎用的なコンピュータや組み込みマイクロコンピュータにより制御される家電製品などである。例えば、ＤＶＤ録画再生装置、ＳＴＢ（セットトップボックス）、デジタル・スチル・カメラ、デジタルビデオカメラなどである。これらのターゲットコンピュータ自身のハードウェアがまだ開発されていない場合は、そのシミュレータである。
【００２７】
＜ＨＬＳＬの構文＞
図７は、ＨＬＳＬスクリプトの構文を示す説明図である。同図のようにＨＳＬＳスクリプトは、パラメータ１｛パラメータ２：パラメータ３・・・という構文を１つ以上記述することが可能な構文になっている。
【００２８】
パラメータ１は、プログラム構造の中に設定すべき制御構造を指定する。ここで制御構造とは、一般的にプログラムの実行フローを制御する要素を意味し、逐次構造、繰り返し構造、選択構造（分岐構造とも呼ばれる）などの種類がある。これらの配置（組み合わせ）によって、プログラムの実行フロー（つまりプログラム構造）が定まる。同図のように、パラメータ１として指定される制御構造として、”ＬＯＯＰ”は繰り返し構造を、”ｉｆ”は選択構造を意味する。ｉｆの選択構造にはｉｆ−ｔｈｅｎ型とｉｆ−ｔｈｅｎ−ｅｌｓｅ型とがある。パラメータ１が”ｉｆ”の場合パラメータ２及び３にてｉｆ−ｔｈｅｎ型とｉｆ−ｔｈｅｎ−ｅｌｓｅ型の何れかを指定することができる。
【００２９】
パラメータ２には、具体的にはｐａｔｔｅｒｎ、ｎｅｓｔ、ｐａｒａｌｌｅｌ、ｎｕｍｂｅｒ、ｄｅｐｅｎｄ、ｃｏｍｐａｒｅなどがある。
”ｐａｔｔｅｒｎ”は、パラメータ１で指定された制御構造がｉｆ構造である場合にそのｉｆ構造をｉｆ−ｔｈｅｎ型とするかｉｆ−ｔｈｅｎ−ｅｌｓｅ型とするかの指定を意味する。これに後続するパラメータ３が”ｔｈｅｎ”の場合はｉｆ−ｔｈｅｎ型を、”ｔｈｅｎ−ｅｌｓｅ”の場合はｉｆ−ｔｈｅｎ−ｅｌｓｅ型を意味する。パラメータ１にｉｆ構造が指定され、かつｐａｔｔｅｒｎが省略された場合はｉｆ−ｔｈｅｎ型となる。
【００３０】
”ｎｅｓｔ”はパラメータ１で指定された制御構造を入れ子にして配置することを指定する。入れ子の段数は、ｎｅｓｔに後続するパラメータ３により指定される。
”ｐａｒａｌｌｅｌ”は当該制御構造を並列に配置することを指定する。並列数は、ｐａｒａｌｌｅｌに後続するパラメータ３により指定される。
”ｎｕｍｂｅｒ”は生成すべきＭＬＳＬスクリプト数（テストプログラム数でもある）を指定する。その数は、ｎｕｍｂｅｒに後続するパラメータ３により指定される。後続するパラメータ３が数値ではなく文字列”ａｌｌ”であれば可能な限りの全数を意味する。
【００３１】
”ｄｅｐｅｎｄ”は、プログラム中に依存関係のあるプログラム文の設定を指定する。ｄｅｐｅｎｄに後続するパラメータ３により、プログラム中の何箇所に設定すべきかが指定される。
”ｃｏｍｐａｒｅ”は、定められた文字列などを出力する出力文の設定を指定する。本プログラム生成装置１により最終的に生成されたテストプログラムが、コンパイラ１０によりコンパイルされ、さらにターゲットコンピュータ１１により実行されるときに、出力文による出力と、ＭＬＳＬスクリプト中のマーク位置とをプログラマが比較して動作を検証することができる。
【００３２】
パラメータ３は、パラメータ２がｐａｔｔｅｒｎである場合のｉｆ構造の型、パラメータ２に対する数的範囲を指定する。同図のように、”ｔｈｅｎ””ｔｈｅｎ−ｅｌｓｅ（又はｅｌｓｅ）”はパラメータ２がｐａｔｔｅｒｎである場合のｉｆ構造の型を示す。パラメータ２がｐａｔｔｅｒｎであって、パラメータ３が省略された場合はｉｆ−ｔｈｅｎ型となる。
【００３３】
”Ｌ−Ｍ”（Ｌ、Ｍは整数）は、第１パラメータ”ｎｅｓｔ”、”ｐａｒａｌｌｅｌ”に後続する場合はＮをＬからＭの範囲内で制御構造を組み合わせる（又は配置する）ことを指定する。”ｄｅｐｅｎｄ”、”ｃｏｍｐａｒｅ”に後続する場合はＬからＭの範囲内でデータ依存関係又は出力文を設定することを指定する。
”Ｎ”（Ｎは整数）は、第１パラメータ”ｎｅｓｔ”、”ｐａｒａｌｌｅｌ”に後続する場合はＮを最大数として制御構造を配置することを指定する。”ｄｅｐｅｎｄ”、”ｃｏｍｐａｒｅ”に後続する場合はＮ箇所に依存関係又は出力文を設定することを指定する。なお、この場合、Ｎ個のブロック置きに依存関係又は出力文を設定することの指定としてもよい。
”Ｎ”の代わりに”ａｌｌ”と指定した場合は、可能な全ての数を意味する。
【００３４】
例えば、”ｎｅｓｔ：１−２”は、指定された制御構造を入れ子にする階層数が１（入れ子なし）から２（入れ子が１段）であることを意味する。”ｐａｒａｌｌｅｌ：１−２”は、指定された制御構造の並列数を１（単独）から２の範囲内にすることを意味する。パラメータ３が省略された場合は、予めユーザによって設定されたデフォルト値とみなされる。このデフォルト値は、パラメータ２の種類ごとに設定される。
【００３５】
パラメータ２及び３は、パラメータ１に続く｛ ｝内に複数記述することができ、（１）ｉｆ構造の型指定、（２）パラメータ１で指定された制御構造のプログラム中での又は配置の仕方の指定（ｎｅｓｔ、ｐａｒａｌｌｅｌ）、（３）生成すべきテストプログラム数の指定（ｎｕｍｂｅｒ）、（４）テストプログラムに付加すべき情報数の指定（ｄｅｐｅｎｄ、ｃｏｍｐａｒｅ）に用いられる。上記（１）及び（２）によって、１つのＨＬＳＬスクリプト中に制御構造の複数通りの配置を指定できることから、制御構造の配置の仕方が異なる複数のプログラム構造を指定することができる。（３）によって生成すべきテストプログラム数を、プログラマが所望する数に設定することができる。（４）によってテストプログラムをコンパイラによって機械語プログラムにコンパイルし、さらに機械語プログラムをターゲットコンピュータで実行させた場合に、プログラマはデータ依存関係及び実行経路の検証を容易に行うことができる。
【００３６】
＜ＭＬＳＬの構文＞
ＭＳＬＳスクリプトの具体例としては、図２中のスクリプト２ａ、図３中のスクリプト３ａ等がある。また、図１中の構造データもそれぞれＭＬＳＬスクリプトである。
【００３７】
このように、ＭＬＳＬスクリプトは、制御構造を示す複数のパラメータの組み合わせとして記述され、制御構造の配置を一意に示す。ＭＬＳＬスクリプト中のパラメータとしては、ＬＯＯＰ、ｉｆ（ｉｆ〜ｔｈｅｎ、ｉｆ〜ｔｈｅｎ〜ｅｌｓｅ）などがある。
【００３８】
＜翻訳部２の詳細構成＞
図８は、翻訳部２のより詳細な構成を示すブロック図である。同図のように翻訳部２は、パラメータ読取部２１と、制御構造生成部２２と、付加情報生成部２３とを有する。
【００３９】
パラメータ読取部２１は、ＨＬＳＬスクリプト中に記述されたパラメータ１〜３を読み取って、制御構造生成部２２に出力する。ただし、パラメータ１中、テストプログラムに付加すべき情報の指定（ｄｅｐｅｎｄ、ｃｏｍｐａｒｅ）は、付加情報生成部２３に出力する。
制御構造生成部２２は、パラメータ読取部２１によって読み取られたパラメータ１〜３について、パラメータ２に指定された配置の仕方に従って、パラメータ１に指定された制御構造を配置することにより、複数のＭＬＳＬスクリプトを生成する処理を行う。（例えば、図６に示したＭＬＳＬスクリプトｍ１、ｍ２、ｍｎ参照）
【００４０】
付加情報生成部２３は、パラメータ読取部２１によって読み取られたパラメータ中のテストプログラムに付加すべき情報の指定（ｄｅｐｅｎｄ、ｃｏｍｐａｒｅ）に従って、制御構造生成部２２によって生成された複数のＭＬＳＬスクリプトのそれぞれに対して付加情報を設定すべき位置にマークを付与する。このマークは、”ｄｅｐｅｎｄ”に対応するマークと、”ｃｏｍｐａｒｅ”に対応するマークとがある。これらのマークが付与された後の複数のＭＬＳＬスクリプトのそれぞれは、生成部３により複数のテストプログラムに変換される。その際、ＭＬＳＬスクリプト中の”ｄｅｐｅｎｄ”マークの位置に対応するテストプログラム中のそれぞれの位置には、生成部３によって、データ依存関係を有するプログラム文が設定される。”ｃｏｍｐａｒｅ”マークの位置に対応するテストプログラム中のそれぞれの位置には、生成部３によって、出力文が設定される。これらのプログラム文又は出力文によって、プログラマは実行フローを検証することができる。
【００４１】
＜パラメータ読取処理＞
図９は、図８に示したパラメータ読取部２１におけるパラメータ読取処理の詳細を示すフローチャートである。
【００４２】
同図において、パラメータ読取部２１は、ＨＬＳＬスクリプトに記述されたパラメータ１が”ｉｆ”であるか”ＬＯＯＰ”であるかを判定する（Ｓ２０１）。判定の結果”ｉｆ”である場合、パラメータ読取部２１は、それに後続するパラメータ２及びパラメータ３を読み取り、”ｐａｔｔｅｒｎ”、”ｎｅｓｔ”、”ｐａｒａｌｌｅｌ”、”ｎｕｍｂｅｒ”に関するパラメータ１、２及び３を制御構造生成部２２に出力し、”ｄｅｐｅｎｄ”、”ｃｏｍｐａｒｅ”に関するパラメータ２及び３を付加情報生成部２３に出力する（Ｓ２０２）。判定の結果”ＬＯＯＰ”である場合、パラメータ読取部２１は、それに後続するパラメータ２及びパラメータ３を読み取り、”ｎｅｓｔ”、”ｐａｒａｌｌｅｌ”、”ｎｕｍｂｅｒ”に関するパラメータ１、２及び３を制御構造生成部２２に出力し、”ｄｅｐｅｎｄ”、”ｃｏｍｐａｒｅ”に関するパラメータ２及び３を付加情報生成部２３に出力する（Ｓ２０３）。
【００４３】
＜制御構造生成処理＞
図１０は、図８に示した制御構造生成部２２における制御構造生成処理を示すフローチャートである。
制御構造生成部２２は、パラメータ読取部２１から出力されたパラメータ１が”ｉｆ”であるか”ＬＯＯＰ”であるかを判定し（Ｓ２０５）、判定結果が”ＬＯＯＰ”であればＬＯＯＰ型の制御構造生成処理を行う。このＬＯＯＰ型制御構造生成処理では、制御構造生成部２２はパラメータで指定された範囲内でＬＯＯＰ型の制御構造を複数通りに配置して、それぞれの配置に対応するプログラム構造を有する複数のＭＬＳＬスクリプトを生成する（Ｓ２０９）。
【００４４】
判定結果が”ｉｆ”であって、パラメータ２として”ｐａｔｔｅｒｎ”及びパラメータ３として”ｔｈｅｎ”が指定されている場合（”ｐａｔｔｅｒｎ”が省略されている場合、又は”ｐａｔｔｅｒｎ”はあるが”ｔｈｅｎ”又は”ｔｈｅｎ−ｅｌｓｅ”が省略されている場合）、ｉｆ型の制御構造生成処理を行う。このｉｆ型の制御構造生成処理では、制御構造生成部２２は、パラメータで指定された範囲内でｉｆ−ｔｈｅｎ型の制御構造を複数通りに配置し、それぞれの配置に対応するプログラム構造を有する複数のＭＬＳＬスクリプトを生成する（Ｓ２０７）。
【００４５】
判定結果が”ｉｆ”であって、パラメータ２として”ｐａｔｔｅｒｎ”及びパラメータ３として”ｔｈｅｎ−ｅｌｓｅ”が指定されている場合、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造生成処理を行う。このｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造生成処理では、制御構造生成部２２は、パラメータで指定された範囲内でｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造を複数通りに配置し、それぞれの配置に対応するプログラム構造を有する複数のＭＬＳＬスクリプトを生成する（Ｓ２０８）。
【００４６】
＜制御構造生成処理の詳細（ｉｆ型）＞
図１１は、図１０のステップＳ２０６に示したｉｆ型（ｉｆ−ｔｈｅｎ型）の制御構造生成処理の詳細を示すフローチャートである。
まず、制御構造生成部２２は、パラメータ読取部２１から出力された”ｐａｒａｌｌｅｌ”のパラメータ３の数値（以下、その最大値をｐａｒａｌｌｅｌ数と呼ぶ）、”ｎｅｓｔ”のパラメータ３の数値（以下、その最大値をｎｅｓｔ数と呼ぶ）に従う完全木を生成する（Ｓ２１０）。具体的には、制御構造生成部２２は、ツリーの高さ（ノードの階層数）を（ｎｅｓｔ数）＋１と決定し（Ｓ２１０ａ）、各ノードの子ノード数（ブランチ数）を（ｐａｒａｌｌｅｌ数）決定し（Ｓ２１０ｂ）、決定した高さ、ブランチ数に従った完全木を表すデータを生成する。
【００４７】
図１２は、ｐａｒａｌｌｅｌ：２、ｎｅｓｔ：２である場合に制御構造生成部２２によって生成される完全木Ｔ及びそれに対応するＭＬＳＬスクリプトを示す図である。同図のように、ツリーの高さは（ｎｅｓｔ数２＋１＝）３となり、子ノード数は（ｐａｒａｌｌｅｌ数）の２となる。この完全木Ｔは、ＭＬＳＬスクリプトＴ１と比べ、ルートノード（ノード１）以外の各ノードは、１つのｉｆ文に対応している。すなわち、同図のＭＬＳＬスクリプトＴ１に示すように、完全木Ｔは、ＨＬＳＬスクリプトで指定された制御構造を、パラメータ（ｎｅｓｔ、ｐａｒａｌｌｅｌ）で指定された制御構造を最大限に配置したプログラム構造を表している。
【００４８】
次に、制御構造生成部２２は、完全木から複数の部分木を生成する（Ｓ２２１〜Ｓ２１７のループ１）。生成される部分木の数は”ｎｕｍｂｅｒ”で指定された数である。各部分木は、ＨＬＳＬスクリプトで指定された制御構造を、完全木の範囲内で部分的に配置したプログラム構造を表している。なお、ここで生成される部分木には完全木自身も含む。
より詳しく説明すると、制御構造生成部２２は、まず完全木からランダムに部分木Ｓを１つ生成し（Ｓ２１２）、その高さが（ｎｅｓｔ数＋１）でなければ再度部分木の生成に戻り（Ｓ２１３）、子ノードの最大数が（ｐａｒａｌｌｅｌ数）でなければ再度部分木の生成に戻る（Ｓ２１４）。ここで戻る理由は、部分木がパラメータ（ｎｅｓｔ、ｐａｒａｌｌｅｌ）で指定された数の制御構造（ノード）を有していないからである。
【００４９】
さらに、制御構造生成部２２は、当該部分木に対応するＭＬＳＬスクリプトが既に生成済であるか否かを判定し（Ｓ２１５）、生成済でなければ当該部分木に対応するＭＬＳＬスクリプトを生成する（Ｓ２１６）。
以上により１つの部分木が生成される。制御構造生成部２２は、ｎｕｍｂｅｒで指定された数の部分木が生成されるまで、上記処理（ループ１）を繰り返す。
【００５０】
図１３は、図１２に示した完全木から生成される部分木に対応するＭＬＳＬスクリプトを示す図である。同図ではｎｕｍｂｅｒとして”ａｌｌ”が指定された場合に生成される全ての部分木を示し、全部で９つのＭＬＳＬスクリプトが生成されている。同図においてＭＬＳＬスクリプトＴ１は完全木に対応する。ＭＬＳＬスクリプトＳ１〜Ｓ８は、それぞれ部分木から1以上のノードが削除された部分木に対応している。
【００５１】
＜制御構造生成処理の詳細（ｉｆ−ｔｈｅｎ−ｅｌｓｅ型）＞
図１４は、図１０のステップＳ２０６に示したｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造生成処理を示すフローチャートである。
同図のフローは、図１１と比較して、ステップＳ２１０の代わりにＳ２１０１を有する点（つまりステップＳ２１０ｃの代わりにステップＳ２１０ｄ及びＳ２１０ｅを有する点）と、ステップ２１６の代わりにステップ２１６ａを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
【００５２】
ステップＳ２１０ａにおいて、制御構造生成部２２は、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型のｉｆ文に対応するノードを有する完全木を生成する。そのため、制御構造生成部２２は、高さと子ノード数を決定した後、ルートノードとそのブランチを生成し（Ｓ２１０ｄ）、さらにルートノードから下の全ての子ノードを双子ノードとして、決定された高さと子ノード数とに従って、双子ノードとブランチとを生成する（Ｓ２１０ｅ）。
【００５３】
ステップ２１６ａにおいて、制御構造生成部２２は、ステップＳ２１６と比較して、ｉｆ−ｔｈｅｎ型ではなくｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造を配置したＭＬＳＬスクリプトを生成する点が異なっている。
図１５に、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型の制御構造を指定するＨＬＳＬスクリプトとそれに対応する完全木の一例を示す。同図のＨＬＳＬスクリプトｈ２は、（ｎｅｓｔ数）を２、（ｐａｒａｌｌｅｌ数）を２と指定している。それに対応する完全木において、ルートノード以外の全ノードは、内部に２つのノードを有する双子ノードとなっている。双子ノード内部の左ノードはｉｆ−ｔｈｅｎ−ｅｌｓｅ型の”ｔｈｅｎ”に対応し、右ノードはｅｌｓｅに対応させている。
【００５４】
図１６は、制御構造生成部２２に生成される部分木と、当該部分木から生成されるＭＬＳＬスクリプトの第１の例を示す。同図において、この双子ノードｎ１内の左ノードに２つの双子ノードｎ２、ｎ３が接続されている。これに対応するＭＬＳＬスクリプトでは、双子ノードｎ１に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文のｔｈｅｎ側に、並列な２つの双子ノードｎ２、ｎ３に対応する２つのｉｆ−ｔｈｅｎ−ｅｌｓｅ文が入れ子になっている。
【００５５】
図１７は、制御構造生成部２２に生成される部分木と、当該部分木から生成されるＭＬＳＬスクリプトの第２の例を示す。同図ルートノードの下に２つの双子ノードｎ４、ｎ５が並列な２つのｉｆ−ｔｈｅｎ−ｅｌｓｅ文に対応する。
図１８は、制御構造生成部２２に生成される部分木と、当該部分木から生成されるＭＬＳＬスクリプトの第３の例を示す。同図の部分木は６つの双子ノードを有する。ＭＬＳＬスクリプトにおいて双子ノードｎ６、ｎ９に対応する２つのｉｆ−ｔｈｅｎ−ｅｌｓｅ文は並列である。双子ノードｎ６に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文のｔｈｅｎ側には２つの並列な双子ノードｎ７、ｎ８に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文が入れ子になっている。双子ノードｎ９に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文のｔｈｅｎ側には双子ノードｎ１０に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文が入れ子になり、ｅｌｓｅ側には双子ノードｎ１１に対応するｉｆ−ｔｈｅｎ−ｅｌｓｅ文が入れ子になっている。
このようにして、制御構造生成部２２は、図１６〜図１８のように部分木に対応するＭＬＳＬスクリプトを生成する。
【００５６】
＜制御構造生成処理の詳細（ＬＯＯＰ型）＞
図１９は、図１０のステップＳ２０６に示したＬＯＯＰ型の制御構造生成処理を示すフローチャートである。同図のフローは、図１１と比較して、ステップ２１６の代わりにステップ２１６ｂを有する点とが異なっている。以下、同じ点は説明を省略し、異なる点を中心に説明する。
【００５７】
ステップＳ２１６ｂにおいて制御構造生成部２２は、ステップＳ２１６と比べて、ｉｆ−ｔｈｅｎ型の制御構造の代わりにＬＯＯＰ型の制御構造を生成する点のみ異なっている。すなわち、制御構造生成部２２は、図１２、１３のようなＭＬＳＬスクリプト中の”ｉｆ()｛｝”の表記の代わりに”ＬＯＯＰ｛｝”の表記にした複数のＭＬＳＬスクリプトを生成する。
【００５８】
なお、制御構造生成処理として制御構造がｉｆ−ｔｈｅｎ型、ｉｆ−ｔｈｅｎ−ｅｌｓｅ型、ＬＯＯＰ型の場合について個別に説明したが、これらが混在していてもよい。例えば、ｉｆ−ｔｈｅｎ型とｉｆ−ｔｈｅｎ−ｅｌｓｅ型とが混在して指定された場合には、ｉｆ−ｔｈｅｎ型もｉｆ−ｔｈｅｎ−ｅｌｓｅ型とみなして完全木を一旦生成してから、ｐａｒａｌｌｅｌ及びｎｅｓｔで指定された範囲内で双子ノードのいくつかを通常のノードに置き換える処理を追加すればよい。ＬＯＯＰ型とｉｆ−ｔｈｅｎ−ｅｌｓｅ型が混在する場合、ＬＯＯＰ型とｉｆ−ｔｈｅｎ型が混在する場合も同様である。
【００５９】
＜付加情報生成処理＞
図２０は、図８に示した付加情報生成部２３における付加情報生成処理を示すフローチャートである。
付加情報生成部２３は、パラメータ読取部２１から出力されたパラメータ中に”ｄｅｐｅｎｄ”とそれに後続するパラメータ３が存在する場合（Ｓ２２０）、制御構造生成部２２によって生成された複数のＭＬＳＬスクリプトのそれぞれに対して、パラメータ３で指定された数のマーク（以下ｄｅｐｅｎｄマークと呼ぶ）を付加する（Ｓ２２１）。ここで、１つのｄｅｐｅｎｄマークは、データ依存関係を有する２つのプログラム文を設定すべき位置を指定する２つのマークペアである。
【００６０】
また、付加情報生成部２３は、”ｃｏｍｐａｒｅ”とそれに後続するパラメータ３とが存在する場合（Ｓ２２２）、制御構造生成部２２によって生成された複数のＭＬＳＬスクリプトのそれぞれに対して、パラメータ３で指定された数のマーク（以下ｃｏｍｐａｒｅマークと呼ぶ）を付加する（Ｓ２２１）。ここで、ｃｏｍｐａｒｅマークは、プログラム実行箇所や状態を示すための出力文を設定すべき位置を指定するマークである。
【００６１】
図２１は、付加情報生成部２３によってｄｅｐｅｎｄマークが付加されたＭＬＳＬスクリプトとテストプログラムの一例を示す図である。同図のＭＬＳＬスクリプトｍ１０中のマークペアＡ、Ｂは、ｄｅｐｅｎｄマークである。
図２２は、付加情報生成部２３によってｃｏｍｐａｒｅマークが付加されたＭＬＳＬスクリプトとテストプログラムの一例を示す図である。同図のＭＬＳＬスクリプトｍ１１中の３つの”ｃｏｍｐａｒｅ”は、それぞれｃｏｍｐａｒｅマークである。
【００６２】
＜生成部の詳細構成＞
図２３は、生成部３のより詳細な構成を示すブロック図である。同図のように生成部３は、データ依存設定部３１と、比較位置設定部３２とを有し、ＭＬＳＬスクリプトからコンパイラ１０のコンパイル対象としてテストプログラムを生成する。本実施の形態ではテストプログラムはＣ言語のソースプログラムである。
【００６３】
生成部３は、ＭＬＳＬスクリプトに制御構造として記述されたＬＯＯＰやｉｆに対応する制御構造を有するソースプログラムを生成する。例えば、ＭＬＳＬ中のＬＯＯＰに対応してｆｏｒ文による繰り返し処理を生成し、ＭＬＳＬ中ｉｆに対応してｉｆ文を生成し、ＭＬＳＬ中ｉｆ−ｔｈｅｎ−ｅｌｓｅに対してｉｆ()｛｝ｅｌｓｅ｛｝文を生成する。このようなＭＬＳＬスクリプトからテストプログラムの生成する技術は、図２のスクリプトを図３のソースプログラムに変換する従来技術と同様に行ってもよい。ただし、従来技術ではｄｅｐｅｎｄマーク及びｃｏｍｐａｒｅマークに対応できない。
【００６４】
データ依存設定部３１は、テストプログラムの生成に際して、ｄｅｐｅｎｄマークの位置にデータ依存関係を有するプログラム文を付加する。
比較位置設定部３２は、テストプログラムの生成に際して、ｃｏｍｐａｒｅマークの位置に出力文を付加する。
【００６５】
＜データ依存設定処理フロー＞
図２４は、図２３に示したデータ依存設定部３１におけるデータ依存設定処理を示すフローチャートである。
同図のようにデータ依存設定部３１は、ＭＬＳＬスクリプト中の各ブロックについてステップＳ３１０〜Ｓ３１４の処理を行う。ここでブロックとは、途中から分岐することがない常に連続実行されるプログラムの単位をいう。つまり、ブロックの末尾の命令のみが分岐し、それ以外の命令から分岐が発生しない単位をいう。ＭＬＳＬスクリプトでは、ｉｆ、ＬＯＯＰの制御構造で区切られた間の部分に相当する。
【００６６】
データ依存設定部３１は、ＭＬＳＬスクリプト中の当該ブロックにデータ依存マーク（ｄｅｐｅｎｄマークのマークペアの一方）が設定されているか否かを判定する（Ｓ３１１）。設定されていないと判定された場合、データ依存設定部３１は、テストプログラムにおける当該ブロックを構成するプログラム文としてランダムに代入文を生成し（Ｓ３１２）、設定されていると判定された場合には、データ依存設定部３１は、ＭＬＳＬスクリプト中のマークペアの他方がマークされたブロックを探し出し、テストプログラム中のブロックのペアに対して、データ依存関係を有する２つの代入文のひとつずつを生成する（Ｓ３１３）。なお、ステップＳ３１３において既にデータ依存関係を有する代入文が既に設定されている場合には、省略しても良い。
【００６７】
図２１に示したテストプログラムｐ１０は、データ依存設定部３１によって設定されたデータ依存関係を有するプログラム文の一例である。同図のように、ＭＬＳＬスクリプトｍ１０中のマークペアＡの位置に、データ依存関係を有する２つのプログラム文（代入文）”ｘ＝ａ＋ｂ；”と”ｙ＝ｘ＋ｃ；”とが設定されている。この場合変数ｘを介在してこの２つのプログラム文がデータ依存関係にある。また、マークペアＢの位置に、データ依存関係を有する２つのプログラム文”ｚ＝ａ＋ｂ；”と”ｋ＝ｚ−ｄ；”とが設定されている。この場合変数ｚを介在してこの２つのプログラム文がデータ依存関係にある。
【００６８】
＜比較位置設定処理フロー＞
図２５は、図２３に示した比較位置設定部３２における比較位置設定処理を示すフローチャートである。
同図のように３２は、ＭＬＳＬスクリプト中の各ブロックについてステップＳ３２０〜Ｓ３２３の処理（ループ１）を行う。データ依存設定部３１は、ＭＬＳＬスクリプト中の当該ブロックに比較位置のマーク（ｃｏｍｐａｒｅマーク）が設定されているか否かを判定する（Ｓ３２１）。設定されていると判定された場合は、比較位置設定部３２は、そのマーク位置に対応するテストプログラム中のブロックに、出力文を設定する（Ｓ３２２）。
【００６９】
図２２に示したテストプログラムｐ１１は、比較位置設定部３２によって設定された出力文の一例である。同図のように、ＭＬＳＬスクリプトｍ１１中のｃｏｍｐａｒｅマークの位置に対応するテストプログラムｐ１０のブロックに、出力文”ｐｒｉｎｔｆ（”ｘｘｘ”）；”等が設定されている。この場合、生成すべき出力文は、予めプログラマがプログラム生成装置１に設定していればよい。また、出力内容ｘｘｘは、その位置を示す文字列としてもよいし、変数の一部又は全部の値としてもよいし、特定の演算結果としてもよい。
【００７０】
また、本発明はかかる上記実施形態に限定されるものではなく、本発明の範囲を逸脱することなく種々の変形又は修正が可能である。
なお、上記実施の形態では、テストプログラムとしてＣ言語のソースプログラムを生成する例を説明したが、Ｃ言語以外の高級言語でもよい。その場合、パラメータ１中のＬＯＯＰ、ｉｆは、当該高級言語に記述可能な制御構造（ｉｆ構造、ｆｏｒ構造、ｗｈｉｌｅ構造、・・・）に対応させればよい。
【００７１】
また、上記実施の形態では、１つのＨＬＳＬスクリプトに１つのパラメータ１によって１つの制御構造が指定される場合を例に説明したが、１つのＨＬＳＬスクリプトに複数のパラメータ１を指定してもよいし、複数のパラメータ１により異なる制御構造を指定してもよい。例えば、ｉｆ−ｔｈｅｎ型を指定するパラメータ１とｉｆ−ｔｈｅｎ−ｅｌｓｅ型を指定するパラメータ１とが混在していてもよいし、ＬＯＯＰ構造を指定するパラメータ１とｉｆ−ｔｈｅｎ−ｅｌｓｅ型を指定するパラメータ１とが混在していてもよい。
【００７２】
また、上記実施の形態では、コンパイラ用のテストプログラムを生成しているが、コンパイラでなくともインタープリタ、アセンブラでもよいし、ＪＡＶＡ（Ｒ）やＶｉｓｕａｌＢａｓｉｃ（Ｒ）等のスクリプト言語を解釈実行する仮想マシンをターゲットとしてもよい。
上記実施形態において制御構造を指定するパラメータ１としてＬＯＯＰ、ｉｆを説明したが、これ以外の制御構造を示すパラメータを含んでいてもよい。例えば、逐次構造を示すパラメータ（例えばｓｅｑｕｅｎｃｅ）、再帰呼び出し構造（例えばｒｅｃｕｒｓｉｖｅ）、１対ｎの分岐を示すｎ分岐構造（ｎ−ｂｒａｎｃｈ）などである。
【００７３】
なお、上記実施の形態では、プログラム生成装置１に生成されたプログラムは開発中のコンパイラの動作検証のためのテストプログラムとしているが、開発中のターゲットコンピュータ１１の動作検証に用いることができることは勿論である。
【産業上の利用可能性】
【００７４】
本発明は、複数のプログラムを生成するプログラム生成装置に適し、例えば、コンパイラの動作を検証するために多種多様なテスト用のプログラムの生成するプログラム生成装置に適している。
【図面の簡単な説明】
【００７５】
【図１】従来技術における構造データを示す図である。
【図２】従来技術におけるスクリプトとテストプログラムの一例を示す図である。
【図３】従来技術におけるスクリプトとテストプログラムの他の例を示す図である。
【図４】実施の形態におけるテストプログラム生成装置の外観図である。
【図５】テストプログラム生成装置の構成を示す機能ブロック図である。
【図６】ＨＬＳＬ例、ＭＬＳＬ例、プログラム例を示す図である。
【図７】ＨＬＳＬの構文を示す説明図である。
【図８】翻訳部のより詳細な機能ブロック図である。
【図９】パラメータ読取処理を示すフローチャートである。
【図１０】制御構造生成処理を示すフローチャートである。
【図１１】ｉｆ型の制御構造を有する複数のＭＬＳＬスクリプトを生成処理を示すフローチャートである。
【図１２】完全木Ｔを示す図である。
【図１３】完全木Ｔと部分木Ｓ１〜Ｓ８に対応するＭＬＳＬスクリプトを示す図である。
【図１４】ｉｆ−ｔｈｅｎ−ｅｌｓｅ型の複数の制御構造を有するＭＬＳＬスクリプトを生成処理を示すフローチャートである。
【図１５】ＨＬＳＬスクリプトとその完全木の一例を示す図である。
【図１６】部分木とＭＬＳＬスクリプトの例を示す図である。
【図１７】部分木とＭＬＳＬスクリプトの例を示す図である。
【図１８】部分木とＭＬＳＬスクリプトの例を示す図である。
【図１９】ＬＯＯＰ型の制御構造を有する複数のＭＬＳＬスクリプトを生成処理を示すフローチャートである。
【図２０】付加情報生成処理を示すフローチャートである。
【図２１】付加情報設定例とテストプログラム例を示す図である。
【図２２】付加情報設定例とテストプログラム例を示す図である。
【図２３】生成部３の詳細なブロック図である。
【図２４】データ依存設定処理を示すフローチャートである。
【図２５】比較位置設定処理を示すフローチャートである。
【符号の説明】
【００７６】
１    プログラム生成装置
１ａ  制御部
１ｂ  表示装置
１ｃ  入力装置
２    翻訳部
３    生成部
１０    コンパイラ
１１    ターゲットコンピュータ
２１    パラメータ読取部
２２    制御構造生成部
２３    付加情報生成部
３１    データ依存設定部
３２    比較位置設定部
【図１】
2005032212.tif 000003
【図２】
2005032212.tif 000004
【図３】
2005032212.tif 000005
【図４】
2005032212.tif 000006
【図５】
2005032212.tif 000007
【図６】
2005032212.tif 000008
【図７】
2005032212.tif 000009
【図８】
2005032212.tif 000010
【図９】
2005032212.tif 000011
【図１０】
2005032212.tif 000012
【図１１】
2005032212.tif 000013
【図１２】
2005032212.tif 000014
【図１３】
2005032212.tif 000015
【図１４】
2005032212.tif 000016
【図１５】
2005032212.tif 000017
【図１６】
2005032212.tif 000018
【図１７】
2005032212.tif 000019
【図１８】
2005032212.tif 000020
【図１９】
2005032212.tif 000021
【図２０】
2005032212.tif 000022
【図２１】
2005032212.tif 000023
【図２２】
2005032212.tif 000024
【図２３】
2005032212.tif 000025
【図２４】
2005032212.tif 000026
【図２５】
2005032212.tif 000027