JP5673395B2 - テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 - Google Patents

テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 Download PDF

Info

Publication number
JP5673395B2
JP5673395B2 JP2011146057A JP2011146057A JP5673395B2 JP 5673395 B2 JP5673395 B2 JP 5673395B2 JP 2011146057 A JP2011146057 A JP 2011146057A JP 2011146057 A JP2011146057 A JP 2011146057A JP 5673395 B2 JP5673395 B2 JP 5673395B2
Authority
JP
Japan
Prior art keywords
character string
partial character
information
digits
pattern
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
JP2011146057A
Other languages
English (en)
Other versions
JP2013012162A (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 JP2011146057A priority Critical patent/JP5673395B2/ja
Publication of JP2013012162A publication Critical patent/JP2013012162A/ja
Application granted granted Critical
Publication of JP5673395B2 publication Critical patent/JP5673395B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、プログラムのテストに用いるテストデータを生成するテストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置に関する。
近年、充足可能性問題を解くSatisfiability Modulo Theories(SMT)ソルバなどを用い、データが満たすべき条件の解(充足値)を求めることによって、テストデータを生成する技術が提案されている。
SMTソルバの時間計算量の削減は、SMTソルバの入力となる制約(SMTインスタンス)を如何に単純にできるかによって決まる。制約とは、プログラムの仕様に基づいて生成される条件やプログラムで用いるデータの取り得る範囲などである。
制約(条件)の例
文字列A=文字列Bかつ
文字列B>文字列C
すなわち、SMTソルバの時間計算量の削減は、充足値を求める対象であるデータ(例えば、上記文字列A、文字列B、文字列Cなど)の表現と、そのデータ表現に従った制約(例えば、制約(条件)の例)の表現により決まる。特に、業務アプリケーションにおいては、文字列項目(例えば、上記文字列A、文字列B、文字列C)および文字列項目に関するSMTインスタンスにおける文字列の制約の表現は、SMTソルバの実用性に大きく関わる。
文字列の制約の種類としては、例えば、大小関係を示す表現「X=Y」、「X>Y」、「Y>X」(辞書順の比較)、部分文字列に関する関係を示す表現、文字列長に関する関係を示す表現がある。部分文字列に関する関係を示す表現には、「subString(X, 0, 4) = Y 」(Xの0文字目から3文字目がYと同じ)、「charAt(X, 0) = 'a'」(Xの0文字目が'a')、「prefix(X, Y)」 (Xの先頭部分がYと同じ)などがある。また、文字列長に関する関係を示す表現には、「strLength(X) = 10」(Xの文字数が10)などがある。なお、文字列長に関する関係は文字の終端を示す文字に関する制約と考えると、部分文字列に関する関係ともいえる。
ところで、制約に用いられる文字列には前方一致や部分一致をはじめとする部分文字列に関する制約が出現することがある。
文字列制約の例
文字列1=subString(文字列3, 0, 4)(4文字)
文字列2=subString(文字列3, 4, 7)(3文字)
文字列4=文字列3(12文字)
文字列制約を充足する文字列の例
文字列1=ABCD
文字列2=EFG
文字列3=ABCDEFG00001
文字列4=文字列3
文字列制約の例は、文字列3には文字列1と文字列2が含まれ、文字列3と文字列4は一致する場合を示している。上記文字列制約の例のような場合、従来、文字列1〜4各々に含まれる各文字を要素とする配列により表現して、要素ごとに充足値を求めている。
従来の文字列制約表現例
文字列1[0]=文字列3[0]
文字列1[1]=文字列3[1]
文字列1[2]=文字列3[2]
文字列1[3]=文字列3[3]
文字列2[0]=文字列3[4]
文字列2[1]=文字列3[5]
文字列2[2]=文字列3[6]
文字列4[0]=文字列3[0]
文字列4[1]=文字列3[1]
文字列4[2]=文字列3[2]


文字列4[10]=文字列3[10]
文字列4[11]=文字列3[11]
そのため、SMTソルバが扱う文字列が多くなるとともに、文字列1〜4の関係をも考慮しなければならないため、制約が複雑になりSMTソルバの時間計算量が増加してしまう。すると、前方一致や部分一致をはじめとする部分文字列に関する制約を多く含むような、業務アプリケーションにおいて実用的な時間計算量でテストデータを生成することができない。
なお、関連する技術として、テスト項目作成者の誤解や読解漏れによる過ったテスト項目を作成する恐れのないテスト項目設計支援システムが開示されている。このテスト項目設計支援システムによれば、機能仕様書を入力する仕様書入力部を備えている。また、機能記述ルールを記憶する機能記述ルールファイル、項目分析ルールを記憶する項目分析ルールファイル、機能記述ルールにしたがって記述された機能を原因項目と結果項目に分類し項目分析ルールに従って各項目の間の関係を分析する項目分析部を備えている。また、項目分析の結果から原因−結果グラフを自動生成する原因−結果グラフ作成部、原因−結果グラフを表示するディスプレイ装置、原因−結果グラフから原因−結果テーブルを自動作成する原因−結果テーブル変換部を備えている。また、変換された原因−結果テーブルを表示するディスプレイ装置、原因−結果テーブルからテスト項目を作成するテスト項目作成部を備えている。
また、関連する技術として、制約プログラミングを用いたアプリケーションプログラムにおいて、アプリケーションプログラム自体の改造を必要とすることなく、制約条件の変更を可能とする技術が開示されている。その技術によれば、アプリケーションの実行時に、制約変数管理手段により、制約定義記憶部から制約定義を読み込み、制約変数を抽出し、その制約変数名をキーとして当該制約変数のデータドメインをデータドメイン記憶部から取得する。そして、制約充足ソルバ固有の内部表現に変換して制約変数名とともに記憶する。また、制約条件構築手段により、制約定義から関係式を抽出し、記憶された制約充足ソルバ固有の内部表現に変換された制約変数を利用して、抽出した関係式を制約充足ソルバ固有の内部表現として構築する。その結果、アプリケーションとは独立に定義された制約条件から動的に制約定義を構築可能としている。
例えば、関連する技術として、文字列を、該文字列に含まれる文字数分の、各文字を要素(変数)とする配列で表現し、要素毎に充足値を得るという技術が知られている。
また、関連する技術として、文字列の制約条件として、大小関係のみが制約式に含まれる場合には、この文字列部分全体を変数に置き換え、大小関係を満たす充足値(数値)を得る。次に、この数値を文字列に変換することで文字列のテストデータを生成するという技術が知られている。
特開平8−044589号公報 特開2007−328580号公報
「Path Feasibility Analysis for String-Manipulating Programs」、Nikolaj Bjorner, Nikolai Tillmann, and Andrei Voronkov、 http://research.microsoft.com/pubs/81181/fulltext.pdf 「SMT Solverを利用したWebアプリケーション用テストデータの生成」、藤原他、情報処理学会第72回全国大会 平成22年
本発明は、制約に含まれる文字列毎に、他の文字列と関連する部分文字列を求め、該部分文字列を1つの要素に変換し、SMTソルバの時間計算量を削減するテストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置を提供することを目的とする。
本実施の態様のひとつであるテストデータ生成は、関連パターン情報を参照し、上記文字列のパターンと一致するプログラムの仕様に基づいて生成されるテストの条件を有する元制約情報に含まれる文字列を抽出する。関連パターン情報は、変数を表す部分文字列各々を用いて表現される文字列の表現パターン、該文字列の表現において必須となる上記部分文字列各々の桁数を求める式パターン、上記部分文字列各々の関連していることを示す関連パターン、が関連付けられている。
続いて、上記関連パターン情報を参照し、抽出した文字列に対応する上記式パターンを取得し、取得した上記式パターンと上記関連パターンに、抽出した上記文字列に含まれる部分文字列を代入し、必須部分文字列と関連情報を求める。
続いて、上記元制約情報に含まれる変数を表す上記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照し、上記部分文字列に対応する上記必須部分文字列の桁数を取得し、上記必須部分文字列に取得した上記桁数を代入する。
続いて、上記桁数を代入した上記必須部分文字列と上記関連情報とを用いて、関連する該必須部分文字列各々の上記桁数を取得し、取得した上記桁数各々を上記必須部分文字列各々に対応する上記部分文字列の分割位置を示す数値とする。
続いて、上記分割位置に従い、抽出した上記文字列に含まれる上記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振りる。
続いて、上記元制約情報の抽出した上記文字列に含まれる上記部分文字列のうち分割された上記部分文字列を、分割した上記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する。
続いて、上記変換後制約情報を入力として、SMTソルバを用いて上記変換後制約情報が有する条件各々の充足値を求める。
上記充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する。
実施の形態によれば、SMTソルバの時間計算量を削減することができるという効果を奏する。
テストデータ生成装置のハードウェアの一実施例を示す図である。 テストデータ生成装置の制御部と記憶部の一実施例を示す図である。 商品検索用アプリケーションの画面の一実施例を示す図である。 商品検索用アプリケーションのDBの一実施例を示す図である。 項目定義情報のデータ構造の一実施例を示す図である。 元制約情報の一実施例を示す図である。 テストデータ生成装置の動作の一実施例を示すフロー図である。 関連パターン情報のデータ構造の一実施例を示す図である。 生成部の動作の一実施例を示すフロー図である。 部分文字列関連情報のデータ構造の一実施例を示す図である。 分割部の動作の一実施例を示すフロー図である。 項目分割情報のデータ構造の一実施例を示す図である。 定義部の動作の一実施例を示すフロー図である。 データ表現情報のデータ構造の一実施例を示す図である。 制約変換部の動作の一実施例を示すフロー図である。 変換後元制約情報の一実施例を示す図である。 SMTソルバにより求められた充足値のデータ構造の一実施例を示す図である。 制約変換部の動作の一実施例を示すフロー図である。 元制約充足情報のデータ構造の一実施例を示す図である。
本実施の態様では、制約に含まれる文字列ごとに、複数の文字列間の関連を記憶した情報を参照して他文字列と一致する部分文字列を求め、該部分文字列を1つの要素とする配列に変換し、制約を変換する。
元の文字列制約の例
文字列1=subString(文字列3, 0, 4)(4文字)
文字列2=subString(文字列3, 4, 7)(3文字)
文字列4=文字列3(12文字)
変換後の文字列制約における文字列表現の例
文字列1=要素1(1要素)
文字列2=要素2(1要素)
文字列3=要素3 要素4 要素5(3要素)
文字列4=要素6 要素7 要素8(3要素)
変換後の文字列制約の例
要素1=要素3
要素2=要素4
要素6=要素3
要素7=要素4
要素8=要素5
要素1は文字列1、要素2は文字列2、要素3、要素4、要素5は文字列3、要素6、要素7、要素8は文字列4にそれぞれ対応する。
その後、変換した制約をSMTソルバの入力として充足値求め、求めた充足値を用いてテストデータを生成する。その結果、SMTソルバの時間計算量を削減することができる。
以下図面に基づいて、本発明の実施形態について詳細を説明する。
テストデータ生成装置1について説明する。
図1は、テストデータ生成装置のハードウェアの一実施例を示す図である。テストデータ生成装置1は、制御部2、記憶部3、記録媒体読取装置4、入出力インタフェース5(入出力I/F)、通信インタフェース6(通信I/F)などを備えている。また、上記各構成部はバス7によってそれぞれ接続されている。
制御部2は、後述する生成部201、分割部202、定義部203、制約変換部204、充足値生成部205、充足値変換部206などを有している。また、制御部2はCentral Processing Unit(CPU)、マルチコアCPU、プログラマブルなデバイス(Field Programmable Gate Array(FPGA)、Programmable Logic Device(PLD)など)を用いることが考えられる。
記憶部3は、制御部2が実行するプログラムや後述する関連パターン情報207、元制約情報208、項目定義情報209、元制約充足情報210を記憶している。また、部分文字列関連情報211、項目分割情報212、データ表現情報213、変換後制約情報214、変換後制約充足値情報215などを記憶している。記憶部3は、例えばRead Only Memory(ROM)、Random Access Memory(RAM)などのメモリやハードディスクなどが考えられる。なお、記憶部3にはパラメータ値、変数値などのデータを記録してもよいし、実行時のワークエリアとして用いてもよい。上記関連パターン情報207、元制約情報208、項目定義情報209、元制約充足情報210を記憶している。また、部分文字列関連情報211、項目分割情報212、データ表現情報213、変換後制約情報214、変換後制約充足値情報215などは、データベースに記録されていてもよい。
記録媒体読取装置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接続やインターネット接続や無線接続を行うためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
このようなハードウェア構成を有するコンピュータを用いることによって、後述する各種処理機能(例えば、図7、図9、図11、図13、図15、図18に示すフロー)が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体8に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの記録媒体8が販売される。また、プログラムをサーバコンピュータの記憶装置に記録しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、記録媒体8に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶部3に記録する。そして、コンピュータは、自己の記憶部3からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、記録媒体8から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
図2は、テストデータ生成装置の制御部と記憶部の一実施例を示す図である。
生成部201は、後述する関連パターン情報を参照し、文字列のパターンと一致するプログラムの仕様に基づいて生成されるテストの条件を有する元制約情報に含まれる文字列を抽出する。関連パターン情報は、変数を表す部分文字列各々を用いて表現される文字列の表現パターン、該文字列の表現において必須となる前記部分文字列各々の桁数を求める式パターン、前記部分文字列各々の関連していることを示す関連パターン、が関連付けられている。また、生成部201は、関連パターン情報を参照し、抽出した文字列に対応する式パターンを取得し、取得した式パターンと関連パターンに、抽出した文字列に含まれる部分文字列を代入し、必須部分文字列と関連情報を求める。生成部201は、後述する項目定義情報を参照し、部分文字列に対応する必須部分文字列の桁数を取得し、必須部分文字列に取得した桁数を代入する。項目定義情報は、元制約情報に含まれる変数を表す部分文字列と、該部分文字列の桁数と、が関連付けられている。
分割部202は、桁数を代入した必須部分文字列と関連情報とを用いて、関連する該必須部分文字列各々の桁数を取得し、取得した桁数各々を必須部分文字列各々に対応する部分文字列の分割位置を示す数値を求める。
定義部203は、分割位置に従い、抽出した文字列に含まれる部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振る。
制約変換部204は、元制約情報から抽出した文字列に含まれる部分文字列のうち分割された部分文字列を、分割した部分文字列の名称を用いた表現に変換して後述する変換後制約情報を生成する。
充足値生成部205は、変換後制約情報を入力として、SMTソルバを用いて変換後制約情報が有する条件各々の充足値を求める。
充足値変換部206は、充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する。
テストデータ生成装置の動作について説明する。
例えば、商品検索用アプリケーションを用いて説明をする。なお、本例では商品検索用アプリケーションを用いて説明するが、商品検索用アプリケーションに限定されるものではない。図3は、商品検索用アプリケーションの画面の一実施例を示す図である。図3に示す商品検索アプリケーションは、入出力部9の出力装置に表示される商品検索画面301を用いて商品を検索し、検索結果をする商品検索結果画面305または商品検索結果画面307に表示する。商品検索画面301には、メーカ名を入力するためのテキスト入力部302、カテゴリ名を入力するためのテキスト入力部303、検索を開始するための実行ボタン304(「検索結果」)が配置されている。本例では、テキスト入力部302に「Maker1」が入力され、テキスト入力部303に「Category1」が入力された場合が示されている。商品検索結果画面305は、入力されたメーカ名またはカテゴリ名に基いて検索した結果、一致する商品がない場合に表示される画面で、「マッチする商品はありません」などのメッセージを表示する。商品検索結果画面307は、入力されたメーカ名またはカテゴリ名に基いて検索した結果、一致する商品がある場合に表示される画面である。商品検索結果画面307のテーブル308は、行が選択されたことを示す「選択」と、商品名を表示する「商品名」と、商品名に関連する商品コードを表示する「商品コード」とを表示する情報を有する。「選択」は、本例では選択されると「●」が表示され、選択されていない状態では「○」が表示される。「商品名」には、本例では「Product1」「Product2」・・・・が示されている。「商品コード」には、本例では空であるが実際には商品名に関連する商品コードを表示される。商品検索結果画面307の実行ボタン309(「詳細」)は、選択されると「商品名」に関連付けられている「単価」「在庫数」が表示される。商品検索結果画面305と商品検索結果画面307の実行ボタン306と310(「戻る」)は、商品検索画面301の画面に戻る場合に選択するボタンである。
商品検索用アプリケーションは、商品検索画面301のテキスト入力部302、303から入力されたメーカ名とカテゴリ名を用いて、記憶部3または外部のデータベースシステムなどに記憶されているデータベース(DB)を検索して商品検索結果を求める。DBの例を図4に示す。図4は、商品検索用アプリケーションのDBの一実施例を示す図である。DB401は、メーカDB402(またはメーカテーブル)、カテゴリDB403(またはカテゴリテーブル)、商品DB404(または商品テーブル)、在庫状況DB405(または在庫状況テーブル)を有している。メーカDB402は、メーカ名を記憶する「名前」と、「名前」に記憶されているメーカ名各々に関連付けられているコードが記憶されている「コード」とを有している。カテゴリDB403は、カテゴリ名を記憶する「名前」と、「名前」に記憶されているカテゴリ名各々に関連付けられているコードが記憶されている「コード」とを有している。商品DB404は、商品名を記憶する「商品名」と、「商品名」に記憶されている商品名各々に関連付けられている商品コードが記憶されている「商品コード」と、商品名各々に関連付けられている単価が記憶されている「単価」とを有している。在庫状況DB405には、商品DB404の「商品名」に記憶されている商品名各々関連付けられている商品コードが記憶されている「商品コード」と、商品コード各々に関連付けられている商品の在庫数が記憶されている「在庫数」とを有している。
商品検索用アプリケーションでは、商品検索画面301のテキスト入力部302、303にメーカ名とカテゴリ名が入力されて実行ボタン304(検索結果)が選択されると、DB401のメーカDB402とカテゴリDB403各々の「名前」を参照する。そして、入力されたメーカ名とカテゴリ名とに一致する名前を検索する。検索された場合には、メーカDB402とカテゴリDB403各々の名前に関連付けられているメーカDB402とカテゴリDB403各々のコードを用いて、該コード各々を含む商品コードが商品DB404の「商品コード」に存在するかを検索する。一致する商品コードが存在した場合には、商品検索結果画面305を表示する。また、実行ボタン309(詳細)が選択されると、商品DB404と在庫状況DB405を参照して、現在選択されている商品の単価と在庫数が表示される。
次に、商品検索用アプリケーションにおけるデータの定義について説明する。
図5は、項目定義情報のデータ構造の一実施例を示す図である。図2の項目定義情報209は、例えば、図5に示す画面に関する項目定義情報501やDBに関する項目定義情報502などがある。項目定義情報501は、「画面」「項目」「型」「桁」などの情報を記憶する。「画面」には、画面を識別するための識別情報が記憶されている。本例では、商品検索画面301を示す「検索画面」・・・・が記憶されている。「項目」には、「検索画面」に記憶されている画面に設けられている項目などを識別する情報が記憶されている。例えば、プログラムで扱う変数に対応する名称などが記憶されている。本例では、商品検索画面301のテキスト入力部302、303を用いて入力されるデータが代入される変数に対応する情報「メーカ」「カテゴリ」・・・・が記憶されている。「型」には、「項目」に対応する変数などのデータの型が記憶されている。データの型は、例えば、プログラムで扱うことができる変数などの型などである。本例では、「項目」の情報各々に対応する「文字列」などが記憶されている。「桁」には、「項目」に対応する変数などのデータの桁(桁数)が記憶されている。本例では、「項目」の「メーカ」「カテゴリ」・・・・に対応する「文字列」の桁「10」が記憶されている。
項目定義情報502は、「DB」「項目」「型」「桁」などの情報を記憶する。本例では、図4のDB401に関する項目定義情報が示されている。「DB」には、DBなどに含まれるデータベース情報(またはテーブル)を識別する情報が記憶される。本例では、データベース情報としてメーカDBを示す「メーカ」、カテゴリDBを示す「カテゴリ」、商品DBを示す「商品」、在庫状況DBを示す「在庫状況」が記憶されている。「項目」には、「DB」に記憶さえているデータベース情報各々に対応するカラムが記憶されている。本例では、「メーカ」に関連する「項目」として「名前」「コード」と、「カテゴリ」に関連する「項目」として「名前」「コード」とが記憶されている。また、「商品」に関連する「項目」として「商品名」「商品コード」「単価」と、「在庫状況」に関連する「項目」として「商品コード」「在庫数」とが記憶されている。「型」には、「項目」に対応する変数などのデータの型が記憶されている。データの型は、例えば、プログラムで扱うことができる変数の型である。本例では、「項目」に記憶されている情報各々に対応する型として「文字列」「文字列」・・・「非負整数」「文字列」「非負整数」が記憶されている。「桁」には、「項目」に対応する変数などのデータの桁(桁数)が記憶されている。本例では、「項目」に記憶されている情報各々に対応する桁として「10」「4」・・・「10」「13」「10」が記憶されている。
元制約情報について説明をする。
元制約情報208は、仕様に基づいて生成したテスト項目と、アプリケーションで使用する各種スタブ(例えば、データベーススタブやネットワークスタブなど)の制約項目と、を用いて生成される情報である。例えば、上記商品検索用アプリケーションをテストするために用いる元制約情報を図6に示す。図6は、元制約情報の一実施例を示す図である。図6の元制約情報603は、テスト項目601(1)〜(3)と、制約項目602(4)〜(7)とを用いて生成される。元制約情報603は、例えば、テスト項目601(1)〜(3)と制約項目602(4)〜(7)に示されている条件を、形式的に記述したものである。
記述例
numOfRecord(r in T, condition) (記述1)
subStr(X, i, j) (記述2)
上記記述1は「conditionを満たすテーブルTのレコードrの数」という意味を表し、上記記述2は「項目Xのi番目からj-1番目の文字列」という意味を表している。
図7は、テストデータ生成装置の動作の一実施例を示すフロー図である。
ステップS101で生成部201は後述する関連パターン情報207を用いて元制約情報208を解析して、後述する部分文字列関連情報211を生成する。
関連パターン情報207は、例えば、図8に示すようなパターンが考えられる。図8は、関連パターン情報のデータ構造の一実施例を示す図である。図8の関連パターン情報801は、「No」「表現パターン」「式パターン」「関連パターン」などの情報を有している。「No」には、「表現パターン」に記憶されている文字列を識別する情報が記憶されている。本例では、「P1」「P2」「P3」・・・「P12」が記憶されている。「表現パターン」には、変数を表す部分文字列各々を用いて表現される文字列のパターンが記憶されている。本例では、表現パターンとして大小関係を示す「str1 # S」「str1 # str2」が「P1」「P2」に関連付けられて記憶されている。また、部分文字列に関する関係を示す「charAt(str1, N1) # C」「charAt(str1, N1) # charAt(str2, N2)」「subString(str1, N1, N2) # S」「subString(str1, N1, N2) # str2」「subString(str1, N1, N2) # subString(str2, N3, N4)」「prefix(str1, S)」「prefix(str1, str2)」が「P3」〜「P9」に関連付けられて記憶されている。また、文字列長に関する関係を示す「strLength(str1) = N」「strLength(str1) > N」「strLength(str1) # strLength(str2)」が「P10」〜「P12」に関連付けられて記憶されている。
上記表現パターンの記述について説明する。str[a]は、strのa番目の文字単独で構成される部分文字列を示している。str[a, b]は、a番目からb-1番目までの文字からなるstrの部分文字列を示している。chars(str, i, j)は、{str[i], str[i+1], ..., str[j-1]}を示している。d(X)は、Xの桁数(最大文字列長、Xが文字列リテラルの場合はその長さ)を示している。str連番(N)は 文字列変数を示している。連番(N)は数値を示している。Sは文字列リテラルを示している。Cは文字リテラルを示している。#は「=」「>」「<」のいずれかを示している。
「式パターン」には、「表現パターン」に記憶されている部分文字列の表現において必須となる部分文字列各々の変換する場合に用いる式が記憶されている。本例の式パターンについて説明する。表現パターン「str1 # S」の場合は、例えば、「str1 = "ABC"」といった制約の表現については、str1がどのような形にも分割可能であるので変換しないでよいため、本例では空を示す「−」が記憶されている。
表現パターン「str1 # str2」の場合は、例えば、str1の式を「{str1[0, min(d(str1), d(str2))]}」とし、str2の式を「{str2[0, min(d(str1), d(str2))]}」とする。例えば、str1が5桁、str2が6桁の文字列とする。このとき、「str1 > str2」という表現を考える。「str1 > str2」は「(str1 > str2の先頭5文字) or (str1 = str2の先頭5文字) and (str2の6文字目以降が空でない)」と捉えるため、str1[0,5]、str2[0,5]が必須部分文字列となる。なお、str2[0,5]を切り出せば、str2の6文字目以降を切り出すことができる。「min(d(str1), d(str2))」はd(str1)とd(str2)のうち小さい方の値が代入される。
表現パターン「charAt(str1, N1) # C」の場合は、例えば、str1の式を「{str1[N1]}」にする。なお、「charAt(str1, 4) = 'A'」といった制約の表現では、str1の4文字目(0発進)を特別扱いする。
表現パターン「charAt(str1, N1) # charAt(str2, N2)」の場合は、例えば、str1の式を「{str1[N1]}」にし、str2を「{str2[N2]}」にする。
表現パターン「subString(str1, N1, N2) # S」の場合は、例えば、str1の式を「{str1[N1, N2]}」にする。
表現パターン「subString(str1, N1, N2) # str2」の場合は、例えば、str1の式を「{str1[N1, N2]}」にし、str2の式を「{str2[0, N2-N1]}」にする。No「P2」の表現と同様、お互いに対応する文字が存在する部分とそうでない部分とを区別した表現を行うため、str1の「N1」から「N2-1」文字目とstr2の先頭「N2-N1」文字を切り出す。
表現パターン「subString(str1, N1, N2) # subString(str1, N3, N4)」の場合は、例えば、str1の式を「{str1[N1, N2]}」にし、str2の式を「{str2[N3, N4]}」にする。
表現パターン「prefix(str1, S)」の場合は、例えば、str1の式を「{srt1[0, d(S)]}」にする。「prefix(str1, "ABC")」という表現は、「str1[0,3]="ABC"」と等価である。「d("ABC")=3」に注意。
表現パターン「prefix(str1, str2)」の場合は、例えば、str1の式を「chars(srt1, 0, d(str2))」にし、str2の式を「chars(str2, 0, d(str2))」にする。str2の長さが可変であるので、「str1, str2」について、str2の桁数−1番目までの全ての文字を分けて考える。
表現パターン「strLength(str1) = N」の場合は、例えば、str1の式を「{str1[N-1], str1[N]}」にする。「strLength(str1) = 4」は「str1[3] != '\0' and str1[4] = '\0'」と捉えるため、str1の3文字目と4文字目を切り出す。
表現パターン「strLength(str1) > N」の場合は、例えば、str1の式を「{str1[N]}」にする。
表現パターン「strLength(str1) # strLength(str2)」の場合は、例えば、str1の式を「chars(srt1, 0, min(d(str1), d(str2)))」にし、str2の式を「chars(str2, 0, min(d(str1), d(str2)))」にする。str1、str2の長さが可変であるので、お互いに対応する文字が存在する全ての文字は切り出す。
「関連パターン」には、部分文字列各々が関係していることを示す情報が記憶されている。例えば、「{str1 <-> str2}」は、str1とstr2の部分文字列が関係していることを示している。
ステップS101の動作について図9を用いて説明する。
図9は、生成部の動作の一実施例を示すフロー図である。ステップS201では、生成部201が元制約情報208の未選択の文字列を抽出する。例えば、図6の(1)〜(7)から文字列を抽出する。
抽出した文字列の例
r.名前 = 検索画面.メーカ
上記抽出した文字列の例は、図6の元制約情報603の(1)の行から抽出した文字列である。文字列の抽出は、予め記憶部3に記憶されている文字列に示されている表現各々と、元制約情報208に記憶されている文字列の表現とを、例えば、パターンマッチングなどの技術を用いて比較し、パターンが一致する文字列を抽出する。なお、パターンマッチング以外でも、文字列の表現が一致することが判定できれば限定されるものではない。
ステップS202では、生成部201がステップS201でパターンが一致する文字列が抽出されたか否かを判定し、文字列が抽出されない場合には生成部201の処理を終了(Yes)し、抽出された場合はステップS203(No)に移行する。文字列が抽出されない場合とは、元制約情報208にパターンが一致する文字列がないか、または元制約情報208に含まれている文字列についてすべてを抽出してしまい、これ以上抽出すべき文字列がないことを示している。
ステップS203では、生成部201がステップS201で抽出した文字列に対して、関連パターン情報207のうち未選択の表現パターンを取得する。例えば、図8のP1から順番に行を選択し「表現パターン」に記憶されている文字列を取得することが考えられる。
ステップS204では、生成部201が抽出した文字列と取得した表現パターンを比較し、パターンが一致する場合にはステップS205(Yes)に移行し、一致しない場合にはステップS206(No)に移行する。例えば、上記抽出した文字列の例の場合、図8の関連パターン情報801の「No」「P2」と一致する。
ステップS205では、生成部201が一致した表現パターンを記憶部3に記憶する。
ステップS206では、生成部201が現在選択されている文字列に対して関連パターン情報207の表現パターンを全て選択したか否かを判定し、全ての表現パターンが選択されていればステップS206(Yes)に移行する。未選択の表現パターンがなければステップS203(No)に移行する。関連パターン情報801の例であれば、「No」「P1」から「P12」までの表現をすべて選択した場合にステップS207(Yes)に移行する。
ステップS207では、生成部201が一致した文字列に含まれる変数となる部分文字列を、関連パターン情報207の「式パターン」に記憶されている式に当てはめて、部分文字列関連情報211に記憶する。
例えば、上記抽出した文字列の例について説明する。抽出した文字列が「r.名前 = 検索画面.メーカ」とすると、一致する表現パターンは関連パターン情報801の「No」「P2」の表現パターンになる。そうすると抽出した文字列「r.名前 = 検索画面.メーカ」を参照し、「No」「P2」の「表現パターン」に対応する「式パターン」の「{str1[0, min(d(str1), d(str2))]}」「{str2[0, min(d(str1), d(str2))]}」を選択することになる。
「str1」「str2」各々に対応する部分文字列(変数)は、それぞれ「str1」がメーカDB402の有する部分文字列(変数)「メーカ.名前」となり、「str2」が商品検索画面301の有する部分文字列(変数)「検索画面.メーカ」となる。なお、抽出した文字列「r.名前 = 検索画面.メーカ」内の「r」はメーカDB402を示す「メーカ」に変換されている。
次に、パターン「{str1[0, min(d(str1), d(str2))]}」「{str2[0, min(d(str1), d(str2))]}」」の「str1」「str2」各々に、「メーカ.名前」と「検索画面.メーカ」を代入する。その結果、代入した式を得る。
代入した式の例
{メーカ.名前[0, min(d(メーカ.名前), d(検索画面.メーカ))]}
{検索画面.メーカ[0, min(d(メーカ.名前), d(検索画面.メーカ))]}
ステップS208では、生成部201が項目定義情報209から関連するデータを取得し、ステップS207で生成した式に代入する。関連するデータは、例えば、桁などが考えられる。上記説明した生成した式の例の場合、「d(メーカ.名前)」と「d(検索画面.メーカ)」は、「メーカ.名前」と「検索画面.メーカ」各々の文字列の桁を代入する。「検索画面.メーカ」に対応する関連するデータとして図5の項目定義情報501の「桁」に記憶されている「10」を取得する。また、「メーカ.名前」に対応する関連するデータとして図5の項目定義情報502の「桁」に記憶されている「10」を取得する。その後、生成した式の例に示した対応箇所に、取得した関連データである桁を代入する。
生成した式にデータを代入した例
{メーカ.名前[0, min(10, 10)]} → {メーカ.名前[0, 10]}
{検索画面.メーカ[0, min(10, 10)]} → {検索画面.メーカ[0, 10]}
ステップS209では、生成部201が部分文字列関連情報211の「必須部分文字列」にステップS208で代入した式を記憶する。例えば、図10に示す部分文字列関連情報101に示すように記憶する。
図10は、部分文字列関連情報のデータ構造の一実施例を示す図である。図10の部分文字列関連情報101は、「No」「関連」「文字列項目」「必須部分文字列」に記憶する情報を有する。「No」には、部分文字列関連情報101の行ごとに割り振られる情報で、本例では、「R1」「R2」「R3」・・・「R10」が記憶されている。「関連」は、必須部分文字列が関係していることを示している。例えば、関連パターン情報801に必須部分文字列が関係していることを示す情報が記憶されている。本例では、「{メーカ.名前 <-> 検索画面.メーカ}」「{カテコ゛リ.名前 <-> 検索画面.カテコ゛リ}」「{メーカ.名前 <-> 検索画面.メーカ}」・・・「{在庫状況.商品コート゛<-> 商品.商品コート゛}」が記憶されている。例えば、関連パターン情報801の「関連」に「{str1 <-> str2}」が記憶されていて、str1が「メーカ.名前」でstr2が「検索画面.メーカ」である場合は、「{メーカ.名前 <-> 検索画面.メーカ}」が記憶される。
「文字列項目」には項目を示す情報が記憶される。本例では、「No」各々に関連付けられて文字列項目「メーカ.名前」「検索画面.メーカ」「カテコ゛リ.名前」「検索画面.カテコ゛リ」「メーカ.名前」「検索画面.メーカ」・・・「在庫状況.商品コート゛」「商品.商品コート゛」が記憶されている。例えば、「R1」には文字列項目「メーカ.名前」「検索画面.メーカ」が記憶されている。
「必須部分文字列」には、必須部分文字列を示す情報が記憶される。本例では、「文字列項目」各々に関連付けられて必須部分文字列「str[0, 10]」「str[0, 10]」「str[0, 10]」・・・「str[0, 13]」が記憶されている。なお、本例では必須部分文字列の文字列項目は「str」で表しているが、文字列項目を用いて表してもよい。
図7のステップS102の説明をする。
ステップS102では、分割部202が部分文字列関連情報211を用いて項目分割情報を抽出する。ステップS102の動作について図11を用いて説明する。
図11は、分割部の動作の一実施例を示すフロー図である。ステップS301では、分割部202が項目分割情報212を初期化する。
図12は、項目分割情報のデータ構造の一実施例を示す図である。図12の項目分割情報121は画面情報に関する項目分割情報で、図2の項目分割情報212は、例えば、図5に示す画面に関する項目定義情報501やDBに関する項目定義情報502などがある。
項目定義情報121は、「画面」「項目」「分割位置」などの情報を記憶する。「画面」には、画面を識別するための識別情報が記憶されている。本例では、商品検索画面301を示す「検索画面」・・・・が記憶されている。「項目」には、「画面」に記憶されている画面に設けられている項目などを識別する情報が記憶されている。例えば、プログラムで扱う変数に対応する名称などが記憶されている。本例では、商品検索画面301のテキスト入力部302、303を用いて入力されるデータが代入される変数に対応する情報「メーカ」「カテゴリ」・・・・が記憶されている。「分割位置」には、「項目」に対応する文字列(変数)などのデータを分割する位置が記憶されている。本例では、「項目」各々に対応する文字列(変数)の分割位置として「{0, 10}」「{0, 10}」・・・・が記憶されている。
項目定義情報122は、「DB」「項目」「分割位置」などの情報を記憶する。本例では、図4のDB401に関する項目定義情報が示されている。「DB」には、DBなどに含まれるデータベース情報(またはテーブル)を識別する情報が記憶される。本例では、データベース情報としてメーカDBを示す「メーカ」、カテゴリDBを示す「カテゴリ」、商品DBを示す「商品」、在庫状況DBを示す「在庫状況」が記憶されている。「項目」には、「DB」に記憶されているデータベース情報各々に対応するカラムが記憶されている。本例では、「メーカ」に関連する「項目」として「名前」「コード」と、「カテゴリ」に関連する「項目」として「名前」「コード」とが記憶されている。また、「商品」に関連する「項目」として「商品名」「商品コード」「単価」と、「在庫状況」に関連する「項目」として「商品コード」「在庫数」とが記憶されている。「分割位置」には、「項目」各々に対応する文字列(変数)などのデータを分割する位置が記憶されている。本例では、「項目」各々に対応する文字列(変数)の分割位置として「{0, 10}」「{0, 4}」「{0, 10}」・・・「{0, 4, 7, 13}」「{}」が記憶されている。
なお、ステップS301において、分割部202が項目分割情報121と122とを初期化するとは、「分割位置」の内容をすべて「{}」にすることである。
ステップS302では、分割部202が部分文字列関連情報211の未選択の行を選択する。ステップS303では、分割部202が部分文字列関連情報211の必須部分文字列を項目分割情報212の分割位置に反映させる。ステップS304では、分割部202が二項間の分割位置を反映させる。ステップS305では、部分文字列関連情報の全ての行を選択したか否かを判定し、全てを選択した場合にはステップS306(Yes)に移行し、未選択の行がある場合にはステップS302(No)に移行する。
ステップS302〜S305の動作について説明する。
例えば、図10の部分文字列関連情報101の「R1」に対応する行から順番に選択する場合について説明する。
ステップS302でR1に対応する行が選択された場合、ステップS303では部分文字列関連情報101の文字列項目「メーカ.名前」「検索画面.メーカ」を参照して項目分割情報121、122の必須部分文字列を反映させる分割位置を特定する。R1の場合、文字列項目がメーカDB402の名前を示しているので、項目分割情報122の1行目の分割位置が特定される。また、文字列項目が商品検索画面301の入力部302のメーカを示しているので、項目分割情報121の1行目の分割位置が特定される。その後、特定され項目分割情報122の1行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 10})などを記憶させる。また、特定され項目分割情報121の1行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 10})などを記憶させる。
次に、R1〜R3の処理が完了してステップS302でR4に対応する行が選択された場合について説明する。ステップS303では部分文字列関連情報101の文字列項目「商品.商品コート゛」「メーカ.コート゛」を参照して項目分割情報121、122の必須部分文字列を反映させる分割位置を特定する。R4の場合、文字列項目が商品DB404の商品コードを示しているので、項目分割情報122の6行目の分割位置が特定される。また、文字列項目がメーカDB402のコードを示しているので、項目分割情報122の2行目の分割位置が特定される。その後、特定され項目分割情報122の6行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 4})などを記憶させる。また、特定された項目分割情報122の2行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 4})などを記憶させる。
次に、R1〜R8の処理が完了してステップS302でR9に対応する行が選択された場合について説明する。ステップS303では部分文字列関連情報101の文字列項目「商品.商品コート゛」「在庫状況.商品コート゛」を参照して項目分割情報121、122の必須部分文字列を反映させる分割位置を特定する。R9の場合、文字列項目が商品DB404の商品コードを示しているので、項目分割情報122の6行目の分割位置が特定される。また、文字列項目が在庫状況DB405のコードを示しているので、項目分割情報122の8行目の分割位置が特定される。その後、特定され項目分割情報122の6行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 13})などを反映させる。このとき、既に分割位置にデータがある場合は、今回取得した情報を追加する。本例であれば、既にある情報{0, 4}に今回取得した情報{0, 13}を追加して{0, 4, 13}を生成する。また、特定され項目分割情報122の8行目の分割位置に必須部分文字列の開始位置と終了位置示す情報(例えば、{0, 13})などを反映させる。このとき、既に分割位置にデータがある場合は、今回取得した情報を追加する。本例であれば、R8の行さ選択されたときに既にある情報が{0, 4, 7}であるので、今回取得した情報{0, 13}を追加して{0, 4, 7, 13}を生成する。
ステップS304では、分割部202が二項間の分割位置を反映させる。例えば、部分文字列関連情報101のR1の場合は、部分文字列関連情報101の「関連」の「{メーカ.名前 <-> 検索画面.メーカ}」を参照して、メーカDB402の名前と検索画面DB405のメーカの二項を選択する。しかし、選択した二項に対応する項目分割情報122の「分割位置」各々には同じ「{0, 10}」が記憶されているので、「分割位置」の情報はともに「{0, 10}」のまま変更されない。
部分文字列関連情報101のR4の場合は、部分文字列関連情報101の「関連」の「{商品.商品コート゛ <-> メーカ.コート゛}」を参照して、商品DB404のコードとメーカDB402のコードの二項を選択する。しかし、選択した二項に対応する項目分割情報122の「分割位置」各々には同じ「{0, 4}」が記憶されているので、「分割位置」の情報はともに「{0, 4}」のまま変更されない。
部分文字列関連情報101のR9の場合であれば、部分文字列関連情報101の「関連」の「{商品.商品コート゛ <-> 在庫状況.商品コート゛}」を参照して、商品DB404の商品コードと在庫状況DB405の商品コードの二項を選択する。選択した二項に対応する項目分割情報122の「分割位置」の商品DB404の商品コードには「{0, 4, 7, 13}」が記憶されている。また、選択した二項の項目分割情報122の「分割位置」の在庫状況DB405の商品コードには「{0, 13}」が記憶されている。そこで、選択した二項に対応する項目分割情報122の「分割位置」各々の情報を同じにするため、在庫状況DB405の商品コードの「{0, 13}」に商品DB404の商品コードの「{0, 4, 7, 13}」を反映させる。
ステップS305では、分割部202が部分文字列関連情報211のすべての行を選択したか否かを判定し、すべての行を選択した場合にはステップS306(Yes)に移行し、未選択の行がある場合にはステップS302(No)に移行する。部分文字列関連情報101の例であれば、R1〜R10に対応する行をすべて選択されていれば、ステップS306(Yes)に移行する。
ステップS306では、分割部202が反映(ステップS302〜S305の処理)の前(初期化または前回のステップS302〜S305の処理)と後(今回のステップS302〜S305の処理)で、部分文字列関連情報211のすべての分割位置を比較する。そして、反映の前後で部分文字列関連情報211のすべての分割位置が変化していればステップS307(Yes)に移行し、変化していない場合にはこの処理を終了する。
ステップS301で分割部202が初期化または前回の項目分割情報212と、ステップS305までの処理により生成された項目分割情報212とを比較する。例えば、初期化した直後は項目分割情報121、122の「分割位置」の情報はすべて「{}」で、その後のステップS302〜S305により生成される項目分割情報121、122の「分割位置」の情報は図12に示した状態になる。その結果、項目分割情報121、122は反映の前後で変化しているので、ステップS307(Yes)に移行する。
また、初期化後の1回目のステップS302〜S305の処理である図12に示した状態の項目分割情報121、122の「分割位置」のすべての情報と、次のステップS302〜S305の処理の結果が図12に示した項目分割情報121、122の「分割位置」のすべての情報と、が同じであるならこの処理を終了する。
ステップS306の処理は、項目分割情報212を生成する際に、部分文字列関連情報211の行の選択する順番により、ステップS304の二項間の分割位置が反映されないことを避けるための処理である。この処理を実行することにより、項目分割情報212に二項間の分割位置の反映がされる。
図7のステップS103の説明をする。
ステップS103では、定義部203が項目分割情報212と項目定義情報209とを用いてデータ表現情報を抽出する。ステップS103の動作について図13を用いて説明する。
図13は、定義部の動作の一実施例を示すフロー図である。ステップS401では、定義部203が項目分割情報212の未選択の行を選択する。例えば、図12に示した項目分割情報121、122を選択し、項目分割情報121の最初の行から順番に選択をし、項目分割情報121の行をすべて選択し終えたら、項目分割情報122の最初の行を選択し、順番に行を選択することが考えられる。
ステップS402では、定義部203がステップS401で選択した行に対応する項目定義情報209を取得する。例えば、図12の項目分割情報122の6行目が選択された場合、商品DB404の商品コードに対応する図5の項目定義情報502の6行目が選択され、「商品」「商品コード」「文字列」「13」を取得する。
ステップS403では、定義部203が選択した項目分割情報212の「分割位置」が空「{}」であるか否かを判定し、空「{}」である場合にはステップS404(Yes)に移行し、空「{}」でない場合にはステップS405(No)に移行する。
ステップS404では、定義部203が項目分割情報212の「分割位置」の空「{}」に関連付けられている「項目」と一致する、項目定義情報209の「項目」に関連付けられている「桁」各々を取得する。次に、データ表現情報213の上記項目定義情報209の「項目」と一致する「項目」に対応する「桁範囲」に、「0」から「桁−1」を入力する。
データ表現情報213は、例えば、図14に示すデータ表現情報141、142などが考えられる。図14は、データ表現情報のデータ構造の一実施例を示す図である。
データ表現情報141は、例えば、「画面」「項目」「データ表現」などの情報を記憶する。「画面」には、画面を識別するための識別情報が記憶されている。本例では、図3に商品検索画面301に関連することを示す「検索画面」が記憶されている。「項目」には、「画面」に記憶されている検索画面に設けられている項目などを識別する情報が記憶されている。例えば、プログラムで扱う変数に対応する名称などが記憶されている。本例では、商品検索画面301のテキスト入力部302、303を用いて入力されるデータが代入される変数に対応する情報「メーカ」「カテゴリ」が記憶されている。「データ表現」は、「桁範囲」「対応データ項目」を有している。「桁範囲」には、「項目」各々に対応する桁数から1を引いた値が記憶される。本例では、「桁範囲」に「0−9」「0−9」が記憶されている。「対応データ項目」には、「項目」各々に対応する項目名が記憶される。本例では、「項目」に「メーカ」「カテゴリ」が記憶されている。
データ表現情報142は、「DB」「項目」「データ表現」などの情報を記憶する。本例では、図4のDB401に関するデータ表現情報が示されている。「DB」には、DBなどに含まれるデータベース情報(またはテーブル)を識別する情報が記憶される。本例では、データベース情報としてメーカDBを示す「メーカ」、カテゴリDBを示す「カテゴリ」、商品DBを示す「商品」、在庫状況DBを示す「在庫状況」が記憶されている。「項目」には、「DB」にあるデータベース情報各々に対応するカラムが記憶されている。本例では、「メーカ」に関連する「項目」として「名前」「コード」と、「カテゴリ」に関連する「項目」として「名前」「コード」とが記憶されている。また、「商品」に関連する「項目」として「商品名」「商品コード」「単価」と、「在庫状況」に関連する「項目」として「商品コード」「在庫数」とが記憶されている。
「データ表現」は、「桁範囲」「対応データ項目」を有している。「桁範囲」には、「項目」各々に対応する桁数から1を引いた値が記憶される。本例では、「桁範囲」に「0−9」「0−4」「0−9」・・・「0−9」が記憶されている。「対応データ項目」には、「項目」各々に対応する項目名が記憶される。本例では、「項目」に「名前」「コード」「名前」・・・「在庫数」が記憶されている。
ステップS404で定義部203は、例えば、項目分割情報122の「分割位置」の5、7、9行目の空「{}」に関連付けられている「項目」と一致する、項目定義情報502の「項目」に関連付けられている「桁」各々を取得する。本例では、項目定義情報502の「桁」からそれぞれ「10」「10」「10」を取得する。次に、データ表現情報141の上記項目定義情報502の「項目」と一致する「項目」に対応する「桁範囲」に、0−9を入力する。本例では、データ表現情報141の「桁範囲」の5、9、13に「0−9」が記憶される。「9」は、桁「10」から1を引いて数値であり、「−」は、例えば範囲を示す記号で、0−9であれば0から9範囲を示す。
ステップS405では、定義部203が項目分割情報212の「分割位置」の先頭の分割位置を示す数値を選択する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」が選択されているとすると、「0」が選択される。
ステップS406では、定義部203が現在選択されている「分割位置」の数値の次に、分割位置を示す数値が存在するか否かを判定し、存在する場合にはステップS407(Yes)に移行し、存在しない場合にはステップS410(No)に移行する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」が選択されているとすると、「0」の次に「4」が存在するのでステップS407(Yes)に移行する。
ステップS407では、定義部203が現在選択されている「項目」に対応する「分割位置」の数値の次の数値と、現在選択されている「項目」に一致する項目定義情報209に対応する「桁」とを比較する。次の数値<桁であるときステップS408(Yes)に移行し、次の数値<桁でない場合ステップS410(No)に移行する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」が選択されているとすると、「0」の次に「4」が存在し、現在選択されている「項目」に一致する項目定義情報502の6行目に対応する「桁」が「13」である。よって、次の数値「4」<桁「13」なのでステップS408(Yes)に移行する。
ステップS408で定義部203は、現在選択されている「桁範囲」に「選択している分割位置の数値」から「次の分割位置の数値−1」を生成するとともに、対応する行を生成してデータ表現情報213に追加する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」のうち、現在選択されている「分割位置」の数値が「0」で、次の分割位置を示す数値が「4」である場合、図14のデータ表現情報142の「桁範囲」の6行目に対応する行が生成される。すなわち、「商品」「商品コード」「0−3」「商品コード1」が生成され、データ表現情報142に追加される。データ表現情報142の「商品」「商品コード」は、データ表現情報142の「項目」と一致する項目分割情報122の「商品」「商品コード」を記憶する。「0−3」は、選択している分割位置の数値「0」から次の分割位置の数値−1「4−1」を求めて記憶する。「商品コード1」は、生成した新しい項目名である。本例では、「項目」の「商品コード」に連番「1」を付している。
また、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」のうち、現在選択されている「分割位置」の数値が「4」で、次の分割位置を示す数値が「7」である場合、図14のデータ表現情報142の「桁範囲」の7行目に対応する行が生成される。すなわち、「商品」「商品コード」「4−6」「商品コード2」が生成され、データ表現情報142に追加される。データ表現情報142の「商品」「商品コード」は、データ表現情報142の「項目」と一致する項目分割情報122の「商品」「商品コード」を記憶する。「4−6」は、選択している分割位置の数値「4」から次の分割位置の数値−1「7−1」を求めて記憶する。「商品コード2」は、生成した新しい項目名である。本例では、「項目」の「商品コード」に連番「2」を付している。
ステップS409では、定義部203が次の分割位置の数値を選択し、ステップS406に移行する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」のうち、現在選択されている「分割位置」の数値が「0」で、次の分割位置を示す数値が「4」である場合には、「4」が選択される。
ステップS410では、定義部203が現在選択されている「桁範囲」に現在選択されている「分割位置」の数値と、項目定義情報209の対応する「桁」から1を引いた値とを用いて桁範囲を生成し、桁範囲に対応する行をデータ表現情報213に追加する。例えば、項目分割情報122の「分割位置」の6行目の「{0, 4, 7, 13}」のうち、現在選択されている「分割位置」の数値が「7」で、次の分割位置を示す数値が「13」である場合、ステップS407からステップS410に移行する。そして、図14のデータ表現情報142の「桁範囲」の8行目に対応する行が生成される。すなわち、「商品」「商品コード」「4−6」「商品コード3」が生成され、データ表現情報142に追加される。データ表現情報142の「商品」「商品コード」は、データ表現情報142の「項目」と一致する項目分割情報122の「商品」「商品コード」を記憶する。「7−12」は、選択している分割位置の数値「7」から次の分割位置の数値−1「13−1」を求めて記憶する。「商品コード3」は、生成した新しい項目名である。本例では、「項目」の「商品コード」に連番「3」を付している。
ステップS411では、定義部203が項目分割情報212に未選択の「項目」が存在するか否かを判定し、存在する場合にはステップS401(Yes)に移行し、存在しない場合にはこの処理を終了(No)する。
図7のステップS104の説明をする。
ステップS104では、制約変換部204が元制約情報208とデータ表現情報213とを用いて変換後制約情報214を抽出する。ステップS104の動作について図15を用いて説明する。
図15は、制約変換部の動作の一実施例を示すフロー図である。
図15のステップS201〜S208では、制約変換部204が図9に示したステップS201〜S208と同じ処理を行う。例えば、図6の元制約情報603の(3)の「(subString(r1.商品コート゛, 0, 4) = r2.コート゛)」が選択されたとすれば、「文字列項目」として「商品.商品コート゛」「カテコ゛リ.コート゛」が生成される。そして、「必須部分文字列」として「商品.商品コート゛」に対応する「{str[4, 7]}」と「カテコ゛リ.コート゛」に対応する「{str[0, 3]}」が生成される。
ステップS501では、制約変換部204が生成した必須部分文字列の範囲に対応するデータ表現情報213の対応データ項目名を特定する。例えば、図6の元制約情報603の(3)の「(subString(r1.商品コート゛, 0, 4) = r2.コート゛)」が選択され、「必須部分文字列」として「商品.商品コート゛」に対応する「{str[4, 7]}」と「カテコ゛リ.コート゛」に対応する「{str[0, 3]}」が生成されている場合を考える。その場合、制約変換部204はデータ表現情報141、142から、「商品」「商品コード」「4−6」「商品コード2」を有する行が選択される。すなわち、対応データ項目名として「商品コード2」が特定される。
ステップS502では、制約変換部204がステップS501で特定した対応データ項目名を用いて、元制約情報208の対応する箇所を変換する。例えば、図6の元制約情報603の(3)において、「商品コード2」が特定された場合、上記「(subString(r1.商品コート゛, 0, 4) = r2.コート゛)」は、「r1.商品コード2 = r2.コード」のように表現される。
図16に、図6の元制約情報603を、対応データ項目名を用いて変換した例を示す。図16は、変換後元制約情報の一実施例を示す図である。図16の下線部が変換された箇所を示している。
図7のステップS105では、充足値生成部205が変換後制約情報214を入力として、Satisfiability Modulo Theories(SMTソルバ)を用いて変換後制約情報214を充足する解(充足値)を求め、変換後制約充足値情報215に記憶する。
SMTソルバに関しては、例えば、次の非特許文献を参照されたい。
・足立正和,他、「充足可能性判定に基づくリアルタイムシステムのスケジューリング解析」、組込みシステムシンポジウム2008、平成20年10月
・Armin Biere, Marijn Heule, Hans Van Maaren, Toby Walsh, "Handbook of Satisfiability(Frontiers in Artificial Intelligence and Applications)",IOS Press, 2009年2月
・R.E. Bryant, Daniel Kroening, Ofer Strichman, "Decision Procedures: An Algorithmic Point of View (Texts in Theoretical Computer Science. An EATCS Series)", Springer, 2008年7月7日
図17は、SMTソルバにより求められた充足値の一実施例を示す図である。変換後制約情報161の充足値は変換後制約充足値情報215に記憶される。
検索画面171の場合、商品検索画面301のテキスト入力部302、303に入力される「メーカ」に対応する「101」、「カテゴリ」に対応する「202」となる。
また、メーカ172の場合、メーカDB402に記憶される「名前」「101」に対応付けられるコード「10001」と、「名前」「202」に対応付けられるコード「10002」が充足値となる。
カテゴリ173の場合、カテゴリDB403に記憶される「名前」「201」に対応付けられるコード「20001」と、「名前」「202」に対応付けられるコード「20002」が充足値となる。
商品174の場合、商品DB404に記憶される「商品名」「商品コード1」「商品コード2」「商品コード3」「単価」各々に対応付けられるデータが充足値となる。「商品名」の充足値は「301」「302」「303」である。「商品コード1」の充足値は商品名「301」「302」「303」各々に関連付けられる「10001」「10001」「10002」である。「商品コード2」の充足値は商品名「301」「302」「303」各々に関連付けられる「20001」「20001」「20002」である。「商品コード3」の充足値は商品名「301」「302」「303」各々に関連付けられる「30001」「30002」「30001」である。「単価」の充足値は商品名「301」「302」「303」各々に関連付けられる「1000」「2000」「3000」である。
在庫状況175の場合、在庫状況DB405に記憶される「商品コード1」「商品コード2」「商品コード3」「在庫数」各々に対応付けられるデータが充足値となる。「商品コード1」の充足値は「10001」「10002」である。「商品コード2」の充足値は「20001」「20002」である。「商品コード3」の充足値は「30001」「30001」である。「在庫数」の充足値は「商品コード1」「商品コード2」「商品コード3」各々に関連付けられる「1000」「2000」「3000」である。
ステップS106では、充足値生成部205が変換後制約情報を充足する解があるか否かを判定し、解がある場合にはステップS107(Yes)に移行し、解がない場合にはステップS108(No)に移行する。
ステップS107では、充足値変換部206が元制約充足データを生成する。
図7のステップS107の説明をする。
ステップS107の動作について図18を用いて説明する。図18は、制約変換部の動作の一実施例を示すフロー図である。
ステップS601では、充足値変換部206が変換後制約情報の充足値(変換後制約充足値情報215)を文字列に変換する。ステップS602では、充足値変換部206が文字列に変換した各データをデータ表現情報213に従って結合し、元制約充足情報210を生成する。
例えば、「商品コード1」「商品コード2」「商品コード3」に「10001」「2001」「30001」が記憶されている場合、まず、ステップS601で文字列「A001」「C01」「00001」に変換される。次に、ステップS602で、データ表現情報142の6〜8行目を参照して「A001」「C01」「00001」を結合して、「A001C0100001」とする。
図19は、元制約充足情報のデータ構造の一実施例を示す図である。
検索画面191の場合、商品検索画面301のテキスト入力部302、303に入力される「メーカ」に対応する「101」、「カテゴリ」に対応する「202」を、ステップS601では、「Maker0」「Category1」に変換する。
また、メーカ192の場合、メーカDB402に記憶される「名前」の「101」を、ステップS601で「Maker0」にし、対応付けられるコード「10001」を「A001」に変換する。また、「名前」の「202」を、ステップS601で「Maker1」にし、対応付けられるコード「10002」を「A002」に変換する。
また、カテゴリ193の場合、カテゴリDB403に記憶される「名前」の「201」を、ステップS601で「Category0」にし、対応付けられるコード「20001」を「C001」に変換する。また、「名前」の「202」を、ステップS601で「Category1」にし、対応付けられるコード「20002」を「C002」に変換する。
また、商品194の場合、商品DB404に記憶される「商品」の「301」「302」「303」は、ステップS601で「Product0」「Product1」「Product2」に変換される。「商品コード」には、「Product0」「Product1」「Product2」各々に関連付けられている。ステップS601、S602により変換された「A001C0100001」「A001C0100002」「A002C0200001」が記憶されている。「単価」には「Product0」「Product1」「Product2」各々に関連付けられ、「1000」「2000」「3000」が記憶されている。
また、在庫状況195の場合、在庫状況DB404に記憶される「商品コード」は、ステップS601、S602により変換された「A001C0100001」「A001C0100002」「A002C0200001」が記憶されている。「在庫数」には「A001C0100001」「A002C0200001」各々に関連付けられ、「100」「200」が記憶されている。
効果について説明する。
本実施の態様では、制約に含まれる文字列ごとに、複数の文字列間の関連を記憶した情報を参照して他文字列と一致する部分文字列を求め、該部分文字列を1つの要素とする配列に変換し、制約を変換する。その後、変換した制約をSMTソルバの入力として充足値求め、求めた充足値を用いてテストデータを生成する。その結果、SMTソルバの時間計算量を削減することができるという効果を奏する。すなわち、項目分割情報に従って変換後制約情報を生成することで、文字配列に対する制約として表現していた文字列の制約は、部分文字列に対応する単独の値(数値等)に対する制約として表現され、変換後制約の複雑さが抑えられる。そのため、充足可能性判定がより効率化し、多くの文字列制約を含むデータをより高速に生成することが可能になる
例えば、「商品.商品コード」によって表現される文字列が13文字からなる場合、文字列に関する制約を3つの部分文字列に対する制約として表現できる場合、従来と比べて制約の複雑さ(変数の数)は3/13となり、制約に対する充足可能性判定もより効率化される。
また、文字列の制約のうち、「0文字目から3文字目」といった、部分文字列の切り出し位置が一通りに定まっているものに対し効果的に作用する。こういった性質は業務アプリケーションの仕様に頻出するので、業務システムのテストデータ生成に寄与するところ大である
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
実施形態に関し、更に以下の付記を開示する。
(付記1)
変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
前記必須部分文字列に取得した前記桁数を代入し、
前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求め、
前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振り、
前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、
処理をコンピュータに実行させるテストデータ生成プログラム。
(付記2)
前記変換後制約情報を入力として、SMTソルバを用いて前記変換後制約情報が有する条件各々の充足値を求め、
前記充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する、
処理を前記コンピュータに実行させること特徴とする付記1に記載のテストデータ生成プログラム。
(付記3)
前記桁数を代入したすべての前記必須部分文字列に対して、複数回、前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々に前記桁数各々を、反映させて分割位置を求め、
前記桁数を代入したすべての前記必須部分文字列に対応する前回の分割位置と今回の分割位置を同じにする、
処理を前記コンピュータに実行させること特徴とする付記1または2に記載のテストデータ生成プログラム。
(付記4)
変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
前記必須部分文字列に取得した前記桁数を代入し、
前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求め、
前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振り、
前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、
こと特徴とするテストデータ生成方法。
(付記5)
前記コンピュータは、
前記変換後制約情報を入力として、SMTソルバを用いて前記変換後制約情報が有する条件各々の充足値を求め、
前記充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する、
こと特徴とする付記4に記載のテストデータ生成方法。
(付記6)
前記コンピュータは、
前記桁数を代入したすべての前記必須部分文字列に対して、複数回、前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々に前記桁数各々を、反映させて分割位置を求め、
前記桁数を代入したすべての前記必須部分文字列に対応する前回の分割位置と今回の分割位置を同じにする、
こと特徴とする付記4または5に記載のテストデータ生成方法。
(付記7)
変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
前記必須部分文字列に取得した前記桁数を代入する、生成部と、
前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求め、分割部と、
前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振る、定義部と、
前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、制約変換部と、
を備えること特徴とするテストデータ生成装置。
(付記8)
前記変換後制約情報を入力として、SMTソルバを用いて前記変換後制約情報が有する条件各々の充足値を求める充足値生成部と、
前記充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する充足値変換部と、
を備えること特徴とする付記7に記載のテストデータ生成装置。
(付記9)
前記分割部は、
前記桁数を代入したすべての前記必須部分文字列に対して、複数回、前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々に前記桁数各々を、反映させて分割位置を求め、
前記桁数を代入したすべての前記必須部分文字列に対応する前回の分割位置と今回の分割位置を同じにする、
を備えること特徴とする付記7または8に記載のテストデータ生成装置。
1 テストデータ生成装置
2 制御部
3 記憶部
4 記録媒体読取装置
5 入出力インタフェース
6 通信インタフェース
7 バス
8 記録媒体
9 入出力部
201 生成部
202 分割部
203 定義部
204 制約変換部
205 充足値生成部
206 充足値変換部
207 関連パターン情報
208 元制約情報
209 項目定義情報
210 元制約充足情報
211 部分文字列関連情報
212 項目分割情報
213 データ表現情報
214 変換後制約情報
215 変換後制約充足値情報

Claims (5)

  1. 変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
    前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
    取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
    前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
    前記必須部分文字列に取得した前記桁数を代入し、
    前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求め、
    前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振り、
    前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、
    処理をコンピュータに実行させるテストデータ生成プログラム。
  2. 前記変換後制約情報を入力として、SMTソルバを用いて前記変換後制約情報が有する条件各々の充足値を求め、
    前記充足値各々を用いて変換後制約の充足値から元制約情報の有する条件を充足するテストデータを生成する、
    処理を前記コンピュータに実行させること特徴とする請求項1に記載のテストデータ生成プログラム。
  3. 前記桁数を代入したすべての前記必須部分文字列に対して、複数回、前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々に前記桁数各々を、反映させて分割位置を求め、
    前記桁数を代入したすべての前記必須部分文字列に対応する前回の分割位置と今回の分割位置を同じにする、
    処理を前記コンピュータに実行させること特徴とする請求項1または2に記載のテストデータ生成プログラム。
  4. 変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
    前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
    取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
    前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
    前記必須部分文字列に取得した前記桁数を代入し、
    前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求め、
    前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振り、
    前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、
    こと特徴とするテストデータ生成方法。
  5. 変数を表す部分文字列各々を用いて表現される文字列の表現パターンと、該文字列の表現において必須となる前記部分文字列各々の必須部分文字列の桁数を求める式パターンと、前記部分文字列各々が関連していることを示す関連パターンと、が関連付けて記憶された関連パターン情報テーブルを参照し、テスト対象のプログラムの入力データの制約条件を示す元制約情報から、前記文字列の表現パターンと一致する文字列を抽出し、
    前記関連パターン情報テーブルを参照して、抽出した前記文字列の前記表現パターンに対応する前記式パターン及び関連パターンを取得し、
    取得した前記式パターン及び前記関連パターンに、抽出した前記文字列に含まれる部分文字列を代入して、必須部分文字列と部分文字列各々が関連していることを示す関連情報を求め、
    前記元制約情報に含まれる変数を表す前記部分文字列と、該部分文字列の桁数と、が関連付けられている項目定義情報を参照して、前記部分文字列に対応する前記必須部分文字列の桁数を取得し、
    前記必須部分文字列に取得した前記桁数を代入する、生成部と、
    前記桁数を代入した前記必須部分文字列と前記関連情報とを用いて、関連する該必須部分文字列各々の前記桁数を取得し、取得した前記桁数各々を前記必須部分文字列各々に対応する前記部分文字列の分割位置を求める、分割部と、
    前記分割位置に従い、抽出した前記文字列に含まれる前記部分文字列を分割し、分割した部分文字列各々の桁範囲と、該分割した部分文字列各々に名称を割り振る、定義部と、
    前記元制約情報の抽出した前記文字列に含まれる前記部分文字列のうち分割された前記部分文字列を、分割した前記部分文字列の名称を用いた表現に変換して変換後制約情報を生成する、制約変換部と、
    を備えること特徴とするテストデータ生成装置。
JP2011146057A 2011-06-30 2011-06-30 テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 Active JP5673395B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011146057A JP5673395B2 (ja) 2011-06-30 2011-06-30 テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011146057A JP5673395B2 (ja) 2011-06-30 2011-06-30 テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置

Publications (2)

Publication Number Publication Date
JP2013012162A JP2013012162A (ja) 2013-01-17
JP5673395B2 true JP5673395B2 (ja) 2015-02-18

Family

ID=47685967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011146057A Active JP5673395B2 (ja) 2011-06-30 2011-06-30 テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置

Country Status (1)

Country Link
JP (1) JP5673395B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9767412B2 (en) * 2014-09-04 2017-09-19 Fujitsu Limited Test size reduction using don't care analysis
JP6684233B2 (ja) * 2017-01-12 2020-04-22 株式会社日立製作所 テスト入力情報検索装置及び方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5407727B2 (ja) * 2009-10-13 2014-02-05 富士通株式会社 テストデータ生成プログラム、方法及び装置
JP5447054B2 (ja) * 2010-03-19 2014-03-19 富士通株式会社 データ生成方法,データ生成装置,およびデータ生成プログラム

Also Published As

Publication number Publication date
JP2013012162A (ja) 2013-01-17

Similar Documents

Publication Publication Date Title
Masmoudi et al. Lot-sizing in a multi-stage flow line production system with energy consideration
RU2632133C2 (ru) Способ (варианты) и система (варианты) создания модели прогнозирования и определения точности модели прогнозирования
US9760347B2 (en) Method and system to identify GUI objects for non-markup-language-presented applications
US9665600B2 (en) Method for implementing database
JP6937556B2 (ja) 複数のメディアソースからのコンテンツの組織化及び視覚化
US20080295007A1 (en) Data Visualization
JP2011034457A (ja) データマイニングシステム、データマイニング方法及びデータマイニング用プログラム
Aydilek et al. Minimising maximum tardiness in assembly flowshops with setup times
JP6692281B2 (ja) テストケース生成装置、及びテストケース生成方法
JP5673395B2 (ja) テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置
Gupta et al. Single machine group scheduling with family setups to minimize total tardiness
JP7485760B2 (ja) ネットワーク可視化のシステム及び方法
CN108304291B (zh) 测试输入信息检索装置和方法
JP5416448B2 (ja) 表示装置、表示方法およびプログラム
EP3086244B1 (en) Database system and method of operation thereof
JP2022179882A (ja) 計画評価装置及び計画評価方法
JP2018194944A (ja) 表示プログラム、表示方法および表示装置
JP6123372B2 (ja) 情報処理システム、名寄せ判定方法及びプログラム
JP6455087B2 (ja) 帳票情報処理プログラム、帳票情報処理装置、および帳票情報処理方法
Mujica Mota et al. An improved time line search algorithm for manufacturing decision-making
JPWO2020122004A1 (ja) 情報処理装置、情報処理方法、およびプログラム
TW201619852A (zh) 用於感知情境並推薦資訊之電子計算裝置、其方法及其電腦程式產品
JP2004302683A (ja) 文書管理システム、文書生成方法、登録方法およびプログラム
JP7021401B1 (ja) ロギング支援装置、ロギングシステム、ロギング支援方法及びプログラム
JP5332443B2 (ja) 部品統合管理装置、部品統合管理方法および部品統合管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140304

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141113

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141215

R150 Certificate of patent or registration of utility model

Ref document number: 5673395

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150