JP2013012082A - テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 - Google Patents
テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 Download PDFInfo
- Publication number
- JP2013012082A JP2013012082A JP2011144921A JP2011144921A JP2013012082A JP 2013012082 A JP2013012082 A JP 2013012082A JP 2011144921 A JP2011144921 A JP 2011144921A JP 2011144921 A JP2011144921 A JP 2011144921A JP 2013012082 A JP2013012082 A JP 2013012082A
- Authority
- JP
- Japan
- Prior art keywords
- logical
- expression
- logical expression
- information
- stored
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】事前条件を表す論理式に全称記号や存在記号が含まれる場合でも、境界値制約を用いて、組み合わせ爆発を抑えたテストデータを生成するテストデータ生成プログラムを提供する。
【解決手段】 論理式に存在記号が含まれている場合、論理式から存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出し、入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照し、部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得し、行数を表す変数の値を、取得した行数の最小値、最大値、及び、最小値より大きく最大値より小さい範囲とする論理式をそれぞれ生成し、生成した論理式を論理和で結んだ制約式を生成し、記憶部に記憶された論理式に含まれる部分述語論理式を生成した制約式との論理積に変換する。
【選択図】図2
【解決手段】 論理式に存在記号が含まれている場合、論理式から存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出し、入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照し、部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得し、行数を表す変数の値を、取得した行数の最小値、最大値、及び、最小値より大きく最大値より小さい範囲とする論理式をそれぞれ生成し、生成した論理式を論理和で結んだ制約式を生成し、記憶部に記憶された論理式に含まれる部分述語論理式を生成した制約式との論理積に変換する。
【選択図】図2
Description
本発明は、プログラムのテストに用いるテストデータを生成するテストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置に関する。
従来、仕様に基づいて作成されたプログラムのテストをする場合には、仕様に含まれる条件を用いてテストデータを生成する方法や、プログラムに含まれる条件を用いてテストデータを生成する方法がある。例えば、業務システムで用いられるプログラムのテストは、業務システムなどのプログラムの仕様を用いて行われるチェックや、作成したプログラムを用いて行われる境界値テストなど、様々な観点より行うことが望ましい。境界値テストとは、プログラムに誤りがある場合、誤りはデータの境界で起こりやすいという経験則に基づいて、プログラムの分岐条件により変化するデータの境界を求めて、その境界を示す境界値を入力(テストデータ)として用いるテストである。
プログラムの仕様は「XならばYとなる」のような形式で表されることが多く、仕様にはこのような形式で表される条件が複数含まれている。また、仕様をテストするためのテストデータは、Xが示す事前条件が論理式で表現されている場合に、Xを充足する充足値といえる。充足値は、Xを入力としてSatisfiability Modulo Theories(SMTソルバ)などを利用し、Xの充足値を自動的に求めることによりテストデータを生成することができる。SMTソルバは、入力された論理式ごとに、充足可能性を判定し、充足可能であると判定した場合に、この論理式各々を満たす1つの解(充足値)を出力するものである。
また、入力される論理式を変形してSMTソルバが充足値を求め易くする方法として、例えば、事前条件Xを表す論理式に論理和(or)が含まれる場合、該論理式を論理和標準形に変換し、論理和で結ばれている各論理式ごとに充足値を求める方法が知られている。
また、事前条件Xを表す論理式に限量子が含まれる場合、限量子を除去してから、充足値を生成する方法が知られている。例えば、事前条件として「not(会員ID=“”) and ∃r(i)∈注文明細, r(i).購入数=“” or r(i).品名=“”」があり、事前条件の「注文明細」が5つの行(i=0〜4)を有するテーブルを示し、入力データが「会員ID」「購入数」「品名」である場合を考える。この事前条件の「∃r(i)∈注文明細, r(i).購入数=“” or r(i).品名=“”」から限量子を除去し、展開すると「F(0) or F(1) or F(2) or F(3) or F(4)」と表すことができる。
展開した例
「F(0)」=「注文明細, r(0).購入数=“” or r(0).品名=“”」
「F(1)」=「注文明細, r(1).購入数=“” or r(1).品名=“”」
「F(2)」=「注文明細, r(2).購入数=“” or r(2).品名=“”」
「F(3)」=「注文明細, r(3).購入数=“” or r(3).品名=“”」
「F(4)」=「注文明細, r(4).購入数=“” or r(4).品名=“”」
「F(0)」=「注文明細, r(0).購入数=“” or r(0).品名=“”」
「F(1)」=「注文明細, r(1).購入数=“” or r(1).品名=“”」
「F(2)」=「注文明細, r(2).購入数=“” or r(2).品名=“”」
「F(3)」=「注文明細, r(3).購入数=“” or r(3).品名=“”」
「F(4)」=「注文明細, r(4).購入数=“” or r(4).品名=“”」
すると、「F(0)」「F(1)」「F(2)」「F(3)」「F(4)」各々において、2通りの組み合わせが存在するため、10通り(5×2)の組み合わせとなることがわかる。本例では、10通りの組み合わせですんでいるが、他の仕様では上記に示したような論理式がいくつも積み重なっていく場合が想定されるため、組み合わせ爆発が発生する要因となる。さらに、本例において10通りの組み合わせの中には有用でない組み合わせが存在していることが想定される。すなわち、組み合わせの中にはテスト内容が重複する組み合わせがあり、重複するものの中から代表する組み合わせだけを用いればよいため、すべての組み合わせを用いる必要がないことが想定される。本例では10通りであるが、組み合わせの数が多ければ重複する組み合わせも多くなることが想定される。
なお、関連する技術として、限量子記号付きブール式の充足可能性を判定する際に使用される技法が開示されている。この技術によれば、限量子記号付きブール式は、充足可能性ソルバによって分析可能な構成要素部に分解される。各構成要素は、独立または並列に、充足可能性のために分析される。構成要素が充足不能である場合、限量子記号付きブール式は充足不能であると判定され、分析が中止される。構成要素が充足可能である場合、充足可能な構成要素に対応する割り当てが書き留められる。構成要素が充足可能である場合、それが別の未テストの構成要素に追加されて、組合せ構成要素が提供され、組合せ構成要素の充足可能性が分析される。そのような追加および分析は、限量子記号付きブール式が完了され、充足可能と判定されるか、または充足不能と判定されるまで繰り返される。
また、関連する技術として自動テスト実行システムが実行した自動テスト結果から重複を省き、必要最小限のテスト結果のみを確認するようにし、より効率的にテストを実施するための方法が開示されている。この方法によれば、テスト対象のソースコードに処理の流れを追跡するための処理を埋め込むトレース機能埋込部を有している。また、トレース情報表と自動テスト実行システムが出力したテスト実行結果表を連結し、重複したテストケースを削除するテスト結果分析部を用いて、重複したテストケースを削除した後、テスト実行結果表を表示装置に表示する。
Nikolai Tillmann and Jonathan de Halleux, "Pex-White Box Test Generation for .NET", TAP 2008, LNCS 4966, pp.134-153, 2008.
本発明は、事前条件を表す論理式に全称記号や存在記号が含まれる場合でも、境界値制約を用いて、組み合わせ爆発を抑えたテストデータを生成するテストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置を提供することを目的とする。
本実施の態様のひとつであるテストデータ生成プログラムは、テスト対象のプログラムの入力データに関する事前条件を表した論理式が記憶された記憶部を参照して、上記論理式に存在記号が含まれているか否かを判定する。
続いて、上記判定において含まれると判定した場合、上記論理式から上記存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出する。
続いて、上記入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照して、上記部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得する。
続いて、上記行数を表す変数の値を、上記取得した行数の最小値、最大値、及び、上記最小値より大きく上記最大値より小さい範囲とする論理式をそれぞれ生成する。
続いて、上記生成した論理式を論理和で結んだ制約式を生成する。
続いて、上記記憶部に記憶された上記論理式に含まれる上記部分述語論理式を上記生成した制約式との論理積に変換する。
続いて、上記記憶部に記憶された上記論理式に含まれる上記部分述語論理式を上記生成した制約式との論理積に変換する。
本実施の態様によれば、事前条件を表す論理式に全称記号や存在記号が含まれる場合でも、境界値制約を用いて、組み合わせ爆発を抑えたテストデータを生成することができるという効果を奏する。
実施の態様に示すテストデータの生成は、プログラムをテストする際に用いるプロパティに含まれる事前条件を表した論理式に全称記号または存在記号が含まれている場合、該論理式を否定標準形に変換して、全称記号を含まない論理式を生成する。次に、生成した論理式から存在記号を含む部分述語論理式を抽出する。
続いて、部分述語論理式により特定されるテーブルの行数を表す変数に代入される数値を用いて、最小値と、最大値と、最小値より大きく最大値より小さい範囲を決定する。そして、変数と最小値と最大値とその範囲とを用いて表される論理式各々を論理和で結び、制約式を生成する。また、部分述語論理式の存在記号を論理積に変換する。その後、部分述語論理式に関連して変数を用いて表される論理式と制約式とを変換した論理積で結ぶ。
続いて、事前条件の部分述語論理式を、論理積で結んで生成した論理式に変更し、変更した事前条件を論理和標準形に変換し、論理和ごとに変更した該事前条件を分割した部分論理式各々を生成する。
その後、事前条件に示されている入力変数に入力するデータと部分論理式各々とを組み合わせて入力として、SMTソルバを実行し、事前条件を充足する解を、部分論理式各々に対して求める。その結果、事前条件を表す論理式に全称記号や存在記号が含まれる場合でも、境界値制約を用いて、組み合わせ爆発を抑えたテストデータを生成することができる。
以下図面に基づいて、実施形態について詳細を説明する。
テストデータ生成装置1について説明する。
テストデータ生成装置1について説明する。
図1は、テストデータ生成装置のハードウェアの一実施例を示す図である。テストデータ生成装置1は、制御部2、記憶部3、記録媒体読取装置4、入出力インタフェース5(入出力I/F)、通信インタフェース6(通信I/F)などを備えている。また、上記各構成部はバス7によってそれぞれ接続されている。
制御部2は、後述する抽出部201、変換部202、生成部203、充足値生成部204などを有している。また、制御部2はCentral Processing Unit(CPU)、マルチコアCPU、プログラマブルなデバイス(Field Programmable Gate Array(FPGA)、Programmable Logic Device(PLD)など)を用いることが考えられる。
記憶部3は、後述するプロパティ情報、論理式情報、変換情報、テストデータ生成情報、データセット情報などを記憶している。記憶部3は、例えばRead Only Memory(ROM)、Random Access Memory(RAM)などのメモリやハードディスクなどが考えられる。なお、記憶部3にはパラメータ値、変数値などのデータを記録してもよいし、実行時のワークエリアとして用いてもよい。上記プロパティ情報、論理式情報、変換情報、テストデータ生成情報、データセット情報などは、データベースに記録されていてもよい。
記録媒体読取装置4は、制御部2の制御に従って記録媒体8に対するデータのリード/ライトを制御する。そして、記録媒体8に記録媒体読取装置4の制御で書き込まれたデータを記録させたり、記録媒体8に記録されたデータを読み取らせたりする。また、着脱可能な記録媒体8は、コンピュータで読み取り可能なnon-transitory(非一時的)な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)などがある。光ディスクには、Digital Versatile Disc(DVD)、DVD−RAM、Compact Disc Read Only Memory(CD−ROM)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、Magneto-Optical disk(MO)などがある。なお、記憶部3もnon-transitory(非一時的)な記録媒体に含まれる。
入出力インタフェース5には、入出力部9が接続され、利用者が入力した情報(例えば、プログラムや仕様などのデータ)を受信し、バス7を介して制御部2または記憶部3などに送信する。また、制御部2からの命令に従ってディスプレイの画面上に出力情報(プログラムのテスト結果やテストデータなど)や操作情報などを表示する。入出力部9の入力装置は、例えば、キーボード、ポインティングデバイス(マウスなど)、タッチパネルなどが考えられる。なお、入出力部9の出力部であるディスプレイは、例えば、液晶ディスプレイなどが考えられる。また、出力部はCathode Ray Tube(CRT)ディスプレイ、プリンタなどの出力装置であってもよい。
通信インタフェース6は、Local Area Network(LAN)接続やインターネット接続や無線接続を行うためのインタフェースである。また、通信インタフェース6は必要に応じ、他のコンピュータとの間のLAN接続やインターネット接続や無線接続を行うためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
このようなハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能(例えば、図3、8、12に示すフロー)が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体8に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの記録媒体8が販売される。また、プログラムをサーバコンピュータの記憶装置に記録しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、記録媒体8に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶部3に記録する。そして、コンピュータは、自己の記憶部3からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、記録媒体8から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
図2は、テストデータ生成装置の一実施例を示す図である。
抽出部201は、否定標準形変換部206、木構造生成部205、存在記号付論理式抽出部207を有している。否定標準形変換部206は、記憶部3の後述するプロパティ情報からプロパティに含まれる事前条件を表す論理式を取得する。また、否定標準形変換部206は、事前条件を表す論理式に限量子を示す記号(全称記号または存在記号)がある場合に、該論理式を否定標準形に変換する。否定標準形への変換は、例えば、後述する含意記号除去処理と二重否定除去処理とドモルガンの法則を行う処理と限量子変換処理とを用いて行う。木構造生成部205は、否定標準形へ変換された論理式を木構造で表して後述する論理式情報に記憶する。存在記号付論理式抽出部207は、論理式情報に存在記号の存在する部分述語論理式があるか否かを判定し、存在記号の存在する論理式が場合に、論理式と論理式に関連付けられている情報を変換情報に記憶する。
抽出部201は、否定標準形変換部206、木構造生成部205、存在記号付論理式抽出部207を有している。否定標準形変換部206は、記憶部3の後述するプロパティ情報からプロパティに含まれる事前条件を表す論理式を取得する。また、否定標準形変換部206は、事前条件を表す論理式に限量子を示す記号(全称記号または存在記号)がある場合に、該論理式を否定標準形に変換する。否定標準形への変換は、例えば、後述する含意記号除去処理と二重否定除去処理とドモルガンの法則を行う処理と限量子変換処理とを用いて行う。木構造生成部205は、否定標準形へ変換された論理式を木構造で表して後述する論理式情報に記憶する。存在記号付論理式抽出部207は、論理式情報に存在記号の存在する部分述語論理式があるか否かを判定し、存在記号の存在する論理式が場合に、論理式と論理式に関連付けられている情報を変換情報に記憶する。
変換部202は、同値クラス算出部208、存在記号なし論理式変換部209を有している。同値クラス算出部208は、変換情報から存在記号を有する論理式を選択し、存在記号を有する論理式により特定されるテーブルを参照して、設定された該テーブルの行数を取得する。また、同値クラス算出部208は、取得した行数を用いて同値クラスを求め、制約式を生成する。また、同値クラス算出部208が制約式を木構造で表し、変換情報に追加する。
存在記号なし論理式変換部209は、選択した存在記号を有する論理式を論理積に変換する。また、存在記号なし論理式変換部209は、選択されている変換した論理式と、追加された制約式を関連付ける。その後、存在記号なし論理式変換部209は、変換情報を論理式情報に反映させ、反映させた論理式情報を用いて、論理和標準形に変換し、論理和ごとに分割して部分論理式を生成して記憶部3に記憶する。
生成部203は、分割した論理式各々(部分論理式)と標準値情報を取得する。標準値情報は、アプリケーションが動作した際に必要な入力情報である。生成部203は、部分論理式各々と標準値情報を組み合わせてテストデータ生成情報を生成する。
充足値生成部204は、充足値生成部204がテストデータ生成情報を入力として、SMTソルバなどを用いて、テストデータ生成情報の論理式各々を充足する解(充足値)を求める。そして、生成部203は、テストデータ生成情報各々に対応する充足値であるテストデータ(後述するデータセット情報)を記憶部3に記憶する。
なお、充足値生成部204はテストデータ生成装置1以外のコンピュータに設けてもよい。
なお、充足値生成部204はテストデータ生成装置1以外のコンピュータに設けてもよい。
テストデータ生成装置の制御部の動作について説明する。
抽出部201の動作について説明する。図3は、制御部2の抽出部201の動作の一実施例を示す図である。ステップS1では、抽出部201の否定標準形変換部206が記憶部3のプロパティ情報からプロパティに含まれる事前条件を示す論理式を取得する。プロパティ情報は、例えば、仕様に基づいて作成されたプロパティが記憶されている。また、プロパティは「事前条件が成立する」ならば「事後条件となる」のような形式で記載された情報である。
抽出部201の動作について説明する。図3は、制御部2の抽出部201の動作の一実施例を示す図である。ステップS1では、抽出部201の否定標準形変換部206が記憶部3のプロパティ情報からプロパティに含まれる事前条件を示す論理式を取得する。プロパティ情報は、例えば、仕様に基づいて作成されたプロパティが記憶されている。また、プロパティは「事前条件が成立する」ならば「事後条件となる」のような形式で記載された情報である。
一例として、図4に示す商品購入アプリケーションをテストする仕様のひとつのプロパティについて説明する。図4は、商品購入アプリケーションの商品購入画面の一実施例を示す図である。図4の商品購入画面401は、入出力部9の出力部であるディスプレイに表示される。会員ID入力ボックス402には会員IDが入力される。注文明細表入力ボックス403には品名と購入数が入力される。本例の商品購入アプリケーションでは、5個の商品を購入することが可能で、注文明細表入力ボックス403には品名と購入数を入力するレコードが5行用意されている。メッセージ出力ボックス404には、品名または購入数の入力された状態に応じたメッセージが出力される。
商品購入アプリケーションを実行されると、会員ID入力ボックス402に会員IDが入力されると、注文明細表入力ボックス403に品名と購入数を入力することができるようになる。すなわち、会員ID入力ボックス402に会員IDが入力されると、記憶部3に記憶されている複数の会員IDを参照して、入力された会員IDと一致するか否かを判定する。一致する会員IDが存在する場合には、注文明細表入力ボックス403に品名と購入数を入力することができるようにする。
続いて、注文明細表入力ボックス403の品名とその購入数が入力されると、記憶部3に記憶されている複数の品名を参照して、入力された品名と一致する品名を検索する。一致する品名が存在する場合には、品名に関連付けられて記憶部3に記憶されている商品ID単価を取得する。そして、注文明細表入力ボックス403には商品ID、品名、単価、購入数がすべて表示される。なお、備考欄に表示する項目があれば表示する。
また、注文明細表入力ボックス403のいずれかの行に、品名または購入数が入力されないときには、メッセージ出力ボックス404に品名または購入数が入力されていない主の内容を出力する。
上記で説明した商品購入アプリケーションをテストする仕様のひとつのプロパティとして、事前条件「会員IDが入力されていて、注文明細表の品名か購入数が空の行がある」ならば、事後条件「メッセージに品名または購入数が入力されていないことを表示する」のようなプロパティが考えられる。
ステップS1では、論理式で表わされた上記事前条件を否定標準形変換部206が取得する。
事前条件を論理式で表した例
not(会員ID=“”) and
(∃r(i)∈注文明細,r(i).購入数=“” or r(i).品名=“”)
not(会員ID=“”) and
(∃r(i)∈注文明細,r(i).購入数=“” or r(i).品名=“”)
なお、本例の論理式おいて、「not(会員ID = “”)」は、事前条件の「会員IDが入力されていて」に相当し、「(∃r(i)∈注文明細, r(i).購入数=“” or r(i).品名=“”)」は、事前条件の「注文明細表の購入数か品名が空の行がある」に相当する。なお、本例では「not」は否定を示し、「“”」はデータが入力されていないことを示し、「and」は論理積を示している。また、「∃」は存在記号を示し、「∃r(i) ∈注文明細」(部分述語論理式)は、注文明細という名称の記憶部に記憶されているテーブルには少なくともi行のレコードが存在することを示している。「r(i).購入数=“” or r(i).品名=“”)」は、i行のレコード各々に含まれている商品の購入数を示すセルに入力がないこと、または、i行のレコード各々に含まれている品名を示すセルに入力がないことを示している。「or」は論理和を示している。なお、プロパティの「ならば」は例えば「→」と表す。また、事後条件も「メッセージに品名または購入数が入力されていない表示する」は、例えば、「メッセージ = “品名または購入数が入力されていない”」と表す。
ステップS2では、木構造生成部205が論理式を木構造で表して論理式情報に記憶する。図5は、論理式を木構造で表した一実施例を示す図である。図6は、論理式情報のデータ構造の一実施例を示す図である。
木構造の生成について説明する。図5は、上記事前条件を論理式「not(会員ID=“”) and (∃r(i)∈注文明細,r(i).購入数=“” or r(i).品名=“”)」を木構造で表した例である。
論理式で使用されている演算子「not」「and」「or」を抽出し、「not」「and」「or」各々に直接関係する要素を検出する。論理式の「not」に関連する要素は「(会員ID=“”)」である。論理式の「and」に関連する要素は「not(会員ID=“”)」と「(∃r(i)∈注文明細,r(i).購入数=“” or r(i).品名=“”)」である。論理式の「or」に関連する要素は「∃r(i)∈注文明細,r(i).購入数=“”」と「∃r(i)∈注文明細,r(i).品名=“”」である。
上記検出の結果、「and」に関連する要素は、「not」に関連する要素と「or」に関連する要素をすべて含んでいるので、「and」(∧)を木の頂点のノード0とする。
次に、「and」の左側の「not(会員ID=“”)」と「(∃r(i)∈注文明細,r(i).購入数=“” or r(i).品名=“”)」をノードに分ける。「not」(¬)をノード1とし、「(会員ID)」(“会員ID”)をノード5とし、「=」(==)をノード3とし、「“”」をノード6とする。「(∃r(i)∈注文明細)」はひとつの要素として扱いノード2とする。「r(i).購入数」をノード9とし、「=」(==)をノード7とし、「“”」をノード10とし、「or」(∨)をノード4とし、「r(i).品名」をノード11とし、「=」(==)をノード8とし、「“”」をノード12とする。
本例では、上記のように木構造を生成したが限定されるものではない。
論理式情報について説明する。
論理式情報について説明する。
図6は、論理式情報のデータ構造の一実施例を示す図である。図6の論理式情報601は、図5に示した木構造を記憶部3に記憶した例である。論理式情報601は、ノード番号の情報を記憶する「No」、変数名、数値、文字列などが記憶される「値」、演算子や存在記号を含む論理式の情報を記憶する「演算子、限量子」を有する。また、「演算子、限量子」に関連するノードの情報を記憶する「左ノード」「右ノード」を有する。「左ノード」には演算子や存在記号を含む論理式の左側に存在するノード番号が記憶され、「右ノード」には演算子や存在記号を含む論理式の右側に存在するノード番号が記憶される。
本例では、「No」にはノード「0」「1」「2」・・・「12」が記憶されている。
「値」には、No「5」に関連付けられて文字列「“会員ID”」が、No「6」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。また、No「9」に関連付けられて数値「r(i).購入数」が、No「6」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。また、No「11」に関連付けられて数値「r(i).品名」が、No「12」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。
「値」には、No「5」に関連付けられて文字列「“会員ID”」が、No「6」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。また、No「9」に関連付けられて数値「r(i).購入数」が、No「6」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。また、No「11」に関連付けられて数値「r(i).品名」が、No「12」に関連付けられて空「“”」(文字列に含まれる)が記憶されている。
「演算子、限量子」には、No「0」に関連付けられて論理積記号「∧」が記憶され、No「1」に関連付けられて否定記号「¬」が記憶され、No「2」に関連付けられて存在記号を含む論理式の情報「∃r(i)∈注文明細」が記憶されている。No「3」に関連付けられて等号記号「==」が記憶され、No「4」に関連付けられて論理積記号「∨」が記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられてNoを示す「1」「3」「4」「5」「7」「9」「11」が記憶されている。
「右ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられてNoを示す「2」「6」「8」「10」「12」が記憶されている。
ステップS3では、否定標準形変換部206が論理式を否定標準形に変換する。否定標準形への変換は、例えば、含意演算子除去、二重否定演算子除去、ドモルガンの法則、限量子変換を用いて行う。
事前条件を示す論理式を否定標準形に変換する方法として、論理式に含意記号がある場合にはまず含意記号をとる含意除去処理を行う。次に、ドモルガンの法則を用いた処理を行い、否定記号を内側に押し込む操作を繰り返すことによって、論理的に等価な否定標準形に置き換える。その結果、変形した論理式に二重否定(¬¬:否定記号が連続している)が表れたときは二重否定を除去する処理を行う。そして、上記限量子変換の例の変換前に示した¬∀xS1に当てはまる箇所がある場合には、∃x¬S1の形に変形する。
上記に示した処理を繰り返し、全称記号がない否定標準形に変換された論理式が求まると処理を終了する。
含意演算子除去の処理について説明する。
含意演算子除去の例
S1→S2(変換前)
¬S1∨S2(変換後)
「S1」と「S2」は要素または論理式などを示し、「→」は含意演算子を示し、「¬」は否定演算子を示し、「∨」は論理和記号を示す記号である。
含意演算子除去の例
S1→S2(変換前)
¬S1∨S2(変換後)
「S1」と「S2」は要素または論理式などを示し、「→」は含意演算子を示し、「¬」は否定演算子を示し、「∨」は論理和記号を示す記号である。
図7は、含意演算子除去処理の動作の一実施例を示すフロー図である。図8は、含意演算子を含む論理式を木構造で表した一実施例を示す図である。図9は、図8に対応する論理式情報のデータ構造の一実施例を示す図である。
ステップS201では、否定標準形変換部206が含意演算子を含む論理式情報の最初の行(図8の論理式の木構造の最上位のノード)から順に、含意演算子を検索する。例えば、図9の「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「含意(→)」があるノードを検索する。
図8に示す木構造は、含意演算子除去の例のS1→S2(変換前)を示す木構造と、含意演算子除去の例の¬S1∨S2(変換後)を示す木構造を示している。
図9に示す論理式情報91は、含意演算子除去の例のS1→S2(変換前)を示す情報で、論理式情報92は、含意演算子除去の例の¬S1∨S2(変換後)を示す情報である。論理式情報91、92は、「No」「値」「演算子、限量子」「左ノード」「右ノード」に記憶される情報を有している。論理式情報91、92の「No」には、例えば、ノードを示す情報が記憶されている。本例では、ノードを示す情報として連番「0」「1」「2」・・・が記憶されている。
「値」には、「No」に関連付けられた要素が記憶されている。論理式情報91では、No「1」に関連付けられて要素「S1」が記憶されている。また、No「2」に関連付けられて要素「S2」が記憶されている。本例では、要素S1、S2は木構造の末端のノードであると考えて値が記憶されているが、要素S1、S2が論理式である場合(末端のノードでない場合)には、要素S1、S2は記憶されない。また、末端のノードでない場合には、後述する「演算子、限量子」「左ノード」「右ノード」に、ノードに関連付けられている論理式に対応付けられる情報各々が記憶される。その場合、「No」のノード「2」以降にも論理式を表現するためのノードを示す情報と、該「No」に関連する「値」「演算子、限量子」「左ノード」「右ノード」が追加される。
「演算子、限量子」には、演算子や限量子を有する情報が記憶されている。論理式情報91では、No「0」に関連付けられて含意演算子「→」が記憶され、論理式情報92では、No「0」に関連付けられて論理和「∨」が記憶され、No「3」に関連付けられて否定演算子「¬」が記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。本例では、No「0」に関連付けられて「1」が記憶されている。
「右ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。本例では、No「0」に関連付けられて「2」が記憶されている。
ステップS201では、否定標準形変換部206が図8に示す含意演算子を含む論理式の木構造の最上位のノード0、つまり図9に示すNo「0」のノードから順に「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「含意(→)」があるノードを検索する。
ステップS202では、否定標準形変換部206が論理式情報を検索して含意演算子(→)が検出できたか否かを判定し、含意演算子(→)がある場合、ステップS203(Yes)に移行し、含意演算子(→)がない場合にはこの処理を終了する。本例では、論理式情報91の「演算子、限量子」に含意演算子「→」があるのでステップS203(Yes)に移行する。
ステップS203では、否定標準形変換部206が論理式情報91に示す「左ノード」の項目の値を記憶部3の図示しない左ノードに記憶されている情報を退避領域に記憶する。本例では、論理式情報91の「左ノード」の「s1」が退避領域に記憶される。
ステップS204では、否定標準形変換部206が記憶部3に記憶された、ノードの「演算子、限量子」の項目値を、含意演算子「→」から論理和「∨」に更新する。本例では、図4の論理式情報91のNo「0」の行の「演算子、限量子」の「→」が論理和「∨」に更新され、図4の論理式情報92のNo「0」に対応する行の「演算子、限量子」のように論理和「∨」となる。
ステップS205では、否定標準形変換部206が更新した論理和「∨」に対応する行の「左ノード」の情報を、新しい番号に更新する。例えば、新しい番号として「左ノード」の情報を、「No」に記憶されている情報としてまだ使用されていない情報にする。本例では、論理式情報91の「No」で使用している最大値「2」に1を加算して「3」を求め、論理式情報91の「左ノード」の「2」を「3」に更新し、論理式情報92のNo「0」の行のようになる。
ステップS206では、否定標準形変換部206が新しい行を追加する。例えば、新しい行の「No」には、ステップS205の処理で作成した新しい番号が記憶され、「演算子、限量子」に否定演算子「¬」が記憶される。また、「左ノード」には、ステップS203で退避領域に記憶した情報を記憶する。それぞれ格納した新しいノードのデータを生成し、記憶部3に追加格納する。本例では、新しい行の「No」に「3」が記憶され、「演算子、限量子」に否定演算子「¬」が記憶され、「左ノード」に「1」が記憶される。
二重否定演算子除去の処理について説明する。
二重否定演算子除去の例
¬¬S1(変換前)
S1 (変換後)
二重否定演算子除去の例
¬¬S1(変換前)
S1 (変換後)
図10は、二重否定演算子除去処理の動作の一実施例を示すフロー図である。図11は、二重否定演算子を含む論理式を木構造で表した一実施例を示す図である。図12は、図11に対応する論理式情報のデータ構造の一実施例を示す図である。
ステップS301では、否定標準形変換部206が二重否定演算子を含む論理式情報の最初の行(図11の論理式の木構造の最上位のノード)から順に、二重否定演算子を検索する。例えば、図12の「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「二重否定(¬¬)」がある部分木を検索する。
図11に示す木構造は、二重否定演算子除去の例の¬¬S1(変換前)を示す木構造と、二重否定演算子除去の例のS1(変換後)を示す木構造を示している。
図12に示す論理式情報121は、二重否定演算子除去の例の¬¬S1(変換前)を示す情報で、論理式情報92は、二重否定演算子除去の例のS1(変換後)を示す情報である。
論理式情報121、122は、「No」「値」「演算子、限量子」「左ノード」「右ノード」に記憶される情報を有している。論理式情報121、122の「No」には、例えば、ノードを示す情報が記憶されている。本例では、ノードを示す情報として連番「0」「1」「2」・・・が記憶されている。
「値」には、「No」に関連付けられた要素が記憶されている。論理式情報121では、No「1」に関連付けられて要素「S1」が記憶されている。本例では、要素S1は木構造の末端のノードであると考えて値が記憶されているが、要素S1が論理式である場合(末端のノードでない場合)には、要素S1は記憶されない。また、末端のノードでない場合には、後述する「演算子、限量子」「左ノード」「右ノード」に、ノードに関連付けられている論理式に対応付けられる情報各々が記憶される。その場合、「No」のノード「2」以降にも論理式を表現するためのノードを示す情報と、該「No」に関連する「値」「演算子、限量子」「左ノード」「右ノード」が追加される。
「演算子、限量子」には、演算子や限量子を有する情報が記憶されている。論理式情報121では、No「0」に関連付けられて否定演算子「¬」が記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。本例では、No「0」に関連付けられて「1」が記憶され、No「1」に関連付けられて「2」が記憶され。
「右ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。
ステップS301では、否定標準形変換部206が図11に示す二重否定演算子を含む論理式の木構造の最上位のノード0、つまり図12に示すNo「0」のノードから順に「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「否定(¬)」が2つ連続する二重否定を検索する。
ステップS302では、否定標準形変換部206が論理式情報を検索して二重否定演算子(¬¬)が検出できたか否かを判定し、二重否定演算子(¬¬)がある場合、ステップS303(Yes)に移行し、二重否定演算子(¬¬)がない場合にはこの処理を終了する。本例では、論理式情報121の「演算子、限量子」に二重否定演算子「¬¬」があるのでステップS303(Yes)に移行する。
ステップS303では、否定標準形変換部206が検出された部分木「¬¬」の、下位のノードの下位にあるノードのNo以外(「値」「演算子、限量子」「左ノード」「右ノード」)の情報を取得する。本例では、図11の二重否定演算子のノード1に対応する論理式情報121のNo「1」の下位にあるNo「2」に対応する「値」「演算子、限量子」「左ノード」「右ノード」の情報を取得する。論理式情報121の場合、「演算子、限量子」の「S1」を取得する。
ステップS304では、否定標準形変換部206が検出された部分木の上位のノードに、ステップS303で取得した情報を記憶し、更新する。本例では、論理式情報122のNo「0」に、取得した情報「演算子、限量子」の「S1」を記憶する。
また、ステップS304では、上記更新が終了した後、否定標準形変換部206が検出された部分木の上位のノード以外の情報を削除する。本例では、論理式情報122のNo「1」「2」に対応する行それぞれを削除する。
ドモルガンの処理について説明する。
ドモルガンの処理の例
¬(S1∧S2)(変換前)
¬S1∨¬S2 (変換後)
または、
¬(S1∨S2)(変換前)
¬S1∧¬S2 (変換後)
ドモルガンの処理の例
¬(S1∧S2)(変換前)
¬S1∨¬S2 (変換後)
または、
¬(S1∨S2)(変換前)
¬S1∧¬S2 (変換後)
図13は、ドモルガンの処理の動作の一実施例を示すフロー図である。図14は、ドモルガンの処理を含む論理式を木構造で表した一実施例を示す図である。図15は、図14に対応する論理式情報のデータ構造の一実施例を示す図である。
ステップS401では、否定標準形変換部206が「否定(¬)」と論理演算子(「論理和(∨)」又は「論理積(∧)」)とが連続する論理式情報の最初の行から順に検索をする。例えば、図14に示す「¬(S1∧S2)」や「¬(S1∨S2)」の論理式の木構造の最上位のノード0から検索をする。また、図15の「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「否定(¬)」と論理演算子(「論理和(∨)」又は「論理積(∧)」)とが連続する部分木を検索する。
図14に示す木構造は、ドモルガンの処理の例の¬(S1∧S2)(変換前)を示す木構造と、ドモルガンの処理の例の¬S1∨¬S2(変換後)を示す木構造を示している。または、ドモルガンの処理の例の¬(S1∨S2)(変換前)を示す木構造と、ドモルガンの処理の例の¬S1∧¬S2(変換後)を示す木構造を示している。
図15に示す論理式情報151は、ドモルガンの処理の例の¬(S1∧S2)(変換前)を示す情報で、論理式情報152は、ドモルガンの処理の例の¬S1∨¬S2(変換後)を示す情報である。図15に示す論理式情報153は、ドモルガンの処理の例の¬(S1∨S2)(変換前)を示す情報で、論理式情報154は、ドモルガンの処理の例の¬S1∧¬S2(変換後)を示す情報である。
論理式情報151〜154は、「No」「値」「演算子、限量子」「左ノード」「右ノード」に記憶される情報を有している。論理式情報151〜154の「No」には、例えば、ノードを示す情報が記憶されている。本例では、ノードを示す情報として連番「0」「1」「2」・・・が記憶されている。
「値」には、「No」に関連付けられた要素が記憶されている。論理式情報151〜154では、No「2」「3」に関連付けられて要素「S1」「S2」が記憶されている。本例では、要素S1、S2は木構造の末端のノードであると考えて値が記憶されているが、要素S1、S2が論理式である場合(末端のノードでない場合)には、要素S1、S2は記憶されない。また、末端のノードでない場合には、後述する「演算子、限量子」「左ノード」「右ノード」に、ノードに関連付けられている論理式に対応付けられる情報各々が記憶される。その場合、「No」のノード「2」以降にも論理式を表現するためのノードを示す情報と、該「No」に関連する「値」「演算子、限量子」「左ノード」「右ノード」が追加される。
「演算子、限量子」には、演算子や限量子を有する情報が記憶されている。論理式情報151では、No「0」に関連付けられて否定演算子「¬」が記憶され、No「1」に関連付けられて論理積(∧)が記憶されている。論理式情報152では、No「0」に関連付けられて論理和(∨)が記憶され、No「4」「5」に関連付けられて否定演算子「¬」がそれぞれ記憶されている。論理式情報153では、No「0」に関連付けられて否定演算子「¬」が記憶され、No「1」に関連付けられて論理和(∨)が記憶されている。論理式情報154では、No「0」に関連付けられて論理積(∧)が記憶され、No「4」「5」に関連付けられて否定演算子「¬」がそれぞれ記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。本例では、論理式情報151ではNo「0」に関連付けられて「1」が記憶され、No「1」に関連付けられて「2」が記憶されている。論理式情報152ではNo「0」に関連付けられて「4」が記憶され、No「4」に関連付けられて「2」が記憶され、No「5」に関連付けられて「3」が記憶されている。論理式情報153ではNo「0」に関連付けられて「1」が記憶され、No「1」に関連付けられて「2」が記憶されている。論理式情報154ではNo「0」に関連付けられて「4」が記憶され、No「4」に関連付けられて「2」が記憶され、No「5」に関連付けられて「3」が記憶されている。
「右ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。本例では、論理式情報151ではNo「1」に関連付けられて「3」が記憶されている。論理式情報152ではNo「0」に関連付けられて「5」が記憶されている。本例では、論理式情報153ではNo「1」に関連付けられて「3」が記憶されている。論理式情報154ではNo「0」に関連付けられて「5」が記憶されている。
ステップS401では、否定標準形変換部206が図14に示す否定演算子を含む論理式の木構造の最上位のノード0、つまり図15に示すNo「0」のノードから順に「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に「否定(¬)」と論理演算子(「論理和(∨)」又は「論理積(∧)」)とが連続する部分木を検索する。
ステップS402では、否定標準形変換部206が「演算子、限量子」に「否定(¬)」と論理演算子(「論理和(∨)」又は「論理積(∧)」)とが連続する部分木が検出できたか否かを判定する。検出できた場合、ステップS403(Yes)に移行し、検出できない場合、この処理を終了する。
ステップS403では、否定標準形変換部206が「否定(¬)」の下位の論理演算子が「論理和(∨)」か否かを判定し、「論理和(∨)」である場合にはステップS404(Yes)に移行し、「論理積(∧)」である場合にはステップS405(No)に移行する。
ステップS404では、否定標準形変換部206が検出された部分木の上位のノードである否定演算子(¬)を論理和(∨)に更新する。
一方、ステップS405では、否定標準形変換部206が検出された部分木の上位のノードである否定演算子(¬)を論理積(∧)に更新する。
ステップS406では、否定標準形変換部206が検出された部分木の下位ノード、つまり論理演算子(「論理和(∨)」又は「論理積(∧)」)の「左ノード」および「右ノード」の情報を取得する。図15に示す論理式情報151では、「左ノード」の「2」、「右ノード」の「3」を取得する。また、図15に示す論理式情報153では、「左ノード」の「2」、「右ノード」の「3」を取得する。
ステップS407では、否定標準形変換部206がステップS404又はステップS405で処理した上位ノードの「左ノード」及び「右ノード」の情報をそれぞれ新しい番号に更新する。例えば、図15に示す論理式情報152および154では「左ノード」の新しい番号として、「No」の情報の最大値に1加算した値「4」、「右ノード」の新しい番号として、「左ノード」の新しい番号に更に1加算した値「5」を記憶することが考えられる。
ステップS408では、否定標準形変換部206がステップS407で追加した上位の「左ノード」に記憶した新しい番号を「No」に追加する。例えば、図15に示す論理式情報151、153の「No」に新しい番号「4」を追加する。新しい番号を追加した「No」に対応する「演算子、限量子」には「否定(¬)」を記憶する。また、「左ノード」にはステップS406で取得した「左ノード」の情報を記憶する。例えば、図15に示す論理式情報152、154に示すように、No「4」に対応する「左ノード」にステップS406で取得した「2」を追加する。
ステップS409では、否定標準形変換部206がステップS407で追加した上位の「右ノード」に記憶した新しい番号を「No」に追加する。例えば、図15に示す論理式情報151、153の「No」に新しい番号「5」を追加する。新しい番号を追加した「No」に対応する「演算子、限量子」には「否定(¬)」を記憶する。また、「左ノード」にはステップS406で取得した「右ノード」の情報を記憶する。例えば、図15に示す論理式情報152、154に示すように、No「5」に対応する「右ノード」にステップS406で取得した「3」を追加する。
このように、否定標準形変換部206は、処理対象の木構造の論理式データについて、「演算子、限量子」の情報が「否定(¬)」と論理演算子(「論理和(∨)」又は「論理積(∧)」)が連続する部分木が検出できなくなるまで、ドモルガンの法則に基づく論理式の否定標準形への変換の処理を繰り返し実行する。
限量子変換の処理について説明する。
限量子変換の例
¬∀xS1(変換前)
∃x¬S1(変換後)
または、
¬∃xS1(変換前)
∀x¬S1(変換後)
「∀x」は全称記号を示し、「∃x」は存在記号を示している。
限量子変換の例
¬∀xS1(変換前)
∃x¬S1(変換後)
または、
¬∃xS1(変換前)
∀x¬S1(変換後)
「∀x」は全称記号を示し、「∃x」は存在記号を示している。
図16は、限量子変換処理の動作の一実施例を示すフロー図である。図17は、限量子を含む論理式を木構造で表した一実施例を示す図である。図18は、図17に対応する論理式情報のデータ構造の一実施例を示す図である。
ステップS501では、否定標準形変換部206が否定演算子(¬)つき限量子を含む論理式情報の最初の行(図17の論理式の木構造の最上位のノード)から順に、否定演算子(¬)つき限量子を検索する。例えば、図18の「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、「演算子、限量子」に否定演算子(¬)つき限量子があるノードを検索する。
図17に示す木構造は、限量子変換の例の¬∀xS1(変換前)を示す木構造と、限量子変換の例の∃x¬S1(変換後)を示す木構造を示している。また、限量子変換の例の¬∃xS1(変換前)を示す木構造と、限量子変換の例の∀x¬S1(変換後)を示す木構造を示している。
図18に示す論理式情報181は、限量子変換の例の¬∀xS1(変換前)を示す情報で、論理式情報182は、限量子変換の例の∃x¬S1(変換後)を示す情報である。また、図18に示す論理式情報183は、限量子変換の例の¬∃xS1(変換前)を示す情報で、論理式情報184は、限量子変換の例の∀x¬S1(変換後)を示す木構造を示す情報である。
論理式情報181〜184は、「No」「値」「演算子、限量子」「左ノード」「右ノード」に記憶される情報を有している。論理式情報181〜184の「No」には、例えば、ノードを示す情報が記憶されている。本例では、ノードを示す情報として連番「0」「1」「2」・・・が記憶されている。
「値」には、「No」に関連付けられた要素が記憶されている。論理式情報181〜184では、No「2」に関連付けられて要素「S1」が記憶されている。本例では、要素S1は木構造の末端のノードであると考えて値が記憶されているが、要素S1が論理式である場合(末端のノードでない場合)には、要素S1は記憶されない。また、末端のノードでない場合には、後述する「演算子、限量子」「左ノード」「右ノード」に、ノードに関連付けられている論理式に対応付けられる情報各々が記憶される。その場合、「No」のノード「2」以降にも論理式を表現するためのノードを示す情報と、該「No」に関連する「値」「演算子、限量子」「左ノード」「右ノード」が追加される。
「演算子、限量子」には、演算子や限量子を有する情報が記憶されている。論理式情報181では、No「0」に関連付けられて否定演算子(¬)が記憶され、No「1」に関連付けられて全称記号「∀x」が記憶されている。論理式情報182では、No「0」に関連付けられて存在記号「∃x」が記憶され、No「1」に関連付けられて否定演算子(¬)が記憶されている。論理式情報183では、No「0」に関連付けられて否定演算子(¬)が記憶され、No「1」に関連付けられて存在記号「∃x」が記憶されている。論理式情報184では、No「0」に関連付けられて全称記号「∀x」が記憶され、No「1」に関連付けられて否定演算子(¬)が記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられているノードを示す情報が記憶されている。論理式情報181〜184では、No「0」に関連付けられて「1」が記憶され、No「1」に関連付けられて「2」が記憶されている。
ステップS501では、否定標準形変換部206が図17に示す否定演算子(¬)つき限量子を含む論理式の木構造の最上位のノード0、つまり図18に示すNo「0」のノードから順に「左ノード」および「右ノード」に記憶された情報(ポインタ)を辿りながら、否定演算子(¬)つき限量子があるノードを検索する。
ステップS502では、否定標準形変換部206が論理式情報を検索して否定演算子(¬)つき限量子が検出されたか否かを判定し、否定演算子(¬)つき限量子を含む論理式がある場合、ステップS503(Yes)に移行する。否定演算子(¬)つき限量子を含む論理式がない場合にはこの処理を終了する。本例では、論理式情報181、183の「演算子、限量子」に否定演算子(¬)つき限量子があるのでステップS503(Yes)に移行する。
ステップS503では、否定標準形変換部206が否定演算子(¬)つき限量子を、否定演算子(¬)なし限量子に変更する。論理式情報181の場合、No「0」に対応する否定演算子(¬)を存在記号「∃x」に変更する。No「1」に対応する全称記号「∀x」を否定演算子(¬)に変換して、論理式情報182のようにする。論理式情報183の場合、No「0」に対応する否定演算子(¬)を全称記号「∀x」に変更する。No「1」に対応する存在記号「∃x」を否定演算子(¬)に変換して、論理式情報184のようにする。
「∀xS1」が存在する場合について説明する。
S1が{s1,s2,s3}などの要素を有している場合、「∀xS1」を検出した場合には「s1∧s2∧s3」に変換する。この変換は既知の技術である。
S1が{s1,s2,s3}などの要素を有している場合、「∀xS1」を検出した場合には「s1∧s2∧s3」に変換する。この変換は既知の技術である。
論理式1を否定標準形に変換する例について説明する。
なお、P(x)は限量子内論理式とする。
なお、P(x)は限量子内論理式とする。
((∀x.P(x)→a)∨¬b)→c (論理式1)
上記論理式1に対して含意除去処理を行い論理式2に変形する。
¬((∀x.P(x)→a)∨¬b)∨c (論理式2)
上記論理式2に対して含意除去処理を行い論理式3に変形する。
上記論理式1に対して含意除去処理を行い論理式2に変形する。
¬((∀x.P(x)→a)∨¬b)∨c (論理式2)
上記論理式2に対して含意除去処理を行い論理式3に変形する。
¬((∀x.¬P(x)∨a)∨¬b)∨c (論理式3)
上記論理式3に対してドモルガンの法則を用いた処理を行い論理式4に変形する。
(¬(∀x.¬P(x)∨a)∧¬¬b)∨c (論理式4)
上記論理式4に対して二重否定除去の処理を行い論理式5に変形する。
(¬(∀x.¬P(x)∨a)∧b)∨c (論理式5)
上記論理式4に対して全称子記号を存在子記号に変換する処理を行い論理式5に変形する。
((∃x.¬(¬P(x)∨a))∧b)∨c (論理式6)
上記論理式6に対してドモルガンの法則を用いた処理を行い論理式7に変形する。
((∃x.¬¬P(x)∧¬a)∧b)∨c (論理式7)
上記論理式7に対して二重否定除去の処理を行い論理式8に変形する。
((∃x.P(x)∧¬a)∧b)∨c (論理式8)
ステップS4では、存在記号付論理式抽出部207が論理式情報の1行目を選択する。本例では、No「0」の行を選択する。
ステップS5では、存在記号付論理式抽出部207が現在選択されている行の論理式の「演算子、限量子」を参照し、論理式に存在記号があるか否かを判定し、ある場合にはステップS6(Yes)に移行し、ない場合にはステップS8(No)に移行する。本例では、No「2」の行が選択された場合に「∃r(i)∈注文明細」があるので、存在記号があると判定してステップS6(Yes)に移行する。
ステップS6では、存在記号付論理式抽出部207が存在記号の存在する行を変換情報に記憶する。本例では、No「2」の行を変換情報に記憶する。図19は、変換情報のデータ構造の一実施例を示す図である。変換情報701は、ノード番号の情報を記憶する「No」、変数名、数値、文字列などが記憶される「値」、演算子や存在記号を含む論理式の情報を記憶する「演算子、限量子」を有する。また、「演算子、限量子」に関連するノードの情報を記憶する「左ノード」「右ノード」を有する。「左ノード」には演算子や存在記号を含む論理式の左側に存在するノード番号が記憶され、「右ノード」には演算子や存在記号を含む論理式の右側に存在するノード番号が記憶される。
ステップS7では、存在記号付論理式抽出部207が論理式情報に未選択の行があるか否かを判定し、未選択の行がある場合にはステップS8(Yes)に移行し、未選択の行がない場合には抽出処理を終了(No)する。
ステップS8では、存在記号付論理式抽出部207が論理式情報の現在選択されている行の次の行を選択する。
なお、本例では1行目から順に存在記号を有する論理式を参照しているが、限定されるものではない。
変換部202の動作について説明する。
図20は、制御部2の変換部202の動作の一実施例を示す図である。ステップS9では、同値クラス算出部208が変換情報から存在記号を有する論理式を選択する。
図20は、制御部2の変換部202の動作の一実施例を示す図である。ステップS9では、同値クラス算出部208が変換情報から存在記号を有する論理式を選択する。
ステップS10では、選択した存在記号を有する論理式により特定されるテーブルに対し、設定された該テーブルの行数を取得する。例えば、「∃r(i)∈注文明細」の場合、注文明細に関連付けられて、記憶部3に記憶されているテーブルを特定するとともに、該テーブルの行数に関連付けられて記憶部3に記憶されている「i」を特定する。「i」には、例えば、記憶部3に記憶されている注文明細のレコード長を決定する「5」が関連付けられているとする。ただし、注文明細のレコード長は「5」に限定されるものではない。
ステップS11では、同値クラス算出部208が取得した行数を用いて同値クラスを求め、制約式を生成する。例えば、同値クラスは注文明細のテーブルの行数iのとり得る範囲の最小値と最大値と中間値を求める。注文明細のレコード長として現在i=5が記憶されているとすれば、同値クラスは最小値i=0、最大値i=4、中間値のとり得る範囲=0<i<4となる。そして、求めた最大値と最小値と中間値とを論理和で結び、制約式を生成し変形する。
制約式の例
(i=0) or (i=4) or (0<i<4) (制約式)
(i=0) or (i=4) or ((0<i) and (i<4))
(i=0) or (i=4) or (0<i<4) (制約式)
(i=0) or (i=4) or ((0<i) and (i<4))
ステップS12では、同値クラス算出部208が制約式を木構造で表し、変換情報に追加する。制約式を木構造で表す方法について説明する。
図21は、制約式を木構造で表した一実施例を示す図である。図21は、上記制約式「(i=0) or (i=4) or ((0<i) and (i<4))」を木構造で表した例である。制約式で使用されている演算子「or」「and」を抽出し、「or」「and」各々に直接関係する要素を検出する。制約式の左から1番目の「or」に関連する要素は「(i=0)」と「(i=4)」で、左から2番目の「or」に関連する要素は「(i=0) or (i=4)」と「(i>0) and (i<4)」である。「and」に関連する要素は「(0<i)」と「(i<4)」である。
上記検出の結果、左から2番目の「or」に関連する要素はすべての要素を含んでいるので、左から2番目の「or」(∨)を木の頂点のノードY00とする。次に、制約式の左から1番目の「or」(∨)をノードY01とし、「and」(∧)をノードY02する。制約式の左から1番目の「or」に関連する「(i=0)」を分けて、「i」と「=」(==)と「0」にし、「i」をノードY07、「=」をノードY03、「0」をノードY08とする。また、「(i=4)」を分けて、「i」と「=」(==)と「4」にし、「i」をノードY09、「=」をノードY04、「4」をノードY10とする。
次に、制約式の「and」に関連する「(i>0)」を分けて、「i」と「>」(>)と「0」にし、「i」をノードY11、「>」をノードY05、「0」をノードY12とする。また、「(i<4)」を分けて、「i」と「<」(<)と「4」にし、「i」をノードY13、「<」をノードY06、「4」をノードY14とする。
本例では、上記のように木構造を生成したが限定されるものではない。
変換情報への追加について説明する。
変換情報への追加について説明する。
図22は、変換情報のデータ構造の一実施例を示す図である。図22の変換情報101は、図19に示した情報に、図21に示した木構造を追加した例である。変換情報101は、本例では、「No」にはノード「2」「Y00」「Y01」「Y02」・・・「Y12」が記憶されている。
「値」には、No「Y07」に関連付けられて「i」が、No「Y08」に関連付けられて「0」が記憶されている。また、No「Y09」に関連付けられて「i」が、No「Y10」に関連付けられて「4」が記憶されている。また、No「Y11」に関連付けられて「i」が、No「Y12」に関連付けられて「0」が記憶されている。No「Y13」に関連付けられて「i」が、No「Y14」に関連付けられて「4」が記憶されている。
「演算子、限量子」には、No「2」に関連付けられて存在記号を含む論理式の情報「∃r(i)∈注文明細」が記憶されている。No「Y00」に関連付けられて論理和記号「∨」が記憶されている。No「Y01」に関連付けられて論理和記号「∨」が記憶されている。No「Y02」に関連付けられて論理積記号「∧」が記憶されている。No「Y03」、No「Y04」に関連付けられて等号記号「==」がそれぞれ記憶されている。また、No「Y05」に関連付けられて不等号「>」が記憶され、No「Y06」に関連付けられて不等号「<」が記憶されている。
「左ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられて「Y01」「Y03」「Y05」「Y07」「Y09」「Y011」が記憶されている。
「右ノード」には、「値」または「演算子、限量子」に記憶されている情報に関連付けられて「Y02」「Y04」「Y06」「Y08」「Y10」「Y12」「Y14」が記憶されている。
ステップS13では、存在記号なし論理式変換部209が選択した存在記号を有する論理式を論理積に変換する。本例では、「演算子、限量子」のNo「2」に関連付けられて存在記号を含む論理式の情報「∃r(i)∈注文明細」を論理積「∧」に変換する。例えば、図22の行102を参照。
ステップS14では、存在記号なし論理式変換部209が選択されている変換した論理式と、追加された制約式を関連付ける。本例では、No「2」に関連付けられている「右ノード」に制約式に関係付けるための「Y00」を記憶する。すなわち、生成した木構造は、論理式「(r(i).購入数=“” or r(i).品名=“”) and ((i=0) or (i=4) or ((0<i) and (i<4)))」を示している。
ステップS15では、存在記号なし論理式変換部209が変換情報を論理式情報に反映させ、反映させた論理式情報を用いて、論理和標準形に変換する。図23は、変換情報を論理式情報に反映させた一実施例を示す図である。例えば、図23に示すは変換情報を反映させた論理式情報111が示す論理式は「not(会員ID=“”) and (r(i).購入数=“” or r(i).品名=“”) and ((i=0) or (i=4) or ((0<i) and (i<4)))」と表すことができる。そして、上記論理式を論理和標準形に変換すると、論理和標準形の例のような式を求めることができる。
論理和標準形の例
(not(会員ID=“”) and (r(i).購入数=“”) and (i=0)) or
(not(会員ID=“”) and (r(i).購入数=“”) and (i=4)) or
(not(会員ID=“”) and (r(i).購入数=“”) and ((0<i) and (i<4)) or
(not(会員ID=“”) and (r(i).品名=“”) and (i=0)) or
(not(会員ID=“”) and (r(i).品名=“”) and (i=4)) or
(not(会員ID=“”) and (r(i).品名=“”) and ((0<i) and (i<4)) or
(not(会員ID=“”) and (r(i).購入数=“”) and (i=0)) or
(not(会員ID=“”) and (r(i).購入数=“”) and (i=4)) or
(not(会員ID=“”) and (r(i).購入数=“”) and ((0<i) and (i<4)) or
(not(会員ID=“”) and (r(i).品名=“”) and (i=0)) or
(not(会員ID=“”) and (r(i).品名=“”) and (i=4)) or
(not(会員ID=“”) and (r(i).品名=“”) and ((0<i) and (i<4)) or
なお、論理和標準形へ変換する技術は限定されるものではなく、論理和標準形へ変換できればよい。
論理式情報の論理和標準形への変換について説明する。
図24は、論理式情報の論理和標準形への変換の一実施例を示す図である。
図24は、論理式情報の論理和標準形への変換の一実施例を示す図である。
ステップS701では、存在記号なし論理式変換部209が論理式情報の最上位ノードからポインタを辿り論理積と論理和が連続する部分木を検索する。例えば図23の変換情報を反映させた論理式情報111に示す最上位のノード、つまり「No」の情報が「0」の行から順に「左ノード」および「右ノード」に格納された情報ポインタを辿りながら、「演算子、限量子」の情報が「論理積(∧)」であるノードと、「演算子、限量子」の情報が「論理和(∨)」であるノードが連続する部分木を検索する。
ステップS702では、存在記号なし論理式変換部209がステップS701での検索した結果を用いて、「演算子、限量子」の項目値が「論理積(∧)」であるノードと、「演算子、限量子」の項目値が「論理和(∨)」であるノードが連続する部分木を検索し、部分木が検出できたか否かを判定する。検出できた場合にはステップS703(Yes)に移行し、検出できない場合にはこの処理を終了(No)する。
ステップS703では、存在記号なし論理式変換部209が検出された部分木の上位のノードつまり「演算子、限量子」の情報が「論理積(∧)」であるノードの、「演算子、限量子」の情報を、「論理積(∧)」から「論理和(∨)」に更新する。
ステップS704では、存在記号なし論理式変換部209が検出された部分木の上位のノードの「左ノード」および「右ノード」の情報を、記憶部3の図示しない左ノードと右ノードの情報を退避される領域に記憶する。
ステップS705では、存在記号なし論理式変換部209が検出された部分木の上位のノードの「左ノード」および「右ノード」の情報を、それぞれ新しい番号に更新する。例えば、「左ノード」の新しい番号として、まだ論理式情報111の「No」で使用されていない情報を用いる。また、「右ノード」の新しい番号として、該「左ノード」の新しい番号を含めて、まだ論理式情報111の「No」で使用されていない情報を用いる。
ステップS706では、存在記号なし論理式変換部209が検出された部分木の下位のノード、つまり、「演算子、限量子」の情報が「論理和」のノードの「左ノード」および「右ノード」の情報を取得する。
ステップS707では、存在記号なし論理式変換部209が検出された部分木の下位ノードのNoの情報は左ノードの退避領域の情報と一致するか否かを判定する。一致する場合にはステップS708(Yes)に移行し、一致しない場合にはステップS710(No)に移行する。
ステップS708では、存在記号なし論理式変換部209が論理式情報111の「No」にはステップS705で上位ノードの「左ノード」に記憶した新しい番号を、「演算子、限量子」には「論理積(∧)」を記憶する。また、「左ノード」にはステップS706で取得した下位ノードの「左ノード」の情報を、「右ノード」には左ノードの退避領域の情報を、それぞれ記憶した新しいノードのデータを生成し、論理式情報111に追加する。
ステップS709では、存在記号なし論理式変換部209が論理式情報111の「No」にはステップS705で上位ノードの「右ノード」に記憶した新しい番号を、「演算子、限量子」には「論理積(∧)」を記憶する。また、「左ノード」にはステップS706で取得した下位ノードの「右ノード」の情報を、「右ノード」には左ノードの退避領域の情報を、それぞれ記憶した新しいノードのデータを生成し、論理式情報111に追加する。その後、ステップS701に移行する。
ステップS710では、存在記号なし論理式変換部209が論理式情報111の「No」にはステップS705で上位ノードの「左ノード」に記憶した新しい番号を、「演算子、限量子」には「論理積(∧)」を記憶する。また、「左ノード」には左ノードの退避領域の情報を、「右ノード」にはステップS706で取得した下位ノードの「左ノード」の情報を、それぞれ記憶した新しいノードのデータを生成し、論理式情報111に追加する。
ステップS710では、存在記号なし論理式変換部209が論理式情報111の「No」にはステップS705で上位ノードの「右ノード」に記憶した新しい番号を、「演算子、限量子」には「論理積(∧)」を記憶する。また、「左ノード」には左ノードの退避領域の情報を、「右ノード」にはステップS706で取得した下位ノードの「右ノード」の情報を、それぞれ記憶した新しいノードのデータを生成し、論理式情報111に追加する。その後、ステップS701に移行する。
上記処理によって、木構造形式の論理式情報が表す否定標準形の論理式が、論理和標準形の論理式に変換される。
図20のステップS16では、存在記号なし論理式変換部209が論理和標準形へ変換した論理式を、論理和ごとに分割して部分論理式を生成して記憶部3に記憶する。
部分論理式の例
(not(会員ID=“”) and (r(i).購入数=“”) and (i=0)) (式1)
(not(会員ID=“”) and (r(i).購入数=“”) and (i=4)) (式2)
(not(会員ID=“”) and (r(i).購入数=“”) and ((0<i) and (i<4)) (式3)
(not(会員ID=“”) and (r(i).品名=“”) and (i=0)) (式4)
(not(会員ID=“”) and (r(i).品名=“”) and (i=4)) (式5)
(not(会員ID=“”) and (r(i).品名=“”) and ((0<i) and (i<4)) (式6)
(not(会員ID=“”) and (r(i).購入数=“”) and (i=0)) (式1)
(not(会員ID=“”) and (r(i).購入数=“”) and (i=4)) (式2)
(not(会員ID=“”) and (r(i).購入数=“”) and ((0<i) and (i<4)) (式3)
(not(会員ID=“”) and (r(i).品名=“”) and (i=0)) (式4)
(not(会員ID=“”) and (r(i).品名=“”) and (i=4)) (式5)
(not(会員ID=“”) and (r(i).品名=“”) and ((0<i) and (i<4)) (式6)
ステップS17では、存在記号なし論理式変換部209が論理式情報に存在記号がある未選択の論理式があるか否かを判定し、未選択の論理式がある場合にはステップS9(Yes)に移行する。また、未選択の論理式がない場合には変換部の処理を終了(No)する。
生成部203、充足値生成部204の動作について説明する。
図25は、制御部2の生成部203、充足値生成部204の動作の一実施例を示す図である。ステップS18では、生成部203が記憶部3からステップS16で分割した論理式(部分論理式)各々を取得する。また、生成部203が記憶部3から標準値情報を取得する。標準値情報は、アプリケーションが動作した際に必要な入力情報である。本例では、商品購入アプリケーションが実行された際に入力する情報は、「会員ID」「購入数」「品名」である。
図25は、制御部2の生成部203、充足値生成部204の動作の一実施例を示す図である。ステップS18では、生成部203が記憶部3からステップS16で分割した論理式(部分論理式)各々を取得する。また、生成部203が記憶部3から標準値情報を取得する。標準値情報は、アプリケーションが動作した際に必要な入力情報である。本例では、商品購入アプリケーションが実行された際に入力する情報は、「会員ID」「購入数」「品名」である。
標準値情報の例
会員ID :“X1000”(文字列)
購入数 :5 (数値)
品名 :“ハ゜ソコン”(文字列)
会員ID :“X1000”(文字列)
購入数 :5 (数値)
品名 :“ハ゜ソコン”(文字列)
また、ステップS18では、生成部203が部分論理式各々と標準値情報とを組み合わせて生成されたテストデータ生成情報を生成する。上記部分論理式の例で示した部分論理式各々と、上記標準値情報の例で示した標準値情報と組み合わせて生成したテストデータ生成情報を入力として、SMTソルバを用いて充足する解(充足値)を求める。
すなわち、式1に示す部分論理式と標準値情報の組み合わせ、式2に示す部分論理式と標準値情報の組み合わせ、式3に示す部分論理式と標準値情報の組み合わせ、各々をテストデータ生成情報とする。また、式4に示す部分論理式と標準値情報の組み合わせ、式5に示す部分論理式と標準値情報の組み合わせ、式6に示す部分論理式と標準値情報の組み合わせ、各々をテストデータ生成情報とする。
ステップS19では、充足値生成部204が部分論理式各々と標準値情報とを組み合わせて生成されたテストデータ生成情報が示す論理式を充足する解(充足値)を求める。充足値生成部204は、SMTソルバなどが考えられる。例えば、上記部分論理式の例で示した部分論理式各々と、上記標準値情報の例で示した標準値情報と組み合わせて生成したテストデータ生成情報を入力として、SMTソルバを用いて充足する解(充足値)を求める。すなわち、上記6つのテストデータ生成情報を入力として、SMTソルバを用いて充足する解(充足値)であるデータセット情報を求める。
図26は、データセット情報のデータ構造の一実施例を示す図である。図26のデータセット情報131〜136は、「No」「品名」「購入数」に記憶される情報を有している。データセット1は、式1に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、i=0は注文明細のテーブルの1行目の購入数が空「“”」であることを示している。
データセット2は、式2に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、i=4は注文明細のテーブルの5行目の購入数が空「“”」であることを示している。
データセット3は、式3に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、0<i<4は注文明細のテーブルの3行目の購入数が空「“”」であることを示している。つまり、0と4の中間値である2に相当する3行目を空「“”」にしている。
データセット4は、式4に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、i=0は注文明細のテーブルの1行目の品名が空「“”」であることを示している。
データセット5は、式5に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、i=4は注文明細のテーブルの5行目の品名が空「“”」であることを示している。
データセット6は、式6に示す部分論理式と標準値情報の組み合わせに対する充足値を示している。すなわち、0<i<4は注文明細のテーブルの3行目の品名が空「“”」であることを示している。つまり、0と4の中間値である2に相当する3行目を空「“”」にしている。
ステップS20では、生成部203が生成されたテストデータ生成情報各々に対応するテストデータ(データセット情報)を記憶部3に記憶する。
本実施の態様によれば、事前条件を表す論理式に全称記号や存在記号が含まれる場合でも、境界値制約を用いて、組み合わせ爆発を抑えたテストデータを生成することができる。
従来の組み合わせ数=i(存在記号により特定されるテーブルの行数)×m(存在記号に関連する論理式内の組合せ)であったが、本実施の態様を適応した組み合わせ数=L(同値クラス数)×m(存在記号に関連する論理式内の組合せ)となる。すなわち、i>Lとなる可能性が大きいため、組み合わせを削減する効果がある。また、テーブルの行数iが大きくなればなるほど効果が高くなる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
1 生成装置
2 制御部
3 記憶部
4 記録媒体読取装置
5 入出力インタフェース
6 通信インタフェース
7 バス
8 記録媒体
9 入出力部
201 抽出部
202 変換部
203 生成部
204 充足値生成部
205 木構造生成部
206 否定標準形変換部
207 存在記号付論理式抽出部
208 同値クラス算出部
209 存在記号なし論理式変換部
2 制御部
3 記憶部
4 記録媒体読取装置
5 入出力インタフェース
6 通信インタフェース
7 バス
8 記録媒体
9 入出力部
201 抽出部
202 変換部
203 生成部
204 充足値生成部
205 木構造生成部
206 否定標準形変換部
207 存在記号付論理式抽出部
208 同値クラス算出部
209 存在記号なし論理式変換部
Claims (8)
- コンピュータが、
テスト対象のプログラムの入力データに関する事前条件を表した論理式が記憶された記憶部を参照して、前記論理式に存在記号が含まれているか否かを判定し、
前記判定において含まれると判定した場合、前記論理式から前記存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出し、
前記入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照して、前記部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得し、
前記行数を表す変数の値を、前記取得した行数の最小値、最大値、及び、前記最小値より大きく前記最大値より小さい範囲とする論理式をそれぞれ生成し、
前記生成した論理式を論理和で結んだ制約式を生成し、
前記記憶部に記憶された前記論理式に含まれる前記部分述語論理式を前記生成した制約式との論理積に変換する、
処理を実行することを特徴とする論理式変換プログラム。 - 前記論理式に否定が係る論理積が含まれるか否かを判定し、
前記判定において前記否定が係る論理積が含まれると判定した場合に、前記記憶部に記された前記否定が係る論理積で示される論理式のデータを、前記論理積の左辺及び右辺の論理式に各々否定が係る論理式及び該否定が係る論理式のうちの一方を左辺、他方を右辺とする論理和で示される論理式のデータに変換する、
処理を前記コンピュータに実行させることを特徴とする請求項1に記載の論理式変換プログラム。 - 前記論理式に否定が係る論理和が含まれるか否かを判定し、
前記判定において前記否定が係る論理和が含まれると判定した場合に、前記記憶部に記憶された前記否定が係る論理和で示される論理式のデータを、前記論理和演算子の左辺及び右辺の論理式の各々に否定が係り、該否定が係る論理式のうちの一方を左辺、他方を右辺とする論理積で示される論理式のデータに変換する、
処理を前記コンピュータに実行させることを特徴とする請求項1または2に記載の論理式変換プログラム。 - 前記論理式に含意が含まれるか否かを判定し、
前記判定において前記含意が含まれると判定した場合に、前記記憶部に記憶された前記含意で示される論理式のデータを、前記含意の左辺の論理式に否定が付いた第1の論理式と、前記第1の論理式と、前記含意の右辺のうち、一方を左辺、他方を右辺とする論理積で示される論理式とに変換する、
処理を前記コンピュータに実行させることを特徴とする請求項1から3のいずれかに記載の論理式変換プログラム。 - 前記論理式に論理積が係る論理和が含まれるか否かを判定し、
前記判定において前記論理積が係る論理和が含まれると判定した場合に、前記記憶部に記憶された前記論理積が係る論理和で示される論理式のデータを、前記論理積の左辺を第1の辺とし前記論理和の前記論理積が係らない辺である他方の辺を第2の辺とする第1の論理和と、前記論理積の右辺を第1の辺とし前記他方の辺を第2の辺とする第2の論理和と、前記第1の論理和を第1の辺とし前記第2の論理和を第2の辺とする論理積とで示される論理式のデータに変換する、
処理を前記コンピュータに実行させることを特徴とする請求項1から4のいずれかに記載の論理式変換プログラム。 - 前記判定において、前記論理積が係る論理和が含まれないと判定した場合に、前記記憶
部に記憶された前記論理式のデータを、論理和を含まず、かつ、論理積で結合された論理
式の部分論理式毎に分割し、
前記分割した各々の部分論理式のデータを、充足可能性の判定対象の論理式のデータを記憶する記憶部に記憶する、
処理を前記コンピュータに実行させることを特徴とする請求項5に記載の論理式変換プ
ログラム。 - コンピュータによって実行されるテストデータ生成方法であって、
テスト対象のプログラムの入力データに関する事前条件を表した論理式が記憶された記憶部を参照して、前記論理式に存在記号が含まれているか否かを判定し、
前記判定において含まれると判定した場合、前記論理式から前記存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出し、
前記入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照して、前記部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得し、
前記行数を表す変数の値を、前記取得した行数の最小値、最大値、及び、前記最小値より大きく前記最大値より小さい範囲とする論理式をそれぞれ生成し、
前記生成した論理式を論理和で結んだ制約式を生成し、
前記記憶部に記憶された前記論理式に含まれる前記部分述語論理式を前記生成した制約式との論理積に変換する、
ことを特徴とするテストデータ生成方法。 - テスト対象のプログラムの入力データに関する事前条件を表した論理式が記憶された記憶部を参照して、前記論理式に存在記号が含まれているか否かを判定し、前記判定において含まれると判定した場合、前記論理式から前記存在記号と当該存在記号の要素を含む入力データを識別する入力データ識別情報とを含む部分述語論理式を抽出する抽出部と、
前記入力データ識別情報で識別されるテーブル毎に該テーブルの行数が記憶された記憶部を参照して、前記部分述語論理式に含まれる入力データ識別情報に対応するテーブルの行数を取得し、前記行数を表す変数の値を、前記取得した行数の最小値、最大値、及び、前記最小値より大きく前記最大値より小さい範囲とする論理式をそれぞれ生成し、前記生成した論理式を論理和で結んだ制約式を生成し、前記記憶部に記憶された前記論理式に含まれる前記部分述語論理式を前記生成した制約式との論理積に変換する変換部と、
前記変換後の論理式に論理積が係る論理和が含まれるか否かを判定し、前記判定において前記論理積が係る論理和が含まれると判定した場合に、前記記憶部に記憶された前記論理積が係る論理和で示される論理式のデータを、前記論理積の左辺を第1の辺とし前記論理和の前記論理積が係らない辺である他方の辺を第2の辺とする第1の論理和と、前記論理積の右辺を第1の辺とし前記他方の辺を第2の辺とする第2の論理和と、前記第1の論理和を第1の辺とし前記第2の論理和を第2の辺とする論理積とで示される論理式のデータに変換し、前記判定において、前記論理積が係る論理和が含まれないと判定した場合に、前記記憶部に記憶された前記論理式のデータを、論理和を含まず、かつ、論理積で結合された論理式の部分論理式毎に分割した部分論理式各々を生成する生成部と、
前記部分論理式各々を入力としてSMTソルバを実行し、当該部分論理式を充足する解を求める充足値生成部と、
を備えることを特徴とするテストデータ生成装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011144921A JP2013012082A (ja) | 2011-06-29 | 2011-06-29 | テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011144921A JP2013012082A (ja) | 2011-06-29 | 2011-06-29 | テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2013012082A true JP2013012082A (ja) | 2013-01-17 |
Family
ID=47685902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011144921A Withdrawn JP2013012082A (ja) | 2011-06-29 | 2011-06-29 | テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2013012082A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367806A (zh) * | 2020-03-06 | 2020-07-03 | 深圳前海微众银行股份有限公司 | 一种测试参数的生成方法及装置 |
CN115437987A (zh) * | 2022-11-09 | 2022-12-06 | 合肥安迅精密技术有限公司 | 编码器通信转发方法及装置、存储介质、贴片机 |
-
2011
- 2011-06-29 JP JP2011144921A patent/JP2013012082A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111367806A (zh) * | 2020-03-06 | 2020-07-03 | 深圳前海微众银行股份有限公司 | 一种测试参数的生成方法及装置 |
CN115437987A (zh) * | 2022-11-09 | 2022-12-06 | 合肥安迅精密技术有限公司 | 编码器通信转发方法及装置、存储介质、贴片机 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9996592B2 (en) | Query relationship management | |
CN107111639B (zh) | 构建报表 | |
KR102519868B1 (ko) | 다수 미디어 소스로부터의 콘텐츠의 조직화 및 시각화 | |
US9501474B2 (en) | Enhanced use of tags when storing relationship information of enterprise objects | |
US20140351241A1 (en) | Identifying and invoking applications based on data in a knowledge graph | |
Gui et al. | IFC-based partial data model retrieval for distributed collaborative design | |
Galhardas et al. | Support for user involvement in data cleaning | |
Yan et al. | Generating process model collections | |
US20180121526A1 (en) | Method, apparatus, and computer-readable medium for non-structured data profiling | |
Molka et al. | Conformance checking for BPMN-based process models | |
CN103886021A (zh) | 一种基于自然语言的数据库审计结果翻译方法及系统 | |
JP6120607B2 (ja) | 要件検出装置及び要件検出プログラム | |
US10241899B2 (en) | Test input information search device and method | |
US20120197654A1 (en) | Information landscape modeling, analysis & validation | |
JP2013012082A (ja) | テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 | |
JP7022472B1 (ja) | データ管理システム、データ管理方法及びデータ管理プログラム | |
WO2022018899A1 (ja) | Kpiツリーから部分ツリーを抽出するシステム | |
JP6775740B1 (ja) | 設計支援装置、設計支援方法及び設計支援プログラム | |
TWI582624B (zh) | 用於感知情境並推薦資訊之電子計算裝置、其方法及其電腦程式產品 | |
Hjertberg et al. | A tool for obtaining transparency and traceability in heterogeneous design automation environments | |
JP6802109B2 (ja) | ソフトウェア仕様分析装置、及びソフトウェア仕様分析方法 | |
JP2011008628A (ja) | プログラムモデル検査方法、プログラムモデル検査プログラム | |
Kumarasinghe et al. | Knowledge Graph for Reusing Research Knowledge on Related Work in Data Analytics | |
Liu | Apache spark machine learning blueprints | |
JP2020101898A (ja) | 設計図作成支援方法、設計図作成支援装置、及び設計図作成支援プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20140902 |