(57)【特許請求の範囲】
【請求項１】
コンピュータに、
論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定ステップと、
前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析ステップと、
前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、を実行させ、
前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第１の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第２の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを含む、
テストケース生成プログラム。
【請求項２】
前記解析ステップは、第１の階層の演算子が積演算子である場合に、積演算子による演算の対象となる２つの第１の条件の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第１の階層直下の第２の条件中の真偽値の組合せを選択するステップを含む、請求項１に記載のテストケース生成プログラム。
【請求項３】
前記解析ステップは、第１の階層の演算子が和演算子である場合に、和演算子による演算の対象となる２つの第１の条件の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第１の階層直下の第２の条件中の真偽値の組合せを選択するステップを含む、請求項１に記載のテストケース生成プログラム。
【請求項４】
コンピュータが、
論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定ステップと、
前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析ステップと、
前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、を実行し、
前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第１の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第２の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを含む、
テストケース生成方法。
【請求項５】
論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定手段と、
前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得手段と、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析手段と、
前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得手段と前記解析手段とを適用する手段と、を備え、
前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第１の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第２の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを含む、
テストケース生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケース生成プログラム、テストケース生成方法及びテストケース生成装置に関する。
【背景技術】
【０００２】
ソフトウェアのテストの品質基準を定義する指標の一つとして、ＭＣ／ＤＣ（Modified
Condition/Decision Coverage）によるテスト網羅度が知られている。ＭＣ／ＤＣは、テスト対象となるソフトウェアのプログラムコード（内部ロジック）に対して実行されたテストの網羅度を示すコードカバレッジの一種であり、航空機ソフトウェアのテスト時に使用されるカバレッジとして米国の航空機産業団体によって開発された。なお、他のコードカバレッジとして、例えば、テスト対象となるソフトウェアのプログラムコード内の全ての条件判定、判定結果としての分岐を全て確認可能なＣ／ＤＣ（Condition/Decision Coverage）が例示できる。また、テスト対象となるソフトウェアのプログラムコードの判定
に含まれる条件値の全組合せを２のｎ乗個（ｎは条件数）のテストケースで確認可能なＭＣＣ（Multiple Condition Coverage）等が例示できる。
【０００３】
ＭＣ／ＤＣは、例えば、Ｃ／ＤＣにおいて検出不能な、判定式内の“and”と“or”の
誤記を検出可能とし、ｎ個の条件数に対してｎ＋１個以上のテストケースでプログラムコードの判定に含まれる条件値の全組合せを確認可能なコードカバレッジである。なお、本明細書においては、“真”、“偽”を得る式を条件と呼び、プログラムの判定文の判定対象の式を判定、或いは、判定式と呼ぶことにする。判定式は、“and”、“or”等の論理
演算子によって条件を組合せることができる。ＭＣ／ＤＣによるテスト網羅度は、以下の網羅規則を満たす。
・網羅規則１：プログラムの全入り口/出口は少なくとも一回はテストすること。
・網羅規則２：プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。
・網羅規則３：プログラムの全判定は可能な値を少なくとも一回はテストすること。
・網羅規則４：プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。
【０００４】
なお、本明細書で説明する技術に関連する技術が記載されている先行技術文献としては、以下の特許文献が存在している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１８１２９２号公報
【特許文献２】特開平９−５４７０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
網羅規則１−４のテスト網羅度を満たす、ＭＣ／ＤＣのテストケースは、次の（１）−（４）の手順に沿って求めることができる。
（１）各条件の真偽値の全組合せを生成する。
（２）各真偽値の組合せに対応する判定式の真偽値を求める。
（３）各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
（４）各条件の組の（最小となるような）和集合がＭＣ／ＤＣのテスト網羅度の網羅規則を満たすテストケースとなる。
【０００７】
しかしながら、（１）−（４）の手順に沿ってテストケースを生成する場合、（１）の各条件の真偽値の全組合せを生成する際に、２のｎ乗個の組合せ（ｎは条件数）が生ずる。このため、条件数ｎが増加すると真偽値の組合せについて組合せ爆発を起こす虞が生ずることとなる。テスト対象として、条件数が多いプログラムに対しては現実的な手順となり得ない。
【０００８】
1つの側面では、本発明は、冗長性を排除可能な、ＭＣ／ＤＣのテスト網羅度の網羅規
則を満たすテストケースを生成する技術を提供する。
【課題を解決するための手段】
【０００９】
上記技術は、次のテストケース生成プログラムの構成によって例示できる。すなわち、テストケース生成プログラムは、コンピュータに、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、取得した演算子に、取得した演算子による演算結果の真偽値と、演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、演算対象式の真偽値を求める解析ステップと、所定関係を満たす演算対象式の真偽値を用いて階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に取得ステップと解析ステップとを適用するステップと、を実行させる。
【発明の効果】
【００１０】
上記のテストケース生成プログラムによれば、冗長性を排除可能な、ＭＣ／ＤＣのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
【図面の簡単な説明】
【００１１】
【図１Ａ】比較例の、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成についての説明図である。
【図１Ｂ】比較例の、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成についての説明図である。
【図１Ｃ】比較例の、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成についての説明図である。
【図２】本実施形態の情報処理装置のハードウェア構成例を示す図である。
【図３】本実施形態の情報処理装置の機能構成を説明する図である。
【図４Ａ】２分木変換処理を説明する説明図である。
【図４Ｂ】真偽値表テーブルを説明する説明図である。
【図４Ｃ】論理積、論理和についての真偽値関係を説明する説明図である。
【図４Ｄ】論理積、論理和についてのＭＣ／ＤＣのテスト網羅度を満たす３通りの真偽値関係を説明する説明図である。
【図４Ｅ】組合せルールの適用を説明する説明図である。
【図４Ｆ】真偽値ルール適用処理を説明する説明図である。
【図４Ｇ】組合せルール１に基づく真偽値ルール適用処理を説明する説明図である。
【図４Ｈ】第２の真偽値ルール適用処理を説明する説明図である。
【図４Ｊ】組合せルール２に基づく真偽値ルール適用処理を説明する説明図である。
【図４Ｋ】第３の真偽値ルール適用処理を説明する説明図である。
【図４Ｌ】組合せルール２に基づく真偽値ルール適用処理を説明する説明図である。
【図４Ｍ】判定式生成処理を説明する説明図である。
【図４Ｎ】テストケース生成処理を説明する説明図である。
【図４Ｐ】テストケースの例である。
【図５Ａ】テストケース生成処理の全体処理を例示するフローチャートである。
【図５Ｂ】テストケース生成処理の全体処理を例示するフローチャートである。
【図５Ｃ】テストケース生成処理の全体処理を例示するフローチャートである。
【図５Ｄ】図５Ｂに例示のＳ８、Ｓ１０の処理を例示するフローチャートである。
【図５Ｅ】図５Ｂに例示のＳ８、Ｓ１０の処理を例示するフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、一実施形態に係るテストケース生成プログラムが実行される情報処理装置について説明する。以下の実施形態の構成は例示であり、情報処理装置は実施形態の構成には限定されない。
【００１３】
以下、図１から図５の図面に基づいて、テストケース生成プログラムが実行される情報処理装置を説明する。
＜比較例＞
図１Ａ−１Ｃに、比較例としての、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成についての説明図を例示する。図１Ａは、テスト対象となるソフトウェアのプログラムの例である。図１Ａの第1ステップでは、“if (X>2) and (y==5) then return”との処理プロセスが記述され、変数ｘ，ｙのそれぞれに対する条件成立の可否を組合せた論理積が記述されている。また、第２ステップでは、“if (X==3) or (y>2) then z=2 * Z”と
の処理プロセスが記述され、変数ｘ，ｙのそれぞれに対する条件成立の可否を組合せて変数ｚを導出する論理和が記述されている。
【００１４】
ＭＣ／ＤＣのテスト網羅度を満たすテストケースは、例えば、図１Ａの各ステップのプログラムに対し、以下の網羅規則１−４を満たすよう生成される。
・網羅規則１：プログラムの全入り口/出口は少なくとも一回はテストすること。
・網羅規則２：プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。
・網羅規則３：プログラムの全判定は可能な値を少なくとも一回はテストすること。
・網羅規則４：プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。（他方の条件の値を固定し、一方の条件の値を変更することで、判定の真偽値の出力値を変更すること）
【００１５】
図１Ａに例示のプログラムにおいて、網羅規則１の“プログラムの入り口”とは、例えば、第１ステップを指し、網羅規則１の“プログラムの出口”とは、第１ステップ、第２ステップを指す。また、網羅規則２−４の“判定（判定式とも称す）”とは、例えば、第１ステップの“(X>2) and (y==5)”、第２ステップの“(X==3) or (y>2)”を指し、“条
件”とは、第１ステップの“(X>2)”、“(y==5)”、第２ステップの“(X==3)”“(y>2)”を指す。
【００１６】
図１Ａに例示のプログラムに対し、ＭＣ／ＤＣのテスト網羅度を満たすテストケースとは、例えば、第１、２ステップの処理プロセスを判定する、“（x=3,y=3）”、“（x=0,y=3）”といった変数ｘ，ｙについての数値の組合せが例示できる。なお、以下の説明では、図１Ａに例示の第２ステップのプログラムを対象例として、ＭＣ／ＤＣのテスト網羅度を満たすテストケースを説明する。
【００１７】
図１Ｂに、図１Ａに例示の第２ステップのプログラムに対する、ＭＣ／ＤＣのテスト網羅度を満たすテストケースについての真偽テーブルを例示する。図１Ｂの例において、「x」、「y」カラムは図１Ａに例示の第２ステップのプログラムの変数を表し、「(X==3) or (y>2)」カラムはプログラムの判定のロジックを表し、「(X==3)」、「(y>2)」カラムは、判定に係る各変数の条件を表す。「x」、「y」カラムには各変数に対する数値が格納さ
れ、「(X==3) or (y>2)」、「(X==3)」、「(y>2)」カラムには、各変数、或いは各変数の組合せに対する真偽値（“true”、“false”）が格納される。
【００１８】
図１Ｂに例示の、テストケース（x=1,y=1）、（x=1,y=3）、（x=3,y=1）との変数ｘ，
ｙの数値の組合せは、例えば、図１Ａに例示の第２ステップの“if (X==3) or (y>2) then z=2 * Z”とのプログラムに対し、ＭＣ／ＤＣのテスト網羅度を満たすこととなる。例
えば、（x=1,y=3）とのテストケースは、テスト対象のプログラムの“(X==3) or (y>2)”との論理和の判定を“真（true）”とし、プログラムの入り口／出口のテストを少なくとも一回は実行するため、ＭＣ／ＤＣの網羅規則１を満たすこととなる。
【００１９】
また、変数：ｘに対する値“１”、“３”は、プログラムの“(X==3) or (y>2)”との
判定に含まれる“(X==3)”との条件について少なくとも１回は“真偽（true/false）”をテストする。同様に、変数：ｙに対する値“１”、“３”は、プログラムの“(X==3) or (y>2)”との判定に含まれる“(y>2)”との条件について少なくとも１回は“真偽（true/false）”をテストする。このため、プログラムの“(X==3) or (y>2)”との判定に含まれ
る“(X==3)”、“(y>2)”との条件について、上述の関係を満たす各変数値の組合せであ
るテストケース（x=1,y=1）、（x=1,y=3）、（x=3,y=1）は、ＭＣ／ＤＣの網羅規則２を
満たすこととなる。
【００２０】
なお、変数ｘ、ｙについての（x=3,y=3）との組合せも、ＭＣ／ＤＣの網羅規則２を満
たすテストケースとして存在し得る。しかしながら、プログラムの判定に含まれる“(X==3)”との条件についての“真（true）”テストは、（x=3,y=1）により少なくとも１回は
実行され、同様に、“(y>2)”との条件についての真（true）”テストは、（x=1,y=3）により少なくとも１回は実行される。ＭＣ／ＤＣの網羅規則２では、プログラムの判定に含まれる“(X==3)”、“(y>2)”との条件についての“真偽”が少なくとも１回のテストが
実行されればよいので、他のテストケースと重複する（x=3,y=3）との組合せは、余剰な
テストケースとなる。
【００２１】
図１Ｂに例示のテストケースにおいて、変数ｘ、ｙについての（x=1,y=1）との組合せ
は、プログラムの“(X==3) or (y>2)”との判定を“偽（false）”とするテストケースである。また、変数ｘ、ｙについての（x=1,y=3）との組合せは、プログラムの“(X==3) or
(y>2)”との判定を“真（true）”とするテストケースである。このため、変数ｘ、ｙについての（x=1,y=1）と（x=1,y=3）の組合せは、プログラムの“(X==3) or (y>2)”との
判定を、少なくとも１回は“真偽（true/false）”をテストするテストケースとなり、ＭＣ／ＤＣの網羅規則３を満たすこととなる。
【００２２】
また、図１Ｂの例において、テストケース（x=1,y=1）は、条件“(X==3)”について“
偽（false）”、条件“(y>2)”について“偽（false）”とし、プログラムの判定である
“(X==3) or (y>2)”を“偽（false）”とするテストケースである。そして、テストケース（x=3,y=1）は、条件“(X==3)”について“真（true）”、条件“(y>2)”について“偽（false）”とし、プログラムの判定である“(X==3) or (y>2)”を“真（true）”とするテストケースである。テストケースである（x=1,y=1）と（x=3,y=1）との関係は、条件“(y>2)”の真偽値を“偽（false）”に固定し、条件“(X==3)”の真偽値を変更することで、プログラムの判定である“(X==3) or (y>2)”の真偽値を変更する関係にある。つまり
、テストケース（x=1,y=1）とテストケース（x=3,y=1）とは、判定である“(X==3) or (y>2)”の出力に独立に影響するため、ＭＣ／ＤＣの網羅規則４を満たすテストケースに含
まれる。
【００２３】
同様に、図１Ｂに例示の、テストケース（x=1,y=3）は、条件“(X==3)”について“偽
（false）”、条件“(y>2)”について“真（true）”とし、プログラムの判定である“(X
==3) or (y>2)”を“真（true）”とするテストケースである。テストケースである（x=1,y=1）と（x=1,y=3）との関係は、条件“(X==3)”の真偽値を“偽（false）”に固定し、条件“(y>2)”の真偽値を変更することで、プログラムの判定である“(X==3) or (y>2)”の真偽値を変更する関係にある。つまり、テストケース（x=1,y=1）とテストケース（x=1,y=3）とは、判定である“(X==3) or (y>2)”の出力に独立に影響するため、ＭＣ／ＤＣ
の網羅規則４を満たすテストケースに含まれる。
【００２４】
図１Ｂの例では、テストケース（x=1,y=1）とテストケース（x=3,y=1）の組合せ、テストケース（x=1,y=1）とテストケース（x=1,y=3）の組合せが、ＭＣ／ＤＣの網羅規則４を満たすテストケースの和集合となる。
【００２５】
図１Ｂに例示のように、プログラムの判定“(X==3) or (y>2)”に係る条件数が２個の
場合では、ＭＣ／ＤＣの網羅規則１−４を満たす、３個のテストケース“（x=1,y=1）、
（x=1,y=3）、（x=3,y=1）”が生成される。ＭＣ／ＤＣのテスト網羅度を満たすテストケースは、テスト対象となるプログラムの判定に係る条件数がｎ個の場合、ｎ＋１個を最小としてｎ＋１通り以上のテストケースが生成される。
【００２６】
なお、テストケースに用いられる変数ｘ、ｙの変数値の組合せは、“(X==3)”、“(y>2)”との条件に対して各条件の真偽値がテストできるものであり、且つ、プログラムの判
定“(X==3) or (y>2)”の真偽値をテストできるものであればよい。例えば、テストケー
スに用いられる変数ｘ、ｙの変数値の組合せとして、“（x=2,y=2）、（x=2,y=4）、（x=3,y=2）”といったテストケースが例示できる。
【００２７】
次に、網羅規則１−４のテスト網羅度を満たすＭＣ／ＤＣのテストケースの求め方（手順）について、図１Ｃを参照し説明する。なお、説明例としての、テスト対象となるプログラムは、“if (A or B) and C then z=2 * Z”を想定する。説明例のプログラムでは、“(A or B) and C”が判定となり、“A”、“B”、“C”が判定に係る条件となる。各条
件には、それぞれに真偽値が存在し、各条件の真偽値の組合せにより、プログラムの判定の真偽値が決定される。
【００２８】
ＭＣ／ＤＣのテストケースは、以下の（１）−（４）の手順に沿って求めることができる。
【００２９】
（１）各条件の真偽値の全組合せを生成する。
図１Ｃの、破線で囲まれた領域Ｚ１に例示のように、判定に係る条件“A”、“B”、“C”について、それぞれの真偽値の全組合せを生成する。図例では、判定に係る条件数が
３個であるため、２の３乗個である８通りの真偽値の組合せ（番号１−８）が生成される。
【００３０】
（２）各真偽値の組合せに対応する判定式の真偽値を求める。
図１Ｃの、破線で囲まれた領域Ｚ２に例示するように、判定に係る条件“A”、“B”、“C”について生成された真偽値の全組合せに対する、判定の真偽値を生成する。説明例
での判定は“(A or B) and C”である。論理積（and）で結ばれる左項(A or B)は条件“A”、“B”の論理和であるため、少なくとも一方の条件が“真（true）”であれば、左項(A or B)は“真”となる。条件“A”、“B”の真偽値の組合せとして（A,B）＝（真、真）、（真、偽）、（偽、真）の３通りが、論理和（or）で結ばれる左項(A or B)を“真”とする。
【００３１】
そして、論理積で結ばれる“(A or B)”、“C”は、両者が“真”の場合に、“(A or B) and C”との判定が“真”となる。このため、条件“A”、“B”、“C”の真偽値の組合
せとして（A,B,C）＝（真、真、真）、（真、偽、真）、（偽、真、真）の３通り（番号
１，３，５の組合せ）が、“(A or B) and C”との判定を“真”とする（他の組合せでは、判定は“偽”となる）。
【００３２】
（３）各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
図１Ｃの、破線で囲まれた領域Ｚ３に例示するように、判定に係る条件“A”、“B”、“C”のそれぞれについて、ＭＣ／ＤＣの網羅規則４を満たすためのテストケースの組合
せを求める。例えば、条件“A”の場合では、条件“B”、“C”の真偽値を固定し、条件
“A”の真偽値を“真（true）”、“偽（false）”と変更した場合に、領域Ｚ２の真偽値が変更になるテストケースの組合せを求める。同様にして、条件“B”の場合では、条件
“A”、“C”の真偽値を固定し、条件“B”の真偽値を“真（true）”、“偽（false）”と変更した場合に、領域Ｚ２の真偽値が変更になるテストケースの組合せを求める。条件“C”の場合では、条件“A”、“B”の真偽値を固定し、条件“C”の真偽値を“真（true）”、“偽（false）”と変更した場合に、領域Ｚ２の真偽値が変更になるテストケース
の組合せを求める。
【００３３】
図１Ｃの例では、条件“A”について、番号１、５の条件“B”、“C”を（真（true）
、真（true））に固定した場合、番号２、６の（真（true）、偽（false））に固定した
場合には、条件“A”の真偽値の変更に関らず、判定の真偽値は変わらない。また、条件
“B”、“C”を（偽（false）、偽（false））に固定した番号４、８の場合にも条件“A
”の真偽値の変更に関らず、判定の真偽値は変わらない。
【００３４】
一方、条件“A”について、番号３、７の条件“B”、“C”を（偽（false）、真（true））に固定した場合には、条件“A”の真偽値の変更に伴い、判定の真偽値が変更される
。従って、条件“A”、“B”、“C”について、番号３の（真（true）、偽（false）、真（true））のテストケースと、番号７の（偽（false）、偽（false）、真（true））のテストケースの組合せは、ＭＣ／ＤＣの網羅規則４を満たすテストケースの組合せに含まれる。
【００３５】
同様に、条件“B”について、番号１、３の条件“A”、“C”を（真（true）、真（true））に固定した場合、番号２、６の（真（true）、偽（false））に固定した場合には、条件“B”の真偽値の変更に関らず、判定の真偽値は変わらない。また、条件“A”、“C
”を（偽（false）、偽（false））に固定した番号６、８の場合にも条件“B”の真偽値
の変更に関らず、判定の真偽値は変わらない。
【００３６】
条件“B”について、番号５、７の条件“A”、“C”を（偽（false）、真（true））に固定した場合には、条件“B”の真偽値の変更に伴い、判定の真偽値が変更される。従っ
て、条件“A”、“B”、“C”について、番号５の（偽（false）、真（true）、真（true））のテストケースと、番号７の（偽（false）、偽（false）、真（true））のテストケースの組合せは、ＭＣ／ＤＣの網羅規則４を満たすテストケースの組合に含まれる。
【００３７】
条件“C”については、番号７、８の条件“A”、“B”を（偽（false）、偽（false）
）に固定した場合に、条件“C”の真偽値の変更に関らず、判定の真偽値は変わらない。
他の、番号１、２の条件“A”、“B”を（真（true）、真（true））に固定した場合、番号３、４の（真（true）、偽（false））に固定した場合、番号５、６の（偽（false）、真（true））に固定した場合は、条件“B”の真偽値の変更に応じて判定の真偽値が変更
される。従って、番号１と２、３と４、５と６のテストケースの組合せは、ＭＣ／ＤＣの網羅規則４を満たすテストケースの組合せに含まれる。
【００３８】
（４）各条件の組の（最小となるような）和集合がＭＣ／ＤＣのテスト網羅度の網羅規則を満たすテストケースとなる。
図１Ｃの説明例では、条件“A”についてのテストケースの組は、番号３と７の１組で
あり、条件“B”についてのテストケースの組も、番号５と７の１組である。一方、条件
“C”についてのテストケースの組は、番号１と２、３と４、５と６の３組となる。条件
“A”、“B”、“C”のそれぞれについて、少なくとも各１組のテストケースを持つよう
にすることで、最小となる各条件の組の和集合を求めることができる。
【００３９】
ここで、条件“C”について、テストケースの３組の内、番号１と２の組を選択した場
合、テストケースの総数は番号１、２、３、５、７の５通りとなる。条件“C”について
のテストケースの３組の内、番号３と４の組を選択した場合は、番号３が条件“A”のテ
ストケースの組と重複するため、テストケースの総数は番号３、４、５、７の４通りとなる。同様にして、条件“C”についてのテストケースの３組の内、番号５と６の組を選択
した場合、番号５は条件“B”のテストケースの組と重複するため、テストケースの総数
は番号３、５、６、７の４通りとなる。条件“C”についてのテストケースの３組に対し
、条件“A”、“B”の各テストケースの組を含め、テストケースの総数が最小となる和集合は、番号３、４、５、７のテストケース、或いは、番号３、５、６、７のテストケースとなる。
【００４０】
従って、条件“A”、“B”、“C”のそれぞれについて、各１組のテストケースを持つ
ように、テストケースの総数について比較を行うことで、該総数が最小となる番号３、４、５、７のテストケース、或いは、番号３、５、６、７のテストケースを求めることができる。
【００４１】
テスト対象となるプログラムの判定式、条件について、上述の手順（１）−（４）を適用することにより、条件数ｎに対してｎ＋１個を最小値とするｎ＋１通り以上のＭＣ／ＤＣのテスト網羅度を満たすテストケースを生成することができる。しかしながら、手順（１）において、各条件の真偽値の全組合せを生成するため、条件数ｎに対し２のｎ乗個の真偽値の組合せが発生することとなる。テスト対象のプログラムに含まれる条件数が相対的に多い場合には、条件数ｎの増加に比例して真偽値の組合せが増加するため、所謂、組合せ爆発を起こす虞がある。組合せ爆発が生じた場合には、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成処理が収束しないため、現実的な手順となり得なくなってしまう。
【００４２】
＜実施例＞
本実施形態の情報処理装置は、例えば、テスト対象となるプログラムの判定式（論理式）を解析し、判定に係る各条件、及び、各条件を結び付ける論理演算子を特定する。情報処理装置は、特定した論理演算子毎に、論理演算子によって結び付けられる各条件の真偽値を、所定関係を満たすように階層的に組合せ、ＭＣ／ＤＣを満たす各条件の真偽値の組合せを生成する。ここで、所定関係とは、特定した論理演算子に応じた真偽値の冗長性を排除する各条件の組合せ関係である。
【００４３】
例えば、図１Ｃのテストケース例では、条件数が３個のため、８通りの真偽値の組合せが生成される。しかし、８通りの真偽値の組合せの内、ＭＣ／ＤＣのテスト網羅度の網羅規則を満たす組合せは、最小値として４通りの組合せがあればよい。つまり、生成された８通りの真偽値の組合せに対し、ＭＣ／ＤＣのテスト網羅度の網羅規則を満たす組合せ以外の、真偽値の組合せは余剰となる。本実施形態の情報処理装置では、判定式を解析して取得した論理演算子に応じて、該論理演算子により結び付けられる各条件の真偽値を、階層的に組合せることにより、余剰となる真偽値の組合せを排除する。
【００４４】
そして、情報処理装置は、生成された各条件の真偽値の組合せに基づいて、各条件を充足する変数値のセットをテストケースとして生成する。この結果、本実施形態の情報処理装置では、判定に係る各条件の真偽値の全組合せから冗長性を排除できるため、条件数の過多なプログラムであっても真偽値の組合せ爆発を生ずることなく、ＭＣ／ＤＣのテスト網羅度の網羅規則を満たすテストケースが生成できる。本実施形態の情報処理装置では、冗長性を排除可能な、ＭＣ／ＤＣのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
【００４５】
〔装置構成〕
図２に、本実施形態の情報処理装置のハードウェアの構成を例示する。図２に例示の情報処理装置１０は、例えば、ＰＣ（Personal Computer）、サーバ等のコンピュータであ
る。情報処理装置１０は、接続バスＢ１によって相互に接続されたＣＰＵ（Central Processing Unit）１１、主記憶部１２、補助記憶部１３、入力部１４、出力部１５、通信部
１６を有する。主記憶部１２及び補助記憶部１３は、情報処理装置１０が読み取り可能な記録媒体である。
【００４６】
情報処理装置１０は、ＣＰＵ１１が補助記憶部１３に記憶されたプログラムを主記憶部１２の作業領域に実行可能に展開し、プログラムの実行を通じて周辺機器の制御を行う。これにより、情報処理装置１０は、所定の目的に合致した機能を実現することができる。
【００４７】
図２に例示の情報処理装置１０において、ＣＰＵ１１は、情報処理装置１０全体の制御を行う中央処理演算装置である。ＣＰＵ１１は、補助記憶部１３に格納されたプログラムに従って処理を行う。主記憶部１２は、ＣＰＵ１１がプログラムやデータをキャッシュしたり、作業領域を展開したりする記憶媒体である。主記憶部１２は、例えば、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）を含む。
【００４８】
補助記憶部１３は、各種のプログラム及び各種のデータを読み書き自在に記録媒体に格納する。補助記憶部１３は、外部記憶装置とも呼ばれる。補助記憶部１３には、オペレーティングシステム（Operating System :ＯＳ）、各種プログラム、各種テーブル等が格納される。ＯＳは、通信部１６を介して接続される外部装置等とのデータの受け渡しを行う通信インターフェースプログラムを含む。外部装置等には、例えば、通信部１６を介して接続されたネットワーク上の、他のサーバ等の情報処理装置、外部記憶装置、通信機能を有する装置等が含まれる。
【００４９】
補助記憶部１３は、例えば、ＥＰＲＯＭ（Erasable Programmable ROM）、ソリッドス
テートドライブ装置、ハードディスクドライブ（ＨＤＤ、Hard Disk Drive）装置等であ
る。また、補助記憶部１３としては、例えば、ＣＤドライブ装置、ＤＶＤドライブ装置、ＢＤ（Blu-ray（登録商標） Disc）ドライブ装置等が提示できる。記録媒体としては、例えば、不揮発性半導体メモリ（フラッシュメモリ）を含むシリコンディスク、ハードディスク、ＣＤ、ＤＶＤ、ＢＤ、ＵＳＢ（Universal Serial Bus）メモリ、メモリカード等がある。
【００５０】
入力部１４は、ユーザ等からの操作指示等を受け付ける。入力部１４は、入力ボタン、キーボード、タッチパネル等のポインティングデバイス、ワイヤレスリモコン、マイクロフォン、カメラ等の入力デバイスである。入力部１４から入力された情報は、接続バスＢ１を介してＣＰＵ１１に通知される。
【００５１】
出力部１５は、ＣＰＵ１１で処理されるデータや主記憶部１２に記憶されるデータを出力する。出力部１５は、ＣＲＴ（Cathode Ray Tube）ディスプレイ、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma Display Panel）、ＥＬ（Electroluminescence）パネ
ル、有機ＥＬパネル、プリンタ、スピーカ等の出力デバイスである。通信部１６は、例えば、ネットワーク等とのインターフェースである。情報処理装置１０が接続するネットワークには、例えば、ＬＡＮ（Local Area Network）、インターネット（Internet）等の公衆ネットワーク、通信基地局を含む携帯電話網等の無線ネットワーク等が含まれる。
【００５２】
情報処理装置１０は、例えば、ＣＰＵ１１が補助記憶部１３に記憶されているＯＳ、各種プログラムや各種データを主記憶部１２に読み出して実行することにより、対象プログラムの実行と共に、図２に例示の各機能手段を実現する。情報処理装置１０は、対象プログラムの実行と共に、図２に例示の判定式解析部１０１、真偽値ルール適用部１０２、テストケース生成部１０３、充足可能性判定部１０４を実現する。判定式解析部１０１は、２分木変換部１０１ａ、条件収集部１０１ｂを含み、テストケース生成部１０３は、判定式生成部１０３ａを含む。但し、図２に例示の各機能手段のいずれか、あるいは、これらの一部がハードウェア回路によって動作するものであってもよい。
【００５３】
また、情報処理装置１０は、以上の各機能手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値表ＤＢ２０１、真偽値ルールＤＢ２０２、判定式ＤＢ２０３を補助記憶部１３に備える。
【００５４】
なお、各機能手段のうち、いずれかが、他の情報処理装置等に含まれてもよい。例えば、判定式解析部１０１を含む情報処理装置と、真偽値ルール適用部１０２を含む情報処理装置と、テストケース生成部１０３を含む情報処理装置と、充足可能性判定部１０４を含む情報処理装置とがネットワーク等を介して接続する。そしてネットワークを介して接続された各情報処理装置が、情報処理装置１０として機能するとしてもよい。同様に、情報処理装置１０の真偽値表ＤＢ２０１、真偽値ルールＤＢ２０２、判定式ＤＢ２０３は、複数の外部記憶装置に分散されて格納し、ネットワーク等を介して接続されるとしてもよい。情報処理装置１０は、例えば、ネットワーク上のコンピュータ群であるクラウドとして実現できるため、各機能手段の処理負荷を軽減できる。
【００５５】
〔機能構成〕
図３に、本実施形態の情報処理装置１０における、機能ブロックの説明図を例示する。図３に例示の説明図において、情報処理装置１０は、判定式解析部１０１、真偽値ルール適用部１０２、テストケース生成部１０３、充足可能性判定部１０４の各機能手段を有する。判定式解析部１０１には、２分木変換部１０１ａ、条件収集部１０１ｂの機能手段が含まれる。テストケース生成部１０３には、判定式生成部１０３ａの機能手段が含まれる。
【００５６】
また、図３に例示の説明図において、情報処理装置１０は、以上の各機能手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値表ＤＢ２０１、真偽値ルールＤＢ２０２、判定式ＤＢ２０３を補助記憶部１３に備える。
【００５７】
図３に例示の、判定式解析部１０１は、例えば、テスト対象となるプログラムの判定式（論理式）Ａ１を受け付ける。判定式解析部１０１は、例えば、補助記憶部１３を介して、ＣＤ、ＵＳＢメモリ等の記録媒体に格納された、テスト対象となるプログラムを読み込むことで、該プログラムの判定式Ａ１を受け付けることができる。また、判定式解析部１０１は、例えば、情報処理装置１０が接続するネットワーク等を介して、他の情報処理装置、或いは、外部記憶装置等に格納されたテスト対象のプログラムを読み込むことで、該プログラムに記述された判定式Ａ１を受け付けるとしてもよい。判定式解析部１０１は、例えば、情報処理装置１０で受け付けた判定式Ａ１を主記憶部１２の所定の領域に一時的に記憶する。
【００５８】
判定式解析部１０１は、受け付けたプログラムの判定式Ａ１を解析し、判定式Ａ１に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、判定式解析部１０１は、特定した論理演算子により結び付けられる判定に係る条件に基づいて、テスト対象となるプログラムの真偽値表テーブルを生成する。なお、判定式Ａ１に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件の特定処理は、例えば、判定式解析部１０１の２分木変換部１０１ａにより行われる。また、真偽値表テーブルの生成は、例えば、判定式解析部１０１の条件収集部１０１ｂにより行われる。判定式解析部１０１で生成された真偽値表テーブルは、例えば、真偽値表ＤＢ２０１に格納される。
【００５９】
［２分木変換処理］
判定式解析部１０１の２分木変換部１０１ａは、受け付けた判定式Ａ１を解析し、判定式Ａ１に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、２分木変換部１０１ａは、特定した各条件と論理演算子と結びつけ、受け付けた判定式Ａ１の判定に係る階層的な論理関係を、木構造に変換する。
【００６０】
図４Ａに、２分木変換処理の説明図を例示する。なお、図４Ａに例示の説明図の、２分木処理に係る判定式Ａ１は、図３に例示の、“((x>0) or (y==1)) and (z<0)”とする。
２分木変換部１０１ａは、例えば、言語解析等を行うことにより、判定式Ａ１に含まれる“(”、“)”等の括弧記号、或いは、スペース等の領域の区切りを検出する。そして、２分木変換部１０１ａは、区切られた領域範囲に含まれる論理演算子の文字列、及び、判定に係る条件を特定する。
【００６１】
２分木変換部１０１ａは、判定式Ａ１について、例えば、“(”、“)”等の括弧記号により区切られた領域範囲から“x>0”、“y==1”、“z<0”といった判定に係る条件を特定する。また、例えば、２分木変換部１０１ａは、スペース等により区切られた領域範囲から“or”、“and”等の論理演算子の文字列を特定する。なお、２分木変換部１０１ａは
、特定された条件に対し、例えば、判定式Ａ１の文頭から順に連番による識別番号を付与する。そして、２分木変換部１０１ａは、特定した条件を結び付ける論理演算子と、特定された条件に付与された識別番号との対応付けを行う。
【００６２】
なお、受け付けた判定式Ａ１では、例えば、“and”、“or”等の論理演算子を含まず
、“if (x>2) then return”といった単一の条件“(x>2)”により記述されるケースが想
定できる。２分木変換部１０１ａは、例えば、上述の判定式Ａ１のように、論理演算子を検出しないケースでは、特定した条件“x>2”に対して識別番号を付与しないとすること
ができる。特定した条件に対する識別番号の有無により、例えば、受け付けた判定式Ａ１が論理演算子を含まず、単一の条件により記述されていることが識別できる。
【００６３】
また、２分木変換部１０１ａは、例えば、“(”、“)”等の括弧記号の配置関係から、判定に係る論理演算の優先順位を特定し、優先順位の高い論理演算子を下層とする、論理演算子間の階層関係を特定する。そして、２分木変換部１０１ａは、論理演算子間の階層関係と、論理演算子により結び付けられる条件に付与された識別番号との対応関係から、判定式Ａ１の、階層的な論理関係を木構造に変換する。
【００６４】
但し、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、２分木変換部１０１ａは、例えば、プログラムを記述する言語と同じ優先度の解釈をするとすればよい。２分木変換部１０１ａは、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、例えば、左側優先とすることができる。
【００６５】
図４Ａの例では、“x>0”、“y==1”、“z<0”といった判定に係る条件に対し、２分木変換部１０１ａは、例えば、判定式Ａ１の文頭から特定した順に“０（斜体文字）”から始まる識別番号を付与する。そして、２分木変換部１０１ａは、特定した条件に付与された識別番号と、該条件を結び付ける論理演算子との対応付けを行う。ここで、図４Ａに例示するように、例えば、“（x>0,０）”、“（y==1,１）”との識別番号が付与された条
件を木構造の判定式Ａ１の“リーフ”とする。
【００６６】
２分木変換部１０１ａは、特定された“or”との論理演算子について、該論理演算子によって結び付けられる条件“x>0”、“y==1”のそれぞれに付与された識別番号との対応
付けを行う。図４Ａに例示のように、論理演算子“or”によって結び付けられる条件“x>0”、“y==1”の木構造の関係が特定される。２分木変換部１０１ａは、例えば、論理演
算子“or”によって結び付けられる条件の識別番号と、識別番号が付与されたリーフ“（x>0,０）”、“（y==1,１）”とを、主記憶部１２の所定の領域に一時的に格納する。
【００６７】
２分木変換部１０１ａは、論理演算子である“and”についても、同様の処理を行う。
但し、判定式Ａ１では、論理演算子である“and”により結び付けられる条件は、“((x>0) or (y==1))”、“z<0”である。論理演算子である“and”により結び付けられる“((x>0) or (y==1))”は、論理演算子“or”で結び付けられた各リーフ“（x>0,０）”、“（y==1,１）”の真偽関係である。このため、２分木変換部１０１ａは、論理演算子である“and”により結び付けられる一方を論理演算子“or”とし、他方の条件“z<0”に対して、例えば、判定式Ａ１の文頭から連番で“０（斜体文字）”から始まる識別番号を付与する。
【００６８】
２分木変換部１０１ａは、図４Ａに例示のように、特定した条件“z<0”に対して、例
えば、識別番号“２（斜体文字）”を付与し、論理演算子である“and”により結び付け
られるリーフ“（z<0,２）”とする。そして、２分木変換部１０１ａは、論理演算子である“and”により結び付けられるリーフ“（z<0,２）”の識別番号と、論理演算子である
“and”の対応付けを行う。２分木変換部１０１ａは、例えば、論理演算子“and”によって結び付けられる条件の識別番号と、識別番号が付与されたリーフ“（z<0,２）”とを、主記憶部１２の所定の領域に一時的に格納する。また、２分木変換部１０１ａは、論理演算子である“and”により結び付けられる論理演算子“or”を、例えば、“ノード”とし
、主記憶部１２の所定の領域に一時的に格納する。
【００６９】
２分木変換部１０１ａは、以上の処理により、論理演算子“or”によって結び付けられるリーフ“（x>0,０）”、“（y==1,１）”を、論理演算子“or”に対応付けることがで
きる。また、同様にして、２分木変換部１０１ａは、論理演算子である“and”について
も、該論理演算子によって結び付けられるリーフ“（z<0,２）”、及び、ノードとしての論理演算子“or”を対応付けることができる。この結果、２分木変換部１０１ａは、図４Ａに例示のように、判定式Ａ１に含まれる論理演算子、及び、該論理演算子により結び付けられる各条件をリーフとした、論理演算子の関係を階層化した判定式Ａ１の木構造を生成することができる。
【００７０】
図４Ａの例では、例えば、“(”、“)”等の括弧記号の配置関係から優先的に処理される論理演算子“or”をノードとして、該ノードによって結び付けられるリーフ“（x>0,０）”、“（y==1,１）”が、該ノードの下層に配置されている。ノード“or”により結び
付けられるリーフ間の関係では、判定式Ａ１において、相対的に先行して出現したリーフ“（x>0,０）”が左側に、相対的に後行して出現したリーフ“（y==1,１）”が右側に配
置されている。論理演算子“and”についても、同様に、判定式Ａ１において、相対的に
先行して出現した論理関係のノード“or”が右側に配置され、相対的に後行して出現したリーフ“（z<0,２）”が右側に配置されている。論理演算子“and”で結び付けられる、
ノード“or”とリーフ“（z<0,２）”は、同階層に配置されている。なお、判定式Ａ１では、論理演算子“and”が木構造の最上位階層として表される。以下の説明では、木構造
の最上位階層に位置する論理演算子を“ルート”とも称する。
【００７１】
図４Ａの判定式Ａ１では、３つの条件を２つの論理演算子で結び付ける例を説明した。ここで、テスト対象の判定式に含まれる論理演算子の数量が相対的に増加する場合には、例えば、論理演算子に対して識別番号を付与するとしてもよい。そして、２分木変換部１０１ａは、該論理演算子に対して付与された識別番号と、該論理演算子により結び付けられるリーフの識別番号を対応付けて管理するとしてもよい。２分木変換部１０１ａは、論理演算子に対して付与された識別番号の関係から、論理演算子間の階層構造を特定することができ、論理演算子の識別番号に対応付けたリーフの識別番号により、対象となる判定式の木構造を一元的に管理することができる。
【００７２】
２分木変換部１０１ａは、判定式Ａ１から特定した各論理演算子、及び、各論理演算子に対応付けられた条件である各リーフを、例えば、条件収集部１０１ｂに引き渡す。
【００７３】
［真偽値表テーブルの生成処理］
判定式解析部１０１の条件収集部１０１ｂは、２分木変換部１０１ａから引き渡された各論理演算子、各リーフに基づいて、テスト対象となる判定式Ａ１の真偽表テーブルを生成する。生成された真偽値表テーブルは、例えば、真偽値表ＤＢ２０１に格納される。
【００７４】
図４Ｂに、真偽値表テーブルの説明図を例示する。条件収集部１０１ｂは、２分木変換部１０１ａから引き渡された各リーフをカラムとする真偽値表テーブルを生成する。条件収集部１０１ｂは、例えば、各リーフに付与された識別番号順に、各リーフを真偽値表テーブルのカラムの左側から配列し、テスト対象となる判定式Ａ１の真偽表テーブルを生成する。
【００７５】
図４Ｂに例示の真偽値表テーブルは、「Ｎｏ」、「（x>0,０）」、「（y==1,１）」、
「（z<0,２）」の各カラムを有する。「（x>0,０）」、「（y==1,１）」、「（z<0,２）
」の各カラムは、左側から順に、各リーフに付与された識別番号順に配列される。「Ｎｏ」カラムには、例えば、テスト対象の判定式Ａ１に対するＭＣ／ＤＣのテスト網羅度を満たすテストケースの識別番号が格納される。各リーフのカラムには、それぞれに“真（true）”、“偽（false）”といったリーフの条件の成立に係る真偽値が格納される。
【００７６】
なお、ＭＣ／ＤＣのテスト網羅度を満たすテストケースは、ｎ個の条件数に対し、ｎ＋１個を最小としてｎ＋１通り以上の数量が生成される。図４Ｂの例では、条件数が３個のため、例えば、４通り以上のテストケースに係る、各リーフに対する真偽値関係の組合せがレコードとして生成される。条件収集部１０１ｂは、生成した真偽値表のテーブルを、例えば、真偽値表ＤＢ２０１に格納する。
【００７７】
［真偽値ルール適用処理］
（基本ルール）
真偽値ルール適用部１０２は、判定式解析部１０１により生成された真偽値表テーブルに基づいて、判定式Ａ１の各条件の真偽値を、所定関係を満たすように階層的（再帰的）に組合せ、ＭＣ／ＤＣを満たす各条件の真偽値の組合せを生成する。ここで、所定関係とは、特定した論理演算子に応じた真偽値の冗長性を排除する各条件の組合せ関係である。
【００７８】
図４Ｃ（１）、（２）に、テスト対象となる判定式に含まれる論理積（and）、論理和
（or）についての真偽値関係の説明図を例示する。図４Ｃ（１）は、論理積についての真偽値関係の説明図であり、図４Ｃ（２）は論理和についての真偽値関係の説明図である。
なお、説明例の判定式は、“（A or B） and (C)”とする。
【００７９】
ＭＣ／ＤＣのテスト網羅度を満たすテストケースは、判定式に対して網羅規則２の「プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。また、同様に、網羅規則３の「プログラムの全判定は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。
【００８０】
例えば、図４Ｃ（１）の、論理積：（A and B）の関係では、条件“A”、“B”の真偽
値の組合せとして（A,B）＝（真（true）、真（true））、（真（true）、偽（false））、（偽（false）、真（true））、（偽（false）、偽（false））の４つの組合せが存在
する。論理積の４通りの条件の組合せに対し、ＭＣ／ＤＣのテスト網羅度の網羅規則３から、論理積の判定結果を“真（true）”、“偽（false）”とする条件の組合せが抽出で
きる。
【００８１】
ここで、論理積の判定結果を“真（true）”とする条件は、（A,B）＝（真（true）、
真（true））の１通りであり、他は論理積の判定結果を“偽（false）”とする条件の組
合せである。ＭＣ／ＤＣのテスト網羅度の網羅規則３を満たすためには、論理積の判定結果を“偽（false）”とする３通りの条件の組合せから、少なくとも１通り以上を抽出す
ればよい。
【００８２】
次に、論理積の判定結果を“真（true）”とする（A,B）＝（真（true）、真（true）
）の条件に対し、ＭＣ／ＤＣのテスト網羅度の網羅規則２を満たすように、論理積の判定結果を“偽（false）”とする３通りの条件の組合せの中から所定の組合せを抽出する。
つまり、条件“A”、“B”のそれぞれについて“真（true）”となるケースは既に確定しているため、ＭＣ／ＤＣのテスト網羅度の網羅規則２を満たすためには、条件“A”を“
偽（false）”とする条件“A”、“B”の組合せがあればよい。また、同様にして、条件
“B”を“偽（false）”とする条件“A”、“B”の組合せがあればよい。
【００８３】
この結果、条件“A”を“偽（false）”とする（A,B）＝（偽（false）、真（true））の組合せ、条件“B”を“偽（false）”とする（A,B）＝（真（true）、偽（false））の組合せが網羅規則２の関係を満たすこととなる。論理積の４通りの条件の組合せの中で、（A,B）＝（偽（false）、偽（false））との組合せは、論理積の判定結果を“偽（false）”とする他の２通りの組合せで真偽値のテストが網羅されるため、余剰な組合せとなる。
【００８４】
論理積：（A and B）の関係では、図４Ｃ（１）に例示する、条件“A”、“B”の３通
りの真偽値の組合せが提示できる。論理積：（A and B）の関係では、条件“A”、“B”
の真偽値の組合せとして（A,B）＝（真（true）、真（true））、（真（true）、偽（false））、（偽（false）、真（true））の３通りの組合せがＭＣ／ＤＣのテスト網羅度を
満たす組合せとして抽出される。
【００８５】
図４Ｃ（２）の、論理和：（A or B）についても、同様の関係が抽出できる。すなわち、論理和についても、条件“A”、“B”の真偽値の組合せとして（A,B）＝（真（true）
、真（true））、（真（true）、偽（false））、（偽（false）、真（true））、（偽（false）、偽（false））の４通りの組合せが存在する。そして、論理和の４通りの条件の組合せに対し、ＭＣ／ＤＣのテスト網羅度の網羅規則３を満たす、論理和の判定結果を“真（true）”、“偽（false）”とする条件の組合せが抽出される。
【００８６】
論理和の判定結果を“偽（false）”とする条件は、（A,B）＝（偽（false）、偽（fal
se））の１通りであり、他は論理和の判定結果を“真（true）”とする条件の組合せである。ＭＣ／ＤＣのテスト網羅度の網羅規則３を満たすためには、論理和の判定結果を“真（true）”とする３通りの条件の組合せから、少なくとも１通り以上を抽出すればよい。
【００８７】
次に、論理和の判定結果を“偽（false）”とする（A,B）＝（偽（false）、偽（false））の条件に対し、ＭＣ／ＤＣのテスト網羅度の網羅規則２を満たすように、論理和の判定結果を“真（true）”とする３通りの条件の組合せの中から所定の組合せを抽出する。つまり、条件“A”、“B”のそれぞれについて“偽（false）”となるケースは既に確定
しているため、ＭＣ／ＤＣのテスト網羅度の網羅規則２を満たすためには、条件“A”を
“真（true）”とする条件“A”、“B”の組合せがあればよい。また、同様にして、条件“B”を“真（true）”とする条件“A”、“B”の組合せがあればよい。
【００８８】
この結果、条件“A”を“真（true）”とする（A,B）＝（真（true）、偽（false））
の組合せ、条件“B”を“真（true）”とする（A,B）＝（偽（false）、真（true））の
組合せが、網羅規則２の関係を満たすこととなる。論理和の４通りの条件の組合せの中で、（A,B）＝（真（true）、真（true））との組合せは、論理和の判定結果を“真（true
）”とする他の２通りの組合せで真偽値のテストが網羅されるため、余剰な組合せとなる。
【００８９】
論理和：（A or B）の関係では、図４Ｃ（２）に例示する、条件“A”、“B”の真偽値の組合せが提示できる。論理和：（A or B）の関係では、条件“A”、“B”の真偽値の組合せとして（A,B）＝（真（true）、偽（false））、（偽（false）、真（true））、（
偽（false）、偽（false））の３通りの組合せがＭＣ／ＤＣのテスト網羅度を満たす組合せとして抽出される。
【００９０】
このように、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの生成においては、１個の論理演算子で結び付けられる２つの条件の組合せでは、３通りの条件の組合せを用いればよいことが判る。そして判定式に含まれる論理演算子毎に上述の、論理積、論理和に係る条件の組合せを階層的（再帰的）に適用すれば、判定式の真偽関係での、ＭＣ／ＤＣのテスト網羅度を満たすテストケースを生成することが可能となる。
【００９１】
例えば、判定式“（A or B） and (C)”では、論理演算子“and”で結ばれる条件（A or B）と条件（C）に対して、上述した論理積の関係を満たす条件の組合せを適用する。例えば、情報処理装置１０は、予め補助記憶部１３等に格納された上述の論理積、論理和の関係を満たす条件の組合せを参照し、特定した論理演算子毎に適用すればよい。
【００９２】
論理演算子“and”で結ばれる条件（A or B）と条件（C）に対して、（（A or B）,(C)）＝（真（true）、真（true））、（真（true）、偽（false））、（偽（false）、真（true））の３通りの組合せが生成される。そして、次に、生成された各組合せに対し、論理演算子“or”で結ばれる、図４Ｃ（２）に例示の条件“A”、“B”の組合せを適用すればよい。つまり、論理和を“真（true）”とする条件“A”、“B”の真偽値の組合せ、論理和を“偽（false）”とする条件“A”、“B”の真偽値の組合せを、論理演算子“and”で得られた３通りの真偽値の組合せに適用する。
【００９３】
例えば、論理和を“真（true）”とする条件“A”、“B”の真偽値の組合せは、図４Ｃ（２）より、（A,B）＝（真（true）、偽（false））、（偽（false）、真（true））の
２通りが適用される。また、論理和を“偽（false）”とする条件“A”、“B”の真偽値
の組合せは、図４Ｃ（２）より、（A,B）＝（偽（false）、偽（false））の１通りが適
用される。図４Ｃ（２）の論理和の関係を、論理演算子“and”の組合せに適用すること
により、（A,B,C）＝（真（true）、偽（false）、真（true））、（偽（false）、真（t
rue）、真（true））の２通りの組合せが生成される。同様にして、（A,B,C）＝（真（true）、偽（false）、偽（false））、（偽（false）、真（true）、偽（false））、（偽（false）、偽（false）、真（true））の３通りの組合せが生成される。
【００９４】
このように、テスト対象となる判定式について、基本ルールとして論理積、論理和による真偽値関係を適用することにより、冗長性が排除されたテストケースを生成することができる。なお、条件数がｎ個の場合では、ｎ＋１個を最小限としてｎ＋１通り以上のテストケースが生成される。つまり、図４Ｃ（１）、（２）の例では、３個の条件数（A,B,C
）について論理積、論理和による基本ルールの適用により５個のテストケースが生成される。条件数が３個のテストケースの、最小限の数量は４個であるため、図４Ｃ（１）、（２）に例示の基本ルールの適用では、未だ１個の余剰なテストケースが存在することとなる。以下、論理演算子毎の基本ルールとなる真偽値の階層的（再帰的）な組合せで残されたテストケースの冗長性について、排除可能な真偽値の組合せルールを図４Ｄ−４Ｅを参照し説明する。
【００９５】
（組合せルール）
図４Ｄ（１）、（２）に、論理積（and）、論理和（or）についてのＭＣ／ＤＣのテス
ト網羅度を満たす３通りの真偽値関係の説明図を例示する。図４Ｄ（１）は、論理積についての真偽値関係の説明図であり、図４Ｄ（２）は論理和についての真偽値関係の説明図である。
【００９６】
図４Ｄ（１）、（２）の右上がり斜線でハッチングされた領域に示されるように、論理積（and）、論理和（or）のそれぞれに、真偽値の判定結果に独立に影響を及ぼす条件が
存在する。ここで、真偽値の判定結果に独立に影響を及ぼす条件とは、各条件の真偽値を反転させた場合に、判定結果の真偽値の結果が変更される条件をいう。
【００９７】
例えば、論理積について“A and B”との判定式を想定すると、図４Ｄ（１）のＩＤ＝
１のレコードに示すように、条件“A”が“真（true）”、条件“B”が“偽（false）”
となる組み合わせでは、判定結果（A and B）は“偽（false）”となる。ＩＤ＝１のレコードの条件の組合せにおいて、例えば、条件“A”を“真（true）”→“偽（false）”に変更した場合、判定結果は“偽（false）”となり、変更の前後で変化しない。
【００９８】
一方、ＩＤ＝１のレコードの条件の組合せにおいて、例えば、条件“B”を“偽（false）”→“真（true）”に変更した場合には、判定結果は“真（true）”となり、条件“B
”の真偽値の変更の前後で変化することとなる。つまり、図４Ｄ（１）のＩＤ＝１のレコードの条件の組合せにおいて、条件“B”は、真偽値の判定結果に独立に影響を及ぼす条
件ということができる。
【００９９】
図４Ｄ（１）のＩＤ＝２のレコードの、条件“A”が“真（true）”、条件“B”が“偽（false）”となる組み合わせにおける、条件“A”についても、真偽値の判定結果に独立に影響を及ぼす条件ということができる。ＩＤ＝２のレコードの条件“A”、“B”の組合せでは、条件“A”を“偽（false）”→“真（true）”に変更した場合、判定結果（A and B）が“偽（false）”→“真（true）”に変更されるからである。
【０１００】
図４Ｄ（１）のＩＤ＝３のレコードの、条件“A”が“真（true）”、条件“B”が“真（true）”となる組み合わせでは、条件“A”、条件“B”がそれぞれに真偽値の判定結果に独立に影響を及ぼす条件ということができる。ＩＤ＝３のレコードの条件“A”、“B”の組合せでは、条件“A”を“真（true）”→“偽（false）”に変更した場合には、判定結果（A and B）が“真（true）”→“偽（false）”に変更されるからである。同様に、条件“B”を“真（true）”→“偽（false）”に変更した場合にも、判定結果（A and B
）が“真（true）”→“偽（false）”に変更されるからである。
【０１０１】
図４Ｄ（２）の論理和（A or B）では、例えば、ＩＤ＝１のレコードに示すように、条件“A”が“真（true）”、条件“B”が“偽（false）”となる組み合わせでは、判定結
果（A or B）は“真（true）”となる。ＩＤ＝１のレコードの条件の組合せにおいて、例えば、条件“A”を“真（true）”→“偽（false）”に変更した場合には、判定結果は“偽（false）”となり、条件“A”の真偽値の変更の前後で変化することとなる。ＩＤ＝１のレコードの条件の組合せにおいて、条件“A”は、真偽値の判定結果に独立に影響を及
ぼす条件ということができる。
【０１０２】
図４Ｄ（２）のＩＤ＝２のレコードの、条件“A”が“偽（false）”、条件“B”が“
真（true）”となる組み合わせにおける、条件“B”についても、真偽値の判定結果に独
立に影響を及ぼす条件ということができる。ＩＤ＝２のレコードの条件“A”、“B”の組合せでは、条件“B”を“真（true）”→“偽（false）”に変更した場合、判定結果（A or B）が“真（true）”→“偽（false）”に変更されるからである。
【０１０３】
図４Ｄ（２）のＩＤ＝３のレコードの、条件“A”が“偽（false）”、条件“B”が“
偽（false）”となる組み合わせでは、条件“A”、条件“B”がそれぞれに真偽値の判定
結果に独立に影響を及ぼす条件ということができる。ＩＤ＝３のレコードの条件“A”、
“B”の組合せでは、条件“A”を“偽（false）”→“真（true）”に変更した場合には
、判定結果（A or B）が“偽（false）”→“真（true）”に変更されるからである。同
様に、条件“B”を“偽（false）”→“真（true）”に変更した場合にも、判定結果（A or B）が“偽（false）”→“真（true）”に変更されるからである。
【０１０４】
以上、説明したように、基本ルールである論理積（and）、論理和（or）による真偽値
の組合せでは、それぞれに真偽値の判定結果に独立に影響を及ぼす条件が存在する。本実施形態の情報処理装置１０では、解析された判定式について、基本ルールの階層的（再帰的）な条件の組合せにおいて、以下の組合せルール１、２を適用し、ＭＣ／ＤＣのテスト網羅度を満たすテストケースを生成する。
【０１０５】
・組合せルール１：真偽値の判定結果に独立に影響しない（対象となる条件の真偽値を反転しても判定結果が変わらない）場合には、判定結果が共通する条件の組合せから１つの組合せを抽出し、適用する。
・組合せルール２：真偽値の判定結果に独立に影響する（対象となる条件の真偽値を反転すると判定結果が変わる）場合には、判定結果が共通する条件の組合せを全て抽出し、適用する。
【０１０６】
情報処理装置１０は、例えば、基本ルールとして階層的に組合せられる論理積、論理和の真偽値表を予め作成し、該真偽値表の条件の組合せに対して、上述の組合せルール１、２の適用を対応付けておけばよい。図４Ｄ（１）、（２）の例では、例えば、右上がり斜線でハッチングされた領域の真偽値に対し、組合せルール２が適用されることを対応付けておけばよい。また、図４Ｄ（１）、（２）の例において、組合せルール２が適用される領域以外の真偽値に対しては、例えば、組合せルール１が適用されることを対応付けるとしてもよい。
【０１０７】
組合せルール１、２の適用と対応付けられた、論理積、論理和の真偽値表は、例えば、補助記憶部１３等に格納される。情報処理装置１０は、例えば、テスト対象となる判定式について、補助記憶部１３等に格納された論理積、論理和の真偽値表を参照し、上述の基本ルール、組合せルールを階層的（再帰的）に適用し、テストケースを生成することができる。
【０１０８】
図４Ｅ（１）、（２）に、本実施形態の情報処理装置１０で行われる基本ルールの階層的（再帰的）な組合せの際に、組合せルールの適用についての説明図を例示する。なお、説明例での判定式は“（A or B） and C”とする。
【０１０９】
図４Ｅ（１）に例示の真偽値表テーブルは、例えば、判定式“（A or B） and C”に対して、図４Ｃ（１）の論理積の基本ルールを適用した場合の、条件“（A or B）”と条件“C”の真偽値関係を示すものである。図４Ｃ（１）で説明したように、判定式“（A or B） and C”に対して、論理積の基本ルールを適用することにより、条件“（A or B）”
、“C”の組合せについての、ＭＣ／ＤＣのテスト網羅度を満たす３通りの組合せが生成
される。
【０１１０】
図４Ｅ（１）に例示するように、条件（（A or B）,C）＝（真（true）、偽（false）
）、（偽（false）、真（true））、（真（true）、真（true））との３通りの条件“（A
or B）”、“C”組合せが生成される。そして、３通りの組合せのそれぞれについて、条件“（A or B）”に対し、図４Ｃ（２）に例示の論理和の真偽値の組合せを適用することで、基本ルールの階層的（再帰的な）な組合せに基づくテストケースが生成される。
【０１１１】
つまり、条件（A or B）が“真（true）”となる場合には、図４Ｃ（２）の“A or B”が“真（true）”となる、条件“A”、“B”の組合せを適用することにより、基本ルールの階層的（再帰的）な組合せに基付くテストケースが生成できる。また、条件（A or B）が“偽（false）”となる場合には、図４Ｃ（２）の“A or B”が“偽（false）”となる、条件“A”、“B”の組合せを適用することにより、基本ルールの階層的（再帰的）な組合せに基づくテストケースが生成できる。
【０１１２】
このように、基本ルールの適用により生成された論理積の真偽値に対し、判定結果としての真偽値が一致する論理和の条件の組合せを階層的（再帰的）に適用することで、ＭＣ／ＤＣのテスト網羅度を満たすテストケースが生成される。
【０１１３】
ここで、図４Ｅ（１）に例示の各条件の組合せにおいて、ＩＤ＝１のレコードの、条件“（A or B）”の“真（true）”は、図４Ｄ（１）で説明したように、論理積の真偽値の判定結果に独立に影響しない真偽値である。このため、ＩＤ＝１のレコードの条件“（A or B）”に対し、論理和の基本ルールを階層的（再帰的）に適用する際には、組合せルール１が採用される。つまり、図４Ｃ（２）のＩＤ＝１、或いは、ＩＤ＝２のどちらか一方の、“A or B”が“真（true）”となる、条件“A”、“B”についての真偽値の組合せを適用すればよい。
【０１１４】
同様に、図４Ｅ（１）のＩＤ＝２のレコードの、条件“（A or B）”の“偽（false）
”は、図４Ｄ（１）で説明したように、論理積の真偽値の判定結果に独立に影響する真偽値である。このため、ＩＤ＝２のレコードの条件“（A or B）”に対し、論理和の基本ルールを階層的（再帰的）に適用する際には、組合せルール２が採用される。つまり、図４Ｃ（２）のＩＤ＝３の、“A or B”が“偽（false）”となる、条件“A”、“B”につい
ての真偽値の組合せを全て適用すればよい。
【０１１５】
なお、図４Ｃ（２）の論理和の例では、条件“A or B”が“偽（false）”となる条件
“A”、“B”の真偽値の組合せはＩＤ＝３に例示の１通りである。従って、図４Ｅ（１）のＩＤ＝２のレコードの、条件“（A or B）”の“偽（false）”についての、論理和の
基本ルールの階層的（再帰的）な適用では、図４Ｃ（２）のＩＤ＝３に例示の１通りの条件“A”、“B”についての真偽値の組合せが採用される。
【０１１６】
また、図４Ｅ（１）のＩＤ＝３のレコードの、条件“（A or B）”の“真（true）”は、図４Ｄ（１）で説明したように、論理積の真偽値の判定結果に独立に影響する真偽値である。このため、ＩＤ＝３のレコードの条件“（A or B）”に対し、論理和の基本ルールを階層的（再帰的）に適用する際には、組合せルール２が採用される。つまり、図４Ｃ（２）のＩＤ＝１、２の、“A or B”が“真（true）”となる、条件“A”、“B”についての真偽値の組合せを全て適用すればよい。
【０１１７】
図４Ｃ（２）の論理和の例では、条件“A or B”が“真（true）”となる条件“A”、
“B”の真偽値の組合せはＩＤ＝１の（真（true）、偽（false））、及び、ＩＤ＝２の（偽（false）、真（true））の２通りである。従って、図４Ｅ（１）のＩＤ＝３のレコー
ドの、条件“（A or B）”の“真（true）”についての、論理和の基本ルールの階層的（再帰的）な適用では、図４Ｃ（２）のＩＤ＝１、２に例示の２通りの条件“A”、“B”についての真偽値の組合せが採用される。
【０１１８】
図４Ｅ（２）に例示の真偽値表テーブルは、図４Ｅ（１）に例示の真偽値表テーブルの各レコードに対し、組合せルールを考慮して生成されたテストケースの真偽値表テーブル例である。図４Ｅ（２）に例示の真偽値表テーブルでは、３通りの各条件についてのカラムを有する。
【０１１９】
図４Ｅ（２）のＩＤ＝１のレコードは、図４Ｅ（１）のＩＤ＝１のレコードに対応する。図４Ｅ（２）のＩＤ＝１のレコードには、条件“（A or B）”を“真（true）”とする２通りの組合せから抽出された、（A,B）＝（真（true）、偽（false））の組合せが格納されている。なお、組合せルール１で説明したように、図４Ｅ（２）のＩＤ＝１のレコードに格納される条件“A”、“B”の真偽値の組合せは、例えば、もう一方の、（A,B）＝
（偽（false）、真（true））の組合せであってもよい。
【０１２０】
図４Ｅ（２）のＩＤ＝２のレコードは、図４Ｅ（１）のＩＤ＝２のレコードに対応する。図４Ｅ（２）のＩＤ＝２のレコードには、条件“（A or B）”を“偽（false）”とす
る１通りの組合せである、（A,B）＝（偽（false）、偽（false））が格納されている。
【０１２１】
図４Ｅ（２）のＩＤ＝３#１、３#２のレコードは、図４Ｅ（１）のＩＤ＝３のレコードに対応する。図４Ｅ（２）のＩＤ＝３#１のレコードには、条件“（A or B）”を“真（true）”とする２通りの組合せの内、（A,B）＝（真（true）、偽（false））が格納され
ている。また、図４Ｅ（２）のＩＤ＝３#２のレコードには、条件“（A or B）”を“真
（true）”とする２通りの組合せの内、（A,B）＝（偽（false）、真（true））が格納されている。
【０１２２】
図４Ｅ（１）、（２）で説明したように、テスト対象となる判定式について、論理積、論理和の基本ルールの階層的（再帰的）な組合せ、及び、組合せルールの適用により、ＭＣ／ＤＣのテスト網羅度を満たす最小限のテストケースを生成できる。論理積、論理和の基本ルールの階層的（再帰的）な組合せの際に、論理演算子に応じた組合せルールを適用することにより、冗長性を排除した最小限のテストケースを生成できる。例えば、論理積、論理和の基本ルールの階層的（再帰的）な組合せで残されていたテストケースの冗長性について、組合せルールを適用することにより、余剰なテストケースの排除が可能となる。
【０１２３】
（真偽値ルール適用処理）
真偽値ルール適用部１０２は、例えば、判定式解析部１０１により生成された真偽値表テーブルについて、図４Ｃ−４Ｅで説明した、論理積、論理和の基本ルールの階層的（再帰的）な組合せ、及び、組合せルールを適用する。そして、真偽値ルール適用部１０２は
、ＭＣ／ＤＣのテスト網羅度を満たす最小限のテストケースを生成する。
【０１２４】
図４Ｆに、真偽値ルール適用処理の説明図を例示する。図４ＦのＴｂ１は、基本ルールとして適用される、論理積（and）の３通りの条件の組合せに対する真偽値表であり、Ｔ
ｂ２は、論理和（or）の３通りの条件の組合せに対する真偽値表である。Ｔｂ１，Ｔｂ２の各真偽値表は、例えば、真偽値ルールＤＢ２０２に格納される。
【０１２５】
また、図４ＦのＴｂ３は、判定式Ａ１について、判定式解析部１０１により生成された真偽値表テーブルである。真偽値表テーブルＴｂ３では、判定に係る条件が、判定式Ａ１の文頭から出現した順に左側からカラムとして格納されている。なお、各条件に付与された斜体文字の識別番号“０”、“１”、“２”は、各条件を結び付ける論理演算子と対応付けが行われている。例えば、判定式Ａ１の論理演算子“or”は、条件“（x>0,０）”、“（y==1,１）”との対応付けが行われており、論理演算子“and”は、条件“（z<0，２
）”との対応付けが行われている。
【０１２６】
図４Ｆに例示の真偽値表Ｔｂ１、Ｔｂ２では、「Ｎｏ」、「右辺」、「左辺」、「全体」の各カラムを有する。「Ｎｏ」カラムには、対応する論理関係により組合せられる真偽値の識別番号が格納される。「右辺」、「左辺」カラムには、対応する論理関係により組合せられる真偽値情報が格納される。なお、「右辺」、「左辺」カラムに格納される真偽値情報では、“真（true）”、“偽（false）”といった真偽値と共に、対象となる条件
の真偽値が対応する論理関係の判定結果に独立に影響しない、或いは、独立に影響することを表す識別子が付与される。
【０１２７】
例えば、図４Ｆの真偽値表Ｔｂ１のＩＤ＝１のレコードの「左辺」カラムでは、（真（true）、０）との真偽値情報が格納されている。また、同レコードの「右辺」カラムでは、（偽（false）、１）との真偽値情報が格納されている。真偽値の後部に付与された“
０”、“１”との数値が対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響しない、或いは、独立に影響することを表す識別子である。
【０１２８】
図４ＦのＴｂ１、Ｔｂ２の例では、識別子“０”は、対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響しないことを表し、識別子“１”は、対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響することを表す。言い換えれば、識別子“０”が付与された真偽値では、論理積、論理和の基本ルールの組合せの際に、組合せルール１が適用され、識別子“１”が付与された真偽値では、組合せルール２が適用される。
【０１２９】
なお、Ｔｂ１、Ｔｂ２に例示の真偽値表の「左辺」カラムは、例えば、該当する論理演算子で結び付けられる左側の条件に対応し、「右辺」カラムは、該当する論理演算子で結び付けられる右側の条件に対応する。例えば、Ｔｂ２の例では、論理演算子“or”で結び付けられる条件“（x>0,０）”が「左辺」カラムに対応し、条件“（y==1,１）”が「右
辺」カラムに対応する。
【０１３０】
また、Ｔｂ１、Ｔｂ２に例示の真偽値表の「全体」カラムには、該当する論理関係についての真偽値が格納される。「全体」カラムには、同レコードの「右辺」カラム、「左辺」カラムに格納された真偽値の組合せによる、該当する論理関係についての真偽値が格納される。例えば、Ｔｂ１の論理積の真偽値表の例では、ＩＤ＝１のレコードの「左辺」カラムに格納された真偽値“true”と「右辺」カラムに格納された真偽値“false”の論理
積の結果が「全体」カラムに格納される。Ｔｂ１の論理積の真偽値表の、ＩＤ＝１のレコードの「全体」カラムには、真偽値“false”との論理積の結果が格納されている。
【０１３１】
真偽値ルール適用部１０２は、例えば、真偽値表ＤＢ２０１を参照し、判定式解析部１０１により生成された真偽値表テーブルを取得する。そして、真偽値ルール適用部１０２は、例えば、判定式Ａ１の木構造に基づいて、階層化された論理演算子を取得する。判定式Ａ１では、例えば、最上位に位置するルートの論理演算子は“and”である。真偽値ル
ール適用部１０２は、図４Ｆに例示の論理積の真偽値表Ｔｂ１に基づいて、該真偽値表に格納された３通りの組合せに従って、真偽値ルール適用処理を行う。
【０１３２】
・第１の真偽値ルール適用処理
真偽値ルール適用部１０２は、例えば、論理演算子“and”に対応付けられたリーフの
識別番号、論理演算子“or”に対応付けられたリーフの識別番号から、リーフ“（z<0，
２）”は、論理演算子“and”の右側に位置することを特定する。そして、真偽値ルール
適用部１０２は、例えば、論理演算子“and”に対応する論理積の真偽値表Ｔｂ１を参照
し、ＩＤ＝１のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの「右辺」カラムに格納された真偽値情報は、“false、１”である。真偽値ルール適用部１０２は、真偽値情報“false、１”から、真偽値は“false”であり、組合せルール２が適用されることを特定する。
【０１３３】
真偽値ルール適用部１０２は、取得した真偽値“false”を、真偽値表テーブルＴｂ３
の（z<0，２）カラムに格納する。なお、取得した真偽値の適用対象は、論理演算子“and”により結び付けられるリーフ“（z<0，２）”である。このため、リーフ“（z<0，２）”には、階層化されたリーフ、或いは、論理演算子等のノードは存在しない。真偽値ルール適用部１０２は、例えば、取得した真偽値の適用対象がリーフである場合には、取得した組合せルールを適用しないとすることができる。取得した真偽値情報の適用対象がリーフである場合には、真偽値情報の真偽値がリーフの真偽値に適用される。
【０１３４】
次に、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１を参照し、ＩＤ＝１のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの「左辺」カラムに格納された真偽値情報は、“true、０”である。真偽値ルール適用部１０２は、真偽値情報“true、０”から、真偽値は“true”であり、組合せルール１が適用されることを特定する。真偽値ルール適用部１０２は、論理演算子“and”によりリーフ“（z<0，２）”と結び付けられる論理演算子“or”について、組合せルール１が適用されると特定する。なお、組合せルール１では、例えば、判定結果が共通する複数の条件の組合せから１つの組合せを抽出し適用すればよい。
【０１３５】
図４Ｇに、組合せルール１に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの「左辺」カラムから取得した真偽値“true”に基づいて、論理和の真偽値表Ｔｂ２の「全体」カラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Ｔｂ１から取得した“true、０”との真偽値情報を階層的（再帰的）に適用するためである。
【０１３６】
論理和の真偽値表Ｔｂ２の「全体」カラムの格納値で、論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの「左辺」カラムから取得した真偽値“true”と一致する真偽値を有するレコードは、ＩＤ＝１、２のレコードである。論理和の真偽値表Ｔｂ２のＩＤ＝１のレコードでは、「左辺」カラムに“true、１”、「右辺」カラムに“false、０”との真偽値
情報が格納されている。また、同真偽値表のＩＤ＝２のレコードでは、「左辺」カラムに“false、０”、「右辺」カラムに“true、１”との真偽値情報が格納されている。
【０１３７】
真偽値ルール適用部１０２は、真偽値“true”と一致する真偽値を「全体」カラムに格納した２通りの真偽値の組合せ（ＩＤ＝１、２）から、何れか一方の真偽値の組合せを取
得する。論理和の真偽値表Ｔｂ２から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。真偽値ルール適用部１０２は、論理和の真偽値表Ｔｂ２から取得した真偽値情報の組合せ（レコード情報）を、例えば、論理積の真偽値表Ｔｂ１から取得した真偽値“true”と対応付けて、主記憶部１２の所定の領域に一時的に記憶する。
【０１３８】
図４Ｇの説明図において、論理和の真偽値表Ｔｂ２のＩＤ＝１のレコードの真偽値の組合せを選択したとする。論理和の真偽値表Ｔｂ２のＩＤ＝１のレコードの「左辺」カラムには“true、１”、「右辺」カラムには“false、０”の真偽値情報が格納されている。
「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。判定式Ａ１について、論理演算子“or”で結び付けられる左側の条件は“（x>0,０）”であり、右側の条件は“（y==1,１）”である。このため、真偽値ルー
ル適用部１０２は、取得した「左辺」カラムの真偽値“true”を、真偽値表テーブルＴｂ３の「（x>0,０）」カラムに格納し、「右辺」カラムの真偽値“false”を、真偽値表テ
ーブルＴｂ３の「（y==1,１）」カラムに格納する。
【０１３９】
同様に、図４Ｇの説明図において、論理和の真偽値表Ｔｂ２のＩＤ＝２のレコードの真偽値の組合せを選択したとする。論理和の真偽値表Ｔｂ２のＩＤ＝２のレコードの「左辺」カラムには“false、０”、「右辺」カラムには“true、１”の真偽値情報が格納され
ている。「左辺」カラムの真偽値は、論理演算子“or”で結び付けられる左側の条件“（x>0,０）”の真偽値に対応し、「右辺」カラムの真偽値は、論理演算子“or”で結び付けられる右側の条件“（y==1,１）”の真偽値に対応する。このため、真偽値ルール適用部
１０２は、取得した「左辺」カラムの真偽値“false”を、真偽値表テーブルＴｂ３の「
（x>0,０）」カラムに格納し、「右辺」カラムの真偽値“true”を、真偽値表テーブルＴｂ３の「（y==1,１）」カラムに格納する。
【０１４０】
以上の処理により、真偽値ルール適用部１０２では、論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの真偽値の組合せに対応する、テストケースが生成される。なお、論理和の真偽値表Ｔｂ２から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
【０１４１】
・第２の真偽値ルール適用処理
図４Ｈに、真偽値ルール適用処理の説明図を例示する。真偽値ルール適用部１０２は、例えば、図４Ｈに例示の、論理積の真偽値表Ｔｂ１のＩＤ＝２のレコードに格納された真偽値の組合せに基づいて、真偽値ルール適用処理を行う。なお、図４Ｈに例示の説明図において、真偽値表テーブルＴｂ３には、上述した第１の真偽値ルール適用処理で生成されたテストケースが格納されている。
【０１４２】
真偽値ルール適用部１０２は、例えば、論理演算子“and”に対応する論理積の真偽値
表Ｔｂ１を参照し、ＩＤ＝２のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝２のレコードの「右辺」カラムに格納された真偽値情報は、“true、０”である。真偽値ルール適用部１０２は、真偽値情報“true、０”から、真偽値は“true”であり、組合せルール１が適用されることを特定する。なお、真偽値ルール適用部１０２は、取得した真偽値情報の適用対象がリーフであるため、取得した真偽値情報の真偽値をリーフの真偽値に適用する。
【０１４３】
真偽値ルール適用部１０２は、例えば、真偽値表テーブルＴｂ３に新たなレコード（ＩＤ＝２）を追加する。そして、真偽値ルール適用部１０２は、追加したレコードの（z<0
，２）カラムに、論理積の真偽値表Ｔｂ１から取得した真偽値“true”を格納する。
【０１４４】
次に、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１を参照し、ＩＤ＝２のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝２のレコードの「左辺」カラムに格納された真偽値情報は、“false、１”である
。真偽値ルール適用部１０２は、真偽値情報“false、１”から、真偽値は“false”であり、組合せルール２が適用されることを特定する。なお、組合せルール２では、例えば、判定結果が共通する条件の組合せを全て抽出し適用すればよい。
【０１４５】
図４Ｊに、組合せルール２に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１のＩＤ＝２のレコードの「左辺」カラムから取得した真偽値“false”に基づいて、論理和の真偽値表Ｔｂ２の「全体」カ
ラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Ｔｂ１から取得した“false、１”との真偽値情報を階層的（再帰的）に適用す
るためである。
【０１４６】
図４Ｊに例示の、論理和の真偽値表Ｔｂ２の「全体」カラムの格納値では、論理積の真偽値表Ｔｂ１のＩＤ＝１のレコードの「左辺」カラムから取得した真偽値“false”と一
致する真偽値を有するレコードは、ＩＤ＝３のレコードである。論理和の真偽値表Ｔｂ２のＩＤ＝３のレコードには、「左辺」カラムに“false、１”、「右辺」カラムに“false、１”との真偽値情報が格納されている。真偽値ルール適用部１０２は、真偽値“false
”と一致する真偽値を「全体」カラムに格納した全ての真偽値の組合せ（ＩＤ＝３の１通り）を取得する。論理和の真偽値表Ｔｂ２から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。
【０１４７】
真偽値ルール適用部１０２は、論理和の真偽値表Ｔｂ２から取得した真偽値情報の組合せ（レコード情報）を、例えば、論理積の真偽値表Ｔｂ１から取得した真偽値“false”
と対応付けて、主記憶部１２の所定の領域に一時的に記憶する。
【０１４８】
図４Ｇで説明したように、論理和の真偽値表Ｔｂ３の「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。つまり、論理演算子“or”で結び付けられる左側の条件“（x>0,０）”には、論理和の真偽値表Ｔｂ３のＩＤ＝３のレコードの「左辺」カラムから取得した真偽値情報“false、１”が対応す
ることとなる。また、論理演算子“or”で結び付けられる右側の条件“（y==1,１）”に
は、論理和の真偽値表Ｔｂ３のＩＤ＝３のレコードの「右辺」カラムから取得した真偽値情報“false、１”が対応することとなる。
【０１４９】
真偽値ルール適用部１０２は、例えば、取得した「左辺」カラムの真偽値“false”を
、真偽値表テーブルＴｂ３の「（x>0,０）」カラムに格納し、「右辺」カラムの真偽値“false”を、真偽値表テーブルＴｂ３の「（y==1,１）」カラムに格納する。なお、論理和の真偽値表Ｔｂ２から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
【０１５０】
以上の処理により、真偽値ルール適用部１０２では、論理積の真偽値表Ｔｂ１のＩＤ＝２のレコードの真偽値の組合せに対応する、テストケースが生成される。
【０１５１】
・第３の真偽値ルール適用処理
図４Ｋに、真偽値ルール適用処理の説明図を例示する。真偽値ルール適用部１０２は、
例えば、図４Ｋに例示の、論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードに格納された真偽値の組合せに基づいて、真偽値ルール適用処理を行う。なお、図４Ｋに例示の説明図において、真偽値表テーブルＴｂ３には、上述した第１、２の真偽値ルール適用処理で生成されたテストケースが格納されている。
【０１５２】
真偽値ルール適用部１０２は、例えば、論理演算子“and”に対応する論理積の真偽値
表Ｔｂ１を参照し、ＩＤ＝３のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードの「右辺」カラムに格納された真偽値情報は、“true、1”である。真偽値ルール適用部１０２は、真偽値情報“true、１”
から、真偽値は“true”であり、組合せルール２が適用されることを特定する。なお、真偽値ルール適用部１０２は、取得した真偽値情報の適用対象がリーフであるため、取得した真偽値情報の真偽値をリーフの真偽値に適用する。
【０１５３】
真偽値ルール適用部１０２は、例えば、真偽値表テーブルＴｂ３に新たなレコード（ＩＤ＝３）を追加する。そして、真偽値ルール適用部１０２は、追加したレコードの（z<0
，２）カラムに、論理積の真偽値表Ｔｂ１から取得した真偽値“true”を格納する。
【０１５４】
次に、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１を参照し、ＩＤ＝３のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードの「左辺」カラムに格納された真偽値情報は、“true、１”である。真偽値ルール適用部１０２は、真偽値情報“true、１”から、真偽値は“true”であり、組合せルール２が適用されることを特定する。なお、組合せルール２では、例えば、判定結果が共通する条件の組合せを全て抽出し適用すればよい。
【０１５５】
図４Ｌに、組合せルール２に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部１０２は、論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードの「左辺」カラムから取得した真偽値“true”に基づいて、論理和の真偽値表Ｔｂ２の「全体」カラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Ｔｂ１から取得した“true、１”との真偽値情報を階層的（再帰的）に適用するためである。
【０１５６】
図４Ｊに例示の、論理和の真偽値表Ｔｂ２の「全体」カラムの格納値では、論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードの「左辺」カラムから取得した真偽値“true”と一致する真偽値を有するレコードは、ＩＤ＝１、２のレコードである。論理和の真偽値表Ｔｂ２のＩＤ＝１のレコードには、「左辺」カラムに“true、１”、「右辺」カラムに“false、０”との真偽値情報が格納されている。また、論理和の真偽値表Ｔｂ２のＩＤ＝２の
レコードには、「左辺」カラムに“false、０”、「右辺」カラムに“true、１”との真
偽値情報が格納されている。
【０１５７】
真偽値ルール適用部１０２は、真偽値“true”と一致する真偽値を「全体」カラムに格納した全ての真偽値の組合せ（ＩＤ＝１、２の２通り）を取得する。論理和の真偽値表Ｔｂ２から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。真偽値ルール適用部１０２は、論理和の真偽値表Ｔｂ２から取得した真偽値情報の組合せ（レコード情報）を、例えば、論理積の真偽値表Ｔｂ１から取得した真偽値“true”と対応付けて、主記憶部１２の所定の領域に一時的に記憶する。
【０１５８】
図４Ｇで説明したように、論理和の真偽値表Ｔｂ３の「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。
【０１５９】
このため、真偽値ルール適用部１０２は、例えば、取得した「左辺」カラムの真偽値を、論理演算子“or”で結び付けられる左側の条件に対応付けられた、真偽値表テーブルＴｂ３の「（x>0,０）」カラムに格納する。また、真偽値ルール適用部１０２は、例えば、取得した「右辺」カラムの真偽値を、論理演算子“or”で結び付けられる右側の条件に対応付けられた、真偽値表テーブルＴｂ３の「（y==1,１）」カラムに格納する。
【０１６０】
なお、図４Ｊの論理和の真偽値表Ｔｂ２から取得された真偽値の組合せは２通りである。このため、真偽値ルール適用部１０２は、真偽値表テーブルＴｂ３に新たなレコード（ＩＤ＝４）を追加し、真偽値表テーブルＴｂ３のＩＤ＝３、４のレコードに、論理和の真偽値表Ｔｂ２から取得した真偽値の組合せを格納する。なお、論理和の真偽値表Ｔｂ２から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
【０１６１】
真偽値ルール適用部１０２は、例えば、論理和の真偽値表Ｔｂ２のＩＤ＝１のレコードの「左辺」カラムから取得した真偽値“true”を、真偽値表テーブルＴｂ３のＩＤ＝３のレコードの「（x>0,０）」カラムに格納する。また、真偽値ルール適用部１０２は、例えば、同レコードの「右辺」カラムから取得した真偽値“false”を、真偽値表テーブルＴ
ｂ３のＩＤ＝３のレコードの「（y==1,１）」カラムに格納する。
【０１６２】
同様に、真偽値ルール適用部１０２は、例えば、論理和の真偽値表Ｔｂ２のＩＤ＝２のレコードの「左辺」カラムから取得した真偽値“false”を、真偽値表テーブルＴｂ３の
ＩＤ＝４のレコードの「（x>0,０）」カラムに格納する。また、真偽値ルール適用部１０２は、例えば、同レコードの「右辺」カラムから取得した真偽値“true”を、真偽値表テーブルＴｂ３のＩＤ＝４のレコードの「（y==1,１）」カラムに格納する。
【０１６３】
以上の処理により、真偽値ルール適用部１０２では、論理積の真偽値表Ｔｂ１のＩＤ＝３のレコードの真偽値の組合せに対応する、テストケースが生成される。この結果、図４Ｊの真偽値表テーブルＴｂ３に例示するように、ＭＣ／ＤＣのテスト網羅度を満たす最小限の、４通りのテストケースが生成される。真偽値ルール適用部１０２は、第１−３の真偽値ルール適用処理を繰り返して生成した４通りのテストケースが格納された真偽値表テーブルＴｂ３を、例えば、真偽値表ＤＢ２０１に格納する。
【０１６４】
[判定式生成処理]
図３に例示の説明図に戻り、テストケース生成部１０３の判定式生成部１０３ａは、真偽値ルール適用部１０２で生成された真偽値表テーブルＴｂ３に基づいて、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの判定式テーブルＴｂ４を生成する。判定式テーブルＴｂ４には、真偽値表テーブルＴｂ３のレコードに対応した判定式が格納される。なお、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの変数値は、判定式テーブルＴｂ４に格納された判定式に基づいて決定される。判定式生成部１０３ａで生成された判定式テーブルＴｂ４は、例えば、判定式ＤＢ２０３に格納される。
【０１６５】
図４Ｍに、判定式生成処理の説明図を例示する。図４Ｍに例示の説明図において、Ｔｂ３は、真偽値ルール適用部１０２で生成された真偽値表テーブルである。また、Ｔｂ４は、判定式生成部１０３ａで生成される判定式テーブルの例である。判定式テーブルＴｂ４は、判定式生成処理の対象となる真偽値表テーブルＴｂ３と同数のレコードを有する。
【０１６６】
判定式生成部１０３ａは、例えば、真偽値表ＤＢ２０１を参照し、真偽値ルール適用部１０２で生成された真偽値表テーブルＴｂ３を取得する。判定式生成部１０３ａは、取得
した真偽値表テーブルＴｂ３を、例えば、主記憶部１２の所定の領域に一時的に記憶する。
【０１６７】
図４Ｍに例示のように、真偽値表テーブルには、テスト対象となる判定式Ａ１に含まれる条件毎の真偽値が格納されている。判定式生成部１０３ａは、例えば、真偽値表テーブルＴｂ３の各レコードの真偽値をレコード毎に取得する。そして判定式生成部１０３ａは、取得した真偽値をカラムとしての各条件に組み合わせ、真偽値表テーブルＴｂ３のレコード毎の判定式を生成する。
【０１６８】
判定式生成部１０３ａは、例えば、取得したレコードのカラム毎の真偽値が“false”
の場合には、カラムとしての各条件に対して論理演算子“not”を付加し、判定式の条件
を生成する。また、例えば、判定式生成部１０３ａは、例えば、取得したレコードのカラム毎の真偽値が“true”の場合では、カラムとしての各条件を判定式の条件とする。そして、判定式生成部１０３ａは、カラムとしての各条件に真偽値を組合せた条件を、各条件に付加された識別番号順に論理演算子“and”で結合し、真偽値表テーブルＴｂ３のレコ
ードの真偽値の組合せに応じた判定式を生成する。生成された判定式は、例えば、判定式テーブルＴｂ４の、判定式生成処理の対象となる真偽値表テーブルＴｂ３のレコードと同一のＩＤが付与されたレコードの「判定式」カラムに格納される。
【０１６９】
例えば、図４Ｍに例示の真偽値表テーブルＴｂ３のＩＤ＝１のレコードを判定式生成処理の対象とする。判定式生成部１０３ａは、ＩＤ＝１のレコードの各真偽値を、該真偽値が格納されたカラムと対応付けて取得する。例えば、各カラムと真偽値を対応付けた、（（x>0,０）、true）、（（y==1,１）、false）、（（z<0,２）、false）といった組合せ
が取得される。
【０１７０】
判定式生成部１０３ａは、取得した（（x>0,０）、true）、（（y==1,１）、false）、（（z<0,２）、false）等の組合せについて、真偽値が“false”の場合には、真偽値“false”の条件に論理演算子“not”を付加する。例えば、“ x>0,０”、“not（y==1,１）
”、“not（z<0,２）”といった真偽値の種別に応じて変換された各条件が生成される。
【０１７１】
そして、判定式生成部１０３ａは、真偽値の種別に応じて変換された各条件を、各条件に付与された識別番号“０”、“１”、“２”の番号順に、論理演算子“and”で結合し
、判定式を生成する。例えば、“（x>0） and not（y==1） and not（z<0）”といった判定式が生成される。判定式生成部１０３ａは、例えば、生成した判定式“（x>0） and not（y==1） and not（z<0）”を、判定式テーブルＴｂ４のＩＤ＝１のレコードに格納する。
【０１７２】
判定式生成部１０３ａは、上述した判定式生成処理を、図４Ｍに例示の真偽値表テーブルＴｂ３の他のレコード（ＩＤ＝２，３，４）についても同様に行い、レコード毎の判定式を生成する。生成された判定式は、判定式テーブルＴｂ４の、判定式生成処理の対象となる真偽値表テーブルＴｂ３のレコードと同一のＩＤが付与されたレコードの「判定式」カラムに格納される。判定式生成部１０３ａで生成された判定式テーブルＴｂ４は、例えば、判定式ＤＢ２０３に格納される。
【０１７３】
[テストケース生成処理]
図３に例示の説明図に戻り、テストケース生成部１０３は、判定式生成部１０３ａで生成された判定式テーブルＴｂ４に基づいて、判定式の条件を満たす変数値を組合せ、ＭＣ／ＤＣのテスト網羅度を満たすテストケースを生成する。なお、判定式テーブルＴｂ４に基づく変数値の組合せ（セット）は、例えば、充足可能性判定部１０４により生成される。
【０１７４】
図４Ｎに、テストケース生成処理の説明図を例示する。図４Ｎの説明図において、Ｔｂ４は、判定式生成部１０３ａで生成された判定式が格納された判定式テーブルである。判定式テーブルＴｂ４には、判定式Ａ１“((x>0) or (y==1)) and (z<0)”の各条件に、Ｍ
Ｃ／ＤＣのテスト網羅度を満たす真偽値の組合せを反映させた４通りの判定式が格納されている。
【０１７５】
テストケース生成部１０３は、例えば、判定式ＤＢ２０３を参照し、判定式生成部１０３ａで生成された、図４Ｎに例示の判定式テーブルＴｂ４を取得する。テストケース生成部１０３は、取得した判定式テーブルＴｂ４を、例えば、主記憶部１２の所定の領域に一時的に記憶する。
【０１７６】
テストケース生成部１０３は、例えば、取得した判定式テーブルＴｂ４に格納された判定式を、レコードの識別番号順に取得し、取得したレコードの判定式を充足可能性判定部１０４に引き渡す。
【０１７７】
充足可能性判定部１０４では、例えば、テストケース生成部１０３から引き渡された判定式に基づいて、判定式に含まれる各条件を充足する変数値の組合せ（セット）を生成する。充足可能性判定部１０４は、例えば、生成した変数値の組合せをテストケース生成部１０３に引き渡す。テストケース生成部１０３は、充足可能性判定部１０４から引き渡された変数値の組合せを、例えば、判定式テーブルＴｂ４のレコードのＩＤに対応付けて、主記憶部１２の所定の領域に一時的に記憶する。
【０１７８】
充足可能性判定部１０４は、例えば、判定式に含まれる論理演算子“and”を検出し、
該論理演算子で結び付けられる各条件を抽出する。例えば、図４Ｎに例示の判定式テーブルＴｂ４のＩＤ＝１のレコードの判定式“（x>0） and not（y==1） and not（z<0）”では、充足可能性判定部１０４は、論理演算子“and”で結合された条件“（x>0）”、“not（y==1）”、“not（z<0）”を抽出する。
【０１７９】
充足可能性判定部１０４は、例えば、抽出した各条件から変数値“x”、“ｙ”、“z”を特定し、“>”、“<”、“==”といった大小関係を表す記号で結合された数値“0”、
“1”を特定する。そして、充足可能性判定部１０４は、例えば、各変数値に対する数値
との大小関係、及び、各条件に付加された論理演算子“not”との論理関係から、条件“
（x>0）”、“not（y==1）”、“not（z<0）”を充足する変数値の組合せを生成する。例えば、充足可能性判定部１０４は、条件“（x>0）”を充足する変数値として“x=1”を生成し、条件“not（y==1）”を充足する変数値として“y=0”を生成し、条件“not（z<0）”を充足する変数値として“z=0”を生成する。そして、充足可能性判定部１０４は、例
えば、抽出された各条件を満たす充足解として、“x=1,y=0,z=0”との変数値の組合せを
テストケース生成部１０３に引き渡す。
【０１８０】
テストケース生成部１０３、充足可能性判定部１０４では、図４Ｎに例示の、判定式テーブルＴｂ４のＩＤ＝２，３，４のレコードの判定式についても同様の処理が行われ、図４Ｎに例示のｓｅｔ１−４の変数値の組合せが生成される。テストケース生成部１０３は、例えば、取得したｓｅｔ１−４の変数値の組合せを主記憶部１２の所定の領域に一時的に記憶する。
【０１８１】
図３に例示の説明図に戻り、テストケース生成部１０３は、判定式テーブルＴｂ４に格納された各判定式に基づいて充足可能性判定部１０４で生成されたｓｅｔ１−４の変数値の組合せをテストケースＢ１として出力する。
【０１８２】
図４Ｐに、テストケース生成部１０３から出力されるテストケースＢ１の一例を例示する。図４Ｐに例示のテストケースＢ１では、充足可能性判定部１０４で生成された変数値の組合せ（ｓｅｔ１−４）が、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの和集合として出力される。図４Ｐに例示のテストケースＢ１では、テストケース１はｓｅｔ１の変数値の組合せに対応する。他のテストケース２−４についても同様に、それぞれｓｅｔ２−４の変数値の組合せに対応する。
【０１８３】
〔処理フロー〕
（全体処理）
以下、図５Ａ−５Ｅに例示のフローチャートを参照し、本実施形態の情報処理装置１０の、ＭＣ／ＤＣのテスト網羅度を満たすテストケース生成処理を説明する。本実施形態の情報処理装置１０では、例えば、図３に例示のように、入力された、テスト対象となるプログラムの判定式を解析する。情報処理装置１０は、例えば、解析結果から、判定式に含まれる論理演算子、及び、該論理演算子によって結び付けられる判定に係る各条件を特定する。
【０１８４】
情報処理装置１０は、例えば、特定した論理演算子毎に、該論理演算子で結合される各条件に対し、基本ルールとなる論理積、論理和の真偽値の組合せを階層的（再帰的）に適用する。情報処理装置１０は、例えば、基本ルールとなる論理積、論理和の真偽値の組合せを階層的（再帰的）に適用する際に、論理関係に応じた真偽値の組合せルールを採用する。
【０１８５】
情報処理装置１０は、例えば、基本ルールとなる論理積、論理和の真偽値の組合せを階層的（再帰的）に適用し、論理関係に応じた真偽値の組合せルールを採用することで、冗長性を排除した各条件の真偽値の組合せを生成する。情報処理装置１０は、冗長性を排除した各条件の真偽値の組合せに基づいて、ＭＣ／ＤＣのテスト網羅度を満たす変数値の組合せであるテストケースを生成する。生成されたテストケースは、例えば、図３に例示のように、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの和集合として出力される。
【０１８６】
図５Ａ−Ｃは、ＭＣ／ＤＣのテスト網羅度を満たすテストケース生成処理の全体処理を示すフローチャートの例示である。図５Ａのフローチャートにおいて、ＭＣ／ＤＣのテスト網羅度を満たすテストケース生成処理の開始は、例えば、テスト対象となるプログラムの判定式の受け付けのときが例示できる。情報処理装置１０は、例えば、受け付けた判定式を解析し、判定式に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、情報処理装置１０は、例えば、特定した論理演算子と各条件の結合関係から、判定に係る階層的な論理関係を、論理演算子を中心とする２分木構造に変換する（Ｓ１）。各条件については、Ｓ１の処理により、連番による識別番号が付与される。なお、Ｓ１の２分木構造に変換する処理は、例えば、図４Ａで説明した。
【０１８７】
情報処理装置１０は、例えば、Ｓ１の処理で変換した２分木構造内の、論理演算子により結び付けられるリーフ（条件）を全て取得する（Ｓ２）。そして、情報処理装置１０は、例えば、取得したリーフを真偽値表テーブルのカラムとして設定し、テスト対象となる判定式に対応する真偽値表テーブルを生成する（Ｓ３）。真偽値表テーブルのカラムとして設定されたリーフには、判定に係る条件、及び、付与された連番による識別番号が含まれる。なお、Ｓ３の処理で生成された真偽値表テーブルは、設定されたカラムについて真偽値が格納されていない状態の真偽値表テーブルである。情報処理装置１０は、例えば、Ｓ２−Ｓ３の処理で生成した真偽値表テーブルを、真偽値表ＤＢ２０１に格納する。なお、Ｓ２−３の真偽値表テーブルの生成処理は、例えば、図４Ｂで説明した。
【０１８８】
図５Ｂに例示のフローチャートにおいて、Ｓ４−Ｓ１１の処理では、情報処理装置１０
は、Ｓ２の処理で取得した各リーフについて、ＭＣ／ＤＣのテスト網羅度を満たす真偽値の組合せを生成する。情報処理装置１０は、Ｓ４−Ｓ１１の処理で生成した、各リーフについてのＭＣ／ＤＣのテスト網羅度を満たす真偽値の組合せを、例えば、真偽値表テーブルに格納する。情報処理装置１０は、各リーフについての、ＭＣ／ＤＣのテスト網羅度を満たす真偽値の組合せが格納された真偽値表テーブルを、例えば、真偽値表ＤＢ２０１に格納する。なお、Ｓ４−Ｓ１１の真偽値表テーブルの生成処理は、例えば、図４Ｆ−４Ｈ、４Ｊ−４Ｌで説明した。
【０１８９】
情報処理装置１０は、例えば、真偽値表ＤＢ２０１を参照し、Ｓ２−Ｓ３の処理で生成された真偽値が格納されていない空の状態の真偽値表テーブルを取得する。そして、情報処理装置１０は、真偽値表テーブルのカラムとして設定された各リーフについて、識別番号が付与されているか否かを判定する（Ｓ４）。情報処理装置１０は、例えば、取得したリーフに識別番号が付与されていない場合には（Ｓ４，ｎｏ）、該リーフがルート、即ち、受け付けた判定式が単一の条件で記述されていると判定し、Ｓ１１の処理に移行する。
【０１９０】
Ｓ１１の処理では、情報処理装置１０は、例えば、該リーフがカラムとして設定された真偽値表テーブルに、真偽値“true”を格納する。情報処理装置１０は、真偽値が格納された真偽値表テーブルを、例えば、真偽値表ＤＢ２０１に格納し、Ｓ１２の処理に移行する。
【０１９１】
一方、例えば、Ｓ３の処理で取得したリーフに識別番号が付与されている場合には（Ｓ４，ｙｅｓ）、情報処置装置１０は、受け付けた判定式が論理演算子を含むと判定し、Ｓ５の処理に移行する。
【０１９２】
Ｓ５の処理では、情報処理装置１０は、例えば、Ｓ３の処理で取得したリーフについて、リーフに付与された識別番号から、判定式の２分木構造における、該識別番号に対応付けられたルートとなる論理演算子を特定する。そして、情報処理装置１０は、ルートとなる論理演算子について、適用する各種ルール（基本ルールとなる論理積“and”、論理和
“or”、組合せルール）が存在するか否かを判定する。情報処理装置１０は、例えば、適用する各種ルールが存在する場合には（Ｓ５，ｙｅｓ）、Ｓ６の処理に移行し、適用する各種ルールが存在しない場合には（Ｓ５，ｎｏ）、Ｓ１２の処理に移行する。
【０１９３】
情報処理装置１０は、例えば、ルートとなる論理演算子の種別から、該論理演算子で結合されたリーフに適用する基本ルールを選択する（Ｓ６）。情報処理装置１０は、例えば、真偽値ルールＤＢ２０２を参照し、ルートとなる論理演算子の種別に対応する論理積、論理和等の基本ルールを取得する。例えば、図４Ｆの例では、ルートとなる論理演算子は“and”のため、情報処理装置１０は、真偽値ルールＤＢ２０２を参照し、論理積の真偽
値表Ｔｂ１を取得する。
【０１９４】
情報処理装置１０は、例えば、ルートとなる論理演算子により結合される左側の子ノードを選択する（Ｓ７）。情報処理装置１０は、例えば、論理演算子に対応付けられたリーフの識別番号、子ノードとなる論理演算子の識別番号から、論理演算子と結合する左側の子ノード（図４Ｆの例では、リーフ（z<0,２））を特定し選択する。そして、情報処理装置１０は、例えば、Ｓ６で取得した論理積の真偽値表を参照し、Ｓ７の処理で選択した左側の子ノードに対する真偽値ルールの適用処理を行う（Ｓ８）。なお、Ｓ７の処理で選択した子ノードに対する真偽値ルールの適用処理については、図５Ｄ−５Ｅで説明する。
【０１９５】
次に、情報処理装置１０は、例えば、ルートとなる論理演算子により結合される右側の子ノードを選択する（Ｓ９）。情報処理装置１０は、例えば、論理演算子に対応付けられたリーフの識別番号、子ノードとなる論理演算子の識別番号から、論理演算子と結合する
右側の子ノード（図４Ｆの例では、子ノード“or”）を特定し選択する。そして、情報処理装置１０は、例えば、Ｓ６で取得した論理積の真偽値表を参照し、Ｓ９の処理で選択した右側の子ノードに対する真偽値ルールの適用処理を行う（Ｓ１０）。なお、Ｓ９の処理で選択した子ノードに対する真偽値ルールの適用処理については、図５Ｄ−５Ｅで説明する。
【０１９６】
情報処理装置１０は、Ｓ５の処理に移行し、ルートとなる論理演算子について、適用する各種ルール（基本ルールとなる論理積“and”、論理和“or”、組合せルール）が存在
するか否かの判定処理を行う。
【０１９７】
次に、図５Ｃに例示のフローチャートにおいて、Ｓ１２−Ｓ１９の処理では、情報処理装置１０は、Ｓ４−１１の処理で生成された真偽値表テーブルの各レコードに格納された各リーフの真偽値に基づいて判定式（論理式）を生成する。そして、情報処理装置１０は、生成された判定式から、ＭＣ／ＤＣのテスト網羅度を満たす変数値の組合せを生成する。情報処理装置１０は、生成した変数値の組合せを、テスト対象となる判定式の、ＭＣ／ＤＣのテスト網羅度を満たすテストケースの和集合として出力する。なお、Ｓ１２−Ｓ１９のテストケースの生成処理は、例えば、図４Ｍ、４Ｎ、４Ｐで説明した。
【０１９８】
情報処理装置１０は、例えば、真偽値表ＤＢ２０１を参照し、Ｓ４−Ｓ１１の処理で生成した真偽値表テーブルを取得する。そして、情報処理装置１０は、取得した真偽値表テーブル内に、未だ処理していないレコードが存在するか否かを判定する（Ｓ１２）。情報処理装置１０は、例えば、真偽値表ＤＢ２０１から取得した真偽値表テーブルに未処理のレコードが存在する場合には（Ｓ１２，ｙｅｓ）、Ｓ１３の処理に移行する。一方、情報処理装置１０は、例えば、真偽値表ＤＢ２０１から取得した真偽値表テーブルに未処理のレコードが存在しない場合には（Ｓ１２，ｎｏ）、Ｓ１３−Ｓ１５の処理をスキップしＳ１６の処理に移行する。
【０１９９】
情報処理装置１０は、取得した真偽値表テーブル内から処理対象となるレコードを選択する（Ｓ１３）。そして、情報処理装置１０は、例えば、真偽値表テーブルのカラムに設定された各リーフと、カラムに格納された真偽値とを組合せて、対象となるレコードの判定式（論理式）を生成する（Ｓ１４）。情報処理装置１０は、例えば、カラムに格納された真偽値が“真（true）”の場合には、カラムに設定されたリーフを判定式の条件とする。また、情報処理装置１０は、例えば、カラムに格納された真偽値が“偽（false）”の
場合には、カラムに設定されたリーフに論理演算子“not”を付与し、判定式の条件とす
る。そして、情報処理装置１０は、カラムに格納された真偽値に応じて変換されたリーフを条件として、各条件を論理演算子“and”で結合し、対象となるレコードの判定式（論
理式）を生成する。
【０２００】
情報処理装置１０は、Ｓ１４の処理で生成した判定式（論理式）を判定式テーブルに格納する（Ｓ１５）。情報処理装置１０は、Ｓ１２−Ｓ１５の処理を繰り返し、真偽値表テーブルの全てのレコードについて判定式（論理式）を生成する。真偽値表テーブルの全てのレコードについて判定式（論理式）が格納された判定式テーブルは、例えば、判定式ＤＢ２０３に格納される。
【０２０１】
Ｓ１６の処理では、情報処理装置１０は、例えば、判定式ＤＢ２０３を参照し、Ｓ１２−Ｓ１５の処理で生成された判定式テーブルを取得する。そして、情報処理装置１０は、取得した判定式テーブル内に、未だ処理していない判定式が存在するか否かを判定する（Ｓ１６）。情報処理装置１０は、例えば、判定式ＤＢ２０３から取得した判定式テーブル内に未処理の判定式が存在する場合には（Ｓ１６，ｙｅｓ）、Ｓ１７の処理に移行する。一方、情報処理装置１０は、例えば、判定式ＤＢ２０３から取得した判定式テーブル内に
未処理の判定式が存在しない場合には（Ｓ１６，ｎｏ）、Ｓ１７−Ｓ１８の処理をスキップしＳ１９の処理に移行する。
【０２０２】
情報処理装置１０は、例えば、Ｓ１６の処理で取得した判定式テーブル内から処理対象となる１つの判定式を取得する（Ｓ１７）。情報処理装置１０は、例えば、Ｓ１７の処理で取得した判定式に基づいて、判定式の論理関係を満たす変数値の組合せを充足解として取得する（Ｓ１８）。例えば、判定式の論理関係を満たす変数値の組合せは、充足可能性判定部１０４により行われる。情報処理装置１０は、Ｓ１８の処理で取得した、判定式の論理関係を満たす充足解を、例えば、主記憶部１２の所定の領域に一時的に記憶する。
【０２０３】
情報処理装置１０は、Ｓ１６−Ｓ１８の処理を繰り返し、判定式テーブルの全ての判定式（論理式）について、判定式毎の論理関係を満たす充足解を取得する。情報処理装置１０は、Ｓ１６−Ｓ１８の処理で取得した、判定式毎の論理関係を満たす充足解を、例えば、テストケースの和集合として出力する（Ｓ１９）。
【０２０４】
情報処理装置１０で実行されるＳ１−Ｓ４の処理は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップの一例である。また、情報処理装置１０のＣＰＵ１１等は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段の一例としてＳ１−Ｓ４の処理を実行する。
【０２０５】
また、情報処理装置１０で実行されるＳ５−Ｓ６の処理は、取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップの一例である。また、情報処理装置１０のＣＰＵ１１等は、取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析手段の一例としてＳ５−Ｓ６の処理を実行する。
【０２０６】
また、情報処理装置１０で実行されるＳ７−Ｓ１０の処理は、所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップの一例である。また、情報処理装置１０のＣＰＵ１１等は、所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得手段と前記解析手段とを適用する手段の一例としてＳ７−Ｓ１０の処理を実行する。
【０２０７】
次に、図５Ｄ−５Ｅに例示のフローチャートを参照し、図５Ａに例示のＳ８、Ｓ１０の処理を説明する。図５Ｄ−５Ｅに例示の処理は、図５Ａに例示のＳ８、Ｓ１０に共通する処理として行われる。
【０２０８】
情報処理装置１０は、図５Ｄ−５Ｅの処理により、特定した論理演算子について、各種ルール（論理積、論理和等の基本ルール、組合せルール）を階層的（再帰的）に適用することができる。情報処理装置１０は、各種ルールの階層的な適用により、受け付けた判定式について、ＭＣ／ＤＣのテスト網羅度を満たす、各条件の真偽値関係を生成することができる。情報処理装置１０は、生成した各条件の真偽値関係を、例えば、各条件がカラムとして設定された真偽値表テーブルに格納する。
【０２０９】
情報処理装置１０は、図５Ｄ−５Ｅの処理により、ｎ個の条件数に対してｎ＋１個を最小限とするｎ＋１通り以上のＭＣ／ＤＣのテスト網羅度を満たす、冗長性を排除した各条件の真偽値関係を生成することができる。なお、図５Ｄ−５ＥのＳ２１−Ｓ３５の処理は、例えば、図４Ｆ−４Ｈ、４Ｊ−４Ｌで説明した。
【０２１０】
図５Ｄに例示のフローチャートにおいて、情報処理装置１０は、処理対象となるノードがリーフ（条件）であることを判定する（Ｓ２１）。情報処理装置１０は、例えば、ルートとなる論理演算子に対応付けられた識別番号から、処理対象のノードがリーフであることを判定する。情報処理装置１０は、処理対象となるノードがリーフである場合には（Ｓ２１，ｙｅｓ）、Ｓ２２の処理に移行し、処理対象となるノードがリーフでない場合には（Ｓ２１，ｎｏ）、Ｓ２３の処理に移行する。
【０２１１】
Ｓ２２の処理では、情報処理装置１０は、例えば、Ｓ６の処理で取得した論理積、論理和等の基本ルールの真偽値表から、処理対象となるノードの配置位置に応じた真偽値を取得し、Ｓ３の処理で取得した真偽値表テーブルに格納する。基本ルールの真偽値表から取得した真偽値は、処理対象となるリーフがカラムとして設定された領域に格納される。
【０２１２】
例えば、ルートとなる論理演算子が“and”の場合には、Ｓ６の処理で取得した基本ル
ールとなる真偽値表は、論理積の真偽値表となる。論理積の真偽値表には、真偽値、及び、組合せルールを含む真偽値情報が格納されている。
【０２１３】
例えば、図５ＢのＳ８の処理の場合では、処理対象となる子ノードは、論理演算子“and”により結び付けられる左側のリーフである。情報処理装置１０は、例えば、Ｓ６の処
理で取得した論理積の真偽値表の「左辺」カラムに格納された真偽値情報を取得し、該真偽値情報に含まれる真偽値を取得する。情報処理装置１０は、例えば、Ｓ３の処理で取得した真偽値表テーブルに真偽値表テーブルにＩＤ＝１のレコードを新たに追加し、該レコードの、リーフと対応するカラムの領域に、論理積の真偽値表から取得した真偽値を格納する。情報処理装置１０は、当該処理を終了し、例えば、図５ＢのＳ９の処理に移行する。
【０２１４】
また、例えば、図５ＢのＳ１０の処理の場合では、処理対象となる子ノードは、論理演算子“and”により結び付けられる右側のリーフである。情報処理装置１０は、例えば、
Ｓ６の処理で取得した論理積の真偽値表の「右辺」カラムに格納された真偽値情報を取得し、該真偽値情報に含まれる真偽値を取得する。情報処理装置１０は、例えば、Ｓ３の処理で取得した真偽値表テーブルに真偽値表テーブルにＩＤ＝１のレコードを新たに追加し、該レコードの、リーフと対応するカラムの領域に、論理積の真偽値表から取得した真偽値を格納する。情報処理装置１０は、当該処理を終了し、例えば、図５ＡのＳ５の処理に移行する。
【０２１５】
Ｓ２３の処理では、情報処理装置１０は、例えば、処理対象のノードの論理演算子に対応する論理積、論理和等の基本ルールの真偽値表を、真偽値ルールＤＢ２０２から取得する。また、情報処理装置１０は、Ｓ６の処理で取得した論理積、論理和等の基本ルールとなる真偽値表から、処理対象となるノードの配置位置に応じた真偽値情報を取得する。真偽値情報には、真偽値、及び、組合せルールが含まれる。
【０２１６】
例えば、図５ＡのＳ８の処理の場合では、情報処理装置１０は、Ｓ６の処理で取得した論理積、論理和等の基本ルールとなる真偽値表の「左辺」カラムに格納された真偽値情報を取得すればよい。また、図５ＡのＳ１０の処理の場合では、情報処理装置１０は、例えば、Ｓ６の処理で取得した論理積、論理和等の基本ルールとなる真偽値表の「右辺」カラムに格納された真偽値情報を取得すればよい。
【０２１７】
情報処理装置１０は、処理対象のノードの論理演算子に対応する基本ルールの真偽値表を、例えば、主記憶部１２の所定の領域に一時的に記憶する。また、情報処理装置１０は、Ｓ６の処理で取得した真偽値表からの真偽値情報を、例えば、ルートの論理演算子に対
応付けて、主記憶部１２の所定の領域に一時的に記憶する。
【０２１８】
図５Ｅに例示のフローチャートにおいて、Ｓ２４の処理では、例えば、情報処理装置１０は、Ｓ２３で取得した真偽値情報（図５Ｅでは“組値”）に含まれる組合せルールを示す識別情報（図５Ｅでは“第二要素”）が“０”であることを判定する。なお、組合せルールを示す識別情報が“０”の場合には組合せルール１が適用され、“１”の場合には組合せルール２が適用される。
【０２１９】
情報処理装置１０は、例えば、Ｓ２３で取得した真偽値情報に含まれる組合せルールを示す識別情報が“０”である場合には（Ｓ２４，ｙｅｓ）、Ｓ２５−Ｓ３０の処理をスキップし、Ｓ３１の処理に移行する。一方、情報処理装置１０は、例えば、Ｓ２３で取得した真偽値情報に含まれる組合せルールを示す識別情報が“１”である場合には（Ｓ２４，ｎｏ）、Ｓ２５の処理に移行する。なお、Ｓ２５の処理に移行した場合には、Ｓ３１−Ｓ３５の処理はスキップされる。
【０２２０】
言い換えれば、Ｓ２５−Ｓ３０の処理では、組合せルール１に沿って処理対象のノードに応じた論理積、論理和等の基本ルールの階層的（再帰的）な処理が行われる。また、Ｓ３１−Ｓ３５の処理では、組合せルール２に沿って処理対象のノードに応じた論理積、論理和等の基本ルールの階層的（再帰的）な処理が行われる。
【０２２１】
Ｓ２５の処理では、情報処理装置１０は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報に含まれる真偽値に基づいて、処理対象のノードの論理演算子に応じて取得した真偽値表の「全体」カラムに格納された真偽値を検索する。そして、情報処理装置１０は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報含まれる真偽値と一致する値が「全体」カラムに格納された全てのレコード情報を取得する。
【０２２２】
レコード情報には、例えば、処理対象のノードの論理演算子に応じて取得した真偽値表のレコードＩＤ、左辺の真偽値情報（真偽値、組合せルール）、右辺の真偽値情報（真偽値、組合せルール）が含まれる。情報処理装置１０は、取得したレコード情報を、例えば、処理対象のノードに対応付けて主記憶部１２の所定の領域に一時的に記憶する。
【０２２３】
Ｓ２６の処理では、情報処理装置１０は、例えば、Ｓ２５の処理で取得した全てのレコード情報について未処理のルールが存在するかを判定する。情報処理装置１０は、例えば、Ｓ２５の処理で取得した全てのレコード情報について未処理のルールが存在する場合には（Ｓ２６，ｙｅｓ）、Ｓ２７の処理に移行する。一方、情報処理装置１０は、例えば、Ｓ２５の処理で取得した全てのレコード情報について未処理のルールが存在しない場合には（Ｓ２６，ｎｏ）、当該処理を終了する。
【０２２４】
Ｓ２７の処理では、情報処理装置１０は、例えば、Ｓ２５の処理で取得したレコードの内、処理対象となるノードの子ノード（左辺）を取得する。そして、情報処理装置１０は、例えば、取得した子ノード（左辺）に対して当該処理（図５Ｄ−５Ｅ，Ｓ２１−Ｓ３５）を繰り返して実行する（Ｓ２８）。同様に、情報処理装置１０は、例えば、Ｓ２５の処理で取得したレコードの内、処理対象となるノードの子ノード（右辺）を取得する（Ｓ２９）。そして、情報処理装置１０は、例えば、取得した子ノード（右辺）に対して当該処理（図５Ｄ−５Ｅ，Ｓ２１−Ｓ３５）を繰り返して実行する（Ｓ３０）。
【０２２５】
情報処理装置１０は、例えば、Ｓ２６−Ｓ３０の処理を繰り返して実行することにより、処理対象となるレコード情報に応じた、ＭＣ／ＤＣのテスト網羅度を満たす真偽値が格納された真偽値表テーブルが生成される。情報処理装置１０は、例えば、生成した真偽値表テーブルを真偽値表ＤＢ２０１に格納する。
【０２２６】
次に、図５Ｅに例示のフローチャートの、Ｓ３１−Ｓ３５の処理を説明する。Ｓ３１の処理では、例えば、情報処理装置１０は、処理対象のノードの配置位置に応じて取得した真偽値情報に含まれる真偽値に基づいて、処理対象のノードの論理演算子に応じて取得した真偽値表の「全体」カラムに格納された真偽値を検索する。そして、情報処理装置１０は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報含まれる真偽値と一致する値が「全体」カラムに格納されたレコードの中から１つのレコード情報を取得する。
【０２２７】
レコード情報には、例えば、処理対象のノードの論理演算子に応じて取得した真偽値表のレコードＩＤ、左辺の真偽値情報（真偽値、組合せルール）、右辺の真偽値情報（真偽値、組合せルール）が含まれる。情報処理装置１０は、取得したレコード情報を、例えば、処理対象のノードに対応付けて主記憶部１２の所定の領域に一時的に記憶する。
【０２２８】
Ｓ３１の処理では、情報処理装置１０は、例えば、Ｓ３０の処理で取得したレコードの処理対象となるノードの子ノード（左辺）を取得する。そして、情報処理装置１０は、例えば、取得した子ノード（左辺）に対して当該処理（図５Ｄ−５Ｅ，Ｓ２１−Ｓ３５）を繰り返して実行する（Ｓ３３）。同様に、情報処理装置１０は、例えば、Ｓ３０の処理で取得したレコードの内、処理対象となるノードの子ノード（右辺）を取得する（Ｓ３４）。そして、情報処理装置１０は、例えば、取得した子ノード（右辺）に対して当該処理（図５Ｄ−５Ｅ，Ｓ２１−Ｓ３５）を繰り返して実行する（Ｓ３５）。
【０２２９】
情報処理装置１０は、例えば、Ｓ３１−Ｓ３５の処理を繰り返して実行することにより、処理対象となるレコード情報に応じた、ＭＣ／ＤＣのテスト網羅度を満たす真偽値が格納された真偽値表テーブルが生成される。情報処理装置１０は、例えば、生成した真偽値表テーブルを真偽値表ＤＢ２０１に格納する。
【０２３０】
以上、説明したように、本実施形態の情報処理装置１０は、テスト対象となる判定式を解析し、判定式に含まれる論理演算子、及び、該論理演算子によって結び付けられた判定に係る各条件を特定することができる。特定された各条件には、例えば、２つの条件が論理演算子で結合された条件式が含まれる。本実施形態の情報処理装置１０は、特定した各条件に識別符号を付与し、該識別符号を、各条件を結び付ける論理演算子に対応付けることにより、判定式についての２分木構造を階層的に特定することができる。本実施形態の情報処理装置１０では、特定した２分木構造から、例えば、階層化された最上位の論理演算子を特定することができる。
【０２３１】
本実施形態の情報処理装置１０は、論理積、論理和等の真偽値について基本ルールとなる、３通りの真偽値の組合せを格納した真偽値表を備えることができる。本実施形態の情報処理装置１０では、基本ルールとなる真偽値表に格納された３通りの真偽値の組合せを、特定した論理演算子に適用することにより、真偽値の判定結果について余剰となる真偽値の組合せを排除できる。
【０２３２】
また、本実施形態では、各真偽値表には、真偽値の判定結果に独立に影響しない（対象となる条件の真偽値を反転しても判定結果が変わらない）場合には、判定結果が共通する条件の組合せから１つの組合せを抽出し適用すると言う組合せルールを反映できる。同様に、本実施形態では、各真偽値表には、真偽値の判定結果に独立に影響する（対象となる条件の真偽値を反転すると判定結果が変わる）場合には、判定結果が共通する条件の組合せを全て抽出し適用すると言う組合せルールを反映できる。
【０２３３】
本実施形態の情報処理装置１０では、各真偽値表に格納された、真偽値と組合せルール
に従って、論理演算子で結び付けられた各条件の真偽値関係を特定できる。また、情報処理装置１０は、例えば、論理演算子で結び付けられた各条件に条件式が含まれる場合には、条件式が含まれる条件について特定された真偽値の値と一致する判定結果を持つ真偽値関係を、各真偽値表から特定することができる。このため、本実施形態の情報処理装置１０は、階層化された最上位の論理演算子で結び付く各条件の真偽値関係を特定し、さらに、各条件に含まれる条件式についての真偽値関係を階層的（再帰的）に求めることができる。
【０２３４】
この結果、本実施形態の情報処理装置１０は、テスト対象となる判定式について、冗長性を排除した、ＭＣ／ＤＣのテスト網羅度を満たす、各条件の真偽値の組合せを生成することができる。本実施形態の情報処理装置１０は、生成された各条件の真偽値の組合せから、各条件に含まれる変数について、真偽値の値に応じた変数値の組合せをテストケースとして生成することができる。ＭＣ／ＤＣのテスト網羅度を満たす、各条件の真偽値の組合せから生成された変数値の組合せは、ＭＣ／ＤＣのテスト網羅度を満たすテストケースとなる。本実施形態の情報処理装置１０では、冗長性を排除可能な、ＭＣ／ＤＣのテスト網羅度の条件を満たすテストケースを生成する技術が提供できる。
【０２３５】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０２３６】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【０２３７】
《その他》
以上の実施形態は、さらに以下の付記と呼ぶ態様を含む。以下の各付記に含まれる構成要素は、他の付記に含まれる構成と組み合わせることができる。
（付記１）
コンピュータに、
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップと、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
を実行させるためのテストケース生成プログラム。
（付記２）
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として
、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記１に記載のテストケース生成プログラム。
（付記３）
前記解析ステップは、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響しない、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを選択するステップを含む、付記２に記載のテストケース生成プログラム。
（付記４）
前記解析ステップは、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響し、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、付記２に記載のテストケース生成プログラム。
（付記５）
前記解析ステップは、第１の階層の演算子が積演算子である場合に、積演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択するステップを含む、付記２から付記４の何れか一の付記に記載のテストケース生成プログラム。
（付記６）
前記解析ステップは、第１の階層の演算子が和演算子である場合に、和演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択するステップを含む、付記２から付記４の何れか一の付記に記載のテストケース生成プログラム。
（付記７）
コンピュータが、
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップと、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
を実行するテストケース生成方法。
（付記８）
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記７に記載のテストケース生成方法。
（付記９）
前記解析ステップは、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響しない、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを選択するステップを含む、付記８に記載の生成方法。
（付記１０）
前記解析ステップは、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響し、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、付記８に記載の生成方法。
（付記１１）
前記解析ステップは、第１の階層の演算子が積演算子である場合に、積演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択するステップを含む、付記８から付記１０の何れか一の付記に記載の生成方法。
（付記１２）
前記解析ステップは、第１の階層の演算子が和演算子である場合に、和演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択するステップを含む、付記８から付記１０の何れか一の付記に記載の生成方法。
（付記１３）
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段と、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析手段と、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得手段と前記解析手段とを適用する手段と、
を備えるテストケース生成装置。
（付記１４）
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記１３に記載のテストケース生成装置。
（付記１５）
前記解析手段は、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響しない、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか１つの組合せを選択する手段を含む、付記１４に記載のテストケース生成装置。
（付記１６）
前記解析手段は、第１の階層に含まれる第１の演算子による演算結果の真偽値に影響し、前記第１の演算子によって演算の対象となる第１の演算対象式の真偽値を共通の値にする、前記第１の階層直下の第２の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択する手段を含む、付記１４に記載のテストケース生成装置。
（付記１７）
前記解析手段は、第１の階層の演算子が積演算子である場合に、積演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択する手段を含む、付記１４から付記１６の何れか一の付記に記載のテストケース生成装置。
（付記１８）
前記解析手段は、第１の階層の演算子が和演算子である場合に、和演算子による演算の対象となる２つの第１の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第１の階層直下の第２の演算対象式中の真偽値の組合せを選択する手段を含む、付記１４から付記１６の何れか一の付記に記載のテストケース生成装置。
【符号の説明】
【０２３８】
１０  情報処理装置
１１  ＣＰＵ
１２  主記憶部
１３  補助記憶部
１４  入力部
１５  出力部
１６  通信部
１０１  判定式解析部
１０１ａ  ２分木変換部
１０１ｂ  条件収集部
１０２  真偽値ルール適用部
１０３  テストケース生成部
１０３ａ  判定式生成部
１０４  充足可能性判定部
２０１  真偽値表ＤＢ
２０２  真偽値ルールＤＢ
２０３  判定式ＤＢ
Ｔｂ１  論理積真偽値表
Ｔｂ２  論理和真偽値表
Ｔｂ３  真偽値表テーブル
Ｔｂ４  判定式テーブル
【図１Ａ】
0006459267.tif 000002
【図１Ｂ】
0006459267.tif 000003
【図１Ｃ】
0006459267.tif 000004
【図２】
0006459267.tif 000005
【図３】
0006459267.tif 000006
【図４Ａ】
0006459267.tif 000007
【図４Ｂ】
0006459267.tif 000008
【図４Ｃ】
0006459267.tif 000009
【図４Ｄ】
0006459267.tif 000010
【図４Ｅ】
0006459267.tif 000011
【図４Ｆ】
0006459267.tif 000012
【図４Ｇ】
0006459267.tif 000013
【図４Ｈ】
0006459267.tif 000014
【図４Ｊ】
0006459267.tif 000015
【図４Ｋ】
0006459267.tif 000016
【図４Ｌ】
0006459267.tif 000017
【図４Ｍ】
0006459267.tif 000018
【図４Ｎ】
0006459267.tif 000019
【図４Ｐ】
0006459267.tif 000020
【図５Ａ】
0006459267.tif 000021
【図５Ｂ】
0006459267.tif 000022
【図５Ｃ】
0006459267.tif 000023
【図５Ｄ】
0006459267.tif 000024
【図５Ｅ】
0006459267.tif 000025