(57)【要約】【課題】  許容されないような異常入力を含めて多様なテストデータを生成し、テスト結果の信頼性を向上させる。【解決手段】  本発明は、テストデータ仕様を読み込み、該テストデータ仕様の値に応じて、因子のとる値（実験計画法でいう「水準」）として、該テストデータ仕様を満たす正常水準と、該テストデータ仕様を満たさない異常水準を生成し、その組み合わせに異常水準が１つでも含むものを異常入力として生成し、該異常水準を１つも含まない組み合わせを正常水準として生成し、該実行経路中に事後条件が含まれるか否かにより期待値を求め、該入力に該期待値を付与したテストデータを生成する。【選択図】  図１
2010267024.tif 000002
【特許請求の範囲】
【請求項１】
システムの設計情報を形式的な言語で記述した設計モデルの設計意図に沿って構築されたか否かを確認するためのテストデータを生成するテストデータ生成装置であって、
ユーザ端末より、ＵＭＬクラス図とアクティビティ図のみで記述した設計モデルを読み込む設計モデル読込手段と、
読み込まれた前記設計モデルからアクティビティ図をテスト対象として抽出する設計モデル分析手段と、
前記テスト対象から実行経路を抽出する実行経路抽出手段と、
テストデータ仕様が格納されたテストデータ仕様記憶手段と、
前記実行経路抽出手段から抽出された各実行経路を持つアクティビティの入力パラメータを変数（実験計画法でいう「因子」）が満たすべき実行経路の始点ノードから終点ノードを走査することにより抽出した制約条件に基づいて、前記テストデータ仕様記憶手段に格納されているテストデータ仕様を更新するテストデータ仕様生成手段と、
前記テストデータ仕様記憶手段から前記テストデータ仕様を読み込み、該テストデータ仕様の値に応じて、前記因子のとる値（実験計画法でいう「水準」）として、該テストデータ仕様を満たす正常水準と、該テストデータ仕様を満たさない異常水準を生成し、前記実行経路に対応させて該因子と該水準の組み合わせを実行経路・水準記憶手段に格納する水準生成手段と、
前記実行経路・水準記憶手段から前記因子と前記水準と前記実行経路の組み合わせを取得して、前記異常水準が１つでも含むような組み合わせを異常入力として生成し、該異常水準を１つも含まない組み合わせを正常水準として生成し、該実行経路中に事後条件が含まれるか否かにより期待値を求め、該入力に該期待値を付与したテストデータを生成し、テストデータ記憶手段に格納するテストデータ生成手段と、
前記テストデータを前記テストデータ記憶手段から読み出して、前記ユーザ端末に出力する出力手段と、
を有することを特徴とするテストデータ生成装置。
【請求項２】
前記水準生成手段は、
前記テストデータ仕様のBoolean型、Enum型、Integer型、String型、Object型の何れかの型に応じて所定の水準生成ルールに基づいて、該ルールを満たすものを正常水準とし、満たさないものを異常水準として生成する手段を含む
請求項１記載のテストデータ生成装置。
【請求項３】
システムの設計情報を形式的な言語で記述した設計モデルの設計意図に沿って構築されたか否かを確認するためのテストデータを生成するテストデータ生成方法であって、
ユーザ端末より、ＵＭＬクラス図とアクティビティ図のみで記述した設計モデルを読み込む設計モデル読込ステップと、
読み込まれた前記設計モデルからアクティビティ図をテスト対象として抽出する設計モデル分析ステップと、
前記テスト対象から実行経路を抽出する実行経路抽出ステップと、
前記実行経路抽出ステップで抽出された各実行経路を持つアクティビティの入力パラメータを変数（実験計画法でいう「因子」）が満たすべき実行経路の始点ノードから終点ノードを走査することにより抽出した制約条件に基づいて、テストデータ仕様記憶手段に格納されているテストデータ仕様を更新するテストデータ仕様生成ステップと、
前記テストデータ仕様記憶手段から前記テストデータ仕様を読み込み、該テストデータ仕様の値に応じて、前記因子のとる値（実験計画法でいう「水準」）として、該テストデータ仕様を満たす正常水準と、該テストデータ仕様を満たさない異常水準を生成し、前記実行経路に対応させて該因子と該水準の組み合わせを実行経路・水準記憶手段に格納する水準生成ステップと、
前記実行経路・水準記憶手段から前記因子と前記水準と前記実行経路の組み合わせを取得して、前記異常水準が１つでも含むような組み合わせを異常入力として生成し、該異常水準を１つも含まない組み合わせを正常水準として生成し、該実行経路中に事後条件が含まれるか否かにより期待値を求め、該入力に該期待値を付与したテストデータを生成し、テストデータ記憶手段に格納するテストデータ生成ステップと、
前記テストデータを前記テストデータ記憶手段から読み出して、前記ユーザ端末に出力する出力ステップと、
を行うことを特徴とするテストデータ生成方法。
【請求項４】
前記水準生成ステップは、
前記テストデータ仕様のBoolean型、Enum型、Integer型、String型、Object型の何れかの型に応じて所定の水準生成ルールに基づいて、該ルールを満たすものを正常水準とし、満たさないものを異常水準として生成する
請求項３記載のテストデータ生成方法。
【請求項５】
請求項１または、２記載のテストデータ生成装置を構成する各手段としてコンピュータを機能させるためのテストデータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストデータ生成方法及び装置及びプログラムに係り、特に、システムが、設計モデルに記述された設計意図の通りに、構築されたか否かを、確認するためのテストで用いるテストデータを人手により作成するのではなく、設計モデルにより自動的に作成するためのテストデータ生成方法及び装置及びプログラムに関する。詳しくは、信頼性の高いテスト結果を得るためのテストデータ生成方法及び装置及びプログラムに関する。
【背景技術】
【０００２】
プログラム開発工程におけるテストでは、システムが設計通りに構築されたか否かという確認を行うため、その際にテストデータが必要となる。人手に代わり、自動でテストデータを準備できれば、開発のコスト改善につながる。また、少ないテストデータで効果的にテストを実施できればテストのコストを更に削減することができる。
【０００３】
実行経路をテストするためのテストデータは、各実行経路毎に１つあればよいわけではない。該当実行経路が正しく構築されたか否かを、様々なバリエーションのテストデータを用いて入念に確認することがテスト結果の信頼性を高める上で重要である。
【０００４】
テストデータの自動生成技術としては、例えば、階層構造を持つデータ型を基本型まで分解し、その基本型に所定の値を与える方法や、単独の変数に割り当てる値を生成する技術がある（例えば、特許文献１、非特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２３１１０３号公報
【非特許文献】
【０００６】
【非特許文献１】Jon Edvardsson.  "A Survey on Automatic Test Data Generation".  In Proceedings of the 2nd Conference on Computer Science and Engineering, Pages 21-28, 1999.  http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.963
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記のテストデータ自動生成の技術は、以下のような問題がある。
【０００８】
実行経路を正しく通るようなテストデータの生成にのみ注力しているため、実行経路に対する予想外の異常入力が、（弾かれずにそのまま）誤って処理されてしまうような不具合が存在しても、テスト結果に表れない。
【０００９】
特に、オブジェクト型などの階層構造を持つデータ型の場合、考えられる異常入力のバリエーションが多く存在するため、手動であらゆる異常入力を洗い出すことは非現実的であるが、既存技術ではこのための自動化については言及されていない。例えば、テストにおいて確認したいことが「設計された実行経路Ａは、最終製品（プログラム）として正しく（設計通りに）構築されたのか？」であった場合に、実行経路Ａを通るような入力を１個乃至複数個与えて、プログラムを実行した場合、たまたま正しく動いただけかもしれないし、実行経路Ａを通らないはずの「おかしな入力」が実は素通りからもしれない、といったテスト結果の信頼性が不十分である。
【００１０】
本発明は、上記の点に鑑みなされたもので、許容されないような異常入力を含めて多様なテストデータを生成し、テスト結果の信頼性を向上させるためのテストデータ生成方法及び装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
図１は、本発明の原理構成図である。
【００１２】
本発明（請求項１）は、システムの設計情報を形式的な言語で記述した設計モデルの設計意図に沿って構築されたか否かを確認するためのテストデータを生成するテストデータ生成装置であって、
ユーザ端末より、ＵＭＬクラス図とアクティビティ図のみで記述した設計モデルを読み込む設計モデル読込手段１と、
読み込まれた設計モデルからアクティビティ図をテスト対象として抽出する設計モデル分析手段２と、
テスト対象から実行経路を抽出する実行経路抽出手段３と、
テストデータ仕様が格納されたテストデータ仕様記憶手段１２と、
実行経路抽出手段３から抽出された各実行経路を持つアクティビティの入力パラメータを変数（実験計画法でいう「因子」）が満たすべき実行経路の始点ノードから終点ノードを走査することにより抽出した制約条件に基づいて、テストデータ仕様記憶手段１２に格納されているテストデータ仕様を更新するテストデータ仕様生成手段４と、
テストデータ仕様記憶手段１２からテストデータ仕様を読み込み、該テストデータ仕様の値に応じて、因子のとる値（実験計画法でいう「水準」）として、該テストデータ仕様を満たす正常水準と、該テストデータ仕様を満たさない異常水準を生成し、実行経路と因子に対応させて実行経路・水準記憶手段１１に格納する水準生成手段５と、
実行経路・水準記憶手段１１から因子と水準と実行経路を取得して、異常水準が１つのみ含まれる組み合わせを異常入力として生成し、異常水準を１つも含まない組み合わせを正常水準として生成し、該実行経路中に事後条件が含まれるか否かにより期待値を求め、該入力に該期待値を付与したテストデータを生成し、テストデータ記憶手段１３に格納するテストデータ生成手段６と、
テストデータをテストデータ記憶手段１３から読み出して、ユーザ端末に出力する出力手段と、を有する。
【００１３】
また、本発明（請求項２）は、水準生成手段５において、テストデータ仕様のBoolean型、Enum型、Integer型、String型、Object型の何れかの型に応じて、所定の水準生成ルールに基づいて、該ルールを満たすものを正常水準とし、満たさないものを異常水準として生成する手段を含む。
【００１４】
図２は、本発明の原理を説明するための図である。
【００１５】
本発明（請求項３）は、システムの設計情報を形式的な言語で記述した設計モデルの設計意図に沿って構築されたか否かを確認するためのテストデータを生成するテストデータ生成方法であって、
ユーザ端末より、ＵＭＬクラス図とアクティビティ図のみで記述した設計モデルを読み込む設計モデル読込ステップ（ステップ１）と、
読み込まれた設計モデルからアクティビティ図をテスト対象として抽出する設計モデル分析ステップ（ステップ２）と、
テスト対象から実行経路を抽出する実行経路抽出ステップ（ステップ３）と、
実行経路抽出ステップで抽出された各実行経路を持つアクティビティの入力パラメータを変数（実験計画法でいう「因子」）が満たすべき実行経路の始点ノードから終点ノードを走査することにより抽出した制約条件に基づいて、テストデータ仕様記憶手段に格納されているテストデータ仕様を更新するテストデータ仕様生成ステップ（ステップ４）と、
テストデータ仕様記憶手段からテストデータ仕様を読み込み、該テストデータ仕様の値に応じて、因子のとる値（実験計画法でいう「水準」）として、該テストデータ仕様を満たす正常水準と、該テストデータ仕様を満たさない異常水準を生成し、実行経路と因子に対応させて実行経路・水準記憶手段に格納する水準生成ステップ（ステップ５）と、
実行経路・水準記憶手段から因子と水準と実行経路を取得して、異常水準が１つのみ含まれる組み合わせを異常入力として生成し、異常水準を１つも含まない組み合わせを正常水準として生成し（ステップ６）、該実行経路中に事後条件が含まれるか否かにより期待値を求め、該入力に該期待値を付与したテストデータを生成し（ステップ７）、テストデータ記憶手段に格納するテストデータ生成ステップと、
テストデータをテストデータ記憶手段から読み出して、ユーザ端末に出力する出力ステップ（ステップ８）と、を行う。
【００１６】
また、本発明（請求項４）は、水準生成ステップ（ステップ５）において、
テストデータ仕様のBoolean型、Enum型、Integer型、String型、Object型の何れかの型に応じて、所定の水準生成ルールに基づいて、該ルールを満たすものを正常水準とし、満たさないものを異常水準として生成する。
【００１７】
本発明（請求項５）は、請求項１または、２記載のテストデータ生成装置を構成する各手段としてコンピュータを機能させるためのテストデータ生成プログラムである。
【発明の効果】
【００１８】
上記のように本発明によれば、データ仕様の型（Boolean型、Enum型、Integer型、String型、Object型）に応じて、所定の水準生成ルールを満たすものを正常水準とし、満たさないものを異常水準として生成し、異常水準が１つのみ含まれる組み合わせ（因子、水準、実行経路の組み合わせ）を「異常入力」、異常水準を１つも含まない組み合わせを「正常入力」とするテストデータを生成することにより、プログラムが設計モデル（ＵＭＬモデル等）に従って作られているか否かについて、テストによる判断に誤りが少なく、テスト結果の信頼性を高めることが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の原理構成図である。
【図２】本発明の原理を説明するための図である。
【図３】本発明の一実施の形態におけるテストデータ生成装置の構成図である。
【図４】本発明で用いるＵＭＬ設計モデルのイメージである。
【図５】本発明の一実施の形態におけるテストデータ仕様のフォーマットである。
【図６】本発明の一実施の形態におけるテストデータ生成装置の入出力イメージである。
【図７】本発明の一実施の形態におけるテストデータ生成処理概要のフローチャートである。
【図８】本発明の一実施の形態における実行経路抽出部で抽出される実行経路の例である。
【図９】本発明の一実施の形態におけるテストデータ仕様生成部のフローチャートである。
【図１０】本発明の一実施の形態における実行経路を説明するための図である。
【図１１】本発明の一実施の形態における水準生成のフローチャートである。
【図１２】本発明の一実施の形態におけるBoolean型テストデータ仕様からの水準生成のフローチャートである。
【図１３】本発明の一実施の形態におけるEnum型テストデータ仕様からの水準生成のフローチャートである。
【図１４】本発明の一実施の形態におけるInteger型テストデータ仕様からの水準生成のフローチャートである。
【図１５】本発明の一実施の形態におけるString型テストデータ仕様からの水準生成のフローチャートである。
【図１６】本発明の一実施の形態におけるステップ１６４２の詳細な動作のフローチャートである。
【図１７】本発明の一実施の形態におけるステップ１６４３の詳細な動作のフローチャートである。
【図１８】本発明の一実施の形態におけるObject型テストデータ仕様からの水準生成のフローチャートである。
【図１９】本発明の一実施の形態におけるステップ１６５７の詳細な動作のフローチャートである。
【図２０】本発明の一実施の形態における水準設定の例である。
【図２１】本発明の一実施の形態におけるテストデータ生成部の処理のフローチャートである。
【図２２】本発明の一実施の形態における正常入力と異常入力の生成方法を示す図である。
【図２３】本発明の一実施の形態における正常入力生成のフローチャートである。
【図２４】本発明の一実施の形態における正常入力生成をプログラムで実現する場合のフローチャートである。
【図２５】本発明の一実施の形態における異常入力生成のフローチャートである。
【図２６】本発明の一実施の形態における異常入力生成をプログラムで実現する場合のフローチャートである。
【図２７】本発明の一実施の形態におけるテストデータ生成部の「入力への期待値付与」のフローチャートである。
【図２８】本発明の一実施の形態における生成された入力の例である。
【図２９】本発明と従来技術の比較を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面と共に本発明の実施の形態を説明する。
【００２１】
最初に、以下の実施の形態で用いる用語について説明する。
【００２２】
「設計モデル」とは、システムの設計情報を、曖昧性をもつ自然言語ではなく、何らかの形式的な記述言語により厳密的・形式的に記述したものである。
【００２３】
「制約条件」とは、設計モデルから抽出された実行経路に含まれ、『ａ＞３』のようなある因子（ここではａ）の取り得る値に関する条件を指す。『ａ＞３』の例では、制約条件は因子の名前（ａ）、オペレータ（＞）、オペランド（３）から成り、当該制約条件が付けられている場所により、「不変条件」、「事前条件」、「分岐条件」の３種類に分かれる。制約条件のオペレータには、不等号や文字列比較等通常使われる記法を用いる。
【００２４】
「テストデータ仕様」とは、設計モデル中の特定の実行経路を通るための因子（変数）が満たすべき性質を集めたもので、テストデータが満たすべき「仕様」を指す。
【００２５】
「テストデータ仕様の更新」とは、テストデータ仕様を、生成直後の初期値から実行経路中の制約条件の処理に従って上書きしていくことである。
【００２６】
「正常水準」とは、実行経路にとって許容する入力値である。
【００２７】
「異常水準」とは、実行経路にとって許容しない入力値である。
【００２８】
「正常入力」とは、因子と正常水準のみから構成される入力である。
【００２９】
「異常入力」とは、因子と少なくとも１つの異常水準を含む入力である。
【００３０】
図３は、本発明の一実施の形態におけるテストデータ生成装置の構成を示す。
【００３１】
同図に示すテストデータ生成装置１０は、設計モデル読込部１、設計モデル分析部２、実行経路抽出部３、テストデータ仕様生成部４、水準生成部５、テストデータ生成部６、出力部７、実行経路・水準記憶部１１、テストデータ仕様記憶部１２、テストデータ記憶部１３から構成される。
【００３２】
このうち、設計モデル読込部１、設計モデル分析部２、実行経路抽出部３、テストデータ仕様生成部４、水準生成部５、テストデータ生成部６、出力部７は、ＣＰＵ上の機能であり、実行経路・水準記憶部１１、テストデータ仕様記憶部１２、テストデータ記憶部１３は、ハードディスク装置等の記憶媒体である。
【００３３】
ユーザ端末２０は、モデリングツール２１とビューワ２２を有し、モデルリングツール２１より設計モデルをテストデータ生成装置の設計モデル読込部１にエクスポートする。ビューワ２２は、テストデータ生成装置１０からテストデータを取得する。
【００３４】
設計モデル読込部１は、ユーザ端末２０のモデリングツール２１からエクスポートされた図４に示すようなＸＭＬ形式のＵＭＬモデル（クラス図、アクティビティ図）を読み込む。
【００３５】
設計モデル分析部２は、読み込まれたＵＭＬモデルを分析して、アクティビティをテスト対象として抽出する。
【００３６】
実行経路抽出部３は、テスト対象から実行経路（Path）を抽出し、抽出した実行経路をテストデータ仕様生成部４と実行経路・水準記憶部１１に出力する。
【００３７】
テストデータ仕様生成部４は、実行経路抽出部３で抽出された全実行経路から、特定の実行経路を通るための、変数（実験計画法でいう「因子」）が満たすべき性質を集め、テストデータ仕様記憶部１２に格納する。テストデータ仕様は、図５に示すように、データ型（Integer型、Enum型、Object型、Boolean型、String型Collection型）毎に異なり、因子を規定するドメインをもつ。ドメインは更新（上書き）されるに従い、範囲が狭められていくものとする。例えば、String型の因子に対するテストデータ仕様は、長さ下限、長さ上限、部分文字列などの値を含んでおり、"name:String"という因子は、長さ０〜３０までであり、文字列"Ｍ"を含むというように、テストデータ仕様は因子（ここでは、「name」）の取り得る値を制限するものである。
【００３８】
Integer型テストデータ仕様は、下限Ｌ、上限Ｕからなる。
【００３９】
Enum型テストデータ仕様は、許容する要素Ｓを有する。
【００４０】
Object型テストデータ仕様は、ヌルn、各属性の仕様Ａからなる。
【００４１】
Boolean型テストデータ仕様は、値Ｖを有する。
【００４２】
String型テストデータ仕様は、長さ下限Ｌ，長さ上限Ｕ，部分文字列Ｃ，等しい文字列Ｅからなる。
【００４３】
Collection型テストデータ仕様は、要素数Ｎ，並び順Ｏ、ユニークＵ、各属性の仕様Ｅからなる。
【００４４】
水準生成部５は、テストデータ仕様記憶部１２からテストデータ仕様を読み込み、予め設定されている水準生成ルールに基づいて、因子のとる値（実験計画法でいう「水準」）として正常水準及び異常水準を生成し、当該因子、実行経路（Path Name）に対応させて実行経路・水準記憶部１１に格納する。水準生成ルールは、水準生成部５内のメモリ（図示せず）に格納しておいてもよいし、水準生成部５の外部の記憶手段に格納されていてもよい。本実施の形態では水準生成部５内部のメモリ（図示せず）に格納されているものとして説明する。当該水準生成ルールの詳細については図１１〜図１９で後述する。
【００４５】
テストデータ生成部６は、実行経路・水準記憶部１１から実行経路と水準（正常水準または異常水準）を取得し、入力（因子と水準の組）と期待値のペアを含むテストデータを生成し、図６（Ｂ）に示すようなフォーマットでテストデータ記憶部１３に格納する。テストデータは、図６（Ｂ）に示すように、実行経路名、テストデータＩＤ、水準（値）、因子（変数）、期待値、正常入力または異常入力区別、テスト結果の項目からなる。
【００４６】
出力部７は、テストデータ生成部６で生成されたテストデータをテストデータ記憶部１３から読み出してユーザ端末２０に出力する。ここでは、ＣＳＶ形式で出力するものとする。
【００４７】
以下に、上記の構成における動作を説明する。
【００４８】
図７は、本発明の一実施の形態におけるテストデータ生成装置の動作のフローチャートである。
【００４９】
ステップ１００）  設計モデル読込部１は、図６（Ａ）に示すようなユーザ端末２０からエクスポートされたＸＭＬ形式のＵＭＬ（Unified Modeling Language）モデルを読み込み、設計モデル分析部１２０に渡す。
【００５０】
ステップ１１０）  設計モデル分析部２は、設計モデル読込部１から取得したＵＭＬ設計モデルを分解してアクティビティをテスト対象として抽出し、実行経路抽出部１３０に渡す。
【００５１】
ステップ１２０）  実行経路抽出部３は、図８に示すように、取得した各テスト対象（アクティビティ）の開始ノードから終了ノードまで走査して実行経路を抽出し、全ての実行経路情報を実行経路・水準記憶部１１及びテストデータ仕様生成部４に渡す。実行経路情報は図１０に示すように各ノードの処理（制約条件）、分岐条件、事後条件、不変条件を含む。
【００５２】
ステップ１３０）  テストデータ仕様生成部４は、各実行経路情報に基づいて図５に示すようなフォーマットでテストデータ仕様を生成し、テストデータ仕様記憶部１２に格納する。
【００５３】
以下に、テストデータ仕様生成部４の動作を説明する。図９は、本発明の一実施の形態におけるテストデータ仕様生成部のフローチャートである。以下では、テストデータ仕様記憶部１２は因子の型に基づき対応するテストデータ仕様をデフォルトで初期化されているものとする。
【００５４】
ステップ１３１）  テストデータ仕様生成部４は、実行経路抽出部３から実行経路情報を取得し、メモリ（図示せず）に格納する。
【００５５】
ステップ１３２）  メモリ（図示せず）から実行経路を取得して、図１０に示すような実行経路の開始ノードから終了ノードまでを走査し、その中に含まれる制約条件（図１０の例では、[p.name.length>0]と[p.age.>=20]を抽出する。
【００５６】
ステップ１３３  テストデータ仕様記憶部１２から1件のテストデータ仕様を読み込む。全てのテストデータ仕様を読み込んだ場合は、当該処理を終了する。
【００５７】
ステップ１３４）  読み込んだテストデータ仕様の因子名と制約条件に含まれる因子を比較し、一致する場合は、ステップ１３５に移行し、一致しない場合はステップ１３３に戻る。
【００５８】
ステップ１３５）  因子名が一致する場合は、テストデータ仕様記憶部１２のテストデータ仕様を制約条件の内容で更新する。
【００５９】
ステップ１４０）  水準生成部５は、テストデータ仕様記憶部１２からテストデータ仕様を読み込み、因子のとる値（実験計画法でいう『水準』）を生成し、実行経路・水準記憶部１１に格納する。水準は、テストデータ仕様の型によって異なる以下の水準生成ルールに従って生成される。
【００６０】
「Boolean型」テストデータ仕様の場合は、図５に示すBoolean型テストデータ仕様の値ｖを取得して、ｖへの値を正常水準とし、ｖの否定、及び、null、Boolean型ではない値を異常水準として生成する。詳細については、図１２において説明する。
【００６１】
また、「Enum型」テストデータ仕様の場合は、図５に示すEnum型テストデータ仕様の「許容する要素Ｓ」の各要素ｓを正常水準とし、Ｓに属さない要素ｓ'及び、null、Enum型でない値を異常水準とする。詳細については、図１３において説明する。
【００６２】
また、「Integer型」テストデータ仕様の場合は、図５に示すInteger型テストデータ仕様の下限Ｌ，上限Ｕを取得し、Ｌ，Ｌ−１，Ｕ−１，Ｕ、ランダム値Ｘ（Ｌ≦Ｘ≦Ｕ）を正常水準とし、Ｌ−１，Ｕ＋１、正、負でオーバーフローとなる値、null、Integer型でない値を異常水準とする。詳細については図１４において説明する。
【００６３】
また、「String型」テストデータ仕様の場合は、図５に示すString型テストデータ仕様の長さ下限Ｌ，長さ条件Ｕ、部分文字列Ｃ、等しい文字列Ｅを取得し、図１５〜図１７に後述するルールに沿って正常水準、異常水準を生成する。
【００６４】
また、「Object型」テストデータ仕様の場合は、オブジェクトの階層構造を展開した際にどこかに異常を含むようなオブジェクトを異常水準とする。詳細については図１８、図１９で説明する。
【００６５】
上記のようにして求められた水準を因子と共に実行経路・水準記憶部１１に格納する。
【００６６】
当該水準生成部５の詳細な動作は、図１１で後述する。
【００６７】
ステップ１５０）  テストデータ生成部６は、実行経路・水準記憶部１１から水準と因子の組（入力）を取得して、入力と期待値のペアからなるテストデータを生成し、図６（Ｂ）に示すようなフォーマットでテストデータ記憶部１３に格納する。「入力」とは、実行経路・水準記憶部１１から取得した因子と水準の組み合わせである。「入力」として、１つの因子に対し、全て正常水準の組み合わせを「正常入力」とし、また、１つの因子に対し、正常水準と１つの異常水準の組み合せを「異常入力」とする。図１１（Ａ）に示すように、正常水準の組み合わせを正常入力とし、同図（Ｂ）に示すように正常水準と１つの異常水準を含む組み合わせを異常入力とする。
【００６８】
当該入力の生成方法については、図２２以降で詳述する。
【００６９】
ステップ１６０）  出力部７は、テストデータ生成部６で生成されたテストデータ（ＣＳＶファイル）をテストデータ記憶部１３から読み込んで、外部ファイル（ユーザ端末のビューワ２２０）に出力する。
【００７０】
＜水準生成部５＞
ここで、ステップ１４０の水準生成部５の動作を詳細に説明する。
【００７１】
図１１は、本発明の一実施の形態における水準生成のフローチャートである。
【００７２】
ステップ１６００）  テストデータ仕様記憶部８からテストデータ仕様を取得して、テストデータの種類が、Boolean型、Enum型、Integer型、String型、Object型のいずれであるかを判定する。Boolean型の場合はステップ１６１０に移行し、Enum型の場合はステップ１６２０に移行し、Integer型の場合はステップ１６３０に移行し、String型の場合はステップ１６４０に移行し、Object型の場合はステップ１６５０に移行する。
【００７３】
ステップ１６１０）  テストデータ仕様がBoolean型である場合は、図１２の処理により水準を生成し、実行経路・水準記憶部１１の実行経路の因子に対応させて格納する。図１２は、本発明の一実施の形態におけるBoolean型テストデータ仕様からの水準生成のフローチャートである。
【００７４】
ステップ１６１１）  Boolean型テストデータ仕様の「値ｖ」を取得し、「値ｖ」が初期値であるかを判定する。
【００７５】
ステップ１６１２）  初期値である場合は、実行経路・水準記憶部１１の水準のtrue、falseの欄を正常水準（true）とし、ステップ１６１５に移行する。
【００７６】
ステップ１６１３）  初期値でない場合は、値ｖを正常水準（true）として実行経路・水準記憶部１１に格納する。
【００７７】
ステップ１６１４）  値ｖの否定を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００７８】
ステップ１６１５）  null、Boolean型でない値を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００７９】
ステップ１６２０）  テストデータ仕様がEnum型である場合は、図１３の処理によりEnum型のテストデータ仕様からの水準を生成し、メモリ（図示せず）に格納する。図１３は、本発明の一実施の形態におけるEnum型テストデータ仕様からの水準生成のフローチャートである。
【００８０】
ステップ１６２１）    Enum型テストデータ仕様の許容する要素ｓの集合Ｓを取得する。
【００８１】
ステップ１６２２）  許容する要素ｓの集合Ｓ内の各要素ｓを正常水準（true）として実行経路・水準記憶部１１に格納する。
【００８２】
ステップ１６２３）  因子の全選択肢のうち、許容する要素ｓの集合に属さない各要素ｓ'を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００８３】
ステップ１６２４）  null、Enum型でない値を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００８４】
ステップ１６３０）  テストデータ仕様がInteger型である場合は、図１４の処理によりInteger型のテストデータ仕様からの水準を生成し、実行経路・水準記憶部１１の実行経路の因子に対応させて格納する。図１４は、本発明の一実施の形態におけるInteger型テストデータ仕様からの水準生成のフローチャートである。
【００８５】
ステップ１６３１）  Integer型テストデータ仕様の「下限Ｌ」、「上限Ｕ」を取得する。
【００８６】
ステップ１６３２）  Ｌ，Ｌ＋１，Ｕ−１，Ｕを正常水準（true）として実行経路・水準記憶部１１に格納する。
【００８７】
ステップ１６３３）  ランダム値ｘ（Ｌ≦ｘ≦Ｕ）を正常水準（true）として、実行経路・水準記憶部１１に格納する。
【００８８】
ステップ１６３４）  Ｌ−１，Ｕ＋１を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００８９】
ステップ１６３５）  正、負でオーバーフローとなる値を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００９０】
ステップ１６３６）  null、Integer型でない値を異常水準（false）として実行経路・水準記憶部１１に格納する。
【００９１】
ステップ１６４０）  テストデータ仕様がString型である場合は、図１５の処理によりString型テストデータ仕様からの水準を生成し、水準生成部５の実行経路・水準記憶部１１の実行経路の因子に対応させて格納する。図１５は、本発明の一実施の形態におけるString型のテストデータ仕様からの水準生成のフローチャートである。
【００９２】
ステップ１６４１）  String型テストデータ仕様の「長さ下限Ｌ」、「長さ上限Ｕ」、「部分文字列Ｃ」、「等しい文字列Ｅ」を取得する。
【００９３】
ステップ１６４２）  上記の「長さ下限Ｌ」、「長さ上限Ｕ」、「部分文字列Ｃ」、「等しい文字列Ｅ」に基づいて正常水準を生成し、実行経路・水準記憶部１１に格納する。以下、図１６を用いて詳細な処理を説明する。本発明の一実施の形態におけるステップ１６４２の詳細な処理のフローチャートである。
【００９４】
ステップ２２００）  「等しい文字列Ｅ」が設定済みの場合は、Ｅを正常水準（true）として実行経路・水準記憶部１１に格納し、当該水準生成部の５の処理を終了する。
【００９５】
ステップ２２１０）  「等しい文字列Ｅ」が未設定であり、「部分文字列Ｃ」が設定済みの場合は、長さＬのＣを含むランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【００９６】
ステップ２２２０）  長さＬ＋１の部分文字列Ｃを含むランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【００９７】
ステップ２２３０）  長さＵ−１の部分文字列Ｃを含むランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【００９８】
ステップ２２４０）  長さＵの部分文字列Ｃを含むランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納し、当該水準生成部５の処理を終了する。
【００９９】
ステップ２２５０）  「等しい文字列Ｅ」が設定済みで、「部分文字列Ｃ」が設定済みである場合は、長さＬのランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【０１００】
ステップ２２６０）  長さＬ＋１のランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【０１０１】
ステップ２２７０）  長さＵ−１のランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納する。
【０１０２】
ステップ２２８０）  長さＵのランダム文字列を正常水準（true）として実行経路・水準記憶部１１に格納し、当該水準生成部５の処理を終了する。
【０１０３】
ステップ１６４３）  上記の「長さ下限Ｌ」、「長さ上限Ｕ」、「部分文字列Ｃ」、「等しい文字列Ｅ」に基づいて異常水準（false）を生成し、実行経路の因子に対応させて実行経路・水準記憶部１１に格納する。以下に、図１７を用いて当該処理を詳細な処理について説明する。図１７は、本発明の一実施の形態におけるステップ１６４３の詳細な動作のフローチャートである。
【０１０４】
ステップ２３００）  「等しい文字列Ｅ」が設定済みであり、長さＬの部分文字列Ｃでない文字列を異常水準（false）として、実行経路・水準記憶部１１に格納する。
【０１０５】
ステップ２３０５）  長さＵ＋１の等しい文字列Ｅでない文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１０６】
ステップ２３１０）  長さＬ−１の等しい文字列Ｅでない文字列を異常水準として実行経路・水準記憶部１１に格納し、ステップ２３６０に移行する。
【０１０７】
ステップ２３２０）  「等しい文字列Ｅ」が未設定であり、「部分文字列Ｃ」が設定済みである場合は、長さＬの部分文字列Ｃを含まない文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１０８】
ステップ２３２５）  長さＵの部分文字列Ｃを含まない文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１０９】
ステップ２３３０）  長さＬ−１の部分文字列Ｃを含まない文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１１０】
ステップ２３３５）  長さＵ＋１の部分文字列Ｃを含まない文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１１１】
ステップ２３５０）  長さＬ−１の部分文字列Ｃを含む文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１１２】
ステップ２３４５）  長さＵ＋１の部分文字列Ｃを含む文字列を異常水準（false）として実行経路・水準記憶部１１に格納し、ステップ２３６０に移行する。
【０１１３】
ステップ２３５０）  等しい文字列Ｅが未設定で、部分文字列Ｃが未設定である場合は、長さＬ−１のランダム文字列を異常水準（false）として実行経路・水準記憶部１１に格納する。
【０１１４】
ステップ２３５５）  長さＬ＋１のランダム文字列を異常水準（false）として実行経路・水準記憶部１１に格納し、ステップ２３６０に移行する。
【０１１５】
ステップ１６５０）  テストデータ仕様がObject型である場合、図１８の処理により、Object型テストデータ仕様から水準を生成し、実行経路の因子に対応させて実行経路・水準記憶部１１に格納する。
【０１１６】
図１８は、本発明の一実施の形態におけるObject型テストデータ仕様からの水準生成のフローチャートである。
【０１１７】
ステップ１６５１）  Object型テストデータ仕様の「nullかｎ」、「属性の仕様Ａ」を取得する。
【０１１８】
ステップ１６５２）  「nullかｎ」が未設定であり、「属性の仕様Ａ」が空である場合は、任意のObjectを正常水準（true）としてメモリ（図示せず）に格納し、当該処理を終了する。
【０１１９】
ステップ１６５３）  「nullかｎ」が"true"である場合は、「null」を正常水準（true）として実行経路・水準記憶部１１に格納する。
【０１２０】
ステップ１６５４）  任意のObject(non-null)を異常水準（false）として実行経路・水準記憶部１１に格納し、当該処理を終了する。
【０１２１】
ステップ１６５５）  「nullかｎ」が"false"であり、「属性の仕様Ａ」が空である場合は、任意のObject(non-null)を正常水準（true）として実行経路・水準記憶部１１に格納する。
【０１２２】
ステップ１６５６）  「null」を異常水準（false）として実行経路・水準記憶部１１に格納して当該処理を終了する。
【０１２３】
ステップ１６５７）  「nullかｎ」が"false"であり、「属性の仕様Ａ」が空でない場合は、属性の仕様Ａに含まれるテストデータ仕様に基づく水準を実行経路の因子に対応させて実行経路・水準記憶部１１に格納し、当該処理を終了する。当該処理の詳細については、図１９に沿って説明する。図１９は、本発明の一実施の形態におけるステップ１６５７の詳細なフローチャートである。
【０１２４】
ステップ２４００）  Object型テストデータ仕様から「属性の仕様Ａ」を取得する。
【０１２５】
ステップ２４１０）  取得した属性の仕様Ａに含まれる各テストデータ仕様に対して、前述の図１１に示す方法により水準を生成し、実行経路・水準記憶部１１に格納する。
【０１２６】
ステップ２４２０）  組み合わせ生成部６において、組み合わせを生成する。詳細な処理については、図２１で詳述する。
【０１２７】
ステップ２４３０）  組み合わせ生成部６で生成された１つの組合せを１つの水準として実行経路・水準記憶部１１に格納する。
【０１２８】
上記のようにして、特定実行経路に関する各因子の水準が決定され、図２０に示す内容が実行経路・水準記憶部１１に格納される。
【０１２９】
＜テストデータ生成部＞
次に、ステップ１５０のデータ生成部６の組み合わせ生成処理について説明する。
【０１３０】
図２１は、本発明の一実施の形態における正常入力と異常入力の生成方法を示す図である。
【０１３１】
図２２は、本発明の一実施の形態におけるテストデータ生成部の処理のフローチャートである。
【０１３２】
ステップ１２００）  組み合わせ生成部６は、水準生成部５で求められた全因子の全水準を実行経路・水準記憶部１１から取得する。なお、ここで取得した水準には、実行経路が関連付けられている。
【０１３３】
ステップ１２１０）  正常入力の生成を図２２に示す手法により行う。図２２は、本発明の一実施の形態における正常入力生成のフローチャートである。
【０１３４】
ステップ１２１１）  実行経路・水準記憶部１１から読み出された全因子より、最も正常水準を多く持つ因子Ａの正常水準数Ｍを特定する。
【０１３５】
ステップ１２１２）  Ｍ件の空の正常入力のレコードをテストデータ記憶部１３に生成する。
【０１３６】
ステップ１２１３）  因子Ａの正常水準を順番に正常入力のレコードに埋める（図２１（Ａ））。
【０１３７】
ステップ１２１４）  次に、上記の因子Ａ以外の各因子について、当該因子の正常水準をレコードの正常入力に繰り返し埋める（図２１（Ａ））。
【０１３８】
上記の図２３の動作をプログラムで実現させるための例を図２４に示す。
【０１３９】
ステップ１２２０）  異常入力の生成を図２５に示す手法により行う。図２５は、本発明の一実施の形態における異常入力生成のフローチャートである。
【０１４０】
ステップ１２２１）  実行経路・水準記憶部１１から読み出された全因子より、各因子の異常水準数の合計Ｎを特定する。
【０１４１】
ステップ１２２２）  Ｎ件の空の異常入力のレコードをテストデータ記憶部１３上に生成する。
【０１４２】
ステップ１２２３）  生成した正常入力を繰り返し異常入力に上書きする。
【０１４３】
ステップ１２２４）  各異常水準について、どの因子のものかに基づいて、異常水準を異常入力の該当箇所に上書きする（図２１（Ｂ））。
【０１４４】
上記の図２５の動作をプログラムで実現させるための例を図２６に示す。
【０１４５】
ステップ１２３０）  上記のステップ１２１０で生成された正常入力及び、ステップ１２２０で生成された異常入力に対して、以下の図２７に示す方法により、入力の期待値を付与する。図２７は、本発明の一実施の形態におけるテストデータ生成部の「入力への期待値付与」処理のフローチャートである。
【０１４６】
ステップ１２３１）  実行経路・水準記憶部１２から入力（因子＋水準）と当該入力に対応する実行経路を取得する。
【０１４７】
ステップ１２３２）  実行経路中の全事後条件を取得する。事後条件は、図１０に示すように、実行経路の開始ノードから終了ノードまで順にノードをチェックすることにより取得できる。
【０１４８】
ステップ１２３３）  入力（因子＋水準）が正常入力である場合は、ステップ１２３４に移行し、そうでない場合は、ステップ１２３５に移行する。
【０１４９】
ステップ１２３４）  ステップ１２３２において事後条件が取得できた場合は、ステップ１２３７に移行し、取得できなかった場合はステップ１２３６に移行する。
【０１５０】
ステップ１２３５）  期待値を「不定」として、入力（因子＋水準）に付与する。
【０１５１】
ステップ１２３６）  期待値を「未定義」として、入力（因子＋水準）に付与する。
【０１５２】
ステップ１２３７）  期待値を「事後条件の集合」として、入力（因子＋水準）に付与する。
【０１５３】
ここで、図６に示す例では、［status=APPROVED,orderld=任意文字列（999文字）］
が１つの入力で、[changedOrderが追加されていること]が期待値である。
【０１５４】
上記の処理により、図２８に示すように、同図（Ａ）に示すような実行経路Ａがあるとき、同図（Ｂ）の「３」、「４」に示すような実行経路Ａを通らない異常入力を生成する。「３」の例では、「p=name=null age=20」で異常水準であるため、実行経路Ａは通らない。また、「４」の例では、「flag=null」となっており、異常水準であるため、実行経路Ａは通らない。
【０１５５】
従来は、図２９に示すように、入力空間のうち、実行経路Ａを通るような入力を１個または複数個与えてプログラムを実行したが、本発明では、入力空間において実行経路Ａが許容する入力以外の入力を複数個与えることにより、テストにおいて、設計された実行経路Ａは、プログラムとして正しく構築されたか否かを判定する精度が向上する。
【０１５６】
なお、上記の図３に示すテストデータ生成装置の構成要素の動作をプログラムとして構築し、テストデータ生成装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１５７】
また、構築されたプログラムをハードディスクや、フレキシブルディスク・ＣＤ−ＲＯＭ等の可搬記憶媒体に格納し、コンピュータにインストールする、または、配布することが可能である。
【０１５８】
なお、本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において種々変更・応用が可能である。
【符号の説明】
【０１５９】
１  設計モデル読込手段、設計モデル読込部
２  設計モデル分析手段、設計モデル分析部
３  実行経路抽出手段、実行経路抽出部
４  テストデータ仕様生成手段、テストデータ仕様生成部
５  水準生成手段、水準生成部
６  テストデータ生成手段、テストデータ生成部
７  出力手段、出力部
１０  テストデータ生成装置
１１  実行経路・水準記憶手段、実行経路・水準記憶部
１２  テストデータ仕様記憶手段、テストデータ仕様記憶部
１３  テストデータ記憶手段、テストデータ記憶部
２０  ユーザ端末
２１  モデリングツール
２２  ビューア
【図１】
2010267024.tif 000003
【図２】
2010267024.tif 000004
【図３】
2010267024.tif 000005
【図４】
2010267024.tif 000006
【図５】
2010267024.tif 000007
【図６】
2010267024.tif 000008
【図７】
2010267024.tif 000009
【図８】
2010267024.tif 000010
【図９】
2010267024.tif 000011
【図１０】
2010267024.tif 000012
【図１１】
2010267024.tif 000013
【図１２】
2010267024.tif 000014
【図１３】
2010267024.tif 000015
【図１４】
2010267024.tif 000016
【図１５】
2010267024.tif 000017
【図１６】
2010267024.tif 000018
【図１７】
2010267024.tif 000019
【図１８】
2010267024.tif 000020
【図１９】
2010267024.tif 000021
【図２０】
2010267024.tif 000022
【図２１】
2010267024.tif 000023
【図２２】
2010267024.tif 000024
【図２３】
2010267024.tif 000025
【図２４】
2010267024.tif 000026
【図２５】
2010267024.tif 000027
【図２６】
2010267024.tif 000028
【図２７】
2010267024.tif 000029
【図２８】
2010267024.tif 000030
【図２９】
2010267024.tif 000031