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

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

Info

Publication number
JP2013003854A
JP2013003854A JP2011134555A JP2011134555A JP2013003854A JP 2013003854 A JP2013003854 A JP 2013003854A JP 2011134555 A JP2011134555 A JP 2011134555A JP 2011134555 A JP2011134555 A JP 2011134555A JP 2013003854 A JP2013003854 A JP 2013003854A
Authority
JP
Japan
Prior art keywords
program
test data
condition
code
codes
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.)
Granted
Application number
JP2011134555A
Other languages
English (en)
Other versions
JP5672165B2 (ja
Inventor
Tadahiro Uehara
忠弘 上原
Shoichiro Fujiwara
翔一朗 藤原
Asako Katayama
朝子 片山
Kazuki Munakata
一樹 宗像
Yoshiharu Maeda
芳晴 前田
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 JP2011134555A priority Critical patent/JP5672165B2/ja
Publication of JP2013003854A publication Critical patent/JP2013003854A/ja
Application granted granted Critical
Publication of JP5672165B2 publication Critical patent/JP5672165B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】仕様と異なる条件を有するプログラムを用いて該プログラムのテストを行う場合であっても、必要十分なテストデータを生成する。
【解決手段】プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して第1のコードを取得し、プログラムを入力とするシンボリック実行により抽出された、プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して第2のコードを取得し、第1のコード各々と第2のコード各々と、を組み合わせて、仕様条件と実装条件との組み合わせ条件を表す複数の第3のコードを生成し、各第3のコードに基づき当該第3のコードに含まれる変数の充足解を求め、充足解を、プログラムのテストデータを記憶する記憶部に記憶する、テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置である。
【選択図】図2

Description

本発明は、プログラムのテストに用いるデータを生成するテストデータプログラム、テストデータ生成方法、テストデータ生成装置に関する。
従来、プログラムのテストを網羅的に行う方法として、仕様に基づいて作成したテストデータを用いてプログラムのテストを行う方法が知られている。例えば、1)〜3)に示す条件を有する仕様に基づいて、従来のテストで用いるテストデータの求め方について説明する。
仕様例
1)入力データaが0以下ならばエラーを表示
2)入力データaが0より大きく10より小さいとき入力データaを10倍して表示
3)入力データaが10以上ならばエラーを表示
1)〜3)を有する仕様を用いて作成されたプログラム例とモデル記述(論理式で記述)した仕様例を示す。
プログラム例
1 public void method(int a){
2 if (0<=a && a<4){
3 System.out.println(a*10);
4 } else if (4<a && a<10) {
5 System.out.println(a*10);
6 } else {
7 System.err.println(“error!”);
8 }
9 }
モデル記述した仕様例
1 a<=0 → error
2 0<a<10 → a*10
3 a>=10 → error
上記プログラム例はJAVA(登録商標)などのプログラミング言語で記載されたプログラムの一部分のコードを示している。また、上記プログラム例のコード各々の先頭に示されている1〜9の数字は行数を表している。また、上記プログラムは誤って記載されている。本来、仕様に沿って作成した場合には2行目のif文に、入力データaが0より大きい場合(0<a)が記載されるべきであるが、入力データaが0以下である場合(0<=a)について誤って記載されている。また、4行目のif文には、入力データaが4以上である場合(0<a)が記載されるべきであるが、入力データaが4より小さい場合(4<a)について誤って記載されている。
上記仕様例はモデル記述言語などで記載されたコードで、各行の先頭に示されている1〜3の数字は行数を示している。なお、仕様例のコード中の「→」は左辺の条件を満たしたならば右辺に示す処理を実行することを示している。「error」は出力装置にエラーであることを表示することを示す。「a*10」は出力装置に入力データaを10倍した値を表示することを示している。
次に、本例では記述されたコードから境界値、値域の中間値や最小値または最大値を抽出する。1行目の条件には入力データaが0以下である場合(0<=a)、エラーを表示することが示されており、2行目の条件には入力データaが0より大きく10より小さいとき入力データaを10倍して表示することが示されている。また、3行目の条件には入力データaが10以上ならばエラーを表示することが示されている。3つの条件によれば、0以下の値域、1〜9の値域、10以上の値域が存在し、境界値として0、1、9、10が存在する。また、0以下の値域では、最小値と中間値が定まらないが例えば−100を最小値と中間値として用いることが考えられる。1〜9の値域では中間値として5が存在する。10以上の値域では、中間値と最大値が定まらないが例えば100を中間値と最大値として用いることが考えられる。次に、上記説明した境界値と、値域の中間値や最小値または最大値とを用いて、テストデータを生成する。
テストデータ例
a=-100, 0, 1, 5, 9, 10, 100
ところが、上記テストデータを用いて、プログラム例についてテストを実施すると、プログラムの誤りを検出することができない。上記説明したプログラム例の4行目の誤りを検出するためにはテストデータに4がなければならない。従って、仕様に基づいて求めた境界値と値域の中間値や最小値または最大値をテストデータとして用いたプログラムでは、仕様どおりにプログラムが作成されているか否かの判定をすることができないことがある。
一方、プログラムからプログラムが実行しうるパスを網羅的に抽出して、そのパスを実行するための条件からテストデータを生成する方法が知られている。例えば、シンボリック実行などの技術を用いて、プログラムを実行した場合に実行される全てのパスを抽出し、パス各々に関連する条件を満たすための変数の条件を抽出する方法が知られている。
なお、シンボリック実行については、基礎的な事項が、例えば、玉井哲雄、福永光一、「記号実行システム」、情報処理、pp18-28、1982年1月15日などに詳しく述べられているので、そちらを参照されたい。
上記プログラム例に対してシンボリック実行を行う場合について説明する。シンボリック実行を行うと、条件を抽出するために、上記プログラム例の2行目と4行目に記載されているif文などの分岐条件を検出する。本例の場合であれば、検出したif文に含まれる変数aの取り得る範囲を場合分けし、条件を示す式を求める。
条件例
1 not(0<=a)
2 0<=a & a<4
3 0<=a & not(a<4) & not(4<a)
4 0<=a & not(a<4) & 4<a & a<10
5 0<=a & not(a<4) & 4<a & not(a<10)
続いて、上記条件例を満たすテストデータを生成する。
条件を満たすテストデータ例
a=-1, 3, 4, 5, 10
条件例の1〜5行目の条件各々からは、テストデータとして1行目に対応するテストデータ−1、2行目に対応するテストデータ3、3行目に対応するテストデータ4、4行目に対応するテストデータ5、5行目に対応するテストデータ10が生成されたとする。ところが、2行目に対応する条件からはテストデータとして0〜3の値のうち何れか1つが求められればよいため、本例では3がテストデータとして求められている。そのため、条件を満たすテストデータとして上記テストデータ例を用いてテストを行うと、プログラム例の2行目の誤りを検出できないことになる。プログラム例の2行目の誤りを検出するには、条件例の2行目から求めるテストデータとして0が求められなければならない。
さらに、シンボリック実行を用いてテストデータを抽出する場合、テスト対象のプログラムに仕様に対応する記載がない場合には、条件を抽出することすらできない。
また、仕様に基づいて作成したテストデータとシンボリック実行により抽出したテストデータを用いる方法がある。上記プログラム例の場合、テストデータ例と条件を満たすテストデータ例を合わせると、冗長なテストデータとなってしまうことがある。
冗長なテストデータ例
a=-100, -1, 0, 1, 3, 4, 5, 9, 10, 100
例えば、−100と−1を用いるということは、同じパスを2回通ることとなり、冗長なテストデータが存在することになり、余計なテストをしていることになる。また、1と3、5と9についてもどちらか1つの値があればよいので、冗長なテストデータが存在していることになる。
なお、関連する技術として、自然言語の仕様とC言語のプログラムとGraphical User Interface(GUI)ベースの制御ロジックとのクロス検証を行うことができ、結果的に当該開発の効率を高めることができるクロス検証が開示されている。このクロス検証によれば、動作仕様、エンジン制御用のCコードおよびエンジン制御用のGUIロジックを作成する。そして、作成した動作仕様、CコードおよびGUIロジックに基づいてアサーションを生成し、生成したアサーションを当該Cコードおよび当該GUIロジックに挿入する。その後、生成したアサーション、アサーションが挿入された後のCコードおよびアサーションが挿入された後のGUIロジックをConjnctive Normal Form(CNF)へ変換する。そして、作成した動作仕様に基づいて、変換した後のCコードおよびGUIロジックのクロス検証を行い、その検証結果を表示する。
また、関連する技術として、ウェブアプリケーションを検証するためのシンボリック実行につて開示がされている。
また、関連する技術として、現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱いつつ、規模を抑えたシステム状態遷移系ならびにテストケースを生成する技術が開示されている。この技術によれば、システム動作仕様記述に基づいて遷移事象を順次生起させてシステム状態遷移系を生成する。その際に、遷移事象の順序制約を表現するシナリオ状態遷移系も同時に遷移させ、順次生起させる遷移事象を、当該シナリオ状態遷移系で遷移可能なものに制限する。
また、関連する技術として、計算機プログラムのソースコードが意味するプログラムの振る舞いに関する性質を検査するソースコード検査方法が開示されている。このソースコード検査方法では、計算機プログラムのソースコードにより記述されたプログラムを模擬的に実行して実際に実行される命令列を抽出し、抽出した命令列に基づいてソースコードの検査内容を決定する。
特開2008−276556号公報 特開2009−87355号公報 特開2010−211481号公報 国際公開第2006/038394号
本発明は、仕様と異なる誤りを有するプログラムを用いて該プログラムのテストを行う場合であっても、必要十分なテストデータを生成するテストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置を提供することを目的とする。
実施の態様のひとつであるコンピュータに実行させるテストデータ生成プログラムは、次の処理を実行する。
プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して上記第1のコードを取得する。
上記プログラムを入力とするシンボリック実行により抽出された、上記プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して上記第2のコードを取得する。
上記第1のコード各々と上記第2のコード各々と、を組み合わせて、上記仕様条件と上記実装条件との組み合わせ条件を表す複数の第3のコードを生成する。
上記各第3のコードに基づき当該第3のコードに含まれる上記変数の充足解を求める。
上記充足解を、上記プログラムのテストデータを記憶する記憶部に記憶する。
実施の態様によれば、仕様と異なる誤りを有するプログラムを用いて該プログラムのテストを行う場合であっても、必要十分なテストデータを生成できるという効果を奏する。
テストデータ生成装置のハードウェアの一実施例を示す図である。 テストデータ生成装置の制御部の一実施例を示す図である。 テストデータ生成装置の動作の一実施例を示すフロー図である。 仕様条件情報とプログラム情報と実装条件情報の一実施例を示す図である。 組合条件情報のデータ構造の一実施例を示す図である。 組合条件に対してSMTソルバにより求められる解の一実施例を示す図である。 仕様条件と実装条件とテストデータの関係を示す図である。
実施の態様に示すテストデータを生成する方法は、プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して上記第1のコードを取得する。また、プログラムを入力とするシンボリック実行により抽出された、上記プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して上記第2のコードを取得する。
そして、第1のコード各々と第2のコード各々と、を組み合わせて、仕様条件と実装条件との組み合わせ条件を表す複数の第3のコードを生成する。
次に、各第3のコードに基づき当該第3のコードに含まれる変数の充足解を求める。例えば、後述するSatisfiability Modulo Theories(SMT)ソルバなどを用いて解を求める。その後、充足解を、プログラムのテストデータを記憶する記憶部に記憶する。
その結果、仕様と異なる誤りを有するプログラムを用いて該プログラムのテストを行う場合であっても、必要十分なテストデータを生成することができる。
以下図面に基づいて、実施形態について詳細を説明する。
テストデータ生成装置1について説明する。
図1は、テストデータ生成装置のハードウェアの一実施例を示す図である。テストデータ生成装置1は、制御部2、記憶部3、記録媒体読取装置4、入出力インタフェース5(入出力I/F)、通信インタフェース6(通信I/F)などを備えている。また、上記各構成部はバス7によってそれぞれ接続されている。
制御部2は、後述する抽出部201、生成部202、充足値生成部203などを有している。また、制御部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は、制御部3の制御に従って記録媒体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に記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの記録媒体8が販売される。また、プログラムをサーバコンピュータの記憶装置に記録しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、記録媒体8に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶部3に記録する。そして、コンピュータは、自己の記憶部3からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、記録媒体8から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
制御部2いついて説明する。
図2は、テストデータ生成装置の制御部の一実施例を示す図である。制御部2は、抽出部201、生成部202、充足値生成部203を有する。
抽出部201は、例えば、プログラムを入力としてシンボリック実行を行い、抽出されたパス各々で用いられている変数に対する条件(実装条件)を抽出する。シンボリック実行では、プログラムを、そのプログラムに含まれる変数に具体的な数値を入力する代わりに、数値を代表するシンボルでプログラムを模擬的に実行し、その結果を評価する。なお、抽出部201は、テストデータ生成装置と別に設けられていてもよい。すなわち、対象のプログラムを入力とし、別のコンピュータによりシンボリック実行を行って実装条件を求めてもよい。
生成部202は、仕様に基づいて作成した仕様条件各々と、シンボリック実行を用いて抽出された実装条件各々とを組合条件を生成し、生成部202は充足値生成部203に生成した組合条件(テストケース)各々を送信する。また、生成部202は、充足値生成部203が求めた組合条件各々を充足する組合条件に含まれる変数の解を取得し、テストデータを生成する。
充足値生成部203は、生成した組合条件が成り立つか否かを判定し、成り立つ場合には、組合条件が成り立つ変数の解を求めテストデータとし、組合条件に関連付けてテストデータを記憶部3の後述するテストデータ情報に記憶する。充足値生成部203は、例えば、SMTソルバを用いてテストデータを求めることが考えられる。
SMTソルバは、論理式が矛盾していないことを示すために、論理式全体を真とするような各部分論理式の真偽時の組み合わせが存在するか否かを判定する。なお、SMTソルバは、整数、実数、配列などを扱うことができるという利点がある。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日
なお、抽出部201、生成部202、充足値生成部203各々の機能を、それぞれを異なるコンピュータに実装し、コンピュータ各々をネットワークにより接続してテストデータを生成してもよい。
テストデータ生成装置の動作について説明する。
図3は、テストデータ生成装置の動作の一実施例を示すフロー図である。ステップS1では、生成部202が仕様に基づいてモデル記述した仕様条件を示すコード(第1のコード)が記憶されている記憶部3の仕様条件情報を参照して、未処理の仕様条件を特定する。仕様条件情報は、例えば、図4に示す仕様条件情報401などが考えられる。図4は、仕様条件情報とプログラム情報と実装条件情報のデータ構造の一実施例を示す図である。仕様条件情報401は、「No」「仕様条件」「処理済み」などの情報を有する。「No」は仕様条件に関連付けられる識別子で、本例では、識別子「1」「2」「3」などが記憶されている。「仕様条件」には、仕様条件が識別子「1」「2」「3」に関連付けて記憶されている。本例では、仕様に1)入力データである変数aが0以下ならばエラーを表示すること、2)変数aが0より大きく10より小さいとき変数aを10倍して表示すること、3)変数aが10以上ならばエラーを表示すること、が記載されている。そして、この記載に対してモデル記述した仕様条件を示すコードが、「No」に関連付けられて記憶されている。図4の例では、「a<=0」は1)の仕様に対応する仕様条件であり、「0<a&a<10」は2)の仕様に対応する仕様条件であり、「a>=10」は3)の仕様に対応する仕様条件である。「処理済み」には、現在選択されている仕様条件を示すコードに対して後述する実装条件と組み合わせた(例えば、論理積&で結合した)条件を生成したか否かを示す情報が記憶されている。本例では、「2」「1」「0」が記載されており、現在選択されている仕様条件に対して全ての実装条件と組合条件に対してステップS3の処理が実施されていれば、識別子「2」が記憶される。現在選択されている仕様条件に対してまだ組み合わされていない実装条件がまだある場合、識別子「1」が記憶される。まだ選択されていない仕様条件に対しては識別子「0」が記憶される。
すなわち、ステップS1では仕様条件情報401の「処理済み」を参照し、「処理済み」に「1」または「0」が記載されている仕様条件を選択する。図4の仕様条件情報401の場合であれば、「No」の「2」に関連する「処理済み」が「1」の状態の仕様条件を選択する。
ステップS2では、生成部202が現在選択されている仕様条件に対して未処理の実装条件を示すコード(第2のコード)を特定する。
実装条件について説明する。実装条件を示すコードは、例えば、抽出部201が図4のプログラム情報402を記憶部3から取得して、プログラム情報402に対してシンボリック実行を行って得られるコードである。本例では、プログラム情報402に対してシンボリック実行を行って得られる条件として、図4に示す実装条件情報403が得られる。プログラム情報402は、上記仕様1)〜3)に基づいて作成したプログラムであり、2行目と4行目に誤りがある。本来、仕様に基づいてプログラムを作成すると2行目の記載は、「if (0<a&&a<4){ 」でなければならない。また、4行目の記載は、「 } else if (4<=a&&a<10){ 」でなければならない。
実装条件情報403には、プログラム情報402に対してシンボリック実行を行った結果である実装条件が記憶され、「No」「実装条件」「処理済み」などの情報が記憶されている。「No」は実装条件に関連付けられる識別子で、本例では、識別子「1」「2」「3」「4」「5」などが記憶されている。「実装条件」には対象のプログラムに対してシンボリック実行を行った結果である実装条件が、識別子「1」「2」「3」「4」「5」に関連付けて記憶されている。本例では、シンボリック実行をした結果として「not (0 <= a)」「0 <= a & a < 4」「0 <= a & not (a < 4) & not (4 < a)」「0 <= a & not (a < 4) & 4 < a & a < 10」「0 <= a & not (a < 4) & 4 < a & not (a < 10)」が記憶されている。「処理済み」には現在選択されている仕様条件と実装条件とを組み合わせた組合条件が生成されたか否かを示す情報が記憶される。本例では、「1」「0」が記載されており、現在選択されている仕様条件と実装条件とが組合条件に対してステップS3の処理が実施されていれば、識別子「1」が記憶される。現在選択されている仕様条件に対してまだ組み合わされていない実装条件には識別子「0」が記憶される。また、「処理済み」には1つの仕様条件を示すコードに対して全ての実装条件を示すコードを組み合わせて生成された組合条件を示すコード(第3のコード)に全てに対してステップS3の処理が実施されると、全ての「処理済み」に「0」が記憶される。
なお、ステップS1の処理とステップS2の処理の順番はどちらが先でもよい。
ステップS3では、仕様条件と実装条件とを&で結合して組合条件を生成して、充足値生成部203に送信する。このとき、記憶部3に組合条件を記憶してもよい。なお、&は上述した&と同じように論理積を示す記号である。図5は、組合条件情報のデータ構造の一実施例を示す図である。図5の組合条件情報501は、「No」「組合条件」などの情報を有している。「No」は実装条件に関連付けられる識別子で、本例では、識別子「1」〜「15」が記憶されている。「組合条件」には、仕様条件を示すコード(第1のコード)と実装条件を示すコード(第2のコード)とを&で結合したコード(第3のコード)が、識別子「No」に関連付けて記憶されている。本例では、組合条件情報501の識別子「1」〜「15」に関連付けられて、「a <= 0 & not (0 <= a)」〜「a >= 10 & 0 <= a & not (a < 4) & 4 < a & not (a < 10)」が記憶されている。
例えば、組合条件情報501の識別子「1」に関連付けられて「a <= 0 & not (0 <= a)」を生成する場合、ステップS1で仕様条件情報401の最初のNo「1」に対応する仕様条件「a <= 0」が選択される。ステップS2で実装条件情報403の最初のNo「1」に対応する実装条件「not (0 <= a)」が選択され、&で結合される。このとき、仕様条件情報401の最初のNo「1」に対応する「処理済み」を「0」から「1」にし、実装条件情報403の最初のNo「1」に対応する「処理済み」は「0」から「1」にする。
次に、組合条件情報501の識別子「2」に関連付けられて「a <= 0 & 0 <= a & a < 4」を生成する場合、ステップS1で仕様条件情報401の最初のNo「1」に対応する仕様条件「a <= 0」が選択されたまま、ステップS2で実装条件情報403の未処理のNo「2」に対応する実装条件「0 <= a & a < 4」が選択され、&で結合される。このとき、仕様条件情報401の最初のNo「1」に対応する「処理済み」は「1」のままで、実装条件情報403のNo「2」に対応する「処理済み」は「0」から「1」になる。
続いて、仕様条件「a <= 0」において、実装条件情報403のNo「3」〜「4」に関連する実装条件を用いた処理が終了すると、実装条件情報403のNo「5」に関連する実装条件「0 <= a & not (a < 4) & 4 < a & not (a < 10)」が選択される。すなわち、ステップS1で仕様条件情報401のNo「1」に対応する仕様条件「a <= 0」が選択されたまま、ステップS2で実装条件情報403の最後の未処理のNo「5」に対応する実装条件が選択され、&で結合される。このとき、仕様条件情報401のNo「1」に対応する「処理済み」は「1」から「2」になり、実装条件情報403のNo「5」に対応する「処理済み」は「0」から「1」になる。
続いて、仕様条件情報401のNo「1」の処理が終了(仕様条件情報401のNo「1」の「処理済み」が「2」)し、仕様条件情報401のNo「2」がステップS1で選択される(「処理済み」が「1」)。このとき、実装条件情報403のNo「1」〜「5」に対応する「処理済み」はすべて「0」にする。
続いて、仕様条件情報401のNo「2」〜「3」に対応する仕様条件各々について、実装条件情報403のNo「1」〜「5」に関連する実装条件各々と組み合わせて、組合条件情報501に示す組合条件を生成する。仕様条件情報401のNo「3」が選択され、実装条件情報403のNo「5」が選択されているとき(全て組み合わされたとき)、仕様条件情報401の「処理済み」はすべて「2」になり、実装条件情報403の「処理済み」はすべて「2」にる。
なお、本例では組合条件を記憶部3に記憶しているが、組合条件は組合条件情報に記憶しなくてもよい。
ステップS4では、充足値生成部203が組合条件を生成部202から取得し、組合条件に対してSMTソルバを用いて条件を同時に充足する解を求め、求めた解を生成部202に送信する。
ステップS5では、生成部202が充足値生成部203から求めた解を受信し、解が存在するか否かを判定し、解が存在する場合にはステップS6(Yes)に移行し、解が存在しない場合にはステップS7(No)に移行する。
例えば、ステップS4で仕様条件情報401のNo「2」の仕様条件を示すコードと、実装条件情報403のNo「3」の仕様条件を示すコードと、を&で結合した組合条件を示すコードを用いて、変数aに対して充足する解を求める。その場合、SMTソルバの実行結果としてa=4を得られる。すなわち、変数aが仕様条件情報401のNo「2」の仕様条件を満たすにも関わらず、実装条件情報403のNo「3」の実装条件では、エラー表示に到達するパスが存在することになる。つまり、仕様と異なる記載がプログラムにあるような場合でも、誤りを検出することが可能な組合条件(テストケース)を漏れなく抽出することができる。
また、ステップS4で仕様条件情報401のNo「3」の仕様条件を示すコードと、実装条件情報403のNo「1」の仕様条件を示すコードと、を&で結合した組合条件を示すコードを用いて、変数aに対して充足する解を求める。しかし、SMTソルバの実行結果として解を得ることができない。すなわち、仕様条件情報401のNo「3」の仕様条件を満たすにも関わらず、実装条件情報403のNo「1」の仕様条件を満たすようなパスはありえないことがわかる。
続いて、ステップS5で判定をした組合条件について、解がある場合にはステップS6で、生成部202は解をテストデータとして記憶部3に記憶する。図6は、組合条件に対してSMTソルバにより求められる解の一実施例を示す図である。組合条件情報501において、解が存在するのはNo「1」「2」、「7」〜「9」、「15」に対応する組合条件である。そして、No「1」の解は−1、「2」の解は0、「7」の解は1、「8」の解は4、「9」の解は5、「15」の解は10であるので、テストデータをa=−1、0、1、4、5、10とする。続いて、生成部202は記憶部3にテストデータをa=−1、0、1、4、5、10を記憶する。
ステップS7では、生成部202が現在選択されている仕様条件に対して未処理の実装条件が存在するか否かを判定し、未処理の実装条件が存在する場合にはステップS2(Yes)に移行し、未処理の実装条件がない場合にはステップS8(No)に移行する。本例では、実装条件情報403の「処理済み」を参照して未処理の実装条件が存在するか否かを判定する。「処理済み」のいずれかに未処理を示す「0」が記憶されているときにはステップS2(Yes)に移行する。「処理済み」がすべて「1」である場合には、ステップS8(No)に移行する。
ステップS8では、生成部202が未処理の仕様条件が存在するか否かを判定し、未処理の仕様条件が存在する場合にはステップS1(Yes)に移行し、未処理の仕様条件がない場合には処理を終了(No)する。本例では、仕様条件情報401の「処理済み」を参報して未処理の実装条件が存在するか否かを判定する。「処理済み」のいずれかに未処理を示す「0」または処理中であることを示す「1」が記憶されているときにはステップS1(Yes)に移行する。すべての「処理済み」が、処理が終了したことを示す「2」である場合には、ステップS8(No)に移行する。
図7は、仕様条件と実装条件とテストデータの関係を示す図である。仕様条件1(仕様条件情報401のNo「1」に対応)と実装条件1(実装条件情報403のNo「1」に対応)とは同時に満たされる範囲があり、その範囲のテストデータとして−1が求められている。次に、仕様条件1と実装条件2(実装条件情報403のNo「2」に対応)とは同時に満たされる範囲があり、その範囲のテストデータとして0が求められている。次に、仕様条件2(仕様条件情報401のNo「2」に対応)と実装条件2とは同時に満たされる範囲があり、その範囲のテストデータとして1が求められている。次に、仕様条件2と実装条件3(実装条件情報403のNo「3」に対応)とは同時に満たされる範囲があり、その範囲のテストデータとして4が求められている。次に、仕様条件2と実装条件4(実装条件情報403のNo「4」に対応)とは同時に満たされる範囲があり、その範囲のテストデータとして5が求められている。次に、仕様条件3(仕様条件情報401のNo「3」に対応)と実装条件5(実装条件情報403のNo「5」に対応)とは同時に満たされる範囲があり、その範囲のテストデータとして10が求められている。
本実施の形態によれば、仕様と異なる誤りを有するプログラムを用いて該プログラムのテストを行う場合であっても、必要十分なテストデータを生成できる。
なお、本実施の態様では、変数が1つの場合について説明したが、変数が複数ある場合でも必要十分なテストデータを生成できる。変数が複数の場合でも、仕様条件を示すコード各々と実装条件を示すコード各々とを組み合わせて組合条件を示すコードを作成する。その後、該組合条件を示すコード各々に対して、SMTソルバを用いて複数の変数を充足させる解を求め、求めた解を用いて必要十分なテストデータを生成できる。
また、プログラムに誤りがあっても、仕様と異なる分岐条件(if分など)がある部分を検出できるテストケースが生成でき、その結果プログラムの分岐条件の確認に必要十分なテストデータが生成できる。
また、仕様条件と実装条件とが同時に満たされるテストケースを求めているため、冗長なテストデータが生成されない。
なお、実施の形態で説明したテスト対象のプログラムは、例えば、業務アプリケーションなどに用いられるプログラムなどが考えられる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
1 テストデータ生成装置
2 制御部
3 記憶部
4 記録媒体読取装置
5 入出力インタフェース
6 通信インタフェース
7 バス
8 記録媒体
9 入出力部
201 抽出部
202 生成部
203 充足値生成部
401 仕様条件情報
402 プログラム情報
403 実装条件情報
501 組合条件情報

Claims (3)

  1. プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して前記第1のコードを取得し、
    前記プログラムを入力とするシンボリック実行により抽出された、前記プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して前記第2のコードを取得し、
    前記第1のコード各々と前記第2のコード各々と、を組み合わせて、前記仕様条件と前記実装条件との組み合わせ条件を表す複数の第3のコードを生成し、
    前記各第3のコードに基づき当該第3のコードに含まれる前記変数の充足解を求め、
    前記充足解を、前記プログラムのテストデータを記憶する記憶部に記憶する、
    処理をコンピュータに実行させるテストデータ生成プログラム。
  2. コンピュータによって実行されるテストデータ生成方法であって、
    プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して前記第1のコードを取得し、
    前記プログラムを入力とするシンボリック実行により抽出された、前記プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して前記第2のコードを取得し、
    前記第1のコード各々と前記第2のコード各々と、を組み合わせて、前記仕様条件と前記実装条件との組み合わせ条件を表す複数の第3のコードを生成し、
    前記各第3のコードに基づき当該第3のコードに含まれる前記変数の充足解を求め、
    前記充足解を、前記プログラムのテストデータを記憶する記憶部に記憶する、
    ことを特徴とするテストデータ生成方法。
  3. プログラムの仕様条件を変数を用いて表した複数の第1のコードが記憶された記憶部を参照して前記第1のコードを取得し、前記プログラムを入力とするシンボリック実行により抽出された、前記プログラムが実行し得るパス各々に対応する実装条件を変数を用いて表した複数の第2のコードが記憶された記憶部を参照して前記第2のコードを取得し、前記第1のコード各々と前記第2のコード各々と、を組み合わせて、前記仕様条件と前記実装条件との組み合わせ条件を表す複数の第3のコードを生成し、前記第3のコードに含まれる前記変数の充足解を充足値生成部から取得し、前記充足解を、前記プログラムのテストデータを記憶する記憶部に記憶する生成部と、
    前記各第3のコードに基づき当該第3のコードに含まれる前記変数の充足解を求める前記充足値生成部と、
    を備えることを特徴とするプログラム検査装置。
JP2011134555A 2011-06-16 2011-06-16 テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 Active JP5672165B2 (ja)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2013003854A true JP2013003854A (ja) 2013-01-07
JP5672165B2 JP5672165B2 (ja) 2015-02-18

Family

ID=47672356

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JP5672165B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013148968A (ja) * 2012-01-17 2013-08-01 Fujitsu Ltd テストデータ生成装置、テストデータ生成プログラムおよびテストデータ生成方法
WO2014125836A1 (ja) * 2013-02-15 2014-08-21 独立行政法人産業技術総合研究所 テストデータ生成装置
JP2014191652A (ja) * 2013-03-27 2014-10-06 Fujitsu Ltd テストケース生成方法、テストケース生成装置、およびテストケース生成プログラム
JP2021501953A (ja) * 2017-11-02 2021-01-21 シリコン モビリティ エスアエス エンジンデバッグ、テスト、較正、及び調節を制御するためのソフトウェア環境

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7016A (en) * 1850-01-15 Mill for grinding
JP2009087354A (ja) * 2007-10-01 2009-04-23 Fujitsu Ltd ウェブアプリケーションの自動テスト生成システム及び方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7016A (en) * 1850-01-15 Mill for grinding
JP2009087354A (ja) * 2007-10-01 2009-04-23 Fujitsu Ltd ウェブアプリケーションの自動テスト生成システム及び方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013148968A (ja) * 2012-01-17 2013-08-01 Fujitsu Ltd テストデータ生成装置、テストデータ生成プログラムおよびテストデータ生成方法
WO2014125836A1 (ja) * 2013-02-15 2014-08-21 独立行政法人産業技術総合研究所 テストデータ生成装置
JP2014157473A (ja) * 2013-02-15 2014-08-28 National Institute Of Advanced Industrial & Technology テストデータ生成装置
JP2014191652A (ja) * 2013-03-27 2014-10-06 Fujitsu Ltd テストケース生成方法、テストケース生成装置、およびテストケース生成プログラム
JP2021501953A (ja) * 2017-11-02 2021-01-21 シリコン モビリティ エスアエス エンジンデバッグ、テスト、較正、及び調節を制御するためのソフトウェア環境
JP7262818B2 (ja) 2017-11-02 2023-04-24 シリコン モビリティ エスアエス エンジンデバッグ、テスト、較正、及び調節を制御するためのソフトウェア環境

Also Published As

Publication number Publication date
JP5672165B2 (ja) 2015-02-18

Similar Documents

Publication Publication Date Title
US9454466B2 (en) Explaining partially illegal combinations in combinatorial models
JP2017033562A (ja) 安全重視ソフトウェア開発のためのモデルベース技術および過程のためのシステムおよび方法
CN109299530B (zh) 一种仿真测试案例生成方法、系统、存储介质和终端
JP5672165B2 (ja) テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置
JP2018147280A (ja) データ分析装置及びデータ分析方法
US8312400B2 (en) Verification supporting system
JP5799823B2 (ja) テストデータ生成装置、テストデータ生成プログラムおよびテストデータ生成方法
US8850407B2 (en) Test script generation
US10579761B1 (en) Method and system for reconstructing a graph presentation of a previously executed verification test
US10546080B1 (en) Method and system for identifying potential causes of failure in simulation runs using machine learning
JP5176869B2 (ja) テストケース生成プログラムとテストケース生成装置およびテストケース生成方法
JP2013077124A (ja) ソフトウェアテストケース生成装置
JP5321286B2 (ja) プログラムモデル検査方法、プログラムモデル検査プログラム
JP6447111B2 (ja) 共通化情報提供プログラム、共通化情報提供方法、および共通化情報提供装置
GB2397905A (en) Method for automatically generating and ordering test scripts
JP5568779B2 (ja) 論理検証方法及び論理検証システム
KR101160482B1 (ko) 테스트 스윗 생성 장치 및 방법
JP5304470B2 (ja) モデル検査プログラム、モデル検査方法、モデル検査装置
CN111241766B (zh) 测试方法与测试系统
JP5228794B2 (ja) モデル検査実施のための環境生成支援装置、環境生成支援方法、環境生成支援プログラム
JP7363164B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
JP4747036B2 (ja) Lsi解析プログラム、該プログラムを記録した記録媒体、lsi解析装置、およびlsi解析方法
WO2021157073A1 (ja) 情報処理装置、情報処理方法および情報処理プログラム
US20210019446A1 (en) Device and method for analyzing performances of a web application
JP5471971B2 (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: 20141125

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141208

R150 Certificate of patent or registration of utility model

Ref document number: 5672165

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150