(57)【要約】【課題】外的要因の状況下での動作の検証を結合試験工程よりも前の段階で行うことができる検証用プログラムを自動生成する装置を提供する。【解決手段】テスト対象ソースコードで実行されるメソッドのテストのために作成されたテスト用プログラムにアノテーションが付与されているか否かを解析し、アノテーションが付与されている場合は、当該アノテーションに設定されているテスト実行時の状況に関する情報を取得する手段と、前記テスト対象ソースコードを読み込み、前記アノテーションが付与されていたテスト用プログラムの対象であるメソッドの次の行に、前記テスト実行時の状況に関する情報に基づいて当該状況を発生させる処理を追加することにより検証用プログラムに変換する手段と、前記検証用プログラムを出力する手段と、を備えた検証用プログラム自動生成装置である。【選択図】図１
2015055967.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象ソースコードで実行されるメソッドのテストのために作成されたテスト用プログラムを解析して前記テスト対象ソースコードのための検証用プログラムを自動生成する装置であって、
前記テスト用プログラムにアノテーションが付与されているか否かを解析し、アノテーションが付与されている場合は、当該アノテーションに設定されているテスト実行時の状況に関する情報を取得する手段と、
前記テスト対象ソースコードを読み込み、前記アノテーションが付与されていたテスト用プログラムの対象であるメソッドの次の行に、前記テスト実行時の状況に関する情報に基づいて当該状況を発生させる処理を追加することにより検証用プログラムに変換する手段と、
前記検証用プログラムを出力する手段と、を備えたことを特徴とする
検証用プログラム自動生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Java（登録商標）ソースコードを自動生成する開発モデルに対して、その自動生成されたソースコードを検証する検証用プログラムの自動生成装置に関するものである。
【背景技術】
【０００２】
Java（登録商標）アプリケーション開発におけるソースコードの自動生成について、その方法は様々である。例えば、特許文献１のように独自で自動生成処理を開発する場合や、OSS（Open Source Software）として提供されているフレームワークに備わっているコードジェネレーターを用いる場合などが挙げられる。
【０００３】
自動生成したソースコードは自動生成側で定めた規約に基づいて生成されるため、規約通りの記述を行えば期待通りのロジック生成が保証されるため、自動生成箇所に関するテストは行われないことがほとんどである。
【０００４】
ただし、自動生成であっても外的要因により挙動が変わる場面もあるため、自動生成についても外的要因による挙動パターン毎に確認テストの実施が必要となる。
【０００５】
また、本発明で使用する技術として、Java（登録商標）で提供されているアノテーションを処理するツールであるapt（Annotation Processing Tool）を利用する。アノテーションとは、あるデータに対して関連する情報（メタデータ）を注釈として付与することを意味する。aptは対象となるソースコードに付与されたアノテーションを解析し、その解析結果は、アノテーションプロセッサに渡され、アノテーションプロセッサ内でaptの解析結果を元に目的に応じた処理を実行する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平２００１−２９６９９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
自動生成装置により自動生成されたソースコードが実際に使用される工程は、結合試験工程以降である。結合試験工程では、自動生成されたソースコードとUOC（User Own Coding）の部分とを繋ぎ合わせたテストを行う。この段階において、UOC側の認識と、自動生成されたソースコードの動作仕様の差異から発生する不良が発見される場合がある。
【０００８】
例えば、自動生成されたソースコード内で実行されるメソッドは、データベースに接続し、データベース内の値を更新しコミットする処理が行われるが、外的要因によりデッドロックが発生した場合は、処理が異常終了となる。自動生成されたソースコードの動作は問題ないが、これを使用するUOC側のプログラムは、自動生成より異常終了（デッドロック等）の処理結果を応答されることを想定していない場合がある。
【０００９】
この不良は、設計段階において自動生成箇所の外的要因による動作仕様を理解していないことや仕様を誤認識していたことなどが原因と考えられる。これらの問題はプロジェクト後半で発見されることが多く、設計見直しなどの手戻り工数が増加するなどの問題となっている。
【００１０】
本発明の目的は、外的要因の状況を作り出す検証用プログラムを自動生成させることにより、その状況下での動作の検証を結合試験工程よりも前の段階で行うことができる、検証用プログラム自動生成装置を提供することである。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明の検証用プログラム自動生成装置では、Java（登録商標）で提供されているアノテーションと呼ぶ機能を利用する。
【００１２】
テスト実施者は、予めテスト対象となる自動生成されたソースコード内のメソッドを実行するテスト用プログラムを作成しておく必要がある。このテスト用プログラムにテスト実行時の状況を指定できるアノテーションを付与する。このアノテーションと実行時の状況を作り出すロジックとをアノテーションプロセッサに実装することで、実行時の状況を作り出す検証用プログラムを自動生成する。
【００１３】
例えば、テスト実行時の外的要因の状況の一つとして、トランザクション管理内にあるテーブルのロック状況を指定することができるテーブルロックアノテーションを作成する。テーブルロックアノテーションは、テーブルがロックされているかどうかの状態を示す要素を保持しており、テスト実施者は、このテーブルロックアノテーションを用いて、テスト対象ソースコード（自動生成されたソースコード）が実行される時のテーブルのロック状況に応じた期待される動作の検証を行うことが可能となる。
【００１４】
詳しくは、テスト実施者がテスト対象となる自動生成されたソースコード内のメソッドを実行するテスト用プログラムを作成するときに予め用意されたアノテーション（例えば、テーブルロックアノテーション）を当該テスト用プログラムに付与することにより、検証用プログラム自動生成装置は、Java（登録商標）コンパイル時に、テスト用プログラムに付与されたアノテーションを解析するアノテーションプロセッサ部による処理を実行し、アノテーションプロセッサ部による処理により、そのアノテーションが指定する状況を作り出す処理がテスト用プログラムに追加された検証用プログラムを自動生成する。
【００１５】
本発明の態様をまとめると、テスト対象ソースコードで実行されるメソッドのテストのために作成されたテスト用プログラムを解析して前記テスト対象ソースコードのための検証用プログラムを自動生成する装置であって、前記テスト用プログラムにアノテーションが付与されているか否かを解析し、アノテーションが付与されている場合は、当該アノテーションに設定されているテスト実行時の状況に関する情報を取得する手段と、前記テスト対象ソースコードを読み込み、前記アノテーションが付与されていたテスト用プログラムの対象であるメソッドの次の行に、前記テスト実行時の状況に関する情報に基づいて当該状況を発生させる処理を追加することにより検証用プログラムに変換する手段と、前記検証用プログラムを出力する手段と、を備えたことを特徴とする検証用プログラム自動生成装置である。
【発明の効果】
【００１６】
以上のように、本発明の検証用プログラム自動生成装置によれば、次のような効果がある。
テスト実施者は、予め用意されたアノテーションを使用することで、テスト実行時の外的要因の状況を指定でき、指定した状況を作り出すための検証用プログラムを自動生成することができる。これにより、テスト実施者は、自動生成装置やフレームワークからソースコードが自動生成された段階であれば、それらをテストする検証用プログラムを作成することによりテスト実行可能なため、本来、結合試験工程以降で発見されるような設計不良を、従来より早い段階で発見することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、検証用プログラム自動生成装置の概略構成及び処理の流れを示すブロック図である。
【図２】図２は、アノテーション定義を示したJava（登録商標）ファイルの例である。
【図３】図３は、テスト対象ソースコードを示したJava（登録商標）クラスファイルの例である。
【図４】図４は、テスト用プログラムを示したJava（登録商標）クラスファイルの例である。
【図５】図５は、アノテーションプロセッサ部が起動したときのアノテーション解析における処理の概要を示すフローチャートである。
【図６】図６は、アノテーションプロセッサ部が起動したときの検証用プログラム自動生成処理の概要を示すフローチャートである。
【図７】図７は、自動生成された検証用プログラムを示したJava（登録商標）クラスファイルの例である。
【発明を実施するための形態】
【００１８】
以下、本発明の検証用プログラム自動生成装置について、一例を示した図面を用いて詳細に説明する。
図１は、検証用プログラム自動生成装置の概略構成及び処理の流れを示すブロック図である。
検証用プログラム自動生成装置は、アプリケーション開発端末１０１と、コンパイル部１０２と、アノテーションプロセッサ部１０３と、アノテーション解析部１０４と、検証用プログラム自動生成処理部１０５とから構成されている。
【００１９】
また、アノテーション定義１０６は、本発明の特徴の一つであり、ここで定義されているアノテーションが、アノテーションプロセッサ部１０３にて処理対象となる。本例では、テスト実行時の状況の一つとして、テーブルロックアノテーションを独自に作成する。アノテーションプロセッサ部１０３ではこのテーブルロックアノテーションが付与されたソースコードが処理対象となる。
【００２０】
また、テーブルロックアノテーション以外にも、テスト実行時の状況を指定できる汎用的なアノテーションとそのアノテーションを解析するロジックを考慮し作成しておけば、その状況に合わせた検証用プログラムを自動生成することも可能である。
【００２１】
テスト実施者は、テスト対象ソースコード１１１で実行されるメソッドを呼び出し、そのメソッドの実行結果を比較するテストコードが記載された、テスト用プログラム１２１を予め作成しておく。テスト実施者は、アプリケーション開発端末１０１を使用し、予め用意されているアノテーション定義１０６をテスト用プログラム１２１のテストメソッドに付与し、アノテーション定義１０６が付与されたテスト用プログラム１２１をjavacコマンドよりコンパイルする。javacコマンドは、Java（登録商標）プログラムが書かれているソースファイル(.javaファイル)を読み込んで、クラスファイル(.classファイル)を生成するツールである。
【００２２】
これにより、アノテーションプロセッサ部１０３のアノテーション解析部１０４が実行され、アノテーション解析部１０４ではテスト用プログラム１２１を探索し、処理対象となるアノテーションが付与されているかどうかを調べ、処理対象となるテーブルロックアノテーションが付与されている場合、テーブルロックアノテーションが保持している要素の情報を取得する。そして、検証用プログラム自動生成処理部１０５にて、アノテーション解析部１０４で取得した情報とテスト対象ソースコード１１１からテスト実行時の状況を作り出す処理とを埋め込んだプログラムに変換し、検証用プログラム１３１として出力する。
【００２３】
図２は、aptで使用するアノテーション定義１０６を示したJava（登録商標）ファイルの例である。本例の検証用プログラム自動生成装置で使用するアノテーションは、テーブルロックアノテーションであり、テーブルロックアノテーションはロックするテーブル名称を複数指定することができる構成要素２０１を持っている。また、構成要素２０２で示したアノテーションは、Java（登録商標）で予め定義されている標準メタアノテーション型であり、このテーブルロックアノテーションが、
（１）このアノテーションはメソッドに対して適用することができる
（２）このアノテーションで付加された情報はクラスファイルに記録され、さらにクラス使用時にはJVM（Java（登録商標）Virtual Machine）にも情報がロードされる
ということを示している。
【００２４】
図３は、テスト対象ソースコード１１１を示したJava（登録商標）クラスファイルの例である。テスト対象ソースコード１１１はプログラム自動生成装置などから自動生成されたソースコードのことであり、テスト実施者はこのソースコード内に記述されているメソッドのテストを行う。例えば図３では、対象のメソッド内で、データベースへの接続処理（記載３０１）を行い、データベースの更新処理（記載３０２）を行い、次に、更新した値を取得する処理（記載３０３）を行う。最後に、取得した値を呼び出し元に返却する処理（記載３０４）を行う。
【００２５】
図４は、テスト用プログラム１２１を示したJava（登録商標）クラスファイルの例である。テスト用プログラム１２１はテスト実施者が予め作成するものである。例えば、図３のテスト対象ソースコード１１１のテスト用プログラムは、図４のようになる。記載４０１のテストメソッドの内容は、テスト対象となるメソッドを実行したときの期待値を設定しておき（記載４０２）、次に、テスト対象ソースコード１１１のインスタンスを生成する（記載４０３）。インスタンスの生成は完全修飾名を記載する。テスト実施者は、テスト対象ソースコード１１１を使用してテストを実行するか、検証用プログラム１３１を使用してテストを実行するかを決定する際、完全修飾名の指定によりテスト対象を変更する。次に、実行するメソッドを呼び出す（記載４０４）。最後に、記載４０４で実行したメソッドの戻り値と記載４０２で設定した期待値を比較する（記載４０５）ことによりテストを行うものである。このテストメソッドに図２のアノテーション定義１０６を付与する。
【００２６】
記載４１１はテーブルロックアノテーションの付与方法である。記載４１１のように付与した場合、「記載４０１で実行されるメソッドの前に"Atable"のロック処理を行う」という意味になる。
【００２７】
また、テスト用プログラム１２１にはテストメソッドを複数記述可能であり、記載４２１のようにテーブルロックアノテーション定義を付与しない場合のテストも可能である。テーブルロックアノテーションを付与しない場合、検証用プログラムは自動生成されないため、テスト対象ソースコード１１１のメソッドの通常時（テーブルロックなどが発生していない状況）の動作を確認するテストとなる。
【００２８】
図５は、アノテーションプロセッサ部１０３が起動したときのアノテーション解析部１０４の処理の概要を示すフローチャートである。
まず、テスト用プログラム１２１のテストメソッドに、テーブルロックアノテーションが付与されているかチェックする（ステップ５０１）。次に、テーブルロックアノテーションが付与されている場合は、テーブルロックアノテーションの引数に設定されている値を取得する（ステップ５０２）。テーブルロックアノテーションがテスト用プログラム１２１のテストメソッドに付与されていない場合は、何も処理しない。
【００２９】
図６は、アノテーションプロセッサ部１０３が起動したときの、検証用プログラム自動生成処理部１０５の概要を示すフローチャートである。
まず、アノテーション解析部１０４の処理により、テーブルロックアノテーションの情報が取得できているかどうかをチェックする（ステップ６０１）。
次に、テーブルロックアノテーションの情報が取得できている場合、テスト対象ソースコード１１１の読込を行う（ステップ６０２）。テスト対象ソースコード１１１を１行ずつ読み込み、テスト対象のメソッドが含まれている行に一致したら、その次の行に、テーブルロックアノテーションの引数に指定したテーブル名称をロックするという処理を追加する検証用プログラムへの変換処理を行う（ステップ６０３）。最後に、所定のディレクトリに検証用プログラムの出力処理を行う（ステップ６０４）。
【００３０】
図７は、自動生成された検証用プログラム１３１を示したJava（登録商標）クラスファイルの例である。検証用プログラム１３１はメソッド実行直後に「"Atable"のロック処理（記載７０１）」が追加されたソースコードとなる。それ以外の処理はテスト対象ソースコード１１１と変わらない。
【００３１】
テスト実施者は、テスト用プログラム１２１の記載４０３のインスタンス生成時の処理を変更（完全修飾クラス名を検証用プログラム１３１の格納先に合わせる）し、テストを実行する。
【符号の説明】
【００３２】
１０１：アプリケーション開発端末、１０２：コンパイル部、１０３：アノテーションプロセッサ部、１０４：アノテーション解析部、１０５：検証用プログラム自動生成部、１０６：アノテーション定義、１１１：テスト対象ソースコード、１２１：テスト用プログラム、１３１：検証用プログラム
【図１】
2015055967.tif 000003
【図２】
2015055967.tif 000004
【図３】
2015055967.tif 000005
【図４】
2015055967.tif 000006
【図５】
2015055967.tif 000007
【図６】
2015055967.tif 000008
【図７】
2015055967.tif 000009