(57)【要約】      （修正有）【課題】テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成する装置を提供する。【解決手段】テストデータ生成装置１０は、設計書から設計モデルを抽出する設計モデル抽出部１０１と、設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するテストモデル構築部１０３と、テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築する制約式構築部１０５と、制約式集合内の制約式を解き、テストデータを得る制約式解法部１０７と、テストモデル及び前記テストデータを出力するテストモデル及びテストデータ出力部１１１とを有し、システムの設計情報を記述した設計書に対するテストデータを生成する。【選択図】図２
2016081232.tif 000002
【特許請求の範囲】
【請求項１】
システムの設計情報を記述した設計書に対するテストデータを生成するテストデータ生成装置であって、
設計書から設計モデルを抽出する設計モデル抽出部と、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するテストモデル構築部と、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築する制約式構築部と、
前記制約式集合内の制約式を解き、テストデータを得る制約式解法部と、
前記テストモデル及び前記テストデータを出力するテストモデル及びテストデータ出力部と、
を有するテストデータ生成装置。
【請求項２】
前記第２の制約式は、テストデータが同値クラスの端点とならないことを保証する第３の制約式と、テストデータが同値クラスの端点の最近傍の式上の点とならないことを保証する第４の制約式とを含む、請求項１に記載のテストデータ生成装置。
【請求項３】
前記第３の制約式は、前記第１の制約式の演算子を等号に置換した式上の点を除く式であり、
前記第４の制約式は、前記第１の制約式の演算子を等号に置換し、前記第１の制約式の変数を正及び負の方向に最小単位だけ平行移動させた式上の点を除く式である、請求項２に記載のテストデータ生成装置。
【請求項４】
前記テストデータが正常系であるか異常系であるかを示すタグを付与する期待結果付与部を更に有する、請求項１乃至３のうちいずれか１項に記載のテストデータ生成装置。
【請求項５】
システムの設計情報を記述した設計書に対するテストデータを生成するテストデータ生成装置におけるテストデータ生成方法であって、
設計書から設計モデルを抽出するステップと、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するステップと、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築するステップと、
前記制約式集合内の制約式を解き、テストデータを得るステップと、
前記テストモデル及び前記テストデータを出力するステップと、
を有するテストデータ生成方法。
【請求項６】
システムの設計情報を記述した設計書に対するテストデータを生成するために、コンピュータを、
設計書から設計モデルを抽出する設計モデル抽出手段、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するテストモデル構築手段、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築する制約式構築手段、
前記制約式集合内の制約式を解き、テストデータを得る制約式解法手段、及び
前記テストモデル及び前記テストデータを出力するテストモデル及びテストデータ出力手段、
として機能させるためのテストデータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同値テストデータ生成装置、方法及びプログラムに関する。特に、本発明は、同値テストにおいてバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成するためのテストデータ生成装置、テストデータ生成方法及びテストデータ生成プログラムに関する。
【背景技術】
【０００２】
ソフトウェア開発工程におけるテストでは、システムが設計通りに構築されたか否かという確認を行うため、その際にテストデータが必要となる。人手に代わり、自動でテストデータを準備できれば、開発のコスト改善につながる。また、少ないテストデータで効果的にテストを実施できればテストのコストを更に削減することができる。
【０００３】
実行経路をテストするためのテストデータは、各実行経路毎に１つあればよいわけではない。該当実行経路が正しく構築されたか否かを、様々なバリエーションのテストデータを用いて入念に確認することがテスト結果の信頼性を高める上で重要である。
【０００４】
テストデータを生成するために、ソフトウェア設計に基づき特定の結果を起こすテストデータを自動的に生成する手法が検討されている（例えば、特許文献１、２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第５１６４９２０号
【特許文献２】特開２０１２−２２１３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
システムの外部仕様からテストケースを効率的に作成するために、同値分割と呼ばれる技法が用いられる。同値分割は、システムにおける入出力関係の集合をいくつかの同値クラスに分け、各クラスから代表値を選んでテストデータとする技法である。同値クラスを分ける境界上の点（同値クラスの端点）及びその前後の最近傍格子点を明らかにしてテストデータとする技法を境界値分析と呼ぶ。境界値分析は、同値クラスの境界値付近（同値クラスの端点及びその最近傍格子点）にバグが集中するという経験則に基づいている。例えば、入力条件として「０以上９９未満」のような範囲指定がある場合、設計書で「以上」と「未満」を取り違えたり、コーディングで「≧」と「＞」の記述ミスを犯したりする誤りが起こりやすい。
【０００７】
テストデータを自動的に生成することで開発のコストは改善されるが、テスト実施時にバグが発生した場合、その問題を切り分ける必要がある。上記のように境界値付近にバグが集中する可能性が高いため、境界値付近のテストデータとそれ以外のテストデータに分けることにより、問題の切り分けが容易になると想定される。
【０００８】
本発明は、テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成することを目的とする。
【課題を解決するための手段】
【０００９】
上記の目的を実現するため、本発明の一形態に係るテストデータ生成装置は、
システムの設計情報を記述した設計書に対するテストデータを生成するテストデータ生成装置であって、
設計書から設計モデルを抽出する設計モデル抽出部と、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するテストモデル構築部と、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築する制約式構築部と、
前記制約式集合内の制約式を解き、テストデータを得る制約式解法部と、
前記テストモデル及び前記テストデータを出力するテストモデル及びテストデータ出力部と、
を有することを特徴とする。
【００１０】
また、本発明の一形態に係るテストデータ生成方法は、
システムの設計情報を記述した設計書に対するテストデータを生成するテストデータ生成装置におけるテストデータ生成方法であって、
設計書から設計モデルを抽出するステップと、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するステップと、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築するステップと、
前記制約式集合内の制約式を解き、テストデータを得るステップと、
前記テストモデル及び前記テストデータを出力するステップと、
を有することを特徴とする。
【００１１】
また、本発明の一形態に係るテストデータ生成プログラムは、
システムの設計情報を記述した設計書に対するテストデータを生成するために、コンピュータを、
設計書から設計モデルを抽出する設計モデル抽出手段、
前記設計モデルに対して特定の結果を起こすテスト項目の集合であるテストモデルを構築するテストモデル構築手段、
前記テストモデルのテスト項目について、特定の結果を起こすためにテストデータが満たすべき第１の制約式を構築し、当該第１の制約式に、テストデータが同値クラスの境界値とならないことを保証する第２の制約式を追加した制約式集合を構築する制約式構築手段、
前記制約式集合内の制約式を解き、テストデータを得る制約式解法手段、及び
前記テストモデル及び前記テストデータを出力するテストモデル及びテストデータ出力手段、
として機能させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成することが可能になる。
【図面の簡単な説明】
【００１３】
【図１】同値クラスの境界値を示す図
【図２】本発明の実施例に係るテストデータ生成装置の構成図
【図３】本発明の実施例で用いられる設計モデルのデータ構造を示す図
【図４】本発明の実施例で用いられるテストモデルのデータ構造を示す図
【図５】本発明の実施例に係るテストデータ生成方法のフローチャート
【図６】本発明の実施例で用いられる設計モデルの例を示す図
【図７】図６の設計モデルの例における境界値を示す図
【図８】本発明の実施例で用いられるテストモデルの例を示す図
【図９】図５のステップＳ１３０の詳細フローチャート
【図１０】図９のステップＳ２３０の詳細フローチャート
【図１１】図１０のステップＳ３４０の詳細フローチャート
【図１２】図１０のステップＳ３５０の詳細フローチャート
【図１３】図５のステップＳ１５０の詳細フローチャート
【図１４】本発明の実施例で用いられるエッジ関数の処理を示すフローチャート
【図１５】本発明の実施例で用いられるシフト関数の処理を示すフローチャート
【発明を実施するための形態】
【００１４】
本発明の実施例では、同値分割のためのテストデータを生成するテストデータ生成装置及びテストデータ生成方法について説明する。特に、本発明の実施例では、テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータの生成について説明する。
【００１５】
同値分割では、期待される結果が同じである入力の集合は同値クラス（以下ではドメインとも呼ばれる）と呼ばれ、同値クラスの中から１つのテストデータを選択することで、効率的にテストを進めることができる。一方、ドメインを分ける境界上の点（同値クラスの端点）及びその前後の最近傍格子点を明らかにしてテストデータとする技法を境界値分析と呼ぶ。
【００１６】
まず、本発明の実施例に関し、同値分割及び境界値分析で用いられる用語について説明する。
【００１７】
図１は、同値クラスの境界値を示す図である。図１（Ａ）は、１変数の場合の境界値を示している。変数ｘについて、同値クラスの端点をＬとしたとき、Ｌ及びＬの最近傍格子点の値を境界値と呼ぶ。同値クラスの端点Ｌは、閉区間（例えば、ｘ≧５）の場合にはドメイン内の端点（ｘ＝５）となり、開区間（例えば、ｘ＞５）の場合にはドメイン外の端点（ｘ＝５）となる。最近傍格子点は、Ｌを正及び負の方向に最小単位だけ平行移動させた点であり、最近傍点とも呼ばれる。最近傍格子点は、バグが集中しやすい点となる。Ｌが整数型である場合、最近傍格子点の値は、（Ｌ−１，Ｌ＋１）となる。
【００１８】
図１（Ｂ）は２変数の場合の境界値を示している。変数が複数ある場合、同値クラスは１つ以上の式（以下では制約式とも呼ばれる）で表現され、それぞれの式上にある点が同値クラスの端点の集合となる。変数ｘ１，...ｘｎについて、それぞれ同値クラスの端点の集合となる式をＥとしたとき、Ｅ上の値及びＥの最近傍の式上にある点を境界値と呼ぶ。変数が複数ある場合、同値クラスの端点の集合となる式は、閉区間（例えば、ｘ１＋ｘ２≦５０）の場合には、ドメイン内の端点の集合（ｘ１＋ｘ２＝５０）となり、開区間（例えば、ｘ１＋ｘ２＜５０）の場合には、ドメイン外の端点の集合（ｘ１＋ｘ２＝５０）となる。最近傍の式とは、同値クラスの端点の集合となる式Ｅについて、式Ｅ内のある変数ｘｉに着目し、式をｘｉ方向にそれぞれ最小単位だけ平行移動させた式である。変数ｘｉが整数型である場合、最近傍の式は、式Ｅをｘｉ軸方向にそれぞれ＋１，−１だけ平行移動させた式となる。最近傍の式上の点は、同値クラスの端点の集合を表す式Ｅのいずれかの点の最近傍格子点になるため、バグが集中しやすい点となる。図１（Ｂ）は変数ｘ１に着目したときの境界値の集合を示しているが、変数ｘ２に着目したときの境界値の集合も、式Ｅをｘ２軸方向にそれぞれ＋１，−１だけ平行移動させることにより同様に表すことができる。
【００１９】
１変数の場合もｎ変数の特殊な場合（ｎ＝１）と考えることができ、制約式（例えば、ｘ≧５又はｘ＞５）上にある点（ｘ＝５）が同値クラスの端点であり、制約式をｘ方向に最小単位だけ平行移動させた式上の点（ｘ＝４，６）が端点の最近傍の式上にある点となる。
【００２０】
本発明の実施例では、ドメイン内の点をｉｎポイントと呼び、ドメイン外の点をｏｕｔポイントと呼ぶ。また、同値クラスの端点をｏｎポイントと呼び、ｏｎポイントの最近傍格子点をｏｆｆポイントと呼ぶ。
【００２１】
すなわち、ｏｎポイントは制約式上の点であり、１変数の場合のｏｎポイントは端点を表し、ｎ（ｎ≧２）変数の場合のｏｎポイントは式上の任意の点を表す。また、ｏｆｆポイントは端点の最近傍の式上にある点であり、１変数の場合のｏｆｆポイントは端点の最近傍格子点を表し、ｎ（ｎ≧２）変数の場合のｏｆｆポイントは端点の最近傍の式上の任意の点を表す。
【００２２】
ｉｎポイントには、ドメイン内のｏｎポイント及びｏｆｆポイントが含まれる。すなわち、ｉｎポイントには、ドメイン内である限り、ドメインを構成する式や各式の最近傍の式上の点も含まれる。また、ｏｕｔポイントには、ドメイン外のｏｎポイント及びｏｆｆポイントが含まれる。すなわち、ｏｕｔポイントには、ドメイン外である限り、ドメインを構成する式や各式の最近傍の式上の点も含まれる。
【００２３】
また、ドメイン内の点であるテストデータに付与するタグを正常系と呼び、ドメイン外の点であるテストデータに付与するタグを異常系と呼ぶ。
【００２４】
以下、同値分割のためのテストデータを生成するテストデータ生成装置及びテストデータ生成方法について詳細に説明する。
【００２５】
＜テストデータ生成装置の構成＞
図２は、本発明の実施例に係るテストデータ生成装置の構成図である。テストデータ生成装置１０は、ユーザ（或いはユーザ端末）からシステムの設計情報を記述した設計書を受け取り、ユーザに対してテストモデル及びテストデータを出力する装置である。テストデータ生成装置１０は、プロセッサ等のＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）等のメモリ装置、ハードディスク等の記憶装置等から構成されたコンピュータでもよい。例えば、以下に説明するテストデータ生成装置１０の各機能及び処理は、記憶装置又はメモリ装置に格納されているデータやプログラムをＣＰＵが実行することによって実現される。
【００２６】
テストデータ生成装置１０は、設計モデル抽出部１０１と、テストモデル構築部１０３と、制約式構築部１０５と、制約式解法部１０７と、期待結果付与部１０９と、テストモデル及びテストデータ出力部１１１とを有する。
【００２７】
設計モデル抽出部１０１は、入力された設計書から設計モデルを抽出する。設計書はシステムの設計情報を記述したものであり、設計モデルはシステムの設計上の機能を表す１つ以上のビジネスロジックで構成される。ビジネスロジックは、例えば、ソフトウェアが有する機能群のうちの一つの機能、ソフトウェアがコンピュータに実行させる複数の処理手順のうちの一つの処理手順に対応する概念、又は当該処理手順をコンピュータに実行させるプログラムに対応する概念等である。ビジネスロジックは、システムに入力される１つ以上の入力変数と、特定の結果を起こすために入力変数が満たすべき１つ以上の制約式とで表現可能である。制約式は、相互依存関係がある複数の入力変数が満たすべき条件を記述した式でもよい。相互依存関係がある入力変数とは、入力変数が満たすべき制約において、一方の入力変数の値が、他方の入力変数の値に依存する関係をいう。例えば、入力変数をＸ及びＹとしたときに、Ｘ＋Ｙ≦１００のように、１つの制約式に複数の入力変数が含まれる場合に、入力変数Ｘの値と入力変数Ｙの値とは相互依存関係を有する。
【００２８】
設計モデル抽出部１０１は、入力された設計書を読み取り、設計モデルを表現するための所定のデータ構造に変換してもよい。例えば、データ構造は、ＢＮＦ（Backus Naur Form）で記述されてもよい。
【００２９】
図３は、本発明の実施例で用いられる設計モデルのデータ構造を示す図である。左辺に表れる記号＜ｘｘｘ＞は非終端記号と呼ばれ、いずれの左辺に表れない記号ｘｘｘ：ｙｙｙは終端記号と呼ばれ、ｘｘｘがｙｙｙ型であることを示す。図３に示すように、入力変数に対して最大値及び最小値が定義され、特定の結果に対応するドメインを構成する式が定義される。
【００３０】
テストモデル構築部１０３は、設計モデル抽出部１０１から設計モデルを受け取り、設計モデルに対して特定の結果を起こすテスト項目の集合（以下ではテスト項目集合とも呼ばれる）であるテストモデルを構築する。テスト項目はドメイン毎に構築され、各ドメインのテスト項目の結果が正常となるテストケースと、テスト項目の結果が異常となるテストケースとが含まれる。
【００３１】
図４は、本発明の実施例で用いられるテストモデルのデータ構造を示す図である。設計モデルが図３に示すようにＢＮＦで記述される場合、テストモデルも同様にＢＮＦで記述可能である。ここでは、テスト項目毎に、制約式を満たすテストケース（ｉｎポイント）と、いずれかの制約式を満たさないテストケース（ｏｕｔポイント）等が構築されるが、具体的なテストデータは生成されない。
【００３２】
制約式構築部１０５は、設計モデル抽出部１０１から設計モデルを受け取り、テストモデル構築部１０３からテストモデルを受け取る。そして、制約式構築部１０５は、受け取ったテストモデルのテスト項目について特定の結果を起こすためにテストデータが満たすべき制約式を集め、制約式集合に追加する。なお、制約式集合は最終的なテストデータの具体値を生成するための中間データである。更に、制約式構築部１０５は、テストデータが同値クラスの境界値とならないことを保証する制約式を制約式集合に追加する。すなわち、制約式構築部１０５は、テストデータが同値クラスの端点とならないことを保証する制約式と、テストデータが同値クラスの端点の最近傍の式上の点とならないことを保証する制約式とを制約式集合に追加する。
【００３３】
制約式解法部１０７は、制約式集合の制約式を解き、テストデータを得る。例えば、制約式を制約ソルバを使って解くことにより、具体的なテストデータが得られる。本発明の実施例では、テストデータが同値クラスの境界値とならないことを保証する制約式が追加されているため、制約ソルバを使って得られたテストデータには境界値（端点及び端点の最近傍の式上の点）が含まれない。
【００３４】
期待結果付与部１０９は、テストデータが正常系であるか異常系であるかを示すタグを付与する。期待結果付与部１０９は、得られたテストデータを制約式に入力し、その結果が正常であるか否かにより、正常系又は異常系を判断することができる。
【００３５】
テストモデル及びテストデータ出力部１１１は、テストモデル構築部１０３によって構築されたテストモデルと、制約式解法部１０７によって得られたテストデータとをユーザ（或いはユーザ端末）に対して出力する。テストモデル及びテストデータは、テストデータ生成装置に接続された周辺機器（例えば、表示装置、記憶装置等）に出力されてもよい。
【００３６】
＜テストデータ生成装置におけるテストデータ生成方法のフローチャート＞
図５は、本発明の実施例に係るテストデータ生成方法のフローチャートである。
【００３７】
まずステップＳ１１０において、設計モデル抽出部１０１は、設計書を読み込み、入力された設計書から設計モデルを抽出する。設計モデルは、図３に示すようなデータ構造で定義されてもよい。
【００３８】
図６は、本発明の実施例で用いられる設計モデルの例を示す図である。ここでは、映画館のチケット購入でカップルの年齢の合計が５０歳以下だと割引される映画館チケット購入機能を例に挙げて説明する。ただし、男性は１８歳以上、女性は１６歳以上であることを前提とする。
【００３９】
映画館チケット購入機能というビジネスロジックの入力変数は、男性の年齢及び女性の年齢である。男性の年齢及び女性の年齢のそれぞれに最小値（０）及び最大値（１００）が設定されてもよい。このビジネスロジックには、「割引有り」という結果に対応するドメインと「割引無し」という結果に対応するドメインが存在する。「割引有り」という結果をもたらす制約条件は、「男女の年齢の合計が５０以下」であるため、この制約条件は以下の式（１）〜（３）で表現できる。
式（１）：男性の年齢＋女性の年齢≦５０
式（２）：男性の年齢≧１８
式（３）：女性の年齢≧１６
同様に、「割引無し」という結果をもたらす制約条件は、「男女の年齢の合計が５０より大きい」であるため、この制約条件は以下の式（４）〜（６）で表現できる。
式（４）：男性の年齢＋女性の年齢＞５０
式（５）：男性の年齢≧１８
式（６）：女性の年齢≧１６
図７は、図６の設計モデルの例における境界値を示す図である。「男女の年齢の合計が５０以下」という制約条件に対応するドメインは、式（１）〜（３）を入力変数（男性の年齢，女性の年齢）で表現した網掛けの部分に相当する。この網掛けの部分の領域内の点がｉｎポイントである。また、式（１）〜（３）上の点がｏｎポイント（端点）であり、ｏｎポイントの最近傍点がｏｆｆポイントである。映画館チケット購入機能の例では、ｏｎポイントもドメイン内にあるため、ｉｎポイントに含まれる。図７では特に式（１）についてのｏｎポイント及びｏｆｆポイントを示しているが、式（２）及び式（３）についても同様にｏｎポイント及びｏｆｆポイントが存在する。
【００４０】
次にステップＳ１２０において、テストモデル構築部１０３は、設計モデルを受け取り、テストモデルを構築する。具体的には、設計モデルのビジネスロジックのそれぞれに対応してテスト項目集合を作成する。テスト項目集合は、特定の結果を起こすテスト項目の集合であり、ドメイン毎のテスト項目を含む。更に、テスト項目に対して、ｉｎポイント及びｏｕｔポイントのテストケースを作成する。テストモデルは、図４に示すようなデータ構造で定義されてもよい。
【００４１】
図８は、本発明の実施例で用いられるテストモデルの例である。映画館チケット購入機能の例では、テスト項目が「男女の年齢の合計が５０以下」の場合に、式（１）〜（３）を満たすテストケース（ｉｎポイント）と、式（１）〜（３）のいずれかを満たさないテストケース（ｏｕｔポイント）が構築される。また、テスト項目が「男女の年齢の合計が５０より大きい」の場合に、式（４）〜（６）を満たすテストケース（ｉｎポイント）と、式（４）〜（６）のいずれかを満たさないテストケース（ｏｕｔポイント）が構築される。図８には、具体的なテストデータ（例えば、ｉｎポイント［正常系］の（男性の年齢，女性の年齢）＝（２３，２２））が示されているが、テストモデル構築部１０３は、具体的なテストデータは生成しない。
【００４２】
設計モデルに複数のビジネスロジックが含まれる場合には、複数のテスト項目集合が存在する。これをテスト項目集合群と呼ぶ。テスト項目集合群のそれぞれのテスト項目集合に対して、以下のステップＳ１３０〜Ｓ１５０の処理が行われ、ステップＳ１７０において最終的なテストモデル及びテストデータが出力される。
【００４３】
ステップＳ１３０において、制約式構築部１０５は、テストモデル及び設計モデルを受け取り、テストモデルのテスト項目について、ｉｎポイントが満たすべき制約式及びｏｕｔポイントが満たすべき制約式を構築し、制約式集合に追加する。更に、制約式構築部１０５は、テストデータが同値クラスの境界値とならないことを保証する制約式を制約式集合に追加する。
【００４４】
図９は、ステップＳ１３０の詳細フローチャートである。
【００４５】
制約式構築部１０５は、ステップＳ２１０においてテストモデルを読み込み、ステップＳ２２０において設計モデルを読み込む。
【００４６】
ステップＳ２３０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目についてテストデータが満たすべき制約式を構築し、制約式集合に追加する。
【００４７】
ステップＳ２４０において、制約式構築部１０５は、テストモデルにおいてテストデータが満たすべき制約式集合内で参照している入力変数に対して、入力変数定義における最小値及び最大値に関する制約式を作成し、制約式集合に追加する。
【００４８】
図１０は、ステップＳ２３０の詳細フローチャートである。
【００４９】
制約式構築部１０５は、ステップＳ３１０においてテストモデルを読み込み、ステップＳ３２０において設計モデルを読み込む。
【００５０】
ステップＳ３４０において、本発明の実施例で用いられるテストで効果的なｉｎポイントの制約式を作成する。このテストで効果的なｉｎポイントには、ｏｎポイント及びｏｆｆポイントは含まれない。
【００５１】
図１１は、ステップＳ３４０の詳細フローチャートである。
【００５２】
制約式構築部１０５は、ステップＳ４１０においてテストモデルを読み込み、ステップＳ４２０において設計モデルを読み込む。
【００５３】
ステップＳ４５０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、「Ｅ１  ａｎｄ  Ｅ２  ａｎｄ  ...ａｎｄ  Ｅｍ」というドメイン内に収まる正常系の値とするための制約式を構築する。
【００５４】
ステップＳ４６０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、「Ｎｏｔ（Ｅｄｇｅ（Ｅ１）  ｏｒ  Ｅｄｇｅ（Ｅ２）  ｏｒ  ...ｏｒ  Ｅｄｇｅ（Ｅｍ））」というｏｎポイントを除く制約式を構築する。ただし、Ｅｄｇｅ（）は、ドメインのｏｎポイントを算出するためのエッジ関数であり、エッジ関数の処理については、以下で詳細に説明する。
【００５５】
ステップＳ４７０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、Ｅ１〜Ｅｍの各Ｅｉについて、Ｅｉの中で参照される入力変数をＸｉ１，Ｘｉ２，...Ｘｉｎとしたとき「Ｎｏｔ（Ｓｈｉｆｔ（Ｘｉ１±１）（Ｅｉ）  ｏｒ  Ｓｈｉｆｔ（Ｘｉ２±１）（Ｅｉ）  ｏｒ  ...ｏｒ  Ｓｈｉｆｔ（Ｘｉｎ±１）（Ｅｉ））」というｏｆｆポイントを除く制約式を構築する。ただし、Ｓｈｉｆｔ（）は、ドメインのｏｆｆポイントを算出するためのシフト関数であり、シフト関数の処理については、以下で詳細に説明する。
【００５６】
ステップＳ４８０において、制約式構築部１０５は、ステップＳ４５０〜Ｓ４７０において構築した制約式を制約式集合に追加する。
【００５７】
映画館チケット購入機能の例では、「男女の年齢の合計が５０以下」というテスト項目について、ステップＳ４５０において式（１）〜（３）が構築される。ここで男性の年齢をｍ、女性の年齢をｗと表すと、式（１）〜（３）は以下のように表現される。
Ｅ１：ｍ＋ｗ≦５０
Ｅ２：ｍ≧１８
Ｅ３：ｗ≧１６
更に、ステップＳ４６０において、エッジ関数によって以下のｏｎポイントが得られる。
Ｅｄｇｅ（Ｅ１）→ｍ＋ｗ＝５０
Ｅｄｇｅ（Ｅ２）→ｍ＝１８
Ｅｄｇｅ（Ｅ３）→ｗ＝１６
更に、ステップＳ４７０において、シフト関数によって以下のｏｆｆポイントが得られる。
Ｓｈｉｆｔ（ｍ±１）（Ｅ１）→（ｍ±１）＋ｗ＝５０
Ｓｈｉｆｔ（ｗ±１）（Ｅ１）→ｍ＋（ｗ±１）＝５０
Ｓｈｉｆｔ（ｍ±１）（Ｅ２）→（ｍ±１）＝１８
Ｓｈｉｆｔ（ｗ±１）（Ｅ３）→（ｗ±１）＝１６
従って、テストで効果的なｉｎポイントを作成するための制約式は以下のようになる。
Ｅ１  ａｎｄ  Ｅ２  ａｎｄ  Ｅ３  ａｎｄ
Ｎｏｔ（Ｅｄｇｅ（Ｅ１）  ｏｒ  Ｅｄｇｅ（Ｅ２）  ｏｒ  Ｅｄｇｅ（Ｅ３））  ａｎｄ
Ｎｏｔ（
Ｓｈｉｆｔ（ｍ±１）（Ｅ１）  ｏｒ  Ｓｈｉｆｔ（ｗ±１）（Ｅ１）  ｏｒ
Ｓｈｉｆｔ（ｍ±１）（Ｅ２）  ｏｒ  Ｓｈｉｆｔ（ｗ±１）（Ｅ３）
）
これを展開すると以下のようになる。
ｍ＋ｗ≦５０  ａｎｄ  ｍ≧１８  ａｎｄ  ｗ≧１６  ａｎｄ
Ｎｏｔ（ｍ＋ｗ＝５０  ｏｒ  ｍ＝１８  ｏｒ  ｗ＝１６）  ａｎｄ
Ｎｏｔ（
（ｍ＋１）＋ｗ＝５０  ｏｒ  ｍ＋（ｗ＋１）＝５０  ｏｒ
（ｍ−１）＋ｗ＝５０  ｏｒ  ｍ＋（ｗ−１）＝５０  ｏｒ
（ｍ＋１）＝１８  ｏｒ  （ｗ＋１）＝１６  ｏｒ
（ｍ−１）＝１８  ｏｒ  （ｗ−１）＝１６
）
同様に、「男女の年齢の合計が５０より大きい」というテスト項目についても、ステップＳ４５０で式（４）〜（６）が構築される。更に、ステップＳ４６０及びＳ４７０で上記と同様に境界値を除く制約式が構築され、ステップＳ４８０において制約式集合に追加される。
【００５８】
同様に、ステップＳ３５０において、本発明の実施例で用いられるテストで効果的なｏｕｔポイントの制約式を作成する。このテストで効果的なｏｕｔポイントには、ｏｎポイント及びｏｆｆポイントは含まれない。
【００５９】
図１２は、ステップＳ３５０の詳細フローチャートである。
【００６０】
制約式構築部１０５は、ステップＳ５１０においてテストモデルを読み込み、ステップＳ５２０において設計モデルを読み込む。
【００６１】
ステップＳ５５０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、「Ｎｏｔ（Ｅ１  ａｎｄ  Ｅ２  ａｎｄ  ...ａｎｄ  Ｅｍ）」というドメイン外となる異常値とするための制約式を構築する。
【００６２】
ステップＳ５６０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、「Ｎｏｔ（Ｅｄｇｅ（Ｅ１）  ｏｒ  Ｅｄｇｅ（Ｅ２）  ｏｒ  ...ｏｒ  Ｅｄｇｅ（Ｅｍ））」というｏｎポイントを除く制約式を構築する。
【００６３】
ステップＳ５７０において、制約式構築部１０５は、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、Ｅ１〜Ｅｍの各Ｅｉについて、Ｅｉの中で参照される入力変数をＸｉ１，Ｘｉ２，...Ｘｉｎとしたとき「Ｎｏｔ（Ｓｈｉｆｔ（Ｘｉ１±１）（Ｅｉ）  ｏｒ  Ｓｈｉｆｔ（Ｘｉ２±１）（Ｅｉ）  ｏｒ  ...ｏｒ  Ｓｈｉｆｔ（Ｘｉｎ±１）（Ｅｉ））」というｏｆｆポイントを除く制約式を構築する。
【００６４】
ステップＳ５８０において、制約式構築部１０５は、ステップＳ５５０〜Ｓ５７０において構築した制約式を制約式集合に追加する。
【００６５】
映画館チケット購入機能の例では、「男女の年齢の合計が５０以下」というテスト項目について、ステップＳ５５０において式（１）〜（３）のドメイン外となる式が構築される。ここで男性の年齢をｍ、女性の年齢をｗと表すと、式（１）〜（３）は以下のように表現される。
Ｅ１：ｍ＋ｗ≦５０
Ｅ２：ｍ≧１８
Ｅ３：ｗ≧１６
更に、ステップＳ５６０において、エッジ関数によって以下のｏｎポイントが得られる。
Ｅｄｇｅ（Ｅ１）→ｍ＋ｗ＝５０
Ｅｄｇｅ（Ｅ２）→ｍ＝１８
Ｅｄｇｅ（Ｅ３）→ｗ＝１６
更に、ステップＳ５７０において、シフト関数によって以下のｏｆｆポイントが得られる。
Ｓｈｉｆｔ（ｍ±１）（Ｅ１）→（ｍ±１）＋ｗ＝５０
Ｓｈｉｆｔ（ｗ±１）（Ｅ１）→ｍ＋（ｗ±１）＝５０
Ｓｈｉｆｔ（ｍ±１）（Ｅ２）→（ｍ±１）＝１８
Ｓｈｉｆｔ（ｗ±１）（Ｅ３）→（ｗ±１）＝１６
従って、テストで効果的なｏｕｔポイントを作成するための制約式は以下のようになる。
Ｎｏｔ（Ｅ１  ａｎｄ  Ｅ２  ａｎｄ  Ｅ３）  ａｎｄ
Ｎｏｔ（Ｅｄｇｅ（Ｅ１）  ｏｒ  Ｅｄｇｅ（Ｅ２）  ｏｒ  Ｅｄｇｅ（Ｅ３））  ａｎｄ
Ｎｏｔ（
Ｓｈｉｆｔ（ｍ±１）（Ｅ１）  ｏｒ  Ｓｈｉｆｔ（ｗ±１）（Ｅ１）  ｏｒ
Ｓｈｉｆｔ（ｍ±１）（Ｅ２）  ｏｒ  Ｓｈｉｆｔ（ｗ±１）（Ｅ３）
）
これを展開すると以下のようになる。
Ｎｏｔ（ｍ＋ｗ≦５０  ａｎｄ  ｍ≧１８  ａｎｄ  ｗ≧１６）  ａｎｄ
Ｎｏｔ（ｍ＋ｗ＝５０  ｏｒ  ｍ＝１８  ｏｒ  ｗ＝１６）  ａｎｄ
Ｎｏｔ（
（ｍ＋１）＋ｗ＝５０  ｏｒ  ｍ＋（ｗ＋１）＝５０  ｏｒ
（ｍ−１）＋ｗ＝５０  ｏｒ  ｍ＋（ｗ−１）＝５０  ｏｒ
（ｍ＋１）＝１８  ｏｒ  （ｗ＋１）＝１６  ｏｒ
（ｍ−１）＝１８  ｏｒ  （ｗ−１）＝１６
）
同様に、「男女の年齢の合計が５０より大きい」というテスト項目についても、ステップＳ５５０で式（４）〜（６）のドメイン外となる式が構築される。更に、ステップＳ５６０及びＳ５７０で上記と同様に境界値を除く制約式が構築され、ステップＳ５８０において制約式集合に追加される。
【００６６】
図９に戻り、ステップＳ２４０において、制約式構築部１０５は、テストモデルを受け取り、テストモデルにおいて制約式集合内で参照している入力変数Ｘ１，...，Ｘｎに対して、設計モデルの入力変数定義における最小値（ＭｉｎＶａｌｕｅ）及び最大値（ＭａｘＶａｌｕｅ）を取得し、「ＭｉｎＶａｌｕｅ≦Ｘｉ  ａｎｄ  ＭａｘＶａｌｕｅ≧Ｘｉ」（１≦ｉ≦ｎ）という制約式を作成し、制約式集合に追加する。
【００６７】
映画館チケット購入機能の例では、男性の年齢ｍ及び女性の年齢ｗに対して以下の制約式が制約式集合に追加される。
０≦ｍ≦１００
０≦ｗ≦１００
図５に戻り、ステップＳ１４０において、制約式解法部１０７は、制約式集合内の制約式をＳＭＴソルバ、シンプレックス法等を用いて解き、テストデータの具体値を得る。
【００６８】
図８に示す映画館チケット購入機能のテストモデルでは、制約式解法部１０７によって、具体的なテストデータ（例えば、ｉｎポイント［正常系］の（男性の年齢，女性の年齢）＝（２３，２２））が求められる。映画館チケット購入機能の例では、例えば、（男性の年齢，女性の年齢）＝（１８，１６）が境界値になるが、本発明の実施例で得られたテストデータにはこのような境界値は含まれない。
【００６９】
ステップＳ１５０において、期待結果付与部１０９は、テストデータが正常系であるか異常系であるかを示す期待結果を付与する。
【００７０】
図１３は、ステップＳ１５０の詳細フローチャートである。
【００７１】
期待結果付与部１０９は、ステップＳ８１０においてテストモデルを読み込み、ステップＳ８２０においてテストデータを読み込む。
【００７２】
ステップＳ８３０において、期待結果付与部１０９は、テスト結果が正常となるテストデータであることを判定する制約式を構築する。具体的には、読み込んだテストモデルのテスト項目に対応するドメインを構成する式Ｅ１，Ｅ２，...Ｅｍを取得し、「Ｅ１  ａｎｄ  Ｅ２  ａｎｄ  ...ａｎｄ  Ｅｍ」というドメイン内に収まる正常系の値とするための制約式を構築する。そして、制約式の変数を各変数に対応したテストデータの具体値で置換した正常系判定用制約集合を構築する。
【００７３】
映画館チケット購入機能のテストモデルで、例えば、男性の年齢ｍ＝４０、女性の年齢ｗ＝３０というテストデータが得られた場合、ｍ＋ｗ≧５０という式から４０＋３０≧５０という式に置換する。
【００７４】
ステップＳ８４０において、期待結果付与部１０９は、テストデータが正常系の値であるか否かを判定する。上記の正常系判定用制約集合内の制約式を連立させ、ＳＭＴソルバなどを用いて解き、式が成立するか否か（ＳＡＴであるかＵＮＳＡＴであるか）を判定する。式が成立すれば正常系の値となる。
【００７５】
ステップＳ８５０において、判定結果が正常系である場合、期待結果付与部１０９はテストデータに正常系のタグを付与する。
【００７６】
ステップＳ８６０において、判定結果が異常系である場合、期待結果付与部１０９はテストデータに異常系のタグを付与する。
【００７７】
図５に戻り、ステップＳ１７０において、テストモデル及びテストデータ出力部１１１は、テストモデル及びテストデータを出力する。
【００７８】
＜エッジ関数及びシフト関数＞
図１４は、本発明の実施例で用いられるエッジ関数の処理を示すフローチャートである。エッジ関数は、制約式の演算子を等号に置換することにより求められる。具体的には以下の処理によって求められる。
【００７９】
ステップＳ１０１０において、式が読み込まれる。この式をＥとする。
【００８０】
ステップＳ１０２０において、式Ｅを複製し、複製した式をＥ'とする。
【００８１】
ステップＳ１０３０において、複製した式Ｅ'の演算子を"＝"に置換する。すなわち、Ｅ'＝「ａ１＊ｘ１＋ａ２＊ｘ２＋...ａｎ＊ｘｎ＜ｏｐ＞Ｃ」（ａｉは係数、ｘｉは変数、＜ｏｐ＞は演算子、Ｃは定数）が、Ｅ'＝「ａ１＊ｘ１＋ａ２＊ｘ２＋...ａｎ＊ｘｎ＝Ｃ」へと変換される。
【００８２】
映画館チケット購入機能のテストモデルにおけるｍ＋ｗ≧５０という式は、エッジ関数によってｍ＋ｗ＝５０という式に変換される。
【００８３】
ステップＳ１０４０において、式Ｅ'をエッジ関数の戻り値として返す。
【００８４】
図１５は、本発明の実施例で用いられるシフト関数の処理を示すフローチャートである。シフト関数は、制約式の演算子を等号に置換し、制約式の変数を正及び負の方向に最小単位だけ平行移動させることにより求められる。具体的には以下の処理によって求められる。
【００８５】
ステップＳ１１１０において、式が読み込まれる。この式をＥとする。
【００８６】
ステップＳ１１２０において、着目変数と正負方向が読み込まれる。着目変数はＸとし、正負方向はＤとする。
【００８７】
ステップＳ１１３０において、式Ｅを複製し、複製した式をＥ'とする。
【００８８】
ステップＳ１１４０において、複製した式Ｅ'の演算子を"＝"に置換する。すなわち、Ｅ'＝「ａ１＊ｘ１＋ａ２＊ｘ２＋...ａｎ＊ｘｎ＜ｏｐ＞Ｃ」（ａｉは係数、ｘｉは変数、＜ｏｐ＞は演算子、Ｃは定数）が、Ｅ'＝「ａ１＊ｘ１＋ａ２＊ｘ２＋...ａｎ＊ｘｎ＝Ｃ」へと変換される。
【００８９】
Ｓ１１５０において、着目変数を正負どちらかの方向へ平行移動させた式へ置換する。正負方向Ｄが＋である場合、Ｅ'における着目変数Ｘを（Ｘ＋１）という式で置換する。正負方向Ｄが−である場合、Ｅ'における着目変数Ｘを（Ｘ−１）という式で置換する。
【００９０】
ステップＳ１１６０において、式Ｅ'をシフト関数の戻り値として返す。
【００９１】
映画館チケット購入機能のテストモデルにおけるｍ＋ｗ≧５０という式は、着目変数をｍとしたときに、シフト関数によって（ｍ＋１）＋ｗ＝５０、（ｍ−１）＋ｗ＝５０という式に変換される。
【００９２】
＜本発明の実施例の効果＞
本発明の実施例によれば、特定の結果を起こすテストデータの集合の中の１つの具体値を生成することが可能になる。また、テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成することが可能になる。
【００９３】
更に、本発明の実施例では、変数が複数ある場合の制約式も扱うことができるため、相互依存関係がある複数の入力変数向けのテストデータを生成することも可能である。
【００９４】
説明の便宜上、本発明の実施例に係るテストデータ生成装置は機能的なブロック図を用いて説明しているが、本発明の実施例に係るテストデータ生成装置は、ハードウェア、ソフトウェアまたはそれらの組み合わせで実現されてもよい。例えば、本発明の実施例は、コンピュータに対して本発明の実施例に係るテストデータ生成装置の各機能を実現させるプログラム、コンピュータに対して本発明の実施例に係るテストデータ生成方法の各手順を実行させるプログラム等により、実現されてもよい。また、各機能部が必要に応じて組み合わせて使用されてもよい。また、本発明の実施例に係る方法は、実施例に示す順序と異なる順序で実施されてもよい。
【００９５】
以上、テスト実施時にバグが発生した場合に境界に由来するバグではないことを保証するテストデータを生成するための手法について説明したが、本発明は、上記の実施例に限定されることなく、特許請求の範囲内において、種々の変更・応用が可能である。
【符号の説明】
【００９６】
１０    テストデータ生成装置
１０１  設計モデル抽出部
１０３  テストモデル構築部
１０５  制約式構築部
１０７  制約式解法部
１０９  期待結果付与部
１１１  テストモデル及びテストデータ出力部
【図１】
2016081232.tif 000003
【図２】
2016081232.tif 000004
【図３】
2016081232.tif 000005
【図４】
2016081232.tif 000006
【図５】
2016081232.tif 000007
【図６】
2016081232.tif 000008
【図７】
2016081232.tif 000009
【図８】
2016081232.tif 000010
【図９】
2016081232.tif 000011
【図１０】
2016081232.tif 000012
【図１１】
2016081232.tif 000013
【図１２】
2016081232.tif 000014
【図１３】
2016081232.tif 000015
【図１４】
2016081232.tif 000016
【図１５】
2016081232.tif 000017