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

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

Info

Publication number
JP6459267B2
JP6459267B2 JP2014144783A JP2014144783A JP6459267B2 JP 6459267 B2 JP6459267 B2 JP 6459267B2 JP 2014144783 A JP2014144783 A JP 2014144783A JP 2014144783 A JP2014144783 A JP 2014144783A JP 6459267 B2 JP6459267 B2 JP 6459267B2
Authority
JP
Japan
Prior art keywords
true
false
operator
condition
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.)
Active
Application number
JP2014144783A
Other languages
English (en)
Other versions
JP2016021163A (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 JP2014144783A priority Critical patent/JP6459267B2/ja
Publication of JP2016021163A publication Critical patent/JP2016021163A/ja
Application granted granted Critical
Publication of JP6459267B2 publication Critical patent/JP6459267B2/ja
Active 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:プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。
なお、本明細書で説明する技術に関連する技術が記載されている先行技術文献としては、以下の特許文献が存在している。
特開2009−181292号公報 特開平9−54704号公報
網羅規則1−4のテスト網羅度を満たす、MC/DCのテストケースは、次の(1)−(4)の手順に沿って求めることができる。
(1)各条件の真偽値の全組合せを生成する。
(2)各真偽値の組合せに対応する判定式の真偽値を求める。
(3)各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
(4)各条件の組の(最小となるような)和集合がMC/DCのテスト網羅度の網羅規則を満たすテストケースとなる。
しかしながら、(1)−(4)の手順に沿ってテストケースを生成する場合、(1)の各条件の真偽値の全組合せを生成する際に、2のn乗個の組合せ(nは条件数)が生ずる。このため、条件数nが増加すると真偽値の組合せについて組合せ爆発を起こす虞が生ずることとなる。テスト対象として、条件数が多いプログラムに対しては現実的な手順となり得ない。
1つの側面では、本発明は、冗長性を排除可能な、MC/DCのテスト網羅度の網羅規
則を満たすテストケースを生成する技術を提供する。
上記技術は、次のテストケース生成プログラムの構成によって例示できる。すなわち、テストケース生成プログラムは、コンピュータに、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、取得した演算子に、取得した演算子による演算結果の真偽値と、演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、演算対象式の真偽値を求める解析ステップと、所定関係を満たす演算対象式の真偽値を用いて階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に取得ステップと解析ステップとを適用するステップと、を実行させる。
上記のテストケース生成プログラムによれば、冗長性を排除可能な、MC/DCのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
比較例の、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図である。 比較例の、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図である。 比較例の、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図である。 本実施形態の情報処理装置のハードウェア構成例を示す図である。 本実施形態の情報処理装置の機能構成を説明する図である。 2分木変換処理を説明する説明図である。 真偽値表テーブルを説明する説明図である。 論理積、論理和についての真偽値関係を説明する説明図である。 論理積、論理和についてのMC/DCのテスト網羅度を満たす3通りの真偽値関係を説明する説明図である。 組合せルールの適用を説明する説明図である。 真偽値ルール適用処理を説明する説明図である。 組合せルール1に基づく真偽値ルール適用処理を説明する説明図である。 第2の真偽値ルール適用処理を説明する説明図である。 組合せルール2に基づく真偽値ルール適用処理を説明する説明図である。 第3の真偽値ルール適用処理を説明する説明図である。 組合せルール2に基づく真偽値ルール適用処理を説明する説明図である。 判定式生成処理を説明する説明図である。 テストケース生成処理を説明する説明図である。 テストケースの例である。 テストケース生成処理の全体処理を例示するフローチャートである。 テストケース生成処理の全体処理を例示するフローチャートである。 テストケース生成処理の全体処理を例示するフローチャートである。 図5Bに例示のS8、S10の処理を例示するフローチャートである。 図5Bに例示のS8、S10の処理を例示するフローチャートである。
以下、図面を参照して、一実施形態に係るテストケース生成プログラムが実行される情報処理装置について説明する。以下の実施形態の構成は例示であり、情報処理装置は実施形態の構成には限定されない。
以下、図1から図5の図面に基づいて、テストケース生成プログラムが実行される情報処理装置を説明する。
<比較例>
図1A−1Cに、比較例としての、MC/DCのテスト網羅度を満たすテストケースの生成についての説明図を例示する。図1Aは、テスト対象となるソフトウェアのプログラムの例である。図1Aの第1ステップでは、“if (X>2) and (y==5) then return”との処理プロセスが記述され、変数x,yのそれぞれに対する条件成立の可否を組合せた論理積が記述されている。また、第2ステップでは、“if (X==3) or (y>2) then z=2 * Z”と
の処理プロセスが記述され、変数x,yのそれぞれに対する条件成立の可否を組合せて変数zを導出する論理和が記述されている。
MC/DCのテスト網羅度を満たすテストケースは、例えば、図1Aの各ステップのプログラムに対し、以下の網羅規則1−4を満たすよう生成される。
・網羅規則1:プログラムの全入り口/出口は少なくとも一回はテストすること。
・網羅規則2:プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。
・網羅規則3:プログラムの全判定は可能な値を少なくとも一回はテストすること。
・網羅規則4:プログラムの判定の全条件は、判定の出力に独立に影響することを示すこと。(他方の条件の値を固定し、一方の条件の値を変更することで、判定の真偽値の出力値を変更すること)
図1Aに例示のプログラムにおいて、網羅規則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に例示の第2ステップのプログラムを対象例として、MC/DCのテスト網羅度を満たすテストケースを説明する。
図1Bに、図1Aに例示の第2ステップのプログラムに対する、MC/DCのテスト網羅度を満たすテストケースについての真偽テーブルを例示する。図1Bの例において、「x」、「y」カラムは図1Aに例示の第2ステップのプログラムの変数を表し、「(X==3) or (y>2)」カラムはプログラムの判定のロジックを表し、「(X==3)」、「(y>2)」カラムは、判定に係る各変数の条件を表す。「x」、「y」カラムには各変数に対する数値が格納さ
れ、「(X==3) or (y>2)」、「(X==3)」、「(y>2)」カラムには、各変数、或いは各変数の組合せに対する真偽値(“true”、“false”)が格納される。
図1Bに例示の、テストケース(x=1,y=1)、(x=1,y=3)、(x=3,y=1)との変数x,
yの数値の組合せは、例えば、図1Aに例示の第2ステップの“if (X==3) or (y>2) then z=2 * Z”とのプログラムに対し、MC/DCのテスト網羅度を満たすこととなる。例
えば、(x=1,y=3)とのテストケースは、テスト対象のプログラムの“(X==3) or (y>2)”との論理和の判定を“真(true)”とし、プログラムの入り口/出口のテストを少なくとも一回は実行するため、MC/DCの網羅規則1を満たすこととなる。
また、変数:xに対する値“1”、“3”は、プログラムの“(X==3) or (y>2)”との
判定に含まれる“(X==3)”との条件について少なくとも1回は“真偽(true/false)”をテストする。同様に、変数:yに対する値“1”、“3”は、プログラムの“(X==3) or (y>2)”との判定に含まれる“(y>2)”との条件について少なくとも1回は“真偽(true/false)”をテストする。このため、プログラムの“(X==3) or (y>2)”との判定に含まれ
る“(X==3)”、“(y>2)”との条件について、上述の関係を満たす各変数値の組合せであ
るテストケース(x=1,y=1)、(x=1,y=3)、(x=3,y=1)は、MC/DCの網羅規則2を
満たすこととなる。
なお、変数x、yについての(x=3,y=3)との組合せも、MC/DCの網羅規則2を満
たすテストケースとして存在し得る。しかしながら、プログラムの判定に含まれる“(X==3)”との条件についての“真(true)”テストは、(x=3,y=1)により少なくとも1回は
実行され、同様に、“(y>2)”との条件についての真(true)”テストは、(x=1,y=3)により少なくとも1回は実行される。MC/DCの網羅規則2では、プログラムの判定に含まれる“(X==3)”、“(y>2)”との条件についての“真偽”が少なくとも1回のテストが
実行されればよいので、他のテストケースと重複する(x=3,y=3)との組合せは、余剰な
テストケースとなる。
図1Bに例示のテストケースにおいて、変数x、yについての(x=1,y=1)との組合せ
は、プログラムの“(X==3) or (y>2)”との判定を“偽(false)”とするテストケースである。また、変数x、yについての(x=1,y=3)との組合せは、プログラムの“(X==3) or
(y>2)”との判定を“真(true)”とするテストケースである。このため、変数x、yについての(x=1,y=1)と(x=1,y=3)の組合せは、プログラムの“(X==3) or (y>2)”との
判定を、少なくとも1回は“真偽(true/false)”をテストするテストケースとなり、MC/DCの網羅規則3を満たすこととなる。
また、図1Bの例において、テストケース(x=1,y=1)は、条件“(X==3)”について“
偽(false)”、条件“(y>2)”について“偽(false)”とし、プログラムの判定である
“(X==3) or (y>2)”を“偽(false)”とするテストケースである。そして、テストケース(x=3,y=1)は、条件“(X==3)”について“真(true)”、条件“(y>2)”について“偽(false)”とし、プログラムの判定である“(X==3) or (y>2)”を“真(true)”とするテストケースである。テストケースである(x=1,y=1)と(x=3,y=1)との関係は、条件“(y>2)”の真偽値を“偽(false)”に固定し、条件“(X==3)”の真偽値を変更することで、プログラムの判定である“(X==3) or (y>2)”の真偽値を変更する関係にある。つまり
、テストケース(x=1,y=1)とテストケース(x=3,y=1)とは、判定である“(X==3) or (y>2)”の出力に独立に影響するため、MC/DCの網羅規則4を満たすテストケースに含
まれる。
同様に、図1Bに例示の、テストケース(x=1,y=3)は、条件“(X==3)”について“偽
(false)”、条件“(y>2)”について“真(true)”とし、プログラムの判定である“(X
==3) or (y>2)”を“真(true)”とするテストケースである。テストケースである(x=1,y=1)と(x=1,y=3)との関係は、条件“(X==3)”の真偽値を“偽(false)”に固定し、条件“(y>2)”の真偽値を変更することで、プログラムの判定である“(X==3) or (y>2)”の真偽値を変更する関係にある。つまり、テストケース(x=1,y=1)とテストケース(x=1,y=3)とは、判定である“(X==3) or (y>2)”の出力に独立に影響するため、MC/DC
の網羅規則4を満たすテストケースに含まれる。
図1Bの例では、テストケース(x=1,y=1)とテストケース(x=3,y=1)の組合せ、テストケース(x=1,y=1)とテストケース(x=1,y=3)の組合せが、MC/DCの網羅規則4を満たすテストケースの和集合となる。
図1Bに例示のように、プログラムの判定“(X==3) or (y>2)”に係る条件数が2個の
場合では、MC/DCの網羅規則1−4を満たす、3個のテストケース“(x=1,y=1)、
(x=1,y=3)、(x=3,y=1)”が生成される。MC/DCのテスト網羅度を満たすテストケースは、テスト対象となるプログラムの判定に係る条件数がn個の場合、n+1個を最小としてn+1通り以上のテストケースが生成される。
なお、テストケースに用いられる変数x、yの変数値の組合せは、“(X==3)”、“(y>2)”との条件に対して各条件の真偽値がテストできるものであり、且つ、プログラムの判
定“(X==3) or (y>2)”の真偽値をテストできるものであればよい。例えば、テストケー
スに用いられる変数x、yの変数値の組合せとして、“(x=2,y=2)、(x=2,y=4)、(x=3,y=2)”といったテストケースが例示できる。
次に、網羅規則1−4のテスト網羅度を満たすMC/DCのテストケースの求め方(手順)について、図1Cを参照し説明する。なお、説明例としての、テスト対象となるプログラムは、“if (A or B) and C then z=2 * Z”を想定する。説明例のプログラムでは、“(A or B) and C”が判定となり、“A”、“B”、“C”が判定に係る条件となる。各条
件には、それぞれに真偽値が存在し、各条件の真偽値の組合せにより、プログラムの判定の真偽値が決定される。
MC/DCのテストケースは、以下の(1)−(4)の手順に沿って求めることができる。
(1)各条件の真偽値の全組合せを生成する。
図1Cの、破線で囲まれた領域Z1に例示のように、判定に係る条件“A”、“B”、“C”について、それぞれの真偽値の全組合せを生成する。図例では、判定に係る条件数が
3個であるため、2の3乗個である8通りの真偽値の組合せ(番号1−8)が生成される。
(2)各真偽値の組合せに対応する判定式の真偽値を求める。
図1Cの、破線で囲まれた領域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)”、“C”は、両者が“真”の場合に、“(A or B) and C”との判定が“真”となる。このため、条件“A”、“B”、“C”の真偽値の組合
せとして(A,B,C)=(真、真、真)、(真、偽、真)、(偽、真、真)の3通り(番号
1,3,5の組合せ)が、“(A or B) and C”との判定を“真”とする(他の組合せでは、判定は“偽”となる)。
(3)各条件について、他方の条件を固定して、一方の条件の真偽値を変更した時、判定式の真偽値も変更するようなテストケースの組を求める。
図1Cの、破線で囲まれた領域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の真偽値が変更になるテストケース
の組合せを求める。
図1Cの例では、条件“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))に固定した場合、番号5、6の(偽(false)、真(true))に固定した場合は、条件“B”の真偽値の変更に応じて判定の真偽値が変更
される。従って、番号1と2、3と4、5と6のテストケースの組合せは、MC/DCの網羅規則4を満たすテストケースの組合せに含まれる。
(4)各条件の組の(最小となるような)和集合がMC/DCのテスト網羅度の網羅規則を満たすテストケースとなる。
図1Cの説明例では、条件“A”についてのテストケースの組は、番号3と7の1組で
あり、条件“B”についてのテストケースの組も、番号5と7の1組である。一方、条件
“C”についてのテストケースの組は、番号1と2、3と4、5と6の3組となる。条件
“A”、“B”、“C”のそれぞれについて、少なくとも各1組のテストケースを持つよう
にすることで、最小となる各条件の組の和集合を求めることができる。
ここで、条件“C”について、テストケースの3組の内、番号1と2の組を選択した場
合、テストケースの総数は番号1、2、3、5、7の5通りとなる。条件“C”について
のテストケースの3組の内、番号3と4の組を選択した場合は、番号3が条件“A”のテ
ストケースの組と重複するため、テストケースの総数は番号3、4、5、7の4通りとなる。同様にして、条件“C”についてのテストケースの3組の内、番号5と6の組を選択
した場合、番号5は条件“B”のテストケースの組と重複するため、テストケースの総数
は番号3、5、6、7の4通りとなる。条件“C”についてのテストケースの3組に対し
、条件“A”、“B”の各テストケースの組を含め、テストケースの総数が最小となる和集合は、番号3、4、5、7のテストケース、或いは、番号3、5、6、7のテストケースとなる。
従って、条件“A”、“B”、“C”のそれぞれについて、各1組のテストケースを持つ
ように、テストケースの総数について比較を行うことで、該総数が最小となる番号3、4、5、7のテストケース、或いは、番号3、5、6、7のテストケースを求めることができる。
テスト対象となるプログラムの判定式、条件について、上述の手順(1)−(4)を適用することにより、条件数nに対してn+1個を最小値とするn+1通り以上のMC/DCのテスト網羅度を満たすテストケースを生成することができる。しかしながら、手順(1)において、各条件の真偽値の全組合せを生成するため、条件数nに対し2のn乗個の真偽値の組合せが発生することとなる。テスト対象のプログラムに含まれる条件数が相対的に多い場合には、条件数nの増加に比例して真偽値の組合せが増加するため、所謂、組合せ爆発を起こす虞がある。組合せ爆発が生じた場合には、MC/DCのテスト網羅度を満たすテストケースの生成処理が収束しないため、現実的な手順となり得なくなってしまう。
<実施例>
本実施形態の情報処理装置は、例えば、テスト対象となるプログラムの判定式(論理式)を解析し、判定に係る各条件、及び、各条件を結び付ける論理演算子を特定する。情報処理装置は、特定した論理演算子毎に、論理演算子によって結び付けられる各条件の真偽値を、所定関係を満たすように階層的に組合せ、MC/DCを満たす各条件の真偽値の組合せを生成する。ここで、所定関係とは、特定した論理演算子に応じた真偽値の冗長性を排除する各条件の組合せ関係である。
例えば、図1Cのテストケース例では、条件数が3個のため、8通りの真偽値の組合せが生成される。しかし、8通りの真偽値の組合せの内、MC/DCのテスト網羅度の網羅規則を満たす組合せは、最小値として4通りの組合せがあればよい。つまり、生成された8通りの真偽値の組合せに対し、MC/DCのテスト網羅度の網羅規則を満たす組合せ以外の、真偽値の組合せは余剰となる。本実施形態の情報処理装置では、判定式を解析して取得した論理演算子に応じて、該論理演算子により結び付けられる各条件の真偽値を、階層的に組合せることにより、余剰となる真偽値の組合せを排除する。
そして、情報処理装置は、生成された各条件の真偽値の組合せに基づいて、各条件を充足する変数値のセットをテストケースとして生成する。この結果、本実施形態の情報処理装置では、判定に係る各条件の真偽値の全組合せから冗長性を排除できるため、条件数の過多なプログラムであっても真偽値の組合せ爆発を生ずることなく、MC/DCのテスト網羅度の網羅規則を満たすテストケースが生成できる。本実施形態の情報処理装置では、冗長性を排除可能な、MC/DCのテスト網羅度の網羅規則を満たすテストケースを生成する技術が提供できる。
〔装置構成〕
図2に、本実施形態の情報処理装置のハードウェアの構成を例示する。図2に例示の情報処理装置10は、例えば、PC(Personal Computer)、サーバ等のコンピュータであ
る。情報処理装置10は、接続バスB1によって相互に接続されたCPU(Central Processing Unit)11、主記憶部12、補助記憶部13、入力部14、出力部15、通信部
16を有する。主記憶部12及び補助記憶部13は、情報処理装置10が読み取り可能な記録媒体である。
情報処理装置10は、CPU11が補助記憶部13に記憶されたプログラムを主記憶部12の作業領域に実行可能に展開し、プログラムの実行を通じて周辺機器の制御を行う。これにより、情報処理装置10は、所定の目的に合致した機能を実現することができる。
図2に例示の情報処理装置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に読み出して実行することにより、対象プログラムの実行と共に、図2に例示の各機能手段を実現する。情報処理装置10は、対象プログラムの実行と共に、図2に例示の判定式解析部101、真偽値ルール適用部102、テストケース生成部103、充足可能性判定部104を実現する。判定式解析部101は、2分木変換部101a、条件収集部101bを含み、テストケース生成部103は、判定式生成部103aを含む。但し、図2に例示の各機能手段のいずれか、あるいは、これらの一部がハードウェア回路によって動作するものであってもよい。
また、情報処理装置10は、以上の各機能手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値表DB201、真偽値ルールDB202、判定式DB203を補助記憶部13に備える。
なお、各機能手段のうち、いずれかが、他の情報処理装置等に含まれてもよい。例えば、判定式解析部101を含む情報処理装置と、真偽値ルール適用部102を含む情報処理装置と、テストケース生成部103を含む情報処理装置と、充足可能性判定部104を含む情報処理装置とがネットワーク等を介して接続する。そしてネットワークを介して接続された各情報処理装置が、情報処理装置10として機能するとしてもよい。同様に、情報処理装置10の真偽値表DB201、真偽値ルールDB202、判定式DB203は、複数の外部記憶装置に分散されて格納し、ネットワーク等を介して接続されるとしてもよい。情報処理装置10は、例えば、ネットワーク上のコンピュータ群であるクラウドとして実現できるため、各機能手段の処理負荷を軽減できる。
〔機能構成〕
図3に、本実施形態の情報処理装置10における、機能ブロックの説明図を例示する。図3に例示の説明図において、情報処理装置10は、判定式解析部101、真偽値ルール適用部102、テストケース生成部103、充足可能性判定部104の各機能手段を有する。判定式解析部101には、2分木変換部101a、条件収集部101bの機能手段が含まれる。テストケース生成部103には、判定式生成部103aの機能手段が含まれる。
また、図3に例示の説明図において、情報処理装置10は、以上の各機能手段が参照し、或いは、管理するデータの格納先として、例えば、真偽値表DB201、真偽値ルールDB202、判定式DB203を補助記憶部13に備える。
図3に例示の、判定式解析部101は、例えば、テスト対象となるプログラムの判定式(論理式)A1を受け付ける。判定式解析部101は、例えば、補助記憶部13を介して、CD、USBメモリ等の記録媒体に格納された、テスト対象となるプログラムを読み込むことで、該プログラムの判定式A1を受け付けることができる。また、判定式解析部101は、例えば、情報処理装置10が接続するネットワーク等を介して、他の情報処理装置、或いは、外部記憶装置等に格納されたテスト対象のプログラムを読み込むことで、該プログラムに記述された判定式A1を受け付けるとしてもよい。判定式解析部101は、例えば、情報処理装置10で受け付けた判定式A1を主記憶部12の所定の領域に一時的に記憶する。
判定式解析部101は、受け付けたプログラムの判定式A1を解析し、判定式A1に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、判定式解析部101は、特定した論理演算子により結び付けられる判定に係る条件に基づいて、テスト対象となるプログラムの真偽値表テーブルを生成する。なお、判定式A1に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件の特定処理は、例えば、判定式解析部101の2分木変換部101aにより行われる。また、真偽値表テーブルの生成は、例えば、判定式解析部101の条件収集部101bにより行われる。判定式解析部101で生成された真偽値表テーブルは、例えば、真偽値表DB201に格納される。
[2分木変換処理]
判定式解析部101の2分木変換部101aは、受け付けた判定式A1を解析し、判定式A1に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、2分木変換部101aは、特定した各条件と論理演算子と結びつけ、受け付けた判定式A1の判定に係る階層的な論理関係を、木構造に変換する。
図4Aに、2分木変換処理の説明図を例示する。なお、図4Aに例示の説明図の、2分木処理に係る判定式A1は、図3に例示の、“((x>0) or (y==1)) and (z<0)”とする。
2分木変換部101aは、例えば、言語解析等を行うことにより、判定式A1に含まれる“(”、“)”等の括弧記号、或いは、スペース等の領域の区切りを検出する。そして、2分木変換部101aは、区切られた領域範囲に含まれる論理演算子の文字列、及び、判定に係る条件を特定する。
2分木変換部101aは、判定式A1について、例えば、“(”、“)”等の括弧記号により区切られた領域範囲から“x>0”、“y==1”、“z<0”といった判定に係る条件を特定する。また、例えば、2分木変換部101aは、スペース等により区切られた領域範囲から“or”、“and”等の論理演算子の文字列を特定する。なお、2分木変換部101aは
、特定された条件に対し、例えば、判定式A1の文頭から順に連番による識別番号を付与する。そして、2分木変換部101aは、特定した条件を結び付ける論理演算子と、特定された条件に付与された識別番号との対応付けを行う。
なお、受け付けた判定式A1では、例えば、“and”、“or”等の論理演算子を含まず
、“if (x>2) then return”といった単一の条件“(x>2)”により記述されるケースが想
定できる。2分木変換部101aは、例えば、上述の判定式A1のように、論理演算子を検出しないケースでは、特定した条件“x>2”に対して識別番号を付与しないとすること
ができる。特定した条件に対する識別番号の有無により、例えば、受け付けた判定式A1が論理演算子を含まず、単一の条件により記述されていることが識別できる。
また、2分木変換部101aは、例えば、“(”、“)”等の括弧記号の配置関係から、判定に係る論理演算の優先順位を特定し、優先順位の高い論理演算子を下層とする、論理演算子間の階層関係を特定する。そして、2分木変換部101aは、論理演算子間の階層関係と、論理演算子により結び付けられる条件に付与された識別番号との対応関係から、判定式A1の、階層的な論理関係を木構造に変換する。
但し、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、2分木変換部101aは、例えば、プログラムを記述する言語と同じ優先度の解釈をするとすればよい。2分木変換部101aは、“(”、“)”等が省略され、同一の優先度の論理演算子が複数個配置された判定式については、例えば、左側優先とすることができる。
図4Aの例では、“x>0”、“y==1”、“z<0”といった判定に係る条件に対し、2分木変換部101aは、例えば、判定式A1の文頭から特定した順に“0(斜体文字)”から始まる識別番号を付与する。そして、2分木変換部101aは、特定した条件に付与された識別番号と、該条件を結び付ける論理演算子との対応付けを行う。ここで、図4Aに例示するように、例えば、“(x>0,0)”、“(y==1,1)”との識別番号が付与された条
件を木構造の判定式A1の“リーフ”とする。
2分木変換部101aは、特定された“or”との論理演算子について、該論理演算子によって結び付けられる条件“x>0”、“y==1”のそれぞれに付与された識別番号との対応
付けを行う。図4Aに例示のように、論理演算子“or”によって結び付けられる条件“x>0”、“y==1”の木構造の関係が特定される。2分木変換部101aは、例えば、論理演
算子“or”によって結び付けられる条件の識別番号と、識別番号が付与されたリーフ“(x>0,0)”、“(y==1,1)”とを、主記憶部12の所定の領域に一時的に格納する。
2分木変換部101aは、論理演算子である“and”についても、同様の処理を行う。
但し、判定式A1では、論理演算子である“and”により結び付けられる条件は、“((x>0) or (y==1))”、“z<0”である。論理演算子である“and”により結び付けられる“((x>0) or (y==1))”は、論理演算子“or”で結び付けられた各リーフ“(x>0,0)”、“(y==1,1)”の真偽関係である。このため、2分木変換部101aは、論理演算子である“and”により結び付けられる一方を論理演算子“or”とし、他方の条件“z<0”に対して、例えば、判定式A1の文頭から連番で“0(斜体文字)”から始まる識別番号を付与する。
2分木変換部101aは、図4Aに例示のように、特定した条件“z<0”に対して、例
えば、識別番号“2(斜体文字)”を付与し、論理演算子である“and”により結び付け
られるリーフ“(z<0,2)”とする。そして、2分木変換部101aは、論理演算子である“and”により結び付けられるリーフ“(z<0,2)”の識別番号と、論理演算子である
“and”の対応付けを行う。2分木変換部101aは、例えば、論理演算子“and”によって結び付けられる条件の識別番号と、識別番号が付与されたリーフ“(z<0,2)”とを、主記憶部12の所定の領域に一時的に格納する。また、2分木変換部101aは、論理演算子である“and”により結び付けられる論理演算子“or”を、例えば、“ノード”とし
、主記憶部12の所定の領域に一時的に格納する。
2分木変換部101aは、以上の処理により、論理演算子“or”によって結び付けられるリーフ“(x>0,0)”、“(y==1,1)”を、論理演算子“or”に対応付けることがで
きる。また、同様にして、2分木変換部101aは、論理演算子である“and”について
も、該論理演算子によって結び付けられるリーフ“(z<0,2)”、及び、ノードとしての論理演算子“or”を対応付けることができる。この結果、2分木変換部101aは、図4Aに例示のように、判定式A1に含まれる論理演算子、及び、該論理演算子により結び付けられる各条件をリーフとした、論理演算子の関係を階層化した判定式A1の木構造を生成することができる。
図4Aの例では、例えば、“(”、“)”等の括弧記号の配置関係から優先的に処理される論理演算子“or”をノードとして、該ノードによって結び付けられるリーフ“(x>0,0)”、“(y==1,1)”が、該ノードの下層に配置されている。ノード“or”により結び
付けられるリーフ間の関係では、判定式A1において、相対的に先行して出現したリーフ“(x>0,0)”が左側に、相対的に後行して出現したリーフ“(y==1,1)”が右側に配
置されている。論理演算子“and”についても、同様に、判定式A1において、相対的に
先行して出現した論理関係のノード“or”が右側に配置され、相対的に後行して出現したリーフ“(z<0,2)”が右側に配置されている。論理演算子“and”で結び付けられる、
ノード“or”とリーフ“(z<0,2)”は、同階層に配置されている。なお、判定式A1では、論理演算子“and”が木構造の最上位階層として表される。以下の説明では、木構造
の最上位階層に位置する論理演算子を“ルート”とも称する。
図4Aの判定式A1では、3つの条件を2つの論理演算子で結び付ける例を説明した。ここで、テスト対象の判定式に含まれる論理演算子の数量が相対的に増加する場合には、例えば、論理演算子に対して識別番号を付与するとしてもよい。そして、2分木変換部101aは、該論理演算子に対して付与された識別番号と、該論理演算子により結び付けられるリーフの識別番号を対応付けて管理するとしてもよい。2分木変換部101aは、論理演算子に対して付与された識別番号の関係から、論理演算子間の階層構造を特定することができ、論理演算子の識別番号に対応付けたリーフの識別番号により、対象となる判定式の木構造を一元的に管理することができる。
2分木変換部101aは、判定式A1から特定した各論理演算子、及び、各論理演算子に対応付けられた条件である各リーフを、例えば、条件収集部101bに引き渡す。
[真偽値表テーブルの生成処理]
判定式解析部101の条件収集部101bは、2分木変換部101aから引き渡された各論理演算子、各リーフに基づいて、テスト対象となる判定式A1の真偽表テーブルを生成する。生成された真偽値表テーブルは、例えば、真偽値表DB201に格納される。
図4Bに、真偽値表テーブルの説明図を例示する。条件収集部101bは、2分木変換部101aから引き渡された各リーフをカラムとする真偽値表テーブルを生成する。条件収集部101bは、例えば、各リーフに付与された識別番号順に、各リーフを真偽値表テーブルのカラムの左側から配列し、テスト対象となる判定式A1の真偽表テーブルを生成する。
図4Bに例示の真偽値表テーブルは、「No」、「(x>0,0)」、「(y==1,1)」、
「(z<0,2)」の各カラムを有する。「(x>0,0)」、「(y==1,1)」、「(z<0,2)
」の各カラムは、左側から順に、各リーフに付与された識別番号順に配列される。「No」カラムには、例えば、テスト対象の判定式A1に対するMC/DCのテスト網羅度を満たすテストケースの識別番号が格納される。各リーフのカラムには、それぞれに“真(true)”、“偽(false)”といったリーフの条件の成立に係る真偽値が格納される。
なお、MC/DCのテスト網羅度を満たすテストケースは、n個の条件数に対し、n+1個を最小としてn+1通り以上の数量が生成される。図4Bの例では、条件数が3個のため、例えば、4通り以上のテストケースに係る、各リーフに対する真偽値関係の組合せがレコードとして生成される。条件収集部101bは、生成した真偽値表のテーブルを、例えば、真偽値表DB201に格納する。
[真偽値ルール適用処理]
(基本ルール)
真偽値ルール適用部102は、判定式解析部101により生成された真偽値表テーブルに基づいて、判定式A1の各条件の真偽値を、所定関係を満たすように階層的(再帰的)に組合せ、MC/DCを満たす各条件の真偽値の組合せを生成する。ここで、所定関係とは、特定した論理演算子に応じた真偽値の冗長性を排除する各条件の組合せ関係である。
図4C(1)、(2)に、テスト対象となる判定式に含まれる論理積(and)、論理和
(or)についての真偽値関係の説明図を例示する。図4C(1)は、論理積についての真偽値関係の説明図であり、図4C(2)は論理和についての真偽値関係の説明図である。
なお、説明例の判定式は、“(A or B) and (C)”とする。
MC/DCのテスト網羅度を満たすテストケースは、判定式に対して網羅規則2の「プログラムの判定に含まれる全条件は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。また、同様に、網羅規則3の「プログラムの全判定は可能な値を少なくとも一回はテストすること。」といった真偽値関係を満たすことが求められる。
例えば、図4C(1)の、論理積:(A and B)の関係では、条件“A”、“B”の真偽
値の組合せとして(A,B)=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false))の4つの組合せが存在
する。論理積の4通りの条件の組合せに対し、MC/DCのテスト網羅度の網羅規則3から、論理積の判定結果を“真(true)”、“偽(false)”とする条件の組合せが抽出で
きる。
ここで、論理積の判定結果を“真(true)”とする条件は、(A,B)=(真(true)、
真(true))の1通りであり、他は論理積の判定結果を“偽(false)”とする条件の組
合せである。MC/DCのテスト網羅度の網羅規則3を満たすためには、論理積の判定結果を“偽(false)”とする3通りの条件の組合せから、少なくとも1通り以上を抽出す
ればよい。
次に、論理積の判定結果を“真(true)”とする(A,B)=(真(true)、真(true)
)の条件に対し、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)の関係では、図4C(1)に例示する、条件“A”、“B”の3通
りの真偽値の組合せが提示できる。論理積:(A and B)の関係では、条件“A”、“B”
の真偽値の組合せとして(A,B)=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))の3通りの組合せがMC/DCのテスト網羅度を
満たす組合せとして抽出される。
図4C(2)の、論理和:(A or B)についても、同様の関係が抽出できる。すなわち、論理和についても、条件“A”、“B”の真偽値の組合せとして(A,B)=(真(true)
、真(true))、(真(true)、偽(false))、(偽(false)、真(true))、(偽(false)、偽(false))の4通りの組合せが存在する。そして、論理和の4通りの条件の組合せに対し、MC/DCのテスト網羅度の網羅規則3を満たす、論理和の判定結果を“真(true)”、“偽(false)”とする条件の組合せが抽出される。
論理和の判定結果を“偽(false)”とする条件は、(A,B)=(偽(false)、偽(fal
se))の1通りであり、他は論理和の判定結果を“真(true)”とする条件の組合せである。MC/DCのテスト網羅度の網羅規則3を満たすためには、論理和の判定結果を“真(true)”とする3通りの条件の組合せから、少なくとも1通り以上を抽出すればよい。
次に、論理和の判定結果を“偽(false)”とする(A,B)=(偽(false)、偽(false))の条件に対し、MC/DCのテスト網羅度の網羅規則2を満たすように、論理和の判定結果を“真(true)”とする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)の関係では、図4C(2)に例示する、条件“A”、“B”の真偽値の組合せが提示できる。論理和:(A or B)の関係では、条件“A”、“B”の真偽値の組合せとして(A,B)=(真(true)、偽(false))、(偽(false)、真(true))、(
偽(false)、偽(false))の3通りの組合せがMC/DCのテスト網羅度を満たす組合せとして抽出される。
このように、MC/DCのテスト網羅度を満たすテストケースの生成においては、1個の論理演算子で結び付けられる2つの条件の組合せでは、3通りの条件の組合せを用いればよいことが判る。そして判定式に含まれる論理演算子毎に上述の、論理積、論理和に係る条件の組合せを階層的(再帰的)に適用すれば、判定式の真偽関係での、MC/DCのテスト網羅度を満たすテストケースを生成することが可能となる。
例えば、判定式“(A or B) and (C)”では、論理演算子“and”で結ばれる条件(A or B)と条件(C)に対して、上述した論理積の関係を満たす条件の組合せを適用する。例えば、情報処理装置10は、予め補助記憶部13等に格納された上述の論理積、論理和の関係を満たす条件の組合せを参照し、特定した論理演算子毎に適用すればよい。
論理演算子“and”で結ばれる条件(A or B)と条件(C)に対して、((A or B),(C))=(真(true)、真(true))、(真(true)、偽(false))、(偽(false)、真(true))の3通りの組合せが生成される。そして、次に、生成された各組合せに対し、論理演算子“or”で結ばれる、図4C(2)に例示の条件“A”、“B”の組合せを適用すればよい。つまり、論理和を“真(true)”とする条件“A”、“B”の真偽値の組合せ、論理和を“偽(false)”とする条件“A”、“B”の真偽値の組合せを、論理演算子“and”で得られた3通りの真偽値の組合せに適用する。
例えば、論理和を“真(true)”とする条件“A”、“B”の真偽値の組合せは、図4C(2)より、(A,B)=(真(true)、偽(false))、(偽(false)、真(true))の
2通りが適用される。また、論理和を“偽(false)”とする条件“A”、“B”の真偽値
の組合せは、図4C(2)より、(A,B)=(偽(false)、偽(false))の1通りが適
用される。図4C(2)の論理和の関係を、論理演算子“and”の組合せに適用すること
により、(A,B,C)=(真(true)、偽(false)、真(true))、(偽(false)、真(t
rue)、真(true))の2通りの組合せが生成される。同様にして、(A,B,C)=(真(true)、偽(false)、偽(false))、(偽(false)、真(true)、偽(false))、(偽(false)、偽(false)、真(true))の3通りの組合せが生成される。
このように、テスト対象となる判定式について、基本ルールとして論理積、論理和による真偽値関係を適用することにより、冗長性が排除されたテストケースを生成することができる。なお、条件数がn個の場合では、n+1個を最小限としてn+1通り以上のテストケースが生成される。つまり、図4C(1)、(2)の例では、3個の条件数(A,B,C
)について論理積、論理和による基本ルールの適用により5個のテストケースが生成される。条件数が3個のテストケースの、最小限の数量は4個であるため、図4C(1)、(2)に例示の基本ルールの適用では、未だ1個の余剰なテストケースが存在することとなる。以下、論理演算子毎の基本ルールとなる真偽値の階層的(再帰的)な組合せで残されたテストケースの冗長性について、排除可能な真偽値の組合せルールを図4D−4Eを参照し説明する。
(組合せルール)
図4D(1)、(2)に、論理積(and)、論理和(or)についてのMC/DCのテス
ト網羅度を満たす3通りの真偽値関係の説明図を例示する。図4D(1)は、論理積についての真偽値関係の説明図であり、図4D(2)は論理和についての真偽値関係の説明図である。
図4D(1)、(2)の右上がり斜線でハッチングされた領域に示されるように、論理積(and)、論理和(or)のそれぞれに、真偽値の判定結果に独立に影響を及ぼす条件が
存在する。ここで、真偽値の判定結果に独立に影響を及ぼす条件とは、各条件の真偽値を反転させた場合に、判定結果の真偽値の結果が変更される条件をいう。
例えば、論理積について“A and B”との判定式を想定すると、図4D(1)のID=
1のレコードに示すように、条件“A”が“真(true)”、条件“B”が“偽(false)”
となる組み合わせでは、判定結果(A and B)は“偽(false)”となる。ID=1のレコードの条件の組合せにおいて、例えば、条件“A”を“真(true)”→“偽(false)”に変更した場合、判定結果は“偽(false)”となり、変更の前後で変化しない。
一方、ID=1のレコードの条件の組合せにおいて、例えば、条件“B”を“偽(false)”→“真(true)”に変更した場合には、判定結果は“真(true)”となり、条件“B
”の真偽値の変更の前後で変化することとなる。つまり、図4D(1)のID=1のレコードの条件の組合せにおいて、条件“B”は、真偽値の判定結果に独立に影響を及ぼす条
件ということができる。
図4D(1)のID=2のレコードの、条件“A”が“真(true)”、条件“B”が“偽(false)”となる組み合わせにおける、条件“A”についても、真偽値の判定結果に独立に影響を及ぼす条件ということができる。ID=2のレコードの条件“A”、“B”の組合せでは、条件“A”を“偽(false)”→“真(true)”に変更した場合、判定結果(A and B)が“偽(false)”→“真(true)”に変更されるからである。
図4D(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)”に変更されるからである。
図4D(2)の論理和(A or B)では、例えば、ID=1のレコードに示すように、条件“A”が“真(true)”、条件“B”が“偽(false)”となる組み合わせでは、判定結
果(A or B)は“真(true)”となる。ID=1のレコードの条件の組合せにおいて、例えば、条件“A”を“真(true)”→“偽(false)”に変更した場合には、判定結果は“偽(false)”となり、条件“A”の真偽値の変更の前後で変化することとなる。ID=1のレコードの条件の組合せにおいて、条件“A”は、真偽値の判定結果に独立に影響を及
ぼす条件ということができる。
図4D(2)のID=2のレコードの、条件“A”が“偽(false)”、条件“B”が“
真(true)”となる組み合わせにおける、条件“B”についても、真偽値の判定結果に独
立に影響を及ぼす条件ということができる。ID=2のレコードの条件“A”、“B”の組合せでは、条件“B”を“真(true)”→“偽(false)”に変更した場合、判定結果(A or B)が“真(true)”→“偽(false)”に変更されるからである。
図4D(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)”に変更されるからである。
以上、説明したように、基本ルールである論理積(and)、論理和(or)による真偽値
の組合せでは、それぞれに真偽値の判定結果に独立に影響を及ぼす条件が存在する。本実施形態の情報処理装置10では、解析された判定式について、基本ルールの階層的(再帰的)な条件の組合せにおいて、以下の組合せルール1、2を適用し、MC/DCのテスト網羅度を満たすテストケースを生成する。
・組合せルール1:真偽値の判定結果に独立に影響しない(対象となる条件の真偽値を反転しても判定結果が変わらない)場合には、判定結果が共通する条件の組合せから1つの組合せを抽出し、適用する。
・組合せルール2:真偽値の判定結果に独立に影響する(対象となる条件の真偽値を反転すると判定結果が変わる)場合には、判定結果が共通する条件の組合せを全て抽出し、適用する。
情報処理装置10は、例えば、基本ルールとして階層的に組合せられる論理積、論理和の真偽値表を予め作成し、該真偽値表の条件の組合せに対して、上述の組合せルール1、2の適用を対応付けておけばよい。図4D(1)、(2)の例では、例えば、右上がり斜線でハッチングされた領域の真偽値に対し、組合せルール2が適用されることを対応付けておけばよい。また、図4D(1)、(2)の例において、組合せルール2が適用される領域以外の真偽値に対しては、例えば、組合せルール1が適用されることを対応付けるとしてもよい。
組合せルール1、2の適用と対応付けられた、論理積、論理和の真偽値表は、例えば、補助記憶部13等に格納される。情報処理装置10は、例えば、テスト対象となる判定式について、補助記憶部13等に格納された論理積、論理和の真偽値表を参照し、上述の基本ルール、組合せルールを階層的(再帰的)に適用し、テストケースを生成することができる。
図4E(1)、(2)に、本実施形態の情報処理装置10で行われる基本ルールの階層的(再帰的)な組合せの際に、組合せルールの適用についての説明図を例示する。なお、説明例での判定式は“(A or B) and C”とする。
図4E(1)に例示の真偽値表テーブルは、例えば、判定式“(A or B) and C”に対して、図4C(1)の論理積の基本ルールを適用した場合の、条件“(A or B)”と条件“C”の真偽値関係を示すものである。図4C(1)で説明したように、判定式“(A or B) and C”に対して、論理積の基本ルールを適用することにより、条件“(A or B)”
、“C”の組合せについての、MC/DCのテスト網羅度を満たす3通りの組合せが生成
される。
図4E(1)に例示するように、条件((A or B),C)=(真(true)、偽(false)
)、(偽(false)、真(true))、(真(true)、真(true))との3通りの条件“(A
or B)”、“C”組合せが生成される。そして、3通りの組合せのそれぞれについて、条件“(A or B)”に対し、図4C(2)に例示の論理和の真偽値の組合せを適用することで、基本ルールの階層的(再帰的な)な組合せに基づくテストケースが生成される。
つまり、条件(A or B)が“真(true)”となる場合には、図4C(2)の“A or B”が“真(true)”となる、条件“A”、“B”の組合せを適用することにより、基本ルールの階層的(再帰的)な組合せに基付くテストケースが生成できる。また、条件(A or B)が“偽(false)”となる場合には、図4C(2)の“A or B”が“偽(false)”となる、条件“A”、“B”の組合せを適用することにより、基本ルールの階層的(再帰的)な組合せに基づくテストケースが生成できる。
このように、基本ルールの適用により生成された論理積の真偽値に対し、判定結果としての真偽値が一致する論理和の条件の組合せを階層的(再帰的)に適用することで、MC/DCのテスト網羅度を満たすテストケースが生成される。
ここで、図4E(1)に例示の各条件の組合せにおいて、ID=1のレコードの、条件“(A or B)”の“真(true)”は、図4D(1)で説明したように、論理積の真偽値の判定結果に独立に影響しない真偽値である。このため、ID=1のレコードの条件“(A or B)”に対し、論理和の基本ルールを階層的(再帰的)に適用する際には、組合せルール1が採用される。つまり、図4C(2)のID=1、或いは、ID=2のどちらか一方の、“A or B”が“真(true)”となる、条件“A”、“B”についての真偽値の組合せを適用すればよい。
同様に、図4E(1)のID=2のレコードの、条件“(A or B)”の“偽(false)
”は、図4D(1)で説明したように、論理積の真偽値の判定結果に独立に影響する真偽値である。このため、ID=2のレコードの条件“(A or B)”に対し、論理和の基本ルールを階層的(再帰的)に適用する際には、組合せルール2が採用される。つまり、図4C(2)のID=3の、“A or B”が“偽(false)”となる、条件“A”、“B”につい
ての真偽値の組合せを全て適用すればよい。
なお、図4C(2)の論理和の例では、条件“A or B”が“偽(false)”となる条件
“A”、“B”の真偽値の組合せはID=3に例示の1通りである。従って、図4E(1)のID=2のレコードの、条件“(A or B)”の“偽(false)”についての、論理和の
基本ルールの階層的(再帰的)な適用では、図4C(2)のID=3に例示の1通りの条件“A”、“B”についての真偽値の組合せが採用される。
また、図4E(1)のID=3のレコードの、条件“(A or B)”の“真(true)”は、図4D(1)で説明したように、論理積の真偽値の判定結果に独立に影響する真偽値である。このため、ID=3のレコードの条件“(A or B)”に対し、論理和の基本ルールを階層的(再帰的)に適用する際には、組合せルール2が採用される。つまり、図4C(2)のID=1、2の、“A or B”が“真(true)”となる、条件“A”、“B”についての真偽値の組合せを全て適用すればよい。
図4C(2)の論理和の例では、条件“A or B”が“真(true)”となる条件“A”、
“B”の真偽値の組合せはID=1の(真(true)、偽(false))、及び、ID=2の(偽(false)、真(true))の2通りである。従って、図4E(1)のID=3のレコー
ドの、条件“(A or B)”の“真(true)”についての、論理和の基本ルールの階層的(再帰的)な適用では、図4C(2)のID=1、2に例示の2通りの条件“A”、“B”についての真偽値の組合せが採用される。
図4E(2)に例示の真偽値表テーブルは、図4E(1)に例示の真偽値表テーブルの各レコードに対し、組合せルールを考慮して生成されたテストケースの真偽値表テーブル例である。図4E(2)に例示の真偽値表テーブルでは、3通りの各条件についてのカラムを有する。
図4E(2)のID=1のレコードは、図4E(1)のID=1のレコードに対応する。図4E(2)のID=1のレコードには、条件“(A or B)”を“真(true)”とする2通りの組合せから抽出された、(A,B)=(真(true)、偽(false))の組合せが格納されている。なお、組合せルール1で説明したように、図4E(2)のID=1のレコードに格納される条件“A”、“B”の真偽値の組合せは、例えば、もう一方の、(A,B)=
(偽(false)、真(true))の組合せであってもよい。
図4E(2)のID=2のレコードは、図4E(1)のID=2のレコードに対応する。図4E(2)のID=2のレコードには、条件“(A or B)”を“偽(false)”とす
る1通りの組合せである、(A,B)=(偽(false)、偽(false))が格納されている。
図4E(2)のID=3#1、3#2のレコードは、図4E(1)のID=3のレコードに対応する。図4E(2)のID=3#1のレコードには、条件“(A or B)”を“真(true)”とする2通りの組合せの内、(A,B)=(真(true)、偽(false))が格納され
ている。また、図4E(2)のID=3#2のレコードには、条件“(A or B)”を“真
(true)”とする2通りの組合せの内、(A,B)=(偽(false)、真(true))が格納されている。
図4E(1)、(2)で説明したように、テスト対象となる判定式について、論理積、論理和の基本ルールの階層的(再帰的)な組合せ、及び、組合せルールの適用により、MC/DCのテスト網羅度を満たす最小限のテストケースを生成できる。論理積、論理和の基本ルールの階層的(再帰的)な組合せの際に、論理演算子に応じた組合せルールを適用することにより、冗長性を排除した最小限のテストケースを生成できる。例えば、論理積、論理和の基本ルールの階層的(再帰的)な組合せで残されていたテストケースの冗長性について、組合せルールを適用することにより、余剰なテストケースの排除が可能となる。
(真偽値ルール適用処理)
真偽値ルール適用部102は、例えば、判定式解析部101により生成された真偽値表テーブルについて、図4C−4Eで説明した、論理積、論理和の基本ルールの階層的(再帰的)な組合せ、及び、組合せルールを適用する。そして、真偽値ルール適用部102は
、MC/DCのテスト網羅度を満たす最小限のテストケースを生成する。
図4Fに、真偽値ルール適用処理の説明図を例示する。図4FのTb1は、基本ルールとして適用される、論理積(and)の3通りの条件の組合せに対する真偽値表であり、T
b2は、論理和(or)の3通りの条件の組合せに対する真偽値表である。Tb1,Tb2の各真偽値表は、例えば、真偽値ルールDB202に格納される。
また、図4FのTb3は、判定式A1について、判定式解析部101により生成された真偽値表テーブルである。真偽値表テーブルTb3では、判定に係る条件が、判定式A1の文頭から出現した順に左側からカラムとして格納されている。なお、各条件に付与された斜体文字の識別番号“0”、“1”、“2”は、各条件を結び付ける論理演算子と対応付けが行われている。例えば、判定式A1の論理演算子“or”は、条件“(x>0,0)”、“(y==1,1)”との対応付けが行われており、論理演算子“and”は、条件“(z<0,2
)”との対応付けが行われている。
図4Fに例示の真偽値表Tb1、Tb2では、「No」、「右辺」、「左辺」、「全体」の各カラムを有する。「No」カラムには、対応する論理関係により組合せられる真偽値の識別番号が格納される。「右辺」、「左辺」カラムには、対応する論理関係により組合せられる真偽値情報が格納される。なお、「右辺」、「左辺」カラムに格納される真偽値情報では、“真(true)”、“偽(false)”といった真偽値と共に、対象となる条件
の真偽値が対応する論理関係の判定結果に独立に影響しない、或いは、独立に影響することを表す識別子が付与される。
例えば、図4Fの真偽値表Tb1のID=1のレコードの「左辺」カラムでは、(真(true)、0)との真偽値情報が格納されている。また、同レコードの「右辺」カラムでは、(偽(false)、1)との真偽値情報が格納されている。真偽値の後部に付与された“
0”、“1”との数値が対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響しない、或いは、独立に影響することを表す識別子である。
図4FのTb1、Tb2の例では、識別子“0”は、対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響しないことを表し、識別子“1”は、対象となる条件の真偽値が対応する論理関係の判定結果に独立に影響することを表す。言い換えれば、識別子“0”が付与された真偽値では、論理積、論理和の基本ルールの組合せの際に、組合せルール1が適用され、識別子“1”が付与された真偽値では、組合せルール2が適用される。
なお、Tb1、Tb2に例示の真偽値表の「左辺」カラムは、例えば、該当する論理演算子で結び付けられる左側の条件に対応し、「右辺」カラムは、該当する論理演算子で結び付けられる右側の条件に対応する。例えば、Tb2の例では、論理演算子“or”で結び付けられる条件“(x>0,0)”が「左辺」カラムに対応し、条件“(y==1,1)”が「右
辺」カラムに対応する。
また、Tb1、Tb2に例示の真偽値表の「全体」カラムには、該当する論理関係についての真偽値が格納される。「全体」カラムには、同レコードの「右辺」カラム、「左辺」カラムに格納された真偽値の組合せによる、該当する論理関係についての真偽値が格納される。例えば、Tb1の論理積の真偽値表の例では、ID=1のレコードの「左辺」カラムに格納された真偽値“true”と「右辺」カラムに格納された真偽値“false”の論理
積の結果が「全体」カラムに格納される。Tb1の論理積の真偽値表の、ID=1のレコードの「全体」カラムには、真偽値“false”との論理積の結果が格納されている。
真偽値ルール適用部102は、例えば、真偽値表DB201を参照し、判定式解析部101により生成された真偽値表テーブルを取得する。そして、真偽値ルール適用部102は、例えば、判定式A1の木構造に基づいて、階層化された論理演算子を取得する。判定式A1では、例えば、最上位に位置するルートの論理演算子は“and”である。真偽値ル
ール適用部102は、図4Fに例示の論理積の真偽値表Tb1に基づいて、該真偽値表に格納された3通りの組合せに従って、真偽値ルール適用処理を行う。
・第1の真偽値ルール適用処理
真偽値ルール適用部102は、例えば、論理演算子“and”に対応付けられたリーフの
識別番号、論理演算子“or”に対応付けられたリーフの識別番号から、リーフ“(z<0,
2)”は、論理演算子“and”の右側に位置することを特定する。そして、真偽値ルール
適用部102は、例えば、論理演算子“and”に対応する論理積の真偽値表Tb1を参照
し、ID=1のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=1のレコードの「右辺」カラムに格納された真偽値情報は、“false、1”である。真偽値ルール適用部102は、真偽値情報“false、1”から、真偽値は“false”であり、組合せルール2が適用されることを特定する。
真偽値ルール適用部102は、取得した真偽値“false”を、真偽値表テーブルTb3
の(z<0,2)カラムに格納する。なお、取得した真偽値の適用対象は、論理演算子“and”により結び付けられるリーフ“(z<0,2)”である。このため、リーフ“(z<0,2)”には、階層化されたリーフ、或いは、論理演算子等のノードは存在しない。真偽値ルール適用部102は、例えば、取得した真偽値の適用対象がリーフである場合には、取得した組合せルールを適用しないとすることができる。取得した真偽値情報の適用対象がリーフである場合には、真偽値情報の真偽値がリーフの真偽値に適用される。
次に、真偽値ルール適用部102は、論理積の真偽値表Tb1を参照し、ID=1のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=1のレコードの「左辺」カラムに格納された真偽値情報は、“true、0”である。真偽値ルール適用部102は、真偽値情報“true、0”から、真偽値は“true”であり、組合せルール1が適用されることを特定する。真偽値ルール適用部102は、論理演算子“and”によりリーフ“(z<0,2)”と結び付けられる論理演算子“or”について、組合せルール1が適用されると特定する。なお、組合せルール1では、例えば、判定結果が共通する複数の条件の組合せから1つの組合せを抽出し適用すればよい。
図4Gに、組合せルール1に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部102は、論理積の真偽値表Tb1のID=1のレコードの「左辺」カラムから取得した真偽値“true”に基づいて、論理和の真偽値表Tb2の「全体」カラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Tb1から取得した“true、0”との真偽値情報を階層的(再帰的)に適用するためである。
論理和の真偽値表Tb2の「全体」カラムの格納値で、論理積の真偽値表Tb1のID=1のレコードの「左辺」カラムから取得した真偽値“true”と一致する真偽値を有するレコードは、ID=1、2のレコードである。論理和の真偽値表Tb2のID=1のレコードでは、「左辺」カラムに“true、1”、「右辺」カラムに“false、0”との真偽値
情報が格納されている。また、同真偽値表のID=2のレコードでは、「左辺」カラムに“false、0”、「右辺」カラムに“true、1”との真偽値情報が格納されている。
真偽値ルール適用部102は、真偽値“true”と一致する真偽値を「全体」カラムに格納した2通りの真偽値の組合せ(ID=1、2)から、何れか一方の真偽値の組合せを取
得する。論理和の真偽値表Tb2から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。真偽値ルール適用部102は、論理和の真偽値表Tb2から取得した真偽値情報の組合せ(レコード情報)を、例えば、論理積の真偽値表Tb1から取得した真偽値“true”と対応付けて、主記憶部12の所定の領域に一時的に記憶する。
図4Gの説明図において、論理和の真偽値表Tb2のID=1のレコードの真偽値の組合せを選択したとする。論理和の真偽値表Tb2のID=1のレコードの「左辺」カラムには“true、1”、「右辺」カラムには“false、0”の真偽値情報が格納されている。
「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。判定式A1について、論理演算子“or”で結び付けられる左側の条件は“(x>0,0)”であり、右側の条件は“(y==1,1)”である。このため、真偽値ルー
ル適用部102は、取得した「左辺」カラムの真偽値“true”を、真偽値表テーブルTb3の「(x>0,0)」カラムに格納し、「右辺」カラムの真偽値“false”を、真偽値表テ
ーブルTb3の「(y==1,1)」カラムに格納する。
同様に、図4Gの説明図において、論理和の真偽値表Tb2のID=2のレコードの真偽値の組合せを選択したとする。論理和の真偽値表Tb2のID=2のレコードの「左辺」カラムには“false、0”、「右辺」カラムには“true、1”の真偽値情報が格納され
ている。「左辺」カラムの真偽値は、論理演算子“or”で結び付けられる左側の条件“(x>0,0)”の真偽値に対応し、「右辺」カラムの真偽値は、論理演算子“or”で結び付けられる右側の条件“(y==1,1)”の真偽値に対応する。このため、真偽値ルール適用部
102は、取得した「左辺」カラムの真偽値“false”を、真偽値表テーブルTb3の「
(x>0,0)」カラムに格納し、「右辺」カラムの真偽値“true”を、真偽値表テーブルTb3の「(y==1,1)」カラムに格納する。
以上の処理により、真偽値ルール適用部102では、論理積の真偽値表Tb1のID=1のレコードの真偽値の組合せに対応する、テストケースが生成される。なお、論理和の真偽値表Tb2から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
・第2の真偽値ルール適用処理
図4Hに、真偽値ルール適用処理の説明図を例示する。真偽値ルール適用部102は、例えば、図4Hに例示の、論理積の真偽値表Tb1のID=2のレコードに格納された真偽値の組合せに基づいて、真偽値ルール適用処理を行う。なお、図4Hに例示の説明図において、真偽値表テーブルTb3には、上述した第1の真偽値ルール適用処理で生成されたテストケースが格納されている。
真偽値ルール適用部102は、例えば、論理演算子“and”に対応する論理積の真偽値
表Tb1を参照し、ID=2のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=2のレコードの「右辺」カラムに格納された真偽値情報は、“true、0”である。真偽値ルール適用部102は、真偽値情報“true、0”から、真偽値は“true”であり、組合せルール1が適用されることを特定する。なお、真偽値ルール適用部102は、取得した真偽値情報の適用対象がリーフであるため、取得した真偽値情報の真偽値をリーフの真偽値に適用する。
真偽値ルール適用部102は、例えば、真偽値表テーブルTb3に新たなレコード(ID=2)を追加する。そして、真偽値ルール適用部102は、追加したレコードの(z<0
,2)カラムに、論理積の真偽値表Tb1から取得した真偽値“true”を格納する。
次に、真偽値ルール適用部102は、論理積の真偽値表Tb1を参照し、ID=2のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=2のレコードの「左辺」カラムに格納された真偽値情報は、“false、1”である
。真偽値ルール適用部102は、真偽値情報“false、1”から、真偽値は“false”であり、組合せルール2が適用されることを特定する。なお、組合せルール2では、例えば、判定結果が共通する条件の組合せを全て抽出し適用すればよい。
図4Jに、組合せルール2に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部102は、論理積の真偽値表Tb1のID=2のレコードの「左辺」カラムから取得した真偽値“false”に基づいて、論理和の真偽値表Tb2の「全体」カ
ラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Tb1から取得した“false、1”との真偽値情報を階層的(再帰的)に適用す
るためである。
図4Jに例示の、論理和の真偽値表Tb2の「全体」カラムの格納値では、論理積の真偽値表Tb1のID=1のレコードの「左辺」カラムから取得した真偽値“false”と一
致する真偽値を有するレコードは、ID=3のレコードである。論理和の真偽値表Tb2のID=3のレコードには、「左辺」カラムに“false、1”、「右辺」カラムに“false、1”との真偽値情報が格納されている。真偽値ルール適用部102は、真偽値“false
”と一致する真偽値を「全体」カラムに格納した全ての真偽値の組合せ(ID=3の1通り)を取得する。論理和の真偽値表Tb2から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。
真偽値ルール適用部102は、論理和の真偽値表Tb2から取得した真偽値情報の組合せ(レコード情報)を、例えば、論理積の真偽値表Tb1から取得した真偽値“false”
と対応付けて、主記憶部12の所定の領域に一時的に記憶する。
図4Gで説明したように、論理和の真偽値表Tb3の「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。つまり、論理演算子“or”で結び付けられる左側の条件“(x>0,0)”には、論理和の真偽値表Tb3のID=3のレコードの「左辺」カラムから取得した真偽値情報“false、1”が対応す
ることとなる。また、論理演算子“or”で結び付けられる右側の条件“(y==1,1)”に
は、論理和の真偽値表Tb3のID=3のレコードの「右辺」カラムから取得した真偽値情報“false、1”が対応することとなる。
真偽値ルール適用部102は、例えば、取得した「左辺」カラムの真偽値“false”を
、真偽値表テーブルTb3の「(x>0,0)」カラムに格納し、「右辺」カラムの真偽値“false”を、真偽値表テーブルTb3の「(y==1,1)」カラムに格納する。なお、論理和の真偽値表Tb2から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
以上の処理により、真偽値ルール適用部102では、論理積の真偽値表Tb1のID=2のレコードの真偽値の組合せに対応する、テストケースが生成される。
・第3の真偽値ルール適用処理
図4Kに、真偽値ルール適用処理の説明図を例示する。真偽値ルール適用部102は、
例えば、図4Kに例示の、論理積の真偽値表Tb1のID=3のレコードに格納された真偽値の組合せに基づいて、真偽値ルール適用処理を行う。なお、図4Kに例示の説明図において、真偽値表テーブルTb3には、上述した第1、2の真偽値ルール適用処理で生成されたテストケースが格納されている。
真偽値ルール適用部102は、例えば、論理演算子“and”に対応する論理積の真偽値
表Tb1を参照し、ID=3のレコードの「右辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=3のレコードの「右辺」カラムに格納された真偽値情報は、“true、1”である。真偽値ルール適用部102は、真偽値情報“true、1”
から、真偽値は“true”であり、組合せルール2が適用されることを特定する。なお、真偽値ルール適用部102は、取得した真偽値情報の適用対象がリーフであるため、取得した真偽値情報の真偽値をリーフの真偽値に適用する。
真偽値ルール適用部102は、例えば、真偽値表テーブルTb3に新たなレコード(ID=3)を追加する。そして、真偽値ルール適用部102は、追加したレコードの(z<0
,2)カラムに、論理積の真偽値表Tb1から取得した真偽値“true”を格納する。
次に、真偽値ルール適用部102は、論理積の真偽値表Tb1を参照し、ID=3のレコードの「左辺」カラムに格納された真偽値情報を取得する。論理積の真偽値表Tb1のID=3のレコードの「左辺」カラムに格納された真偽値情報は、“true、1”である。真偽値ルール適用部102は、真偽値情報“true、1”から、真偽値は“true”であり、組合せルール2が適用されることを特定する。なお、組合せルール2では、例えば、判定結果が共通する条件の組合せを全て抽出し適用すればよい。
図4Lに、組合せルール2に基づく真偽値ルール適用処理の説明図を例示する。先ず、真偽値ルール適用部102は、論理積の真偽値表Tb1のID=3のレコードの「左辺」カラムから取得した真偽値“true”に基づいて、論理和の真偽値表Tb2の「全体」カラムの格納値を検索する。論理演算子“or”で結び付けられる各リーフに対し、論理積の真偽値表Tb1から取得した“true、1”との真偽値情報を階層的(再帰的)に適用するためである。
図4Jに例示の、論理和の真偽値表Tb2の「全体」カラムの格納値では、論理積の真偽値表Tb1のID=3のレコードの「左辺」カラムから取得した真偽値“true”と一致する真偽値を有するレコードは、ID=1、2のレコードである。論理和の真偽値表Tb2のID=1のレコードには、「左辺」カラムに“true、1”、「右辺」カラムに“false、0”との真偽値情報が格納されている。また、論理和の真偽値表Tb2のID=2の
レコードには、「左辺」カラムに“false、0”、「右辺」カラムに“true、1”との真
偽値情報が格納されている。
真偽値ルール適用部102は、真偽値“true”と一致する真偽値を「全体」カラムに格納した全ての真偽値の組合せ(ID=1、2の2通り)を取得する。論理和の真偽値表Tb2から取得された真偽値の組合せは、論理演算子“or”で結び付けられる各リーフについての真偽値の組合せとなる。真偽値ルール適用部102は、論理和の真偽値表Tb2から取得した真偽値情報の組合せ(レコード情報)を、例えば、論理積の真偽値表Tb1から取得した真偽値“true”と対応付けて、主記憶部12の所定の領域に一時的に記憶する。
図4Gで説明したように、論理和の真偽値表Tb3の「左辺」カラムの真偽値は、例えば、論理演算子“or”で結び付けられる左側の条件の真偽値に対応し、「右辺」カラムの真偽値は、同論理演算子で結び付けられる右側の条件の真偽値に対応する。
このため、真偽値ルール適用部102は、例えば、取得した「左辺」カラムの真偽値を、論理演算子“or”で結び付けられる左側の条件に対応付けられた、真偽値表テーブルTb3の「(x>0,0)」カラムに格納する。また、真偽値ルール適用部102は、例えば、取得した「右辺」カラムの真偽値を、論理演算子“or”で結び付けられる右側の条件に対応付けられた、真偽値表テーブルTb3の「(y==1,1)」カラムに格納する。
なお、図4Jの論理和の真偽値表Tb2から取得された真偽値の組合せは2通りである。このため、真偽値ルール適用部102は、真偽値表テーブルTb3に新たなレコード(ID=4)を追加し、真偽値表テーブルTb3のID=3、4のレコードに、論理和の真偽値表Tb2から取得した真偽値の組合せを格納する。なお、論理和の真偽値表Tb2から取得した真偽値情報の適用対象は、論理演算子“or”で結び付けられるリーフである。このため、真偽値情報に含まれる組合せルールは適用されず、真偽値情報に含まれる真偽値が適用されることとなる。
真偽値ルール適用部102は、例えば、論理和の真偽値表Tb2のID=1のレコードの「左辺」カラムから取得した真偽値“true”を、真偽値表テーブルTb3のID=3のレコードの「(x>0,0)」カラムに格納する。また、真偽値ルール適用部102は、例えば、同レコードの「右辺」カラムから取得した真偽値“false”を、真偽値表テーブルT
b3のID=3のレコードの「(y==1,1)」カラムに格納する。
同様に、真偽値ルール適用部102は、例えば、論理和の真偽値表Tb2のID=2のレコードの「左辺」カラムから取得した真偽値“false”を、真偽値表テーブルTb3の
ID=4のレコードの「(x>0,0)」カラムに格納する。また、真偽値ルール適用部102は、例えば、同レコードの「右辺」カラムから取得した真偽値“true”を、真偽値表テーブルTb3のID=4のレコードの「(y==1,1)」カラムに格納する。
以上の処理により、真偽値ルール適用部102では、論理積の真偽値表Tb1のID=3のレコードの真偽値の組合せに対応する、テストケースが生成される。この結果、図4Jの真偽値表テーブルTb3に例示するように、MC/DCのテスト網羅度を満たす最小限の、4通りのテストケースが生成される。真偽値ルール適用部102は、第1−3の真偽値ルール適用処理を繰り返して生成した4通りのテストケースが格納された真偽値表テーブルTb3を、例えば、真偽値表DB201に格納する。
[判定式生成処理]
図3に例示の説明図に戻り、テストケース生成部103の判定式生成部103aは、真偽値ルール適用部102で生成された真偽値表テーブルTb3に基づいて、MC/DCのテスト網羅度を満たすテストケースの判定式テーブルTb4を生成する。判定式テーブルTb4には、真偽値表テーブルTb3のレコードに対応した判定式が格納される。なお、MC/DCのテスト網羅度を満たすテストケースの変数値は、判定式テーブルTb4に格納された判定式に基づいて決定される。判定式生成部103aで生成された判定式テーブルTb4は、例えば、判定式DB203に格納される。
図4Mに、判定式生成処理の説明図を例示する。図4Mに例示の説明図において、Tb3は、真偽値ルール適用部102で生成された真偽値表テーブルである。また、Tb4は、判定式生成部103aで生成される判定式テーブルの例である。判定式テーブルTb4は、判定式生成処理の対象となる真偽値表テーブルTb3と同数のレコードを有する。
判定式生成部103aは、例えば、真偽値表DB201を参照し、真偽値ルール適用部102で生成された真偽値表テーブルTb3を取得する。判定式生成部103aは、取得
した真偽値表テーブルTb3を、例えば、主記憶部12の所定の領域に一時的に記憶する。
図4Mに例示のように、真偽値表テーブルには、テスト対象となる判定式A1に含まれる条件毎の真偽値が格納されている。判定式生成部103aは、例えば、真偽値表テーブルTb3の各レコードの真偽値をレコード毎に取得する。そして判定式生成部103aは、取得した真偽値をカラムとしての各条件に組み合わせ、真偽値表テーブルTb3のレコード毎の判定式を生成する。
判定式生成部103aは、例えば、取得したレコードのカラム毎の真偽値が“false”
の場合には、カラムとしての各条件に対して論理演算子“not”を付加し、判定式の条件
を生成する。また、例えば、判定式生成部103aは、例えば、取得したレコードのカラム毎の真偽値が“true”の場合では、カラムとしての各条件を判定式の条件とする。そして、判定式生成部103aは、カラムとしての各条件に真偽値を組合せた条件を、各条件に付加された識別番号順に論理演算子“and”で結合し、真偽値表テーブルTb3のレコ
ードの真偽値の組合せに応じた判定式を生成する。生成された判定式は、例えば、判定式テーブルTb4の、判定式生成処理の対象となる真偽値表テーブルTb3のレコードと同一のIDが付与されたレコードの「判定式」カラムに格納される。
例えば、図4Mに例示の真偽値表テーブルTb3のID=1のレコードを判定式生成処理の対象とする。判定式生成部103aは、ID=1のレコードの各真偽値を、該真偽値が格納されたカラムと対応付けて取得する。例えば、各カラムと真偽値を対応付けた、((x>0,0)、true)、((y==1,1)、false)、((z<0,2)、false)といった組合せ
が取得される。
判定式生成部103aは、取得した((x>0,0)、true)、((y==1,1)、false)、((z<0,2)、false)等の組合せについて、真偽値が“false”の場合には、真偽値“false”の条件に論理演算子“not”を付加する。例えば、“ x>0,0”、“not(y==1,1)
”、“not(z<0,2)”といった真偽値の種別に応じて変換された各条件が生成される。
そして、判定式生成部103aは、真偽値の種別に応じて変換された各条件を、各条件に付与された識別番号“0”、“1”、“2”の番号順に、論理演算子“and”で結合し
、判定式を生成する。例えば、“(x>0) and not(y==1) and not(z<0)”といった判定式が生成される。判定式生成部103aは、例えば、生成した判定式“(x>0) and not(y==1) and not(z<0)”を、判定式テーブルTb4のID=1のレコードに格納する。
判定式生成部103aは、上述した判定式生成処理を、図4Mに例示の真偽値表テーブルTb3の他のレコード(ID=2,3,4)についても同様に行い、レコード毎の判定式を生成する。生成された判定式は、判定式テーブルTb4の、判定式生成処理の対象となる真偽値表テーブルTb3のレコードと同一のIDが付与されたレコードの「判定式」カラムに格納される。判定式生成部103aで生成された判定式テーブルTb4は、例えば、判定式DB203に格納される。
[テストケース生成処理]
図3に例示の説明図に戻り、テストケース生成部103は、判定式生成部103aで生成された判定式テーブルTb4に基づいて、判定式の条件を満たす変数値を組合せ、MC/DCのテスト網羅度を満たすテストケースを生成する。なお、判定式テーブルTb4に基づく変数値の組合せ(セット)は、例えば、充足可能性判定部104により生成される。
図4Nに、テストケース生成処理の説明図を例示する。図4Nの説明図において、Tb4は、判定式生成部103aで生成された判定式が格納された判定式テーブルである。判定式テーブルTb4には、判定式A1“((x>0) or (y==1)) and (z<0)”の各条件に、M
C/DCのテスト網羅度を満たす真偽値の組合せを反映させた4通りの判定式が格納されている。
テストケース生成部103は、例えば、判定式DB203を参照し、判定式生成部103aで生成された、図4Nに例示の判定式テーブルTb4を取得する。テストケース生成部103は、取得した判定式テーブルTb4を、例えば、主記憶部12の所定の領域に一時的に記憶する。
テストケース生成部103は、例えば、取得した判定式テーブルTb4に格納された判定式を、レコードの識別番号順に取得し、取得したレコードの判定式を充足可能性判定部104に引き渡す。
充足可能性判定部104では、例えば、テストケース生成部103から引き渡された判定式に基づいて、判定式に含まれる各条件を充足する変数値の組合せ(セット)を生成する。充足可能性判定部104は、例えば、生成した変数値の組合せをテストケース生成部103に引き渡す。テストケース生成部103は、充足可能性判定部104から引き渡された変数値の組合せを、例えば、判定式テーブルTb4のレコードのIDに対応付けて、主記憶部12の所定の領域に一時的に記憶する。
充足可能性判定部104は、例えば、判定式に含まれる論理演算子“and”を検出し、
該論理演算子で結び付けられる各条件を抽出する。例えば、図4Nに例示の判定式テーブルTb4のID=1のレコードの判定式“(x>0) and not(y==1) and not(z<0)”では、充足可能性判定部104は、論理演算子“and”で結合された条件“(x>0)”、“not(y==1)”、“not(z<0)”を抽出する。
充足可能性判定部104は、例えば、抽出した各条件から変数値“x”、“y”、“z”を特定し、“>”、“<”、“==”といった大小関係を表す記号で結合された数値“0”、
“1”を特定する。そして、充足可能性判定部104は、例えば、各変数値に対する数値
との大小関係、及び、各条件に付加された論理演算子“not”との論理関係から、条件“
(x>0)”、“not(y==1)”、“not(z<0)”を充足する変数値の組合せを生成する。例えば、充足可能性判定部104は、条件“(x>0)”を充足する変数値として“x=1”を生成し、条件“not(y==1)”を充足する変数値として“y=0”を生成し、条件“not(z<0)”を充足する変数値として“z=0”を生成する。そして、充足可能性判定部104は、例
えば、抽出された各条件を満たす充足解として、“x=1,y=0,z=0”との変数値の組合せを
テストケース生成部103に引き渡す。
テストケース生成部103、充足可能性判定部104では、図4Nに例示の、判定式テーブルTb4のID=2,3,4のレコードの判定式についても同様の処理が行われ、図4Nに例示のset1−4の変数値の組合せが生成される。テストケース生成部103は、例えば、取得したset1−4の変数値の組合せを主記憶部12の所定の領域に一時的に記憶する。
図3に例示の説明図に戻り、テストケース生成部103は、判定式テーブルTb4に格納された各判定式に基づいて充足可能性判定部104で生成されたset1−4の変数値の組合せをテストケースB1として出力する。
図4Pに、テストケース生成部103から出力されるテストケースB1の一例を例示する。図4Pに例示のテストケースB1では、充足可能性判定部104で生成された変数値の組合せ(set1−4)が、MC/DCのテスト網羅度を満たすテストケースの和集合として出力される。図4Pに例示のテストケースB1では、テストケース1はset1の変数値の組合せに対応する。他のテストケース2−4についても同様に、それぞれset2−4の変数値の組合せに対応する。
〔処理フロー〕
(全体処理)
以下、図5A−5Eに例示のフローチャートを参照し、本実施形態の情報処理装置10の、MC/DCのテスト網羅度を満たすテストケース生成処理を説明する。本実施形態の情報処理装置10では、例えば、図3に例示のように、入力された、テスト対象となるプログラムの判定式を解析する。情報処理装置10は、例えば、解析結果から、判定式に含まれる論理演算子、及び、該論理演算子によって結び付けられる判定に係る各条件を特定する。
情報処理装置10は、例えば、特定した論理演算子毎に、該論理演算子で結合される各条件に対し、基本ルールとなる論理積、論理和の真偽値の組合せを階層的(再帰的)に適用する。情報処理装置10は、例えば、基本ルールとなる論理積、論理和の真偽値の組合せを階層的(再帰的)に適用する際に、論理関係に応じた真偽値の組合せルールを採用する。
情報処理装置10は、例えば、基本ルールとなる論理積、論理和の真偽値の組合せを階層的(再帰的)に適用し、論理関係に応じた真偽値の組合せルールを採用することで、冗長性を排除した各条件の真偽値の組合せを生成する。情報処理装置10は、冗長性を排除した各条件の真偽値の組合せに基づいて、MC/DCのテスト網羅度を満たす変数値の組合せであるテストケースを生成する。生成されたテストケースは、例えば、図3に例示のように、MC/DCのテスト網羅度を満たすテストケースの和集合として出力される。
図5A−Cは、MC/DCのテスト網羅度を満たすテストケース生成処理の全体処理を示すフローチャートの例示である。図5Aのフローチャートにおいて、MC/DCのテスト網羅度を満たすテストケース生成処理の開始は、例えば、テスト対象となるプログラムの判定式の受け付けのときが例示できる。情報処理装置10は、例えば、受け付けた判定式を解析し、判定式に含まれる論理演算子、及び、論理演算子によって結び付けられる判定に係る各条件を特定する。そして、情報処理装置10は、例えば、特定した論理演算子と各条件の結合関係から、判定に係る階層的な論理関係を、論理演算子を中心とする2分木構造に変換する(S1)。各条件については、S1の処理により、連番による識別番号が付与される。なお、S1の2分木構造に変換する処理は、例えば、図4Aで説明した。
情報処理装置10は、例えば、S1の処理で変換した2分木構造内の、論理演算子により結び付けられるリーフ(条件)を全て取得する(S2)。そして、情報処理装置10は、例えば、取得したリーフを真偽値表テーブルのカラムとして設定し、テスト対象となる判定式に対応する真偽値表テーブルを生成する(S3)。真偽値表テーブルのカラムとして設定されたリーフには、判定に係る条件、及び、付与された連番による識別番号が含まれる。なお、S3の処理で生成された真偽値表テーブルは、設定されたカラムについて真偽値が格納されていない状態の真偽値表テーブルである。情報処理装置10は、例えば、S2−S3の処理で生成した真偽値表テーブルを、真偽値表DB201に格納する。なお、S2−3の真偽値表テーブルの生成処理は、例えば、図4Bで説明した。
図5Bに例示のフローチャートにおいて、S4−S11の処理では、情報処理装置10
は、S2の処理で取得した各リーフについて、MC/DCのテスト網羅度を満たす真偽値の組合せを生成する。情報処理装置10は、S4−S11の処理で生成した、各リーフについてのMC/DCのテスト網羅度を満たす真偽値の組合せを、例えば、真偽値表テーブルに格納する。情報処理装置10は、各リーフについての、MC/DCのテスト網羅度を満たす真偽値の組合せが格納された真偽値表テーブルを、例えば、真偽値表DB201に格納する。なお、S4−S11の真偽値表テーブルの生成処理は、例えば、図4F−4H、4J−4Lで説明した。
情報処理装置10は、例えば、真偽値表DB201を参照し、S2−S3の処理で生成された真偽値が格納されていない空の状態の真偽値表テーブルを取得する。そして、情報処理装置10は、真偽値表テーブルのカラムとして設定された各リーフについて、識別番号が付与されているか否かを判定する(S4)。情報処理装置10は、例えば、取得したリーフに識別番号が付与されていない場合には(S4,no)、該リーフがルート、即ち、受け付けた判定式が単一の条件で記述されていると判定し、S11の処理に移行する。
S11の処理では、情報処理装置10は、例えば、該リーフがカラムとして設定された真偽値表テーブルに、真偽値“true”を格納する。情報処理装置10は、真偽値が格納された真偽値表テーブルを、例えば、真偽値表DB201に格納し、S12の処理に移行する。
一方、例えば、S3の処理で取得したリーフに識別番号が付与されている場合には(S4,yes)、情報処置装置10は、受け付けた判定式が論理演算子を含むと判定し、S5の処理に移行する。
S5の処理では、情報処理装置10は、例えば、S3の処理で取得したリーフについて、リーフに付与された識別番号から、判定式の2分木構造における、該識別番号に対応付けられたルートとなる論理演算子を特定する。そして、情報処理装置10は、ルートとなる論理演算子について、適用する各種ルール(基本ルールとなる論理積“and”、論理和
“or”、組合せルール)が存在するか否かを判定する。情報処理装置10は、例えば、適用する各種ルールが存在する場合には(S5,yes)、S6の処理に移行し、適用する各種ルールが存在しない場合には(S5,no)、S12の処理に移行する。
情報処理装置10は、例えば、ルートとなる論理演算子の種別から、該論理演算子で結合されたリーフに適用する基本ルールを選択する(S6)。情報処理装置10は、例えば、真偽値ルールDB202を参照し、ルートとなる論理演算子の種別に対応する論理積、論理和等の基本ルールを取得する。例えば、図4Fの例では、ルートとなる論理演算子は“and”のため、情報処理装置10は、真偽値ルールDB202を参照し、論理積の真偽
値表Tb1を取得する。
情報処理装置10は、例えば、ルートとなる論理演算子により結合される左側の子ノードを選択する(S7)。情報処理装置10は、例えば、論理演算子に対応付けられたリーフの識別番号、子ノードとなる論理演算子の識別番号から、論理演算子と結合する左側の子ノード(図4Fの例では、リーフ(z<0,2))を特定し選択する。そして、情報処理装置10は、例えば、S6で取得した論理積の真偽値表を参照し、S7の処理で選択した左側の子ノードに対する真偽値ルールの適用処理を行う(S8)。なお、S7の処理で選択した子ノードに対する真偽値ルールの適用処理については、図5D−5Eで説明する。
次に、情報処理装置10は、例えば、ルートとなる論理演算子により結合される右側の子ノードを選択する(S9)。情報処理装置10は、例えば、論理演算子に対応付けられたリーフの識別番号、子ノードとなる論理演算子の識別番号から、論理演算子と結合する
右側の子ノード(図4Fの例では、子ノード“or”)を特定し選択する。そして、情報処理装置10は、例えば、S6で取得した論理積の真偽値表を参照し、S9の処理で選択した右側の子ノードに対する真偽値ルールの適用処理を行う(S10)。なお、S9の処理で選択した子ノードに対する真偽値ルールの適用処理については、図5D−5Eで説明する。
情報処理装置10は、S5の処理に移行し、ルートとなる論理演算子について、適用する各種ルール(基本ルールとなる論理積“and”、論理和“or”、組合せルール)が存在
するか否かの判定処理を行う。
次に、図5Cに例示のフローチャートにおいて、S12−S19の処理では、情報処理装置10は、S4−11の処理で生成された真偽値表テーブルの各レコードに格納された各リーフの真偽値に基づいて判定式(論理式)を生成する。そして、情報処理装置10は、生成された判定式から、MC/DCのテスト網羅度を満たす変数値の組合せを生成する。情報処理装置10は、生成した変数値の組合せを、テスト対象となる判定式の、MC/DCのテスト網羅度を満たすテストケースの和集合として出力する。なお、S12−S19のテストケースの生成処理は、例えば、図4M、4N、4Pで説明した。
情報処理装置10は、例えば、真偽値表DB201を参照し、S4−S11の処理で生成した真偽値表テーブルを取得する。そして、情報処理装置10は、取得した真偽値表テーブル内に、未だ処理していないレコードが存在するか否かを判定する(S12)。情報処理装置10は、例えば、真偽値表DB201から取得した真偽値表テーブルに未処理のレコードが存在する場合には(S12,yes)、S13の処理に移行する。一方、情報処理装置10は、例えば、真偽値表DB201から取得した真偽値表テーブルに未処理のレコードが存在しない場合には(S12,no)、S13−S15の処理をスキップしS16の処理に移行する。
情報処理装置10は、取得した真偽値表テーブル内から処理対象となるレコードを選択する(S13)。そして、情報処理装置10は、例えば、真偽値表テーブルのカラムに設定された各リーフと、カラムに格納された真偽値とを組合せて、対象となるレコードの判定式(論理式)を生成する(S14)。情報処理装置10は、例えば、カラムに格納された真偽値が“真(true)”の場合には、カラムに設定されたリーフを判定式の条件とする。また、情報処理装置10は、例えば、カラムに格納された真偽値が“偽(false)”の
場合には、カラムに設定されたリーフに論理演算子“not”を付与し、判定式の条件とす
る。そして、情報処理装置10は、カラムに格納された真偽値に応じて変換されたリーフを条件として、各条件を論理演算子“and”で結合し、対象となるレコードの判定式(論
理式)を生成する。
情報処理装置10は、S14の処理で生成した判定式(論理式)を判定式テーブルに格納する(S15)。情報処理装置10は、S12−S15の処理を繰り返し、真偽値表テーブルの全てのレコードについて判定式(論理式)を生成する。真偽値表テーブルの全てのレコードについて判定式(論理式)が格納された判定式テーブルは、例えば、判定式DB203に格納される。
S16の処理では、情報処理装置10は、例えば、判定式DB203を参照し、S12−S15の処理で生成された判定式テーブルを取得する。そして、情報処理装置10は、取得した判定式テーブル内に、未だ処理していない判定式が存在するか否かを判定する(S16)。情報処理装置10は、例えば、判定式DB203から取得した判定式テーブル内に未処理の判定式が存在する場合には(S16,yes)、S17の処理に移行する。一方、情報処理装置10は、例えば、判定式DB203から取得した判定式テーブル内に
未処理の判定式が存在しない場合には(S16,no)、S17−S18の処理をスキップしS19の処理に移行する。
情報処理装置10は、例えば、S16の処理で取得した判定式テーブル内から処理対象となる1つの判定式を取得する(S17)。情報処理装置10は、例えば、S17の処理で取得した判定式に基づいて、判定式の論理関係を満たす変数値の組合せを充足解として取得する(S18)。例えば、判定式の論理関係を満たす変数値の組合せは、充足可能性判定部104により行われる。情報処理装置10は、S18の処理で取得した、判定式の論理関係を満たす充足解を、例えば、主記憶部12の所定の領域に一時的に記憶する。
情報処理装置10は、S16−S18の処理を繰り返し、判定式テーブルの全ての判定式(論理式)について、判定式毎の論理関係を満たす充足解を取得する。情報処理装置10は、S16−S18の処理で取得した、判定式毎の論理関係を満たす充足解を、例えば、テストケースの和集合として出力する(S19)。
情報処理装置10で実行されるS1−S4の処理は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップの一例である。また、情報処理装置10のCPU11等は、判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段の一例としてS1−S4の処理を実行する。
また、情報処理装置10で実行されるS5−S6の処理は、取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップの一例である。また、情報処理装置10のCPU11等は、取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析手段の一例としてS5−S6の処理を実行する。
また、情報処理装置10で実行されるS7−S10の処理は、所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップの一例である。また、情報処理装置10のCPU11等は、所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得手段と前記解析手段とを適用する手段の一例としてS7−S10の処理を実行する。
次に、図5D−5Eに例示のフローチャートを参照し、図5Aに例示のS8、S10の処理を説明する。図5D−5Eに例示の処理は、図5Aに例示のS8、S10に共通する処理として行われる。
情報処理装置10は、図5D−5Eの処理により、特定した論理演算子について、各種ルール(論理積、論理和等の基本ルール、組合せルール)を階層的(再帰的)に適用することができる。情報処理装置10は、各種ルールの階層的な適用により、受け付けた判定式について、MC/DCのテスト網羅度を満たす、各条件の真偽値関係を生成することができる。情報処理装置10は、生成した各条件の真偽値関係を、例えば、各条件がカラムとして設定された真偽値表テーブルに格納する。
情報処理装置10は、図5D−5Eの処理により、n個の条件数に対してn+1個を最小限とするn+1通り以上のMC/DCのテスト網羅度を満たす、冗長性を排除した各条件の真偽値関係を生成することができる。なお、図5D−5EのS21−S35の処理は、例えば、図4F−4H、4J−4Lで説明した。
図5Dに例示のフローチャートにおいて、情報処理装置10は、処理対象となるノードがリーフ(条件)であることを判定する(S21)。情報処理装置10は、例えば、ルートとなる論理演算子に対応付けられた識別番号から、処理対象のノードがリーフであることを判定する。情報処理装置10は、処理対象となるノードがリーフである場合には(S21,yes)、S22の処理に移行し、処理対象となるノードがリーフでない場合には(S21,no)、S23の処理に移行する。
S22の処理では、情報処理装置10は、例えば、S6の処理で取得した論理積、論理和等の基本ルールの真偽値表から、処理対象となるノードの配置位置に応じた真偽値を取得し、S3の処理で取得した真偽値表テーブルに格納する。基本ルールの真偽値表から取得した真偽値は、処理対象となるリーフがカラムとして設定された領域に格納される。
例えば、ルートとなる論理演算子が“and”の場合には、S6の処理で取得した基本ル
ールとなる真偽値表は、論理積の真偽値表となる。論理積の真偽値表には、真偽値、及び、組合せルールを含む真偽値情報が格納されている。
例えば、図5BのS8の処理の場合では、処理対象となる子ノードは、論理演算子“and”により結び付けられる左側のリーフである。情報処理装置10は、例えば、S6の処
理で取得した論理積の真偽値表の「左辺」カラムに格納された真偽値情報を取得し、該真偽値情報に含まれる真偽値を取得する。情報処理装置10は、例えば、S3の処理で取得した真偽値表テーブルに真偽値表テーブルにID=1のレコードを新たに追加し、該レコードの、リーフと対応するカラムの領域に、論理積の真偽値表から取得した真偽値を格納する。情報処理装置10は、当該処理を終了し、例えば、図5BのS9の処理に移行する。
また、例えば、図5BのS10の処理の場合では、処理対象となる子ノードは、論理演算子“and”により結び付けられる右側のリーフである。情報処理装置10は、例えば、
S6の処理で取得した論理積の真偽値表の「右辺」カラムに格納された真偽値情報を取得し、該真偽値情報に含まれる真偽値を取得する。情報処理装置10は、例えば、S3の処理で取得した真偽値表テーブルに真偽値表テーブルにID=1のレコードを新たに追加し、該レコードの、リーフと対応するカラムの領域に、論理積の真偽値表から取得した真偽値を格納する。情報処理装置10は、当該処理を終了し、例えば、図5AのS5の処理に移行する。
S23の処理では、情報処理装置10は、例えば、処理対象のノードの論理演算子に対応する論理積、論理和等の基本ルールの真偽値表を、真偽値ルールDB202から取得する。また、情報処理装置10は、S6の処理で取得した論理積、論理和等の基本ルールとなる真偽値表から、処理対象となるノードの配置位置に応じた真偽値情報を取得する。真偽値情報には、真偽値、及び、組合せルールが含まれる。
例えば、図5AのS8の処理の場合では、情報処理装置10は、S6の処理で取得した論理積、論理和等の基本ルールとなる真偽値表の「左辺」カラムに格納された真偽値情報を取得すればよい。また、図5AのS10の処理の場合では、情報処理装置10は、例えば、S6の処理で取得した論理積、論理和等の基本ルールとなる真偽値表の「右辺」カラムに格納された真偽値情報を取得すればよい。
情報処理装置10は、処理対象のノードの論理演算子に対応する基本ルールの真偽値表を、例えば、主記憶部12の所定の領域に一時的に記憶する。また、情報処理装置10は、S6の処理で取得した真偽値表からの真偽値情報を、例えば、ルートの論理演算子に対
応付けて、主記憶部12の所定の領域に一時的に記憶する。
図5Eに例示のフローチャートにおいて、S24の処理では、例えば、情報処理装置10は、S23で取得した真偽値情報(図5Eでは“組値”)に含まれる組合せルールを示す識別情報(図5Eでは“第二要素”)が“0”であることを判定する。なお、組合せルールを示す識別情報が“0”の場合には組合せルール1が適用され、“1”の場合には組合せルール2が適用される。
情報処理装置10は、例えば、S23で取得した真偽値情報に含まれる組合せルールを示す識別情報が“0”である場合には(S24,yes)、S25−S30の処理をスキップし、S31の処理に移行する。一方、情報処理装置10は、例えば、S23で取得した真偽値情報に含まれる組合せルールを示す識別情報が“1”である場合には(S24,no)、S25の処理に移行する。なお、S25の処理に移行した場合には、S31−S35の処理はスキップされる。
言い換えれば、S25−S30の処理では、組合せルール1に沿って処理対象のノードに応じた論理積、論理和等の基本ルールの階層的(再帰的)な処理が行われる。また、S31−S35の処理では、組合せルール2に沿って処理対象のノードに応じた論理積、論理和等の基本ルールの階層的(再帰的)な処理が行われる。
S25の処理では、情報処理装置10は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報に含まれる真偽値に基づいて、処理対象のノードの論理演算子に応じて取得した真偽値表の「全体」カラムに格納された真偽値を検索する。そして、情報処理装置10は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報含まれる真偽値と一致する値が「全体」カラムに格納された全てのレコード情報を取得する。
レコード情報には、例えば、処理対象のノードの論理演算子に応じて取得した真偽値表のレコードID、左辺の真偽値情報(真偽値、組合せルール)、右辺の真偽値情報(真偽値、組合せルール)が含まれる。情報処理装置10は、取得したレコード情報を、例えば、処理対象のノードに対応付けて主記憶部12の所定の領域に一時的に記憶する。
S26の処理では、情報処理装置10は、例えば、S25の処理で取得した全てのレコード情報について未処理のルールが存在するかを判定する。情報処理装置10は、例えば、S25の処理で取得した全てのレコード情報について未処理のルールが存在する場合には(S26,yes)、S27の処理に移行する。一方、情報処理装置10は、例えば、S25の処理で取得した全てのレコード情報について未処理のルールが存在しない場合には(S26,no)、当該処理を終了する。
S27の処理では、情報処理装置10は、例えば、S25の処理で取得したレコードの内、処理対象となるノードの子ノード(左辺)を取得する。そして、情報処理装置10は、例えば、取得した子ノード(左辺)に対して当該処理(図5D−5E,S21−S35)を繰り返して実行する(S28)。同様に、情報処理装置10は、例えば、S25の処理で取得したレコードの内、処理対象となるノードの子ノード(右辺)を取得する(S29)。そして、情報処理装置10は、例えば、取得した子ノード(右辺)に対して当該処理(図5D−5E,S21−S35)を繰り返して実行する(S30)。
情報処理装置10は、例えば、S26−S30の処理を繰り返して実行することにより、処理対象となるレコード情報に応じた、MC/DCのテスト網羅度を満たす真偽値が格納された真偽値表テーブルが生成される。情報処理装置10は、例えば、生成した真偽値表テーブルを真偽値表DB201に格納する。
次に、図5Eに例示のフローチャートの、S31−S35の処理を説明する。S31の処理では、例えば、情報処理装置10は、処理対象のノードの配置位置に応じて取得した真偽値情報に含まれる真偽値に基づいて、処理対象のノードの論理演算子に応じて取得した真偽値表の「全体」カラムに格納された真偽値を検索する。そして、情報処理装置10は、例えば、処理対象のノードの配置位置に応じて取得した真偽値情報含まれる真偽値と一致する値が「全体」カラムに格納されたレコードの中から1つのレコード情報を取得する。
レコード情報には、例えば、処理対象のノードの論理演算子に応じて取得した真偽値表のレコードID、左辺の真偽値情報(真偽値、組合せルール)、右辺の真偽値情報(真偽値、組合せルール)が含まれる。情報処理装置10は、取得したレコード情報を、例えば、処理対象のノードに対応付けて主記憶部12の所定の領域に一時的に記憶する。
S31の処理では、情報処理装置10は、例えば、S30の処理で取得したレコードの処理対象となるノードの子ノード(左辺)を取得する。そして、情報処理装置10は、例えば、取得した子ノード(左辺)に対して当該処理(図5D−5E,S21−S35)を繰り返して実行する(S33)。同様に、情報処理装置10は、例えば、S30の処理で取得したレコードの内、処理対象となるノードの子ノード(右辺)を取得する(S34)。そして、情報処理装置10は、例えば、取得した子ノード(右辺)に対して当該処理(図5D−5E,S21−S35)を繰り返して実行する(S35)。
情報処理装置10は、例えば、S31−S35の処理を繰り返して実行することにより、処理対象となるレコード情報に応じた、MC/DCのテスト網羅度を満たす真偽値が格納された真偽値表テーブルが生成される。情報処理装置10は、例えば、生成した真偽値表テーブルを真偽値表DB201に格納する。
以上、説明したように、本実施形態の情報処理装置10は、テスト対象となる判定式を解析し、判定式に含まれる論理演算子、及び、該論理演算子によって結び付けられた判定に係る各条件を特定することができる。特定された各条件には、例えば、2つの条件が論理演算子で結合された条件式が含まれる。本実施形態の情報処理装置10は、特定した各条件に識別符号を付与し、該識別符号を、各条件を結び付ける論理演算子に対応付けることにより、判定式についての2分木構造を階層的に特定することができる。本実施形態の情報処理装置10では、特定した2分木構造から、例えば、階層化された最上位の論理演算子を特定することができる。
本実施形態の情報処理装置10は、論理積、論理和等の真偽値について基本ルールとなる、3通りの真偽値の組合せを格納した真偽値表を備えることができる。本実施形態の情報処理装置10では、基本ルールとなる真偽値表に格納された3通りの真偽値の組合せを、特定した論理演算子に適用することにより、真偽値の判定結果について余剰となる真偽値の組合せを排除できる。
また、本実施形態では、各真偽値表には、真偽値の判定結果に独立に影響しない(対象となる条件の真偽値を反転しても判定結果が変わらない)場合には、判定結果が共通する条件の組合せから1つの組合せを抽出し適用すると言う組合せルールを反映できる。同様に、本実施形態では、各真偽値表には、真偽値の判定結果に独立に影響する(対象となる条件の真偽値を反転すると判定結果が変わる)場合には、判定結果が共通する条件の組合せを全て抽出し適用すると言う組合せルールを反映できる。
本実施形態の情報処理装置10では、各真偽値表に格納された、真偽値と組合せルール
に従って、論理演算子で結び付けられた各条件の真偽値関係を特定できる。また、情報処理装置10は、例えば、論理演算子で結び付けられた各条件に条件式が含まれる場合には、条件式が含まれる条件について特定された真偽値の値と一致する判定結果を持つ真偽値関係を、各真偽値表から特定することができる。このため、本実施形態の情報処理装置10は、階層化された最上位の論理演算子で結び付く各条件の真偽値関係を特定し、さらに、各条件に含まれる条件式についての真偽値関係を階層的(再帰的)に求めることができる。
この結果、本実施形態の情報処理装置10は、テスト対象となる判定式について、冗長性を排除した、MC/DCのテスト網羅度を満たす、各条件の真偽値の組合せを生成することができる。本実施形態の情報処理装置10は、生成された各条件の真偽値の組合せから、各条件に含まれる変数について、真偽値の値に応じた変数値の組合せをテストケースとして生成することができる。MC/DCのテスト網羅度を満たす、各条件の真偽値の組合せから生成された変数値の組合せは、MC/DCのテスト網羅度を満たすテストケースとなる。本実施形態の情報処理装置10では、冗長性を排除可能な、MC/DCのテスト網羅度の条件を満たすテストケースを生成する技術が提供できる。
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置(以下、コンピュータ等)に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、CD−ROM、CD−R/W、DVD、ブルーレイディスク、DAT、8mmテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやROM等がある。
《その他》
以上の実施形態は、さらに以下の付記と呼ぶ態様を含む。以下の各付記に含まれる構成要素は、他の付記に含まれる構成と組み合わせることができる。
(付記1)
コンピュータに、
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップと、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
を実行させるためのテストケース生成プログラム。
(付記2)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として
、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記1に記載のテストケース生成プログラム。
(付記3)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを選択するステップを含む、付記2に記載のテストケース生成プログラム。
(付記4)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、付記2に記載のテストケース生成プログラム。
(付記5)
前記解析ステップは、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記2から付記4の何れか一の付記に記載のテストケース生成プログラム。
(付記6)
前記解析ステップは、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記2から付記4の何れか一の付記に記載のテストケース生成プログラム。
(付記7)
コンピュータが、
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得ステップと、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析ステップと、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、
を実行するテストケース生成方法。
(付記8)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記7に記載のテストケース生成方法。
(付記9)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを選択するステップを含む、付記8に記載の生成方法。
(付記10)
前記解析ステップは、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響し、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、全ての組合せを選択するステップを含む、付記8に記載の生成方法。
(付記11)
前記解析ステップは、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記8から付記10の何れか一の付記に記載の生成方法。
(付記12)
前記解析ステップは、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の演算対象式の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の演算対象式中の真偽値の組合せを選択するステップを含む、付記8から付記10の何れか一の付記に記載の生成方法。
(付記13)
判定に係る論理式中の演算子と演算対象式との組み合わせに基づく階層中の最上位の階層の演算子を取得する取得手段と、
前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる演算対象式の真偽値とが所定関係を満たすように、前記演算対象式の真偽値を求める解析手段と、
前記所定関係を満たす演算対象式の真偽値を用いて前記階層中の最上位の階層の演算子で結合される演算対象式以下の論理式に前記取得手段と前記解析手段とを適用する手段と、
を備えるテストケース生成装置。
(付記14)
前記階層は、論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される演算対象式とを上位の階層とし、前記上位の階層とされた演算対象式中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の演算対象式とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけることで形成される、付記13に記載のテストケース生成装置。
(付記15)
前記解析手段は、第1の階層に含まれる第1の演算子による演算結果の真偽値に影響しない、前記第1の演算子によって演算の対象となる第1の演算対象式の真偽値を共通の値にする、前記第1の階層直下の第2の階層の演算対象式の真偽値の組合せが複数にある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを選択する手段を含む、付記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の何れか一の付記に記載のテストケース生成装置。
10 情報処理装置
11 CPU
12 主記憶部
13 補助記憶部
14 入力部
15 出力部
16 通信部
101 判定式解析部
101a 2分木変換部
101b 条件収集部
102 真偽値ルール適用部
103 テストケース生成部
103a 判定式生成部
104 充足可能性判定部
201 真偽値表DB
202 真偽値ルールDB
203 判定式DB
Tb1 論理積真偽値表
Tb2 論理和真偽値表
Tb3 真偽値表テーブル
Tb4 判定式テーブル

Claims (5)

  1. コンピュータに、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定ステップと、
    前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得ステップと、
    前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析ステップと、
    前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、を実行させ、
    前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第1の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第2の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを含む、
    テストケース生成プログラム。
  2. 前記解析ステップは、第1の階層の演算子が積演算子である場合に、積演算子による演算の対象となる2つの第1の条件の真偽値の組合せが真と偽、偽と真、または真と真となるように、前記第1の階層直下の第2の条件中の真偽値の組合せを選択するステップを含む、請求項に記載のテストケース生成プログラム。
  3. 前記解析ステップは、第1の階層の演算子が和演算子である場合に、和演算子による演算の対象となる2つの第1の条件の真偽値の組合せが真と偽、偽と真、または偽と偽となるように、前記第1の階層直下の第2の条件中の真偽値の組合せを選択するステップを含む、請求項に記載のテストケース生成プログラム。
  4. コンピュータが、
    論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定ステップと、
    前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得ステップと、
    前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析ステップと、
    前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得ステップと前記解析ステップとを適用するステップと、を実行し、
    前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第1の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第2の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを含む、
    テストケース生成方法。
  5. 論理式中に複数の演算子が含まれる場合に、演算子による演算順序の優先度順に、優先度が後の演算子と前記演算子によって演算される条件とを上位の階層とし、前記上位の階層とされた条件中でさらに、演算子による演算順序の優先度順に、次の演算子と前記次の演算子によって演算される次の条件とを次の階層として、前記上位の階層の直下に前記次の階層を位置づけて階層構造を決定する決定手段と、
    前記階層構造において、判定に係る論理式中の最上位の階層の演算子を取得する取得手段と、
    前記取得した演算子による演算結果の真偽値と、前記演算子によって演算の対象となる条件の真偽値とが所定関係を満たすように、前記条件の真偽値を求める解析手段と、
    前記所定関係を満たす条件の真偽値を用いて前記階層中の最上位の階層の演算子で結合される条件以下の論理式に前記取得手段と前記解析手段とを適用する手段と、を備え、
    前記所定関係を満たす条件の真偽値は、前記取得した演算子による演算結果の真偽値に影響しない、前記取得した演算子によって演算の対象となる第1の条件の真偽値を共通の値にする、前記取得した演算子の階層直下の第2の階層の条件の真偽値の組合せが複数ある場合には、前記複数ある真偽値の組合せのうち、いずれか1つの組合せを含む、
    テストケース生成装置。
JP2014144783A 2014-07-15 2014-07-15 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置 Active JP6459267B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014144783A JP6459267B2 (ja) 2014-07-15 2014-07-15 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014144783A JP6459267B2 (ja) 2014-07-15 2014-07-15 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Publications (2)

Publication Number Publication Date
JP2016021163A JP2016021163A (ja) 2016-02-04
JP6459267B2 true JP6459267B2 (ja) 2019-01-30

Family

ID=55265963

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014144783A Active JP6459267B2 (ja) 2014-07-15 2014-07-15 テストケース生成プログラム、テストケース生成方法及びテストケース生成装置

Country Status (1)

Country Link
JP (1) JP6459267B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111984540A (zh) * 2020-08-27 2020-11-24 北京一仿科技有限公司 最小代价测试用例生成方法
CN112052177A (zh) * 2020-09-14 2020-12-08 北京一仿科技有限公司 一种多值耦合信号的mc/dc测试用例集生成方法

Family Cites Families (2)

* 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パターン生成装置
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
JP2016021163A (ja) 2016-02-04

Similar Documents

Publication Publication Date Title
CN106227668B (zh) 数据处理方法和装置
JP4153883B2 (ja) 階層型データベース装置および階層型データベース装置における製品選定方法およびプログラム
JP4940973B2 (ja) 論理構造認識処理プログラム、論理構造認識処理方法および論理構造認識処理装置
US7823069B1 (en) Method and application tool for dynamically navigating a user customizable representation of a network device configuration
US9336019B2 (en) Information processing apparatus and method therefor
US20140310053A1 (en) Method and systems for providing business process suggestions and recommendations utilizing a business process modeler
US9626160B2 (en) Sequence-program-component creation program and sequence-program-component creation device
US20060224359A1 (en) Method and system for optimizing configuration classification of software
JP2016015026A (ja) 作業対象確定プログラム、作業対象確定装置及び作業対象確定方法
JP2016126693A (ja) 制御手順方法、制御手順プログラム及び制御手順装置
WO2020008991A1 (ja) 検証自動化装置、検証自動化方法、およびコンピュータ読み取り可能な記録媒体
JP2018073228A (ja) ケーブル配線プログラム、情報処理装置、およびケーブル配線方法
JP6459267B2 (ja) テストケース生成プログラム、テストケース生成方法及びテストケース生成装置
US20070283300A1 (en) Method and System for Changing a Description for a State Transition Function of a State Machine Engine
JP6569846B1 (ja) 応答処理プログラム、応答処理方法、応答処理装置および応答処理システム
KR101942905B1 (ko) 통신 데이터 모델링 방법
CN115329753B (zh) 一种基于自然语言处理的智能数据分析方法和系统
US8510254B2 (en) Ontology model to accelerate engineering analysis in manufacturing
CN110196952A (zh) 程序代码的搜索处理方法、装置、设备及存储介质
JP6511793B2 (ja) テストケース生成プログラム、テストケース生成方法及びテストケース生成装置
JP2018124922A (ja) 情報処理装置、情報処理方法、およびプログラム
CN104424060B (zh) 一种用于确定故障的方法和装置
CN110727428A (zh) 一种转换业务逻辑层代码的方法、装置和电子设备
JP5600826B1 (ja) 非構造化データ処理システム、非構造化データ処理方法およびプログラム
JP5358981B2 (ja) 情報処理装置、情報処理装置の制御方法および情報処理装置の制御用プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180410

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180611

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: 20181204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181217

R150 Certificate of patent or registration of utility model

Ref document number: 6459267

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150