(57)【要約】      （修正有）【課題】テキストベースの入力及び予想データで値及び型の不一致を検出できるJava言語プログラムのテストツールを提供する。【解決手段】XML形式の入力及び予想データを格納するディレクトリ28と、入力データをJava形式に変換してテスト対象プログラム22に与える入力データ変換部12と、テスト対象プログラム22から返されたデータを、オブジェクトには１または複数のフィールド名が、フィールドにはフィールド名と型、フィールドが保持する値またはオブジェクトへの参照情報が格納される第三のデータ形式に変換する出力データ変換部14と、予想データを第三のデータ形式に変換する予想データ変換部16と、出力データの型及び値の少なくとも一方に予想データとの不一致があった場合に、その不一致部分が明示された検証結果データを生成するデータ検証部18と、検証結果データをXML形式のデータに変換し、ディレクトリ28に格納する検証結果データ変換部20とを備えた。【選択図】        図１
2007058383.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト指向言語でコーディングされたテスト対象プログラムに対し、テスト用の入力データを与えて所定の処理を実行させ、その処理結果である出力データと予め準備された予想データとを比較し、その異同を判定するプログラムの動作検証システムであって、
XML形式で記述された入力データを格納しておく記憶手段と、
XML形式で記述された予想データを格納しておく記憶手段と、
上記XML形式の入力データを上記オブジェクト指向言語の仕様に適合したデータ形式に変換し、テスト対象プログラムに与える入力データ変換手段と、
当該テスト対象プログラムから返された多様な型のオブジェクトを連係させた構造を備えた出力データを、オブジェクトとフィールドの２種類の型の要素を連係させた構造を備え、上記オブジェクトには１または複数のフィールド名が格納されており、上記フィールドにはフィールド名、フィールドの型、フィールドが保持する値またはオブジェクトへの参照情報が格納されている第三のデータ形式に変換する手段と、
上記XML形式の予想データを、上記と同様の第三のデータ形式に変換する手段と、
この第三のデータ形式の予想データと第三のデータ形式の出力データとを比較し、出力データのフィールドに格納された型及び値の少なくとも一方に、対応する予想データのフィールドに格納された型及び値との不一致があった場合に、その不一致部分が明示された検証結果データを生成するデータ検証手段と、
この検証結果データをXML形式のデータに変換し、所定の記憶手段に格納する手段と、
を備えたことを特徴とするプログラムの動作検証システム。
【請求項２】
上記のデータ検証手段は、上記第三のデータ形式に変換された出力データの中で、上記第三のデータ形式に変換された予想データに対応していないデータを比較対象から除外し、残されたデータと予想データとの異同を判定することを特徴とする請求項１に記載のプログラムの動作検証システム。
【請求項３】
上記の入力データ変換手段は、XML形式の入力データを一旦上記と同様の第三のデータ形式に変換した後、これをオブジェクト指向言語の仕様に適合したデータ形式に変換することを特徴とする請求項１または２に記載のプログラムの動作検証システム。
【請求項４】
オブジェクト指向言語でコーディングされたテスト対象プログラムに対し、テスト用の入力データを与えて所定の処理を実行させ、その処理結果としての出力データと予め準備された予想データとを比較し、その異同を判定するプログラムの動作検証システムを実現するためのコンピュータプログラムであって、
コンピュータを、
XML形式で記述された入力データを格納しておく記憶手段、
XML形式で記述された予想データを格納しておく記憶手段、
上記XML形式の入力データを上記オブジェクト指向言語の仕様に適合したデータ形式に変換し、テスト対象プログラムに与える手段、
当該テスト対象プログラムから返された多様な型のオブジェクトを連係させた構造を備えた出力データを、オブジェクトとフィールドの２種類の型の要素を連係させた構造を備え、上記オブジェクトには１または複数のフィールド名が格納されており、上記フィールドにはフィールド名、フィールドの型、フィールドが保持する値またはオブジェクトへの参照情報が格納されている第三のデータ形式に変換する手段、
上記XML形式の予想データを、上記と同様の第三のデータ形式に変換する手段、
この第三のデータ形式の予想データと第三のデータ形式の出力データとを比較し、出力データのフィールドに格納された型及び値の少なくとも一方に、対応する予想データのフィールドに格納された型及び値との不一致があった場合に、その不一致部分が明示された検証結果データを生成するデータ検証手段、
この検証結果データをXML形式のデータに変換し、所定の記憶手段に格納する手段、
として機能させることを特徴とするプログラムの動作検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラムの動作検証システム及び動作検証プログラムに係り、特に、Java（登録商標／以下同）等のオブジェクト指向言語でコーディングされたプログラムの動作を検証するための技術に関する。
【背景技術】
【０００２】
プログラムコードに内在するバグを発見するため、テストツールを利用した単体テストがプログラムコードの記述後に行われるのが一般的である。
例えば、Java言語に基づいてコーディングされたプログラムに関しては、JUnitと呼ばれるオープンソースのテストツールが存在している（非特許文献１参照）。
このテストツールは、プログラマによって与えられた入力データをテスト対象プログラムに投入し、その処理結果である出力データとプログラマが事前に用意した予想データを比較し、成功または失敗の判定結果を表示する機能を備えている。
【非特許文献１】ソフトウェア・テストPRESS Vol.1（株式会社技術評論社、平成17年８月１日発行）  特集３「単体テストの体系的＆実践技法／xUnitの使い方とテスト項目の抽出方法」（Ｐ93〜114）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このテストツールは、Java等の統合開発環境であるEclipseに最初から組み込まれているため、プログラマはテスト対象プログラムのコーディングとテストの実行を同一環境上で済ますことができる。
しかしながら、このテストツールの場合、特定の入力データを特定のプログラムに投入し、その処理結果である出力データと特定の予想データとを照合することを指示するテストコードをJavaで記述する必要があり、プログラマに大きな負担を強いていた。
【０００４】
すなわち、オブジェクト指向言語の場合には、単純なデータの組合せであっても、各データが固有の型（クラス）を実体化させたオブジェクトとして表現されるという特性を備えている。
例えば、図８に示す１件の商品発注トランザクションデータをJavaのデータとして表現すると、図９に示すように、複数のオブジェクトが相互に連係したツリー構造となる。
これらのオブジェクトの中、最下位に位置するObject4〜Object9のフィールドには、"001"や"商品Ａ"等の具体的な値が保持されている。また、より上位に位置するObject1〜Object3は値を保持したオブジェクトの位置付けや意義を表現するものであり、それぞれのフィールドには他のオブジェクトとの対応関係が定義されている。さらに、各オブジェクトのフィールドには、それぞれの型（クラス）も定義されている。
【０００５】
上記のように、オブジェクト指向言語の下では、比較的単純なデータであっても、具体的な値を保持する最下位のオブジェクトと、各値の位置付けや意義を表す上位のオブジェクトとをツリー状に連係させた複雑な構造を備えることとなり、各オブジェクトは様々な型（クラス）を実体化させたものとして存在しているため、プログラマはこれらのことを意識した上でテストコードを記述する必要があった。
特に、上記のテストツールの場合、基本的には出力データと予想データの値を単純に比較して一致／不一致を判定するものであり、データの型の一致／不一致について検証するためにはより複雑なコーディングが要求されていた。
【０００６】
また従来のテストツールでは、出力データが多数あり、その中の幾つかのデータについてのみ検証を行いたい場合には、事前に不要な出力データを排除することを指示するコードを記述する必要があり、これを怠ると予想データを準備していない出力データとの間で不一致と判定されることになる。
【０００７】
この発明は、従来のテストツールを用いた動作検証テストにおける上記の問題を解決するために案出されたものであり、Java言語等によってテストコードを一々記述することなく、テキストベースの入力データ及び予想データを準備することにより、値の不一致はもちろん型の不一致をも検出できるテストツールを提供することを目的としている。
また、多数の出力データの中で、予想データに対応するデータのみを抽出した後、相互の一致／不一致を判定することを可能とするテストツールを提供することをも目的としている。
【課題を解決するための手段】
【０００８】
上記の目的を達成するため、請求項１に記載したプログラムの動作検証システムは、オブジェクト指向言語でコーディングされたテスト対象プログラムに対し、テスト用の入力データを与えて所定の処理を実行させ、その処理結果である出力データと予め準備された予想データとを比較し、その異同を判定するプログラムの動作検証システムであって、XML形式で記述された入力データを格納しておく記憶手段と、XML形式で記述された予想データを格納しておく記憶手段と、上記XML形式の入力データを上記オブジェクト指向言語の仕様に適合したデータ形式に変換し、テスト対象プログラムに与える入力データ変換手段と、当該テスト対象プログラムから返された多様な型のオブジェクトを連係させた構造を備えた出力データを、オブジェクトとフィールドの２種類の型の要素を連係させた構造を備え、上記オブジェクトには１または複数のフィールド名が格納されており、上記フィールドにはフィールド名、フィールドの型、フィールドが保持する値またはオブジェクトへの参照情報が格納されている第三のデータ形式に変換する手段と、上記XML形式の予想データを、上記と同様の第三のデータ形式に変換する手段と、この第三のデータ形式の予想データと第三のデータ形式の出力データとを比較し、出力データのフィールドに格納された型及び値の少なくとも一方に、対応する予想データのフィールドに格納された型及び値との不一致があった場合に、その不一致部分が明示された検証結果データを生成するデータ検証手段と、この検証結果データをXML形式のデータに変換し、所定の記憶手段に格納する手段とを備えたことを特徴としている。
【０００９】
また、請求項２に記載したプログラムの動作検証システムは、請求項１のシステムであって、さらに上記のデータ検証手段が、上記第三のデータ形式に変換された出力データの中で、上記第三のデータ形式に変換された予想データに対応していないデータを比較対象から除外し、残されたデータと予想データとの異同を判定することを特徴としている。
【００１０】
また、請求項３に記載したプログラムの動作検証システムは、請求項１または２のシステムであって、さらに上記の入力データ変換手段が、XML形式の入力データを一旦上記と同様の第三のデータ形式に変換した後、これをオブジェクト指向言語の仕様に適合したデータ形式に変換することを特徴としている。
【００１１】
請求項４に記載したプログラムの動作検証プログラムは、オブジェクト指向言語でコーディングされたテスト対象プログラムに対し、テスト用の入力データを与えて所定の処理を実行させ、その処理結果としての出力データと予め準備された予想データとを比較し、その異同を判定するプログラムの動作検証システムを実現するためのコンピュータプログラムであって、コンピュータを、XML形式で記述された入力データを格納しておく記憶手段、XML形式で記述された予想データを格納しておく記憶手段、上記XML形式の入力データを上記オブジェクト指向言語の仕様に適合したデータ形式に変換し、テスト対象プログラムに与える手段、当該テスト対象プログラムから返された多様な型のオブジェクトを連係させた構造を備えた出力データを、オブジェクトとフィールドの２種類の型の要素を連係させた構造を備え、上記オブジェクトには１または複数のフィールド名が格納されており、上記フィールドにはフィールド名、フィールドの型、フィールドが保持する値またはオブジェクトへの参照情報が格納されている第三のデータ形式に変換する手段、上記XML形式の予想データを、上記と同様の第三のデータ形式に変換する手段、この第三のデータ形式の予想データと第三のデータ形式の出力データとを比較し、出力データのフィールドに格納された型及び値の少なくとも一方に、対応する予想データのフィールドに格納された型及び値との不一致があった場合に、その不一致部分が明示された検証結果データを生成するデータ検証手段、この検証結果データをXML形式のデータに変換し、所定の記憶手段に格納する手段として機能させることを特徴としている。
【発明の効果】
【００１２】
請求項１に記載したプログラムの動作検証システム及び請求項４に記載したプログラムの動作検証プログラムによれば、プログラムの動作検証に際しテキストベースのXML文書によって入力データ及び予想データを記述すれば済み、Java等のオブジェクト指向言語でテストコードを記述する必要がないため、プログラマに対する負担を大幅に軽減することができる。
また、XML形式の予想データ中に型を指定しておけば、予想データと出力データ間における値の不一致のみならず、型の不一致をも検出できる利点を備えている。
上記のように、XML文書で記述された予想データとテスト対象プログラムから返された出力データとを、一旦第三のデータ形式に変換し両者の言語レベルを揃えた上で相互の異同を判定する方式を採用しているため、データ検証手段を実現するためのプログラムコードを簡素化することができ、またデータ検証手段における比較処理の簡素化・効率化をも実現可能となる。
【００１３】
請求項２に記載したプログラムの動作検証システムにあっては、予想データ中に記述されたデータに対応する出力データのみが比較対象として自動的に抽出される仕組みを備えているため、意図しない出力データとの間で不一致の判定結果が発せらることを防止することができる。
【００１４】
請求項３に記載したプログラムの動作検証システムにあっては、XML形式の入力データをデータ構造上の大きな差異を有しているオブジェクト指向言語のデータ形式に変換するに際し、一旦XML形式の入力データを中間的な構造を備えた第三のデータ形式に変換した後、これをオブジェクト指向言語形式の入力データに変換する方式を採用しているため、入力データ変換手段を実現するためのプログラムコードを簡素化することができ、また入力データ変換手段における変換処理の簡素化・効率化をも実現可能となる。
【発明を実施するための最良の形態】
【００１５】
図１は、この発明に係るプログラムの動作検証システム10の機能構成を示すブロック図であり、このシステム10は、入力データ変換部12と、出力データ変換部14と、予想データ変換部16と、データ検証部18と、検証結果データ変換部20とを備えている。
上記入力データ変換部12、出力データ変換部14、予想データ変換部16、データ検証部18、検証結果データ変換部20は、コンピュータ（PC等）のCPUが、OS及び専用のアプリケーションプログラムに従って必要な処理を実行することによって実現される。このアプリケーションプログラムは、Javaによってコーディングされている。
【００１６】
このシステム10を利用するに際し、まずテスト実施者は、テスト対象プログラム22に所定の処理を実行させるための入力データと、処理結果として出力されるであろう予想データをXML形式で記述し、この入力データのXMLファイル24及び予想データのXMLファイル26を所定のディレクトリ28に格納しておく。
XML文書は、基本的にはテキスト文であるため内容を理解しやすく、記述も容易である。また、タグによって各データの意義や位置付けをネスト構造として表現できるため、オブジェクト指向言語のデータ形式とも馴染みやすい利点を備えている。
【００１７】
一つのテスト対象プログラム22に対して複数のテスト項目が設定されている場合には、テスト項目毎に入力データ及び予想データのXMLファイル24，26を準備し、ディレクトリ28に格納しておく。
また、テスト対象プログラム22が複数存在する場合には、各テスト対象プログラムのテスト項目毎に入力データ及び予想データのXMLファイル24，26を準備し、ディレクトリ28に格納しておく。
【００１８】
必要な入力データ及び予想データのXMLファイル24，26がディレクトリ28に格納され、テスト実施者によって検証開始のコマンドが入力されると、このシステム10によるプログラムの動作検証が実行される。
以下、図２のフローチャートに従い、このシステム10における処理手順を説明する。
【００１９】
まず、入力データ変換部12によって最初の入力データのXMLファイル24が読み込まれ、XML形式で記述された入力データが、一旦このシステム独自のデータ形式であるMast形式（第三のデータ形式）に変換される（Ｓ10）。図３に、XML形式の入力データの一例を示す。また、Mast形式の詳細については後述する。
つぎに入力データ変換部12は、このMast形式の入力データをJavaの言語仕様に準拠したデータ形式に変換した後（Ｓ11）、このJava形式の入力データ29を最初のテスト対象プログラム22に投入し（Ｓ12）、必要な処理を実行させる。
【００２０】
同時に、予想データ変換部16が予想データのXMLファイル26を読み込み、XML形式で記述された予想データをMast形式に変換する（Ｓ14）。
予想データ変換部16によってMast形式に変換された予想データ30は、データ検証部18に出力される（Ｓ16）。
【００２１】
図４は予想データの一例を示すものであり、図８に示した商品発注トランザクションデータをXML形式で表現したものである。
これに対し図５は、このXML形式の予想データをMast形式の予想データに変換した場合のイメージを示しており、各データ要素がオブジェクトとフィールドの２つの型（クラス）によって表現されている。
ここで、オブジェクトクラスは図６(a)に示すように特定フィールドとの連係情報が格納されており、フィールドクラスは図６(b)に示すようにフィールド名、フィールドの型（クラス）、フィールドが保持する値またはオブジェクトへの参照情報が格納されている。
【００２２】
この結果、図５においては、末端に配置されたフィールドfi4〜fi9にはフィールド名、型及び具体的な値がそれぞれ格納されている。
また、オブジェクトob2とオブジェクトob3との間に位置するフィールドfi2には、フィールド名としてitemが、型（クラス）としてItemが定義され、具体的な値の代わりに下位のオブジェクトob3への参照情報（ref）が記述されている。
また、オブジェクトob2とオブジェクトob4との間に位置するフィールドfi3には、フィールド名としてsupplierが、型（クラス）としてSupplierが定義され、具体的な値の代わりに下位のオブジェクトob4への参照情報（ref）が記述されている。
図示の通り、オブジェクトは個々の構成要素である複数のフィールドを束ね、集合体を形成する機能を果たしている。
なお、オブジェクトob1は各オブジェクト及びフィールドを一つの塊として表現するために付加されているものであり、そのフィールドfi1との対応関係が自明であるため、フィールドfi1のフィールド名はnullに設定されている。
【００２３】
テスト対象プログラム22から出力データ31が返されると、出力データ変換部14が起動し、Java形式の出力データ31を上記と同様の構造を備えたMast形式に変換した後、この出力データ32をデータ検証部18に出力する（Ｓ18）。
これに対しデータ検証部18は、Mast形式の出力データ32と予想データ30を比較し、以下の処理を実行する。
(1) 出力データの中で、予想データとして定義されたもののみを抽出し（Ｓ20）、それ以外のデータを除去する。
(2) 抽出した出力データと予想データとを比較し（Ｓ22）、出力データのフィールドに格納された型及び値の少なくとも一方に、対応する予想データのフィールドに格納された型及び値との不一致があった場合には（Ｓ24）、その不一致部分が明示された検証結果データ34をMast形式で生成し、検証結果データ変換部20に出力する（Ｓ26）。
【００２４】
これを受けた検証結果データ変換部20は、検証結果データ34をMast形式からXML形式に変換した後、このXMLファイル36をディレクトリ28に格納する（Ｓ28）。
図７は、このXML形式に変換された検証結果データの一例を示すものであり、item（商品）に属するitemName（商品名）の値が予想された「商品Ａ」ではなく「商品Ｂ」であったこと、及びsupplier（取引先）に属するorderQuantity（発注数）の型が予想された「Integer」ではなく「String」であったことが示されている。
なお、出力データと予想データとの間に不一致が全く存在しない場合には、上記の検証結果データ34がデータ検証部18から出力されることはなく、したがってディレクトリ28に検証結果のXMLファイル36が格納されることもない。
【００２５】
以上により、検証テストの一項目が完了する。
つぎのテスト項目あるいはテスト対象プログラム22に対応した入力データ及び予想データが準備されている場合（Ｓ30）、システム10は上記の処理を順次繰り返す。
【００２６】
Java形式のデータは、図９に示したように様々な型（クラス）のオブジェクトがツリー状に連係した複雑な構造を備えているが、プログラムの動作検証という目的に限ってみれば、上記のようにデータの型と値等を保持するフィールドと、これらのフィールドを束ねて集合体を形成するオブジェクトの２種類の型（クラス）で表現すれば足りる。
そして、出力データと予想データの形式をこのように２種類の型（クラス）からなる第三のデータ形式に統一したことにより、データ検証部18を実現するためのプログラムコードの簡素化が可能となり、またデータ検証部18における比較処理の簡素化・効率化をも実現できる。
【００２７】
また、XML形式のデータとJava形式のデータとの間には、データ構造上の大きな差異が存在しているが、上記のようにXML形式の入力データを中間的なデータ構造を備えたMast形式の入力データに一旦変換した後、これをJava形式の入力データに変換する方式を採用しているため、入力データ変換部12を実現するためのプログラムコードの簡素化が可能となり、また入力データ変換部12における変換処理の簡素化・効率化も実現できる。
【図面の簡単な説明】
【００２８】
【図１】この発明に係るプログラムの動作検証システムの機能構成を示すブロック図である。
【図２】このシステムにおける処理手順を示すフローチャートである。
【図３】XML形式で記述された入力データの一例を示す説明図である。
【図４】XML形式で記述された予想データの一例を示す説明図である。
【図５】XML形式の予想データをMast形式に変換した場合のイメージを示す概念図である。
【図６】オブジェクトクラスとフィールドクラスのコードを示す説明図である。
【図７】XML形式に変換された検証結果データの一例を示す説明図である。
【図８】商品発注トランザクションデータを示す説明図である。
【図９】商品発注トランザクションデータをJava形式で表現した場合のイメージを示す概念図である。
【符号の説明】
【００２９】
10 プログラムの動作検証システム
12 入力データ変換部
14 出力データ変換部
16 予想データ変換部
18 データ検証部
20 検証結果データ変換部
22 テスト対象プログラム
24 入力データのXMLファイル
26 予想データのXMLファイル
28 ディレクトリ
29 Java形式の入力データ
30 Mast形式の予想データ
31 Java形式の出力データ
32 Mast形式の出力データ
34 Mast形式の検証結果データ
36 検証結果データのXMLファイル
【図１】
2007058383.tif 000003
【図２】
2007058383.tif 000004
【図３】
2007058383.tif 000005
【図４】
2007058383.tif 000006
【図５】
2007058383.tif 000007
【図６】
2007058383.tif 000008
【図７】
2007058383.tif 000009
【図８】
2007058383.tif 000010
【図９】
2007058383.tif 000011