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

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

Info

Publication number
JP6547345B2
JP6547345B2 JP2015053771A JP2015053771A JP6547345B2 JP 6547345 B2 JP6547345 B2 JP 6547345B2 JP 2015053771 A JP2015053771 A JP 2015053771A JP 2015053771 A JP2015053771 A JP 2015053771A JP 6547345 B2 JP6547345 B2 JP 6547345B2
Authority
JP
Japan
Prior art keywords
check
condition
program
test case
target program
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
JP2015053771A
Other languages
English (en)
Other versions
JP2016173756A (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 JP2015053771A priority Critical patent/JP6547345B2/ja
Publication of JP2016173756A publication Critical patent/JP2016173756A/ja
Application granted granted Critical
Publication of JP6547345B2 publication Critical patent/JP6547345B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本発明は、テストケース生成プログラム、テストケース生成方法およびテストケース生成装置に関する。
従来、ソフトウェア開発において、開発対象のプログラムに対してテストケースを生成する技術としてシンボリック実行が知られている。シンボリック実行は、入力変数に記号値などのシンボル値を設定して、プログラムの実行をエミュレートすることにより、プログラムを分析する技術である。
例えば、IF文を含むCOBOLプログラムをシンボリック実行した場合、実行可能なパス、および、パス毎のパス条件が抽出される。ここで、パスは、実行された命令文の系列であり、パス条件は、パスが終了するまでに経由する条件のうち不定な変数値に関する条件式である。つまり、テスト対象を通過するパスがテストケースに該当し、パス条件を満たすプログラム変数の値が、テストケースのテストデータとなる。
一般に、プログラムは、入力である外部変数や局所変数に対して種々の処理が記述され、該処理が実行されることによって、所望の機能が実行される。このようなプログラムには、前処理(以降、チェック処理と記載する場合がある)と主処理(以降、メイン処理と記載する場合がある)が含まれる。前処理は、入力が所望条件を満たすことを判定する入力チェック処理であり、主処理は、所望の機能を実現する処理を記述したメイン処理である。
そして、前処理と主処理を含むプログラムに対してシンボリック実行を行った場合、それぞれの処理内の条件分岐においてパス分岐が発生するので、前処理をテストするためのテストケースおよび主処理をテストするためのテストケースが生成される。
特開2000−339192号公報 特開2007−41804号公報 特開2013−143067号公報
しかしながら、上記技術では、入力チェック処理のテストケースが必要以上に多く生成される。
一般に、チェック処理は、多くのプログラムで共通して使用される定型的な処理であるので、チェック処理自体に対するテストの重要度は、メイン処理に対するテストに比較して低い。このため、チェック処理のテストケースは、メイン処理のテストケースと比較して、少数で済むと考えられる。しかしながら、シンボリック実行は、プログラム内のチェック処理とメイン処理を区別することができないので、チェック処理とメイン処理のテストケースを区別して生成することができない。
なお、シンボリック実行で生成されたテストケース全体から、重複するテストケースを除外することで、テストケース数を削減することも考えられる。しかし、シンボリック実行によって生成されるテストケース自体の数は変わらないので、テストケースの抽出時間が長時間化する。また、チェック処理をコメントアウトして、メイン処理だけをシンボリック実行の分析対象とすることも考えられるが、メイン処理の前提としてのチェック処理を無視することになる。このため、メイン処理が実行されないテストケースが除外されることになり、生成されるテストデータが不十分である。
また、チェック処理をコメントアウトし、入力チェックのパス条件をシンボリック実行の事前条件と指定することも考えられる。しかし、入力チェックの前にメイン処理があるようなプログラムでは、入力チェックのパス条件をプログラムの事前条件とすると、プログラムのロジックが変わってしまい、適切にテストケースとテストデータを生成することができない。
1つの側面では、テストケースの抽出数を削減することができるテストケース生成プログラム、テストケース生成方法およびテストケース生成装置を提供することを目的とする。
テストケース生成プログラムは、入力データが所定条件を満たすことを判定するチェック処理を含んだ対象プログラムを、当該チェック処理を除外した対象プログラムに変換する処理をコンピュータに実行させる。テストケース生成プログラムは、変換された対象プログラムに対してシンボリック実行が行われる際に、所定の命令において所定のチェック条件をパス条件に追加するよう制御する処理をコンピュータに実行させる。
一実施形態によれば、テストケースの抽出数を削減することができる。
図1は、実施例1に係るシステムの全体構成例を示す図である。 図2は、実施例1に係るテストケース生成装置の機能構成を示す機能ブロック図である。 図3は、入力情報DBに記憶される情報の例を示す図である。 図4は、入力情報DBに記憶される情報の別例を示す図である。 図5は、チェック仕様分析の例を説明する図である。 図6は、チェック条件生成の例を説明する図である。 図7は、プログラム変換の例を説明する図である。 図8は、失敗時のパス出力を説明する図である。 図9は、成功時のパス出力を説明する図である。 図10は、テストケース出力を説明する図である。 図11は、全体的な処理の流れを説明するフローチャートである。 図12は、チェック仕様分析およびチェック条件生成の処理の流れを説明するフローチャートである。 図13は、プログラム変換処理の流れを説明するフローチャートである。 図14は、チェック条件追加処理の流れを説明するフローチャートである。 図15は、テストケース出力処理の流れを説明するフローチャートである。 図16は、チェック条件が複数ある場合の例を説明する図である。 図17は、ハードウェア構成例を説明する図である。
以下に、本願の開示するテストケース生成プログラム、テストケース生成方法およびテストケース生成装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[全体構成]
図1は、実施例1に係るシステムの全体構成例を示す図である。図1に示すように、テストケース生成装置10は、シンボリック実行を実行してテストケースを生成するサーバやパーソナルコンピュータの一例である。
このテストケース生成装置10は、テストケース生成対象のプログラム、プログラムにおいて入力データが所定条件を満たすことを判定するチェック処理の仕様であるチェック仕様、チェック処理の該当箇所を示すチェック部分情報を受け付ける。そして、テストケース生成装置10は、これらの入力情報を用いて、テストケースを生成する。なお、本実施例では、COBOLプログラムを例にして説明するが、これに限定されるものではなく、C言語など他のプログラムでも同様に実行できる。
具体的には、テストケース生成装置10は、入力データが所定条件を満たすことを判定するチェック処理を含んだ対象プログラムを、当該チェック処理を除外した対象プログラムに変換する。そして、テストケース生成装置10は、変換された対象プログラムに対してシンボリック実行が行われる際に、所定の命令において所定のチェック条件をパス条件に追加するよう制御する。
つまり、テストケース生成装置10は、プログラムを入力チェックの条件分岐が除外された成功用と失敗用とに変換し、入力チェックの成功条件と失敗条件をパス条件に追加しながらシンボリック実行する。この結果、テストケース生成装置10は、実行結果として得るテストケース数を削減できる。
[機能構成]
図2は、実施例1に係るテストケース生成装置の機能構成を示す機能ブロック図である。図2に示すように、テストケース生成装置10は、入力情報DB11、テストケースDB12、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17を有する。また、テストケース生成装置10は、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20、テストケース出力部21を有する。
なお、入力情報DB11、テストケースDB12は、メモリやハードディスクなどの記憶装置に記憶されるデータベースである。入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20、テストケース出力部21は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。また、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17は、シンボリック実行を行う前の前処理を実行する処理部である。
入力情報DB11は、テストケース生成対象のプログラム、チェック仕様、チェック部分情報を記憶するデータベースである。ここで記憶される情報は、例えば管理者等が格納してもよく、CASE(Computer Aided Software Engineering)ツールなどで生成される情報を格納してもよい。CASEツールとは、設計情報からプログラム等のソフトウェア製品を自動生成する機能を備えるものである。また、入力情報DB11は、上記各情報をまとめた1つの情報で記憶することもでき、各情報を記憶することもできる。
図3は、入力情報DBに記憶される情報の例を示す図である。図3の例は、テストケース生成対象のプログラムに各情報をまとめて記載した例である。図3に示すプログラムは、2個のIF文が記述され、チェック処理とメイン処理があるプログラムである。
チェック処理は、39行目から45行目の入力チェックSECTIONであり、入力の3文字がアルファベットの大文字であること、すなわち、‘A’から‘Z’の間であることをチェックする。一方、メイン処理は、23行目から28行目のメイン処理SECTIONであり、チェック処理を通過したアルファベット大文字3文字の入力が、‘ABC’’と等しいかを判定し、その結果を出力する。実行パスでは、まず、15行目でチェック処理が呼び出され、次いで、16行目のIF文でチェックの成否が判定され、成功の場合に17行目でメイン処理が呼び出される。
また、図3に示すプログラムには、コメントを利用して、チェック仕様とチェック処理部分を示す印が記述されている。具体的には、15行目から18行目がチェック仕様情報であり、19行目から21行目がチェック処理部分である。チェック仕様情報には、どのようなチェックなのかを記述する「チェック種別」、チェック種別の具体的なチェック条件を記述する「チェック条件」、チェック対象の変数を特定できるようにする「チェック対象」、チェック失敗の場合に実行される処理内容を記述する「チェック失敗の動作」が記述される。また、19行目の“$CHECKSTART”がチェック処理の開始を意味し、21行目の“$CHECKEND”がチェック処理の終了を意味する。
また、入力情報DB11は、各情報を別々に記憶することもできる。図4は、入力情報DBに記憶される情報の別例を示す図である。図4の例は、テストケース生成対象のプログラムと、チェック仕様およびチェック処理部分が別々に記憶される例である。
図4の(a)は、テストケース生成対象のプログラムであり、図4の(b)がチェック仕様およびチェック処理部分を記述したテーブルの例である。図3と図4は同じ内容を示している。具体的には、図4の(b)に示す「開始行」−「終了行」が図3における入力チェック処理を実行する20行目に該当する。また、図4の(b)に示す「CHECK」が図3の15行目に該当し、「ITEM」が図3の16行目に該当し、「COND」が図3の17行目に該当し、「ERROR」が図3の18行目に該当する。
テストケースDB12は、シンボリック実行によって生成されたテストケースを記憶するデータベースである。ここで記憶される情報は、入力チェックの分岐を通過する各パス条件が記憶される。また、ここで記憶される情報は、後述するテストケース出力部21に記憶されるので、詳細は、後述する。
入力部13は、前処理において、テストケース生成対象のプログラムとチェック仕様とチェック処理部分の情報を取得する処理部である。具体的には、入力部13は、例えばキーボードによる入力等によりシンボリック実行の開始指示を受け付けると、入力情報DB11に記憶される情報を読み込んで、チェック仕様分析部14とプログラム変換部16に出力する。
チェック仕様分析部14は、チェック仕様情報を分析して、チェック仕様の内容を取得する処理部である。具体的には、チェック仕様分析部14は、入力部13から入力されたチェック仕様情報やプログラムなどから、チェック種別、チェック条件、チェック対象、チェック失敗の動作を抽出する。
図5は、チェック仕様分析の例を説明する図である。図5に示すように、チェック仕様分析部14は、15行目の「$CHECKTYPE文字種」の記述からチェック種別が文字種チェックであることを特定する。チェック仕様分析部14は、対象プログラムの16行目の「$ITEM入力OF引数」の記述からチェック対象変数が「入力OF引数」であることを特定する。チェック仕様分析部14は、17行目の「$COND英字大文字」の記述から、チェック条件が「英字大文字」であることを特定する。チェック仕様分析部14は、18行目の「$ERRORチェック結果=1」の記述からチェック失敗の場合に、変数「チェック結果」に数値1が代入されることを特定する。さらに、チェック仕様分析部14は、5行目および6行目の記述から、入力が外部から与えられるものであり、3ケタの文字列(X(3))であることを特定する。
そして、チェック仕様分析部14は、図5に示すように、「行番号、項目、型、チェック種別(文字種、最小値、最大値、列挙値)、エラー」を有する情報を生成する。具体的には、チェック仕様分析部14は、チェック仕様情報の開始が15行目であることから、「行番号」に「15」を設定する。また、チェック仕様分析部14は、ITEMに引数の入力が記述されていることから、「項目」に「入力」を設定し、6行目において入力として「X(3)」が記述されていることから、「型」に「X(3)」を設定する。
さらに、チェック仕様分析部14は、CONDに英字大文字が記述されていることから、「チェック種別(文字種)」に「英字大文字」を設定する。なお、他のチェック種別については、プログラムのチェック処理に記述されていないので、空白のままとする。また、チェック仕様分析部14は、変数「チェック結果」に数値1を代入することが記述されているので、「エラー」に「チェック結果=1」を設定する。その後、チェック仕様分析部14は、生成した分析結果をチェック条件生成部15に出力する。
チェック条件生成部15は、プログラムとチェック処理の仕様とに基づいて、チェック処理が成功する成功条件とチェック処理が失敗する失敗条件とを生成する処理部である。具体的には、チェック条件生成部15は、チェック仕様分析部14から分析結果が入力されると、分析結果の「型」および「チェック種別」から、「型」が成功する条件と失敗する条件を生成する。
図6は、チェック条件生成の例を説明する図である。図6の例では、チェック条件生成部15は、分析結果の「型」が「X(3)」であり、チェック種別が文字種「英字大文字」であることから、入力された3つの文字からなる文字列がすべて大文字である条件を成功条件、入力された3つの文字からなる文字列のいずれかが大文字ではない条件を失敗条件とする。つまり、チェック条件生成部15は、入力文字列がすべて大文字である条件を成功条件、入力文字列が大文字ではない条件を失敗条件とする。
具体的には、図6に示すように、チェック条件生成部15は、「No、行番号、成否、チェック条件」を有する情報を生成して、プログラム変換部16とチェック条件制御部17に出力する。
ここで「No.」は、入力されたチェック仕様のNo.と関連付けられるNo.が設定される。「行番号」は、入力されたチェック仕様の行番号が設定される。「成否」は、成功条件であれば「成功」、失敗条件であれば「失敗」が設定される。「チェック条件」は、成功条件または失敗条件が設定される。
図6の例では、チェック条件生成部15は、上記条件を満たす成功条件として、「('A‘<=入力(1:1)AND入力(1:1)<=’Z‘)AND(’A‘<=入力(2:1)AND入力(2:1)<=’Z‘)AND(’A‘<=入力(3:1)AND入力(3:1)<=’Z‘)」を生成する。また、チェック条件生成部15は、上記条件を満たす失敗条件として、NOT成功条件を生成する。つまり、チェック条件生成部15は、「NOT(('A‘<=入力(1:1)AND入力(1:1)<=’Z‘)AND(’A‘<=入力(2:1)AND入力(2:1)<=’Z‘)AND(’A‘<=入力(3:1)AND入力(3:1)<=’Z‘))」を生成する。
プログラム変換部16は、入力データが所定条件を満たすことを判定するチェック処理を含んだプログラムを、当該チェック処理を除外したプログラムに変換する処理部である。具体的には、プログラム変換部16は、対象のプログラムから、チェック処理が成功する成功用のプログラムと、チェック処理が失敗する失敗用のプログラムとを複製して、チェック条件制御部17に出力する。
図7は、プログラム変換の例を説明する図である。図7に示すように、プログラム変換部16は、入力部13が読み込んだプログラムを、チェック処理を実行対象外に設定し、チェック処理が成功して後続の処理が実行される命令文を追加した成功用のプログラムに変換する。例えば、プログラム変換部16は、プログラムのチェック仕様情報の開始でありコメントアウトされている15行目を命令「CONTINUE」に書き換える。さらに、プログラム変換部16は、19行目にチェック処理の開始の印、21行目にチェック処理の終了の印があるので、それらの間の20行目をコメントアウトして処理対象から除外する。このようにして、プログラム変換部16は、成功用のプログラムを生成する。
また、プログラム変換部16は、入力部13が読み込んだプログラムを、チェック処理を実行対象外に設定し、チェック処理が失敗した際に実行される命令文を追加した失敗用のプログラムに変換する。例えば、プログラム変換部16は、プログラムのチェック仕様情報の開始でありコメントアウトされている15行目を命令文「MOVE 1 TO チェック結果」に書き換える。さらに、プログラム変換部16は、19行目にチェック処理の開始の印、21行目にチェック処理の終了の印があるので、それらの間の20行目をコメントアウトして処理対象から除外する。このようにして、プログラム変換部16は、失敗用のプログラムを生成する。
チェック条件制御部17は、変換されたプログラムに対してシンボリック実行が行われる際に、所定の命令において所定のチェック条件をパス条件に追加するよう制御する処理部である。具体的には、チェック条件制御部17は、成功用のプログラムに対してシンボリック実行が行われる際に、成功条件をパス条件に追加するよう制御し、失敗用のプログラムに対してシンボリック実行が行われる際に、失敗条件をパス条件に追加するよう制御する。
つまり、チェック条件制御部17は、変換後プログラムと対応するチェック条件を管理してシンボリック実行で実行される命令文を監視して、規定の命令文で規定のチェック条件をパス条件に追加する。また、チェック条件制御部17は、プログラム変換部16から入力された成功用のプログラムおよび失敗用のプログラムをシンボリック実行入力部18に出力する。
シンボリック実行入力部18は、チェック条件制御部17から、シンボリック実行の対象として成功用のプログラムおよび失敗用のプログラムを受け付けて、シンボリック実行制御部19に出力する処理部である。
シンボリック実行制御部19は、プログラムの外部変数にシンボル値を設定し、シンボル値のままプログラム実行をエミュレートしてパスを模擬的に実行する処理部である。ここでは、シンボリック実行制御部19は、シンボリック実行入力部18から入力される成功用のプログラムおよび失敗用のプログラムそれぞれについて、シンボリック実行を実行して、その結果をシンボリック実行出力部20に出力する。
シンボリック実行出力部20は、実行可能なパスとパス条件を、テストケース出力部21に出力する処理部である。テストケース出力部21は、シンボリック実行出力部20から出力されたパスとパス条件をテストケースとして、テストケースDB12に格納する処理部である。なお、1組のパスとパス条件が1個のテストケースに該当する。
ここで、図8と図9を用いて、シンボリック実行時のパス条件の出力例を説明する。図8は、失敗時のパス出力を説明する図であり、図9は、成功時のパス出力を説明する図である。
図8に示すように、チェック条件制御部17は、シンボリック実行制御部19によって規定の実行順にしたがって命令文の実行がエミュレートされるのを監視し、監視対象の行番号「15」が実行されると、行番号「15」に対応する失敗用のチェック条件を抽出する。
具体的には、シンボリック実行出力部20が、チェック条件制御部17の監視の元で失敗用のプログラムをシンボリック実行すると、15行目において書き換えられた命令文「MOVE 1 TO チェック結果」によって、「チェック結果」項目に1が設定される。同時に、チェック条件制御部17は、15行目の命令文の実行時に、チェック条件生成部15によって生成されたチェック失敗条件をパス条件に追加する。
引き続き、シンボリック実行出力部20によってシンボリック実行が行われると、次いで、23行目のIF文の分岐条件がFalseでELSEが実行され、「チェック失敗」セクションを実行して終了するパスが1個抽出される。この実行パスから、チェック失敗の1個のテストケースが生成される。
つまり、チェック条件制御部17は、「NOT(('A‘<=入力(1:1)AND入力(1:1)<=’Z‘)AND(’A‘<=入力(2:1)AND入力(2:1)<=’Z‘)AND(’A‘<=入力(3:1)AND入力(3:1)<=’Z‘))」を抽出する。ここで、シンボリック実行出力部20は、チェック処理が失敗する場合のプログラムであり、これ以上の分岐がないことから、上記チェック失敗条件を満たすテストケースを出力する。
また、図9に示すように、チェック条件制御部17は、シンボリック実行制御部19によって規定の実行順にしたがって命令文の実行がエミュレートされるのを監視し、監視対象の行番号「15」が実行されると、行番号「15」に対応する成功用のチェック条件を抽出する。
具体的には、シンボリック実行出力部20が、チェック条件制御部17の監視の元で成功用プログラムをシンボリック実行すると、15行目のCONTINUE文でチェック成功の条件がパス条件に追加される。次いで、23行目のIF文の分岐条件がTrueでTHENが実行される。さらに、メイン処理内の30行目のIF文の条件分岐は、真偽とも充足可能であるため2つのパスが抽出され、2つのテストケースが生成される。
つまり、チェック条件制御部17は、「('A‘<=入力(1:1)AND入力(1:1)<=’Z‘)AND(’A‘<=入力(2:1)AND入力(2:1)<=’Z‘)AND(’A‘<=入力(3:1)AND入力(3:1)<=’Z‘)」を抽出する。ここで、シンボリック実行出力部20は、メイン処理の分岐があることから「(チェック成功条件)AND(30行目IF文条件がTrue)」を満たすテストケースと、「(チェック成功条件)AND(30行目IF文条件のNotがTrue)」を満たすテストケースとを出力する。
次に、図10を用いてテストケースの出力を説明する。図10は、テストケース出力を説明する図である。図10に示すように、テストケース出力部21は、失敗用のプログラムに対するシンボリック実行に際して、入力1に記載される1つのチェック条件をシンボリック実行出力部20から受け付ける。また、テストケース出力部21は、成功用のプログラムに対するシンボリック実行に際して、入力2に記載される2つのチェック条件をシンボリック実行出力部20から受け付ける。そして、テストケース出力部21は、これらのチェック条件をマージして、テストケースDB12に格納する。
[処理の流れ]
次に、上述した各処理部が実行する処理について説明する。なお、シンボリック実行は、一般的なシンボリック実行と同様の処理なので、詳細な説明は省略する。
(全体的な処理の流れ)
図11は、全体的な処理の流れを説明するフローチャートである。図11に示すように、テストケース生成装置10は、入力チェック仕様とプログラム部分の対応関係を入力情報DB11から読み込む(S101)。
続いて、テストケース生成装置10は、プログラムと関連付けられたチェック仕様情報から入力チェック(チェック処理)の成功と失敗のパス条件を生成する(S102)。そして、テストケース生成装置10は、プログラムと関連付けられたチェック処理部分の印(コメント)を用いて、プログラムを入力チェックの成功用と失敗用とに変換する(S103)。
続いて、テストケース生成装置10は、成功用と失敗用とのプログラムそれぞれについてシンボリック実行を行い、特定の命令文に到達したら、入力チェックのパス条件を付加する(S104)。その後、テストケース生成装置10は、成功用と失敗用のテストケースを集計して、テスト対象プログラムのテストケースとする(S105)。
(チェック仕様分析、チェック条件生成)
図12は、チェック仕様分析およびチェック条件生成の処理の流れを説明するフローチャートである。図12に示すように、チェック仕様分析部14は、チェック仕様が記述されたプログラム等を取得する(S201)。なお、入力は、コメントにチェック仕様が記述されたプログラムや表形式にチェック仕様が記述されたファイルなどである。
続いて、チェック仕様分析部14は、チェック仕様からチェック仕様情報を抽出して(S202)、抽出したチェック仕様情報をチェック条件生成部15に出力する(S203)。例えば、チェック仕様分析部14は、チェック処理の行番号、対象となる項目、項目の型、チェック種別、チェック条件、エラー時の動作の情報を抽出する。
その後、チェック条件生成部15は、チェック仕様分析部14からチェック仕様情報を取得する(S204)。続いて、チェック条件生成部15は、チェック仕様情報に基づき、チェック種別に応じて成功と失敗のチェック条件を生成し(S205)、生成した成功のチェック条件と失敗のチェック条件を、プログラム変換部16とチェック条件制御部17に出力する(S206)。
(プログラム変換)
図13は、プログラム変換処理の流れを説明するフローチャートである。図13に示すように、プログラム変換部16は、プログラムとチェック仕様情報を入力部13等から取得し(S301)、プログラム内に未処理のチェック処理があるか否かを判定する(S302)。
そして、プログラム変換部16は、未処理のチェック処理がある場合(S302:Yes)、未処理のチェック処理を1つ選択してプログラムを複製する(S303)。続いて、プログラム変換部16は、当該チェック処理の行番号に、エラー(失敗)の情報に基づいて、当該チェックの失敗の命令文に書き換える(S304)。
そして、プログラム変換部16は、当該チェック処理以外のチェック処理の行番号に、チェック成功を示す命令文「CONTINUE」に書き換え(S305)、全てのチェック処理のプログラム部分をコメントアウト(除外)する(S306)。その後、プログラム変換部16は、変換されたプログラムを当該チェック処理の失敗を関連付けて、メモリ等に記録する(S307)。
一方、プログラム変換部16は、未処理のチェック処理がない場合(S302:No)、プログラムを複製する(S308)。続いて、プログラム変換部16は、全てのチェック処理の行番号に、チェック成功を示す命令文「CONTINUE」に書き換える(S309)。
その後、プログラム変換部16は、変換されたプログラムを全チェック処理の成功を関連付けて、メモリ等に記録する(S310)。
(チェック条件追加)
図14は、チェック条件追加処理の流れを説明するフローチャートである。図14に示すように、チェック条件制御部17は、変換済プログラムとチェック条件を取得し(S401)、プログラム内に未処理のチェック処理があるか否かを判定する(S402)。
続いて、チェック条件制御部17は、未処理のチェック処理がある場合(S402:Yes)、未処理のプログラムに対応するチェック条件を取得し、当該プログラムを対象としてシンボリック実行の分析を開始する(S403)。ここで、シンボリック実行制御部19は、該当プログラムのシンボリック実行を開始する。
そして、シンボリック実行制御部19は、プログラム終了の命令文ではない場合(S404:No)、命令文の処理をエミュレートする(S405)。続いて、チェック条件制御部17は、チェック条件の行番号の命令文である場合(S406:Yes)、チェック条件の行番号の命令文で、規定チェック条件をパス条件に追加する(S407)。
その後、シンボリック実行制御部19は、次の命令文を取得し(S408)、S404以降を繰り返す。一方、チェック条件の行番号の命令文ではない場合(S406:No)、S407を実行することなく、S408が実行される。
また、S404において、シンボリック実行出力部20は、プログラム終了の命令文である場合(S404:Yes)、テストケースを記録する(S409)。また、S402において、未処理のチェック処理がない場合(S402:No)、シンボリック実行出力部20は、生成したテストケースをプログラムと関連付けて出力する(S410)。
(テストケース出力)
図15は、テストケース出力処理の流れを説明するフローチャートである。図15に示すように、テストケース出力部21は、変換後プログラム毎のテストケースリスト(パス条件)を、シンボリック実行出力部20から取得する(S501)。
続いて、テストケース出力部21は、未処理のテストケースリストがある場合(S502:Yes)、選択したテストケースリストから順にパス条件を取り出す(S503)。そして、テストケース出力部21は、未処理のパス条件がある場合(S504:Yes)、集計テストケースのパス条件と一致するか否かを判定する(S505)。
その後、テストケース出力部21は、集計テストケースのパス条件と一致しない場合(S505:Yes)、当該パス条件のテストケースを集計テストケースに追加し(S506)、S504以降を繰り返す。また、テストケース出力部21は、集計テストケースのパス条件と一致する場合(S505:No)、S506を実行することなく、S504以降を繰り返す。
一方、S504において、テストケース出力部21は、未処理のパス条件がない場合(S504:No)、S502以降を繰り返す。また、S502において、テストケース出力部21は、未処理のテストケースリストがない場合(S502:No)、集計テストケースをテストケースDB12に出力する(S507)。
このフローにおいて集計テストケースのパス条件と一致しないかを判定している部分は、パス条件が同一、つまり、同一のテストケースが重複しないように集計する処理である。テストケース生成装置10は、複数の変換後プログラムをチェック条件制御部17の制御のもとでシンボリック実行してテストケースを抽出する。ここで、チェック処理(入力チェック処理)の前に入力チェック以外の別の処理が存在するプログラムが入力され、かつ、別の処理に条件分岐が存在する場合、テストケース出力部21に入力されるテストケースのパス条件には重複が生じるので、本処理によって重複を除去している。
[効果]
実施例1によれば、テストケース生成装置10は、入力チェック処理とメイン処理を含むようなプログラムに対して、プログラム全体のロジック内容は変えずに入力チェック処理を除外し、シンボリック実行でのパス追跡時の適切な命令文で、入力チェックのパス条件を追加することができる。また、テストケース生成装置10は、入力チェックを過剰にテストするようなテストケースを除外して、テストケースを生成することができる。この結果、テストケース生成装置10は、テストケース個数を削減し、さらに、テストケースの生成時間を短縮することができる。
[チェック条件が複数]
テストケース生成装置10は、チェック条件が複数あった場合でも同様に処理することができる。図16は、チェック条件が複数ある場合の例を説明する図である。図16の上図には一般的なチェック条件に関する情報を例示する。
図16に示すように、チェック種別が「文字種」の場合、チェック条件としては、英字、英数字、数字などである。チェック種別が「値範囲」の場合、チェック条件としては、数値の最小値や最大値、指定文字集合の範囲などがある。チェック種別が「列挙値」の場合、チェック条件としては、例えば、「1、10、20」などのように、複数の数値を具体的に列挙する列挙値の指定などがある。チェック種別が「桁範囲」の場合、チェック条件としては、文字列の最小桁数や最大桁数などがある。
そして、入力部13は、例えば表形式のチェック仕様情報を読み込む。図16の例では、No=1は、プログラムの100行目から110行目がチェック仕様情報であり、チェック種別が値範囲で、チェック対象が項目1、チェック条件が最小値“0<=”(0以上)だけが指定されている例である。No=2は、プログラムの200行目から220行目がチェック仕様情報であり、チェック種別が値範囲で、チェック対象が項目2、チェック条件が最小値“0<=”(0以上)と最大値“<100”(100未満)の両方が指定されている例である。No=3は、プログラムの300行目から330行目がチェック仕様情報であり、チェック種別が列挙値で、チェック対象が項目3、チェック条件が列挙値{‘A’,‘B’,‘C’}に含まれる例である。なお、いずれもエラー処理は、チェック結果に1を代入する「チェック結果=1」である。
続いて、チェック仕様分析部14は、上記チェック仕様情報を分析して、チェック種別、チェック条件、チェック対象、チェック失敗の動作を抽出する。No=1については、行番号=100、項目=項目1、型=9(3)、チェック種別として最小値が0以上、エラー処理として「チェック結果=1」が抽出される。No=2については、行番号=200、項目=項目2、型=9(3)、チェック種別として最小値が0以上かつ最大値が100未満、エラー処理として「チェック結果=1」が抽出される。No=3については、行番号=300、項目=項目3、型=X(2)、チェック種別(列挙値)=「A、B、C」、エラー処理として「チェック結果=1」が抽出される。なお、型=9(3)は、3ケタ位の数字を意味する。
そして、チェック条件生成部15は、成功条件と失敗条件を生成する。なお、失敗条件は、NOT成功条件である。上記例では、チェック条件生成部15は、対象プログラムについて、抽出された行番号ごとに成功条件と失敗条件を生成するので、合計6個の条件を生成する。
一例を挙げると、行番号100については、成功条件として「0<=項目1」が生成され、失敗条件として「NOT(0<=項目1)」が生成される。また、行番号200については、成功条件として「(0<=項目2)AND(項目2<100)」が生成され、失敗条件として「NOT((0<=項目2)AND(項目2<100))」が生成される。
その後、プログラム変換部16は、条件ごとに、条件を満たすプログラムを生成する。例えば、プログラム変換部16は、No.1−1の成功条件を満たすプログラム、No.1−2の失敗条件を満たすプログラム、No.2−1の成功条件を満たすプログラムなどを生成する。
そして、チェック条件制御部17は、生成された各プログラムに対してシンボリック実行がされる際に、命令を監視し、該当行番号の命令が実行されたときに、該当するチェック条件をパス条件として抽出する。例えば、チェック条件制御部17は、項目1の成功用プログラムでは、100行目が実行されたときに「0<=項目1」を抽出する。このように、テストケース生成装置10は、チェック処理のチェック条件が複数あり、分岐が複雑な場合でも、各変換後プログラムと対応するチェック条件を管理してシンボリック実行で実行される命令文を監視して、規定の命令文で規定のチェック条件をパス条件に追加することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
[生成装置と実行装置]
上記実施例では、テストケース生成装置10は、テストケースを生成する処理部とシンボリック実行を実行する処理部の両方を有する例を説明したが、これに限定されるものではない。例えば、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17、テストケース出力部21を生成装置と、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20を有するシンボリック実行装置とに分割することもできる。
[システム]
また、図示した装置の各構成は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、任意の単位で分散または統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
なお、本実施例で説明したテストケース生成装置10は、テストケース生成プログラムを読み込んで実行することで、図2等で説明した処理と同様の機能を実行することができる。例えば、テストケース生成装置10は、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20、テストケース出力部21と同様の機能を有するプログラムをメモリに展開する。そして、テストケース生成装置10は、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20、テストケース出力部21と同様の処理を実行するプロセスを実行することで、上記実施例と同様の処理を実行することができる。
このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することができる。
[ハードウェア構成]
上記テストケース生成装置10は、例えば、次のようなハードウェア構成により実現することができる。図17は、ハードウェア構成例を説明する図である。図17に示すように、テストケース生成装置10は、通信インタフェース10a、HDD(Hard Disk Drive)10b、メモリ10c、プロセッサ10dを有する。
プロセッサ10dの一例としては、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、FPGA(Field Programmable Gate Array)、PLD(Programmable Logic Device)等が挙げられる。また、メモリ10cの一例としては、SDRAM(Synchronous Dynamic Random Access Memory)等のRAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ等が挙げられる。
そして、テストケース生成装置10で行われる各種処理機能は、不揮発性記憶媒体などの各種メモリに格納されたプログラムを制御装置が備えるプロセッサで実行することによって実現してもよい。すなわち、入力部13、チェック仕様分析部14、チェック条件生成部15、プログラム変換部16、チェック条件制御部17、シンボリック実行入力部18、シンボリック実行制御部19、シンボリック実行出力部20、テストケース出力部21によって実行される各処理に対応するプログラムがメモリ10cに記録され、各プログラムがプロセッサ10dで実行されてもよい。
10 テストケース生成装置
11 入力情報DB
12 テストケースDB
13 入力部
14 チェック仕様分析部
15 チェック条件生成部
16 プログラム変換部
17 チェック条件制御部
18 シンボリック実行入力部
19 シンボリック実行制御部
20 シンボリック実行出力部
21 テストケース出力部

Claims (6)

  1. コンピュータに、
    入力データが所定条件を満たすことを判定するチェック処理を含んだ対象プログラムを、当該チェック処理を除外した対象プログラムに変換し、
    前記対象プログラムと前記チェック処理の仕様とに基づいて、前記チェック処理が成功する成功条件と前記チェック処理が失敗する失敗条件とを生成し、
    変換された対象プログラムに対してシンボリック実行が行われる際に、前記成功条件と前記失敗条件とを、チェック条件が記述されていた行番号の命令文に追加する
    処理を実行させることを特徴とするテストケース生成プログラム。
  2. 記変換する処理は、前記対象プログラムを、前記チェック処理が成功する第1の対象プログラムと、前記チェック処理が失敗する第2の対象プログラムとに変換し、
    前記追加する処理は、前記第1の対象プログラムに対してシンボリック実行が行われる際に、前記成功条件をパス条件に追加するよう制御し、前記第2の対象プログラムに対してシンボリック実行が行われる際に、前記失敗条件をパス条件に追加するよう制御する
    ことを特徴とする請求項1に記載のテストケース生成プログラム。
  3. 記生成する処理は、前記成功条件の否定文を前記失敗条件として出力することを特徴とする請求項2に記載のテストケース生成プログラム。
  4. 前記変換する処理は、前記対象プログラムに対して前記チェック処理を実行対象外に設定し、前記チェック処理が成功して後続の処理が実行される命令文を追加した前記第1の対象プログラムを生成し、前記チェック処理が失敗した際に実行される命令文を追加した前記第2の対象プログラムを生成することを特徴とする請求項2に記載のテストケース生成プログラム。
  5. コンピュータが、
    入力データが所定条件を満たすことを判定するチェック処理を含んだ対象プログラムを、当該チェック処理を除外した対象プログラムに変換し、
    前記対象プログラムと前記チェック処理の仕様とに基づいて、前記チェック処理が成功する成功条件と前記チェック処理が失敗する失敗条件とを生成し、
    変換された対象プログラムに対してシンボリック実行が行われる際に、前記成功条件と前記失敗条件とを、チェック条件が記述されていた行番号の命令文に追加する
    処理を含むことを特徴とするテストケース生成方法。
  6. 入力データが所定条件を満たすことを判定するチェック処理を含んだ対象プログラムを、当該チェック処理を除外した対象プログラムに変換する変換部と、
    前記対象プログラムと前記チェック処理の仕様とに基づいて、前記チェック処理が成功する成功条件と前記チェック処理が失敗する失敗条件とを生成する生成部と、
    前記変換部によって変換された対象プログラムに対してシンボリック実行が行われる際に、前記成功条件と前記失敗条件とを、チェック条件が記述されていた行番号の命令文に追加する追加制御部と
    を有することを特徴とするテストケース生成装置。
JP2015053771A 2015-03-17 2015-03-17 テストケース生成プログラム、テストケース生成方法およびテストケース生成装置 Active JP6547345B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015053771A JP6547345B2 (ja) 2015-03-17 2015-03-17 テストケース生成プログラム、テストケース生成方法およびテストケース生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015053771A JP6547345B2 (ja) 2015-03-17 2015-03-17 テストケース生成プログラム、テストケース生成方法およびテストケース生成装置

Publications (2)

Publication Number Publication Date
JP2016173756A JP2016173756A (ja) 2016-09-29
JP6547345B2 true JP6547345B2 (ja) 2019-07-24

Family

ID=57009156

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015053771A Active JP6547345B2 (ja) 2015-03-17 2015-03-17 テストケース生成プログラム、テストケース生成方法およびテストケース生成装置

Country Status (1)

Country Link
JP (1) JP6547345B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109062812A (zh) * 2018-09-30 2018-12-21 中电科(德阳广汉)特种飞机系统工程有限公司 基于多条件运行的软件的测试方法、设备及可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5440287B2 (ja) * 2010-03-15 2014-03-12 富士通株式会社 シンボリック実行支援プログラム、方法及び装置
US20140143762A1 (en) * 2012-11-21 2014-05-22 Fujitsu Limited Symbolic execution of dynamic programming languages

Also Published As

Publication number Publication date
JP2016173756A (ja) 2016-09-29

Similar Documents

Publication Publication Date Title
CN108089974B (zh) 利用定义的输入格式来测试应用
US8868976B2 (en) System-level testcase generation
US11269760B2 (en) Systems and methods for automated testing using artificial intelligence techniques
US11250129B2 (en) Method and system for determining affiliation of software to software families
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
JP5342407B2 (ja) プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置
JP6547345B2 (ja) テストケース生成プログラム、テストケース生成方法およびテストケース生成装置
WO2021100156A1 (ja) テストデータ生成装置、テストデータ生成方法、及びプログラム
JP5267243B2 (ja) 動作記述変換装置、動作記述変換方法、およびプログラム
JP2022078962A (ja) エラーに関連するコードの行の自動識別
JP7211139B2 (ja) 校閲方法、情報処理装置および校閲プログラム
JP2018147106A (ja) プログラム分析装置、プログラム分析方法及びプログラム分析プログラム
WO2016189721A1 (ja) ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
JP6630840B2 (ja) ログ分析のためのランドマークデリミタを推定するシステムおよび方法
JP2011113298A (ja) 流用ソースコード解析システム及びプログラム並びに記録媒体
US12001324B2 (en) Operation pattern generation apparatus, operation pattern generation method and program
JP2018121245A (ja) 通信装置、通信仕様差分抽出方法及び通信仕様差分抽出プログラム
JP6828812B2 (ja) 情報処理装置、情報処理方法及びプログラム
WO2021161428A1 (ja) プログラム生成装置、プログラム生成方法及びプログラム
JPWO2017104657A1 (ja) 情報処理装置、情報処理方法、及び、コンピュータ・プログラム
WO2020065960A1 (ja) 情報処理装置、制御方法、及びプログラム
JP2023031614A (ja) 変更度計測装置、方法及びプログラム
JP6497271B2 (ja) テストデータ生成装置、方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180115

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181016

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181217

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190610

R150 Certificate of patent or registration of utility model

Ref document number: 6547345

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150