JP2015055967A - 検証用プログラム自動生成装置 - Google Patents

検証用プログラム自動生成装置 Download PDF

Info

Publication number
JP2015055967A
JP2015055967A JP2013188147A JP2013188147A JP2015055967A JP 2015055967 A JP2015055967 A JP 2015055967A JP 2013188147 A JP2013188147 A JP 2013188147A JP 2013188147 A JP2013188147 A JP 2013188147A JP 2015055967 A JP2015055967 A JP 2015055967A
Authority
JP
Japan
Prior art keywords
test
annotation
program
source code
verification program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2013188147A
Other languages
English (en)
Inventor
勝教 角崎
Katsunori Tsunosaki
勝教 角崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Solutions Ltd
Original Assignee
Hitachi Solutions Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Solutions Ltd filed Critical Hitachi Solutions Ltd
Priority to JP2013188147A priority Critical patent/JP2015055967A/ja
Publication of JP2015055967A publication Critical patent/JP2015055967A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】外的要因の状況下での動作の検証を結合試験工程よりも前の段階で行うことができる検証用プログラムを自動生成する装置を提供する。
【解決手段】テスト対象ソースコードで実行されるメソッドのテストのために作成されたテスト用プログラムにアノテーションが付与されているか否かを解析し、アノテーションが付与されている場合は、当該アノテーションに設定されているテスト実行時の状況に関する情報を取得する手段と、前記テスト対象ソースコードを読み込み、前記アノテーションが付与されていたテスト用プログラムの対象であるメソッドの次の行に、前記テスト実行時の状況に関する情報に基づいて当該状況を発生させる処理を追加することにより検証用プログラムに変換する手段と、前記検証用プログラムを出力する手段と、を備えた検証用プログラム自動生成装置である。
【選択図】図1

Description

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

Claims (1)

  1. テスト対象ソースコードで実行されるメソッドのテストのために作成されたテスト用プログラムを解析して前記テスト対象ソースコードのための検証用プログラムを自動生成する装置であって、
    前記テスト用プログラムにアノテーションが付与されているか否かを解析し、アノテーションが付与されている場合は、当該アノテーションに設定されているテスト実行時の状況に関する情報を取得する手段と、
    前記テスト対象ソースコードを読み込み、前記アノテーションが付与されていたテスト用プログラムの対象であるメソッドの次の行に、前記テスト実行時の状況に関する情報に基づいて当該状況を発生させる処理を追加することにより検証用プログラムに変換する手段と、
    前記検証用プログラムを出力する手段と、を備えたことを特徴とする
    検証用プログラム自動生成装置。
JP2013188147A 2013-09-11 2013-09-11 検証用プログラム自動生成装置 Pending JP2015055967A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013188147A JP2015055967A (ja) 2013-09-11 2013-09-11 検証用プログラム自動生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013188147A JP2015055967A (ja) 2013-09-11 2013-09-11 検証用プログラム自動生成装置

Publications (1)

Publication Number Publication Date
JP2015055967A true JP2015055967A (ja) 2015-03-23

Family

ID=52820341

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013188147A Pending JP2015055967A (ja) 2013-09-11 2013-09-11 検証用プログラム自動生成装置

Country Status (1)

Country Link
JP (1) JP2015055967A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107145437A (zh) * 2016-03-01 2017-09-08 阿里巴巴集团控股有限公司 一种java注解测试方法及装置
CN113867704A (zh) * 2021-08-31 2021-12-31 五八有限公司 一种代码测试处理方法、装置、电子设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107145437A (zh) * 2016-03-01 2017-09-08 阿里巴巴集团控股有限公司 一种java注解测试方法及装置
CN107145437B (zh) * 2016-03-01 2020-09-22 阿里巴巴集团控股有限公司 一种java注解测试方法及装置
CN113867704A (zh) * 2021-08-31 2021-12-31 五八有限公司 一种代码测试处理方法、装置、电子设备及存储介质
CN113867704B (zh) * 2021-08-31 2025-04-25 五八有限公司 一种代码测试处理方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN109063477B (zh) 一种自动化的智能合约代码缺陷检测系统和方法
CN104360920B (zh) 一种接口自动化测试方法及装置
JP5295269B2 (ja) コンポーネント・モデル基盤の仮想ソフトウェア・プラットホームを生成する方法、これを利用してソフトウェア・プラットホーム・アーキテクチャを検証する方法及びその装置
CN110633206A (zh) 用于基于等价类分析的基于自动化要求的测试用例生成的系统和方法
US8397104B2 (en) Creation of test plans
CN107145437B (zh) 一种java注解测试方法及装置
BR102016018127A2 (pt) método para projeto com base em modelo de software de segurança crítica
CN103052943A (zh) 源代码转换方法和源代码转换程序
CN108197026A (zh) 风力发电机组仿真软件测试方法、装置、设备及存储介质
CN111831554B (zh) 一种代码检查方法及装置
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
CN105468797A (zh) 一种信息处理方法及装置
JP2015011372A (ja) デバッグ支援システム、方法、プログラム及び記録媒体
Chen et al. Neurosymbolic repair of test flakiness
CN115687108A (zh) 基于uvm与fpv相结合的验证方法、平台、终端及存储介质
CN103365772B (zh) 软件测试自动评价装置以及方法
CN114647401B (zh) 适用于SysML、Simulink和AADL的分布式系统的模型验证方法
CN115629815B (zh) 可验证emmc用户接口的fpga原型验证平台
Landhäußer et al. Automated test-case generation by cloning
JP7748775B2 (ja) ワークフローのためのテスト・ハーネスを自動的に作成し、実行する方法、コンピュータ可読プログラムおよびコンピュータ可読記憶媒体
CN108897678B (zh) 静态代码检测方法和静态代码检测系统、存储设备
Naslavsky et al. Towards traceability of model-based testing artifacts
CN115809076A (zh) Ecu软件自动化集成方法及系统
JP2015055967A (ja) 検証用プログラム自動生成装置
CN112463620B (zh) 安卓软件集成测试中的覆盖率测试方法、装置

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20150406

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20150413

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20150617

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20150623