JP6974707B2 - テストプログラム、テスト装置及びテスト方法 - Google Patents

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

Info

Publication number
JP6974707B2
JP6974707B2 JP2017177247A JP2017177247A JP6974707B2 JP 6974707 B2 JP6974707 B2 JP 6974707B2 JP 2017177247 A JP2017177247 A JP 2017177247A JP 2017177247 A JP2017177247 A JP 2017177247A JP 6974707 B2 JP6974707 B2 JP 6974707B2
Authority
JP
Japan
Prior art keywords
program
conditional
executed
tested
specified
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
JP2017177247A
Other languages
English (en)
Other versions
JP2019053518A (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 JP2017177247A priority Critical patent/JP6974707B2/ja
Publication of JP2019053518A publication Critical patent/JP2019053518A/ja
Application granted granted Critical
Publication of JP6974707B2 publication Critical patent/JP6974707B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、テストプログラム、テスト装置及びテスト方法に関する。
例えば、利用者にサービスを提供する事業者(以下、単に事業者とも呼ぶ)は、サービスの提供を行うための業務システムを構築して稼働させる。
そして、事業者は、例えば、業務システムを構成する新たなプログラムの生成や既存のプログラムの修正を行った場合、これらのプログラム(以下、テスト対象プログラムとも呼ぶ)の動作についての各種テストを行う。具体的に、事業者は、この場合、予め生成したテストデータを入力とすることによって、テスト対象プログラム自体の単体テストや、テスト対象プログラムと外部プログラム(例えば、既存のプログラム)との結合テスト等を行う(例えば、特許文献1乃至3参照)。
特開2008−140263号公報 国際公開第2013/161195号 特開2016−018390号公報
上記のようなテストデータの生成を行う場合、事業者は、例えば、シンボリック実行技術(以下、単にシンボリック実行とも呼ぶ)を活用する。このシンボリック実行は、テスト対象プログラム中の変数値を具体化せず、シンボル変数(記号)のままテスト対象プログラムを実行することにより、条件文などを通過したときにシンボル変数が満たすべき論理的な制約をパス条件として抽出し、抽出したパス条件に対応するテストデータを生成する技術である。
上記のようなシンボリック実行では、テスト対象プログラムを呼び出してテスト対象プログラム内の関数に引数を与えるドライバと、テスト対象プログラムから呼び出される外部プログラムのダミー実装であって、呼び出された際に値を返却するスタブとが用いられる。そして、シンボリック実行では、ドライバから与えられる引数及びスタブから返却される値をシンボル変数とすることにより、テスト対象プログラムのパス条件を網羅するテストデータを生成する。
具体的に、事業者は、例えば、テスト対象プログラムの挙動を確認する単体テストにおいて用いられるテストデータの生成を行う場合、テスト対象プログラムが引数を与える外部プログラムの全てをスタブに置き換えることによるシンボリック実行を行う。
ここで、上記のようなスタブの挙動は、テスト対象プログラムに対して値を返却する外部プログラムの実際の挙動と大きく異なる場合がある。そのため、事業者は、例えば、テスト対象プログラムを含む業務システム全体としての挙動を確認する結合テストを行う場合において、テストデータの生成をシンボリック実行によって行う場合、テスト対象プログラムに対して値を返却する外部プログラムと可能な限り挙動が近いスタブを用いる必要がある。
しかしながら、上記のような外部プログラムと挙動が近いスタブの生成には、多くの工数を要する場合がある。そのため、事業者は、結合テストにおいて用いるテストデータの生成をシンボリック実行によって行う場合、生成するスタブの数を可能な限り抑制することが好ましい。
そこで、一つの側面では、本発明は、テストデータの生成に用いられるスタブの数を抑制するテストプログラム、テスト装置及びテスト方法を提供することを目的とする。
実施の形態の一態様では、テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、処理を実行させる。
一つの側面によれば、テストデータの生成に用いられるスタブの数を抑制する。
図1は、情報処理システム10の構成を示す図である。 図2は、テスト対象プログラム131の具体例を説明する図である。 図3は、テスト対象プログラム131の制御構造の具体例を説明する図である。 図4は、テスト対象プログラム131のテストに用いられるテストデータ132の具体例を説明する図である。 図5は、情報処理装置1のハードウエア構成を説明する図である。 図6は、情報処理装置1の機能ブロック図である。 図7は、第1の実施の形態におけるテスト処理の概略を説明するフローチャート図である。 図8は、第1の実施の形態におけるテスト処理の概略を説明する図である。 図9は、第1の実施の形態におけるテスト処理の概略を説明する図である。 図10は、第1の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。 図11は、第1の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。 図12は、第1の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。 図13は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図14は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図15は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図16は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図17は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図18は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図19は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図20は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図21は、第1の実施の形態におけるテスト処理の詳細を説明する図である。 図22は、第1の実施の形態におけるテスト処理の詳細を説明する図である。
[情報処理システムの構成]
初めに、情報処理システム10の構成について説明を行う。図1は、情報処理システム10の構成を示す図である。図1に示す情報処理システム10は、例えば、情報処理装置1(以下、テスト装置1とも呼ぶ)と、記憶部130と、操作端末3a、3b及び3c(以下、これらを総称して操作端末3とも呼ぶ)とを有する。
記憶部130には、例えば、利用者にサービスを提供するための業務システムを構成する各種プログラムが記憶されている。具体的に、記憶部130には、例えば、図1に示すように、テスト対象プログラム131が記憶されている。また、記憶部130には、テスト対象プログラム131から呼び出される外部プログラム(図示しない)や、テスト対象プログラム131を呼び出す外部プログラム(図示しない)が記憶されている。さらに、記憶部130には、テスト対象プログラム131に対するシンボリック実行が行われる際に用いられるドライバ(図示しない)やスタブ(図示しない)が記憶されている。
そして、情報処理装置1は、例えば、テスト対象プログラム131に対して、記憶部130に記憶されたドライバやスタブを用いたシンボリック実行を行うことにより、テスト対象プログラム131のパス条件を抽出する。さらに、情報処理装置1は、抽出したパス条件を網羅するテストデータ132を生成する。その後、情報処理装置1は、図1に示すように、生成したテストデータ132を情報格納領域130に記憶する。以下、テスト対象プログラム131、テスト対象プログラム131のパス条件及びテストデータ132の具体例について説明を行う。
[テスト対象プログラム]
図2は、テスト対象プログラム131の具体例を説明する図である。
図2に示すテスト対象プログラム131では、引数aが0以外の値であって5よりも大きい値である場合において、さらに、引数aが0である場合、「console.log(“block1”)」が実行される。一方、図2に示すテスト対象プログラム131では、引数aが0以外の値であって5よりも大きい値である場合において、さらに、引数aが0以外の値である場合、「console.log(“block2”)」が実行される。
また、図2に示すテスト対象プログラム131では、引数aが0以外の値であって5以下の値である場合、「b=b+1」及び「console.log(“block3”)」が実行される。さらに、図2に示すテスト対象プログラム131では、引数aが0である場合、「console.log(“block4”)」が実行される。
その後、図2に示すテスト対象プログラム131では、引数bが0以下の値である場合、「console.log(“blockA”)」が実行され、引数bが0よりも大きい値である場合、「a=b/a」及び「console.log(“blockB”)」が実行される。
[テスト対象プログラムにおけるパス条件の抽出]
次に、テスト対象プログラム131におけるパス条件の抽出について説明を行う。図3は、テスト対象プログラム131の制御構造の具体例を説明する図である。
情報処理装置1は、図2で説明したテスト対象プログラム131に渡される引数a及び引数bをシンボル変数としたシンボリック実行を行うことにより、テスト対象プログラム131におけるパス条件の抽出を行う。
具体的に、情報処理装置1は、図3に示す制御構造を参照し、aが0であってbが0よりも大きい値である場合に通過するパス条件(以下、パス条件(1)とも呼ぶ)と、aが0であってbが0以下の値である場合に通過するパス条件(以下、パス条件(2)とも呼ぶ)とを抽出する。また、情報処理装置1は、図3に示す制御構造を参照し、aが0以外の値であって5よりも大きい値であり、かつ、bが0以上の値である場合に通過するパス条件(以下、パス条件(3)とも呼ぶ)と、aが0以外の値であって5よりも大きい値であり、かつ、bが0より小さい値である場合に通過するパス条件(以下、パス条件(4)とも呼ぶ)とを抽出する。さらに、情報処理装置1は、図3に示す制御構造を参照し、aが0以外の値であって5以下の値であり、かつ、b+1が0以下の値である場合に通過するパス条件(以下、パス条件(5)とも呼ぶ)と、aが0以外の値であって5以下の値であり、かつ、b+1が0より大きい値である場合に通過するパス条件(以下、パス条件(6)とも呼ぶ)とを抽出する。
なお、図3に示す制御構造において、「block1」を通過するパス条件は、aが0以外の値であって0でもある場合に通過するパス条件である。そのため、情報処理装置1は、このパス条件が実行不可能なパス条件であると判定して抽出を行わない。
[テスト対象プログラムのテストデータ]
図4は、テスト対象プログラム131のテストに用いられるテストデータ132の具体例を説明する図である。
図4に示す情報は、各パス条件を識別する「項番」と、各パス条件の内容が設定される「パス条件」と、各パス条件を満たすように生成された「テストデータ」とを項目として有する。また、図4に示す情報は、テスト対象プログラム131に対するシンボリック実行を行うことによって判明したエラーの内容が設定される「発生エラー」を項目として有する。
具体的に、情報処理装置1は、図4に示すように、「項番」が「1」から「6」である情報における「パス条件」のそれぞれに、パス条件(1)からパス条件(6)の内容に対応する情報を設定する。
また、情報処理装置1は、図4に示すように、各パス条件を満たすテストデータ132(各パス条件を通過するテストデータ132)を制約ソルバに生成させ、「項番」が「1」から「6」である情報における「テストデータ」のそれぞれに設定する。
さらに具体的に、情報処理装置1は、例えば、図4に示すように、「項番」が「1」である情報の「パス条件」に、aが0であってbが0よりも大きい値であることを示す「(a==0)∧(b>0)」を設定する。そして、情報処理装置1は、例えば、「項番」が「2」である情報の「パス条件」に、aが0であってbが0以下の値であることを示す「(a==0)∧(b<=0)」を設定する。
また、情報処理装置1は、例えば、「項番」が「1」である情報の「テストデータ」に、「a=0」及び「b=1」を設定し、「項番」が「2」である情報の「テストデータ」に、「a=0」及び「b=0」を設定する。
なお、図2で説明したパス条件(1)は、引数aが0であるときに通過するパス条件であり、引数bの値を0で除算する演算が行われるパス条件である。そのため、情報処理装置1は、例えば、「項番」が「1」である情報(パス条件(1)に対応する情報)の「発生エラー」に、「0除算」を設定する。図4に含まれる他の情報についての説明は省略する。
これにより、情報処理装置1は、ドライバやスタブを用いたシンボリック実行を行うことで、テスト対象プログラム131のパス条件を抽出することが可能になる。そして、情報処理装置1は、抽出したパス条件を網羅するテストデータ132(例えば、テスト対象プログラム131の挙動を確認する単体テストにおいて用いられるテストデータ132)を生成することが可能になる。
ここで、上記のようなスタブの挙動は、テスト対象プログラム131に対して値を返却する外部プログラムの実際の挙動と大きく異なる場合がある。そのため、例えば、テスト対象プログラム131を含む複数のプログラムを組み合わせた業務システム全体としての挙動を確認する結合テストを行う場合、事業者は、テスト対象プログラム131に対して値を返却する外部プログラムと可能な限り挙動が近いスタブを生成する必要がある。
しかしながら、上記のような外部プログラムと挙動が近いスタブの生成には、多くの工数を要する場合がある。そのため、事業者は、例えば、シンボリック実行によって結合テストにおいて用いるテストデータ132の生成を行う場合、生成するスタブの数を可能な限り抑制することが好ましい。
そこで、本実施の形態における情報処理装置1は、テスト対象プログラム131に含まれる変数に対する具体値の入力を伴わないテスト対象プログラム131の実行(シンボリック実行)を行う。そして、情報処理装置1は、テスト対象プログラム131に含まれる条件節のうち、テスト対象プログラム131の実行時において実行されなかった処理を含む条件節を特定する。
その後、情報処理装置1は、特定した条件節の条件式に含まれる関数呼び出しに対応する関数をスタブ(以下、特定のスタブとも呼ぶ)に置き換え、置き換えたテスト対象プログラム131を再実行する。
すなわち、情報処理装置1は、導入する必要があるスタブを1つずつ特定する。そして、情報処理装置1は、特定したスタブを導入するごとに、さらなるスタブの導入が必要であるか否かを判定する。その結果、情報処理装置1は、さらなるスタブの導入が必要なくなったと判定した場合、スタブの導入を終了する。
これにより、情報処理装置1は、例えば、テスト対象プログラム131を含む複数のプログラムの結合テストを行う場合において、テストデータの生成をシンボリック実行によって行う場合、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置1は、テスト対象プログラム131に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。また、情報処理装置1は、導入したスタブの挙動についての妥当性判断に要する工数を抑制することが可能になる。
[情報処理システムのハードウエア構成]
次に、情報処理システム10のハードウエア構成について説明する。図5は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、図5に示すように、プロセッサであるCPU(Central Processing Unit)101と、メモリ102と、外部インターフェース(I/Oユニット)103と、記憶媒体104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)等である。そして、記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、テスト対象プログラム131に対するスタブの導入等を行う処理(以下、テスト処理とも呼ぶ)を行うためのプログラム110(以下、テストプログラム110とも呼ぶ)を記憶する。また、記憶媒体104は、テスト処理を行う際に用いられる情報を記憶する記憶部130(以下、情報格納領域130とも呼ぶ)を有する。
CPU101は、記憶媒体104からメモリ102にロードされたプログラム110と協働することによってテスト処理を行う。
また、外部インターフェース103は、操作端末3との通信を行う。
[情報処理システムの機能]
次に、情報処理システム10の機能について説明する。図6は、情報処理装置1の機能ブロック図である。
情報処理装置1のCPU101は、プログラム110と協働することにより、例えば、プログラム実行部111と、条件節特定部112と、関数特定部113と、スタブ生成部114と、スタブ置換部115と、実行判定部116として動作する。
また、情報格納領域130には、例えば、テスト対象プログラム131と、テストデータ132とが記憶されている。
プログラム実行部111は、情報格納領域130に記憶されたテスト対象プログラム131を、変数に具体値を入力することなく実行する。具体的に、プログラム実行部111は、テスト対象プログラム131に対してシンボル変数によるシンボリック実行を行うことにより、テスト対象プログラム131のパス条件を抽出する。そして、プログラム実行部111は、抽出したパス条件に対応するテストデータ132をそれぞれ生成する。その後、プログラム実行部111は、生成したテストデータ132を入力としてテスト対象プログラム131を実行する。
条件節特定部112は、テスト対象プログラム131に含まれる条件節のうち、プログラム実行部111によるテスト対象プログラム131の実行時において実行されなかった処理を含む条件節を特定する。
関数特定部113は、条件節特定部112が特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定する。
スタブ生成部114は、関数特定部113が特定した関数と置き換える特定のスタブを生成する。特定のスタブは、例えば、テスト対象プログラム131に対して、関数特定部113が特定した関数と同じ型のシンボル変数を与えるスタブである。
スタブ置換部115は、関数特定部113が特定した関数を特定のスタブに置き換える。
その後、プログラム実行部111は、スタブ置換部115が特定のスタブに置き換えた後のテスト対象プログラム131に対してシンボル変数によるシンボリック実行を行うことにより、テスト対象プログラム131のパス条件を再抽出する。そして、プログラム実行部111は、抽出したパス条件に対応するテストデータ132をそれぞれ再生成する。さらに、プログラム実行部111は、生成したテストデータ132を入力としてテスト対象プログラム131を再実行する。
また、実行判定部116は、プログラム実行部111によるテスト対象プログラム131の再実行時において、テスト対象プログラム131の条件節に含まれる全ての処理が実行されたか否かを判定する。
[第1の実施の形態の概略のフローチャート図]
次に、第1の実施の形態の概略のフローチャート図について説明を行う。図7は、第1の実施の形態におけるテスト処理の概略を説明するフローチャート図である。図8及び図9は、第1の実施の形態におけるテスト処理の概略を説明する図である。図8及び図9を参照しながら、図7に示すテスト処理の概略について説明を行う。
情報処理装置1は、図8に示すように、テスト対象プログラム131の変数に具体値を入力することなくテスト対象プログラム131を実行する(S1)。具体的に、情報処理装置1は、例えば、事業者がテスト処理を開始する旨の情報を情報処理装置1に入力したことに応じて、S1の処理を開始する。
そして、情報処理装置1は、図8に示すように、テスト対象プログラム131に含まれる条件節のうち、S1の処理におけるテスト対象プログラム131の実行時において実行されなかった処理を含む条件節を特定する(S2)。
続いて、情報処理装置1は、図9に示すように、S2の処理で特定した条件節の条件式に含まれる関数呼び出しに対応する関数を、特定のスタブに置き換える(S3)。
その後、情報処理装置1は、図9に示すように、S3の処理で関数を特定のスタブに置き換えたテスト対象プログラム131を再実行する(S4)。
すなわち、情報処理装置1は、例えば、導入する必要があるスタブを1つずつ特定する。そして、情報処理装置1は、例えば、特定したスタブを導入するごとに、スタブが導入された後のテスト対象プログラム131を再度実行することによって、テスト対象プログラム131に対してスタブの導入をさらに行う必要であるか否かを判定する。その結果、情報処理装置1は、さらなるスタブの導入が必要ないと判定した場合、スタブの導入を終了する。
これにより、情報処理装置1は、例えば、テスト対象プログラム131と外部プログラムとの結合テストを行う場合において、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置1は、テスト対象プログラム131に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図10から図12は、第1の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。また、図13から図22は、第1の実施の形態におけるテスト処理の詳細を説明する図である。図13から図22を参照しながら、図10から図12に示すテスト処理の詳細を説明する。
情報処理装置1のプログラム実行部111は、図10に示すように、テスト対象プログラム131に対して、シンボル変数を用いたシンボリック実行を行うことにより、テスト対象プログラム131が実行される際に通過する1以上のパス条件を抽出する(S11)。
続いて、プログラム実行部111は、S11の処理で特定した1以上のパス条件のそれぞれを満たす1以上のテストデータ132を生成する(S12)。具体的に、プログラム実行部111は、制約ソルバを用いることによって1以上のテストデータ132の生成を行う。
そして、プログラム実行部111は、S12の処理で生成した1以上のテストデータ132を入力としてテスト対象プログラム131を実行する(S13)。
その後、情報処理装置1の条件節特定部112は、テスト対象プログラム131のソースコードに記述された行のうち、S13の処理におけるテスト対象プログラム131の実行によって実行されなかった行を含む条件節を特定する(S14)。以下、S12からS14の処理の具体例について説明を行う。
[S12からS14の処理の具体例]
図13から図16は、テスト処理の具体例を説明する図である。具体的に、図13及び図15は、テスト対象プログラム131の具体例を説明する図である。また、図14及び図16は、パス条件とテストデータ132とが設定された情報の具体例を説明する図である。なお、図14及び図16に示す情報は、図4で説明した情報と同様に、「項番」、「パス条件」及び「テストデータ」を項目として有している。
図13に示すテスト対象プログラム131において、「isAdult(age)」は、外部プログラムに含まれる関数であり、「age」の値が20以上である場合に「true」を返却し、「age」の値が20未満である場合に「false」を返却する関数である。また、図13に示すテスト対象プログラム131において、「isEmail(email)」は、外部プログラムに含まれる関数であり、例えば、「email」に「@」が含まれる場合に「true」を返却し、「email」に「@」が含まれない場合に「false」を返却する関数である。
そして、図13に示すテスト対象プログラム131では、「isAdult(age)」の戻り値が「true」であって、「isEmail(email)」の戻り値が「false」である場合に、「foo()」が実行される。
そのため、プログラム実行部111は、図14に示すように、例えば、「項番」が「1」である情報の「パス条件」に、「isAdult(age)」の戻り値が「true」であって、「isEmail(email)」の戻り値が「true」である場合に通過するパス条件を設定する。また、プログラム実行部111は、図14に示すように、例えば、「項番」が「2」である情報の「パス条件」に、「isAdult(age)」の戻り値が「true」であって、「isEmail(email)」の戻り値が「false」である場合に通過するパス条件を設定する。さらに、プログラム実行部111は、図14に示すように、例えば、「項番」が「3」である情報の「パス条件」に、「isAdult(age)」の戻り値が「false」である場合に通過するパス条件を設定する。
ここで、パス条件に非線形な演算(例えば、乗算)や正規表現が含まれている場合、テストデータ132の生成を行う制約ソルバは、パス条件に対応するテストデータ132の生成を行うことができない場合がある。また、制約ソルバは、テストデータ132の生成を行うことができる時間や式のサイズ等によって、パス条件に対応するテストデータ132の生成を行うことができない場合がある。
具体的に、図14に示す例において、「項番」が「1」から「3」である情報の「パス条件」には、それぞれ正規表現が含まれている。そのため、制約ソルバは、図14に示す例において、「項番」が「1」である情報に対応するテストデータ132(「email」に対応するテストデータ132)の生成に失敗している。
したがって、条件節特定部112は、この場合、図13で説明したテスト対象プログラム131のうち、「項番」が「1」である情報に対応するテストデータ132が生成されないことによって実行されない行である「foo()」を含む条件節を特定する。
図11に戻り、S14の処理において条件節の特定が行われた場合(S21のYES)、条件節特定部112は、S14の処理で特定した条件節のうちの1つを特定する(S22)。すなわち、条件節特定部112は、S14の処理において複数の条件節が特定された場合、特定された複数の条件節のうちのいずれかを特定する。
一方、S14の処理において条件節の特定が行われなかった場合(S21のNO)、条件節特定部112は、テスト処理を終了する。
そして、S22の処理の後、情報処理装置1の関数特定部113は、S22で特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定する(S23)。
具体的に、関数特定部113は、図13及び図14で説明した例において、S14の処理で特定した条件節に含まれる条件式として「if(isEmail(email))」を特定する。そして、関数特定部113は、この場合、特定した条件式に含まれる関数として「isEmail(email)」を特定する。
続いて、関数特定部113は、S23の処理で特定した関数のうちの1つを特定する(S24)。すなわち、条件節特定部112は、S23の処理において複数の関数が特定された場合、特定された複数の関数のうちのいずれかを特定する。
そして、情報処理装置1のスタブ生成部114は、S24の処理で特定した関数と置き換えるスタブを生成する(S25)。その後、情報処理装置1のスタブ置換部115は、テスト対象プログラム131に含まれる関数のうち、S24の処理で特定した関数を、S25の処理で生成したスタブに置き換える(S26)。以下、S25及びS26の処理の具体例について説明を行う。
[S25及びS26の処理の具体例]
図15は、S25及びS26の処理の具体例を説明する図である。
スタブ生成部114は、S25の処理において、S24の処理で特定した関数である「isEmail」を、論理型のシンボル変数(以下、論理型のisEmail()返却値とも呼ぶ)を返却する関数に変更するスタブを生成する。そして、スタブ置換部115は、S26の処理において、図15に示すように、S22の処理で特定した条件節の直前に、スタブ生成部114が生成したスタブを挿入する。すなわち、スタブ置換部115は、正規表現を含まないパス条件が抽出されるように、「isEmail」の内容を置き換える。
これにより、情報処理装置1は、制約ソルバがパス条件に対応するテストデータ132を生成することができないという状況の発生を防止することが可能になる。そのため、情報処理装置1は、テスト対象プログラム131の条件節に含まれる全ての処理(全ての行)が実行されるテストデータ132を生成することが可能になる。
図12に戻り、プログラム実行部111は、テスト対象プログラム131に対して、シンボル変数を用いたシンボリック実行を再度行うことにより、テスト対象プログラム131が実行される際に通過する1以上のパス条件を再抽出する(S31)。そして、プログラム実行部111は、S31の処理で再抽出した1以上のパス条件のそれぞれを満たす1以上のテストデータを再生成する(S32)。
具体的に、プログラム実行部111は、例えば、図16に示すように、S26の処理においてスタブの置き換えが行われた後のテスト対象プログラム131に対してシンボリック実行を行うことにより、スタブの置き換えが行われた後のテスト対象プログラム131のパス条件を特定する。そして、プログラム実行部111は、特定したパス条件に対応するテストデータ132をそれぞれ生成する。
続いて、プログラム実行部111は、S32の処理で再生成した1以上のテストデータ132を入力としてテスト対象プログラム131を再実行する(S33)。
その後、情報処理装置1の実行判定部116は、S32の処理で再生成されたテストデータ132が、S22の処理で特定した条件節に含まれる全ての処理を実行するテストデータ132であるか否かを判定する(S34)。具体的に、実行判定部116は、テスト対象プログラム131のソースコードに記述された行のうち、S23の処理におけるテスト対象プログラム131の再実行によって実行されなかった行を含む条件節が存在するか否かを判定する。
すなわち、S22の処理で特定した条件節に含まれる関数の一部のみをスタブに置き換えることによって、S22の処理で特定した条件節に含まれる全ての処理を実行するテストデータ132が生成されるようになる可能性がある。そのため、実行判定部116は、S34の処理において、S23の処理で特定した関数をスタブに置き換えるごとに、S22の処理で特定した条件節に含まれる全ての処理が網羅されるようになったか否かの判定を行う。
その結果、S22の処理で特定した条件節に含まれる全ての処理を実行するテストデータ132が生成されていないと判定した場合(S35のNO)、条件節特定部112は、S24以降の処理を行う。
一方、S22の処理で特定した条件節に含まれる全ての処理を実行するテストデータ132が生成されたと判定した場合(S35のYES)、条件節特定部112は、S14の処理で特定された全ての条件節が、S22の処理において特定済であるか否かの判定を行う(S36)。
その結果、S14の処理で特定された全ての条件節が特定済でないと判定した場合(S36のNO)、条件節特定部112は、S22以降の処理を行う。
一方、S14の処理で特定された全ての条件節が特定済であると判定した場合(S36のYES)、情報処理装置1は、テスト処理を終了する。
これにより、情報処理装置1は、例えば、テスト対象プログラム131を含む複数のプログラムについての結合テストを行う場合において、最低限導入する必要があるスタブのみの導入を行うことが可能になる。そのため、情報処理装置1は、導入する必要があるスタブ(テスト対象プログラム131に対して値を返却する外部プログラムと挙動が近いスタブ)の生成に要する工数を抑制することが可能になる。以下、テスト処理の他の具体例について説明を行う。
[テスト処理の具体例(1)]
図17から図20は、テスト処理の具体例を説明する図である。具体的に、図17から図20は、テスト対象プログラム131の具体例を説明する図である。
図17に示すテスト対象プログラム131において、「area(width,height)」は、外部プログラムに含まれる関数であり、例えば、「width」の値と「height」の値とを乗算した値を返却する関数(非線形な演算が含まれる関数)である。また、図17に示すテスト対象プログラム131における「isEmail(email)」は、図13等で説明した「isEmail(email)」と同じ関数である。
そして、図17に示すテスト対象プログラム131では、「isEmail(email)」の戻り値が「false」であって、「area(width,height)」の戻り値が「100」以上の値である場合、「foo()」が実行される。
そのため、条件節特定部112は、この場合、S14の処理において、条件節として「if(isEmail(email)&&area(width,height)>=100」を特定する。
そして、条件節特定部112が特定した条件節である「if(isEmail(email)&&area(width,height)>=100」には、関数呼び出しに対応する関数として「isEmail(email)」と「area(width,height)>=100」とが含まれている。
そのため、関数特定部113は、S24の処理において、例えば、関数として「isEmail(email)」を特定する。そして、スタブ生成部114は、S25の処理において、S24の処理で特定した関数である「isEmail」を、論理型のisEmail()返却値(シンボル変数)を返却する関数に変更するスタブを生成する。その後、スタブ置換部115は、S26の処理において、図18に示すように、S22の処理で特定した条件節の直前に、スタブ生成部114が生成したスタブを挿入する。
ここで、S22の処理で特定した条件節には、S24の処理で特定されていない関数である「area(width,height)>=100」がさらに含まれている。そして、「area(width,height)>=100」には、非線形な演算が含まれている。そのため、プログラム実行部111は、スタブ置換部115が上記のようにスタブの挿入を行った場合であっても、S22の処理で特定した条件節に含まれる全ての処理を実行するテストデータ132を生成することができない(S35のNO)。
したがって、関数特定部113は、S24の処理において、関数として「area(width,height)>=100」を特定する。そして、スタブ生成部114は、S25の処理において、S24の処理で特定した関数である「area」を、整数型のarea()の返却値(シンボル変数)を返却する関数に変更するスタブを生成する。その後、スタブ置換部115は、S26の処理において、図19に示すように、S22の処理で特定した条件節の直前に、スタブ生成部114が生成したスタブをさらに挿入する。
これにより、情報処理装置1は、複数の関数が含まれる条件節が存在する場合であっても、テストデータ132を生成することが可能になる。
なお、スタブ置換部115は、「isEmail」を変更するスタブを挿入して後続処理を行った後、「area」を変更するスタブの挿入をさらに行う前に、図20に示すように、「isEmail」を変更するスタブに代えて「area」を変更するスタブを挿入して後続処理を行うものであってもよい。
これにより、情報処理装置1は、導入する必要があるスタブの数をより抑制することが可能になる。
[テスト処理の具体例(2)]
図21及び図22は、テスト処理の具体例を説明する図である。具体的に、図21及び図22は、テスト対象プログラム131の具体例を説明する図である。
S14の処理で特定された条件節には、テスト対象プログラム131の実行環境によって実行されない条件節が含まれている場合がある。そのため、情報処理装置1は、例えば、テスト対象プログラム131の実行環境に依存することなくテストデータ132が生成されるように、必要なスタブの導入を行う。以下、S14の処理においてテスト対象プログラム131の実行環境によって実行されない条件節が存在する場合の具体例について説明を行う。
図21に示すテスト対象プログラム131において、「navigator.userAgent.indexOf(“AAA”)!=−1」は、外部プログラムに含まれる関数であり、例えば、テスト対象プログラム131の実行環境のブラウザが「AAA」である場合に「0」を返却し、テスト対象プログラム131の実行環境のブラウザが「AAA」でない場合に「−1」を返却する関数である。
そして、図21に示すテスト対象プログラム131では、「navigator.userAgent.indexOf(“AAA”)」が「−1」でない場合、「foo()」が実行される。
ここで、例えば、テスト対象プログラム131の実行環境が「AAA」と異なる実行環境である「BBB」である場合、「navigator.userAgent.indexOf(“AAA”)」から返却される値は、常に「−1」になる。そのため、この場合、「foo()」を含む行は、テスト対象プログラム131の実行時において常に実行されない行になる。
そのため、関数特定部113は、S24の処理において、関数として「navigator.userAgent.indexOf(“AAA”)」を特定する。そして、スタブ生成部114は、S25の処理において、S24の処理で特定した関数である「navigator.userAgent.indexOf」を、シンボル変数である整数型のnavigator.userAgent.indexOf()返却値(以下、整数型のindexOf()返却値とも呼ぶ)を返却する関数に変更するスタブを生成する。その後、スタブ置換部115は、S26の処理において、図22に示すように、S22の処理で特定した条件節の直前に、スタブ生成部114が生成したスタブを挿入する。
これにより、情報処理装置1は、テスト対象プログラム131の実行環境に依存することなく、テストデータ132を生成することが可能になる。
このように、本実施の形態における情報処理装置1は、テスト対象プログラム131に含まれる変数に具体値を入力することなくテスト対象プログラム131を実行する。そして、情報処理装置1は、テスト対象プログラム131に含まれる条件節のうち、テスト対象プログラム131の実行時において実行されなかった処理を含む条件節を特定する。
その後、情報処理装置1は、特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、置き換えたテスト対象プログラム131を再実行する。
すなわち、情報処理装置1は、テスト対象プログラム131に含まれる各処理を実行するために、最低限用いる必要があるスタブのみを導入する。具体的に、情報処理装置1は、例えば、用いる必要があるスタブを1つずつ特定する。そして、情報処理装置1は、特定したスタブを導入するごとに、さらなるスタブの導入が必要であるか否かを判定する。その結果、情報処理装置1は、さらなるスタブの導入が必要なくなったと判定した場合、スタブの導入を終了する。
これにより、情報処理装置1は、例えば、テスト対象プログラム131と外部プログラムとの結合テストを行う場合において、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置1は、テスト対象プログラム131に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。また、情報処理装置1は、導入したスタブの挙動について行われる妥当性判断に要する工数を抑制することが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
コンピュータに、
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
処理を実行させることを特徴とするテストプログラム。
(付記2)
付記1において、
前記実行する処理では、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する1以上のパス条件を特定し、
特定した前記1以上のパス条件のそれぞれを満たす1以上のテストデータを生成し、
生成した前記1以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記1以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテストプログラム。
(付記3)
付記2において、
前記特定のスタブは、前記テスト対象のプログラムに対して、前記関数呼び出しに対応する関数と同じ型のシンボル変数を与えるスタブである、
ことを特徴とするテストプログラム。
(付記4)
付記3において、
前記置き換える処理では、特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
(付記5)
付記4において、
前記置き換える処理では、特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、前記複数の関数呼び出しのうちのいずれかに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
(付記6)
付記1において、
前記条件節を特定する処理では、前記テスト対象のプログラムのソースコードに記述された行のうち、前記テスト対象のプログラムの実行時において実行されなかった行を含む条件節を特定する、
ことを特徴とするテストプログラム。
(付記7)
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行するプログラム実行部と、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する条件節特定部と、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換えるスタブ置換部と、を有し、
前記プログラム実行部は、前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト装置。
(付記8)
付記7において、
前記プログラム実行部は、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する1以上のパス条件を特定し、
特定した前記1以上のパス条件のそれぞれを満たす1以上のテストデータを生成し、
生成した前記1以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記1以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテスト装置。
(付記9)
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト方法。
(付記10)
付記9において、
前記実行する工程では、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する1以上のパス条件を特定し、
特定した前記1以上のパス条件のそれぞれを満たす1以上のテストデータを生成し、
生成した前記1以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記1以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテスト方法。
1:情報処理装置 3a:操作端末
3b:操作端末 3c:操作端末
130:記憶部 131:テスト対象プログラム
132:テストデータ

Claims (8)

  1. コンピュータに、
    テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行
    再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理を実行させることを特徴とするテストプログラム。
  2. コンピュータに、
    テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、特定した前記条件節の条件式に含まれる前記複数の関数呼び出しのうちのいずれかに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行し、
    再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理を実行させる
    ことを特徴とするテストプログラム。
  3. テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
    処理をコンピュータに実行させ、
    前記置き換える処理では、特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を前記特定のスタブに置き換え、さらに、
    前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理をコンピュータに実行させることを特徴とするテストプログラム。
  4. テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
    処理をコンピュータに実行させ、
    前記置き換える処理では、特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、前記複数の関数呼び出しのうちのいずれかに対応する関数を前記特定のスタブに置き換え、さらに、
    前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理をコンピュータに実行させることを特徴とするテストプログラム。
  5. コンピュータが、
    テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行
    再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理を実行することを特徴とするテスト方法。
  6. コンピュータが、
    テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、特定した前記条件節の条件式に含まれる前記複数の関数呼び出しのうちのいずれかに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行し、
    再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理を実行することを特徴とするテスト方法。
  7. テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
    処理をコンピュータが実行し、
    前記置き換える処理では、特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を前記特定のスタブに置き換え、さらに、
    前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理をコンピュータが実行することを特徴とするテスト方法。
  8. テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
    前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
    特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
    前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
    処理をコンピュータが実行し、
    前記置き換える処理では、特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、前記複数の関数呼び出しのうちのいずれかに対応する関数を前記特定のスタブに置き換え、さらに、
    前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
    特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
    処理をコンピュータが実行することを特徴とするテスト方法。
JP2017177247A 2017-09-15 2017-09-15 テストプログラム、テスト装置及びテスト方法 Active JP6974707B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017177247A JP6974707B2 (ja) 2017-09-15 2017-09-15 テストプログラム、テスト装置及びテスト方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017177247A JP6974707B2 (ja) 2017-09-15 2017-09-15 テストプログラム、テスト装置及びテスト方法

Publications (2)

Publication Number Publication Date
JP2019053518A JP2019053518A (ja) 2019-04-04
JP6974707B2 true JP6974707B2 (ja) 2021-12-01

Family

ID=66014884

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017177247A Active JP6974707B2 (ja) 2017-09-15 2017-09-15 テストプログラム、テスト装置及びテスト方法

Country Status (1)

Country Link
JP (1) JP6974707B2 (ja)

Also Published As

Publication number Publication date
JP2019053518A (ja) 2019-04-04

Similar Documents

Publication Publication Date Title
US10586053B2 (en) Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US8555234B2 (en) Verification of soft error resilience
EP3264274B1 (en) Input discovery for unknown program binaries
JP6897524B2 (ja) ソフトウェア品質判定装置、ソフトウェア品質判定方法、及びソフトウェア品質判定プログラム
CN104021072A (zh) 用于评估失效的软件程序的机器和方法
JP2015130152A (ja) 情報処理装置及びプログラム
US8560991B1 (en) Automatic debugging using automatic input data mutation
US9842044B2 (en) Commit sensitive tests
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
CN107193736B (zh) 测试方法、装置、电子设备以及存储介质
US12001325B2 (en) Test data generation apparatus, test data generation method and program
JP6974707B2 (ja) テストプログラム、テスト装置及びテスト方法
JP7211228B2 (ja) 解析装置、解析方法、及びプログラム
CN107077394B (zh) 用于监视对代码集的请求的方法和系统
JP2013196390A (ja) テストデータ作成方法、テストデータ作成プログラム及びテストデータ作成装置
CN115757099A (zh) 平台固件保护恢复功能自动测试方法和装置
JP6912104B2 (ja) 試験装置、試験方法及びコンピュータプログラム
US9442701B1 (en) Verifying models for exceptional behavior
JP3833626B2 (ja) テストケース生成装置及びテストケース生成方法
US20150161006A1 (en) Information processing apparatus and method for testing same
JP2017041196A (ja) スタブ化対象判定装置、方法、及びプログラム
US9053264B2 (en) What-if simulation methods and systems
CN111143229A (zh) 软件测试方法及装置、计算机设备及计算机可读存储介质
JP6390217B2 (ja) ソフトウェア変更プログラム、ソフトウェア変更装置、及びソフトウェア変更方法
JPWO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200611

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210608

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210804

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211018

R150 Certificate of patent or registration of utility model

Ref document number: 6974707

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150