JP6511793B2 - テストケース生成プログラム、テストケース生成方法及びテストケース生成装置 - Google Patents

テストケース生成プログラム、テストケース生成方法及びテストケース生成装置 Download PDF

Info

Publication number
JP6511793B2
JP6511793B2 JP2014255605A JP2014255605A JP6511793B2 JP 6511793 B2 JP6511793 B2 JP 6511793B2 JP 2014255605 A JP2014255605 A JP 2014255605A JP 2014255605 A JP2014255605 A JP 2014255605A JP 6511793 B2 JP6511793 B2 JP 6511793B2
Authority
JP
Japan
Prior art keywords
true
conditional expression
false
operator
false value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2014255605A
Other languages
English (en)
Other versions
JP2016115287A (ja
Inventor
一樹 宗像
一樹 宗像
忠弘 上原
忠弘 上原
晋 徳本
晋 徳本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014255605A priority Critical patent/JP6511793B2/ja
Publication of JP2016115287A publication Critical patent/JP2016115287A/ja
Application granted granted Critical
Publication of JP6511793B2 publication Critical patent/JP6511793B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、テストケース生成プログラム、テストケース生成方法及びテストケース生成装置に関する。
ソフトウェアのテストの品質基準を定義する指標の一つとして、MC/DC(Modified
Condition/Decision Coverage)によるテスト網羅度が知られている。MC/DCは、テスト対象となるソフトウェアのプログラムコード(内部ロジック)に対して実行されたテストの網羅度を示すコードカバレッジの一種であり、航空機ソフトウェアのテスト時に使用されるカバレッジとして米国の航空機産業団体によって開発された。なお、他のコードカバレッジとして、例えば、テスト対象となるソフトウェアのプログラムコード内の全ての条件判定、判定結果としての分岐を全て確認可能なC/DC(Condition/Decision Coverage)が例示できる。また、テスト対象となるソフトウェアのプログラムコードの判定
に含まれる条件値の全組合せを2のn乗個(nは条件数)のテストケースで確認可能なMCC(Multiple Condition Coverage)等が例示できる。
MC/DCは、例えば、C/DCにおいて検出不能な、判定式内の“and”と“or”の
誤記を検出可能とし、n個の条件数に対してn+1個以上のテストケースでプログラムコードの判定に含まれる条件値の全組合せを確認可能なコードカバレッジである。なお、本明細書においては、“真”、“偽”を得る式を条件と呼び、プログラムの判定文の判定対象の式を判定、或いは、判定式と呼ぶことにする。判定式は、“and”、“or”等の論理
演算子によって複数の条件を組合せることができる。MC/DCによるテスト網羅度は、以下の網羅規則を満たす。
・網羅規則1:プログラムの全入り口/出口は少なくとも一回はテストすること。
・網羅規則2:プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。
・網羅規則3:プログラムの全判定は可能な値を少なくとも一回はテストすること。
・網羅規則4:プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。
なお、本明細書で説明する技術に関連する技術が記載されている先行技術文献としては、以下の特許文献が存在している。
特開2011−198034号公報 特開2013−143067号公報 特開2009−181292号公報
網羅規則1−4のテスト網羅度を満たす、MC/DCのテストケースは、次の(1)−(4)の手順に沿って求めることができる。
(1)テスト対象のプログラム中の各判定式において、各条件の真偽値の全組合せを生成する。
(2)各真偽値の組合せに対応する判定式の真偽値を求める。
(3)各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
(4)各条件の組の(最小となるような)和集合がMC/DCのテスト網羅度の網羅規則を満たすテストケースとなる。
しかしながら、(1)−(4)の手順に沿ってテストケースを生成する場合、(1)の各条件の真偽値の全組合せを生成する際に、2のn乗個の組合せ(nは条件数)が生ずる。このため、条件数nが増加すると真偽値の組合せについて組合せ爆発を起こす虞が生ずることとなる。
また、(3)の手順では、各条件の真偽値の組合せによっては、真偽値を反映させた条件の間に矛盾が生じる虞がある。矛盾が含まれる場合、真偽値を反映した各条件の組合せでは、MC/DCのテスト網羅度を充足するテストケースを求めることが困難となる。
1つの側面では、本発明は、充足可能性を向上させた、冗長性を排除可能なMC/DCテスト網羅度の網羅規則を満たすテストケースを生成する技術を提供する。
上記技術は、次のテストケース生成プログラムの構成によって例示できる。すなわち、テストケース生成プログラムは、コンピュータに、演算子による演算結果の真偽値と演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たす演算対象式を特定し、所定関係にある演算対象式が複数特定される場合に、特定される複数の演算対象式を保持して、演算対象式の真偽値を求める解析ステップと、所定関係にある複数の演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する選択ステップと、を実行させる。
上記のテストケース生成プログラムによれば、充足可能性を向上させた、冗長性を排除可能な、MC/DCのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
比較例の、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図である。 比較例の、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図である。 論理積、論理和についての真偽値関係を説明する説明図である。 論理積、論理和についてのMC/DCのテスト網羅度を満たす3通りの真偽値関係を説明する説明図である。 組合せルールの適用を説明する説明図である。 矛盾が生じる場合の、各条件式についての真偽値の組合せを説明する説明図である。 実施例2の下位の処理プロセスからの各条件の真偽値の組合せの抽出処理を説明する説明図である。 本実施形態の情報処理装置のハードウェア構成例を示す図である。 本実施形態の情報処理装置の処理ブロック構成を説明する図である。 二分木変換処理を説明する説明図である。 木構造についての条件式マップ、条件式マップ集合の生成処理を説明する説明図である。 ノードの処理プロセスについての真偽値を反映した条件式マップ集合の生成処理を説明する説明図である。 第2の真偽値ルール適用処理に係る、木構造についての条件式マップ、条件式マップ集合の生成処理を説明する説明図である。 ノードの処理プロセスについての真偽値を反映した条件式マップ集合の生成処理を説明する説明図である。 第3の真偽値ルール適用処理に係る、木構造についての条件式マップ、条件式マップ集合の生成処理を説明する説明図である。 第4の真偽値ルール適用処理に係る、木構造についての条件式マップ、条件式マップ集合の生成処理を説明する説明図である。 ノードの処理プロセスについての真偽値を反映した条件式マップ集合の生成処理を説明する説明図である。 テストケース条件式テーブル例を示す図である。 選択分析処理を説明する説明図である。 更新前後のテストケース条件式テーブル例を示す図である。 テストケース生成処理を説明する説明図である。 テストケース生成処理の全体処理を例示するフローチャートである。 テストケース生成処理の全体処理を例示するフローチャートである。 図9Aに例示のS2の真偽値ルール適用処理を例示するフローチャートである。 図9Cに例示のS23のAND演算子処理を例示するフローチャートである。 図9Cに例示のS23のAND演算子処理を例示するフローチャートである。 図9Cに例示のS24のOR演算子処理を例示するフローチャートである。 図9Cに例示のS24のOR演算子処理を例示するフローチャートである。 図9Bに例示のS7のテストケース選択処理を例示するフローチャートである。
以下、図面を参照して、一実施形態に係るテストケース生成プログラムが実行される情報処理装置について説明する。以下の実施形態の構成は例示であり、情報処理装置は実施形態の構成には限定されない。
以下、図1から図9の図面に基づいて、テストケース生成プログラムが実行される情報処理装置を説明する。
<比較例>
図1A、1Bに、比較例としての、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図を例示する。図1Aは、複数の処理プロセスが記述されたテスト対象となるプログラムの例である。
図1AのブロックP1に示すプログラム例では、第1ステップには、“if (x>2) and (y==5) then return”との、変数x,yのそれぞれについての条件成立の可否を“and”と
の論理演算子で結合した論理積による処理が記述されている。第2ステップには、“if (x==3) or (y>2) then z=2 * Z”との、変数x,yのそれぞれに対する条件成立の可否を
“or”との論理演算子で結合して変数zを導出する論理和による処理が記述されている。
MC/DCのテスト網羅度を満たすテストケースは、例えば、図1Aの各ステップのプログラムに対し、以下の網羅規則1−4を満たすよう生成される。
・網羅規則1:プログラムの全入り口/出口は少なくとも一回はテストすること。
・網羅規則2:プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。
・網羅規則3:プログラムの全判定は可能な値を少なくとも一回はテストすること。
・網羅規則4:プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。(他方の条件の値を固定し、一方の条件の値を変更することで、判定の真偽値の出力値を変更すること)
図1AのブロックP1のプログラムでは、ブロックP2に示すように、網羅規則1の“プログラムの入り口”とは、例えば、第1ステップを指し、網羅規則1の“プログラムの出口”とは、第1ステップ、第2ステップを指す。また、網羅規則2−4の“判定(判定式とも称す)”とは、例えば、第1ステップの“(x>2) and (y==5)”、第2ステップの“(x==3) or (y>2)”を指し、“条件”とは、第1ステップの“(x>2)”,“(y==5)”、第2ステップの“(x==3)”,“(y>2)”を指す。
なお、図1Aに例示のプログラムに対し、MC/DCのテスト網羅度を満たすテストケースとは、例えば、第1、2ステップの処理プロセスを判定する、“(x=3,y=3)”、“
(x=0,y=3)”といった変数x,yについての数値の組合せが例示できる。なお、以下の
説明では、図1AのブロックP1に例示の第2ステップのプログラムを対象例として、MC/DCのテスト網羅度を満たすテストケースを説明する。
第2ステップの判定式は、ブロックP4に示すように、変数xについての条件“(x==3)”と変数yについての条件“(y>2)”の条件成立の可否を論理和演算子“or”で結合した
、“(x==3) or (y>2)”である。このため、各条件に含まれる変数x,yについての変数
値の組合せ(x,y)は、網羅規則1を満たすテストケースとなる。
例えば、変数xについての条件“(x==3)”を成立させる変数値は“3”であり、変数値“3”を除く他の変数値は、条件“(x==3)”を不成立させる変数値となる。また、変数yについての条件“(y>2)”を成立させる変数値は“2”を超える範囲の変数値であり、変
数値“2”以下の範囲の変数値は、条件“(y>2)”を不成立させる変数値となる。
従って、条件“(x==3)”を成立させる変数値“3”、及び、条件“(x==3)”を不成立させる変数値、例えば、“1”を用いたテストは、第2ステップの判定式に含まれる変数xについての条件“(x==3)”の可能な値を少なくとも一回はテストすることとなる。このため、変数xに対する変数値“1”,“3”は、MC/DCの網羅規則2を満たすテストケースに含まれる。
変数yについても同様にして、条件“(y>2)”を成立させる変数値、例えば、“3”、
及び、条件“(y>2)”を不成立させる変数値、例えば、“1” を用いたテストは、第2ステップの判定式に含まれる変数yについての条件“(y>2)”の可能な値を少なくとも一回
はテストすることとなる。このため、変数yに対する変数値“1”,“3”は、MC/DCの網羅規則2を満たすテストケースに含まれる。
第2ステップの判定式の条件“(x==3)”,“(y>2)”に対し、変数x,yについての変
数値の組合せであるテストケース(x=1,y=1)、(x=1,y=3)、(x=3,y=1)は、MC/D
Cの網羅規則2を満たすこととなる。
なお、変数x、yについての(x=3,y=3)との組合せも、MC/DCの網羅規則2を満
たすテストケースとして存在し得る。しかしながら、第2ステップの判定式に含まれる“(x==3)”との条件についての条件成立テストは、(x=3,y=1)により少なくとも1回は実
行され、同様に、“(y>2)”との条件について条件成立テストは、(x=1,y=3)により少なくとも1回は実行される。MC/DCの網羅規則2では、条件“(x==3)”、“(y>2)”に
ついて、可能な変数値を少なくとも1回、テストすればよいので、(x=3,y=3)との組合
せは、他のテストケースによる条件成立の可否と重複するため、余剰なテストケースとなる。
MC/DCの網羅規則2を満たすテストケース(x=1,y=1)、(x=1,y=3)、(x=3,y=1
)において、(x=1,y=1)との組合せは、第2ステップの判定式“(x==3) or (y>2)”を不成立させるテストケースである。また、(x=1,y=3)との組合せは、第2ステップの判定
式“(X==3) or (y>2)”を成立させるテストケースである。このため、例えば、MC/D
Cの網羅規則2を満たすテストケースにおいて、変数x,yについての(x=1,y=1)、(x=1,y=3)の組合せは、第2ステップのプログラムの判定式の可能な値を少なくとも1回はテストするテストケースとなる。変数x,yについての(x=1,y=1)、(x=1,y=3)の組合せによるテストケースは、MC/DCの網羅規則3を満たすこととなる。
ここで、第2ステップのプログラムの判定式に含まれる条件“(x==3)”について、該条件を成立させる変数xの値“3”は“真(true)”の変数値と言え、該条件を不成立させる値“1”は“偽(false)”の変数値と言うことができる。同様にして、条件“(y>2)”について、該条件を成立させる変数yの値“3”は“真(true)”の変数値と言え、該条件を不成立させる値“1”は“偽(false)”の変数値と言うことができる。
例えば、変数x,yについての(x=1,y=1)の組合せは、条件“(x==3)”について“偽
(false)”、条件“(y>2)”について“偽(false)”とし、プログラムの判定式“(x==3) or (y>2)”を不成立(偽(false))させるテストケースである。また、例えば、変数
x,yについての(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)との関係は、第2ステップのプログラムの判定式“(x==3)
or (y>2)”の真偽値の出力に独立に影響することとなる。
また、例えば、変数x,yについての(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)との関係は、第2ステップのプログラムの判定式“(x==3) or (y>2)”の真偽値の出力に独立に影響することとなる。
第2ステップのプログラムに対しては、(x=1,y=1)と(x=3,y=1)とのテストケースの組合せ、及び、(x=1,y=1)と(x=1,y=3)のテストケースの組合せが、MC/DCの網羅規則4を満たすテストケースの和集合となる。従って、判定式に含まれる条件数が2個の第2ステップのプログラムでは、MC/DCの網羅規則1−4を満たす、3個のテストケース“(x=1,y=1)、(x=1,y=3)、(x=3,y=1)”が生成されることとなる。テスト対象
となるプログラムの判定式に係る条件数がn個の場合、n+1個を最小としてn+1通り以上の、MC/DCのテスト網羅度を満たすテストケースが生成される。
なお、MC/DCのテスト網羅度を満たすテストケースは、テスト対象となるプログラムの判定式に係る各条件の真偽値がテストできるものであり、且つ、プログラムの判定式の真偽値をテストできるものであればよい。例えば、第2ステップのプログラムに対しては、変数x、yの変数値の組合せとして、“(x=2,y=2)、(x=2,y=4)、(x=3,y=2)”
といったテストケースであってもよい。
次に、網羅規則1−4のテスト網羅度を満たすMC/DCのテストケースの求め方(手順)について、図1Bを参照し説明する。図1Bは、網羅規則1−4のテスト網羅度を満たすMC/DCのテストケースの求め方(手順)を説明する説明図である。但し、説明例としてのプログラムは、“if (A or B) and C then z=2 * Z”とする。以下の説明では、“(A or B) and C”が判定式となり、“A”、“B”、“C”が判定に係る条件となる。判
定に係る各条件には、それぞれに真偽値が存在し、条件毎の真偽値の組合せにより、プログラムとしての判定式の真偽値が決定される。
“if (A or B) and C then z=2 * Z”をテスト対象とした、MC/DCのテスト網羅度を満たすテストケースは、以下の(1)−(4)の手順に沿って求めることができる。
(1)各条件の真偽値の全組合せを生成する。
図1Bの、破線で囲まれた領域Z1に例示のように、判定に係る条件“A”、“B”、“C”について、それぞれの真偽値の全組合せを生成する。図1Bの例では、判定に係る条
件数が3個であるため、2の3乗個である8通りの真偽値の組合せ(識別番号1−8)が生成される。
(2)各真偽値の組合せに対応する判定式の真偽値を求める。
図1Bの、破線で囲まれた領域Z2に例示するように、判定に係る条件“A”、“B”、“C”について生成された真偽値の全組合せに対する、判定式の真偽値を生成する。ここ
で、プログラムの判定式は“(A or B) and C”である。
論理積(and)で結ばれた判定式の左項(A or B)は、条件“A”、“B”の論理和である
ため、少なくとも一方の条件が“真(true)”であれば、左項(A or B)は“真”となる。条件“A”、“B”の真偽値の組合せとして(A,B)=(真、真)、(真、偽)、(偽、真
)の3通りが、論理和(or)で結ばれた左項(A or B)を“真”とする。
そして、論理積で結ばれた判定式(A or B) and C”では、左項“(A or B)”と右項“C
”とが“真”である場合に、判定式としての真偽値が“真”となる。従って、条件“A”
、“B”、“C”の真偽値の組合せとして(A,B,C)=(真、真、真)、(真、偽、真)、
(偽、真、真)の3通りが、判定式“(A or B) and C”を“真”とする(他の組合せでは、判定式は“偽”となる)。図1Bの例では、識別番号1,3,5の各条件の組合せが、判定式“(A or B) and C”を“真”とする。
(3)各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
図1Bの、破線で囲まれた領域Z3に例示するように、判定に係る条件“A”、“B”、“C”のそれぞれについて、MC/DCの網羅規則4を満たすための真偽値の組合せを求
める。例えば、条件“A”の場合では、条件“B”、“C”の真偽値を固定し、条件“A”の真偽値を“真(true)”、“偽(false)”と変更した場合に、領域Z2の真偽値が変更
になる組合せを求める。同様にして、条件“B”の場合では、条件“A”、“C”の真偽値
を固定し、条件“B”の真偽値を“真(true)”、“偽(false)”と変更した場合に、領域Z2の真偽値が変更になる組合せを求める。条件“C”の場合では、条件“A”、“B”
の真偽値を固定し、条件“C”の真偽値を“真(true)”、“偽(false)”と変更した場合に、領域Z2の真偽値が変更になる組合せを求める。
図1Bにおいて、条件“A”については、識別番号1、5の条件“B”、“C”を(真(true)、真(true))に固定した場合、識別番号2、6の(真(true)、偽(false))に固定した場合では、条件“A”の真偽値の変更に関らず、判定式の真偽値は変わらない。
また、条件“B”、“C”を(偽(false)、偽(false))に固定した識別番号4、8の場合でも条件“A”の真偽値の変更に関らず、判定式の真偽値は変わらない。
一方、条件“A”について、識別番号3、7の条件“B”、“C”を(偽(false)、真(true))に固定した場合では、条件“A”の真偽値の変更に伴い、判定式の真偽値が変更
されることとなる。従って、条件“A”、“B”、“C”について、識別番号3の(真(true)、偽(false)、真(true))の真偽値の組合せ、識別番号7の(偽(false)、偽(false)、真(true))の真偽値の組合せは、MC/DCの網羅規則4を満たす真偽関係となる。
条件“B”についても同様にして、識別番号1、3の条件“A”、“C”を(真(true)
、真(true))に固定した場合、識別番号2、6の(真(true)、偽(false))に固定
した場合では、条件“B”の真偽値の変更に関らず、判定式の真偽値は変わらない。また
、条件“A”、“C”を(偽(false)、偽(false))に固定した識別番号6、8の場合でも条件“B”の真偽値の変更に関らず、判定式の真偽値は変わらない。
一方、条件“B”について、識別番号5、7の条件“A”、“C”を(偽(false)、真(true))に固定した場合では、条件“B”の真偽値の変更に伴い、判定式の真偽値が変更
されることとなる。従って、条件“A”、“B”、“C”について、識別番号5の(偽(false)、真(true)、真(true))の真偽値の組合せ、識別番号7の(偽(false)、偽(false)、真(true))の真偽値の組合せは、MC/DCの網羅規則4を満たす真偽関係となる。
条件“C”については、識別番号7、8の条件“A”、“B”を(偽(false)、偽(false))に固定した場合に、条件“C”の真偽値の変更に関らず、判定式の真偽値は変わらない。他の、識別番号1、2の条件“A”、“B”を(真(true)、真(true))に固定した場合、識別番号3、4の(真(true)、偽(false))に固定した場合では、条件“C”の真偽値の変更に応じて判定式の真偽値が変更されることとなる。また、識別番号5、6の(偽(false)、真(true))に固定した場合でも、条件“C”の真偽値の変更に応じて判定式の真偽値が変更される。
従って、条件“C”について、識別番号1と2、3と4、5と6の真偽値の組合せは、
MC/DCの網羅規則4を満たす真偽関係となる。
(4)各条件の組の(最小となるような)和集合がMC/DCのテスト網羅度の網羅規則1−4を満たすテストケースとなる。
図1Bの説明例では、条件“A”に対する真偽値の組合せは、識別番号3と7の1組で
あり、条件“B”に対する真偽値の組合せは、識別番号5と7の1組である。また、条件
“C”に対する真偽値の組合せは、識別番号1と2,3と4,5と6の3組である。それ
ぞれの条件に対する真偽値の組合せの中から、少なくとも条件毎に1組の真偽値の組合せをテストケースとして持つことにより、対象となるプログラムについての最小となるテストケースの和集合を求めることができる。
ここで、条件“C”に対する3組の真偽値の組合せの内、識別番号1と2の1組を選択
した場合、条件“A”、“B”と合わせて、テストケースとなる真偽値の組合せの総数は識
別番号1、2、3、5、7の5通りとなる。また、識別番号3と4の1組を選択した場合では、識別番号3が条件“A”のテストケースとなる組合せと重複するため、テストケー
スとなる真偽値の組合せの総数は識別番号3、4、5、7の4通りとなる。同様に、識別番号5と6の1組を選択した場合では、識別番号5が条件“B”のテストケースとなる組
合せと重複するため、テストケースとなる真偽値の組合せの総数は識別番号3、5、6、7の4通りとなる。
従って、条件“A”、“B”、“C”に対する真偽値の組合せについて、テストケースと
なる真偽値の組合せの総数が最小となる和集合は、識別番号3、4、5、7によるテストケース、或いは、識別番号3、5、6、7によるテストケースとなる。
このように、テスト対象となるプログラムの判定式、判定式に含まれる条件について、上述の手順(1)−(4)を適用し、条件数nに対してn+1個を最小値とするn+1通り以上のMC/DCのテスト網羅度を満たすテストケースを生成することができる。しかし、手順(1)において、判定式に含まれる各条件の真偽値の全組合せを生成するため、条件数nに対し2のn乗個の真偽値の組合せが発生することとなる。テスト対象のプログラムに含まれる条件数が相対的に多い場合には、条件数nの増加に比例して真偽値の組合せが増加するため、所謂、組合せ爆発を起こす虞がある。組合せ爆発が生じた場合には、MC/DCのテスト網羅度を満たすテストケースの生成処理が収束しない虞がある。
<実施例1>
図1Bで説明したように、テスト対象となるプログラムの判定式に含まれる各条件についての真偽値の組合せの内(図1Bでは8通り)、MC/DCのテスト網羅度の網羅規則を満たす最小数の組合せ以外の、真偽値の組合せ(図1Bでは4通り)は余剰となる。
MC/DCのテスト網羅度を満たすテストケースは、テスト対象となる判定式に対して、網羅規則2の「プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。また、同様に、MC/DCのテスト網羅度を満たすテストケースは、テスト対象となる判定式に対して、網羅規則3の「プログラムの全判定は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。
ここで、テスト対象となるプログラムの判定式に対する真偽値は、各条件を結合する“and”,“or”といった論理演算子に基づいて決定される。実施例1では、各条件を結合
する論理演算子の論理関係に基づいて、上述の網羅規則2、3を満たすよう判定式としての真偽値と条件毎の真偽関係の組合せとを求めることにより、各条件についての余剰な真偽値の組合せを排除する。
(基本ルール)
図2A(1)、(2)に、テスト対象となる判定式に含まれる論理積(and)、論理和
(or)についての真偽値関係の説明図を例示する。図2A(1)は、論理積についての真偽値関係の説明図であり、図2A(2)は論理和についての真偽値関係の説明図である。なお、説明例の判定式は、“(A or B) and (C)”とする。
図2A(1)の、論理積:(A and B)の関係では、例えば、条件“A”、“B”の真偽
値の組合せとして(A,B)=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false))の4つの組合せが存在
する。そして、各条件の4通りの真偽値の組合せに対し、MC/DCのテスト網羅度の網羅規則3を満たすように、論理積の判定結果を“真(true)”、“偽(false)”とする
条件の組合せを抽出する。
先ず、論理積の判定結果を“真(true)”とする条件は、各条件の4通りの真偽値の組合せの中の、(A,B)=(真(true)、真(true))の1通りである。他の、(A,B)=(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false)の組合せは、論理積の判定結果を“偽(false)”とする条件の組合せである。MC/
DCのテスト網羅度の網羅規則3を満たすためには、論理積の判定結果を“偽(false)
”とする各条件の3通りの真偽値の組合せから、少なくとも1通り以上を抽出すればよい。
次に、論理積の判定結果を“真(true)”とする条件(A,B)の真偽値の組合せに対し
、MC/DCのテスト網羅度の網羅規則2を満たすように、論理積の判定結果を“偽(false)”とする各条件の3通りの真偽値の組合せの中から所定の組合せを抽出する。
ここで、条件“A”、“B”のそれぞれについて、論理積の判定結果が“真(true)”となる真偽値の組合せは既に確定している。従って、MC/DCのテスト網羅度の網羅規則2を満たすためには、条件“A”を“偽(false)”としてテスト可能な条件“A”、“B”の組合せがあればよい。また、同様にして、条件“B”を“偽(false)”としてテスト可能な条件“A”、“B”の組合せがあればよい。
この結果、論理積で結ばれた条件の真偽関係では、条件“A”を“偽(false)”とする(A,B)=(偽(false)、真(true))の組合せ、条件“B”を“偽(false)”とする(A,B)=(真(true)、偽(false))の組合せが、網羅規則2の関係を満たすこととなる。なお、各条件の4通りの真偽値の組合せの中で、(A,B)=(偽(false)、偽(false
))との組合せは、論理積の判定結果を“偽(false)”とする他の2通りの組合せで真
偽値のテストが網羅されるため、余剰な組合せとなる。
論理積:(A and B)で結ばれた各条件の真偽関係では、図2A(1)に例示する、条
件“A”、“B”についての3通りの真偽値の組合せが、MC/DCのテスト網羅度の網羅規則2,3を満たす組合せとして提示できる。論理積:(A and B)では、条件“A”、“B”の真偽値の組合せとして(A,B)=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))の3通りの組合せがMC/DCのテスト網羅度を満たす組合せとして抽出される。
図2A(2)の、論理和:(A or B)についても、同様の関係が抽出できる。すなわち、論理和についても、条件“A”、“B”の真偽値の組合せとして(A,B)=(真(true)
、真(true))、(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false))の4通りの組合せが存在する。そして、各条件の4通りの真偽値の組合せに対し、MC/DCのテスト網羅度の網羅規則3を満たすように、論理和の判定結果を“真(true)”、“偽(false)”とする条件の組合せを抽出する。
先ず、論理和の判定結果を“偽(false)”とする条件は、各条件の4通りの真偽値の
組合せの中の、(A,B)=(偽(false)、偽(false))の1通りである。他の、(A,B)=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))の組合せは、論理和の判定結果を“真(true)”とする条件の組合せである。MC/DCのテスト網羅度の網羅規則3を満たすためには、論理和の判定結果を“真(true)”とする各条件の3通りの真偽値の組合せから、少なくとも1通り以上を抽出すればよい。
次に、論理和の判定結果を“偽(false)”とする条件(A,B)の真偽値の組合せに対し、MC/DCのテスト網羅度の網羅規則2を満たすように、論理和の判定結果を“真(tr
ue)”とする各条件の3通りの真偽値の組合せの中から所定の組合せを抽出する。
ここで、条件“A”、“B”のそれぞれについて、論理和の判定結果が“偽(false)”
となる真偽値の組合せは既に確定している。従って、MC/DCのテスト網羅度の網羅規則2を満たすためには、条件“A”を“真(true)”としてテスト可能な条件“A”、“B
”の組合せがあればよい。また、同様にして、条件“B”を“真(true)”としてテスト
可能な条件“A”、“B”の組合せがあればよい。
この結果、論理和で結ばれた条件の真偽関係では、条件“A”を“真(true)”とする
(A,B)=(真(true)、偽(false))の組合せ、条件“B”を“真(true)”とする(A,B)=(偽(false)、真(true))の組合せが、網羅規則2の関係を満たすこととなる
。なお、各条件の4通りの真偽値の組合せの中で、(A,B)=(真(true)、真(true)
)との組合せは、論理和の判定結果を“真(true)”とする他の2通りの組合せで真偽値のテストが網羅されるため、余剰な組合せとなる。
論理和:(A or B)で結ばれた各条件の真偽関係では、図2A(2)に例示する、条件“A”、“B”についての3通りの真偽値の組合せが、MC/DCのテスト網羅度の網羅規則2,3を満たす組合せとして提示できる。論理和:(A or B)の関係では、条件“A”
、“B”の真偽値の組合せとして(A,B)=(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false))の3通りの組合せがMC/DCのテスト網羅度を満たす組合せとして抽出される。
このように、判定式の各条件を結合する論理演算子の論理種別に応じて、条件毎の真偽値を演算順に階層的(再帰的)に適用すれば、条件数nに対し2のn乗個の真偽値の組合せを生じることなくMC/DCのテスト網羅度を満たす真偽値の組合せが生成できる。
例えば、判定式“(A or B)and (C)”では、条件“A”、“B”についての論理和が下
位の処理プロセスであり、条件“A”、“B”の論理和(A or B)と条件(C)との論理積
が上位の処理プロセスとなる。
例えば、論理演算子“and”で結ばれる条件(A or B)と条件(C)に対して、上述した論理積の真偽値関係により、((A or B),(C))=(真(true),真(true))、(真(true),偽(false))、(偽(false),真(true))の3通りの組合せを生成する。そして、生成された真偽値の各組合せに対し、例えば、論理演算子“or”で結ばれる条件(A or B)についての論理和の真偽関係を適用するとすればよい。つまり、条件(A or B)について、論理和を“真(true)”とする条件“A”、“B”の真偽値の組合せ、論理和を“偽(false)”とする条件“A”、“B”の真偽値の組合せを、論理演算子“and”で得られた3通りの真偽値の組合せに適用する。
例えば、論理和の条件(A or B)を“真(true)”とする条件“A”、“B”の真偽値の組合せは、図2A(2)より、(A,B)=(真(true)、偽(false))、(偽(false)
、真(true))の2通りとなる。また、論理和の条件(A or B)を“偽(false)”とす
る条件“A”、“B”の真偽値の組合せは、図2A(2)より、(A,B)=(偽(false)、偽(false))の1通りとなる。
従って、論理和の条件(A or B)を“真(true)”とする条件“A”、“B”の真偽値の組合せを適用することで、(A,B,C)=(真(true)、偽(false)、真(true))、(偽(false)、真(true)、真(true))の2通りの真偽値の組合せが生成される。同様に
して、(A,B,C)=(真(true)、偽(false)、偽(false))、(偽(false)、真(true)、偽(false))の2通りの真偽値の組合せが生成される。
また、論理和の条件(A or B)を“偽(false)”とする条件“A”、“B”の真偽値の
組合せを適用することで、(A,B,C)=(偽(false)、偽(false)、真(true))の1
通りの真偽値の組合せが生成される。判定式の各条件を結合する論理演算子の論理種別に応じて、図2A(1)、(2)に例示の論理積、論理和による基本ルールとしての真偽値を、各条件に対して階層的に適用することにより、冗長性を排除した5通りの真偽値の組合せを得ることができる。
なお、論理積、論理和による基本ルールを適用した場合、判定式“(A or B) and (C)”の3個の条件数(A,B,C)に対して5通りの真偽値の組合せを得ることができる。しか
し、条件数が3個の場合では、最小限となる各条件の真偽値の組合せは4通りであるため、未だ1個の余剰な真偽値の組合せ存在することとなる。次に、論理積、論理和による基本ルールを適用した場合に残された余剰な真偽値の組合せを排除可能な、MC/DCのテスト網羅度の網羅規則4を考慮した、各条件に対する真偽値の組合せルールを説明する。
(組合せルール)
図2B(1)、(2)に、論理積(and)、論理和(or)についてのMC/DCのテス
ト網羅度を満たす3通りの真偽値関係の説明図を例示する。図2B(1)は、論理積についての真偽値関係の説明図であり、図2B(2)は論理和についての真偽値関係の説明図である。
図2B(1)、(2)の右上がり斜線でハッチングされた領域に示されるように、論理積(and)、論理和(or)のそれぞれに、判定結果に独立に影響を及ぼす各条件の真偽値
の組合せが存在する。ここで、判定結果に独立に影響を及ぼす各条件の真偽値の組合せとは、各条件についての真偽値を反転させた場合に、判定結果としての真偽値が変更される各条件の真偽値の組合せをいう。
例えば、論理積の判定式“A and B”を想定すると、図2B(1)のID=1のレコー
ドに示すように、条件“A”が“真(true)”、条件“B”が“偽(false)”の真偽値の
組み合わせでは、判定結果(A and B)は“偽(false)”となる。ID=1のレコードの真偽値の組合せにおいて、例えば、条件“A”を“真(true)”→“偽(false)”に変更した場合、判定結果は“偽(false)”となり、変更の前後では真偽値は変化しない。
一方、ID=1のレコードの真偽値の組合せにおいて、例えば、条件“B”を“偽(false)”→“真(true)”に変更した場合には、判定結果は“真(true)”となり、条件“B”の真偽値の変更の前後で真偽値が変化することとなる。つまり、図2B(1)のID
=1のレコードの真偽値の組合せでは、条件“B”の真偽値は、判定結果の真偽値に独立
に影響を及ぼすということができる。
図2B(1)のID=2のレコードの、条件“A”が“真(true)”,条件“B”が“偽(false)”の組み合わせにおける、条件“A”の真偽値についても、判定結果の真偽値に独立に影響を及ぼすということができる。ID=2のレコードの条件“A”、“B”の真偽値の組合せでは、条件“A”を“偽(false)”→“真(true)”に変更した場合には、判定結果(A and B)の真偽値が“偽(false)”→“真(true)”に変更されるからである。
図2B(1)のID=3のレコードの、条件“A”が“真(true)”、条件“B”が“真(true)”の真偽値の組み合わせでは、条件“A”、条件“B”の真偽値がそれぞれに、判定結果の真偽値に独立に影響を及ぼすということができる。例えば、ID=3のレコードの条件“A”、“B”の真偽値の組合せでは、条件“A”を“真(true)”→“偽(false)
”に変更した場合には、判定結果(A and B)の真偽値が“真(true)”→“偽(false)”に変更されるからである。同様に、例えば、条件“B”を“真(true)”→“偽(false)”に変更した場合にも、判定結果(A and B)の真偽値が“真(true)”→“偽(false)”に変更されるからである。
図2B(2)の論理和の判定式(A or B)では、例えば、ID=1のレコードに示すように、条件“A”が“真(true)”、条件“B”が“偽(false)”の真偽値の組み合わせ
では、判定結果(A or B)は“真(true)”となる。ID=1のレコードの真偽値の組合せにおいて、例えば、条件“A”を“真(true)”→“偽(false)”に変更した場合には、判定結果は“偽(false)”となり、条件“A”の真偽値の変更の前後で真偽値が変化することとなる。ID=1のレコードの真偽値の組合せにおいて、条件“A”の真偽値は、
判定結果の真偽値に独立に影響を及ぼすということができる。
図2B(2)のID=2のレコードの、条件“A”が“偽(false)”、条件“B”が“
真(true)”の組み合わせにおける、条件“B”の真偽値についても、判定結果の真偽値
に独立に影響を及ぼすということができる。ID=2のレコードの条件“A”、“B”の真偽値の組合せでは、条件“B”を“真(true)”→“偽(false)”に変更した場合には、判定結果(A or B)の真偽値が“真(true)”→“偽(false)”に変更されるからであ
る。
図2B(2)のID=3のレコードの、条件“A”が“偽(false)”、条件“B”が“
偽(false)”の真偽値の組み合わせでは、条件“A”、条件“B”の真偽値がそれぞれに
、判定結果の真偽値に独立に影響を及ぼすということができる。例えば、ID=3のレコードの条件“A”、“B”の真偽値の組合せでは、条件“A”を“偽(false)”→“真(true)”に変更した場合には、判定結果(A or B)の真偽値が“偽(false)”→“真(true)”に変更されるからである。同様に、例えば、条件“B”を“偽(false)”→“真(true)”に変更した場合にも、判定結果(A or B)の真偽値が“偽(false)”→“真(true)”に変更されるからである。
図2B(1)、(2)に例示にように、基本ルールとしての論理積(and)、論理和(or)による真偽値の組合せには、それぞれに判定結果の真偽値に独立に影響を及ぼす組合
せが存在する。従って、例えば、基本ルールの階層的(再帰的)な各条件の真偽値の組合せに対し、以下に定義する組合せルール1、2を適用することにより、網羅規則1−4を満たす各条件の真偽値関係を得ることが可能となる。
・組合せルール1:判定結果としての真偽値に独立に影響しない(対象となる条件の真偽値を反転しても判定結果が変わらない)場合には、判定結果の真偽値が共通する条件の組合せから1つの組合せを抽出し、適用する。
・組合せルール2:判定結果としての真偽値に独立に影響する(対象となる条件の真偽値を反転すると判定結果が変わる)場合には、判定結果の真偽値が共通する条件の組合せを全て抽出し、適用する。
なお、上述の組合せルール1,2は、例えば、基本ルールとなる論理積(and)、論理
和(or)の真偽値表に、予め対応付けておくことができる。例えば、図2B(1)、(2)の例では、右上がり斜線でハッチングされた領域の真偽値に対し、組合せルール2が適用されることを対応付けておけばよい。また、図2B(1)、(2)の例において、組合せルール2が適用される領域以外の真偽値に対しては、例えば、組合せルール1が適用されることを対応付けるとしてもよい。
次に、上述の組合せルール1,2を反映させた場合の、各条件に対する真偽値の組合せの適用について説明する。図2C(1)、(2)に、上述の組合せルールを反映させた基
本ルールの階層的(再帰的)な適用についての説明図を例示する。なお、図2C(1)、(2)における、判定式は“(A or B) and C”とする。
図2C(1)に例示の真偽値表テーブルは、例えば、判定式“(A or B) and C”に対して、図2A(1)の論理積の基本ルールを適用した場合の、条件“(A or B)”と条件“C”の真偽値関係を示すものである。図2A(1)で説明したように、判定式“(A or B) and C”に対して、論理積の基本ルールを適用することにより、条件“(A or B)”
、“C”についての、MC/DCのテスト網羅度を満たす3通りの真偽値の組合せが生成
される。
図2C(1)に例示のように、条件“(A or B)”、“C”についての、((A or B),C)=(真(true),偽(false))、(偽(false),真(true))、(真(true),真
(true))の3通りの真偽値の組合せが生成される。そして、3通りの真偽値の各組合せについて、条件“(A or B)”に対し、図2A(2)に例示の論理和の真偽値の組合せを適用することで、基本ルールの階層的(再帰的)な真偽値の組合せを反映したテストケースが生成される。
つまり、条件“(A or B)”、“C”について生成された3通りの真偽値の組合せに対
し、条件(A or B)を“真(true)”とする場合では、論理和“A or B”が“真(true)”となる、図2A(2)に例示の条件“A”、“B”の組合せを適用すればよい。同様にして、条件“(A or B)”、“C”について生成された3通りの真偽値の組合せに対し、条
件(A or B)を“偽(false)”とする場合では、論理和“A or B”が“偽(false)”となる、図2A(2)に例示の条件“A”、“B”の組合せを適用すればよい。
論理積で結合される条件“(A or B)”、“C”について生成された3通りの真偽値の
組合せに対し、論理和で結合された条件“A”、“B”の真偽値の組合せを適用することで、基本ルールの階層的(再帰的)な真偽値の組合せに基づくテストケースが生成できる。
図2C(1)に例示の各条件の組合せにおいて、ID=1のレコードの、条件“(A or
B)”の真偽値である“真(true)”は、図2B(1)で説明したように、論理積の判定結果の真偽値に独立に影響しない。従って、条件“(A or B)”について、論理和の基本ルールを階層的(再帰的)適用する際には、組合せルール1を採用すればよい。つまり、図2A(2)に例示の、ID=1、或いは、ID=2のどちらか一方の、論理和“A or B”の真偽値が“真(true)”となる、条件“A”、“B”についての真偽値の組合せを適用すればよい。
次に、図2C(1)に例示の各条件の組合せにおいて、ID=2のレコードの、条件“(A or B)”の真偽値である“偽(false)”は、図2B(1)で説明したように、論理
積の判定結果の真偽値に独立に影響する。このため、条件“(A or B)”について、論理和の基本ルールを階層的(再帰的)に適用する際には、組合せルール2を採用すればよい。つまり、図2A(2)に例示のID=3の、論理和“A or B”の真偽値が“偽(false
)”となる、条件“A”、“B”についての真偽値の組合せを全て適用すればよい。
なお、図2A(2)の例では、論理和“A or B”の真偽値が“偽(false)”となる条
件“A”、“B”の真偽値の組合せはID=3に例示の1通りである。従って、図2C(1)のID=2のレコードの、条件“(A or B)”の“偽(false)”に対する、論理和の
基本ルールの階層的(再帰的)な適用では、図2A(2)のID=3に例示の1通りの条件“A”、“B”についての真偽値の組合せが採用される。
次に、図2C(1)に例示の各条件の組合せにおいて、ID=3のレコードの、条件“
(A or B)”の真偽値である“真(true)”は、図2B(1)で説明したように、論理積の判定結果の真偽値に独立に影響する。このため、ID=3のレコードの条件“(A or B)”に対し、論理和の基本ルールを階層的(再帰的)に適用する際には、組合せルール2を採用すればよい。例えば、図2A(2)に例示のID=1、2の、論理和“A or B”の真偽値が“真(true)”となる、条件“A”、“B”についての真偽値の組合せを全て適用すればよい。
図2A(2)では、論理和“A or B”の真偽値が“真(true)”となる条件“A”、“B”の真偽値の組合せは、ID=1に例示の(真(true)、偽(false))、及び、ID=
2に例示の(偽(false)、真(true))の2通りである。従って、図2C(1)のID
=3のレコードの、条件“(A or B)”の“真(true)”に対する、論理和の基本ルールの階層的(再帰的)な適用では、図2A(2)のID=1、2に例示の2通りの条件“A
”、“B”についての真偽値の組合せが採用される。
図2C(2)は、図2C(1)に例示の論理積の各レコードに対し、組合せルールを反映し、論理和“(A or B)”についての真偽値を階層的(再帰的)に適用して生成されたテストケースの真偽値表テーブル例である。図2C(2)に例示の真偽値表テーブルでは、判定式“(A or B) and C”に含まれる各条件“A”、“B”、“C”についてのカラム
を有する。
図2C(2)のID=1のレコードは、図2C(1)のID=1のレコードに対応する。図2C(2)のID=1のレコードには、条件“(A or B)”の真偽値を“真(true)”とする条件“A”、“B”の2通りの真偽値の組合せから抽出された、(A,B)=(真(true)、偽(false))が格納されている。なお、組合せルール1で説明したように、図2C(2)のID=1のレコードに格納される条件“A”、“B”の真偽値の組合せは、例えば、もう一方の真偽値の組合せである、(A,B)=(偽(false)、真(true))であってもよい。
図2C(2)のID=2のレコードは、図2C(1)のID=2のレコードに対応する。図2C(2)のID=2のレコードには、条件“(A or B)”の真偽値を“偽(false
)”とする条件“A”、“B”の1通りの真偽値の組合せである、(A,B)=(偽(false)、偽(false))が格納されている。
図2C(2)のID=3_1、3_2のレコードは、図2C(1)のID=3のレコードに対応する。図2C(2)のID=3_1のレコードには、条件“(A or B)”の真偽値
を“真(true)”とする条件“A”、“B”の2通りの真偽値の組合せの内、(A,B)=(
真(true)、偽(false))が格納されている。また、図2C(2)のID=3_2のレコードには、条件“(A or B)”の真偽値を“真(true)”とする条件“A”、“B”の2通りの真偽値の組合せの内、(A,B)=(偽(false)、真(true))が格納されている。
以上、説明したように、実施例1では、テスト対象となる判定式に含まれる各条件の真偽値の組合せに対し、組合せルールを反映した論理積、論理和の基本ルールを階層的(再帰的)に適用することで、網羅規則1−4を満たす最小数のテストケースが生成される。実施例1では、例えば、論理積、論理和の基本ルールの階層的(再帰的)な真偽値の組合せで残されていた、各条件の余剰な真偽値の組合せを排除することが可能となる。
例えば、図2A(2)に例示の論理和の基本ルールでは、論理和(A or B)の真偽値を“真(true)”とする条件“A”、“B”の真偽値の組合せは、(A,B)=(真(true)、
偽(false))、(偽(false)、真(true))の2通りである。ここで、図2C(1)に例示のように、論理和(A or B)を条件とする論理積の基本ルールでは、論理和(A or B
)の真偽値を組合せる相手側の条件の真偽値が“偽(false)”である場合には、論理和
(A or B)の真偽値は判定結果の真偽値に独立に影響しない。このため、論理和(A or B)の真偽値を“真(true)”とする条件“A”、“B”の真偽値の組合せに対し、組合せルール1が適用されることとなる。
組合せルール1が適用される場合には、判定結果の真偽値が共通する条件の組合せから1つの組合せが抽出されるため、条件“(A or B)”の真偽値を“真(true)”とする条件“A”、“B”の2通りの真偽値の組合せの内の1つの組合せが抽出される。この結果、例えば、図2C(2)のID=1のレコードに例示のように、条件“A”、“B”の真偽値の組合せとして、(A,B)=(真(true),偽(false))が抽出され、他方の(A,B)=
(偽(false)、真(true))の真偽値の組合せを排除することが可能となる。なお、条
件“A”、“B”の真偽値の組合せとして、(A,B)=(偽(false)、真(true))が抽出された場合には、(A,B)=(真(true),偽(false))が余剰な真偽値の組合せとして排除されることとなる。
実施例1では、論理積、論理和の基本ルールを階層的(再帰的)に適用する際に、組合せルールを反映することで、判定式に含まれる各条件についての網羅規則1−4を満たす最小数の真偽値の組合せを求めることが可能となる。しかし、例えば、組合せルール1の反映の時に、判定結果の真偽値が共通する各条件の組合せから1つの組合せを抽出する場合、抽出した各条件についての真偽値の組合せによっては、矛盾を含む虞がある。
図3に、組合せルール1を説明例とした、矛盾が生じる場合の、各条件についての真偽値の組合せの説明図を例示する。なお、説明例での判定式は、“((x>10) or (y==0)) and
(x>0)”とする。判定式“((x>10) or (y==0)) and (x>0)”では、条件“(x>10)”、“(y==0)”についての論理和が下位の処理プロセスであり、条件“(x>10)”、“(y==0)”の論理和“((x>10) or (y==0))”と条件“(x>0)”との論理積が上位の処理プロセスとなる。
図3のID=1−3のレコードに例示のように、“(y==0)”の論理和“((x>10) or (y==0))”と条件“(x>0)”との論理積について、基本ルールを適用し、各条件についての3
通りの真偽値の組合せが求められる。
ID=1のレコードにおいて、論理和“((x>10) or (y==0))”と条件“(x>0)”との真
偽値の組合せにおいて、論理和“((x>10) or (y==0))”を“真(true)”とする条件“(x>10)”、“(y==0)”の真偽値の組合せには組合せルール1が適用される。従って、例えば、図2B(2)に例示の基本ルールとなる論理和の真偽値の組合せから、ID=1、或いは、ID=2のどちらか一方の組合せを、論理和“((x>10) or (y==0))” を“真(true
)”とする条件“(x>10)”、“(y==0)”の真偽値の組合せに適用すればよい。
図2B(2)のID=1の論理和の基本ルールを条件“(x>10)”、“(y==0)”の真偽値の組合せとして採用した場合、条件“(x>10)”の真偽値は“真(true)”となり、条件“(y==0)”の真偽値は“偽(false)”となる。ここで、真偽値が“偽(false)”となる条件を、論理否定を示す“not”を該当する条件に付加して表すとする。
図2B(2)のID=1の論理和の基本ルールを条件“(x>10)”、“(y==0)”の真偽値の組合せとして採用した場合、条件“(x>10)”、“(y==0)”の組合せは、結合式“(x>10)
and not(y==0)”で表すことができる。
図3のID=1のレコードにおける条件“(x>0)”に対する真偽値は“偽(false)”であるため、条件“(x>0)”に論理否定を示す“not”を付加し、条件“not(x>0)”として表すことができる。従って、図3のID=1に例示の真偽値に対して組合せルール1を反映
した条件“(x>10)”、“(y==0)”、“(x>0)”の組合せは、以下の結合式(A1)として
表すことができる。
・結合式:(x>10) and not(y==0) and not(x>0) …結合式(A1)
結合式(A1)では、条件“(x>10)”、“not(x>0)”を同時に含むため、条件“(x>10)”、“not(x>0)”に共通する変数xについて矛盾が生じることとなる。このため、MC/DCのテスト網羅度を満たすテストケースとして生成された真偽値の組合せを反映した結合式(A1)を充足する、テストセット(各条件を充足する変数値の組合せ)を求めることが不能となってしまう。
一方、図2B(2)のID=2の論理和の基本ルールを条件“(x>10)”、“(y==0)”の真偽値の組合せとして採用した場合、条件“(x>10)”の真偽値は“偽(false)”となり
、条件“(y==0)”の真偽値は“真(true)”となる。従って、真偽値が“偽(false)”
となる条件に、論理否定を示す“not”を付加し、図2B(2)のID=2の論理和の条
件“(x>10)”、“(y==0)”の組合せを表すと、結合式“not(x>10) and (y==0)”となる。
図2B(2)のID=2の論理和を採用した場合、図3のID=1に例示の真偽値に対して組合せルール1を反映した条件“(x>10)”、“(y==0)”、“(x>0)”の組合せは、以
下の結合式(A2)として表すことができる。
・結合式:not(x>10) and (y==0) and not(x>0) …結合式(A2)
結合式(A2)では、条件“not(x>10)”、“not(x>0)”を同時に含むこととなるが、
条件“not(x>10)”、“not(x>0)”に共通する変数xについて矛盾は生じない。このため
、MC/DCのテスト網羅度を満たすテストケースとして生成された真偽値の組合せを反映した結合式(A2)を充足する、テストセットを求めることが可能となる。
このように、テスト対象となる判定式に、変数を共通とする条件が複数に含まれる場合には、組合せルール、基本ルールの論理積、論理和の真偽値が適用された各条件の組合せに対し、真偽値を充足する変数値の組合せに矛盾が生じる虞がある。MC/DCのテスト網羅度を満たすテストケースとして生成された真偽値であっても、真偽値を各条件に反映した場合には、各条件を充足する変数値を求めることが不能となってしまう場合がある。
例えば、組合せルール1の適用の際に、図2B(2)に例示のID=1の論理和の真偽値の組合せを抽出した場合では、MC/DCのテスト網羅度の網羅規則1−4の真偽値関係を反映した各条件についての充足解をテストセットとして求めることが不能となる。一方、組合せルール1の適用の際に、図2B(2)に例示のID=2の論理和の真偽値の組合せを抽出した場合では、MC/DCのテスト網羅度の網羅規則1−4の真偽値関係を反映した各条件についての充足解をテストセットとして求めることが可能となる。
<実施例2>
実施例1では、情報処理装置は、組み合わせルール1において、判定結果としての真偽値に独立に影響しない(対象となる条件の真偽値を反転しても判定結果が変わらない)場合には、判定結果の真偽値が共通する条件の組合せから1つの組合せを抽出し、適用した。今、例えば、真偽値に独立に影響しない、判定結果の真偽値が共通する条件の組合せが、組み合わせAと、組み合わせBであるとする。
実施例2の情報処理装置での処理は、例えば、組合せルール1が適用される場合、組合せルール1で、判定結果の真偽値が共通する条件の組合せ(組合せA、組合せB)を保持するための選択演算子を導入する。
実施例2の情報処理装置は、選択演算子を用いることにより、判定結果の真偽値が共通する各条件の真偽値の組合せを選択演算子で結合した状態で保持し、抽出することが可能
となる。そして、実施例2での情報処理装置の処理は、最上位の処理プロセスの論理演算子に基づく各条件の真偽値の組合せに基づいて、選択演算子で結合された状態で抽出された下位の処理プロセスでの各条件の真偽値の組合せについての、各変数に対する充足可能性を判定する。選択演算子を用いること以外の実施例2の処理は実施例1と同様である。
図4に、組合せルール1を説明例とした、実施例2の下位の処理プロセスからの各条件の真偽値の組合せの抽出についての説明図を例示する。なお、説明例での判定式は、図3の説明例と同じ、判定式“((x>10) or (y==0)) and (x>0)”とする。判定式“((x>10) or
(y==0)) and (x>0)”では、条件“(x>10)”、“(y==0)”についての論理和が下位の処理プロセスであり、条件“(x>10)”、“(y==0)”の論理和“((x>10) or (y==0))”と条件“(x>0)”との論理積が上位の処理プロセスである。
図4のブロックP5に示すID=1のレコードにおいて、論理和“((x>10) or (y==0))”と条件“(x>0)”との真偽値の組合せにおいて、論理和“((x>10) or (y==0))”を“真
(true)”とする条件“(x>10)”、“(y==0)”の真偽値の組合せには組合せルール1が適用される。
実施例1では、例えば、図2B(2)に例示の基本ルールとなる論理和の真偽値の組合せから、ID=1、或いは、ID=2のどちらか一方の真偽値の組合せが抽出される。このため、抽出される条件“(x>10)”、“(y==0)”の真偽値の組合せによっては、網羅規則1−4を満たすにも関らず、テストセット(各条件を充足する変数値の組合せ)を求めることが不能となる虞が生じていた。
実施例2での処理は、例えば、図2B(2)に例示の論理和の真偽値の組合せから、論理和“((x>10) or (y==0))”を“真(true)”とする条件“(x>10)”、“(y==0)”の、ID=1、2の真偽値の組合せを選択演算子“||”で結合し、抽出する。例えば、真偽値が“偽(false)”となる条件に対しては、論理否定を示す“not”を付加することで真偽値を反映し、真偽値が反映されたID=1、2の各条件の組合せを選択演算子“||”で結合して部分式を生成する。実施例2では、図4のブロックP6に示すように、ID=1、2の真偽値の組合せを選択演算子“||”で結合して生成された部分式が抽出される。
例えば、図3で説明したように、ID=1の真偽値の組合せからは“(x>10) and not(y==0)”が生成され、ID=2の真偽値の組合せからは“not(x>10) and (y==0)”が生成される。実施例2では、例えば、ID=1の真偽値を反映した各条件の組合せと、ID=1の真偽値を反映した各条件の組合せとを、選択演算子“||”を用いて結合した部分式(A3)が生成される。
・部分式:((x>10) and not(y==0)) || ((not(x>10) and (y==0)) …部分式(A3)
部分式(A3)では、論理和“((x>10) or (y==0))”を“真(true)”とする条件“(x>10)”、“(y==0)”の真偽値の全ての組合せが、“((x>10) and not(y==0))か((not(x>10) and (y==0))”といった選択関係で表すことができる。
実施例2での処理は、生成された部分式(A3)に、上位の処理プロセスにおける真偽値を反映させた条件“(x>0)”を結合させ、上位の処理プロセスについての真偽値に基づ
く結合式(A4)を生成する。なお、図4のブロックP5に示すID=1のレコードでは、条件“(x>0)”に対する真偽値は“偽(false)”であるため、真偽値を反映させた条件は“not(X>0)”となる。
・結合式:(((x>10) and not(y==0)) || ((not(x>10) and (y==0))) and not(X>0) …結合式(A4)
結合式(A4)には、図4のブロックP5に示すID=1のレコードの、論理和“((x>10) or (y==0))”を“真(true)”、条件“(X>0)”を“偽(false)”とする真偽値を反
映した条件“(x>10)”、“(y==0)”、“(X>0)”の組合せが含まれる。
そして、実施例2での処理は、図4のブロックP7に示すように、生成された結合式(A4)を選択演算子について展開し、該選択演算子により結合された、下位の処理プロセスにおける各条件の真偽値を反映させた部分式(A5)、(A6)を生成する。なお、図4のブロックP7では、部分式(A5)は“ケース1選択時の判定論理式”として表され、部分式(A6)は“ケース2選択時の判定論理式”として表されている。
・部分式:((x>10) and not(y==0)) and not(X>0) …部分式(A5)
・部分式:((not(x>10) and (y==0)) and not(X>0) …部分式(A6)
部分式(A5)には、図2B(2)のID=1に例示の真偽値を反映した条件“(x>10)”、“(y==0)”、“(X>0)”の組合せが含まれる。また、部分式(A6)では、図2B(
2)のID=2に例示の真偽値を反映した条件“(x>10)”、“(y==0)”、“(X>0)”の組
合せが含まれる。
実施例2では、例えば、選択演算子を展開して生成された部分式(A5)、(A6)について、真偽値が反映された各条件の組合せを充足可能な変数値の有無が判定される。そして、図4のブロックP8に示すように、真偽値を反映した各条件の組合せを充足する変数値が得られる部分式が選択される。実施例2では、選択した部分式に基づいて、MC/DCのテスト網羅度の網羅規則1−4を充足するテストセットが求められる。
例えば、部分式(A5)では、変数xについての範囲関係に矛盾を含むため、真偽値を反映した各条件の組合せを充足する変数値が得られない(充足不能)と判定される。一方、部分式(A6)では、変数x、yについての範囲関係に矛盾を含まないため、真偽値を反映した各条件の組合せを充足する変数値が得られる(充足可能)と判定される。実施例2の処理では、例えば、充足可能と判定された部分式(A6)が選択され、選択された部分式(A6)の各条件の組合せに基づいて、MC/DCのテスト網羅度の網羅規則1−4を充足するテストセットが求められる。
なお、選択演算子を展開して生成された各部分式について、それぞれが充足可能と判定される場合には、例えば、選択演算子によって結合された最左側の各条件の組合せに基づく部分式を選択するとしてもよい。充足可能と判定される部分式が複数に存在する場合では、選択する部分式の選択方法を予め定めておけばよい。
実施例2では、選択演算子で結合された状態で下位の処理プロセスから抽出される各条件の真偽値の組合せに対する充足可能性が、最上位の処理プロセスにおける各条件の真偽値の組合せに基づいて判定できる。このため、例えば、組合せルール1が適用される下位の処理プロセスにおける各条件の真偽値の組合せの中から、矛盾が生じない各条件の真偽値の組合せを選択することができる。この結果、実施例2では、充足可能性を向上させた、冗長性を排除可能なMC/DCテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
〔装置構成〕
図5に、実施例2(以下、本実施形態と称す)の情報処理装置のハードウェアの構成を例示する。図5に例示の情報処理装置10は、例えば、PC(Personal Computer)、サ
ーバ等のコンピュータである。情報処理装置10は、接続バスB1によって相互に接続されたCPU(Central Processing Unit)11、主記憶部12、補助記憶部13、入力部
14、出力部15、通信部16を有する。主記憶部12及び補助記憶部13は、情報処理装置10が読み取り可能な記録媒体である。
情報処理装置10は、CPU11が補助記憶部13に記憶されたプログラムを主記憶部
12の作業領域に実行可能に展開し、プログラムの実行を通じて周辺機器の制御を行う。これにより、情報処理装置10は、所定の目的に合致した機能を実現することができる。
図5に例示の情報処理装置10において、CPU11は、情報処理装置10全体の制御を行う中央処理演算装置である。CPU11は、補助記憶部13に格納されたプログラムに従って処理を行う。主記憶部12は、CPU11がプログラムやデータをキャッシュしたり、作業領域を展開したりする記憶媒体である。主記憶部12は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)を含む。
補助記憶部13は、各種のプログラム及び各種のデータを読み書き自在に記録媒体に格納する。補助記憶部13は、外部記憶装置とも呼ばれる。補助記憶部13には、オペレーティングシステム(Operating System :OS)、各種プログラム、各種テーブル等が格納される。OSは、通信部16を介して接続される外部装置等とのデータの受け渡しを行う通信インターフェースプログラムを含む。外部装置等には、例えば、通信部16を介して接続されたネットワーク上の、他のサーバ等の情報処理装置、外部記憶装置、通信機能を有する装置等が含まれる。
補助記憶部13は、例えば、EPROM(Erasable Programmable ROM)、ソリッドス
テートドライブ装置、ハードディスクドライブ(HDD、Hard Disk Drive)装置等であ
る。また、補助記憶部13としては、例えば、CDドライブ装置、DVDドライブ装置、BD(Blu-ray(登録商標) Disc)ドライブ装置等が提示できる。記録媒体としては、例えば、不揮発性半導体メモリ(フラッシュメモリ)を含むシリコンディスク、ハードディスク、CD、DVD、BD、USB(Universal Serial Bus)メモリ、メモリカード等がある。
入力部14は、ユーザ等からの操作指示等を受け付ける。入力部14は、入力ボタン、キーボード、タッチパネル等のポインティングデバイス、ワイヤレスリモコン、マイクロフォン、カメラ等の入力デバイスである。入力部14から入力された情報は、接続バスB1を介してCPU11に通知される。
出力部15は、CPU11で処理されるデータや主記憶部12に記憶されるデータを出力する。出力部15は、CRT(Cathode Ray Tube)ディスプレイ、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、EL(Electroluminescence)パネ
ル、有機ELパネル、プリンタ、スピーカ等の出力デバイスである。通信部16は、例えば、ネットワーク等とのインターフェースである。情報処理装置10が接続するネットワークには、例えば、LAN(Local Area Network)、インターネット(Internet)等の公衆ネットワーク、通信基地局を含む携帯電話網等の無線ネットワーク等が含まれる。
情報処理装置10は、例えば、CPU11が補助記憶部13に記憶されているOS、各種プログラムや各種データを主記憶部12に読み出して実行することにより、対象プログラムの実行と共に、図5に例示の各処理手段を実現する。情報処理装置10は、対象プログラムの実行と共に、図5に例示の判定式解析部101、真偽値ルール適用部102、テストケース生成部103、充足可能性判定部104を実現する。判定式解析部101は、二分木変換部101aを含み、テストケース生成部103は、選択分析部103aを含む。但し、図5に例示の各処理手段のいずれか、あるいは、これらの一部がハードウェア回路によって動作するものであってもよい。
また、情報処理装置10は、以上の各処理手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値ルールDB201、判定式二分木DB202、条件式マップ集合DB203を補助記憶部13に備える。また、情報処理装置10は、補助記憶部13
に、テストケース条件式DB204、テストケースDB205を備える。
なお、各処理手段のうち、いずれかが、他の情報処理装置等に含まれてもよい。例えば、判定式解析部101を含む情報処理装置と、真偽値ルール適用部102を含む情報処理装置と、テストケース生成部103を含む情報処理装置と、充足可能性判定部104を含む情報処理装置とがネットワーク等を介して接続する。そしてネットワークを介して接続された各情報処理装置が、情報処理装置10として機能するとしてもよい。同様に、情報処理装置10の真偽値ルールDB201、判定式二分木DB202、条件式マップ集合DB203、テストケース条件式DB204、テストケースDB205は、複数の外部記憶装置に分散されて格納し、ネットワーク等を介して接続されるとしてもよい。情報処理装置10は、例えば、ネットワーク上のコンピュータ群であるクラウドとして実現できるため、各処理手段の処理負荷を軽減できる。
〔処理ブロック構成〕
図6に、本実施形態の情報処理装置10における、処理ブロックの説明図を例示する。図6に例示の説明図において、情報処理装置10は、判定式解析部101、真偽値ルール適用部102、テストケース生成部103、充足可能性判定部104の各処理手段を有する。判定式解析部101には、2分木変換部101aの処理手段が含まれる。テストケース生成部103には、選択分析部103aの処理手段が含まれる。
また、図6に例示の説明図において、情報処理装置10は、以上の各機能手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値ルールDB201、判定式二分木DB202、条件式マップ集合DB203を補助記憶部13に備える。また、情報処理装置10は、補助記憶部13に、テストケース条件式DB204、テストケースDB205を備える。
図6に例示の、判定式解析部101は、例えば、テスト対象となるプログラムの判定式(論理式)C1を受け付ける。判定式解析部101は、例えば、補助記憶部13を介して、CD、USBメモリ等の記録媒体に格納された、テスト対象となるプログラムを読み込むことで、該プログラムの判定式C1を受け付けることができる。また、判定式解析部101は、例えば、情報処理装置10が接続するネットワーク等を介して、他の情報処理装置、或いは、外部記憶装置等に格納されたテスト対象のプログラムを読み込むことで、該プログラムに記述された判定式C1を受け付けるとしてもよい。判定式解析部101は、例えば、情報処理装置10で受け付けた判定式C1を主記憶部12の所定の領域に一時的に記憶する。テスト対象のプログラムはソースプログラムであってもよいし、バイナリプログラムであってもよい。また、判定式C1は、テキスト形式の論理式であってもよいし、バイナリコードであってもよい。
判定式解析部101は、受け付けたプログラムの判定式C1を解析し、判定式C1に含まれる論理演算子、論理演算子によって結び付けられる各条件、論理演算子による各条件の処理プロセスの階層関係を特定する。なお、以下の説明では、判定式に含まれる条件を“条件式”とも称する。
判定式解析部101は、特定した論理演算子、各条件式、処理プロセスの階層関係に基づいて、テスト対象となるプログラムの判定式についての、木構造(判定式二分木)を生成する。なお、判定式に含まれる論理演算子、論理演算子で結合される各条件式、論理演算子による各条件式の処理プロセスの階層関係の特定処理は、例えば、判定式解析部101の二分木変換部101aにより行われる。判定式解析部101で生成された判定式の木構造(判定式二分木)は、例えば、判定式二分木DB202に格納される。
[二分木変換処理]
判定式解析部101の二分木変換部101aは、受け付けた判定式C1を解析し、判定式B1に含まれる論理演算子、論理演算子で結合される各条件式、論理演算子による各条件式についての処理プロセスの階層関係を特定する。そして、二分木変換部101aは、特定した論理演算子、各条件式、処理プロセスの階層関係に基づいて、受け付けた判定式C1の判定に係る各条件の階層的な論理演算関係を木構造に変換する。
図7Aに、二分木変換処理の説明図を例示する。なお、図7Aに例示の説明図の、二分木処理に係る判定式C1は、図6に例示の、“(((x>0) and (z==5)) or ((y==1) and (z>1))) and (y>0)”とする。
二分木変換部101aは、例えば、言語解析、字句解析、構文解析等を行うことにより、判定式C1に含まれる“(”、“)”等の括弧記号、或いは、スペース等の領域の区切りを検出する。そして、二分木変換部101aは、区切られた領域範囲に含まれる論理演算子の文字列、及び、変数の条件式を特定する。
二分木変換部101aは、判定式C1について、例えば、“(”、“)”等の括弧記号により区切られた領域範囲から変数に対する“x>0”、“z==5”、“y==1”、“z>1”、“y>0”といった条件式を特定する。また、例えば、二分木変換部101aは、“)”、“(”
等の括弧記号の配列やスペース等により区切られた領域範囲から“or”、“and”等の論
理演算子の文字列を特定する。
また、二分木変換部101aは、例えば、“(”、“)”等の括弧記号の配置関係から、判定に係る論理演算の優先順位を特定し、優先順位の高い論理演算子を下位の処理プロセスとする、論理演算子間の階層関係を特定する。そして、二分木変換部101aは、論理演算子間の階層関係と、論理演算子で結び付けられる条件式との対応関係から、判定式C1の、各条件式の階層的な論理関係を木構造に変換する。
但し、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、二分木変換部101aは、例えば、プログラムを記述するプログラミング言語と同じ優先度の解釈をするとすればよい。二分木変換部101aは、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、例えば、左側優先とすることができる。
図7Aの例では、条件式“x>0”、“z==5”、“y==1”、“z>1”が木構造の最下層に配置されている。そして、条件式“x>0”、“z==5”を結び付ける論理演算子“and”と、条件式“y==1”、“z>1”を結び付ける論理演算子“and”とは、同じ階層に配置されている。
なお、図7Aの同じ階層に配置された2つの“and”のうち、左側の論理演算子“and”は、条件式“x>0”、“z==5”と対応付けられている。同様にして、右側の論理演算子“and”は、条件式“y==1”、“z>1”と対応付けられている。
また、条件式“y>0”と、条件式“x>0”、“z==5”を含む処理プロセス、及び、条件式“y==1”、“z>0”を含む処理プロセスを結び付ける論理演算子“or”とは、同じ階層に
配置されている。そして、論理演算子“or”による処理プロセスと条件式“y>0”とは、
木構造の最上位の論理演算子“and”により結び付けられている。
なお、論理演算子“or”は、条件式“x>0”、“z==5”を含む処理プロセスの論理演算
子“and”、及び、条件式“y==1”、“z>1”を含む処理プロセスの論理演算子“and”に
対応付けられている。また、最上位の論理演算子“and”には、論理演算子“or”,条件
式“y>0”に対応付けられている。
図7Aに例示のように、木構造に変換された判定式は、論理演算子間の階層関係と、論理演算子で結び付けられる各条件式の対応関係とを表すことができる。図7Aの木構造の例では、判定式に含まれる論理演算子、各条件が左側から順に配置されていることが判る。また、図7Aの木構造生成処理では、記号“()”で括られたより内側の優先度の高い処理プロセスが下位層に配置されていることが判る。また、論理式に記述された左側の論理演算関係が、木構造の左側に配置されていることが判る。ここで、木構造で表された条件式を“リーフ”とも称し、各“リーフ”を結び付ける論理演算子を“ノード”とも称する。
二分木変換部101aは、木構造に変換された判定式の、論理演算子間の階層関係と、論理演算子で結び付けられる各条件式の対応関係とを、例えば、処理対象の判定式を一意に識別する識別番号と対応付けて、判定式二分木DB202に格納する。
[真偽値ルール適用処理]
真偽値ルール適用部102は、例えば、判定式解析部101により生成された判定式の木構造(判定式二分木)に基づいて、組合せルールが適用された論理積、論理和の真偽値を反映した各条件式(リーフ)の組合せを生成する。なお、真偽値ルール適用部102は、例えば、組合せルール1が適用される論理積、論理和の真偽値の組合せでは、上位の処理プロセスにおける真偽値を共通とする全ての各条件式(リーフ)の真偽値の組合せを、選択演算子“||”で結合して抽出する。
真偽値ルール適用部102では、例えば、処理プロセスの階層毎にノードの論理関係に基づく組合せルール、論理積、論理和の真偽値を反映した各条件式(リーフ)の組合せが生成される。そして、真偽値ルール適用部102は、例えば、処理プロセスの階層毎に真偽値が反映された各条件式(リーフ)の組合せに基づいて、図4Bに例示のように、最上位の処理プロセスに対応する真偽値を反映した各条件式(リーフ)の結合式(A4)を生成する。
真偽値ルール適用部102は、最上位の処理プロセスの真偽値を反映して生成された結合式を、例えば、処理対象の判定式の識別番号と対応付けて、条件式マップ集合DB203に格納する。
以下、図7B−7Hに例示の図面を参照し、本実施形態の真偽値ルール適用処理の説明を行う。なお、本実施形態の真偽値ルール適用処理では、真偽値ルール適用部102は、リーフ毎に条件式と真偽値とを対応付けた“条件式マップ”、及び、“条件式マップ集合”を生成する。
ここで、“条件式マップ”とは、例えば、(条件式,真偽値)との組合せを表す。また、“条件式マップ集合”とは、例えば、{(条件式1,真偽値1),(条件式2,真偽値2)}として表される“条件式マップ”の集合である。
“条件式マップ”では、組となる真偽値を反映したリーフが“条件式”として組合せられる。例えば、組となる真偽値が“真(true)”の場合では、“(リーフ,true)”といった組合せが条件式マップとして生成される。また、例えば、組となる真偽値が“偽(false)”の場合では、否定論理(not)を表す記号“¬”がリーフに反映され、“(¬(リーフ),false)”といった組合せが条件式マップとして生成される。リーフに対して真
偽値関係が反映された“条件式”は、“リーフ”、“¬リーフ”の2通りとなる。
真偽値ルール適用部102は、各リーフに対し、真偽値の“真(true)”、“偽(false)”のそれぞれを反映させた条件式と、反映された真偽値とを組合せ、各真偽値につい
ての条件式マップを生成する。そして、真偽値ルール適用部102は、例えば、生成した各条件式マップを組合せ、{(リーフ,true),(¬(リーフ),false)}といったリ
ーフ毎の“条件式マップ集合”を生成する。
真偽値ルール適用部102は、例えば、リーフ毎に生成された“条件式マップ集合”の中から、各リーフを結び付けるノードの、組合せルールを反映した論理積、論理和の基本ルールの真偽値に対応する“条件式マップ”を抽出する。そして、真偽値ルール適用部102は、例えば、リーフ毎に抽出された“条件式マップ”を結合し、結合した“条件式マップ”とノードの処理プロセスでの真偽値とを組合せ、ノード毎の“条件式マップ集合”を生成する。
本実施形態の真偽値ルール適用処理では、真偽値ルール適用部102は、上述の処理プロセスの真偽値を反映した“条件式マップ集合”の生成を、処理プロセスの階層毎に実行し、最上位の処理プロセスに対応する真偽値を反映した“条件式マップ集合”を生成する。なお、最上位の処理プロセスに対応する真偽値を反映して生成された“条件式マップ集合”は、例えば、組合せルールが適用された論理積、論理和の真偽値を反映した各条件式(リーフ)の組合せであり、図4で説明した結合式(A4)である。
(第1の真偽値ルール適用処理)
図7Bに、判定式C1より生成された木構造についての条件式マップ、条件式マップ集合の生成処理の説明図を例示する。なお、実施例2では、各リーフについての条件式マップ、条件式マップ集合の生成は、例えば、木構造の左側に配置されたノードの処理プロセスから行われるとして説明を行う。同一の階層にノード(論理演算子)が複数個配置された場合では、例えば、左側に配置された処理プロセスを優先とすることができるためである。ただし、本情報処理装置の処理が、左側に配置された処理プロセスを優先とするものに限定される訳ではなく、右側に配置された処理プロセスを優先ものであってもよい。
第1の真偽値ルール適用処理では、真偽値ルール適用部102は、例えば、木構造の同一の階層の左側に配置されたノード(論理演算子)処理についての、条件式マップ、及び、条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、判定式二分木DB202を参照し、処理対象の判定式について生成された木構造(判定式二分木)を取得する。そして、真偽値ルール適用部102は、例えば、木構造の下位層の左側に配置されたノードの処理プロセスについて、リーフ毎に“条件式マップ”、及び、“条件式マップ集合”を生成する。
図7Bに例示の木構造において、破線で囲まれた矩形領域に示すように、下位層の左側に配置されたノードの処理プロセスに係る各リーフは、リーフ“x>0”、“z==5”である
真偽値ルール適用部102は、例えば、リーフ“x>0”について、“真(true)”の真
偽値との組合せの条件式マップ((x>0),true)を生成し、“偽(false)の真偽値との組合せの条件式マップ(¬(x>0),false)を生成する。そして、真偽値ルール適用部102は、例えば、リーフ“x>0”について生成した各条件式マップを組合せ、ブロックD1に
示す条件式マップ集合{((x>0),true),(¬(x>0),false)}を生成する。
また、真偽値ルール適用部102は、例えば、リーフ“z==5”について、“真(true)
”の真偽値との組合せの条件式マップ((z==5),true)を生成し、“偽(false)の真偽
値との組合せの条件式マップ(¬(z==5),false)を生成する。真偽値ルール適用部10
2は、例えば、リーフ“z==5”について生成した各条件式マップを組合せ、ブロックD1に示す条件式マップ集合{((z==5),true),(¬(z==5),false)}を生成する。
真偽値ルール適用部102は、リーフ“x>0”、“z==5”のそれぞれについて生成され
た条件式マップ集合を、例えば、主記憶部12の所定の領域に一時的に記憶する。
次に、真偽値ルール適用部102は、リーフ毎に生成した条件式マップ集合に基づいて、リーフ“x>0”、“z==5”を結び付けるノードの処理プロセスについての真偽値を反映
した条件式マップ集合を生成する。
図7Cに、リーフ“x>0”、“z==5”に係る処理プロセスについての真偽値を反映した
条件式マップ集合の生成処理の説明図を例示する。なお、図7Cの説明図において、リーフ“x>0”について生成された条件式マップ集合は、ブロックD1に示すように、“左辺
の条件式マップ集合”とも称し、リーフ“z==5”について生成された条件式マップ集合は、“右辺の条件式マップ集合”とも称する。また、生成処理の対象となるノード及びリーフを、破線で囲まれた矩形領域に示す。
また、図7Cの説明図において、論理積ルールTb1は、組合せルールが適用された論理積の真偽値表を表す。論理積ルールTb1において、例えば、「左辺」カラム、「右辺」カラムには、“(true,0)”、“(false,1)”といった真偽値情報が格納されて
いる。ここで、例えば、真偽値情報“(true,0)”、“(false,1)”等において、
真偽値“true”、“false”と組合せられた“0”、“1”といった数値は、適用される
組合せルールを指定する識別子である。
図7Cの論理積ルールTb1の例では、識別子“0”が組合せられた真偽値では、論理積、論理和の基本ルールの組合せの際に、組合せルール1が適用され、識別子“1”が組合せられた真偽値では、組合せルール2が適用される。
言い換えれば、識別子“0”が組合せられた場合には、真偽値ルール適用部102は、例えば、識別子“0”が組合せられた真偽値に共通する、下位の条件式の真偽値の組合せを選択演算子“||”を用いて結合し、抽出する。また、識別子“1”が組合せられた場合には、真偽値ルール適用部102は、例えば、識別子“1”が組合せられた真偽値に共通する条件式の真偽値の組合せを全て抽出する。
なお、以下の説明では、図7Cに例示の論理積ルールTb1において、「No」カラムに「1」が格納されたレコードを“ID=1のレコード”とも称する。「No」カラムに「2」、「3」が格納されたレコードについても、同様に、“ID=2のレコード”、“ID=3のレコード”とも称する。
真偽値ルール適用部102は、例えば、真偽値ルールDB201を参照し、処理対象となるノードに対応した真偽値表を取得する。図7Cの例では、リーフ“x>0”、“z==5”
を結び付けるノードは論理積“and”である。真偽値ルール適用部102は、例えば、論
理積ルールTb1を真偽値ルールDB201から取得し、取得した論理積ルールTb1を主記憶部12の所定の領域に一時的に記憶する。
真偽値ルール適用部102は、例えば、ノードに対応した真偽値表に基づいて、ノード毎の条件式マップ集合を生成する。ノード毎の条件式マップ集合は、例えば、真偽値表のレコード毎に生成された条件式マップから生成される。真偽値ルール適用部102は、例
えば、真偽値表の「全体」カラムに格納された真偽値と、「左辺」カラム、「右辺」カラムの真偽値情報を反映させた条件式の結合式とを組合せ、レコード毎の条件式マップを生成する。ノードに対応した真偽値表に基づいて生成されたノード毎の生成された条件式マップ集合は、例えば、主記憶部12の所定の領域に一時的に記憶される。
・論理積ルール1
図7Cの論理積ルールTb1において、ID=1のレコードの「左辺」カラムには真偽値情報(true,0)が格納され、「右辺」カラムには真偽値情報(false,1)が格納さ
れている。「左辺」カラムは、例えば、ノードによって結び付けられるリーフ“x>0”に
対応し、「右辺」カラムは、ノードによって結び付けられるリーフ“z==5”に対応する。また、「左辺」カラムに対応するリーフの真偽値には組合せルール1が適用され、「右辺」カラムに対応するリーフの真偽値には組合せルール2が適用される。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z==5”の条件式マップ集合から、真偽値“false”となる条件式を全て抽出する。ここで、リーフ“z==5”の条件式マ
ップ集合は、{((z==5),true),(¬(z==5),false)}であり、真偽値“false”と組合せられた条件式は単一の“¬(z==5)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに対応する条件式として、リーフ“z==5”の条件式マップ集合から、条件式“¬(z==5)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“x>0”の条件式マップ
集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。
ここで、リーフ“x>0”の条件式マップ集合は、{((x>0),true),(¬(x>0),false)}であり、真偽値“true”と組合せられた条件式は単一の“(x>0)”である。リーフ“x>0”についての真偽値“true”となる条件式は複数に存在しないため、選択演算子は使用されずに、真偽値“true”と組合せられた条件式“(x>0)”が抽出されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに対応する条件式として、リーフ“x>0”の条件式マップ集合から、条件式
“(x>0)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=1のレコードについての、「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成す
る。条件式マップは、例えば、リーフ“x>0”の条件式マップ集合から抽出された条件式(x>0)、及び、リーフ“z==5”の条件式マップ集合から抽出された条件式(¬(z==5))に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(x>0)と条件式(¬(z==5))とを、合接を表す記号“∧”を用いて結合した、“((x>0) ∧ ¬(z==5))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「全体」カラムに格納された真偽値“false”と組合せ
、ID=1のレコードの真偽値に対応する条件式マップ“((x>0) ∧ ¬(z==5),false)”を生成する。生成された条件式マップ“((x>0) ∧ ¬(z==5),false)”は、例えば、論理積ルールTb1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理積ルール2
図7Cの論理積ルールTb1において、ID=2のレコードについてもID=1と同様にして、条件式マップが生成される。例えば、論理積ルールTb1の、ID=2のレコードの「左辺」カラムには真偽値情報(false,1)が格納され、「右辺」カラムには真偽
値情報(true,0)が格納されている。「左辺」カラムに対応するリーフの真偽値には組合せルール2が適用され、「右辺」カラムに対応するリーフの真偽値には組合せルール1が適用される。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“x>0”の条件式マップ集合か
ら、真偽値“false”となる条件式を全て抽出する。リーフ“x>0”の条件式マップ集合は、{((x>0),true),(¬(x>0),false)}であり、真偽値“false”と組合せられた条件式は単一の“¬(x>0)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「左辺」カラムに対応する条件式として、リーフ“x>0”の条件式マップ集合から、条件式
“¬(x>0)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z==5”の条件式マップ集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。
ここで、リーフ“z==5”の条件式マップ集合は、{((z==5),true),(¬(z==5),false)}であり、真偽値“true”と組合せられた条件式は単一の“(z==5)”である。リー
フ“(z==5)”についての真偽値“true”となる条件式は複数に存在しないため、選択演算子は使用されずに、真偽値“true”と組合せられた条件式“(z==5)”が抽出されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに対応する条件式として、リーフ“z==5”の条件式マップ集合から、条件式“(z==5)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=2のレコードの「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成する。条件式
マップは、例えば、リーフ“x>0”の条件式マップ集合から抽出された条件式(¬(x>0))、及び、リーフ“z==5”の条件式マップ集合から抽出された条件式(z==5)に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(¬(x>0))と条件式(z==5)とを、合接を表す記号“∧”を用いて結合した、“(¬(x>0) ∧ (z==5))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「全体」カラムに格納された真偽値“false”と組合せ
、ID=2のレコードの真偽値に対応する条件式マップ“(¬(x>0) ∧ (z==5),false)”を生成する。生成された条件式マップ“(¬(x>0) ∧ (z==5),false)”は、例えば、論理積ルールTb1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理積ルール3
図7Cの論理積ルールTb1のID=3のレコードについてもID=1と同様にして、
条件式マップが生成される。例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムには真偽値情報(true,1)が格納され、「右辺」カラムには真偽値情報(true,1)が格納されている。「左辺」カラム、「右辺」カラムのそれぞれに対応するリーフの真偽値には組合せルール2が適用される。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“x>0”の条件式マップ集合か
ら、真偽値“true”となる条件式を全て抽出する。リーフ“x>0”の条件式マップ集合は
、{((x>0),true),(¬(x>0),false)}であり、真偽値“true”と組合せられた条
件式は単一の“(x>0)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムに対応する条件式として、リーフ“x>0”の条件式マップ集合から、条件式
“(x>0)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z==5”の条件式マップ集合から、真偽値“true”となる条件式を全て抽出する。リーフ“z==5”の条件式マップ集合は、{((z==5),true),(¬(z==5),false)}であり、真偽値“true”と組合せ
られた条件式は単一の“(z==5)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに対応する条件式として、リーフ“z==5”の条件式マップ集合から、条件式“(z==5)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=3のレコードの「全体」カラムに格納された真偽値“true”と組となる条件式マップを生成する。条件式マップは、例えば、リーフ“x>0”の条件式マップ集合から抽出された条件式(x>0)、及び、リーフ“z==5”の条件式マップ集合から抽出された条件式(z==5)に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(x>0)と条件式(z==5)とを、合接を表す記号“∧”を用いて結合した、“((x>0) ∧ (z==5))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「全体」カラムに格納された真偽値“true”と組合せ、ID=3のレコードの真偽値に対応する条件式マップ“((x>0) ∧ (z==5),true)”を生成する
。生成された条件式マップ“((x>0) ∧ (z==5),true)”は、例えば、論理積ルールTb
1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
以上の処理により、図7CのブロックD2に示すように、論理積ルールTb1のID=1−3の論理関係に基づいた各条件式マップが生成される。
・条件式マップ集合
図7Cの論理積ルールTb1について、レコード毎に生成した条件式マップに基づいて、真偽値ルール適用部102は、リーフ“x>0”、“z==5”に係る処理プロセスについて
の真偽値を反映した条件式マップ集合を生成する。真偽値ルール適用部102は、例えば、ブロックD2に示す各条件式マップに基づいて、ブロックD3に示す条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、論理積ルールTb1のレコード毎に生成した条件式マップを組合せ、条件式マップ集合{((x>0) ∧ ¬(z==5),false),(¬(x>0) ∧ (z
==5),false),((x>0) ∧(z==5),true)}を生成する。論理積ルールTb1のレコード毎に生成した条件式マップに基づいて生成された、リーフ“x>0”、“z==5”に係る処理プ
ロセスについての真偽値を反映した条件式マップ集合は、例えば、条件式マップ集合DB203に格納される。
(第2の真偽値ルール適用処理)
次に、第2の真偽値ルール適用処理では、真偽値ルール適用部102は、例えば、木構造の同一の階層の右側に配置されたノード(論理演算子)処理についての、条件式マップ、及び、条件式マップ集合を生成する。図7Dに、第2の真偽値ルール適用処理に係る、判定式C1の木構造についての条件式マップ、条件式マップ集合の生成処理の説明図を例示する。
図7Dに例示の木構造において、第1の真偽値ルール適用処理の処理対象となったノードと同一の階層の右側に配置されたノードは論理積“and”であり、右側のノードの処理
プロセスに係る各リーフは、破線で囲まれた矩形領域に示すリーフ“y==1”、“z>1”で
ある。
先ず、真偽値ルール適用部102は、例えば、図7Bに例示の第1の真偽値ルール適用
処理と同様にして、右側のノードの処理プロセスに係るリーフ“y==1”、“z>1”につい
ての条件式マップ、条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、判定式二分木DB202を参照し、処理対象の判定式について生成された木構造(判定式二分木)から、下位層の左側に配置されたノードの処理プロセスに係るリーフ“y==1”、“z>1”を特定する。
真偽値ルール適用部102は、例えば、リーフ“y==1”について、“真(true)”の真偽値との組合せの条件式マップ((y==1),true)を生成し、“偽(false)の真偽値との
組合せの条件式マップ(¬(y==1),false)を生成する。そして、真偽値ルール適用部1
02は、例えば、リーフ“y==1”について生成した各条件式マップを組合せ、ブロックD4に示す条件式マップ集合{((y==1),true),(¬(y==1),false)}を生成する。
また、真偽値ルール適用部102は、例えば、リーフ“z>1”について、“真(true)
”の真偽値との組合せの条件式マップ((z>1),true)を生成し、“偽(false)の真偽値との組合せの条件式マップ(¬(z>1),false)を生成する。真偽値ルール適用部102は、例えば、リーフ“z>1”について生成した各条件式マップを組合せ、ブロックD4に示
す条件式マップ集合{((z>1),true),(¬(z>1),false)}を生成する。
真偽値ルール適用部102は、リーフ“y==1”、“z>1”のそれぞれについて生成され
た条件式マップ集合を、例えば、主記憶部12の所定の領域に一時的に記憶する。
次に、真偽値ルール適用部102は、リーフ毎に生成した条件式マップ集合に基づいて、リーフ“y==1”、“z>1”を結び付けるノードの処理プロセスについての真偽値を反映
した条件式マップ集合を生成する。
図7Eに、リーフ“y==1”、“z>1”に係る処理プロセスについての真偽値を反映した
条件式マップ集合の生成処理の説明図を例示する。なお、図7Eの説明図において、リーフ“y==1”について生成された条件式マップ集合は、ブロックD4に示すように、“左辺の条件式マップ集合”とも称し、リーフ“z>1”について生成された条件式マップ集合は
、“右辺の条件式マップ集合”とも称する。
また、図7Eの説明図において、論理積ルールTb1は、組合せルールが適用された論理積の真偽値表を表す。論理積ルールTb1については、図7Cで説明した。なお、以下の説明では、図7Eに例示の論理積ルールTb1において、「No」カラムに「1」が格納されたレコードを“ID=1のレコード”とも称する。「No」カラムに「2」、「3」が格納されたレコードについても、同様に、“ID=2のレコード”、“ID=3のレコード”とも称する。
真偽値ルール適用部102は、例えば、真偽値ルールDB201を参照し、処理対象となるノードに対応した真偽値表を取得する。図7Eの例では、リーフ“y==1”、“z>1”
を結び付けるノードは論理積“and”である。真偽値ルール適用部102は、例えば、論
理積ルールTb1を真偽値ルールDB201から取得し、取得した論理積ルールTb1を主記憶部12の所定の領域に一時的に記憶する。
真偽値ルール適用部102は、例えば、ノードに対応した真偽値表に基づいて、ノード毎の条件式マップ集合を生成する。ノード毎の条件式マップ集合は、例えば、真偽値表のレコード毎に生成された条件式マップから生成される。真偽値ルール適用部102は、例えば、真偽値表の「全体」カラムに格納された真偽値と、「左辺」カラム、「右辺」カラムの真偽値情報を反映させた条件式の結合式とを組合せ、レコード毎の条件式マップを生成する。ノードに対応した真偽値表に基づいて生成されたノード毎の条件式マップ集合は、例えば、主記憶部12の所定の領域に一時的に記憶される。
なお、第2の真偽値ルール適用処理のノード毎の条件式マップ集合の生成処理は、例えば、第1の真偽値ルール適用処理における、ノード毎の条件式マップ集合の生成処理と同
様の処理が行われる。すなわち、論理積テーブルTb1に沿ってレコード毎の条件式マップを生成し、生成したレコード毎の条件式マップを組合せ、ノード毎の条件式マップ集合を生成する。
・論理積ルール1
図7Eの論理積ルールTb1において、ID=1のレコードの「左辺」カラムには真偽値情報(true,0)が格納され、「右辺」カラムには真偽値情報(false,1)が格納さ
れている。このため、「左辺」カラムに対応するリーフ“y==1”の真偽値には組合せルール1が適用され、「右辺」カラムに対応するリーフ“z>1”の真偽値には組合せルール2
が適用されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z>1”の条件式マップ集合か
ら、真偽値“false”となる条件式を全て抽出する。ここで、リーフ“z>1”の条件式マップ集合は、{((z>1),true),(¬(z>1),false)}であり、真偽値“false”と組合せられた条件式は単一の“¬(z>1)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに対応する条件式として、リーフ“z>1”の条件式マップ集合から、条件式
“¬(z>1)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“y==1”の条件式マップ集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。ここで、リーフ“y==1”の条件式マップ集合は、{((y==1),true),(¬(y==1),false)}
であり、真偽値“true”と組合せられた条件式は複数に存在せずに単一の“(y==1)”である。このため、選択演算子は使用されずに、真偽値“true”と組合せられた条件式“(y==
1)”が抽出されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに対応する条件式として、リーフ“y==1”の条件式マップ集合から、条件式“(y==1)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=1のレコードについての、「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成す
る。条件式マップは、例えば、リーフ“y==1”の条件式マップ集合から抽出された条件式(y==1)、及び、リーフ“z>1”の条件式マップ集合から抽出された条件式(¬(z>1))に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(y==1)と条件式(¬(z>1))とを、合接を表す記号“∧”を用いて結合した、“((y==1)
∧ ¬(z>1))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「全体」カラムに格納された真偽値“false”と組合せ
、ID=1のレコードの真偽値に対応する条件式マップ“((y==1) ∧ ¬(z>1),false)”を生成する。生成された条件式マップ“((y==1) ∧ ¬(z>1),false)”は、例えば、論理積ルールTb1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理積ルール2
図7Eの論理積ルールTb1において、ID=2のレコードの「左辺」カラムには真偽値情報(false,1)が格納され、「右辺」カラムには真偽値情報(true,0)が格納さ
れている。このため、「左辺」カラムに対応するリーフ“y==1”の真偽値には組合せルール2が適用され、「右辺」カラムに対応するリーフ“z>1”の真偽値には組合せルール1
が適用されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“y==1”の条件式マップ集合から、真偽値“false”となる条件式を全て抽出する。リーフ“y==1”の条件式マップ集合
は、{((y==1),true),(¬(y==1),false)}であり、真偽値“false”と組合せられた条件式は単一の“¬(y==1)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「左辺」カラムに対応する条件式として、リーフ“y==1”の条件式マップ集合から、条件式“¬(y==1)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z>1”の条件式マップ
集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。リーフ“z>1”の条件式マップ集合は、{((z>1),true),(¬(z>1),false)}であり、真偽値“true”と組合せられた条件式は複数に存在せずに単一の“(z>1)”である。このため
、選択演算子は使用されずに、真偽値“true”と組合せられた条件式“(z>1)”が抽出さ
れることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに対応する条件式として、リーフ“z>1”の条件式マップ集合から、条件式
“(z>1)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=2のレコードについての、「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成す
る。条件式マップは、例えば、リーフ“y==1”の条件式マップ集合から抽出された条件式(¬(y==1))、及び、リーフ“z>1”の条件式マップ集合から抽出された条件式(z>1)に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(¬(y==1))と条件式(z>1)とを、合接を表す記号“∧”を用いて結合した、“(¬(y==1) ∧ (z>1))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「全体」カラムに格納された真偽値“false”と組合せ
、ID=2のレコードの真偽値に対応する条件式マップ“(¬(y==1) ∧ (z>1),false)”を生成する。生成された条件式マップ“(¬(y==1) ∧ (z>1),false)”は、例えば、論理積ルールTb1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理積ルール3
図7Eの論理積ルールTb1において、ID=3のレコードの「左辺」カラムには真偽値情報(true,1)が格納され、「右辺」カラムには真偽値情報(true,1)が格納されている。このため、「左辺」カラムに対応するリーフ“y==1”の真偽値、及び、「右辺」カラムに対応するリーフ“z>1”の真偽値には組合せルール2が適用されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムに格納された真偽値情報に基づいて、リーフ“y==1”の条件式マップ集合から、真偽値“true”となる条件式を全て抽出する。リーフ“y==1”の条件式マップ集合は、{((y==1),true),(¬(y==1),false)}であり、真偽値“true”と組合せられた
条件式は単一の“(y==1)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムに対応する条件式として、リーフ“y==1”の条件式マップ集合から、条件式“(y==1)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“z>1”の条件式マップ
集合から、真偽値“true”となる条件式を全て抽出する。リーフ“z>1”の条件式マップ
集合は、{((z>1),true),(¬(z>1),false)}であり、真偽値“true”と組合せら
れた条件式は単一の“(z>1)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに対応する条件式として、リーフ“z>1”の条件式マップ集合から、条件式
“(z>1)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=3のレコードについての、「全体」カラムに格納された真偽値“true”と組となる条件式マップを生成する。条件式マップは、例えば、リーフ“y==1”の条件式マップ集合から抽出された条件式(y==1)、及び、リーフ“z>1”の条件式マップ集合から抽出された条件式(z>1)に基づいて生成される。
真偽値ルール適用部102は、例えば、各リーフの条件式マップ集合から抽出された条件式(y==1)と条件式(z>1)とを、合接を表す記号“∧”を用いて結合した、“((y==1) ∧ (z>1))”を生成する。そして、真偽値ルール適用部102は、例えば、論理積ルールTb
1のID=3のレコードの「全体」カラムに格納された真偽値“true”と組合せ、ID=3のレコードの真偽値に対応する条件式マップ“((y==1) ∧ (z>1),true)”を生成する
。生成された条件式マップ“((y==1) ∧ (z>1),true)”は、例えば、論理積ルールTb
1のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
以上の処理により、図7EのブロックD5に示すように、論理積ルールTb1のID=1−3の論理関係に基づいた各条件式マップが生成される。
・条件式マップ集合
図7Eの論理積ルールTb1の、レコード毎に生成した条件式マップに基づいて、真偽値ルール適用部102は、リーフ“y==1”、“z>1”に係る処理プロセスについての真偽
値を反映した条件式マップ集合を生成する。真偽値ルール適用部102は、例えば、ブロックD5に示す各条件式マップに基づいて、ブロックD6に示す条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、論理積ルールTb1のレコード毎に生成した条件式マップを組合せ、条件式マップ集合{((y==1) ∧ ¬(z>1),false),(¬(y==1) ∧ (z>1),false),((y==1) ∧(z>1),true)}を生成する。論理積ルールTb1のレコード毎に生成した条件式マップに基づいて生成された、リーフ“y==1”、“z>1”に係る処理プ
ロセスについての真偽値を反映した条件式マップ集合は、例えば、条件式マップ集合DB203に格納される。
(第3の真偽値ルール適用処理)
次に、第3の真偽値ルール適用処理では、真偽値ルール適用部102は、例えば、木構造において、下位の処理プロセスの各ノードを結び付けるノード(論理演算子)処理についての、条件式マップ、及び、条件式マップ集合を生成する。
図7Fに、第3の真偽値ルール適用処理に係る、判定式C1の木構造についての条件式マップ、条件式マップ集合の生成処理の説明図を例示する。図7Fに例示の木構造において、破線で囲まれた矩形領域に示すように、同一階層に配置された下位ノード(論理積“and”)を結び付ける上位ノードは、論理和“or”である。第3の真偽値ルール適用処理
では、例えば、同一階層に配置された下位ノード毎に生成された条件式マップ集合に基づいて、各下位ノードを結び付ける上位ノード(論理和“or”)処理についての、条件式マップ、及び、条件式マップ集合が生成される。
図7Fに例示の木構造において、リーフ“x>0”、“z==5”を結び付ける左側の下位ノ
ードで生成された条件式マップ集合は、{((x>0) ∧ ¬(z==5),false),(¬(x>0) ∧ (z==5),false),((x>0) ∧(z==5),true)}である。また、リーフ“y==1”、“z>1”を結
び付ける右側の下位ノードで生成された条件式マップ集合は、{((y==1) ∧ ¬(z>1),false),(¬(y==1) ∧ (z>1),false),((y==1) ∧(z>1),true)}である。
なお、図7Fの説明図において、ブロックD7に示すように、リーフ“x>0”、“z==5
”を結び付ける左側の下位ノードで生成された条件式マップ集合は、“左辺の条件式マップ集合”とも称する。同様にして、ブロックD7に示すように、リーフ“y==1”、“z>1
”を結び付ける右側の下位ノードで生成された条件式マップ集合は、“右辺の条件式マップ集合”とも称する。
また、図7Fの説明図において、論理和ルールTb2は、組合せルールが適用された論理和の真偽値表を表す。論理和ルールTb2の「左辺」カラム、「右辺」カラムに格納された真偽値情報については、図7Cで説明した。なお、以下の説明では、図7Fに例示の
論理和ルールTb2において、「No」カラムに「1」が格納されたレコードを“ID=1のレコード”とも称する。「No」カラムに「2」、「3」が格納されたレコードについても、同様に、“ID=2のレコード”、“ID=3のレコード”とも称する。
真偽値ルール適用部102は、例えば、真偽値ルールDB201を参照し、処理対象となるノードに対応した真偽値表を取得する。図7Fに例示の木構造において、同一階層に配置された下位ノード(論理積“and”)を結び付ける上位ノードは、論理和“or”であ
る。真偽値ルール適用部102は、例えば、論理和ルールTb2を真偽値ルールDB201から取得し、取得した論理和ルールTb2を主記憶部12の所定の領域に一時的に記憶する。
真偽値ルール適用部102は、例えば、真偽値表の「全体」カラムに格納された真偽値と、「左辺」カラム、「右辺」カラムの真偽値情報を反映させた条件式の結合式とを組合せ、レコード毎の条件式マップを生成する。そして、真偽値ルール適用部102は、例えば、真偽値表のレコード毎に生成された条件式マップから、レコード毎の条件式マップを組合せ、処理対象となるノードの処理プロセスに対する条件式マップ集合を生成する。処理対象となるノードの処理プロセスに対して生成された条件式マップ集合は、例えば、主記憶部12の所定の領域に一時的に記憶される。
・論理和ルール1
図7Fの論理和ルールTb2において、ID=1のレコードの「左辺」カラムには真偽値情報(true,1)が格納され、「右辺」カラムには真偽値情報(false,0)が格納さ
れている。ここで、「左辺」カラムは、例えば、処理対象となる上位ノードで結び付けられる左側の下位ノードの条件式マップ集合に対応し、「左辺」カラムは、処理対象となる上位ノードで結び付けられる右側の下位ノードの条件式マップ集合に対応する。
このため、「左辺」カラムに対応する左側の下位ノードの条件式マップ集合の真偽値には組合せルール2が適用され、「右辺」カラムに対応する右側の下位ノードの条件式マップ集合の真偽値には組合せルール1が適用される。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側の下位ノードの条件式マップ集合から、真偽値“true”となる条件式を全て抽出する。ここで、左側の下位ノードの条件式マップ集合は、{((x>0) ∧ ¬(z==5),false),(¬(x>0) ∧ (z==5),false),((x>0)
∧(z==5),true)}であり、真偽値“true”と組合せられた条件式は、単一の“(x>0) ∧ (z==5)”である。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「左辺」カラムに対応する条件式として、左側の下位ノードの条件式マップ集合から、条件式“(x>0) ∧ (z==5)”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「右辺」カラムに格納された真偽値情報に基づいて、右側の下位ノードの条件式マップ集合から、真偽値“false”となる条件式を選択演算子を用いて結合し、抽出する。
ここで、右側の下位ノードで生成された条件式マップ集合は、{((y==1) ∧ ¬(z>1),false),(¬(y==1) ∧ (z>1),false),((y==1) ∧(z>1),true)}である。真偽値“false”と組合せられた条件式は複数に存在し、“(y==1) ∧ ¬(z>1)”、“¬(y==1) ∧ (z>1)”の2通りである。このため、真偽値ルール適用部102では、例えば、真偽値“false”と組合せられた複数の条件式が選択演算子“||”を用いて結合され、結合された条件式
“((y==1) ∧ ¬(z>1) ||¬(y==1) ∧ (z>1))”が抽出されることとなる。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「右辺」カラムに対応する条件式として、右側の下位ノードの条件式マップ集合から、選択演算子を用いて結合した条件式“((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))”を抽出する。
そして、真偽値ルール適用部102は、論理和ルールTb2のID=1のレコードについての、「全体」カラムに格納された真偽値“true”と組となる条件式マップを生成する。条件式マップは、例えば、左側の下位ノードの条件式マップ集合から抽出された条件式“(x>0) ∧ (z==5)”、及び、右側の下位ノードの条件式マップ集合から抽出された条件
式“((y==1) ∧ ¬(z>1) ||¬(y==1) ∧ (z>1))”に基づいて生成される。
真偽値ルール適用部102は、例えば、各下位ノードの条件式マップ集合から抽出された条件式を、合接を表す記号“∧”を用いて結合した、“(x>0) ∧ (z==5) ∧((y==1) ∧
¬(z>1) ||¬(y==1) ∧ (z>1))”を生成する。
そして、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「全体」カラムに格納された真偽値“true”と組合せ、ID=1のレコードの真偽値に対応する条件式マップを生成する。論理和ルールTb2のID=1のレコードでは、ブロックD8に示すように、条件式マップ“((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1)),true)”が生成される。
生成された条件式マップ“((x>0) ∧ (z==5)) ∧ ((y==1) ∧ ¬(z>1) ||¬(y==1) ∧(z>1)),true)”は、例えば、論理和ルールTb2のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理和ルール2
図7Fの論理和ルールTb2において、ID=2のレコードの「左辺」カラムには真偽値情報(false,0)が格納され、「右辺」カラムには真偽値情報(true,1)が格納さ
れている。このため、「左辺」カラムに対応する左側の下位ノードの条件式マップ集合の真偽値には組合せルール1が適用され、「右辺」カラムに対応する右側の下位ノードの条件式マップ集合の真偽値には組合せルール2が適用されることとなる。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=2のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側の下位ノードの条件式マップ集合から、真偽値“false”となる条件式を選択演算子を用いて結合し、抽出する。
ここで、左側の下位ノードの条件式マップ集合は、{((x>0) ∧ ¬(z==5),false),(
¬(x>0) ∧ (z==5),false),((x>0) ∧(z==5),true)}である。真偽値“false”と組合せられた条件式は複数に存在し、“(x>0) ∧ ¬(z==5)”、“¬(x>0) ∧ (z==5)”の2通りである。このため、真偽値ルール適用部102では、例えば、真偽値“false”と組合
せられた複数の条件式が選択演算子“||”を用いて結合され、結合された条件式“((x>0)
∧ ¬(z==5)||¬(x>0) ∧ (z==5))”が抽出されることとなる。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=2のレコードの「左辺」カラムに対応する条件式として、左側の下位ノードの条件式マップ集合から、選択演算子を用いて結合した条件式“((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5))”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=1のレコードの「右辺」カラムに格納された真偽値情報に基づいて、右側の下位ノードの条件式マップ集合から、真偽値“true”となる条件式を全て抽出する。ここで、右側の下位ノードで生成された条件式マップ集合は、{((y==1) ∧ ¬(z>1),false),(¬(y==1) ∧ (z>1),false),((y==1) ∧(z>1),true)}であり、真偽値“true”と組合せられた条件式は、単一の“(y==1) ∧ (z>1)”である。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=2のレコードの「右辺」カラムに対応する条件式として、右側の下位ノードの条件式マップ集合から、条件式“(y==1) ∧ (z>1)”を抽出する。
そして、真偽値ルール適用部102は、論理和ルールTb2のID=2のレコードについての、「全体」カラムに格納された真偽値“true”と組となる条件式マップを生成する。条件式マップは、例えば、左側の下位ノードの条件式マップ集合から抽出された条件式“((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5))”、及び、右側の下位ノードの条件式マップ集合から抽出された条件式“(y==1) ∧ (z>1)”に基づいて生成される。
真偽値ルール適用部102は、例えば、各下位ノードの条件式マップ集合から抽出された条件式を、合接を表す記号“∧”を用いて結合した、“((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)”を生成する。
そして、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=2のレコードの「全体」カラムに格納された真偽値“true”と組合せ、ID=2のレコードの真偽値に対応する条件式マップを生成する。論理和ルールTb2のID=2のレコードでは、ブロックD8に示すように、条件式マップ“(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1),true)”が生成される。
生成された条件式マップ“(((x>0) ∧ ¬(z==5)||¬(x>0) ∧(z==5)) ∧ (y==1) ∧ (z>1),true)”は、例えば、論理和ルールTb2のIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
・論理和ルール3
図7Fの論理和ルールTb2において、ID=3のレコードの「左辺」カラムには真偽値情報(false,1)が格納され、「右辺」カラムには真偽値情報(false,1)が格納されている。このため、「左辺」カラムに対応する左側の下位ノードの条件式マップ集合の真偽値、及び、「右辺」カラムに対応する右側の下位ノードの条件式マップ集合の真偽値には組合せルール2が適用されることとなる。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側の下位ノードの条件式マップ集合から、真偽値“false”となる条件式を全て抽出する。
ここで、左側の下位ノードの条件式マップ集合は、{((x>0) ∧ ¬(z==5),false),(
¬(x>0) ∧ (z==5),false),((x>0) ∧(z==5),true)}である。真偽値“false”と組合せられた条件式は、{(x>0) ∧ ¬(z==5),¬(x>0) ∧ (z==5)}の2通りである。このため、真偽値ルール適用部102では、例えば、真偽値“false”と組合せられた2通りの
条件式が全て抽出されることとなる。なお、真偽値“false”と組合せられた2通りの条
件式は、例えば、記号“{}”を用いた集合形式で抽出される。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの「
左辺」カラムに対応する条件式として、左側の下位ノードの条件式マップ集合から、条件式の集合形式で表された“{(x>0) ∧ ¬(z==5),¬(x>0) ∧ (z==5)}”を抽出する。
次に、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの「右辺」カラムに格納された真偽値情報に基づいて、右側の下位ノードの条件式マップ集合から、真偽値“false”となる条件式を全て抽出する。
ここで、右側の下位ノードで生成された条件式マップ集合は、{((y==1) ∧ ¬(z>1),false),(¬(y==1) ∧ (z>1),false),((y==1) ∧(z>1),true)}である。真偽値“false”と組合せられた条件式は、{(y==1) ∧ ¬(z>1),¬(y==1) ∧ (z>1)}の2通りであ
る。このため、真偽値ルール適用部102では、例えば、右側の下位ノードにおいても、真偽値“false”と組合せられた2通りの条件式が全て抽出されることとなる。真偽値“false”と組合せられた2通りの条件式は、例えば、記号“{}”を用いた集合形式で抽出される。
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの「右辺」カラムに対応する条件式として、右側の下位ノードの条件式マップ集合から、条件式の集合形式で表された“{(y==1) ∧ ¬(z>1),¬(y==1) ∧ (z>1)}”を抽出する。
そして、真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの「全体」カラムに格納された真偽値“false”と組合せ、ID=3のレコードの真
偽値に対応する条件式マップを生成する。なお、論理和ルールTb2のID=3では、左側の下位ノードについて2通りの条件式が抽出され、右側の下位ノードについても2通りの条件式が抽出されている。このため、論理和ルールTb2のID=3では、各下位ノードで抽出された条件式の組合せである、条件式2×条件式2=4通りの条件式の組合せが生成される。真偽値ルール適用部102は、例えば、各下位ノードで抽出された条件式の組合せから生成された4通りの条件式のそれぞれについて、論理和ルールTb2のID=3のレコードの「全体」カラムに格納された真偽値“false”を組合せ、条件式マップを
生成する。
真偽値ルール適用部102は、例えば、条件式の集合形式で表された“{(x>0) ∧ ¬(z==5),¬(x>0) ∧ (z==5)}”及び“{(y==1) ∧ ¬(z>1),¬(y==1) ∧(z>1)}”をそ
れぞれに組合せ、4通りの条件式を生成する。生成される条件式は、“((x>0) ∧ ¬(z==5)) ∧ ((y==1) ∧ ¬(z>1))”、“((x>0) ∧ ¬(z==5)) ∧ (¬(y==1) ∧ (z>1))”、“(¬(x>0) ∧ (z==5)) ∧ ((y==1) ∧ ¬(z>1))”、“(¬(x>0) ∧ (z==5)) ∧ (¬(y==1)
∧ (z>1))”の4通りである。
そして、真偽値ルール適用部102は、例えば、ブロックD8に示すように、4通りの条件式のそれぞれに真偽値“false”を組合せた条件式マップを生成する。生成された条
件式マップは、例えば、記号“{}”を用いた集合形式で、以下に示すように表される。
条件式マップ:{((x>0) ∧ ¬(z==5) ∧ (y==1) ∧ ¬(z>1),false),((x>0) ∧ ¬(z==5) ∧ ¬(y==1) ∧ (z>1),false),(¬(x>0) ∧ (z==5) ∧ (y==1) ∧ ¬(z>1),false),(¬(x>0) ∧ (z==5) ∧ ¬(y==1) ∧(z>1),false)}
真偽値ルール適用部102は、例えば、論理和ルールTb2のID=3のレコードの真偽値を反映して生成された条件式マップを、例えば、論理和ルールTb2のIDに対応付けて、主記憶部12の所定の領域に一時的に記憶する。
・条件式マップ集合
図7Fの論理和ルールTb2の、レコード毎に生成した条件式マップに基づいて、真偽
値ルール適用部102は、同一階層に配置された複数の下位ノードを結び付ける上位ノードの処理プロセスに対する、真偽値を反映した条件式マップ集合を生成する。真偽値ルール適用部102は、例えば、ブロックD8に示す各条件式マップに基づいて、ブロックD9に示す条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、論理和ルールTb2のレコード毎に生成した条件式マップを組合せ、以下に示す条件式マップ集合を生成する。なお、生成された条件式マップ集合は、例えば、条件式マップ集合DB203に格納される。
条件式マップ集合:{((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1))
,true)、(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧ (y==1) ∧(z>1),true)、((x>0) ∧ ¬(z==5) ∧ (y==1) ∧ ¬(z>1),false)、((x>0) ∧ ¬(z==5) ∧ ¬(y==1) ∧ (z>1),false)、(¬(x>0) ∧ (z==5) ∧(y==1) ∧ ¬(z>1),false)、(¬(x>0) ∧ (z==5) ∧ ¬(y==1) ∧ (z>1),false)}
(第4の真偽値ルール適用処理)
第4の真偽値ルール適用処理では、真偽値ルール適用部102は、例えば、木構造において、最上位の処理プロセスのノード(論理演算子)処理についての条件式マップ、条件式マップ集合を生成する。真偽値ルール適用処理部102は、例えば、第3の真偽値ルール適用処理の処理対象となったノードと同一階層に配置されたリーフとを結び付ける最上位のノード(論理積“and”)の処理プロセスについての条件式マップ、条件式マップ集
合を生成する。
図7Gに、第4の真偽値ルール適用処理に係る、判定式C1の木構造についての条件式マップ、条件式マップ集合の生成処理の説明図を例示する。図7Gに例示の木構造において、第3の真偽値ルール適用処理の処理対象となったノードと同一階層に配置されたリーフは、破線で囲まれた矩形領域に示すように、リーフ“y>0”である。真偽値ルール適用
部102は、例えば、判定式二分木DB202を参照し、図7Gに例示の木構造から、リーフ“y>0”を特定し、リーフ“y>0”についての条件式マップ、条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、リーフ“y>0”について、“真(true)”の真
偽値との組合せの条件式マップ((y>0),true)を生成し、“偽(false)の真偽値との組合せの条件式マップ(¬(y>0),false)を生成する。そして、真偽値ルール適用部102は、例えば、リーフ“(y>0)”について生成した各条件式マップを組合せ、ブロックD10
に示す条件式マップ集合{((y>0),true),(¬(y>0),false)}を生成する。真偽値
ルール適用部102は、例えば、リーフ“y>0”について生成された条件式マップ集合{
((y>0),true),(¬(y>0),false)}を、主記憶部12の所定の領域に一時的に記憶
する。
真偽値ルール適用部102は、例えば、第3の真偽値ルール適用処理で生成された条件式マップ集合、及び、リーフ“y>0”で生成された条件式マップ集合に基づいて、最上位
のノードの処理プロセスについての真偽値を反映した条件式マップ集合を生成する。
図7Hに、最上位のノードについての処理プロセスに係る、真偽値を反映した条件式マップ集合の説明図を例示する。なお、図7Hの説明図において、第3の真偽値ルール適用処理で生成された条件式マップ集合は、ブロックD9に示すように“左辺の条件式マップ集合”とも称する。また、リーフ“y>0”で生成された条件式マップ集合は、ブロックD
10に示すように“右辺の条件式マップ集合”とも称する。
ここで、リーフ“y>0”で生成された条件式マップ集合は、{((y>0),true),(¬(y>0),false)}である。また、第3の真偽値ルール適用処理で生成された条件式マップ集合は、以下の通りである。
第3の真偽値ルール適用処理で生成された条件式マップ集合:{((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1)),true)、(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧ (y==1) ∧(z>1),true)、((x>0) ∧ ¬(z==5) ∧ (y==1) ∧ ¬(z>1),false)
、((x>0) ∧ ¬(z==5) ∧ ¬(y==1) ∧ (z>1),false)、(¬(x>0) ∧ (z==5) ∧(y==1)
∧ ¬(z>1),false)、(¬(x>0) ∧ (z==5) ∧ ¬(y==1) ∧ (z>1),false)}
また、図7Hの説明図において、論理積ルールTb1は、図7C等に例示の、組合せルールが適用された論理積の真偽値表を表す。なお、以下の説明では、図7Fに例示の論理積ルールTb1において、「No」カラムに「1」が格納されたレコードを“ID=1のレコード”とも称する。「No」カラムに「2」、「3」が格納されたレコードについても、同様に、“ID=2のレコード”、“ID=3のレコード”とも称する。
真偽値ルール適用部102は、例えば、真偽値ルールDB201を参照し、処理対象となるノードに対応した真偽値表を取得する。図7Hの例では、破線で囲まれた矩形領域に示すように、同一階層に配置された左側のノード(論理和“or”)と右側に配置されたリーフ“y>0”とを結び付ける最上位のノードは論理積“and”である。真偽値ルール適用部102は、例えば、論理積ルールTb1を真偽値ルールDB201から取得し、取得した論理積ルールTb1を主記憶部12の所定の領域に一時的に記憶する。
真偽値ルール適用部102は、例えば、最上位のノードに対応した真偽値表に基づいて、最上位のノードの処理プロセスに対する条件式マップ集合を生成する。最上位のノードの処理プロセスに対する条件式マップ集合は、例えば、レコード毎に生成された条件式マップの組合せから生成される。真偽値ルール適用部102は、例えば、レコード毎に、真偽値表の「全体」カラムに格納された真偽値と、「左辺」カラム、「右辺」カラムの真偽値情報を反映させた条件式の結合式とを組合せ、レコード毎の条件式マップを生成する。最上位ノードの処理プロセスに対して生成された条件式マップ集合は、例えば、条件式マップ集合DB203に格納される。
・論理積ルール1
図7Hの論理積ルールTb1において、ID=1のレコードの「左辺」カラムには真偽値情報(true,0)が格納され、「右辺」カラムには真偽値情報(false,1)が格納さ
れている。このため、「左辺」カラムに対応する左側のノード(論理和“or”)の条件式マップ集合の真偽値には組合せルール1が適用され、「右辺」カラムに対応する右側のリーフ“y>0”の真偽値には組合せルール2が適用される。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側のノードの条件式マップ集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。
左側のノードの条件式マップ集合で、真偽値“true”と組合せられた条件式は、“(x>0) ∧ (z==5) ∧((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))”、“((x>0) ∧ ¬(z==5)||¬(x>0) ∧(z==5)) ∧ (y==1) ∧ (z>1)”の2通りである。真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「左辺」カラムに対応する条件式として、左側のノードの条件式マップ集合から、選択演算子を用いて結合した、以下に示す条件式を抽出する。なお、以下の条件式では、選択演算子の階層関係を識別するため記号“[]”を用いて選択される2通りの条件式を表すとする。
ID=1の左辺の条件式:([(x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1))]||[((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)])
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに格納された真偽値情報に基づいて、右側のリーフ“y>0”の条件式
マップ集合から、真偽値“false”となる条件式を全て抽出する。ここで、リーフ“y>0”の条件式マップ集合は、{((y>0),true),(¬(y>0),false)}であり、真偽値“false”と組合せられた条件式は単一の“¬(y>0)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=1のレコードの「右辺」カラムに対応する条件式として、リーフ“y>0”の条件式マップ集合から、条件式
“¬(y>0)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=1のレコードについての、「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成す
る。条件式マップは、例えば、左側のノードの条件式マップ集合から抽出された条件式、及び、右側のリーフ“y>0”の条件式マップ集合から抽出された条件式(¬(y>0))に基づいて生成される。
真偽値ルール適用部102は、例えば、左側のノードの条件式マップ集合から抽出された条件式と右側のリーフの条件式マップ集合から抽出された条件式とを、合接を表す記号“∧”を用いて結合する。そして、真偽値ルール適用部102は、例えば、結合した左側のノードの条件式と右側のリーフの条件式に、論理積ルールTb1のID=1のレコードの「全体」カラムに格納された真偽値“false”を組合せ、ID=1の真偽値に対応する
条件式マップを生成する。
論理積ルールTb1のID=1のレコードでは、以下に示す条件式マップが生成される。なお、生成されたID=1の真偽値に対応する条件式マップは、例えば、論理積ルールTb1のレコードのIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
ID=1の条件式マップ:([(x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1))]||[((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)] ∧ ¬(y>0),false)
・論理積ルール2
図7Hの論理積ルールTb1において、ID=2のレコードの「左辺」カラムには真偽値情報(false,1)が格納され、「右辺」カラムには真偽値情報(true,0)が格納さ
れている。このため、「左辺」カラムに対応する左側のノード(論理和“or”)の条件式マップ集合の真偽値には組合せルール2が適用され、「右辺」カラムに対応する右側のリーフ“y>0”の条件式マップ集合の真偽値には組合せルール1が適用される。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側のノードの条件式マップ集合から、真偽値“false”となる条件式を全て抽出する。
なお、左側のノードの条件式マップ集合で、真偽値“false”と組合せられた条件式は
、4通りである。真偽値ルール適用部102は、例えば、左側のノードの条件式マップ集合から、真偽値“false”となる4通りの条件式を記号“{}”を用いた集合形式で全て
抽出する。左側のノードの条件式マップ集合から、記号“{}”を用いた集合形式で抽出される条件式は以下の通りである。
ID=2の左辺の条件式:{((x>0) ∧ ¬(z==5)) ∧ ((y==1) ∧ ¬(z>1)),((x>0)
∧ ¬(z==5)) ∧ (¬(y==1) ∧ (z>1)),((¬(x>0) ∧ (z==5)) ∧ ((y==1) ∧ ¬(z>1)),((¬(x>0) ∧ (z==5)) ∧ (¬(y==1) ∧ (z>1))}
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“y>0”の条件式マップ
集合から、真偽値“true”となる条件式を選択演算子を用いて結合し、抽出する。ここで、リーフ“y>0”の条件式マップ集合では、真偽値“true”と組合せられた条件式は複数
に存在しない。このため、選択演算子は使用されずに単一の条件式“(y>0)”が抽出され
ることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=2のレコードの「右辺」カラムに対応する条件式として、リーフ“y>0”の条件式マップ集合から、条件式
“(y>0)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=2のレコードについての、「全体」カラムに格納された真偽値“false”と組となる条件式マップを生成す
る。条件式マップは、例えば、左側のノードの条件式マップ集合から集合形式で抽出された条件式、及び、右側のリーフ“y>0”の条件式マップ集合から抽出された条件式(y>0)に基づいて生成される。
真偽値ルール適用部102は、例えば、左側のノードの条件式マップ集合から集合形式で抽出された4通りの条件式のそれぞれと右側のリーフの条件式マップ集合から抽出された条件式とを、合接を表す記号“∧”を用いて結合する。そして、真偽値ルール適用部102は、例えば、各結合した左側のノードの条件式と右側のリーフの条件式に、論理積ルールTb1のID=2のレコードの「全体」カラムに格納された真偽値“false”を組合
せ、ID=2の真偽値に対応する条件式マップを生成する。
なお、論理積ルールTb1のID=2のレコードでは、以下に示す条件式マップのように、記号“{}”を用いた集合形式で、条件式マップが生成される。なお、集合形式で生成されたID=2の真偽値に対応する条件式マップは、例えば、論理積ルールTb1のレコードのIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
ID=2の条件式マップ:{(((x>0) ∧ ¬(z==5)) ∧ ((y==1) ∧ ¬(z>1)) ∧ (y>0),false),(((x>0) ∧ ¬(z==5)) ∧ (¬(y==1) ∧ (z>1)) ∧ (y>0),false),((¬(x>0) ∧ (z==5)) ∧ ((y==1) ∧ ¬(z>1)) ∧ (y>0),false),((¬(x>0) ∧ (z==5)) ∧ (
¬(y==1) ∧ (z>1)) ∧ (y>0),false)}
・論理積ルール3
図7Hの論理積ルールTb1において、ID=3のレコードの「左辺」カラムには真偽値情報(true,1)が格納され、「右辺」カラムには真偽値情報(true,1)が格納されている。このため、「左辺」カラムに対応する左側のノード(論理和“or”)の条件式マップ集合、及び、「右辺」カラムに対応する右側のリーフ“y>0”のマップ集合の真偽値
には、それぞれに組合せルール2が適用されることとなる。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「左辺」カラムに格納された真偽値情報に基づいて、左側のノードの条件式マップ集合から、真偽値“true”となる条件式を全て抽出する。
ここで、左側のノードの条件式マップ集合で、真偽値“true”と組合せられた条件式は
、2通りである。真偽値ルール適用部102は、例えば、左側のノードの条件式マップ集合から、真偽値“true”となる2通りの条件式を記号“{}”を用いた集合形式で全て抽出する。左側のノードの条件式マップ集合から、記号“{}”を用いた集合形式で抽出される条件式は以下の通りである。
ID=3の左辺の条件式:{((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1))),(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1))}
次に、真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに格納された真偽値情報に基づいて、リーフ“y>0”の条件式マップ
集合から、真偽値“true”となる条件式を全て抽出する。ここで、リーフ“y>0”の条件
式マップ集合は、{((y>0),true),(¬(y>0),false)}であり、真偽値“true”と
組合せられた条件式は単一の“(y>0)”である。
真偽値ルール適用部102は、例えば、論理積ルールTb1のID=3のレコードの「右辺」カラムに対応する条件式として、リーフ“y>0”の条件式マップ集合から、条件式
“(y>0)”を抽出する。
そして、真偽値ルール適用部102は、論理積ルールTb1のID=3のレコードについての、「全体」カラムに格納された真偽値“true”と組となる条件式マップを生成する。条件式マップは、例えば、左側のノードの条件式マップ集合から集合形式で抽出された条件式、及び、右側のリーフ“y>0”の条件式マップ集合から抽出された条件式(y>0)に基づいて生成される。
真偽値ルール適用部102は、例えば、左側のノードの条件式マップ集合から集合形式で抽出された2通りの条件式のそれぞれと右側のリーフの条件式マップ集合から抽出された条件式とを、合接を表す記号“∧”を用いて結合する。そして、真偽値ルール適用部102は、例えば、各結合した左側のノードの条件式と右側のリーフの条件式に、論理積ルールTb1のID=3のレコードの「全体」カラムに格納された真偽値“true”を組合せ、ID=3の真偽値に対応する条件式マップを生成する。
なお、論理積ルールTb1のID=3のレコードでは、以下に示す条件式マップのように、記号“{}”を用いた集合形式で、条件式マップが生成される。なお、集合形式で生成されたID=3の真偽値に対応する条件式マップは、例えば、論理積ルールTb1のレコードのIDに対応付けられて、主記憶部12の所定の領域に一時的に記憶される。
ID=3の条件式マップ:{((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1)) ∧ (y>0),true),(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)
∧ (y>0),true)}
・条件式マップ集合
図7Hの論理積ルールTb1の、レコード毎に生成した条件式マップに基づいて、同一階層の左側に配置されたノードと右側に配置されたリーフとを結び付ける最上位ノードの処理プロセスについての、真偽値を反映した条件式マップ集合が生成される。真偽値ルール適用部102は、例えば、図7HのブロックD11に示す条件式マップ集合を生成する。
真偽値ルール適用部102は、例えば、論理積ルールTb1のレコード毎に生成した条件式マップを組合せ、以下に示す、最上位ノードの処理プロセスに係る条件式マップ集合を生成する。なお、以下に示す条件式マップ集合は、例えば、判定式C1についての各処理プロセスでの真偽値を反映した各リーフの結合式に相当する。真偽値ルール適用部102は、以下に示す条件式を、例えば、処理対象の判定式の識別番号と対応付けて、条件式
マップ集合DB203に格納する。
判定式C1の条件式マップ集合:{([(x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))]||[((x>0) ∧ ¬(z==5)||¬(x>0) ∧(z==5)) ∧ (y==1) ∧ (z>1)] ∧ ¬(y>0),false)、((x>0) ∧ ¬(z==5) ∧ (y==1) ∧ ¬(z>1) ∧ (y>0),false)、((x>0) ∧ ¬(z==5) ∧ ¬(y==1) ∧ (z>1) ∧ (y>0),false)、(¬(x>0) ∧ (z==5) ∧ (y==1) ∧ ¬(z>1) ∧ (y>0),false)、(¬(x>0) ∧ (z==5) ∧ ¬(y==1) ∧ (z>1) ∧ (y>0),false)、((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1)) ∧ (y>0),true)、(((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1) ∧ (y>0),true)}
[テストケース生成処理]
図6に例示の説明図に戻り、テストケース生成部103は、例えば、真偽値ルール適用部102で生成された判定式C1についての条件式マップ集合に基づいて、MC/DCのテスト網羅度を満たすテストケースの条件式を生成する。テストケース生成部103で生成された、MC/DCのテスト網羅度を満たすテストケースの条件式は、例えば、テストケース条件式DB204に格納される。
テストケース生成部103では、例えば、判定式C1についての条件式マップ集合に含まれる条件式マップ毎に、判定式C1の処理プロセスの真偽値を反映した条件式の抽出が行われる。例えば、判定式C1について生成された条件式マップ集合には7通りの条件式マップが含まれる。このため、判定式C1について生成された条件式マップ集合からは、7通りの条件式が抽出されることとなる。
なお、抽出された各条件式には、例えば、選択演算子を用いて結合された条件式が含まれる。以下の説明においては、選択演算子を用いて結合された条件式を展開して得られた条件式を“部分条件式”とも称する。
テストケース生成部103は、例えば、選択演算子を用いて結合された条件式を展開して分析を行い、展開された部分条件式の中から部分条件式についての変数関係を充足する部分条件式をMC/DCのテスト網羅度を満たすテストケースの条件式として選択する。選択演算子を用いて結合された条件式に対する展開・分析、展開された部分条件式の中から部分条件式についての変数関係を充足する部分条件式の選択は、例えば、選択分析部103aにより行われる。
テストケース生成部103は、例えば、MC/DCのテスト網羅度を満たすテストケースとして選択された条件式、及び、選択された変数関係を充足する部分条件式を充足可能性判定部104に引き渡す。そして、充足可能性判定部104では、例えば、テストケース生成部103から引き渡されたテストケースの条件式、部分条件式に基づいて、それぞれの条件式に含まれる変数値の組合せ(テストセット)が生成される。
(条件式マップ毎の条件式の抽出)
テストケース生成部103は、例えば、条件式マップ集合DB203を参照し、処理対象の判定式に対応付けられた条件式マップ集合を取得する。取得された条件式マップ集合は、例えば、主記憶部12の所定の領域に一時的に記憶される。
テストケース生成部103は、例えば、取得した条件式マップ集合から条件式マップ毎に、判定式の処理プロセスを反映した条件式の抽出を行う。そして、テストケース生成部103は、例えば、条件式マップ集合の条件式マップ毎に抽出された条件式に基づいて、処理対象の判定式に対するテストケース条件式テーブルを生成する。生成されたテストケース条件式テーブルは、例えば、テストケース条件式DB204に格納される。
図8Aに、判定式C1についてのテストケース条件式テーブル例を例示する。判定式C1について生成された条件式マップ集合には7通りの条件式マップが含まれるため、7通りの条件式が抽出される。
図8Aに例示のテストケース条件式テーブルは、「No」カラム、「テストケースの条件式」カラムを有する。「No」カラムには、対象となる判定式の条件式マップ集合における条件式マップの組合せ順に対応した番号が格納される。「テストケースの条件式」カラムには、条件式マップ毎の、処理プロセスを反映した条件式が格納される。「テストケースの条件式」カラムに格納される条件式には、例えば、選択演算子によって結合された条件式が含まれる。
図8Aのテーブル例では、例えば、「No」カラムに格納された番号順に、以下に示す7通りの条件式がそれぞれの番号に対応するレコードに格納されている。なお、図8Aのテーブル例に示すように、選択演算子を用いて結合された条件式は、No=1,6,7のレコードに格納されていることが判る。
・No=1の条件式:[(x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1))]||[((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)] ∧ ¬(y>0)
・No=2の条件式:(x>0) ∧ ¬(z==5) ∧ (y==1) ∧ ¬(z>1) ∧ (y>0)
・No=3の条件式:(x>0) ∧ ¬(z==5) ∧ ¬(y==1) ∧(z>1) ∧ (y>0)
・No=4の条件式:¬(x>0) ∧ (z==5) ∧ (y==1) ∧ ¬(z>1) ∧ (y>0)
・No=5の条件式:¬(x>0) ∧ (z==5) ∧ ¬(y==1) ∧(z>1) ∧ (y>0)
・No=6の条件式:((x>0) ∧ (z==5) ∧ ((y==1) ∧ ¬(z>1)||¬(y==1) ∧(z>1)) ∧
(y>0)
・No=7の条件式:((x>0) ∧ ¬(z==5)||¬(x>0) ∧(z==5)) ∧ (y==1) ∧ (z>1) ∧ (y>0)
(選択分析処理)
テストケース生成部103の選択分析部103aは、例えば、テストケース条件式DB204を参照し、処理対象となる判定式で生成されたテストケース条件式テーブルから、選択演算子が含まれる条件式を抽出する。抽出された条件式は、例えば、該条件式が格納されたテストケース条件式テーブルのレコードの番号(No)に対応付けられて、主記憶部12の所定の領域に一時的に記憶される。例えば、図8Aに例示のテストケース条件式テーブルでは、レコードNo=1,6,7の条件式が順に抽出される。
選択分析部103aは、例えば、抽出された条件式を展開し、選択演算子で結合された選択関係にある部分条件式をそれぞれに抽出する。選択関係にある部分条件式の抽出は、例えば、記号“()”で括られた演算順序の深い(早い)順に、左側に配置された部分条件式を優先的に探索して展開し、展開して得られた部分条件式を抽出する。抽出された選択関係にある部分条件式は、例えば、主記憶部12の所定の領域に一時的に記憶される。
図8B(1)、(2)に、選択分析処理についての説明図を例示する。図8B(1)、(2)に例示の選択分析処理の対象となる条件式は、図8Aに例示のテストケース条件式テーブルのNo=1のレコードに格納された条件式である。なお、図8B(1)、(2)に例示の説明図において、一点鎖線で囲まれた矩形領域は、選択演算子の階層関係において、左側(左項)の選択演算子により結合された条件式を表す。また、図8B(1)に例示の説明図において、破線で囲まれた矩形領域は、選択演算子により結び付けられる条件式の、左側(左項)の条件式を表す。同様にして、図8B(2)に例示の説明図において、太破線で囲まれた矩形領域は、選択演算子により結び付けられる条件式の、右側(右項)の条件式を表す。
図8B(1)に例示の条件式において、選択分析部103aは、例えば、一点鎖線で囲まれた矩形領域に示すように、選択演算子の階層関係において、左側(左項)の選択演算子により結合された条件式を探索する。選択分析部103aは、例えば、条件式“(x>0) ∧ (z==5) ∧((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))”を探索する。
そして、選択分析部103aは、例えば、探索した条件式に選択演算子が含まれる場合には、破線で囲まれた矩形領域に示すように、選択演算子で結合された条件式の内、左側の条件式を特定する。選択分析部103aは、例えば、選択演算子で結合された条件式の内、左側の条件式“(y==1) ∧ ¬(z>1)”を特定する。
そして、選択分析部103aは、例えば、特定した左側の条件式を、上位の選択関係で探索された左側の条件式の演算関係に組合せて展開し、左優先を条件として展開されたNo=1のレコードの条件式についての部分条件式の抽出を行う。抽出された部分条件式は以下の通りである。
・部分条件式1:(x>0) ∧(z==5) ∧ (y==1) ∧ ¬(z>1) ∧ ¬(y>0)
選択分析部103aは、例えば、抽出された部分条件式1について、該部分条件式1に含まれる各変数関係に矛盾を含まず、各変数関係を充足する変数値の組合せが存在するか否かの判定を行う。抽出された部分条件式についての、各変数関係を充足する変数値の組合せの有無は、例えば、充足可能性判定部104により行われる。選択分析部103aは、例えば、抽出された部分条件式1を充足可能性判定部104に引き渡す。
充足可能性判定部104では、例えば、選択分析部103aから引き渡された部分条件式に基づいて、各変数関係を充足する変数値の組合せが生成される。充足可能性判定部104は、例えば、選択分析部103aから引き渡された部分条件式に矛盾が含まれず、各変数関係を充足する変数値の組合せを生成できる場合には、生成された変数値の組合せを選択分析部103aに返却する。一方、充足可能性判定部104は、例えば、選択分析部103aから引き渡された部分条件式が矛盾を含む場合には、各変数関係を充足する変数値の組合せを生成できないため、“充足不能”との応答を選択分析部103aに返却する。
例えば、部分条件式1の場合では、変数zについて“(z==5) ∧ ¬(z>1)”との矛盾関
係を含むため、充足可能性判定部104は、部分条件式C1の各変数関係を充足する変数値の組合せを生成することができない。このため、充足可能性判定部104は、例えば、部分条件式C1を引き渡した選択分析部103aに対して、“充足不能”との応答を返却する。
選択分析部103aは、例えば、充足可能性判定部104からの応答に基づいて、抽出された部分条件式についての、充足可能性を判定する。選択分析部103aは、例えば、充足可能性判定部104に引き渡した部分条件式に対し、“充足不能”との応答が返却された場合には、抽出された部分条件式は充足不能と判定する。一方、選択分析部103aは、例えば、充足可能性判定部104に引き渡した部分条件式に対し、生成された変数値の組合せが返却された場合には、抽出された部分条件式は充足可能と判定する。例えば、部分条件式1の場合では、“充足不能”との応答が返却されるため、選択分析部103aは、抽出した部分条件式1に対して充足不能と判定する。
選択分析部103aは、例えば、抽出した部分条件式が充足不能である場合には、選択分析処理の対象となる条件式“(x>0) ∧ (z==5) ∧((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))”から次の部分条件式の抽出を行う。次の部分条件式の抽出は、例えば、図8B(2
)に例示のように、探索した条件式において、選択演算子で結合された右側の条件式“¬(y==1) ∧ (z>1)”に基づいて行われる。
図8B(2)に例示の条件式において、選択分析部103aは、例えば、一点鎖線の矩形領域の条件式から、太破線で囲まれた矩形領域に示すように、選択演算子で結合された条件式の内、右側の条件式“¬(y==1) ∧ (z>1)”を特定する。
そして、選択分析部103aは、例えば、特定した右側の条件式を、上位の選択関係で探索された左側の条件式の演算関係に組合せて展開し、No=1のレコードの条件式についての次の部分条件式の抽出を行う。抽出された部分条件式は以下の通りである。
・部分条件式2:(x>0) ∧(z==5) ∧ ¬(y==1) ∧ (z>1) ∧ ¬(y>0)
選択分析部103aは、例えば、抽出された部分条件式2について、部分条件式1と同様にして、部分条件式2に含まれる各変数関係に矛盾を含まず、各変数関係を充足する変数値の組合せが存在するか否かの判定を行う。部分条件式2についての、各変数関係を充足する変数値の組合せの有無は、例えば、充足可能性判定部104により行われる。選択分析部103aは、例えば、抽出された部分条件式2を充足可能性判定部104に引き渡す。
充足可能性判定部104では、例えば、選択分析部103aから引き渡された部分条件式に基づいて、各変数関係を充足する変数値の組合せが生成される。例えば、部分条件式2では、変数x、y、zのそれぞれについての範囲関係に矛盾は含まれない。このため、充足可能性判定部104では、例えば、部分条件式2について生成された変数値の組合せが選択分析部103aに返却されることとなる。例えば、充足可能性判定部104は、“(x,y,z)=(1,−1,5)”といった変数値の組合せを選択分析部103aに返却する。
選択分析部103aは、例えば、充足可能性判定部104からの応答に基づいて、抽出された部分条件式2についての、充足可能性を判定する。部分条件式A2の場合では、例えば、“(x,y,z)=(1,−1,5)”との応答が返却されるため、選択分析部103aは、抽出した部分条件式2に対して充足可能と判定する。
選択分析部103aは、充足可能な部分条件式が抽出された場合には、例えば、抽出された部分条件式に基づいて、テストケース条件式テーブルのNo=1のレコードに格納された条件式を更新する。例えば、更新前の条件式“[(x>0) ∧ (z==5) ∧((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1))]||[((x>0) ∧ ¬(z==5)||¬(x>0) ∧ (z==5)) ∧(y==1) ∧ (z>1)] ∧ ¬(y>0)”は、部分条件式“(x>0) ∧ (z==5) ∧ ¬(y==1) ∧ (z>1) ∧ ¬(y>0)”に更新される。
選択分析部103aは、例えば、選択演算子が含まれる他のNo=6,7の条件式についても同様の処理を行い、充足可能と判定された部分条件式でそれぞれのレコードに格納された条件式を更新する。例えば、No=6の更新前の条件式“((x>0) ∧ (z==5) ∧((y==1) ∧ ¬(z>1)||¬(y==1) ∧ (z>1)) ∧ (y>0)”は、部分条件式“(x>0) ∧ (z==5) ∧
¬(y==1) ∧ (z>1) ∧(y>0)”に更新される。また、例えば、No=7の更新前の条件式“((x>0) ∧ ¬(z==5)||¬(x>0) ∧(z==5)) ∧ (y==1) ∧ (z>1) ∧ (y>0)”は、部分条
件式“(x>0) ∧ ¬(z==5) ∧ (y==1) ∧(z>1) ∧ (y>0)”に更新される。
図8Cに、更新前後のテストケース条件式テーブル例を例示する。図8Cに例示の更新前後のテストケース条件式テーブル例では、図8Aに例示のテストケース条件式テーブル例のNo=1,6,7に格納された条件式が上述した部分条件式で更新されていることが
判る。なお、選択分析部103aによって更新されたテストケース条件式テーブルは、例えば、テストケース条件式DB204に格納される。
(テストセット生成処理)
テストケース生成部103は、例えば、選択分析部103aで更新されたテストケース条件式テーブルに基づいて、処理対象となる判定式の真偽値が反映された各条件式を充足する変数値の組合せであるテストセットを生成する。なお、テストセットの生成は、例えば、充足判定部104により行われる。
図8Dに、テストケース生成処理の説明図を例示する。図8Dの説明図において、Tb3は、選択分析部103aで更新されたテストケース条件式テーブルである。テストケース条件式テーブルTb3には、選択演算子によって結合された条件式の中から充足可能と判定された部分条件式を含む7通りの条件式が格納されている。
テストケース生成部103は、例えば、テストケース条件式DB204を参照し、処理対象となる判定式についての、テストケース条件式テーブルTb4を取得する。取得されたテストケース条件式テーブルTb4は、例えば、主記憶部12の所定の領域に一時的に記憶される。
テストケース生成部103は、例えば、テストケース条件式テーブルTb4の各レコードに格納された7通りの条件式を、レコードの識別番号順に抽出し、抽出したレコードの条件式を充足可能性判定部104に引き渡す。
充足可能性判定部104では、例えば、テストケース生成部103から引き渡された条件式に基づいて、条件式に含まれる変数関係を充足する変数値の組合せであるテストセットを生成する。充足可能性判定部104は、例えば、生成した変数値の組合せであるテストセットをテストケース生成部103に引き渡す。テストケース生成部103は、充足可能性判定部104から引き渡されたテストセットを、例えば、テストケース条件式テーブルTb4のレコードのNoに対応付けて、主記憶部12の所定の領域に一時的に記憶する。
充足可能性判定部104は、例えば、条件式に含まれる結合演算子“∧”を検出し、該結合演算子で結び付けられる変数条件を抽出する。例えば、図8Dに例示のテストケース条件式テーブルTb4のNo=1のレコードの条件式では、充足可能性判定部104は、論理演算子“∧”で結合された変数条件“(x>0)”、“(z==5)”、“¬(y==1)”、“(z>1)”、“¬(y>0)”を抽出する。
充足可能性判定部104は、例えば、抽出した各変数条件から変数“x”、“y”、“z”を特定し、“>”、“<”、“==”といった大小関係を表す記号で結合された数値“0”
、“1”等を特定する。そして、充足可能性判定部104は、例えば、各変数に対する数
値との大小関係、及び、各変数条件に付加された否定演算子“¬t”との論理関係から、
変数条件“(x>0)”、“(z==5)”、“¬(y==1)”、“(z>1)”、“¬(y>0)”を充足する
変数値の組合せを生成する。
例えば、充足可能性判定部104は、変数条件“(x>0)”を充足する変数値として“x=1”を生成し、変数条件“¬(y==1)”、“¬(y>0)”を充足する変数値として“y=-1”
を生成する。また、例えば、充足可能性判定部104は、変数条件“(z==5)”、“(z>1)
” を充足する変数値として“z=5”を生成する。そして、充足可能性判定部104は、例えば、引き渡された条件式の変数関係を充足する充足解として“x=1,y=-1,z=5”といった変数値の組合せをテストケース生成部103に引き渡す。
テストケース生成部103、充足可能性判定部104では、例えば、図8Dに例示の、テストケース条件式テーブルTb3のレコードNo=2−7の条件式についても同様の処理を繰り返し、各条件式についての充足解が生成される。テストケース生成部103は、例えば、充足可能性判定部104から引き渡された充足解に基づいて、図8Dに例示のテストケーステーブルTb4を生成する。
なお、充足可能性判定部104では、引き渡された条件式から各変数関係を充足する変数値の組合せを生成できない場合には、“充足不能”との応答をテストケース生成部103に返却する。例えば、テストケース条件式テーブルTb3のレコードNo=4の条件式“¬(x>0) ∧ (z==5) ∧(y==1) ∧ ¬(z>1) ∧ (y>0)”では、変数zについて“(z==5)
∧ ¬(z>1)”といった矛盾が含まれる。このため、テストケース条件式テーブルTb3のレコードNo=4の条件式に対し、充足可能性判定部104は、充足不能”との応答をテストケース生成部103に返却することとなる。
テストケース生成部103は、例えば、“充足不能”といった応答が返却された場合では、対応する条件式のNoのレコードに“UNSAT(充足解なし)”といった情報を格納し、
テストケーステーブルを生成する。図8Dに例示のテストケーステーブルTb4では、例えば、No=4のレコードには、“UNSAT(充足解なし)”といった情報が格納されている
テストケース生成部103は、例えば、生成したテストケーステーブルをテストケースDB205に格納する。そして、テストケース生成部103は、例えば、生成したテストケーステーブルから“UNSAT(充足解なし)”が格納されたNoのレコードを除き、テスト
ケースC2として出力する。
テストケースC2として出力される充足解(テストセット)は、テストケース条件式テーブルTb3において、“UNSAT(充足解なし)”が格納されたレコードを除く6通りのテ
ストセットである。つまり、本実施形態の情報処理装置10は、処理対象となる条件数nの判定式に対して、n+1個を最小数とするn+1通り以上の充足可能性を向上させたMC/DCのテスト網羅度を充足するテストケースを生成し、出力することができる。
〔処理フロー〕
(全体処理)
以下、図9A−9Hに例示のフローチャートを参照し、本実施形態の情報処理装置10の、MC/DCのテスト網羅度を満たすテストケース生成処理を説明する。図9A−9Bは、MC/DCのテスト網羅度を満たすテストケース生成処理の全体処理を示すフローチャートの例示である。
図9Aに例示のフローチャートにおいて、MC/DCのテスト網羅度を満たすテストケース生成処理の開始は、例えば、テスト対象となるプログラムの判定式の受け付けのときが例示できる。情報処理装置10は、例えば、受け付けた判定式を解析し、判定式に含まれる論理演算子、論理演算子で結合される各条件式、論理演算子による各条件式についての処理プロセスの階層関係を特定する。そして、情報処理装置10は、例えば、特定した論理演算子、各条件式、処理プロセスの階層関係に基づいて、受け付けた判定式の各条件式の階層的な論理演算関係を二分木構造に変換する(S1)。なお、受け付けた判定式に対する二分木構造の変換処理は、図7Aで説明した。
情報処理装置10は、S1の処理の結果、例えば、処理対象となる判定式についての判定式二分木を生成する。生成された判定式二分木は、例えば、受け付けた判定式の識別情
報に対応付けられて、判定式二分木DB202に格納される。
情報処理装置10は、例えば、S1の処理で生成した、処理対象の判定式についての二分木構造(判定式二分木)に基づいて、階層的な論理演算関係に係る処理プロセスについての条件式マップ集合を生成する(S2)。情報処理装置10は、例えば、二分木構造で階層化されたノード関係、ノード/リーフ関係に対して、組合せルールが反映された論理積、論理和の基本ルールである真偽値ルール適用処理を適用することにより、条件式マップ集合の生成を行う。なお、S2の真偽値ルール適用処理については、図9C−9Gで詳細を説明する。
情報処理装置10は、例えば、S2の処理の結果、生成された判定式についての条件式マップ集合を、受け付けた判定式の識別情報に対応付けて条件式マップ集合DB203に格納する。
S3の処理では、情報処理装置10は、例えば、条件式マップ集合DB203を参照し、処理対象となる判定式について生成された条件式マップ集合を取得する。取得した条件式マップ集合は、例えば、主記憶部12の所定の領域に一時的に記憶される。そして、情報処理装置10は、例えば、条件式マップ集合に含まれる条件式マップ毎に、判定式の処理プロセスの真偽値を反映した条件式の抽出を行う。そして、情報処理装置10は、例えば、条件式マップ毎に抽出された条件式に基づいて、処理対象の判定式に対するテストケース条件式テーブルを生成する。なお、条件式マップ集合に基づくテストケース条件式テーブルの生成処理は、図8Aで説明した。
ここで、S3の処理で生成されたテストケース条件式テーブルには、選択演算子を用いて結合された条件式が含まれる。情報処理装置10は、例えば、選択演算子を用いて結合された条件式が含まれるテストケース条件式テーブルを、処理対象の判定式の識別情報に対応付けてテストケース条件式DB204に格納する。
図9Bに例示のフローチャートにおいて、S4−S8の処理では、情報処理装置10は、テストケース条件式テーブルの選択演算子を用いて結合された条件式を展開し、部分条件式を生成する。そして、S4−S8の処理では、例えば、情報処理装置10は、生成された部分条件式について、矛盾を含む変数関係の有無を判定する。
S4−S8の処理では、情報処理装置10は、例えば、部分条件式が矛盾を含む変数関係を有する場合には、該部分条件式と選択関係にある他の部分条件式を生成し、選択関係にある他の部分条件式についての、矛盾を含む変数関係の有無を判定する。一方、情報処理装置10は、例えば、部分条件式の変数関係に矛盾が含まれない場合には、生成した部分条件式に基づいて、テストケース条件式テーブルを更新する。テストケース条件式テーブルの、選択演算子を用いて結合された条件式は、変数関係に矛盾が含まれない部分条件式により更新される。
S4の処理では、情報処理装置10は、例えば、テストケース条件式DB204を参照し、S3の処理で生成されたテストケース条件式テーブルを取得する。取得したテストケース条件式テーブルは、例えば、主記憶部12の所定の領域に一時的に記憶される。そして、情報処理装置10は、例えば、テストケース条件式テーブルに、未処理のテストケース条件式が存在するかを判定する。
情報処理装置10は、例えば、テストケース条件式テーブルに未処理のテストケース条件式が存在しない場合には(S4,no)、S9の処理に移行する。一方、情報処理装置10は、例えば、テストケース条件式テーブルに未処理のテストケース条件式が存在する
場合には(S4,yes)、S5の処理に移行する。S5の処理では、情報処理装置10は、テストケース条件式テーブルから、処理対象となるテストケース条件式を抽出する。
S6の処理では、情報処理装置10は、例えば、S5の処理で抽出されたテストケース条件式に選択演算子を表す選択記号“||”が含まれるか否かを判定する。情報処理装置10は、例えば、S5の処理で抽出されたテストケース条件式に選択演算子を表す選択記号“||”が含まれない場合には(S6,no)、S4―S5の処理を繰り返す。一方、情報処理装置10は、例えば、S5の処理で抽出されたテストケース条件式に選択演算子を表す選択記号“||”が含まれる場合には(S6,yes)、S7の処理に移行する。
S7の処理では、情報処理装置10は、例えば、テストケース条件式を選択関係に基づいて展開し、部分条件式を生成する(テストケース選択処理)。そして、情報処理装置10は、例えば、生成された部分条件式について矛盾を含む変数関係の有無を判定し、変数関係に矛盾を含まない部分条件式を選択されたテストケース条件式として取得する。なお、S7の処理については、図9Hで詳細を説明する。
S8の処理では、情報処理装置10は、例えば、S7の処理で選択されたテストケースとして取得された部分条件式に基づいて、対応するテストケース条件式テーブル内のテストケース条件式を更新する。更新されたテストケース条件式テーブルは、例えば、テストケース条件式DB204に格納される。
S9−S12の処理では、情報処理装置10は、例えば、テストケース条件式テーブルに格納されたテストケース条件式に基づいて、MC/DCのテスト網羅度を充足する変数値の組合せであるテストセットを生成する。そして、情報処理装置10は、例えば、テストケース条件式毎に生成されたテストセットに基づいて、テストケーステーブルを生成する。生成されたテストケーステーブルは、例えば、テストケースDB205に格納される。
S9の処理では、情報処理装置10は、例えば、テストケース条件式DB204を参照し、S8の処理で更新されたテストケース条件式テーブルを取得する。取得したテストケース条件式テーブルは、例えば、主記憶部12の所定の領域に一時的に記憶される。そして、情報処理装置10は、例えば、テストケース条件式テーブルに、未処理のテストケース条件式が存在するかを判定する。なお、S8の処理で更新されたテストケース条件式テーブル内には、選択演算子により結合された条件式は含まれない。
情報処理装置10は、例えば、テストケース条件式テーブルに未処理のテストケース条件式が存在しない場合には(S9,no)、S12の処理に移行する。一方、情報処理装置10は、例えば、テストケース条件式テーブルに未処理のテストケース条件式が存在する場合には(S9,yes)、S10の処理に移行する。S10の処理では、情報処理装置10は、テストケース条件式テーブルから、処理対象となるテストケース条件式を抽出する。
S11の処理では、情報処理装置10は、例えば、S10の処理で抽出されたテストケース条件式を充足可能性判定部104に引き渡し、テストケース条件式についての充足解を取得する。情報処理装置10は、例えば、充足可能性判定部104から返却された各変数値の組合せであるテストセットを、引き渡したテストケース条件式に対する充足解として取得する。取得した充足解は、例えば、テストケーステーブルに格納される。
情報処理装置10は、例えば、S9−S11の処理を繰り返し、S9の処理で取得したテストケース条件式テーブルにテストケーステーブルを生成する。S12の処理では、例
えば、S9の処理でテストケース条件式DB204から取得したテストケース条件式テーブルに基づいて生成されたテストケーステーブルが情報処理装置10に返却される。
情報処理装置10は、例えば、S12の処理で返却されたテストケーステーブルを、処理対象の判定式の識別情報に対応付けられてテストケーステーブルDB205に格納する。なお、S10−S12の処理は、図8Dで説明した。
ここで、情報処理装置10で実行されるS1の処理は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップの一例である。また、情報処理装置10のCPU11等は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段の一例としてS1の処理を実行する。
また、情報処理装置10で実行されるS2の処理は、演算子による演算結果の真偽値と演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たす演算対象式を特定し、所定関係にある演算対象式が複数特定される場合に、特定される複数の演算対象式を保持して、演算対象式の真偽値を求める解析ステップの一例である。また、情報処理装置10のCPU11等は、演算子による演算結果の真偽値と演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たす演算対象式を特定し、所定関係にある演算対象式が複数特定される場合に、特定される複数の演算対象式を保持して、演算対象式の真偽値を求める解析手段の一例としてS2の処理を実行する。
また、情報処理装置10で実行されるS4−S8の処理は、所定関係にある複数の演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する選択ステップの一例である。また、情報処理装置10のCPU11等は、所定関係にある複数の演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する選択手段の一例としてS4−S8の処理を実行する。
(真偽値ルール適用処理)
図9C−9Gに例示のフローチャートを参照し、図9Aに例示のS2の真偽値ルール適用処理を説明する。なお、図9Cに例示のS21−S25の処理、図9D−9Eに例示のS31−S44の処理、図9F−9Gに例示のS51−S64の処理は、例えば、図7B−7Hで説明した。
図9Cに例示のフローチャートにおいて、情報処理装置10は、例えば、二分木構造において、処理対象のルートがリーフであることを判定する(S21)。情報処理装置10は、例えば、処理対象のルートがリーフである場合には(S21,yes)、S25の処理に移行する。S25の処理では、情報処理装置10は、例えば、処理対象のリーフについて条件式マップ集合{(リーフ,true),(¬(リーフ),false)}を生成し、処理中のテストケース生成処理に返却する。
一方、情報処理装置10は、例えば、処理対象のルートがリーフでない場合には(S21,no)、S22の処理に移行し、処理対象のルートが“or”演算子であることを判定する。情報処理装置10は、例えば、処理対象のルートが“or”演算子である場合には(S22,yes)、S24の処理に移行する。一方、情報処理装置10は、例えば、処理対象のルートが“or”演算子でない場合には(S22,no)、S23の処理に移行する。
S23の処理では、例えば、情報処理装置10は論理積のノード処理に係る左子木(左側のノード、或いは、リーフ)に真偽値ルール適用処理を適用し条件式マップ集合を生成
する。また、例えば、情報処理装置10は論理積のノード処理に係る右子木(右側のノード、或いは、リーフ)に真偽値ルール適用処理を適用し条件式マップ集合を生成する。
そして、情報処理装置10は、例えば、左右子木のそれぞれについて生成された条件式マップ集合から、論理積のノードに係る処理プロセス(AND演算子処理)についての真偽値を反映した条件式マップ集合を生成し、処理中のテストケース生成処理に返却する。なお、S23の処理については、図9D−9Eで詳細を説明する。
S24の処理では、例えば、情報処理装置10は論理和のノード処理に係る左子木(左側のノード、或いは、リーフ)に真偽値ルール適用処理を適用し条件式マップ集合を生成する。また、例えば、情報処理装置10は論理和のノード処理に係る右子木(右側のノード、或いは、リーフ)に真偽値ルール適用処理を適用し条件式マップ集合を生成する。
そして、情報処理装置10は、例えば、左右子木のそれぞれについて生成された条件式マップ集合から、論理和のノードに係る処理プロセス(OR演算子処理)についての真偽値を反映した条件式マップ集合を生成し、処理中のテストケース生成処理に返却する。なお、S24の処理については、図9F−9Gで詳細を説明する。
なお、S23−S24の処理において、真偽値ルールを適用した条件式マップ集合の生成は、例えば、真偽値ルールDB201に格納された論理積ルールTb1、論理和ルールTb2に基づいて行われる。真偽値ルールDB201に格納された論理積ルールTb1、論理和ルールTb2には、組合せルールが反映されている。
ここで、情報処理装置10で実行されるS21−S25の処理は、所定関係を満たす演算対象式の真偽値を用いて階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に取得ステップと解析ステップとを適用するステップの一例である。また、情報処理装置10のCPU11等は、所定関係を満たす演算対象式の真偽値を用いて階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に取得ステップと解析ステップとを適用する手段の一例としてS21−S25の処理を実行する。
・AND演算子処理
図9D−9Eに例示のフローチャートを参照し、図9Cに例示のS23のAND演算子処理を説明する。なお、以下の説明では、論理積のノード処理に係る左子木で生成された条件式マップ集合を“左マップ集合”とも称し、右子木で生成された条件式マップ集合を“右マップ集合”とも称する。
図9Dに例示のフローチャートにおいて、情報処理装置10は、例えば、左マップ集合から真偽値“true”と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、選択演算子で結合された結合式“leftcond1”を生成する(S31)
。生成された結合式“leftcond1”は以下の通りである。なお、条件式に付加された識別
子“n”は、抽出された条件式マップの数量を表す。
・leftcond1:=(条件式1||…||条件式n)
S32の処理では、情報処理装置10は、例えば、右マップ集合から真偽値“false”
と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“rightcond1”を生成する。なお、抽出した条件式マップが複数の場合には、“rightcond1”は、集合を表す記号“{}”を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond1:{(条件式1),…,(条件式n)}
S33の処理では、情報処理装置10は、例えば、S32の処理で生成した“rightcon
d1”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“rightcond1”の中に未処理の条件式が存在する場合には(S33,yes)、S34の処理に移行する。一方、情報処理装置10は、例えば、“rightcond1”の中に未処理の条件式が存在しない場合には(S33,no)、S35の処理に移行する。
S34の処理では、情報処理装置10は、例えば、S32の処理で生成した“rightcond1”から条件式(rightcond1)を抽出し、抽出した条件式(rightcond1)を“leftcond1”と
結合演算子“∧”で結合する。条件式(rightcond1)には、複数の条件式が含まれる。“leftcond1”と条件式(rightcond1)との結合式は、“leftcond1 ∧ rightcond1”で表される。
そして、情報処理装置10は、例えば、結合式“leftcond1 ∧ rightcond1”と論理積
ルールTb1のID=1の真偽値“false”とを組合せた条件式マップ(leftcond1 ∧ rightcond1,false)を生成する。情報処理装置10は、例えば、生成した条件式マップを返
却用条件式マップ集合に追加する。
情報処理装置10は、例えば、S33−S34の処理を繰り返すことにより、論理積ルールTb1のID=1のレコードに対応した、条件式マップを生成することができる。
次に、情報処理装置10は、例えば、S35−S38の処理により、論理積ルールTb1のID=2のレコードに対応した、条件式マップを生成する。
情報処理装置10は、例えば、右マップ集合から真偽値“true”と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、選択演算子で結合された結合式“rightcond2”を生成する(S35)。生成された結合式“rightcond2”は以下の通りである。なお、条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond2:=(条件式1||…||条件式n)
S36の処理では、情報処理装置10は、例えば、左マップ集合から真偽値“false”
と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“leftcond2”を生成する。なお、抽出した条件式マップが複数の場合には、“leftcond2”は、集合を表す記号を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・leftcond2:{(条件式1),…,(条件式n)}
S37の処理では、情報処理装置10は、例えば、S36の処理で生成した“leftcond2”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“leftcond2”の中に未処理の条件式が存在する場合には(S37,yes)、S38の処理に移行する。一方、情報処理装置10は、例えば、“leftcond2”の中に未処理の条件式が
存在しない場合には(S37,no)、図9Eに例示するフローチャートのS39の処理に移行する。
S38の処理では、情報処理装置10は、例えば、S36の処理で生成した“leftcond2”から条件式(leftcond2)を抽出し、抽出した条件式(leftcond2)を“rightcond2”と結
合演算子“∧”で結合する。S34と同様に、条件式(leftcond2)には、複数の条件式が
含まれる。“leftcond2”と条件式(rightcond2)との結合式は、“leftcond2 ∧ rightcond2”で表される。
そして、情報処理装置10は、例えば、結合式“leftcond2 ∧ rightcond2”と論理積
ルールTb1のID=2の真偽値“false”とを組合せた条件式マップ(leftcond2 ∧ rightcond2,false)を生成する。情報処理装置10は、例えば、生成した条件式マップを返
却用条件式マップ集合に追加する。
次に、情報処理装置10は、例えば、図9Eに例示するフローチャートのS39−S43の処理により、論理積ルールTb1のID=3のレコードに対応した、条件式マップを生成する。
図9Eに例示のフローチャートにおいて、情報処理装置10は、例えば、左マップ集合から真偽値“true”と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“leftcond3”を生成する(S39)。なお、抽出した条件式マップ
が複数の場合には、“leftcond3”は、集合を表す記号を用いて以下のように表される。
条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・leftcond3:{(条件式1),…,(条件式n)}
同様にして、情報処理装置10は、例えば、右マップ集合から真偽値“true”と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“rightcond3”を生成する(S40)。抽出した条件式マップが複数の場合には、“rightcond3”は、集合を表す記号を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond3:{(条件式1),…,(条件式n)}
S41の処理では、情報処理装置10は、例えば、S39の処理で生成した“leftcond3”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“leftcond3”の中に未処理の条件式が存在する場合には(S41,yes)、S42の処理に移行する。一方、情報処理装置10は、例えば、“leftcond3”の中に未処理の条件式が
存在しない場合には(S41,no)、S44の処理に移行する。
S42の処理では、情報処理装置10は、例えば、S40の処理で生成した“rightcond3”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“rightcond3”の中に未処理の条件式が存在する場合には(S42,yes)、S43の処理に移行する。一方、情報処理装置10は、例えば、“rightcond3”の中に未処理の条件式が存在しない場合には(S42,no)、S41の処理を繰り返す。
S43の処理では、情報処理装置10は、例えば、S39の処理で生成した“leftcond3”から条件式(leftcond3)を抽出し、S40の処理で生成した“rightcond3”から条件式(rightcond3)を抽出する。そして、情報処理装置10は、例えば、抽出した各条件式を結合し、結合した各条件式と論理積ルールTb1のID=3の真偽値“true”とを組合せた条件式マップ(leftcond3 ∧ rightcond3,true)を生成する。情報処理装置10は、例え
ば、生成した条件式マップを返却用条件式マップ集合に追加する。
情報処理装置10は、例えば、S41−S43の処理を繰り返すことにより、論理積ルールTb1のID=3のレコードに対応した、条件式マップを生成することができる。
S44の処理では、情報処理装置10は、例えば、S34,S38,S43の処理で生成された条件式マップが格納された返却用条件式マップ集合を、処理中の真偽値ルール適用処理に返却する。
・OR演算子処理
図9F−9Gに例示のフローチャートを参照し、図9Cに例示のS24のOR演算子処
理を説明する。以下の説明においても、AND演算子処理と同様に、論理和のノード処理に係る左子木で生成された条件式マップ集合を“左マップ集合”とも称し、右子木で生成された条件式マップ集合を“右マップ集合”とも称する。
情報処理装置10は、例えば、図9Fに例示のフローチャートのS51−S54の処理により、論理和ルールTb2のID=1のレコードに対応した、条件式マップを生成する。同様にして、情報処理装置10は、例えば、図9Fに例示のフローチャートのS55−S58の処理により、論理和ルールTb2のID=2のレコードに対応した、条件式マップを生成する。また、情報処理装置10は、例えば、図9Gに例示のフローチャートのS59−S63の処理により、論理和ルールTb2のID=3のレコードに対応した、条件式マップを生成する。
図9Fに例示のフローチャートにおいて、情報処理装置10は、例えば、右マップ集合から真偽値“false”と組となった条件式マップを全て抽出し、抽出した各条件式マップ
の条件式に基づいて、選択演算子で結合された結合式“rightcond1”を生成する(S51)。生成された結合式“rightcond1”は以下の通りである。なお、条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond1:=(条件式1||…||条件式n)
S52の処理では、情報処理装置10は、例えば、左マップ集合から真偽値“true”と組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“leftcond1”を生成する。なお、抽出した条件式マップが複数の場合には、“leftcond1”は、集合を表す記号“{}”を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・leftcond1:{(条件式1),…,(条件式n)}
S53の処理では、情報処理装置10は、例えば、S52の処理で生成した“leftcond1”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“leftcond1”の中に未処理の条件式が存在する場合には(S53,yes)、S54の処理に移行する。一方、情報処理装置10は、例えば、“leftcond1”の中に未処理の条件式が
存在しない場合には(S53,no)、S55の処理に移行する。
S54の処理では、情報処理装置10は、例えば、S52の処理で生成した“leftcond1”から条件式(leftcond1)を抽出し、抽出した条件式(leftcond1)を“rightcond1”と結
合演算子“∧”で結合する。条件式(leftcond1)には、複数の条件式が含まれる。“leftcond1”と条件式(rightcond1)との結合式は、“leftcond1 ∧ rightcond1”で表される。
そして、情報処理装置10は、例えば、結合式“leftcond1 ∧ rightcond1”と論理和
ルールTb2のID=1の真偽値“true”とを組合せた条件式マップ(leftcond1 ∧ rightcond1,true)を生成する。情報処理装置10は、例えば、生成した条件式マップを返却
用条件式マップ集合に追加する。
次に、情報処理装置10は、例えば、左マップ集合から真偽値“false”と組となった
条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、選択演算子で結合された結合式“leftcond2”を生成する(S55)。生成された結合式“leftcond2”は以下の通りである。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・leftcond2:=(条件式1||…||条件式n)
S56の処理では、情報処理装置10は、例えば、右マップ集合から真偽値“true”と
組となった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“rightcond2”を生成する。なお、抽出した条件式マップが複数の場合には、“rightcond2”は、集合を表す記号を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond2:{(条件式1),…,(条件式n)}
S57の処理では、情報処理装置10は、例えば、S56の処理で生成した“rightcond2”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“rightcond2”の中に未処理の条件式が存在する場合には(S57,yes)、S58の処理に移行する。一方、情報処理装置10は、例えば、“rightcond2”の中に未処理の条件式が存在しない場合には(S57,no)、図9Gに例示するフローチャートのS59の処理に移行する。
S58の処理では、情報処理装置10は、例えば、S56の処理で生成した“rightcond2”から条件式(rightcond2)を抽出し、抽出した条件式(rightcond2)を“leftcond2”と
結合演算子“∧”で結合する。条件式(rightcond2)には、複数の条件式が含まれる。“leftcond2”と条件式(rightcond2)との結合式は、“leftcond2 ∧ rightcond2”で表される。
そして、情報処理装置10は、例えば、結合式“leftcond2 ∧ rightcond2”と論理和
ルールTb2のID=2の真偽値“true”とを組合せた条件式マップ(leftcond2 ∧ rightcond2,true)を生成する。情報処理装置10は、例えば、生成した条件式マップを返却
用条件式マップ集合に追加する。
図9Gに例示のフローチャートにおいて、情報処理装置10は、例えば、左マップ集合から真偽値“false”と組となった条件式マップを全て抽出し、抽出した各条件式マップ
の条件式に基づいて、“leftcond3”を生成する(S59)。なお、抽出した条件式マッ
プが複数の場合には、“leftcond3”は、集合を表す記号を用いて以下のように表される
。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・leftcond3:{(条件式1),…,(条件式n)}
同様にして、情報処理装置10は、例えば、右マップ集合から真偽値“false”と組と
なった条件式マップを全て抽出し、抽出した各条件式マップの条件式に基づいて、“rightcond3”を生成する(S60)。抽出した条件式マップが複数の場合には、“rightcond3”は、集合を表す記号を用いて以下のように表される。条件式に付加された識別子“n”は、抽出された条件式マップの数量を表す。
・rightcond3:{(条件式1),…,(条件式n)}
S61の処理では、情報処理装置10は、例えば、S59の処理で生成した“leftcond3”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“leftcond3”の中に未処理の条件式が存在する場合には(S61,yes)、S62の処理に移行する。一方、情報処理装置10は、例えば、“leftcond3”の中に未処理の条件式が
存在しない場合には(S61,no)、S64の処理に移行する。
S62の処理では、情報処理装置10は、例えば、S60の処理で生成した“rightcond3”の中に未処理の条件式が存在するかを判定する。情報処理装置10は、例えば、“rightcond3”の中に未処理の条件式が存在する場合には(S62,yes)、S63の処理に移行する。一方、情報処理装置10は、例えば、“rightcond3”の中に未処理の条件式が存在しない場合には(S62,no)、S61の処理を繰り返す。
S63の処理では、情報処理装置10は、例えば、S59の処理で生成した“leftcond3”から条件式(leftcond3)を抽出し、S60の処理で生成した“rightcond3”から条件式(rightcond3)を抽出する。そして、情報処理装置10は、例えば、抽出した各条件式を結合し、結合した各条件式と論理和ルールTb2のID=3の真偽値“false”とを組合せ
た条件式マップ(leftcond3 ∧ rightcond3,false)を生成する。情報処理装置10は、例えば、生成した条件式マップを返却用条件式マップ集合に追加する。
S64の処理では、情報処理装置10は、例えば、S54,S58,S63の処理で生成された条件式マップが格納された返却用条件式マップ集合を、処理中の真偽値ルール適用処理に返却する。
(テストケース選択処理)
図9Hに例示のフローチャートを参照し、図9Bに例示のS7のテストケース選択処理を説明する。なお、図9Hに例示のS71−S75の処理については、例えば、図8B(1)、(2)で説明した。
図9Hに例示のフローチャートにおいて、情報処理装置10は、例えば、処理対象となるテストケース条件式について、選択演算子“||”を分岐とみなした深さ優先の探索が終了したかを判定する(S71)。情報処理装置10は、例えば、処理対象となるテストケース条件式に対し、選択演算子を分岐とみなした深さ優先の探索が終了した場合には(S71,yes)、S76の処理に移行し、空の状態の条件式を処理中のテストケース生成処理に返却する。なお、情報処理装置10では、例えば、S76の処理で空の状態の条件式が返却された場合には、処理対象のテストケース条件式は充足不能であると判定される。
一方、情報処理装置10は、例えば、処理対象となるテストケース条件式に対し、選択演算子を分岐とみなした深さ優先の探索が終了しない場合には(S71,no)、S72の処理に移行する。
S72の処理では、情報処理装置10は、例えば、処理対象となるテストケース条件式に対し、選択演算子“||”を分岐とみなした深さ優先の探索を行い、選択関係を展開して生成された部分条件式を処理対象のテストケース条件式として選択する。なお、S72の処理で生成される部分条件式には、例えば、選択演算子は含まれない。
情報処理装置10は、例えば、S72の処理で選択されたテストケース条件式である部分条件式を、充足可能性判定部104に引き渡し、引き渡した部分条件式の充足可能性の判定を行う(S73)。引き渡した部分条件式の充足可能性は、例えば、充足可能性判定部104から返却される応答情報により行われる。
例えば、情報処理装置10は、充足可能性判定部104から、“充足不能”を表す空の状態の変数値の組合せ等が応答情報として返却された場合には、処理対象の部分条件式について充足不能と判定する。また、例えば、情報処理装置10は、充足可能性判定部104から、部分条件式に含まれる変数値の組合せであるテストセットが応答情報として返却された場合には、処理対象の部分条件式について充足可能と判定する。
S74の処理では、情報処理装置10は、例えば、上述した判定に基づいて、S72の処理で選択された部分条件式の充足可能性を判定する。情報処理装置10は、例えば、S72の処理で選択された部分条件式が充足不能の場合には(S74,no)、S71の処理に移行し、選択関係にある他の部分条件式に対してS71−S74の処理を繰り返す。
一方、情報処理装置10は、例えば、S72の処理で選択された部分条件式が充足可能である場合には(S74,yes)、S75の処理に移行し、選択された部分条件式をテストケース条件式として処理中のテストケース生成処理に返却する。テストケース生成処理では、例えば、S75の処理で返却された部分条件式に基づいて、テストケース条件式テーブルに格納された、選択演算子を含むテストケース条件式が更新される。
以上、説明したように、本実施形態の情報処理装置10は、テスト対象となる判定式を解析し、判定式に含まれる論理演算子、論理演算子で結合される各条件式、論理演算子による各条件式についての処理プロセスの階層関係を特定することができる。本実施形態の情報処理装置10は、例えば、特定した論理演算子、各条件式、処理プロセスの階層関係に基づいて、判定式に含まれる各条件式の階層的な論理演算関係を二分木構造に変換することができる。
また、本実施形態の情報処理装置10は、判定式の論理演算関係について、論理積、論理和等の基本ルールとなる、3通りの真偽値の組合せを格納した真偽値表を備えることができる。本実施形態の情報処理装置10は、基本ルールの真偽値表に格納された3通りの真偽値の組合せを判定式の論理演算関係に適用することで、論理演算の処理プロセスに係る各条件式についての真偽値の組合せから、余剰となる条件式の真偽値の組合せを排除できる。
また、本実施形態の各真偽値表には、真偽値の判定結果に独立に影響しない(対象となる条件式の真偽値を反転しても判定結果が変わらない)場合には、判定結果が共通する条件式の組合せを選択演算子で結合して抽出すると言う組合せルールが反映できる。同様に、本実施形態の各真偽値表には、真偽値の判定結果に独立に影響する(対象となる条件式の真偽値を反転すると判定結果が変わる)場合には、判定結果が共通する条件の組合せを全て抽出すると言う組合せルールが反映できる。本実施形態の情報処理装置10では、論理積、論理和の真偽値表に基づいて判定結果が共通する条件式の組合せの抽出の際に、充足不能な変数関係にある条件式の組合せが抽出されることを防止することができる。
本実施形態の情報処理装置10は、組合せルールが反映された論理積・論理和の真偽値表に格納された真偽値に従って、判定式に含まれる論理演算の処理プロセスに係る各条件式の真偽値関係を、選択肢を含み特定することができる。情報処理装置10は、例えば、判定式の論理演算に対応する真偽値表に格納された真偽値と一致する判定結果となる、各条件式の真偽値の組合せを特定することができる。特定された各条件式の真偽値の組合せには、選択演算子で結合された、判定結果の真偽値が共通する条件式の複数の組合せが含まれる。
本実施形態の情報処理装置10は、階層化された最上位の論理演算子で結び付く上位の各条件式の真偽値関係を特定し、さらに、上位の各条件式に係る下位の演算処理プロセスについての下位の条件式の真偽値関係を階層的(再帰的)に求めることができる。そして、本実施形態の情報処理装置10は、最上位の論理演算の処理プロセスで特定された各条件式について、選択関係にある複数の条件式を展開し、充足可能な変数関係にある条件式の組合せを選択することができる。
この結果、本実施形態の情報処理装置10は、テスト対象となる判定式について、充足可能性を向上させ、冗長性を排除した、MC/DCのテスト網羅度を満たす、各条件式についての真偽値の組合せを生成することができる。本実施形態の情報処理装置10は、生成された各条件式の真偽値の組合せから、各条件式に含まれる各変数について、変数関係に矛盾を含まない、真偽値の値に応じた変数値の組合せをテストケースとして生成することができる。本実施形態の情報処理装置10では、複数の条件式に共通する変数が含まれ
る場合であっても、変数関係を充足する変数値の組合せを生成することができる。
本実施形態の情報処理装置10では、充足可能性を向上させた、冗長性を排除可能な、MC/DCのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置(以下、コンピュータ等)に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD−ROM、CD−R/W、DVD、ブルーレイディスク、DAT、8mmテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやROM等がある。
《その他》
以上の実施形態は、さらに以下の付記と呼ぶ態様を含む。以下の各付記に含まれる構成要素は、他の付記に含まれる構成と組み合わせることができる。
(付記1)
コンピュータに、
演算子による演算結果の真偽値と前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たす演算対象式を特定し、前記所定関係にある演算対象式が複数特定される場合に、特定される複数の演算対象式を保持して、前記演算対象式の真偽値を求める解析ステップと、
前記所定関係にある複数の前記演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する選択ステップと、
を実行させるためのテストケース生成プログラム。
(付記2)
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
をさらに実行させる付記1に記載のテストケース生成プログラム。
(付記3)
前記選択ステップは、前記演算対象式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定する、付記1または付記2に記載のテストケース生成プログラム。
(付記4)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記2または付記3に記載のテストケース生成プログラム。
(付記5)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択するステップを含む、付記4に記載のテストケース生成プログラム。
(付記6)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、付記4に記載のテストケース生成プログラム。
(付記7)
前記解析ステップは、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記4から付記6の何れか一の付記に記載のテストケース生成プログラム。
(付記8)
前記解析ステップは、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記4から付記6の何れか一の付記に記載のテストケース生成プログラム。
(付記9)
第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が真となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記7に記載のテストケース生成プログラム。
(付記10)
第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が偽となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記8に記載のテストケース生成プログラム。
(付記11)
コンピュータを用いてテストケースを生成する方法であって、
前記コンピュータの有するプロセッサが、
演算子による演算結果の真偽値と前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たす演算対象式を特定し、前記所定関係にある演算対象式が複数特定される場合に、特定される複数の演算対象式を保持して、前記演算対象式の真偽値を求め、
前記所定関係にある複数の前記演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する、
テストケース生成方法。
(付記12)
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得し、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子
で結合される演算対象式以下の論理式に前記取得と前記演算対象式の真偽値を求めることとを行う、付記11に記載のテストケース生成方法。
(付記13)
前記充足可能と判定された演算対象式を選択することは、前記演算対象式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定する、付記11または付記12に記載のテストケース生成方法。
(付記14)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記12または付記13に記載のテストケース生成方法。
(付記15)
前記演算対象式の真偽値を求めることは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択することを含む、付記14に記載のテストケース生成方法。
(付記16)
前記演算対象式の真偽値を求めることは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択することを含む、付記14に記載のテストケース生成方法。
(付記17)
前記演算対象式の真偽値を求めることは、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択することを含む、付記14から付記16の何れか一の付記に記載のテストケース生成方法。
(付記18)
前記演算対象式の真偽値を求めることは、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択することを含む、付記14から付記16の何れか一の付記に記載のテストケース生成方法。
(付記19)
第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が真となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記17に記載のテストケース生成方法。
(付記20)
第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が偽となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記18に記載のテストケース生成方法。
(付記21)
演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、且つ、前記所定関係にある複数の前記演算対象式の中から一の演算対象式を選択可能なように、前記演算対象式の真偽値を求める解析手段と、
前記所定関係にある複数の前記演算対象式について演算対象式の充足可能性を判定し、充足可能と判定された演算対象式を選択する選択手段と、
を備えるテストケース生成装置。
(付記22)
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段と、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得手段と前記解析手段とを適用する手段と、
をさらに備える付記21に記載のテストケース生成装置。
(付記23)
前記選択手段は、前記演算対象式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定する、付記21または付記22に記載のテストケース生成装置。
(付記24)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記22または付記23に記載のテストケース生成装置。
(付記25)
前記解析手段は、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択する手段を含む、付記24に記載のテストケース生成装置。
(付記26)
前記解析手段は、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択する手段を含む、付記24に記載のテストケース生成装置。
(付記27)
前記解析手段は、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択する手段を含む、付記24から付記26の何れか一の付記に記載のテストケース生成装置。
(付記28)
前記解析手段は、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択する手段を含む、付記24から付記26の何れか一の付記に記載のテストケース生成装置。
(付記29)
第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの
第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が真となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記27に記載のテストケース生成装置。
(付記30)
第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が偽となる演算対象式を選択可能な演算対象式として選択演算子で結合する、付記28に記載のテストケース生成装置。
10 情報処理装置
11 CPU
12 主記憶部
13 補助記憶部
14 入力部
15 出力部
16 通信部
101 判定式解析部
101a 二分木変換部
102 真偽値ルール適用部
103 テストケース生成部
103a 選択分析部
104 充足可能性判定部
201 真偽値ルールDB
202 判定式二分木DB
203 条件式マップ集合DB
204 テストケース条件式DB
205 テストケースDB
Tb1 論理積ルール真偽値表
Tb2 論理和ルール真偽値表
Tb3 テストケース条件式テーブル
Tb4 テストケーステーブル

Claims (12)

  1. コンピュータに、
    演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求める解析ステップと、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択する選択ステップと、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成する形成ステップと、を実行させ、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記選択ステップは、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定し、
    前記解析ステップは、前記階層構造のうちの第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、かつ、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、かつ、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択するステップを含む、
    テストケース生成プログラム。
  2. コンピュータに、
    演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求める解析ステップと、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択する選択ステップと、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成する形成ステップと、を実行させ、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記選択ステップは、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定し、
    前記解析ステップは、前記階層構造のうちの第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、
    テストケース生成プログラム。
  3. 前記階層構造中の最上位の階層の演算子を取得する取得ステップと、
    前記所定関係を満たす条件式の真偽値を用いて前記階層構造中の最上位の階層の演算子で結合される条件式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
    をさらに実行させる請求項1または請求項2に記載のテストケース生成プログラム。
  4. 前記解析ステップは、前記第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の条件式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の条件式中の真偽値の組合せを選択するステップを含む、請求項から請求項の何れか一項に記載のテストケース生成プログラム。
  5. 前記解析ステップは、前記第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の条件式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の条件式中の真偽値の組合せを選択するステップを含む、請求項から請求項の何れか一項に記載のテストケース生成プログラム。
  6. 前記第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の条件式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が真となる条件式を選択可能な条件式として選択演算子で結合する、請求項に記載のテストケース生成プログラム。
  7. 前記第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の条件式のうち、真と偽、または、偽と真となる組み合わせにおいて、真偽値が
    偽となる条件式を選択可能な条件式として選択演算子で結合する、請求項に記載のテストケース生成プログラム。
  8. コンピュータを用いてテストケースを生成する方法であって、
    前記コンピュータの有するプロセッサが、
    演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求め、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成し、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記条件式を選択する処理は、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定しする処理を含み、
    前記真偽値を求める処理は、前記階層構造のうちの第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、かつ、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、かつ、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択するステップを含む、
    テストケース生成方法。
  9. 演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求める解析手段と、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択する選択手段と、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成する形成手段と、を備え、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条
    件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記選択手段は、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定し、
    前記解析手段は、前記階層構造のうちの第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、かつ、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、かつ、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せを選択可能な選択演算子で結合し、前記選択演算子で結合された真偽値の組合せを選択するステップを含む、
    テストケース生成装置。
  10. 演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求める解析手段と、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択する選択手段と、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成する形成手段と、を備え、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記選択手段は、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定し、
    前記解析手段は、前記階層構造中の第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、
    テストケース生成装置。
  11. コンピュータを用いてテストケースを生成する方法であって、
    前記コンピュータの有するプロセッサが、
    演算子による演算結果の真偽値と前記演算子によって演算の対象となる条件式の真偽値とが所定関係を満たす条件式を特定し、前記所定関係にある条件式が複数特定される場合に、特定される複数の条件式を保持して、前記条件式の真偽値を求め、
    前記所定関係にある複数の前記条件式について前記真偽値を反映して前記条件式の充足可能性を判定し、充足可能と判定された条件式を選択
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成し、
    前記所定関係を満たす条件式を特定することは、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼさない場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせから一つを選択することと、
    前記演算子によって演算の対象となる条件式の真偽値が前記演算子による演算結果の真偽値に独立して影響を及ぼす場合には、前記演算子による演算結果を共通にする前記条件式の組み合わせを全て選択することと、の少なくとも一方を含み、
    前記条件式を選択する処理は、前記条件式に含まれる第1部分式と第2部分式との組合せ関係の矛盾の有無により充足可能性を判定しする処理を含み、
    前記真偽値を求める処理は、前記階層構造中の第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の条件式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の条件式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、
    テストケース生成方法。
  12. コンピュータに、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件式とを上位の階層とし、前記上位の階層とされた条件式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで、判定に係る論理式中の演算子と条件式との組み合わせに基づく階層構造を形成する形成する形成ステップと、
    前記階層構造のうちの第1の階層に含まれる第1の演算子によって演算の対象となる条件式それぞれに対して真偽値として真を適用し、前記真が適用された条件式それぞれと前記真とを組み合わせた第1の条件式マップを生成し、前記第1の演算子によって演算の対象となる条件式それぞれに対して真偽値として偽を適用し、前記偽が適用された条件式それぞれと前記偽とを組み合わせた第2の条件式マップを生成する第1生成ステップと、
    前記第1の条件式マップと前記第2の条件式マップとを含む第1の条件式マップ集合を生成する第2生成ステップと、
    演算子の種別毎にテストを行う候補として抽出する条件式のルールを記憶した記憶部を参照して、前記第1の条件式マップ集合からテストを行う候補とする条件式を含む条件式マップを抽出し、抽出した前記条件式マップを含む第2の条件式マップ集合を生成する第3生成ステップと、
    前記第2の条件式マップ集合に含まれる条件式それぞれについて充足可能性を判定し、充足可能と判定された条件式を選択する選択ステップと、を実行させる、
    テストケース生成プログラム。
JP2014255605A 2014-12-17 2014-12-17 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置 Expired - Fee Related JP6511793B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014255605A JP6511793B2 (ja) 2014-12-17 2014-12-17 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014255605A JP6511793B2 (ja) 2014-12-17 2014-12-17 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Publications (2)

Publication Number Publication Date
JP2016115287A JP2016115287A (ja) 2016-06-23
JP6511793B2 true JP6511793B2 (ja) 2019-05-15

Family

ID=56142085

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014255605A Expired - Fee Related JP6511793B2 (ja) 2014-12-17 2014-12-17 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Country Status (1)

Country Link
JP (1) JP6511793B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116383070B (zh) * 2023-04-07 2023-12-05 南京航空航天大学 一种面向高mc/dc的符号执行方法
CN117540671A (zh) * 2023-04-25 2024-02-09 北京芯思维科技有限公司 基于关键值真值表的数字电路仿真方法及装置
CN117851254B (zh) * 2024-01-09 2024-07-26 浙江大学 一种基于符号执行和路径数缩减的mc/dc覆盖用例生成方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009181292A (ja) * 2008-01-30 2009-08-13 Toyota Motor Corp Mc/dcパターン生成装置
JP5772607B2 (ja) * 2012-01-12 2015-09-02 富士通株式会社 生成装置、生成方法、および生成プログラム
JP5900197B2 (ja) * 2012-01-31 2016-04-06 富士通株式会社 経路条件選択装置、該プログラム、及び該方法
US9639442B2 (en) * 2012-08-29 2017-05-02 Hcl Technologies Limited Modified condition/decision coverage test case automation

Also Published As

Publication number Publication date
JP2016115287A (ja) 2016-06-23

Similar Documents

Publication Publication Date Title
US8041729B2 (en) Categorizing queries and expanding keywords with a coreference graph
US7996819B2 (en) Generating functional test scripts
US8566789B2 (en) Semantic-based query techniques for source code
JP5159713B2 (ja) システムの構成要素の設計アーキテクチャを自動設計する自動設計装置、自動設計方法及び自動設計プログラム
US8370808B2 (en) Apparatus and a method for generating a test case
US20140310053A1 (en) Method and systems for providing business process suggestions and recommendations utilizing a business process modeler
JP6996629B2 (ja) 検証自動化装置、検証自動化方法、およびプログラム
CN105809389A (zh) 一种bom树的生成方法及装置
JP6511793B2 (ja) テストケース生成プログラム、テストケース生成方法及びテストケース生成装置
CN110737779A (zh) 知识图谱的构建方法、装置、存储介质和电子设备
CN104598661B (zh) 用于涉及it系统的项目的变更请求分析的方法和装置
CN109144498A (zh) 一种面向对象实例化任务的api自动推荐方法及装置
JP6120607B2 (ja) 要件検出装置及び要件検出プログラム
JP6459267B2 (ja) テストケース生成プログラム、テストケース生成方法及びテストケース生成装置
CN115130043B (zh) 基于数据库的数据处理方法、装置、设备及存储介质
JP2006277282A (ja) モデル評価解析システムおよびモデル評価解析プログラム
JP2019133534A (ja) 併合方法、併合装置、および併合プログラム
WO2022018899A1 (ja) Kpiツリーから部分ツリーを抽出するシステム
CN115525629A (zh) 数据处理方法、装置、存储介质及电子设备
JP5648336B2 (ja) 不整合検出装置、プログラム及び方法、修正支援装置、プログラム及び方法
JP2009211599A (ja) マッピング定義作成システムおよびマッピング定義作成プログラム
JP5447054B2 (ja) データ生成方法,データ生成装置,およびデータ生成プログラム
JP2019200631A (ja) Kpiツリー作成支援システムおよびkpiツリー作成支援方法
WO2013180920A2 (en) Buildable part pairs in an unconfigured product structure
JP5600826B1 (ja) 非構造化データ処理システム、非構造化データ処理方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180718

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181001

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190312

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190325

R150 Certificate of patent or registration of utility model

Ref document number: 6511793

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees