(57)【要約】      （修正有）【課題】ルール群ネットワークを用いてテストケースを生成する装置及び方法を提供する。【解決手段】ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定される。生成装置１００は、ルール群ネットワークを走査して、祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせることで各ノードの大域的な制限を算出する走査部１１０と、端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する事実情報取得部１２０と、テストケースに含まれる必要がある事実群と各事実属性の値範囲とを含む事実情報に基づいてテストケースを生成するテストケース生成部１３０とを含む。これにより、ビジネスルール管理システム（ＢＲＭＳ）においてテストケースを自動的に生成できる。【選択図】図１
2015204116.tif 000002
【特許請求の範囲】
【請求項１】
ルール群ネットワークを用いてテストケースを生成するテストケースの生成装置であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、
前記テストケースの生成装置は、
前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出する走査手段であって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、走査手段と、
前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する事実情報取得手段であって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、事実情報取得手段と、
前記事実情報に基づいてテストケースを生成するテストケース生成手段と、を含む、テストケースの生成装置。
【請求項２】
各ノードの大域的な制限は、親ノードの大域的な制限と自分の局所的な制限とを組み合わせて得られる、請求項１に記載のテストケースの生成装置。
【請求項３】
前記走査手段は、前記ルール群ネットワークにおける各ノードについて、全ての親ノードにアクセスした後で該ノード自身にアクセスするように、前記ルートノードから深さ優先又は幅優先の方式で前記ルール群ネットワークを走査する、請求項１に記載のテストケースの生成装置。
【請求項４】
前記大域的な制限は、以下の制限のうち１つ又は複数を含み、
第１の制限は、事実自身に対する制限であり、
第２の制限は、前記第１の制限における事実間の制限であり、
第３の制限は、存在を許可されない事実の制限であり、
第４の制限は、前記第１の制限における事実と前記第３の制限における事実との間の制限であり、
第５の制限は、存在が必要である事実の制限であり、
第６の制限は、前記第１の制限における事実と前記第５の制限における事実との間の制限であり、
第７の制限は、累計操作を行うための事実の制限であり、
第８の制限は、前記第１の制限における事実と前記第７の制限における事実との間の制限である、請求項１に記載のテストケースの生成装置。
【請求項５】
前記事実属性の値範囲は、前記事実属性の明示的な値範囲及び暗示的な値範囲を含む、請求項１に記載のテストケースの生成装置。
【請求項６】
前記事実情報取得手段は、所定の規則に従って２つの事実を併合する、請求項１に記載のテストケースの生成装置。
【請求項７】
前記所定の規則は、以下の規則のうち１つであり、
第１の規則は、前記２つの事実が同一のＩＤを有することであり、
第２の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在しておらず、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることであり、
第３の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在していないことであり、
第４の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることである、請求項６に記載のテストケースの生成装置。
【請求項８】
前記テストケース生成手段は、組み合わせ試験の方法でテストケースを生成する、請求項１に記載のテストケースの生成装置。
【請求項９】
前記テストケース生成手段は、前記端末ノードの大域的な制限に基づいて、前記ルール群ネットワークに関連する全てのルールを活性化することが可能な１つ又は複数のテストケースを生成する、請求項８に記載のテストケースの生成装置。
【請求項１０】
ルール群ネットワークを用いてテストケースを生成するテストケースの生成方法であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、
前記テストケースの生成方法は、
前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出するステップであって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、ステップと、
前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得するステップであって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、ステップと、
前記事実情報に基づいてテストケースを生成するステップと、を含む、テストケースの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理技術分野に関し、具体的にはルール群ネットワークを用いてテストケースを生成する装置及び方法に関する。
【背景技術】
【０００２】
ビジネスルール管理システム（ＢＲＭＳ：Ｂｕｓｉｎｅｓｓ  Ｒｕｌｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）では、業務論理はルール（Ｒｕｌｅｓ）の形で表される。ＢＲＭＳによれば、ユーザは、コードを修正することなく、ルールを修正することで業務論理を変更できる。業務ルールはコードに比べて業務専門家により理解、修正されやすいため、ＢＲＭＳは従来のソフトウェアに比べて柔軟性を有する。事実（Ｆａｃｔｓ）とルールの条件とに対してパターンマッチングを行うことで、ＢＲＭＳのルールエンジンは、条件を満たす事実及びそれに対応するルールを見つけ、衝突を解決してルールを実行することができる。また、Ｒｅｔｅはルールエンジンにおけるパターンマッチングアルゴリズムの１つであり、ノード間で一部のマッチング結果を共有することでパターンマッチングの効率を向上する。
【０００３】
ＢＲＭＳにおいては、ルールの正確性、整合性及び一致性を確保するためにルールに対してテストを行うのは１つの課題である。従来のＢＲＭＳのテスト方法、例えばＯｐｅｎＲｕｌｅｓは、ユーザがテストケースを手動で作成する必要があるため、時間がかかり、テストカバレージがよくない。
【０００４】
従って、テストケースを自動的に生成し、ルールの試験を全面的に行うことができる方法が求められている。しかし、従来のソフトウェアのテストケースの自動生成方法はＢＲＭＳに適用できない。従来のソフトウェアは、論理が関数又はメソッドにより記述されるため、これらの関数又はメソッドに対して試験を行うことでソフトウェアの品質を確保できる。また、関数又はメソッドに入力パラメータ、出力パラメータが明示的に規定されているため、これらの入力パラメータ、出力パラメータに基づいてテストケースを容易に生成できる。一方、ＢＲＭＳは、論理がルールの条件及び操作で表され、ルールの入力が作業メモリに存在する事実の希望により暗示的に指定される。関数又はメソッドからテストケースを生成することと異なって、テストケースを生成する前に、各種類について、全てのルールの試験をカバーするに必要な事実の数を算出し、事実の各属性の値を決定する必要がある。このため、条件及び操作からテストケースを生成することは簡単ではない。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以下は、本発明の一の態様の基本を理解させるため、本発明の簡単な説明を記載している。なお、これらの記載は、本発明を限定するものではなく、本発明の肝心な部分又は重要な部分を確定するものではない。その目的は、単なる簡略化の形で本発明のある概念を示し、後述の詳細な説明の前文とする。
【０００６】
従来技術を鑑みて、本発明は、ＢＲＭＳにおいてテストケースを自動的に生成できる、ルール群ネットワークを用いてテストケースを生成する装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を実現するため、本発明の一の態様では、ルール群ネットワークを用いてテストケースを生成するテストケースの生成装置であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、前記テストケースの生成装置は、前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出する走査手段であって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、走査手段と、前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する事実情報取得手段であって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、事実情報取得手段と、前記事実情報に基づいてテストケースを生成するテストケース生成手段と、を含む、テストケースの生成装置を提供する。
【０００８】
本発明の他の態様では、ルール群ネットワークを用いてテストケースを生成するテストケースの生成方法であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、前記テストケースの生成方法は、前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出するステップであって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、ステップと、前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得するステップであって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、ステップと、前記事実情報に基づいてテストケースを生成するステップと、を含む、テストケースの生成方法をさらに提供する。
【０００９】
本発明の他の態様では、上記のルール群ネットワークを用いてテストケースを生成するテストケースの生成方法を実現するための、コンピュータプログラムプロダクトをさらに提供する。
【００１０】
本発明の他の態様では、上記のルール群ネットワークを用いてテストケースを生成するテストケースの生成方法を実現するためのコンピュータプログラムプロダクトを記録している、コンピュータが読み取り可能な媒体さらに提供する。
【００１１】
本発明の上記の態様によれば、ＢＲＭＳにおいてテストケースを自動的に生成することを効果的に実現できる。
【図面の簡単な説明】
【００１２】
下記図面を参照しながら以下の詳細な説明を通じて、本発明はより明確になる。図面において、同一又は類似する部分は、同一又は類似する符号で示されている。図面及び以下の詳細な説明は、本明細書に含まれ、且つ明細書の一部を構成し、本発明の好適な実施例を例示し、本発明の原理及び利点を解釈するためのものである。
【図１】本発明の実施例に係るテストケースの生成装置の構成を示すブロック図である。
【図２】Ｒｅｔｅネットワークを示す図である。
【図３】大域的な制限に含まれる各種の制限の間の関係を示す模式図である。
【図４】本発明の実施例に係るテストケースの生成方法の処理を示すフローチャートである。
【図５】本発明を実施するためのコンピュータの構成を例示するブロック図である。  なお、図面における部材は、単なる簡単に、明確にするためのものであり、縮尺に合わせてユニットのサイズ及び相対的な位置を引かなくてもよい。例えば、図面における部材の一部は、本発明の実施例を理解させるため、サイズが他の部材よりも拡大される場合ある。
【発明を実施するための形態】
【００１３】
以下、図面を参照しながら本発明の例示的な実施例を詳細に説明する。説明の便宜上、明細書には実際の実施形態の全ての特徴が示されていない。なお、実際に実施する際に、開発者の具体的な目標を実現するために、特定の実施形態を変更してもよい、例えばシステム及び業務に関する制限条件に応じて実施形態を変更してもよい。また、開発作業が非常に複雑であり、且つ時間がかかるが、本公開の当業者にとって、この開発作業は単なる例の作業である。
【００１４】
なお、本発明を明確にするために、図面には本発明に密に関連する装置の構成要件又は処理のステップのみが示され、本発明と関係のない細部が省略される。
【００１５】
上述したように、従来技術のテストケースの自動生成方法はＢＲＭＳに適用できない。本発明は、ルール群ネットワークを走査して業務ルール用のテストケースを生成することで、ＢＲＭＳにおいてテストケースを自動的に生成できる、ルール群ネットワークを用いてテストケースを生成する装置及び方法を提供する。
【００１６】
以下は、Ｒｅｔｅネットワークをルール群ネットワークの一例として、本発明の実施例に係るテストケースの生成装置及び生成方法を説明する。なお、本発明は、Ｒｅｔｅネットワーク以外の他のルール群ネットワークにも適用されてもよい。
【００１７】
以下は、図１を参照しながら、本発明の実施例に係るテストケースの生成装置の一例を説明する。
【００１８】
図１に示すように、本発明の実施例に係るテストケースの生成装置１００は、操作部１１０、事実情報取得部１２０、及びテストケース生成部１３０を含む。
【００１９】
まず、以下の準備作業をする必要がある。ユーザから提供された業務ルールを取得し、業務ルールにより構成されたルール群をＲｅｔｅネットワークにコンバイルする。
【００２０】
そして、該Ｒｅｔｅネットワークを走査部１１０に入力し、走査部１１０は、該Ｒｅｔｅネットワークを走査することで各ノードの大域的な制限を取得してもよい。事実情報取得部１２０は、各端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得してもよい。テストケース生成部１３０は、取得された事実情報に基づいてテストケースを生成してもよい。
【００２１】
上述したように、テストケースの生成装置１００は、Ｒｅｔｅネットワークを走査することによってテストケースを生成する。よって、以下は、まず、Ｒｅｔｅネットワーク及びＲｅｔｅネットワークを走査する方式を説明する。
【００２２】
Ｒｅｔｅネットワークは、有向非輪状のグラフであり、高レベルなルール記述形式である。Ｒｅｔｅネットワークは、１つのルートノード（Ｒｅｔｅノードとも称される）、１つ又は複数の中間ノード（ｅｎｔｒｙ  ｐｏｉｎｔノード、ｏｂｊｅｃｔ  ｔｙｐｅノード、ａｌｐｈａノード、ｂｅｔａノード、ｌｅｆｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノード、ｒｉｇｈｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノード等を含む）、及び複数の端末ノードを含む。ｂｅｔａノードは、ｊｏｉｎノード、ｎｏｔノード、ｅｘｉｓｔｓノード、ａｃｃｕｍｕｌａｔｅノード等にさらに分けられる。
【００２３】
以下の例でＲｅｔｅネットワークを説明する。１つのルール群（２つの簡単な、ｄｒｏｏｌｓルール言語で作成されたルールによって構成されている）は、以下の通りである。
rule “find
experienced golfer”
when 
$grade:Grade(name == “golden”)
$golfer:Golfer(age
> 30,
grade == $grade)
then
System.out.println($golfer.getName() + “is very experienced”);
end
rule “find
solution”
when
// There is a
golfer named Fred,
// Whose
positions is $p1
$fred :
Golfer(name == “Fred”)
// Joe is in
position 2
$joe :
Golfer(name == “Joe”,
position ==
2,
position !=
$fred.position,
color !=
$fred.color )
//Bob is wearing plaid pants
$bob :
Golfer(name == “Bob”,
position !=
$fred.position,
position !=
$joe.position,
color ==
“plaid”,
color !=
$fred.color,
color != $joe.color )
then
System.out.println( “Fred ” + $fred.getposition() + “ ” + $fred.getColor() );
System.out.println( “Joe ” + $joe.getposition() + “ ” + $joe.getColor() );
System.out.println( “Bob ” + $bob.getposition() + “ ” + $bob.getColor() );
end
上記のルール群に対応するＲｅｔｅネットワークは図２に示されている。該Ｒｅｔｅネットワークは、１つのルートノード（Ｒｅｔｅ）、複数の中間ノード及び２つの端末ノード（ＴｅｒｍｉｎａｌＮｏｄｅ）を含む。中間ノードは、ｅｎｔｒｙ  ｐｏｉｎｔノード（ＥｎｔｒｙＰｏｉｎｔＮｏｄｅ）、ｏｂｊｅｃｔ  ｔｙｐｅノード（ＯｂｊｅｃｔＴｙｐｅＮｏｄｅ）、ａｌｐｈａノード（ＡｌｐｈａＮｏｄｅ）、ｂｅｔａノード（ＪｏｉｎＮｏｄｅ）、及びｌｅｆｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノード（ＬｅｆｔＩｎｐｕｔＡｄａｐｔｅｒＮｏｄｅ）を含む。
【００２４】
事実はルートノードからＲｅｔｅネットワークに入る。ノードは、事実を受信した場合、該事実と先に該ノードに達した他の事実（もしあれば）とが該ノードの局所的な制限（ＬＣ：Ｌｏｃａｌ  Ｃｏｎｓｔｒａｉｎｔ）を満たすか否かをチェックする。満たしている場合は、このノードは該事実を受け入れ、該局所的な制限を満たしている事実群を全ての子ノードに伝送する。事実が端末ノードに到達するまで、このプロセスを繰り返す。事実が端末ノードに到達できれば、該端末ノードに対応するルールは、これらの事実により活性化され、衝突を解決し、実行されるために衝突群に入れられる。即ち、各端末ノードは１つのルールに対応し（各ルールは複数の端末ノードに対応する場合がある）、例えば、図２における端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）は「ｆｉｎｄ  ｅｘｐｅｒｉｅｎｃｅｄ  ｇｏｌｆｅｒ」のルールに対応し、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（１７）は「ｆｉｎｄ  ｓｏｌｕｔｉｏｎ」のルールに対応する。
【００２５】
Ｒｅｔｅネットワークにおけるノードの局所的な制限は、該ノードの種類に関連する。例えば、ｏｂｊｅｃｔ  ｔｙｐｅノードの局所的な制限は対象種類である。ａｌｐｈａノードの局所的な制限は、属性名、比較演算子、及び属性値又は属性境界値からなるトリブル（ｔｒｉｐｌｅ）である。例えば、局所的な制限（ｎａｍｅ，＝＝，“Ｆｒｅｄ”）において、「ｎａｍｅ」は属性の名称であり、「＝＝」は比較演算子であり、“Ｆｒｅｄ”は属性値である。ｊｏｉｎノード、ｎｏｔノード、ｅｘｉｓｔｓノード及びａｃｃｕｍｕｌａｔｅノードの局所的な制限は事実間の関係である。ｌｅｆｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノードの局所的な制限は、単なるｂｅｔａノードの左側の入力とするように単一の事実を事実の群に変換するためのものであるから、空集合（Φ）である。ルートノード、ｅｎｔｒｙ  ｐｏｉｎｔノード及び端末ノードの局所的な制限は全て空集合（Φ）である。
【００２６】
図２に示すＲｅｔｅネットワークを例として、表１に示す各ノードの局所的な制限を得ることができる。
表１
【表１】
2015204116.tif 000003
【００２７】
Ｒｅｔｅネットワークでは、事実がノードに到達し、且つ該ノードに受け入れられた場合、この事実は、必ず該ノード及びその全ての祖先ノードの全ての局所的な制限を満たす。本発明では、現在のノード及びその全ての祖先ノードの局所的な制限の組み合わせを現在のノードの大域的な制限（ＧＣ：Ｇｌｏｂａｌ  Ｃｏｎｓｔｒａｉｎｔ）として定義する。大域的な制限は、事実自身に対する制限（ＣＯＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｏｎ  Ｆａｃｔｓ）、ＣＯＦにおける事実間の制限（ＣＢＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｂｅｔｗｅｅｎ  Ｆａｃｔｓ）、存在を許可されない事実の制限（ＣＯＮＥＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｏｎ  Ｎｏｔ  Ｅｘｉｓｔｉｎｇ  Ｆａｃｔｓ）、ＣＯＦにおける事実とＣＯＮＥＦにおける事実との間の制限（ＣＢＮＥＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｂｅｔｗｅｅｎ  ｃｏｍｍｏｎ  ｆａｃｔ  ａｎｄ  Ｎｏｔ  Ｅｘｉｓｔｉｎｇ  Ｆａｃｔ）、存在が必要である事実の制限（ＣＯＥＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｏｎ  Ｅｘｉｓｔｉｎｇ  Ｆａｃｔｓ）、ＣＯＦにおける事実とＣＯＥＦにおける事実との間の制限（ＣＢＥＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｂｅｔｗｅｅｎ  ｃｏｍｍｏｎ  ｆａｃｔ  ａｎｄ  Ｅｘｉｓｔｉｎｇ  Ｆａｃｔ）、累計操作を行うための事実の制限（ＣＯＡＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｏｎ  Ａｃｃｕｍｕｌａｔｅ  Ｆａｃｔｓ）、及びＣＯＦにおける事実とＣＯＡＦにおける事実との間の制限（ＣＢＡＦ：Ｃｏｎｓｔｒａｉｎｔｓ  Ｂｅｔｗｅｅｎ  ｃｏｍｍｏｎ  ｆａｃｔ  ａｎｄ  Ａｃｃｕｍｕｌａｔｅ  Ｆａｃｔ）のうち１つ又は複数を含んでもよい。そのうち、ＣＯＦ、ＣＯＮＥＦ、ＣＯＥＦ及びＣＯＡＦは事実の制限であり、ＣＢＦ、ＣＢＮＥＦ、ＣＢＥＦ及びＣＢＡＦは事実間の制限である。これらの制限間の関係は、例えば図３に示されている。
【００２８】
本発明の１つの事実例では、大域的な制限ＧＣは以下のように示されてもよい。
【００２９】
ＧＣ＝＜ＣＯＦ，ＣＢＦ，ＣＯＮＥＦ，ＣＢＮＥＦ，ＣＯＥＦ，ＣＢＥＦ，ＣＯＡＦ，ＣＢＡＦ＞
ＣＯＦは、集合であり、ＣＯＦ＝｛ＥＣＯＦ１，ＥＣＯＦ２，…，ＥＣＯＦｎ｝で表示されてもよく、各要素（ＥＣＯＦ）は事実対する制限のシーケンスを記述する。
【００３０】
ＥＣＯＦは、ＥＣＯＦ＝［ｉｔｅｍ１，ｉｔｅｍ２，…，ｉｔｅｍｍ］で表示されてもよく、各項目（ｉｔｅｍ）は事実に対する制限を記述する。
【００３１】
ここで、ＥＣＯＦに含まれるｉｔｅｍは、三種類に分けられてもよい。
【００３２】
１、大域的なＩＤ（識別情報）：各ルールの内部及び全てのルールの間で唯一の事実を決定するために用いられる。局所的な制限における局所的なＩＤに対して定義されたものであり、局所的なＩＤは１つのみのルール内で１つの事実を決定できる。大域的なＩＤは、Ｒｅｔｅネットワークから直接取得できず、後述するＲｅｔｅネットワークを走査するプロセスにおいて計算して得られる。各ＥＣＯＦは、１つのみの大域的なＩＤを有する。ＥＣＯＦにおける１番目の項目（ｉｔｅｍ１）は、大域的なＩＤを記述する。
【００３３】
２、種類制限：種類制限はＥＣＯＦに対応する事実の種類を指定するために用いられる。各ＥＣＯＦは１つのみの種類制限を有する。ＥＣＯＦにおける２番目の項目（ｉｔｅｍ２）は、種類制限を記述する。
【００３４】
３、属性制限：対応する事実の属性に対する制限である。各ＥＣＯＦは、０個、１個又は複数の属性制限を有してもよい。各属性制限は、ａｌｐｈａノードの局所的な制限のようなトリブル（ｔｒｉｐｌｅ）であってもよい。ＥＣＯＦの３番目の項目からは全て属性制限である。全ての属性制限は、アルファベット順に配列してもよい。
【００３５】
ＣＯＮＥＦ及びＣＯＥＦそれぞれは集合であり、それらに含まれる要素がＥＣＯＮＥＦとＥＣＯＥＦとそれぞれ称される。ＥＣＯＮＥＦ、ＥＣＯＥＦとＥＣＯＦとは定義が同じである。一方、ＣＯＦと異なって、この２つの制約集合の記述では、作業メモリにＣＯＮＥＦにおける制限を満たす事実が存在しておらず、且つＣＯＥＦにおける制限を満たす事実が存在する場合のみ、現在のノードがこの事実を受け入れ、その左側入力の事実組をその全ての子ノードに伝送する。
【００３６】
ＣＯＡＦも集合であり、その中に含まれる要素がＥＣＯＡＦと称される。ＥＣＯＡＦとＥＣＯＦとは定義が同じである。ＥＣＯＦと異って、各ＥＣＯＡＦは、生成されたテストケースに表示され、類型操作（例えばａｖｅｒａｇｅ、ｍｉｎ、ｍａｘ、ｃｏｕｎｔ、ｓｕｍ、ｃｏｌｌｅｃｔＬｉｓｔ、ｃｏｌｌｅｃｔＳｅｔ等）を行うため、この制限を満たす１つ又は複数の事実を含む。
【００３７】
事実間の制限ＣＢＦ、ＣＢＮＥＦ、ＣＢＥＦ、ＣＢＡＦもそれぞれ集合であり、ＣＢＦ、ＣＢＮＥＦ、ＣＢＥＦ、ＣＢＡＦ＝｛ｉｔｅｍ１，ｉｔｅｍ２，…，ｉｔｅｍｌ｝と表示されてもよい。その中に含まれる各要素（ｉｔｅｍ）は２つの事実間の制約を記述し、事実又は事実の属性名、比較演算子、及び事実又は事実の属性名からなるトリプルであってもよく、各事実は、局所的なＩＤにより決定されことなく、大域的なＩＤにより決定される。ＣＢＦにおける各制限に関連する２つの事実は、共にＣＯＦからのものである。ＣＢＮＥＦにおける各制限に関連する２つの事実は、１つがＣＯＦからのものであり、もう１つがＣＯＮＥＦからのものである。同様に、ＣＢＥＦ及びＣＢＡＦにおける制限に関連する２つの事実は、１つがＣＯＦからのものであり、もう１つがＣＯＥＦ又はＣＯＡＦからのものである。
【００３８】
なお、上記の大域的な制限ＧＣの例を示しているが、ここでの示唆に基づいて各種の変化を行ってもよい。例えば、簡略化の実施例では、大域的な制限ＧＣはＣＯＦ及びＣＢＦのみを含んでもよい。また、上記の大域的な制限ＧＣの表示は単なる現在のノード及び祖先ノードの局所的な制限の組み合わせの一例であり、本発明はこれに限定されず、他の特定の表示方法で、現在のノードとその全ての祖先ノードの局所的な制限を組み合わせてもよい。
【００３９】
上述したように、Ｒｅｔｅネットワークでは、各ノードの大域的な制限はその全ての祖先ノードによるものである。従って、各ノードの大域的な制限を取得するため、Ｒｅｔｅネットワークを走査する以外にない。本発明の装置１００は、走査部１１０によりＲｅｔｅネットワークの各ノードを走査することで、各ノードの大域的な制限を算出してもよい。走査部１１０は、該Ｒｅｔｅネットワークを走査する際に、現在のノードの局所的な制限とその親ノードの大域的な制限とを組み合わせることで現在のノードの大域的な制限を取得してもよい。また、走査部１１０は、Ｒｅｔｅネットワークを走査する際に、深さ優先の方式を用いてもよいし、幅優先の方式を用いてもよい。走査部１１０は、従来の走査と異なって、Ｒｅｔｅネットワークにおける各ノードについて、全ての親ノードにアクセスした後で該ノード自身にアクセスする。これは、その親ノードの大域的な制限を知った上でそれ自身の大域的な制限を算出する必要がある（実際には、Ｒｅｔｅネットワークでは、複数の親ノードを有するのは、ｂｅｔｅノードだけである）からである。
【００４０】
以下は、走査部１１０により実行される走査処理の１つの具体例を詳細に説明する。具体的には、走査部１１０は、下記のアルゴリズム１に基づいてＲｅｔｅネットワークを走査し、各ノードの大域的な制限を取得する。
【００４１】
アルゴリズム１：ｖｉｓｉｔ（Ｎ）
ＮはＲｅｔｅネットワークにおけるノードである。
【００４２】
１回目の呼出し（ｃａｌｌ）である場合は、Ｎがルートノードであり、且つ該Ｒｅｔｅネットワークの全てのノードの状態が「アクセスされていない」である必要がある。
１．Ｎの状態が「アクセスされた」である場合は、戻る。
２．Ｎの１つ又は複数の親ノードの状態が「アクセスされていない」である場合は、戻る。
３．Ｎの種類を判断する。
【００４３】
ａ）Ｎがルートノードである場合は、ＧＣ（Ｎ）＝＜Φ,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。
【００４４】
ｂ）Ｎがｅｎｔｒｙ  ｐｏｉｎｔノードである場合は、ＧＣ（Ｎ）＝＜Φ,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。
【００４５】
ｃ）Ｎがｏｂｊｅｃｔ  ｐｏｉｎｔノードである場合は、ＧＣ（Ｎ）＝＜｛[$n,type]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。ここで、ｎは、Ｎがその親ノードのｎ番目の子ノードであることを表し、ｔｙｐｅは、Ｎの局所的な制限から取得された値、即ち事実の種類である。例えば、Ｎがその親ノードの１番目の子ノードであり、且つ局所的な制限が「Ｇｒａｄｅ」である場合は、ＧＣ（Ｎ）＝＜｛[$1,Grade]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。
【００４６】
ｄ）Ｎがａｌｐｈａノードである場合は、
１）まず、Ｎの親ノードの大域的な制限を取得する。ＧＣ（Ｎの親ノード）＝＜[$m,type,…]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と仮定する。
【００４７】
２）ＧＣ（Ｎ）＝＜｛[$mn,type,…,LC]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。ここで、ｎは、Ｎがその親ノードのｎ番目の子ノードであることを表し、ＬＣは、Ｎの局所的な制限である。例えば、Ｎがその親ノードの１番目の子ノードであり、且つ局所的な制限が（ｎａｍｅ，＝＝，“ｇｏｌｄｅｎ”）である場合は、ＧＣ（Ｎ）＝＜｛[$11,Grade,(name,==,“golden”)]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。
【００４８】
３）ＧＣ（Ｎ）の全てのＥＣＯＦの属性制限をアルファベット順に配列する。
【００４９】
ｅ）Ｎがｌｅｆｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノードである場合は、
１）まず、Ｎの親ノードの大域的な制限を取得する。ＧＣ（Ｎの親ノード）＝＜[$m,type,…]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と仮定する。
【００５０】
２）ＧＣ（Ｎ）＝＜[$mn,type,…]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。ここで、ｎは、Ｎがその親ノードのｎ番目の子ノードであることを表す。例えば、ＧＣ（Ｎの親ノード）＝＜｛[$1,Grade]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞、且つｎがその親ノードの２番目の子ノードであると仮定する場合、ＧＣ（Ｎ）＝＜｛[$12,Grade]｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞と設定する。
【００５１】
ｆ）Ｎがｊｏｉｎノードである場合は、
１）ＣＯＦ（Ｎの右親ノード）の唯一のＥＣＯＦの大域的なＩＤを＄ｍから＄ｍｎに換えて、新しいＣＯＦをＣＯＦ’（Ｎの右親ノード）と表記する。ここで、ｎは、ｊｏｉｎノードがその親ノードのｎ番目の子ノードであることを表す。
【００５２】
２）記録された局所的なＩＤと大域的なＩＤとのマッピング関係に基づいて、ＬＣ（Ｎ）における全ての事実の局所的なＩＤを対応する大域的なＩＤに替える。そして、替えられたＬＣをＬＣ’（Ｎ）と表記する。
【００５３】
３）ＣＯＦ（Ｎ）＝ＣＯＦ（Ｎの左親ノード）∪ＣＯＦ’（Ｎの右親ノード）と設定する。
【００５４】
４）ＣＢＦ（Ｎ）＝ＣＢＦ（Ｎの左親ノード）∪ＬＣ’（Ｎ）と設定する。
【００５５】
５）ＣＯＮＥＦ（Ｎ）＝ＣＯＮＥＦ（Ｎの左親ノード）と設定する。
【００５６】
６）ＣＢＮＥＦ（Ｎ）＝ＣＢＮＥＦ（Ｎの左親ノード）と設定する。
【００５７】
７）ＣＯＥＦ（Ｎ）＝ＣＯＥＦ（Ｎの左親ノード）と設定する。
【００５８】
８）ＣＢＥＦ（Ｎ）＝ＣＢＥＦ（Ｎの左親ノード）と設定する。
【００５９】
９）ＣＯＡＦ（Ｎ）＝ＣＯＡＦ（Ｎの左親ノード）と設定する。
【００６０】
１０）ＣＢＡＦ（Ｎ）＝ＣＢＡＦ（Ｎの左親ノード）と設定する。
【００６１】
１１）ＧＣ（Ｎ）＝＜ＣＯＦ（Ｎ），ＣＢＦ（Ｎ），ＣＯＮＥＦ（Ｎ），ＣＢＮＥＦ（Ｎ），ＣＯＥＦ（Ｎ），ＣＢＥＦ（Ｎ），ＣＯＡＦ（Ｎ），ＣＢＡＦ（Ｎ）＞と設定する。例えば、ＧＣ（Ｎの左親ノード）＝＜｛［＄２２１，Ｇｏｌｆｅｒ，（ｎａｍｅ，＝＝，“Ｆｒｅｄ”）］｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞、ＧＣ（Ｎの右親ノード）＝＜｛［＄２３１，Ｇｏｌｆｅｒ，（ｎａｍｅ，＝＝，“Ｊｏｅ”），（ｐｏｓｉｔｉｏｎ，＝＝，２）］｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞、ＬＣ（Ｎ）＝｛（ｐｏｓｉｔｉｏｎ，！＝，＄ｆｒｅｄ．ｐｏｓｉｔｉｏｎ），（ｃｏｌｏｒ，！＝，＄ｆｒｅｄ．ｃｏｌｏｒ）｝と仮定すると、上記の方法により、ＧＣ（Ｎ）＝＜｛［＄２２１，Ｇｏｌｆｅｒ，（ｎａｍｅ，＝＝，“Ｆｒｅｄ”）］，［＄２３１１，Ｇｏｌｆｅｒ，（ｎａｍｅ，＝＝，“Ｊｏｅ”），（ｐｏｓｉｔｉｏｎ，＝＝，２）］｝，｛（＄２３１１．ｐｏｓｉｔｉｏｎ，！＝，＄２２１．ｐｏｓｉｔｉｏｎ），（＄２３１１．ｃｏｌｏｒ，！＝，＄２２１．ｃｏｌｏｒ）｝,Φ,Φ,Φ,Φ,Φ,Φ,Φ＞を取得できる。
【００６２】
ｇ）Ｎがｎｏｔノードである場合は、
１）ＣＯＦ（Ｎの右親ノード）の唯一のＥＣＯＦの大域的なＩＤを＄ｍから＄ｍｎに換えて、新しいＣＯＦをＣＯＦ’（Ｎの右親ノード）と表記する。ここで、ｎは、ｎｏｔノードがその親ノードのｎ番目の子ノードであることを表す。
【００６３】
２）記録された局所的なＩＤと大域的なＩＤとのマッピング関係に基づいて、ＬＣ（Ｎ）における全ての事実の局所的なＩＤを対応する大域的なＩＤに替える。そして、替えられたＬＣをＬＣ’（Ｎ）と表記する。
【００６４】
３）ＣＯＦ（Ｎ）＝ＣＯＦ（Ｎの左親ノード）と設定する。
【００６５】
４）ＣＢＦ（Ｎ）＝ＣＢＦ（Ｎの左親ノード）と設定する。
【００６６】
５）ＣＯＮＥＦ（Ｎ）＝ＣＯＦ’（Ｎの右親ノード）∪ＣＯＮＥＦ’（Ｎの左親ノード）と設定する。
【００６７】
６）ＣＢＮＥＦ（Ｎ）＝ＣＢＮＥＦ（Ｎの左親ノード）∪ＬＣ’（Ｎ）と設定する。
【００６８】
７）ＣＯＥＦ（Ｎ）＝ＣＯＥＦ（Ｎの左親ノード）と設定する。
【００６９】
８）ＣＢＥＦ（Ｎ）＝ＣＢＥＦ（Ｎの左親ノード）と設定する。
【００７０】
９）ＣＯＡＦ（Ｎ）＝ＣＯＡＦ（Ｎの左親ノード）と設定する。
【００７１】
１０）ＣＢＡＦ（Ｎ）＝ＣＢＡＦ（Ｎの左親ノード）と設定する。
【００７２】
１１）ＧＣ（Ｎ）＝＜ＣＯＦ（Ｎ），ＣＢＦ（Ｎ），ＣＯＮＥＦ（Ｎ），ＣＢＮＥＦ（Ｎ），ＣＯＥＦ（Ｎ），ＣＢＥＦ（Ｎ），ＣＯＡＦ（Ｎ），ＣＢＡＦ（Ｎ）＞と設定する。
【００７３】
ｈ）Ｎがｅｘｉｓｔｓノードである場合は、
１）ＣＯＦ（Ｎの右親ノード）の唯一のＥＣＯＦの大域的なＩＤを＄ｍから＄ｍｎに換えて、新しいＣＯＦをＣＯＦ’（Ｎの右親ノード）と表記する。ここで、ｎは、ｅｘｉｓｔｓノードがその親ノードのｎ番目の子ノードであることを表す。
【００７４】
２）記録された局所的なＩＤと大域的なＩＤとのマッピング関係に基づいて、ＬＣ（Ｎ）における全ての事実の局所的なＩＤを対応する大域的なＩＤに替える。そして、替えられたＬＣをＬＣ’（Ｎ）と表記する。
【００７５】
３）ＣＯＦ（Ｎ）＝ＣＯＦ（Ｎの左親ノード）と設定する。
【００７６】
４）ＣＢＦ（Ｎ）＝ＣＢＦ（Ｎの左親ノード）と設定する。
【００７７】
５）ＣＯＮＥＦ（Ｎ）＝ＣＯＮＥＦ（Ｎの左親ノード）と設定する。
【００７８】
６）ＣＢＮＥＦ（Ｎ）＝ＣＢＮＥＦ（Ｎの左親ノード）と設定する。
【００７９】
７）ＣＯＥＦ（Ｎ）＝ＣＯＦ’（Ｎの右親ノード）∪ＣＯＥＦ（Ｎの左親ノード）と設定する。
【００８０】
８）ＣＢＥＦ（Ｎ）＝ＣＢＥＦ（Ｎの左親ノード）∪ＬＣ’（Ｎ）と設定する。
【００８１】
９）ＣＯＡＦ（Ｎ）＝ＣＯＡＦ（Ｎの左親ノード）と設定する。
【００８２】
１０）ＣＢＡＦ（Ｎ）＝ＣＢＡＦ（Ｎの左親ノード）と設定する。
【００８３】
１１）ＧＣ（Ｎ）＝＜ＣＯＦ（Ｎ），ＣＢＦ（Ｎ），ＣＯＮＥＦ（Ｎ），ＣＢＮＥＦ（Ｎ），ＣＯＥＦ（Ｎ），ＣＢＥＦ（Ｎ），ＣＯＡＦ（Ｎ），ＣＢＡＦ（Ｎ）＞と設定する。
【００８４】
ｉ）Ｎがａｃｃｕｍｕｌａｔｅノードである場合は、
１）ＣＯＦ（Ｎの右親ノード）の唯一のＥＣＯＦの大域的なＩＤを＄ｍから＄ｍｎに換えて、新しいＣＯＦをＣＯＦ’（Ｎの右親ノード）と表記する。ここで、ｎは、ａｃｃｕｍｕｌａｔｅノードがその親ノードのｎ番目の子ノードであることを表す。
【００８５】
２）記録された局所的なＩＤと大域的なＩＤとのマッピング関係に基づいて、ＬＣ（Ｎ）における全ての事実の局所的なＩＤを対応する大域的なＩＤに替える。そして、替えられたＬＣをＬＣ’（Ｎ）と表記する。
【００８６】
３）ＣＯＦ（Ｎ）＝ＣＯＦ（Ｎの左親ノード）と設定する。
【００８７】
４）ＣＢＦ（Ｎ）＝ＣＢＦ（Ｎの左親ノード）と設定する。
【００８８】
５）ＣＯＮＥＦ（Ｎ）＝ＣＯＮＥＦ（Ｎの左親ノード）と設定する。
【００８９】
６）ＣＢＮＥＦ（Ｎ）＝ＣＢＮＥＦ（Ｎの左親ノード）と設定する。
【００９０】
７）ＣＯＥＦ（Ｎ）＝ＣＯＥＦ（Ｎの左親ノード）と設定する。
【００９１】
８）ＣＢＥＦ（Ｎ）＝ＣＢＥＦ（Ｎの左親ノード）と設定する。
【００９２】
９）ＣＯＡＦ（Ｎ）＝ＣＯＦ’（Ｎの右親ノード）∪ＣＯＡＦ（Ｎの左親ノード）と設定する。
【００９３】
１０）ＣＢＡＦ（Ｎ）＝ＣＢＡＦ（Ｎの左親ノード）∪ＬＣ’（Ｎ）と設定する。
【００９４】
１１）ＧＣ（Ｎ）＝＜ＣＯＦ（Ｎ），ＣＢＦ（Ｎ），ＣＯＮＥＦ（Ｎ），ＣＢＮＥＦ（Ｎ），ＣＯＥＦ（Ｎ），ＣＢＥＦ（Ｎ），ＣＯＡＦ（Ｎ），ＣＢＡＦ（Ｎ）＞と設定する。
【００９５】
ｊ）Ｎが端末ノードである場合は、ＧＣ（Ｎ）＝ＧＣ（Ｎの親ノード）と設定する。
４．Ｎの状態を「アクセスされた」に設定する。
５．Ｎの各子ノードＭについて、ｖｉｓｉｔ（Ｍ）を呼び出す。
【００９６】
図２に示すＲｅｔｅネットワークを例として、走査部１１０は、上記の走査方法により、深さ優先の方式で該Ｒｅｔｅネットワークを走査する。各ノードの走査順序は図２におけるノードの括弧内の番号で示されている。具体的には、表２に示すように、該Ｒｅｔｅネットワークを走査することで、該Ｒｅｔｅネットワークにおける各ノードの大域的な制限を取得できる。
表２
【表２】
2015204116.tif 000004
【表３】
2015204116.tif 000005
【００９７】
なお、上記走査部１１０により実行される走査処理は単なる例示的なものであり、ここで示唆するものに基づいて各種の変化を行ってもよい。例えば、上記の走査処理は深さ優先の方式で行われているが、上述したように、幅優先の方式で走査してもよい。また、上記の走査処理では、ルートノード、ｏｂｊｅｃｔ  ｔｙｐｅノード、ｅｎｔｒｙ  ｐｏｉｎｔノード、ａｌｐｈａノード、ｌｅｆｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノード、ｊｏｉｎノード、ｎｏｔノード、ｅｘｉｓｔｓノード、ａｃｃｕｍｕｌａｔｅノード及び端末ノードについて処理しているが、具体的な応用シーンに応じて、ある種類のノードに対する処理を省略してもよいし、他の種類のノードに対する処理を追加してもよい。例えば、Ｄｒｏｏｌｓのｆｏｒａｌｌ文法は、Ｒｅｔｅネットワークにおいて２つのｎｏｔノード、１つのｒｉｇｈｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノード、１つのｊｏｉｎノードにより構成されているため、ｆｏｒａｌｌ文法を支持している場合は、ｒｉｇｈｔ  ｉｎｐｕｔ  ａｄａｐｔｅｒノードに対する処理を追加すればよい。
【００９８】
なお、走査部１１０により実行される走査処理では、要は祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせることで各ノードの大域的な制限を取得することであり、走査方式及び具体的な走査アルゴリズムは限定されない。
【００９９】
走査部１１０が該Ｒｅｔｅネットワークを走査して各ノードの大域的な制限を取得した後で、事実情報取得部１２０は、テストケース生成部１３０にテストケースを生成させるように、各端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する。具体的には、テストケースを生成するために用いられる事実情報は、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含んでもよい。
【０１００】
以下は、事実情報取得部１２０により実行される処理の実施例を説明する。
【０１０１】
まず、事実情報取得部１２０は、各端末ノードの大域的な制限に含まれるＣＯＦに基づいて、テストケースに含まれる必要がある事実群を決定する。具体的には、大域的な制限のＣＯＦにおける各ＥＣＯＦが単一の事実に対する制限を表し、且つ同一のノードの各ＥＣＯＦが異なる事実に対応するため、事実情報取得部１２０は、各端末ノードの大域的な制限に含まれるＣＯＦに基づいて、テストケースに含まれる必要がある事実群を決定できる。例えば、表２における端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）を例として、大域的な制限に２つのＥＣＯＦを含むため、テストケースに含まれる必要がある２つの事実は、大域的なＩＤが＄１１１、種類がＧｒａｄｅの事実、及び大域的なＩＤが＄２１１、種類がＧｏｌｆｅｒの事実である。表３に示されている。
表３
【表４】
2015204116.tif 000006
【０１０２】
同様に、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（１７）から表４に示される事実を取得できる。
表４
【表５】
2015204116.tif 000007
【０１０３】
各端末ノードに対応する事実の集合を取得した後で、これらの集合を併合することで、テストケースを生成するための全ての事実を取得できる。しかし、好ましくは、テストケースの規模を縮小するため、所定の規則に従って、異なる端末ノードからの事実集合における事実を併合してもよい。１つの実施例では、事実を併合する規則は以下のように設定されている。
【０１０４】
まず、２つの事実が同一の大域的なＩＤを有する場合は、勿論これらを１つの事実に併合できる。
【０１０５】
そして、２つの事実が下記４つの条件を満たしている場合は、これらを１つの事実に併合してもよい。
【０１０６】
１．この２つの事実が異なる大域的なＩＤを有すること、
２．この２つの事実が同一の種類を有すること、
３．この２つの事実が同一の端末ノードの大域的な制限に存在していない、具体的には、この２つの事実の大域的なＩＤに対応するＥＣＯＦが同一の端末ノードの大域的な制限に出現していないこと、及び
４．この２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合である、具体的には、この２つの事実の大域的なＩＤに対応するＥＣＯＦのそれぞれに含まれる属性制限における属性名からなる２つの集合の共通部分が空集合であること。
【０１０７】
例えば、表３に示される事実集合と表４に示される事実集合とを組み合わせる際に、上記の事実２（＄２１１）と事実３（＄２２１）とは上記の条件を満たす。
【０１０８】
１．事実２と事実３とは異なる大域的なＩＤ、即ち＄２１１と＄２２１を有する。
【０１０９】
２．事実２と事実３とは同一の種類、即ちＧｏｌｆｅｒを有する。
【０１１０】
３．事実２の大域的なＩＤ（＄２１１）に対応するＥＣＯＦが現在の端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（１７）の大域的な制限に出現しておらず、事実３の大域的なＩＤ（＄２２１）に対応するＥＣＯＦも端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）の大域的な制限に出現していない。
【０１１１】
４．事実２の大域的なＩＤ（＄２１１）に対応するＥＣＯＦに含まれる属性制限における属性名からなる集合が｛ａｇｅ｝であり、事実３の大域的なＩＤ（＄２２１）に対応するＥＣＯＦに含まれる属性制限における属性名からなる集合が｛ｎａｍｅ｝であり、この２つの集合の共通部分が空集合である。
【０１１２】
従って、事実２と事実３とを１つの事実に併合してもよい。このように、事実の併合が行われた事実の集合は表５に示されている。
表５
【表６】
2015204116.tif 000008
【０１１３】
なお、同一の事実は、同一の端末ノードからの１つのみの事実と併合できる。このため、事実２と事実４との間も、事実２と事実５との間も併合の条件を満たしているが、事実２は、事実３と併合すると同時に、事実４又は事実５とさらに併合することができない。また、所定の事実、例えば種類が「org.drools.reteoo.InitialFactImpl」の事実が存在する場合は、事実の集合から削除する必要がある。
【０１１４】
なお、上記の事実併合の規則は単なる一例であり、ここで示唆していることに基づいて各種の変更を行ってもよい。例えば、他の実施例では、同一の大域的なＩＤを有する２つの事実のみを併合してもよい。もう１つの実施例では、２つの事実が条件１、２及び３、又は条件１、２及び４のみを満たせばよい。
【０１１５】
テストケースに含まれる必要がある事実群を決定した後で、事実情報取得部１２０は、各端末ノードの大域的な制限に基づいて、各事実属性の全ての可能な値範囲を決定してもよい。
【０１１６】
通常、値範囲は、端末ノードのＥＣＯＦ、ＥＣＯＮＥＦ、ＥＣＯＥＦ及びＥＣＯＡＦの属性制限から取得される。例えば、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）のＥＣＯＦ［＄２１１，Ｇｏｌｆｅｒ，（ａｇｅ，＞，３０）］から、Ｇｏｌｆｅｒ．ａｇｅ属性の１つの明示的な値範囲「＞３０」及び２つの暗示的な値範囲「＝＝３０」、「＜３０」を取得できる。文字列の種類の属性は、暗示的な値範囲は、空文字列及びランダム文字列を含む。
【０１１７】
もしＣＢＦ、ＣＢＥＦ、ＣＢＮＥＦ、ＣＢＡＦのうち１つの項目（１つのトリプル）における３番目の値が「大域的なＩＤ．属性名」ではなく、「大域的なＩＤ」であると、これは属性の値範囲を構築するために用いられてもよい。例えば、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）のＣＢＦが項目（＄２１１．ｇｒａｄｅ，＝＝，＄１１１）を含み、且つ該項目の３番目の値＄１１１が「大域的なＩＤ．属性名」ではなく、「大域的なＩＤ」である場合は、Ｇｏｌｆｅｒ．ｇｒａｄｅの明示的な値範囲「＝＝＄１１１」及び暗示的な値範囲「＝＝ｎｕｌｌ」を取得できる。
【０１１８】
また、２つの異なる属性がＣＢＦ、ＣＢＥＦ、ＣＢＮＥＦ、ＣＢＡＦに比較関係又は代入関係を有する場合は、それらの値範囲の集合を共通の値範囲の集合として併合してもよい。
【０１１９】
上記の端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）及び端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（１７）を例として、その大域的な制限に基づいて得られた事実属性の値範囲は表６に示されている。
表６
【表７】
2015204116.tif 000009
【０１２０】
事実情報取得部１２０が各端末ノードの大域的な制限に基づいてテストケースを生成するための事実情報を取得した後で、テストケース生成部１３０は、これらの事実情報に基づいて、テストケースを生成してもよい。
【０１２１】
以下は、テストケース生成部１３０により実行された処理の一例を説明する。
【０１２２】
まず、テストケース生成部１３０は、事実属性の値範囲内でランダム値を選択してテストデータを生成してもよい。表６に示される事実群を例として、表７に示されるテストデータを生成してもよく、ここで、「ｏｃａｄ」、「ｋｌｓｄ」及び「ｒｋｏｓ」はランダム文字列である。
表７
【表８】
2015204116.tif 000010
【０１２３】
そして、テストケース生成部１３０は、上記のテストデータを用いて、事実情報取得部１２０により取得された事実群及び各端末ノードの大域的な制限における事実間の制限（ＣＢＦ、ＣＢＮＥＦ、ＣＢＥＦ、ＣＢＡＦの１つ又は複数）により、必要なテストケースを生成してもよい。
【０１２４】
次に、表５における事実群、表７におけるテストデータ及び端末ノードのＣＢＦを用いて、組み合わせ試験（組み合わせテスト）の方法で必要なテストケースを生成してもよい。例えば、ＰＩＣＴ（Pairwise Independent Combinatorial Testing tool：ペアワイズ独立組み合わせテストツール）を用いて、表８に示されるテストケース（＃１〜＃３３）を生成する。
表８
【表９】
2015204116.tif 000011
【表１０】
2015204116.tif 000012
【０１２５】
表８に示されるテストケースでは、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）のＣＢＦには、属性と属性との制限を含まず、属性（＄２１１．ｇｒａｄｅ）と事実（＄１１１）との制限のみを含むため、ＰＩＣＴを用いてテストケースを生成する際に、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（８）のＣＢＦを利用せず、端末ノードＴｅｒｍｉｎａｌＮｏｄｅ（１７）のＣＢＦのみを用いる。
【０１２６】
また、好適には、ＰＩＣＴを用いてテストケースを生成する際に、Ｒｅｔｅネットワークにおける全てのルールを１つのテストケースで活性化することが確保できないため、テストケース生成部１３０は、各端末ノードの大域的な制限に基づいて、Ｒｅｔｅネットワークにおける全てのルールを活性化することが可能な１つ又は複数のテストケースを生成してもよい。具体的には、理想の場合は、Ｒｅｔｅネットワークにおける全てのルールを活性化する、もう１つのテストケース（例えば表８における＃３４）をさらに追加してもよく、このテストケースは全ての端末ノードの大域的な制限から直接に構築して得られる。しかし、異なる端末ノードに対応するルールが衝突するため、全てのルールを活性化することが可能な１つのテストケースを構築できない場合がある。この場合は、各端末ノードの大域的な制限について、該端末ノードに対応するルールを活性化するテストケースをそれぞれ構築してもよい。
【０１２７】
また、好適には、累積操作が予想通りであるか否かを試験するため、各端末ノードの大域的な制限における各ＥＣＯＡＦについて、生成されたテストケースには、適当な数（例えば１〜３個）の、このＥＣＯＡＦを満たす事実を含んでもよい。
【０１２８】
また、好適には、各端末ノードの大域的な制限における各ＥＣＯＮＥＦ及びＥＣＯＥＦに対応する事実について、該事実を含むテストケース、及び該事実を含まないテストケース、という２つのテストケースが少なくとも存在するか否かをチェックしてもよい。存在しない場合は、最終のテストケース群にこのようなテストケースをさらに補充してもよい。
【０１２９】
以上、図面を参照しながら本発明の実施例に係るルール群ネットワークを用いてテストケースを生成する装置を詳細に説明している。以下は、図面を参照しながら、本発明の実施例に係るルール群ネットワークを用いてテストケースを生成する方法を説明している。
【０１３０】
図４は、本発明の実施例に係るＲｅｔｅネットワーク（ルール群ネットワークの例として）を用いてテストケースを生成する方法のフローチャートである。図４に示すように、該方法の処理フロー４００は、ステップＳ４１０から始まり、ステップＳ４２０を実行する。
【０１３１】
ステップＳ４２０において、Ｒｅｔｅネットワークを走査して、各ノードの大域的な制限を算出する。各ノードの大域的な制限は、祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる。ここで、ステップＳ４２０において実行される処理は、図１に示す走査部１１０の処理と同じであり、ここでその説明が省略される。
【０１３２】
そして、ステップＳ４３０において、端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する。事実情報は、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む。ここで、ステップＳ４３０において実行される処理は、図１に示す事実情報取得部１２０の処理と同じであり、ここでその説明が省略される。
【０１３３】
そして、ステップＳ４４０において、事実情報に基づいて、テストケースを生成する。ここで、ステップＳ４４０において実行される処理は、図１に示すテストケース生成部１３０の処理と同じであり、ここでその説明が省略される。
【０１３４】
最後に、該方法の処理フロー４００は、ステップＳ４５０において終了する。
【０１３５】
なお、以上は本発明の具体的な実施例を説明したが、実施形態の説明及び示された特徴は、同一の又は類似する方式で１つ又は複数の他の実施形態に適用してもよいし、他の実施形態の特徴と組み合わせてもよいし、他の実施形態における特徴の代わりに用いられてもよい。
【０１３６】
上記の装置及び方法はハードウェアで実施されてもよい。このハードウェアは単一の処理装置又は複数の処理装置であってもよい。このハードウェアは、マイクロ処理装置、マイクロコントローラ、デジタル処理装置、マイクロコンピュータ、ＣＰＵ部、状態マシン、論理回路及び／又は操作信号のいずれかの装置であってもよい。
【０１３７】
なお、上記装置及び方法は、ソフトウェア及びファームウェアで実施されてもよい。ソフトウェア又はファームウェアで実施されている場合は、記録媒体又はネットワークから専用のハードウェア構造のコンピュータ、例えば図５に示される汎用コンピュータ５００に該ソフトウェアを構成するプログラムをインストールする。該コンピュータに各種のプログラムをインストールした場合は、各種の機能などを実行できる。
【０１３８】
図５において、中央処理部（ＣＰＵ）５０１は、読み出し専用メモリ（ＲＯＭ）５０２に記憶されているプログラム、又は記憶部５０８からランダムアクセスメモリ（ＲＡＭ）５０３にロードされたプログラムにより各種の処理を実行する。ＲＡＭ５０３には、必要に応じて、ＣＰＵ５０１が各種の処理を実行するに必要なデータが記憶されている。
【０１３９】
ＣＰＵ５０１、ＲＯＭ５０２、及びＲＡＭ５０３は、バス５０４を介して互いに接続されている。入力／出力インターフェース５０５もバス５０４に接続されている。
【０１４０】
入力部５０６（キーボード、マウスなどを含む）、出力部５０７（ディスプレイ、例えばブラウン管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）など、及びスピーカなどを含む）、記憶部５０８（例えばハードディスクなどを含む）、通信部５０９（例えばネットワークのインタフェースカード、例えばＬＡＮカード、モデムなどを含む）は、入力／出力インターフェース５０５に接続されている。通信部５０９は、ネットワーク、例えばインターネットを介して通信処理を実行する。
【０１４１】
必要に応じて、ドライブ部５１０は、入力／出力インターフェース５０５に接続されてもよい。取り外し可能な媒体５１１は、例えば磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどであり、必要に応じてドライブ部５１０にセットアップされて、その中から読みだされたコンピュータプログラムは必要に応じて記憶部５０８にインストールされている。
【０１４２】
ソフトウェアにより上記処理を実施する場合、ネットワーク、例えばインターネット、又は記憶媒体、例えば取り外し可能な媒体５１１を介してソフトウェアを構成するプログラムをインストールする。
【０１４３】
なお、これらの記憶媒体は、図５に示されている、プログラムを記憶し、機器と分離してユーザへプログラムを提供する取り外し可能な媒体５１１に限定されない。取り外し可能な媒体５１１は、例えば磁気ディスク（フロッピー（登録商標）ディスクを含む）、光ディスク（光ディスク−読み出し専用メモリ（ＣＤＲＯＭ）、及びデジタル多目的ディスク（ＤＶＤ）を含む）、光磁気ディスク（ミニディスク（ＭＤ）（登録商標））及び半導体メモリを含む。或いは、記憶媒体は、ＲＯＭ５０２、記憶部５０８に含まれるハードディスクなどであってもよく、プログラムを記憶し、それらを含む機器と共にユーザへ提供される。
【０１４４】
また、本発明の方法は、明細書に説明された時間順で行われてもよいが、時間順以外の順で行われてもよい。ステップは、並行して、又は単独で実行されてもよい。
【０１４５】
本発明及びその利点を詳細に説明したが、添付されているクレームにより限定された本発明の主旨及び範囲から逸脱することなく、各種の変更、代替、変換を行ってもよい。また、本願の範囲は、明細書に説明されたプロセス、装置、製造、物質の構成、手段、方法及びステップの具体的な実施例に限定されない。当業者にとって、本発明は、ここで説明されている実施例と同一の機能を実行できる、或いは基本的に同一の結果を取得できる従来に開発された、或いは将来に開発されるプロセス、装置、製造、物質の構成、手段、方法又はステップを用いてもよい。よって、添付されたクレームの範囲は、このようなプロセス、装置、製造、物質の構成、手段、方法及びステップを含む。
【０１４６】
また、上述の各実施例を含む実施形態に関し、更に以下の付記を開示する。
【０１４７】
（付記１）
ルール群ネットワークを用いてテストケースを生成するテストケースの生成装置であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、
前記テストケースの生成装置は、
前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出する走査手段であって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、走査手段と、
前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得する事実情報取得手段であって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、事実情報取得手段と、
前記事実情報に基づいてテストケースを生成するテストケース生成手段と、を含む、テストケースの生成装置。
【０１４８】
（付記２）
各ノードの大域的な制限は、親ノードの大域的な制限と自分の局所的な制限とを組み合わせて得られる、付記１に記載のテストケースの生成装置。
【０１４９】
（付記３）
前記走査手段は、前記ルール群ネットワークにおける各ノードについて、全ての親ノードにアクセスした後で該ノード自身にアクセスするように、前記ルートノードから深さ優先又は幅優先の方式で前記ルール群ネットワークを走査する、付記１に記載のテストケースの生成装置。
【０１５０】
（付記４）
前記大域的な制限は、以下の制限のうち１つ又は複数を含み、
第１の制限は、事実自身に対する制限であり、
第２の制限は、前記第１の制限における事実間の制限であり、
第３の制限は、存在を許可されない事実の制限であり、
第４の制限は、前記第１の制限における事実と前記第３の制限における事実との間の制限であり、
第５の制限は、存在が必要である事実の制限であり、
第６の制限は、前記第１の制限における事実と前記第５の制限における事実との間の制限であり、
第７の制限は、累計操作を行うための事実の制限であり、
第８の制限は、前記第１の制限における事実と前記第７の制限における事実との間の制限である、付記１に記載のテストケースの生成装置。
【０１５１】
（付記５）
前記事実属性の値範囲は、前記事実属性の明示的な値範囲及び暗示的な値範囲を含む、付記１に記載のテストケースの生成装置。
【０１５２】
（付記６）
前記事実情報取得手段は、所定の規則に従って２つの事実を併合する、付記１に記載のテストケースの生成装置。
【０１５３】
（付記７）
前記所定の規則は、以下の規則のうち１つであり、
第１の規則は、前記２つの事実が同一のＩＤを有することであり、
第２の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在しておらず、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることであり、
第３の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在していないことであり、
第４の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることである、付記６に記載のテストケースの生成装置。
【０１５４】
（付記８）
前記テストケース生成手段は、組み合わせ試験の方法でテストケースを生成する、付記１に記載のテストケースの生成装置。
【０１５５】
（付記９）
前記テストケース生成手段は、前記端末ノードの大域的な制限に基づいて、前記ルール群ネットワークに関連する全てのルールを活性化することが可能な１つ又は複数のテストケースを生成する、付記８に記載のテストケースの生成装置。
【０１５６】
（付記１０）
ルール群ネットワークを用いてテストケースを生成するテストケースの生成方法であって、前記ルール群ネットワークがルートノード、１つ又は複数の中間ノード、及び１つ又は複数の端末ノードを含み、各ノードについて局所的な制限が個別に設定され、
前記テストケースの生成方法は、
前記ルール群ネットワークを走査して、各ノードの大域的な制限を算出するステップであって、各ノードの大域的な制限が祖先ノードの局所的な制限と自分の局所的な制限とを組み合わせて得られる、ステップと、
前記端末ノードの大域的な制限に基づいて、テストケースを生成するための事実情報を取得するステップであって、前記事実情報が、テストケースに含まれる必要がある事実群と、各事実属性の値範囲とを含む、ステップと、
前記事実情報に基づいてテストケースを生成するステップと、を含む、テストケースの生成方法。
【０１５７】
（付記１１）
各ノードの大域的な制限は、親ノードの大域的な制限と自分の局所的な制限とを組み合わせて得られる、付記１０に記載のテストケースの生成方法。
【０１５８】
（付記１２）
前記ルール群ネットワークを走査する際に、前記ルール群ネットワークにおける各ノードについて、全ての親ノードにアクセスした後で該ノード自身にアクセスするように、前記ルートノードから深さ優先又は幅優先の方式で前記ルール群ネットワークを走査する、付記１０に記載のテストケースの生成方法。
【０１５９】
（付記１３）
前記大域的な制限は、以下の制限のうち１つ又は複数を含み、
第１の制限は、事実自身に対する制限であり、
第２の制限は、前記第１の制限における事実間の制限であり、
第３の制限は、存在を許可されない事実の制限であり、
第４の制限は、前記第１の制限における事実と前記第３の制限における事実との間の制限であり、
第５の制限は、存在が必要である事実の制限であり、
第６の制限は、前記第１の制限における事実と前記第５の制限における事実との間の制限であり、
第７の制限は、累計操作を行うための事実の制限であり、
第８の制限は、前記第１の制限における事実と前記第７の制限における事実との間の制限である、付記１０に記載のテストケースの生成方法。
【０１６０】
（付記１４）
前記事実属性の値範囲は、前記事実属性の明示的な値範囲及び暗示的な値範囲を含む、付記１０に記載のテストケースの生成方法。
【０１６１】
（付記１５）
前記テストケースを生成するための事実情報を取得する際に、所定の規則に従って２つの事実を併合する、付記１０に記載のテストケースの生成方法。
【０１６２】
（付記１６）
前記所定の規則は、以下の規則のうち１つであり、
第１の規則は、前記２つの事実が同一のＩＤを有することであり、
第２の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在しておらず、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることであり、
第３の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実が同一の端末ノードの大域的な制限に存在していないことであり、
第４の規則は、前記２つの事実が同一のＩＤを有すること、又は前記２つの事実が異なるＩＤを有し、且つ同一の種類を有し、前記２つの事実のそれぞれの属性制限における属性名からなる２つの集合の共通部分が空集合であることである、付記１５に記載のテストケースの生成方法。
【０１６３】
（付記１７）
前記テストケースを生成する際に、組み合わせ試験の方法でテストケースを生成する、付記１０に記載のテストケースの生成方法。
【０１６４】
（付記１８）
前記テストケースを生成する際に、前記端末ノードの大域的な制限に基づいて、前記ルール群ネットワークに関連する全てのルールを活性化することが可能な１つ又は複数のテストケースを生成する、付記１７に記載のテストケースの生成方法。
【図１】
2015204116.tif 000013
【図２】
2015204116.tif 000014
【図３】
2015204116.tif 000015
【図４】
2015204116.tif 000016
【図５】
2015204116.tif 000017