(57)【要約】【課題】計算機アーキテクチャの複雑化に伴い機能的に複雑化したコンパイラをテストするのに、テストプログラムを従来の人手で作成したのでは、その工数が莫大となり、またテスト漏れの惧れがある。【解決手段】プログラムセル情報１１０とセル重み情報１１１を入力として、乱数発生器１２０により発生させた乱数を用いて、プログラムセル組合せ器１３０でプログラムセルを組合せ、コンパイラのテストプログラム１４０を自動生成する。【選択図】  図１
2004227129.tif 000002
【特許請求の範囲】
【請求項１】
コンパイラのテストプログラムの要素となる小手続き記述の集合から乱数を用いて該小手続き記述を複数選択し、選択された小手続き記述を組み合わせて、手続き記述を生成することを特徴とするテストプログラムの自動生成方法。
【請求項２】
乱数を用いて小手続き記述を選択する場合、前記小手続き記述の選択のされ易さを示す数値を該小手続き記述に割り当て、選択に該数値を反映することを特徴とする請求項１記載のテストプログラムの自動生成方法。
【請求項３】
選択された複数の小手続き記述の間で、該小手続き記述に含まれる変数を共用化し、共用化された変数を持つ小手続き記述が組み合わされることを特徴とする請求項１記載のテストプログラムの自動生成方法。
【請求項４】
選択対象となる小手続き記述自身が、その小手続き記述を計算機で実行した時の動作結果を計算機の表示装置に表示する手続きおよび／又は記憶装置に格納する手続きを有することを特徴とする請求項１記載のテストプログラムの自動生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、テストプログラムの作成に係り、さらに詳しくは、コンパイラ開発時のテストに用いるテストプログラムの作成に適したテストプログラムの作成に関する。
【０００２】
【従来の技術】
従来、高級言語で記述されたプログラムを計算機上で実行可能な形式に翻訳するコンパイラの開発において、その機能を検証するのに用いるテストプログラムは、コンパイラ設計者がその処理内容を考慮して人手作成したり、プログラム言語仕様に詳しい者が、その仕様に基づき人手により作成したりしていた。
【０００３】
また、その一方で、テストプログラムの自動作成を目指し、計算機によるテストプログラムの自動生成も考えられている。その一つは、用意された複数の構文生成規則から乱数を用いて規則を選択し、選択された規則を基にテストプログラムを生成するものである（例えば、特許文献１）。また、既存のテストプログラムの文法網羅性を判定し、既存のテストプログラムから外れた文法を縮小仕様文法として出力し、その縮小文法仕様を基に追加テストプログラムを自動的に生成するものがある（例えば、特許文献２）。更に、バッカス記法で記述された構文規則を基に文パターンを生成し、生成された文パターンを人手によって編集し、テストプログラムとするものがある（例えば、特許文献３）。
【０００４】
これらのテストプログラム自動生成方法は、いずれもテストプログラム内の単一の文を自動生成するのがその機能である。
【０００５】
【特許文献１】
特開平１−２２００４４号公報
【特許文献２】
特開平３−７５８４０号公報
【特許文献３】
特開平６−２１４７７５号公報
【０００６】
【発明が解決しようとする課題】
コンパイラの機能不良を摘出するには、テストプログラムを多数作成しテストを実施する必要がある。しかも近年の計算機アーキテクチャの複雑化に伴い、コンパイラ機能も複雑化し、コンパイラの全機能を十分にテストするには、上記従来のように人手によりテストプログラムを作成していたのでは、その工数は膨大になる。従って、コンパイラの出荷前に十分な機能検証が出来ない惧れがある。
【０００７】
これに対処するため、上述のような計算機によるテストプラグラムの自動生成方法が提案されてきた。しかしながら、上述の方法はテストプログラムの単一の文を対象としている。摘出困難で重大な機能上の不具合は一般にはプログラム構造が複雑な場合であり、単一文内に閉じて発生するものは少なく、複数の文にまたがって条件が重なったときに発生する。この種の機能上の不具合は従来の主に単一文を生成対象としてきた計算機による自動生成方法では、摘出するのは困難である。
【０００８】
【課題を解決するための手段】
本発明のテストプログラムの自動生成方法では、複数のプログラムの部分的な記述（小手続き記述、プログラムセルと呼ぶテストプログラムの要素）を、乱数を用いて選択し、組み合わせて、テストプログラムを生成する。
【０００９】
【発明の実施の形態】
以下、本発明の実施例を図面を用いて説明する。
図１は、本発明のテストプログラム自動生成方法を実施してコンパイラのテストプログラムを自動生成するテストプログラム発生器１００の構成例を示した図である。本実施例で示すテストプログラム発生器１００は、例えばパーソナルコンピュータ上で動作するソフトウェアにより実現される。
【００１０】
図１において、プログラムセル（単にセルとも言う）情報１１０とは、複数のプログラムの部分的な記述に関する情報の集まりであり、コンピュータの記憶装置に格納される。プログラムセルとは、図３、図４、図５図１１を用いて詳細に後述するが、テストプログラムを構成する構成要素であり、各セルはセル重み情報１１１にてセル重みが規定されている。セル重みは、プログラムセルの集まりから特定のプログラムセルを乱数を用いて選択する時に、セル重みが重いほど当該セルが選択され易くなるよう取り扱われる。乱数発生器１２０により発生された乱数を基にプログラムセル組合せ器１３０にて、プログラムセルを選択し、該プログラムセルを組み合わせてテストプログラム１４０を生成する。
【００１１】
重み付けは、例えば、以前にテストプログラムのバグを発見出来たセルや、バグを発見出来そうと予測されるセルに対して与えられる。重み付けはテスト毎に変更可能である。
【００１２】
図２は、図１で説明したテストプログラム発生器１００を組込んだコンパイラ検査システムの構成例を示した図である。本システムは、例えばパーソナルコンピュータ上で動作するソフトウェアにより実現される。該テストプログラム発生器１００の出力であるテストプログラム１４０をテスト実行器２２０に入力する。テスト実行器２２０内では、検証対象コンパイラに対してテストプログラムを入力し、コンパイルを実施する２３０。コンパイルをして得られる実行形式ファイルを実行し２４０、その結果を実行結果２６０として記憶装置に格納する。
【００１３】
他方、同一のテストプログラム１４０を期待値発生器２１０に入力する。期待値発生器２１０は、例えば使用実績のあるコンパイラを用いてテストプログラムをコンパイルし、コンパイルして得られる実行形式ファイルを実行することで実現できる。テストプログラム１４０を期待値発生器２１０に入力して得られた期待値２５０と該実行結果２６０とを結果比較器２７０に入力し、比較した結果を検査結果２８０として計算機の記憶装置に格納する。
【００１４】
セル単体のテストは図７に後述のテストプログラムの作成に先立ってセル自体の正しさをチェックするためのものである。上記のテストプログラムの検査結果は複数のセルを組み合わせて１つのテストプログラムとして実行させた結果であるが、どのセルで異常があったかは分かるようになっている。
【００１５】
図３から図６、および図１１は本発明で提案するプログラムセルの一例を、ＰＡＤ図を用いて示したものである。以下ではプログラムセルを基本セル、制御セル、関数セル、宣言・定義セルの４種類に分類し説明する。
【００１６】
図３は、基本セルの構成例を示したＰＡＤ図である。基本セルは、「変数他の定義と初期値設定」３２０と「実行文」３３０と「実行結果の表示、保存」３４０が実行順序に従って記述されているプログラムセルである。さらに基本セルを単体でコンパイル・実行する場合に必要な「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０を含む。コンパイル時のオプション指定により「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０を制御し、基本セル単体でのコンパイルと動作確認を可能にする。
「単体動作時に必要な記述１」３１０は、例えば、
2004227129.tif 000003
と記述できる。また「単体動作時に必要な記述２」３５０は、例えば
2004227129.tif 000004
と記述できる。トークン  ＿ＣＥＬＬ＿ＣＯＭＰＩＬＥ＿ＣＨＥＣＫ＿  が定義されている時のみセル単体でのコンパイル・実行が可能である。プログラムセルを組み合わせたテストプログラムをコンパイル・実行する時は、トークン  ＿ＣＥＬＬ＿ＣＯＭＰＩＬＥ＿ＣＨＥＣＫ＿を定義しない。
【００１７】
「変数他の定義と初期値設定」３２０では該基本セルを計算機上で翻訳・実行する場合に必要な変数他の定義と初期値設定のための記述である。変数の定義のほか定数やマクロなどの定義も含まれる。
【００１８】
「実行結果の表示、保存」３４０記述は、基本セルの実行結果を計算機に接続する表示装置に表示し、また記憶装置に格納するための記述である。これによりプログラムセルが組込まれたテストプログラムを実行した場合、テスト実行者がテスト実行時にテストプログラムの動作状況を逐一把握できる。
【００１９】
図４と図５は、制御セルの構成例を示したＰＡＤ図である。本実施例では、制御セルを図４に示す選択セルと図５に示す反復セルに分類した。いずれも「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０が、記述として組込まれているため、コンパイル時にオプションを指定することにより「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０を制御し、制御セル単体でのコンパイルと動作を確認することができる。
【００２０】
図４は選択セルの構成例を示したＰＡＤ図である。「変数他の定義と初期値設定」４１０は、基本セルの場合と同様に、該選択セルを計算機上で翻訳・実行する場合に必要な変数他の定義と初期値設定のための記述である。「選択」４２０は、条件の記述と該条件に応じて「実行文」４３０を起動する記述である。選択セルには、「他のプログラムセル」４４０を入れ子で組み込むことが可能である。他のプログラムセルが組み込まれていなくともこの選択セルは実行出来る。「実行結果の表示、保存」４５０は、基本セルと同様に、選択セルの実行結果を計算機に接続する表示装置に表示し、また記憶装置に格納するための記述である。
【００２１】
図５は反復セルの構造を示したＰＡＤ図である。「変数他の定義と初期値設定」５１０は、基本セルや制御セルと同様に、該反復セルを計算機上で翻訳・実行する場合に必要な変数他の定義と初期値設定のための記述である。「反復」５２０は、「実行文」５３０を反復して起動するための記述である。反復セルには、選択セルと同様「他のプログラムセル」５４０を入れ子で組込むことが可能である。「実行結果の表示、保存」５５０は、基本セルや選択セルと同様に、反復セルの実行結果を計算機に接続する表示装置に表示し、また記憶装置に格納するための記述である。
【００２２】
図６は関数セルの構造を示したＰＡＤ図である。関数セルも基本セルや制御セルと同様に単独で動作させることが可能である。「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０が組込まれているため、コンパイル時のオプション指定により「単体動作時に必要な記述１」３１０と「単体動作時に必要な記述２」３５０を制御し、関数セル単体でのコンパイルと動作を確認することができる。基本セルや制御セルと同様に「変数他の定義と初期値設定」６１０は、該関数セルを計算機上で翻訳・実行する場合に必要な変数他の定義と初期値設定のための記述である。「関数」６２０は、よそで定義された関数を呼び出すための記述である。「実行結果の表示、保存」６３０は、基本セルや制御セルと同様に、該関数セルの実行結果を計算機に接続する表示装置に表示し、また記憶装置に格納するための記述である。
【００２３】
図１１は宣言・定義セルの構造の一例を示したＰＡＤ図である。宣言・定義セルは、他のプログラムセル間で共通に利用する構造体等の宣言や関数セルの関数の定義、＃ｉｎｃｌｕｄｅ文を記述する。宣言・定義セルは、プログラムセルを組み合わせる時に必ず先頭に一つ配置される。
【００２４】
図７は、図１に示すプログラムセル組合せ器１３０で実施する処理の処理手順を示した図である。計算機上の記憶装置に格納された図３から図６および図１１に示す基本セル、制御セル、関数セル、宣言・定義セルの各プログラムセル情報１１０とセル重み情報１１１を入力として、乱数発生器１２０で生成された乱数を用いてプログラムセルを選択し、組み合わせてテストプログラム１４０を生成する。詳細は後述する。
【００２５】
図８、図９、図１０は、図７に示す処理手順を計算機のソフトウェアを用いて実現する場合に、計算機の主記憶上に実現されるテーブルの一例を示す。図８はセル管理テーブル８００の一例を示した図である。項番８１０はセルのエントリ番号が格納される。セル名称８２０にはセルの名称が格納される。セルタイプ８３０には、基本セル／制御セル／関数セル／宣言・定義セルのセルの種類が格納される。
【００２６】
セル重み８４０は、セル管理テーブルに登録されたセルの中から、乱数を用いてセルを選択する時に選択され易さを反映させるための値である。例えばセル重み２のプログラムセルは、セル重み１のプログラムセルに比較して２倍選択され易くする等が考えられる。セル記述テーブル情報８５０は、セル記述テーブル９００に関する情報を格納する。セル記述テーブル情報８５０は、ポインタ８５１と記述長８５２とから構成される。ポインタ８５１は、該当セルのセル記述テーブル９００内でのセル記述の先頭文字の番地を示し、記述長８５２は該セル記述の長さを文字数で示す。
【００２７】
図９は、セル記述テーブル９００の一例を示した図である。セル記述テーブル９００は、番地９１０とセル記述文字９２０とからなる。番地９１０はセル記述テーブル９００に格納される文字のアドレスを示し、文字９２０には、セル記述の各文字が格納される。例えば、図８の項番１のセルの実際の記述そのものは、セル記述テーブル情報８５０にあるようにポインタ８５１が０を指し、記述長８５２が１５６である。すると、図８の項番１の記述は図９の０番地から１５５番地までにあるということが分かる。ここで、文字にはセル記述に使われている英数字、空白、改行記号などセル記述に必要な情報が全て含まれる。従って図８の項番１のセルを実行するときは図９の０番地から１５５番地まで読み出される。
【００２８】
図１０は、選択セルテーブル１０００の構成例を示した図である。選択セルテーブル１０００は、実行順番１０１０と選択セルポインタ１０２０とからなる。実行順番１０１０は、図７に示す処理手順に従って、乱数を用いて選択されたプログラムセルの選択テーブル内でのエントリ順（テストプログラム中のセルの並び順）を示す。選択セルポインタ１０２０は、図７に示す処理手順に従って、乱数を用いて選択されたプログラムセルのセル管理テーブル８００の項番が格納される。
【００２９】
以下、図７に示す処理手順に従って、図８から図１０に示すテーブルを用いてプログラムセル組合せ器で実現する処理内容について説明する。
【００３０】
図７に示す処理手順において、「内部テーブルへの展開」７１０で、図１のプログラムセル情報１１０とセル重み情報１１１は、図８に示すセル管理テーブル８００と図９に示すセル記述テーブル９００に展開される。「乱数を用いたプログラムセル列の生成」７２０では、図８に示すセル管理テーブル８００に登録されたプログラムセルを対象に、乱数発生器１２０で発生させた乱数を用いてプログラムセルを選択する。この時セル管理テーブル８００のセル重み８４０に記載された値を基に、該当するプログラムセルの選択され易さを調整する。例えばセル重み３のプログラムセルの選択され易さをセル重み１のプログラムセルの３倍となる様に調整することができる。選択されたプログラムセルは選択セルテーブル１０００に登録される。即ち、実行順番１０１０にセルが選択された順を、選択セルポインタ１０２０に選択されたプログラムセルのセル管理テーブル８００内の項番を格納する。
【００３１】
選択セルテーブル１０００に登録された順序に従って、選択セルテーブル１０００に登録されたプログラムセルの最後まで、プログラムセルに対して以下の処理を実施する７３０。着目したプログラムセルの一つ手前のセルが、基本／関数セルか制御セルかの判定７４０を行ない、基本セルと関数セルの場合には、着目したプログラムセルを連接して配置７５０する。制御セルの場合は、入れ子構造となるよう着目したプログラムセルを組込む７６０。
【００３２】
以上の手順に従い組立てられたプログラムセルで構成されるテストプログラムにおいて、プログラムセル間での変数の共用化を行なう７７０。変数の共用化とはセル間で変数の名称を同じにして、前のセルの演算結果が後のセルの演算に反映できるようにすることを示す。プログラムセルは、それぞれ独自の変数を定義しているが、ここでは変数を共用化しプログラムセル間でデータのやり取りが行なえるようにする。
【００３３】
以上の処理手順従いテストプログラムを自動生成することが可能である。
【００３４】
以上のように、セルを種類毎に分け、これらから実行するセルとその実行順を決めるようにしたため、コンパイラのテストに必要な多様なテストプログラムが出来る。
【００３５】
本実施例によれば、複数のプログラムセルから、プログラムセルに付属するセル重みを基に、乱数を用いてプログラムセルを順序付けて選択し、組み合わせることにより、テストプログラムセルを自動生成することができる。これによりコンパイラをテストするに十分なテストプログラムを得ることができる。さらに、セル重みを調整することで、選択されるプログラムセルの傾向を変えることができ、例えば不良の発生傾向に応じて生成されるテストプログラムを調整することができる。従って、テストプログラム作成自動化によりテスト作成工数削減とコンパイラの網羅的なテストを可能にする。
【００３６】
付記
１．コンパイラによって翻訳され前記コンパイラのテストプログラムの要素となる小手続き記述の集合から乱数を用いて該小手続き記述を複数選択し、選択された小手続き記述を組み合わせて、手続き記述を生成するテストプログラムの自動生成方法であって、
前記小手続き記述自身が、該小手続き記述を翻訳する場合、単独で翻訳する場合と複数の小手続き記述を組み合わせて生成された新たな手続き記述を翻訳する場合を切り替えるための記述を有することを特徴とするテストプログラムの自動生成方法。
２．コンパイラによって翻訳され前記コンパイラのテストプログラムの要素となる小手続き記述の集合から乱数を用いて該小手続き記述を複数選択し、選択された小手続き記述を組み合わせて、手続き記述を生成するテストプログラムの自動生成方法であって、
前記小手続き記述は、手続きを実行順序に従って並べた小手続き記述と、手続きの繰返しを記述した小手続き記述と、選択を記述した小手続き記述とを有することを特徴とするテストプログラムの自動生成方法。
【００３７】
【発明の効果】
本発明によれば、多様なテストプログラムを自動的に作成することが出来る。
【図面の簡単な説明】
【図１】テストプログラム発生器の構成例を示す図である。
【図２】コンパイラ検査システムの構成例を示す図である。
【図３】基本セルの構成例を示す図である。
【図４】選択セルの構成例を示す図である。
【図５】反復セルの構成例を示す図である。
【図６】関数セルの構成例を示す図である。
【図７】プログラムセル組合せ器の処理手順の一例を示す図である。
【図８】セル管理テーブルの構成例を示す図である。
【図９】セル記述テーブルの構成例を示す図である。
【図１０】選択セルテーブルの構成例を示す図である。
【図１１】宣言・定義セルの構成を示す図である。
【符号の説明】
１１０…プログラムセル情報、１１１…セル重み情報、１２０…乱数発生器
１３０…プログラムセル組合せ器、１４０…テストプログラム
【図１】
2004227129.tif 000005
【図２】
2004227129.tif 000006
【図３】
2004227129.tif 000007
【図４】
2004227129.tif 000008
【図５】
2004227129.tif 000009
【図６】
2004227129.tif 000010
【図７】
2004227129.tif 000011
【図８】
2004227129.tif 000012
【図９】
2004227129.tif 000013
【図１０】
2004227129.tif 000014
【図１１】
2004227129.tif 000015