JP6135466B2 - テストケース抽出プログラム、方法及び装置 - Google Patents

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

Info

Publication number
JP6135466B2
JP6135466B2 JP2013230612A JP2013230612A JP6135466B2 JP 6135466 B2 JP6135466 B2 JP 6135466B2 JP 2013230612 A JP2013230612 A JP 2013230612A JP 2013230612 A JP2013230612 A JP 2013230612A JP 6135466 B2 JP6135466 B2 JP 6135466B2
Authority
JP
Japan
Prior art keywords
program
range
symbolic execution
output
condition
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
JP2013230612A
Other languages
English (en)
Other versions
JP2015090616A (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 JP2013230612A priority Critical patent/JP6135466B2/ja
Publication of JP2015090616A publication Critical patent/JP2015090616A/ja
Application granted granted Critical
Publication of JP6135466B2 publication Critical patent/JP6135466B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、レグレッションテストに関する。
レグレッションテストとは、プログラムに変更を施した際に、その変更が及ぼす影響を特定するテストのことである。1つのプログラムに変更を施した場合には、他のプログラムにまで変更の影響が及ぶ場合が有る。例えば、変更を施したプログラムの出力結果を用いて処理を行う他のプログラムが有る場合には、そのプログラムが変更の影響を受けることがある。
レグレッションテストに関して、以下のような技術が知られている。具体的には、プログラムを解析することにより、そのプログラム内のデータ項目のうちプログラム変更の影響を受けるデータ項目を特定し、そのデータ項目を参照する他のプログラムを抽出する。
また、プログラムのテストケースを実行した際に実行トレースを登録し、登録した実行トレースに基づき、影響を受けるテストケースを抽出する技術が知られている。
しかし、上記の技術を利用すると、動作に影響が無いプログラム或いはテストケースまで抽出されてしまうことがある。このような場合、本来であればテストを行わなくてもよいプログラム或いはテストケースについて再度テストを実行するという、無駄な工数が発生する。
特開2007−133800号公報
Gary A. Kildall, "A Unified Approach to Global Program Optimization", ACM Symposium on Principles of Programming Languages, 1973, pages 194-206.
従って、本発明の目的は、1つの側面では、プログラムの変更によって影響を受ける他のプログラムのテストケースを特定するための技術を提供することである。
本発明に係るテストデータ抽出方法は、第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及びシンボリック実行によって出力される項目の値域を含むテストデータを生成し、変更後の第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、変更前の第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、第2のプログラムについてのテストデータに含まれるパス条件と値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する処理を含む。
1つの側面では、プログラムの変更によって影響を受ける他のプログラムのテストケースを特定できるようになる。
図1は、本実施の形態の概要を説明するための図である。 図2は、本実施の形態の概要を説明するための図である。 図3は、本実施の形態の概要を説明するための図である。 図4は、本実施の形態の概要を説明するための図である。 図5は、本実施の形態の概要を説明するための図である。 図6は、情報処理装置の機能ブロック図である。 図7は、シンボリック実行においてシンボル化される項目を示す図である。 図8は、プログラム格納部に格納されているプログラムによる処理について説明するための図である。 図9は、予め実行する処理の処理フローを示す図である。 図10は、テストケース格納部に格納されるテストケースの一例を示す図である。 図11は、テストケース格納部に格納されるテストケースの一例を示す図である。 図12は、テストケース格納部に格納されるテストケースの一例を示す図である。 図13は、各出力項目の値域の和集合を求める処理の処理フローを示す図である。 図14は、演算データ格納部に格納されるデータの一例を示す図である。 図15は、各出力項目の値域の和集合を求める処理の処理フローを示す図である。 図16は、演算データ格納部に格納されるデータの一例を示す図である。 図17は、値域データ格納部に格納されているデータの一例を示す図である。 図18は、演算データ格納部に格納されるデータの一例を示す図である。 図19は、値域データ格納部に格納されているデータの一例を示す図である。 図20は、演算データ格納部に格納されるデータの一例を示す図である。 図21は、値域データ格納部に格納されているデータの一例を示す図である。 図22は、変更後のプログラムを示す図である。 図23は、テストケース格納部に格納されるテストケースの一例を示す図である。 図24は、値域データ格納部に格納されているデータの一例を示す図である。 図25は、差分演算部が実行する処理の処理フローを示す図である。 図26は、差分演算部が実行する処理を説明するための図である。 図27は、差分演算部が実行する処理を説明するための図である。 図28は、影響テストケース特定部が実行する処理の処理フローを示す図である。 図29は、影響テストケース格納部に格納されるデータの一例を示す図である。 図30は、コンピュータの機能ブロック図である。
図1乃至図5を用いて、本実施の形態の概要について説明する。本実施の形態においては、或るプログラムを変更した場合に、他のプログラムのテストケースのうち影響を受けるテストケースを特定するため、以下のような処理を実行する。
まず、事前の処理として、図1に示す処理が行われる。具体的には、関連する複数のプログラムの各々について、シンボリック実行を行う。図1においては、プログラム1と、プログラム2と、プログラム3とについてシンボリック実行を行っている。そして、各プログラムについてテストケースを生成する。テストケースには、プログラム内のパスを特定するための条件であるパス条件と、プログラムの実行の結果として出力される項目(以下、出力項目と呼ぶ)の値域とが含まれる。図1の例では、各プログラムについて2つのテストケースが生成される。但し、プログラム3における、パス条件が「x!=100」であるテストケースのように、テストケースに含まれる出力項目が空である(すなわち、出力項目が無い)場合がある。そして、各プログラムの各テストケースについて、出力項目の値域の和集合を求める。例えばプログラム1については、出力項目aについて、「a=1」と「a=0」との和集合「a=1or0」を求め、出力項目bについて、「b=0」と「b=0」との和集合「b=0」を求める。
なお、シンボリック実行については、例えば、玉井哲雄、福永光一、「記号実行システム」、情報処理、pp18-28、1982/01/15などに詳しく述べられているので、そちらを参照されたい。
ここで、プログラム1に変更が施されたとする。すると、図2に示すように、プログラム1について、図1を用いて説明した処理を再度実行する。そして、プログラム1の出力項目a及び出力項目bについて、値域の和集合を求める。この例では、aについては「a=−1or0」であり、bについては「b=0」である。
そして、図3に示すように、プログラム1について、変更前における、出力項目の値域の和集合と、変更後における、出力項目の値域の和集合とを比較する。本例では、出力項目a及び出力項目bの各々について、値域の和集合を比較し、変化があった領域を求める。出力項目bについては、変更前後で値域の和集合に変化は無いが、出力項目aについては、変更前後で値域の和集合に変化がある。具体的には、変更前においては「a=1」が値域の和集合に含まれていたが変更後には含まれておらず、変更後においては「a=−1」が値域の和集合に含まれているが変更前には含まれていない。したがって、変更前後における値域の変化部分は「a=1ora=−1」と表すことができる。
プログラム1を変更したことにより、関連するプログラム2及びプログラム3が影響を受ける可能性がある。そこで、プログラム2及びプログラム3について、影響を受けるテストケースを特定する。まず、図4に示すように、プログラム2及びプログラム3について、パス条件を抽出する。図4の例では、プログラム2について、「a>1」及び「a<=1」が抽出され、プログラム3について、「x=100」及び「x!=100」が抽出される。
そして、図5に示すように、プログラム2及びプログラム3について抽出されたパス条件に、値域が変化した出力項目(出力項目a)が含まれるか判定する。本例では、「a>1」及び「a<=1」には出力項目aが含まれ、「x=100」及び「x!=100」には出力項目aが含まれない。そこで、「a>1」及び「a<=1」についてさらなる判定を行う。具体的には、パス条件と出力項目aの値域の変化を表す式とをand(すなわち論理積)で結合し、解が有るか判定する。「a<=1 and (a=1ora=−1)」には、a=1という解が有り、「a>1 and (a=1ora=−1)」には、解が無い。そこで、「a<=1」についてさらなる判定を行う。具体的には、「a<=1」というパス条件についてのテストケース(図5におけるテストケース50)に、出力項目が有るか(すなわち、何らかの出力が有るか)判定する。本例では、c及びdという出力項目が有る。よって、テストケース50は、プログラム1に施した変更に影響を受けるテストケース(以下、影響テストケースと呼ぶ)である。
プログラム内には複数のパスが存在する場合があり、変更の影響が全てのパスのテストケースに及ぶとは限らない。そこで、図1乃至図5に示したようにすれば、プログラムのテストケースのうち、他のプログラムに施した変更に影響を受けるテストケースを特定できるようになる。これにより、再度テストを実行すべきテストケースを少なくすることができるので、プログラム変更時における工数を削減できるようになる。
以下では、本実施の形態の詳細な内容について説明する。
図6に、本実施の形態における情報処理装置1の機能ブロック図を示す。情報処理装置1は、プログラム格納部101と、変更後プログラム格納部102と、シンボリック実行部103と、入力項目格納部104と、採番テーブル格納部105と、メンバテーブル格納部106と、テストケース格納部107と、値域特定部108と、演算データ格納部109と、値域データ格納部110と、差分演算部111と、差分データ格納部112と、影響テストケース特定部113と、影響テストケース格納部114とを含む。
プログラム格納部101には、本実施の形態における処理の対象になる、関連する複数のプログラムが格納される。変更後プログラム格納部102には、プログラム格納部101に格納されているプログラムのうち、変更されたプログラムが格納される。
シンボリック実行部103は、プログラム格納部101に格納されているプログラムについて、入力項目格納部104に格納されているデータ、採番テーブル格納部105に格納されているデータ、及びメンバテーブル格納部106に格納されているデータを用いてシンボリック実行を行う。そして、シンボリック実行部103は、シンボリック実行の結果(本実施の形態においては、テストケース)をテストケース格納部107に格納する。同様に、シンボリック実行部103は、変更後プログラム格納部102に格納されている、変更後のプログラムについて、入力項目格納部104に格納されているデータ、採番テーブル格納部105に格納されているデータ、及びメンバテーブル格納部106に格納されているデータを用いてシンボリック実行を行う。そして、シンボリック実行部103は、シンボリック実行の結果をテストケース格納部107に格納する。
値域特定部108は、テストケース格納部107に格納されているデータ及び演算データ格納部109に格納されているデータを用いて処理を行い、処理結果を値域データ格納部110に格納する。差分演算部111は、値域データ格納部110に格納されているデータを用いて処理を行い、処理結果を差分データ格納部112に格納する。影響テストケース特定部113は、差分データ格納部112に格納されているデータを用いて処理を行い、処理結果を影響テストケース格納部114に格納する。
図7に、シンボリック実行においてシンボル化される項目を示す。入力項目格納部104には、ユーザから入力された入力項目である、ユーザ名(name)及びランク(rank)が格納されるが、これらの入力項目がシンボリック実行においてシンボル化される。また、採番テーブル格納部105に格納される採番テーブルには、現在の番号という項目(currentId)が格納されるが、この項目もシンボル化される。メンバテーブル格納部106に格納されるメンバテーブルにおいては、シンボル化される項目は無い。
図8を用いて、プログラム格納部101に格納されているプログラムによる処理について説明する。本実施の形態においては、図8に示したプログラム「createMember」、プログラム「calculateDiscount」及びプログラム「sendMail」がプログラム格納部101に格納される。プログラム「createMember」は、「rank」が1又は2である場合にメンバテーブルにメンバの情報を追加するプログラムである。プログラム「calculateDiscount」は、メンバテーブルに格納されたメンバの情報を参照し、「rank」に紐付く割引率によって計算を行うプログラムである。プログラム「sendMail」は、メンバテーブルに格納されたメンバの情報を参照し、「rank」が2以上であればメールを送信するプログラムである。このように、プログラム「calculateDiscount」及びプログラム「sendMail」は、プログラム「createMember」の出力項目を使用して処理を行う。
次に、図9乃至図29を用いて、情報処理装置1の動作について説明する。
まず、図9乃至図21を用いて、予め実行する処理について説明する。なお、本処理を実行する段階では、変更後プログラム格納部102には変更後のプログラムは格納されていない。
シンボリック実行部103は、プログラム格納部101に格納されているプログラムの中から、未処理のプログラムを1つ特定する(図9:ステップS1)。シンボリック実行部103は、特定されたプログラムについてシンボリック実行を行い(ステップS3)、シンボリック実行の結果(本実施の形態においては、テストケース)をテストケース格納部107に格納する。
シンボリック実行部103は、プログラム格納部101に未処理のプログラムが有るか判断する(ステップS5)。未処理のプログラムが有る場合(ステップS5:Yesルート)、未処理のプログラムについて処理するため、ステップS1の処理に戻る。一方、未処理のプログラムが無い場合(ステップS5:Noルート)、処理を終了する。
以上のような処理を実行すれば、各プログラムについてテストケースを用意することができる。
図10乃至図12に、テストケース格納部107に格納されるテストケースの一例を示す。図10は、プログラム「createMember」についてのテストケースであり、図11は、プログラム「calculateDiscount」についてテストケースであり、図12は、プログラム「sendMail」についてのテストケースである。各テストケースには、テストケースの番号と、プログラム名と、パス条件と、出力項目の値域とが含まれる。なお、番号が3であるテストケース及び番号が22であるテストケースのように、出力項目の値域を含まない場合もある。また、番号が20であるテストケースのように、別のプログラム或いは関数の呼び出しを出力項目として取り扱う場合もある。
次に、図13乃至図21を用いて、各出力項目の値域の和集合を求める処理について説明する。本処理は、各プログラムについて行われる。
まず、値域特定部108は、テストケース格納部107から未処理のテストケースを1つ特定する(図13:S11)。そして、値域特定部108は、特定されたテストケースからデータ(ここでは、プログラム名、出力項目、出力項目の値域、及びパス条件)を抽出し、演算データ格納部109に格納する(ステップS13)。
図14に、演算データ格納部109に格納されるデータの一例を示す。図14の例では、プログラム名と、出力項目と、出力項目の値域と、パス条件とが格納される。ステップS13の処理の時点では、「パス条件代入後の値域」の欄には何も格納されない。
図13の説明に戻り、値域特定部108は、テストケース格納部107に未処理のテストケースが有るか判断する(ステップS15)。未処理のテストケースが有る場合(ステップS15:Yesルート)、未処理のテストケースについて処理するため、ステップS11の処理に戻る。一方、未処理のテストケースが無い場合(ステップS15:Noルート)、値域特定部108は、演算データ格納部109から未処理の行を1つ特定する(ステップS17)。
値域特定部108は、特定された行について、出力項目の値域にパス条件を代入し、結果を同じ行における「パス条件代入後の値域」の欄に格納する(ステップS19)。
値域特定部108は、未処理の行が有るか判断する(ステップS21)。未処理の行が有る場合(ステップS21:Yesルート)、未処理の行について処理するため、ステップS17の処理に戻る。一方、未処理の行が無い場合(ステップS21:Noルート)、処理は端子Aを介して図15のステップS23の処理に移行する。
図16に、未処理の行が無くなった時点における演算データ格納部109に格納されるデータの一例を示す。図16の例では、図14と比較すると、「パス条件代入後の値域」の欄にデータが格納されている。1、2、3、4、7及び8行目の「パス条件代入後の値域」の欄に格納されるデータは、パス条件が代入されたにもかかわらず、出力項目の値域の欄に格納されるデータと差異が無い。これは、出力項目の値域に、「Sym_rank」が含まれていないためである。これに対して、5及び6行目における出力項目の値域には、「Sym_rank」が含まれているため、「出力項目の値域」と「パス条件代入後の出力項目の値域」とが異なっている。
次に、図15の端子A以降の処理について説明する。値域特定部108は、演算データ格納部109から未処理の行を1つ特定する(図15:ステップS23)。
値域特定部108は、値域データ格納部110において、特定された行の出力項目を含む行を探索する(ステップS25)。値域特定部108は、行が検出されたか判断する(ステップS27)。行が検出されない場合(ステップS27:Noルート)、値域特定部108は、ステップS23において特定された行のデータ(ここでは、プログラム名、出力項目、及び出力項目の値域)を値域データ格納部110に格納する(ステップS29)。
図17に、値域データ格納部110に格納されているデータの一例を示す。図17の例では、プログラム名と、出力項目と、値域の和集合とが格納される。なお、ステップS27のNoルートを経由する場合、値域の和集合に格納されるデータは、出力項目の値域である。
一方、行が検出された場合(ステップS27:Yesルート)、値域特定部108は、ステップS27において検出された行の和集合が、ステップS23において特定された行におけるパス条件代入後の値域を含むか判定する(ステップS31)。特定された行におけるパス条件代入後の値域を含む場合(ステップS33:Yesルート)、新たに値域を追加しなくてもよいので、ステップS37の処理に移行する。特定された行におけるパス条件代入後の値域を含まない場合(ステップS33:Noルート)、値域特定部108は、検出された行の和集合と、特定された行におけるパス条件代入後の値域とを、論理和(OR)で接続する(ステップS35)。そしてステップS37の処理に移行する。
値域特定部108は、演算データ格納部109に未処理の行が有るか判断する(ステップS37)。未処理の行が有る場合(ステップS37:Yesルート)、未処理の行について処理するため、ステップS23の処理に戻る。一方、未処理の行が無い場合(ステップS37:Noルート)、処理を終了する。
以上のような処理を行うことで、テストケース毎の値域を、出力項目毎に整理することができる。そして、プログラムに変更が施された際に、整理されたデータを利用して処理を行うことができるようになる。
同様に、プログラム「createDiscount」のテストケースについて、上で述べた処理によって、図18に示すデータが演算データ格納部109に格納されたとする。すると、値域データ格納部110には、図19に示すデータが格納される。
また、プログラム「sendMail」のテストケースについて、上で述べた処理によって、図20に示すデータが演算データ格納部109に格納されたとする。すると、値域データ格納部110には、図21に示すデータが格納される。
ここで、図8に示したプログラム「createMember」の2行目にコードが追加され、図22に示すように変更されたとする。図22においては、変更により新たに追加された部分に下線が付されている。この変更により、「rank」が1又は2ではない場合だけでなく、「rank」が0ではない場合も例外として取り扱われる。
図22に示したプログラムが、変更後プログラム格納部102に格納されると、シンボリック実行部103は、変更後のプログラム「createMember」について再度シンボリック実行を行う。すると、図23に示すようなテストケースが生成され、テストケース格納部107に格納される。図23に示した、番号が3であるテストケースは、図10には無かったテストケースである。図23に示した、番号が4であるテストケースは、図10に示した、番号が3であるテストケースに相当するが、パス条件に「&&Sym_rank!=0」が新たに追加されている。また、図23に示したテストケースについて、値域特定部108が処理を行うと、図24に示すように値域の和集合が求められ、値域データ格納部110に格納される。
次に、図25乃至図29を用いて、影響テストケースを特定する処理について説明する。まず、図25乃至図27を用いて、差分演算部111が実行する処理について説明する。
まず、差分演算部111は、値域データ格納部110に格納されている、プログラムの変更前後における値域の和集合を比較し、値域の和集合が変化した出力項目を特定する(図25:ステップS41)。例えば、図17に示した和集合と、図24に示した和集合とを比較すると、出力項目「メンバテーブル.rank」が特定される。そして、差分演算部111は、ステップS41において特定された出力項目の中から未処理の出力項目を1つ選択する(ステップS43)。
差分演算部111は、ステップS43において選択された出力項目について、変更前の和集合と変更後の和集合の否定との論理積を計算する(ステップS45)。ステップS45の処理について、図26を用いて説明する。図26においては、変更前における各出力項目の値域の和集合261と、変更後における各出力項目の値域の和集合262とが示されている。選択された出力項目が「メンバテーブル.rank」である場合、変更前の和集合263として「rank=1 or rank=2」が抽出され(図を見やすくするため、「メンバテーブル.」の部分を省略している)、変更後の和集合の否定264として「not(rank=1 or rank=2 or rank=0)」が抽出される。そして、両者の論理積である、「(rank=1 or rank=2) and not(rank=1 or rank=2 or rank=0)」が計算される。
差分演算部111は、ステップS43において選択された出力項目について、変更前の和集合の否定と変更後の和集合との論理積を計算する(ステップS47)。ステップS47の処理についても、図26を用いて説明する。ステップS47においては、変更前の和集合の否定265として「not(rank=1 or rank=2)」が抽出され、変更後の和集合266として「rank=1 or rank=2 or rank=0」が抽出される。そして、両者の論理積である、「not(rank=1 or rank=2) and (rank=1 or rank=2 or rank=0)」が計算される。
差分演算部111は、計算された2つの論理積の論理和を簡約化することで、出力項目の値域の変化部分を表す式を計算し、差分データ格納部112に格納する(ステップS49)。図26においては、計算された2つの論理積の論理和267が示されている。そして、論理和267を簡約化することで、出力項目の値域の変化部分を表す式268(メンバテーブル.rank=0)が求められる。さらに図27を用いて、ステップS45乃至S49の処理を説明する。図27においては、斜線が付された楕円が、値域を表している。ステップS45乃至S49の処理によれば、図27に示すように、変更前にのみ存在する値域及び変更後にのみ存在する値域(2つの楕円が重なっていない部分)が特定される。
差分演算部111は、未処理の出力項目が有るか判断する(ステップS51)。未処理の出力項目が有る場合(ステップS51:Yesルート)、未処理の出力項目について処理するため、ステップS43の処理に戻る。一方、未処理の出力項目が無い場合(ステップS51:Noルート)、処理を終了する。
このように、プログラムの変更による出力項目の値域の変化部分を表す式を算出しておくことで、影響テストケース特定部113の処理に利用できるようになる。
そして、影響テストケース特定部113は、以下のような処理を実行する。図28及び図29を用いて、影響テストケース特定部113が実行する処理について説明する。
まず、影響テストケース特定部113は、差分データ格納部112に格納されている、出力項目の値域の変化部分を表す式のうち、未処理の式を1つ特定する(図28:ステップS61)。そして、影響テストケース特定部113は、特定された式に含まれる出力項目を、シンボル項目に置き換える(ステップS63)。出力項目の値域の変化部分を表す式が、例えば「メンバテーブル.rank」である場合には、出力項目をシンボル項目に置き換えることで、「Sym_member.rank=0」という式を生成する。
影響テストケース特定部113は、テストケース格納部107に格納されている、他のプログラム(ここでは、プログラム「calculateDiscount」及びプログラム「sendMail」)についてのテストケースの中から、未処理のテストケースを1つ特定する(ステップS65)。
影響テストケース特定部113は、特定されたテストケースのパス条件の中に、ステップS63において置き換えを行ったシンボル項目(上の例では、Sym_member.rank)が有るか判定する(ステップS67)。シンボル項目が無い場合(ステップS69:Noルート)、プログラム「createMember」に施した変更の影響を受けないので、ステップS81の処理に移行する。
シンボル項目が有る場合(ステップS69:Yesルート)、影響テストケース特定部113は、ステップS61において特定された式と、ステップS65において特定されたテストケースのパス条件との論理積を求め、解が存在するか判定する(ステップS71)。解が存在しない場合(ステップS73:Noルート)、プログラム「createMember」に施した変更の影響を受けないので、ステップS81の処理に移行する。
解が存在する場合(ステップS73:Yesルート)、影響テストケース特定部113は、ステップS65において特定されたテストケースの出力項目が空である(すなわち、出力項目が無い)か判定する(ステップS75)。空である場合(ステップ77:Yesルート)、ステップS81の処理に移行する。
空ではない場合(ステップS77:Noルート)、影響テストケース特定部113は、ステップS65において特定されたテストケースを影響テストケース格納部114に格納する(ステップS79)。
影響テストケース特定部113は、未処理のテストケースが有るか判断する(ステップS81)。未処理のテストケースが有る場合(ステップS81:Yesルート)、未処理のテストケースについて処理するため、ステップS65の処理に戻る。
一方、未処理のテストケースが無い場合(ステップS81:Noルート)、影響テストケース特定部113は、未処理の式が有るか判断する(ステップS83)。未処理の式が有る場合(ステップS83:Yesルート)、未処理の式について処理するため、ステップS61の処理に戻り、未処理の式が無い場合(ステップS83:Noルート)、処理を終了する。
例えば、図11に示したプログラム「calculateDiscount」についてのテストケース及び図12に示したプログラム「sendMail」についてのテストケースの中から、プログラム「createMember」の変更に影響を受けるテストケースを特定することを考える。
番号が10であるテストケースのパス条件には「Sym_member.rank」が有り、また「Sym_member.rank=0」と番号が10であるテストケースのパス条件との論理積の解が存在し、且つ出力項目が空ではない。よって、番号が10であるテストケースは、影響を受けるテストケースであると判定される。
番号が11であるテストケースのパス条件には「Sym_member.rank」が無いので、番号が11であるテストケースは、影響を受けるテストケースではないと判定される。
番号が12であるテストケースのパス条件には「Sym_member.rank」が有り、また「Sym_member.rank=0」と番号が12であるテストケースのパス条件との論理積の解が存在し、且つ出力項目が空ではない。よって、番号が12であるテストケースは、影響を受けるテストケースであると判定される。
番号が20であるテストケースのパス条件には「Sym_member.rank」が有るが、「Sym_member.rank=0」と番号が20であるテストケースのパス条件との論理積の解が存在しない。よって、番号が20であるテストケースは、影響を受けるテストケースではないと判定される。
番号が21であるテストケースのパス条件には「Sym_member.rank」が無いので、番号が21であるテストケースは、影響を受けるテストケースではないと判定される。
番号が22であるテストケースのパス条件には「Sym_member.rank」が有り、また「Sym_member.rank=0」と番号が22であるテストケースのパス条件との論理積の解が存在するが、出力項目が空である。よって、番号が22であるテストケースは、影響を受けるテストケースではないと判定される。
すると、最終的には、図29に示すようなデータが影響テストケース格納部114に格納される。本実施の形態で示した例の場合には、影響を受けるテストケースは2つである。
以上のように、本実施の形態においては、出力項目の値域の変化を抽出しているので、他のプログラムのテストケースのうち、変更の影響が及ぶテストケースを特定できるようになる。これにより、再度テストを実行すべきテストケースを少なくすることができるので、プログラム変更時における工数を削減できるようになる。
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置1の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
なお、上で述べた情報処理装置1は、コンピュータ装置であって、図30に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係るテストデータ抽出方法は、(A)第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及びシンボリック実行によって出力される項目の値域を含むテストデータを生成し、(B)変更後の第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、(C)変更前の第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、(D)第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、第2のプログラムについてのテストデータに含まれるパス条件と値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する処理を含む。
プログラム内には複数のパスが存在する場合があり、変更の影響が全てのパスのテストデータに及ぶとは限らない。そこで、上で述べたようにすれば、プログラムのテストデータのうち、他のプログラムに施した変更に影響を受けるテストデータを特定できるようになる。これにより、再度テストを実行すべきテストデータを少なくすることができるので、プログラム変更時における工数を削減できるようになる。
また、上で述べた判定する処理において、(d1)第2のプログラムについてのテストデータにおける、シンボリック実行によって出力される項目が、空ではないという第3の条件がさらに満たされるか判定してもよい。そもそも出力される項目が無ければ、出力される項目の値を利用する処理等が無いので、再度のテストを実行しなくてもよい。
また、上で述べた値域が変化した部分を表す式を計算する処理において、(c1)第1の値域と第2の値域の否定との論理積と、第1の値域の否定と第2の値域との論理積との論理和を計算してもよい。このようにすれば、変更前のみに存在する値域及び変更後のみに存在する値域を表す式を計算できるようになる。
また、シンボリック実行によって出力される項目の値域は、シンボリック実行において当該項目について得られる1又は複数の値域の和集合であってもよい。このようにすれば、出力される項目の値域を適切に特定できるようになる。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成し、
変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、
変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、
前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する
処理をコンピュータに実行させるためのテストデータ抽出プログラム。
(付記2)
前記判定する処理が、
前記第2のプログラムについてのテストデータにおける、前記シンボリック実行によって出力される項目が、空ではないという第3の条件がさらに満たされるか判定する
処理を含む付記1記載のテストデータ抽出プログラム。
(付記3)
前記値域が変化した部分を表す式を計算する処理が、
前記第1の値域と前記第2の値域の否定との論理積と、前記第1の値域の否定と前記第2の値域との論理積との論理和を計算する処理
を含む付記1又は2記載のテストデータ抽出プログラム。
(付記4)
前記シンボリック実行によって出力される項目の値域は、前記シンボリック実行において当該項目について得られる1又は複数の値域の和集合である
ことを特徴とする付記1乃至3のいずれか1つ記載のテストデータ抽出プログラム。
(付記5)
第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成し、
変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、
変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、
前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する
処理をコンピュータが実行するテストデータ抽出方法。
(付記6)
第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成すると共に、変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定するシンボリック実行部と、
変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算する計算部と、
前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する判定部と、
を有するテストデータ抽出装置。
1 情報処理装置 101 プログラム格納部
102 変更後プログラム格納部 103 シンボリック実行部
104 入力項目格納部 105 採番テーブル格納部
106 メンバテーブル格納部 107 テストケース格納部
108 値域特定部 109 演算データ格納部
110 値域データ格納部 111 差分演算部
112 差分データ格納部 113 影響テストケース特定部
114 影響テストケース格納部

Claims (6)

  1. 第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成し、
    変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、
    変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、
    前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する
    処理をコンピュータに実行させるためのテストデータ抽出プログラム。
  2. 前記判定する処理が、
    前記第2のプログラムについてのテストデータにおける、前記シンボリック実行によって出力される項目が、空ではないという第3の条件がさらに満たされるか判定する
    処理を含む請求項1記載のテストデータ抽出プログラム。
  3. 前記値域が変化した部分を表す式を計算する処理が、
    前記第1の値域と前記第2の値域の否定との論理積と、前記第1の値域の否定と前記第2の値域との論理積との論理和を計算する処理
    を含む請求項1又は2記載のテストデータ抽出プログラム。
  4. 前記シンボリック実行によって出力される項目の値域は、前記シンボリック実行において当該項目について得られる1又は複数の値域の和集合である
    ことを特徴とする請求項1乃至3のいずれか1つ記載のテストデータ抽出プログラム。
  5. 第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成し、
    変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定し、
    変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算し、
    前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する
    処理をコンピュータが実行するテストデータ抽出方法。
  6. 第1のプログラム及び第2のプログラムの各々について、シンボリック実行を行い、プログラム内のパスを特定するための条件であるパス条件及び前記シンボリック実行によって出力される項目の値域を含むテストデータを生成すると共に、変更後の前記第1のプログラムについてシンボリック実行を行い、当該シンボリック実行によって出力される項目の値域を特定するシンボリック実行部と、
    変更前の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第1の値域と、変更後の前記第1のプログラムについてのシンボリック実行により出力される項目の値域である第2の値域とを用いて、値域が変化した部分を表す式を計算する計算部と、
    前記第2のプログラムについてのテストデータに含まれるパス条件が、値域が変化した項目を含むという第1の条件、及び、前記第2のプログラムについてのテストデータに含まれるパス条件と前記値域が変化した部分を表す式との論理積に解が存在するという第2の条件が満たされるか判定する判定部と、
    を有するテストデータ抽出装置。
JP2013230612A 2013-11-06 2013-11-06 テストケース抽出プログラム、方法及び装置 Active JP6135466B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013230612A JP6135466B2 (ja) 2013-11-06 2013-11-06 テストケース抽出プログラム、方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013230612A JP6135466B2 (ja) 2013-11-06 2013-11-06 テストケース抽出プログラム、方法及び装置

Publications (2)

Publication Number Publication Date
JP2015090616A JP2015090616A (ja) 2015-05-11
JP6135466B2 true JP6135466B2 (ja) 2017-05-31

Family

ID=53194101

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013230612A Active JP6135466B2 (ja) 2013-11-06 2013-11-06 テストケース抽出プログラム、方法及び装置

Country Status (1)

Country Link
JP (1) JP6135466B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017199517A1 (ja) * 2016-05-19 2017-11-23 株式会社Nttドコモ 試験選択装置
US20190377667A1 (en) 2017-02-16 2019-12-12 Mitsubishi Electric Corporation Test case selection apparatus and computer readable medium

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5825163B2 (ja) * 2012-03-19 2015-12-02 富士通株式会社 情報処理装置、情報処理方法、および情報処理プログラム
WO2013161195A1 (ja) * 2012-04-26 2013-10-31 日本電気株式会社 プログラム単体テスト支援装置

Also Published As

Publication number Publication date
JP2015090616A (ja) 2015-05-11

Similar Documents

Publication Publication Date Title
US9983984B2 (en) Automated modularization of graphical user interface test cases
JP6003699B2 (ja) テストデータ生成プログラム、方法及び装置
US20230044789A1 (en) Indexing Native Application Data
JP6230725B2 (ja) 因果関係分析装置、及び因果関係分析方法
JP6135466B2 (ja) テストケース抽出プログラム、方法及び装置
WO2016063502A1 (ja) 知識管理装置、知識管理方法、及び、プログラムの記録媒体
JP5440287B2 (ja) シンボリック実行支援プログラム、方法及び装置
US20170249314A1 (en) Apparatus and method to determine a predicted-reliability of searching for an answer to question information
JP6142724B2 (ja) テストデータ生成プログラム、方法及び装置
CN112783574A (zh) 应用程序开发方法、装置、设备和存储介质
CN110347577B (zh) 一种页面测试方法、装置及其设备
CN113778437A (zh) 一种rpa元素精准定位方法
US9268560B2 (en) Displaying dependent files for computer code in a tabbed-application user interface
JP2012014684A (ja) 名寄せ支援処理装置、方法及びプログラム
CN113553251A (zh) 一种应用于软件测试的mock测试方法
JP2017041196A (ja) スタブ化対象判定装置、方法、及びプログラム
CN113642295B (zh) 页面排版方法、装置及计算机程序产品
US11960560B1 (en) Methods for analyzing recurring accessibility issues with dynamic web site behavior and devices thereof
JP6087472B2 (ja) プログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラム
JP2014127091A (ja) テストデータ生成方法、プログラム及び装置
CN113656443B (zh) 数据拆解方法、装置、电子设备和存储介质
WO2012035754A1 (ja) データ統合処理装置、システム、方法及びプログラム
US11157923B1 (en) Dynamically determining procurement user types
Abascal et al. Critique of Barbosa's" P!= NP Proof"
US8572531B2 (en) Timing verification support device generating second circuit data including circuit elements identified from first circuit data and timing verification support method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160705

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170314

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170410

R150 Certificate of patent or registration of utility model

Ref document number: 6135466

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150