以下に添付図面を参照して、この発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。
図1は、情報処理装置によるリグレッションテストのテスト結果の信頼度決定の流れを示す説明図である。情報処理装置100は、リグレッションテストのテスト結果の信頼度を決定するコンピュータである。
また、情報処理装置100は、テストケース群TCsを用いて、プログラムP1のテストを実行する。テストケース群TCsは、いわゆるテストスイートである。テストケースTCは、プログラムPへのテスト入力値と、当該テスト入力値に対する期待値と、を対応付けたデータである。また、情報処理装置100は、プログラムP1からプログラムP2に変更された場合、プログラムP1のテストに使用したテストケース群TCsを流用して、プログラムP2のリグレッションテストを実行する。
図1の例では、テストケース群TCsのうちテストケースTC1を例に挙げて、情報処理装置100による信頼度決定の流れについて説明する。
(1)まず、情報処理装置100は、プログラムP1に対してテストケースTC1を入力して、テストを実行する。この場合、プログラムP1からの返値は期待値通りになるとする。そのため、情報処理装置100は、テストケースTC1に対するプログラムP1のテスト結果を「成功」とする。(2)次に、情報処理装置100の利用者により、プログラムP1がプログラムP2に変更されたとする。
(3)そして、情報処理装置100は、プログラムP1が変更された場合、変更前のプログラムP1のテストの実行に使用したテストケースTC1を流用して、変更後のプログラムP2のリグレッションテストを実行する。この場合、変更後のプログラムP2からの返値は、変更前後において同一の値になるとする。そのため、情報処理装置100は、テストケースTC1に対する変更後のプログラムP2のリグレッションテストのテスト結果を「成功」とする。
(4)ここで、情報処理装置100は、(3)のテスト結果が信頼できるか否かを判定する。テスト結果が信頼できない場合とは、例えば、変更前後の返値が、偶々、同一の値になって、テスト結果が「成功」になった場合である。
情報処理装置100は、例えば、(3)のテスト結果が信頼できるか否かを判定するため、変更前後のプログラムP1,P2をシンボリック実行し、シンボリック実行結果を取得する。シンボリック実行(Symbolic Execution)とは、「記号実行」とも呼ばれる。
シンボリック実行とは、プログラムPの変数に具体的な確定値を入力する代わりにシンボル値と呼ばれる記号値を入力して、シンボル値のままプログラムPを模擬的に実行し、プログラムPの実行結果を評価する技術である。
シンボリック実行結果には、例えば、変更前後のプログラムP1,P2のパス群の各パスに関する返値を示す数式が含まれる。また、シンボリック実行結果には、例えば、変更前後のプログラムP1,P2のパス群の各パスに関する条件式の系列を示すパスコンディションが含まれる。
パスとは、プログラムPをシンボリック実行した場合に得られる命令文の系列である。パスコンディションとは、プログラムPに記述されたif文等の条件式から単純に算出されるものではなく、実行可能パスについて、条件式の間に実行された変数の更新結果も取り込んだ条件式の系列である。換言すれば、パスコンディションとは、実行可能パスが終了するまでに経由する条件である。したがって、単なる命令文の系列とは異なる。
次に、情報処理装置100は、変更前のパスコンディションに変更後のパスコンディションが包含され、かつ、変更前後の数式が一致する場合に、(3)のテスト結果が信頼できると判定する。図1の例では、(5)情報処理装置100は、変更前後の数式が異なるため、(3)のテスト結果が信頼できず、信頼度は「要確認」であると決定する。信頼度決定の詳細については図10〜図25を用いて後述する。
これにより、情報処理装置100は、偶々、変更前後のプログラムP1,P2の返値が一致し、リグレッションテストのテスト結果が「成功」になる場合に、情報処理装置100の利用者に、信頼度「要確認」を通知することができる。
結果として、情報処理装置100の利用者は、リグレッションテストのテスト結果が「成功」であっても、信頼度「要確認」の通知を受けることにより、誤りのあるプログラムPを正しいプログラムPと誤認してしまうことを防止することができる。
また、情報処理装置100の利用者は、信頼度「要確認」の通知を受け、変更後のプログラムPに誤りがあるか否かを確認し、誤りがあればプログラムPを修正することができる。また、情報処理装置100の利用者は、信頼度「要確認」の通知を受けた場合、テストケースTCを増加させて、変更後のプログラムPのテストを実行することができる。
また、図1の例では、情報処理装置100が変更前後のプログラムP1,P2に対してテスト実行を行ったが、これに限らない。例えば、情報処理装置100の外部に存在する他の情報処理装置によって変更前後のプログラムP1,P2に対するテスト実行が行われてもよい。
(情報処理装置100のハードウェア構成例)
次に、図2を用いて、図1に示した情報処理装置100として使用されるコンピュータの一例について説明する。
図2は、実施の形態にかかる情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、CPU(Central Processing Unit)201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ(Hard Disk Drive)204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、I/F(Interface)209と、キーボード210と、マウス211と、スキャナ212と、プリンタ213と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。
ここで、CPU201は、情報処理装置100の全体の制御を司る。ROM202は、ブートプログラムPなどのプログラムPを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御に従って磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
光ディスクドライブ206は、CPU201の制御に従って光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、例えば、液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
インターフェース(以下、「I/F」と略する。)209は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク214に接続され、このネットワーク214を介して他の装置に接続される。そして、I/F209は、ネットワーク214と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F209には、例えばモデムやLANアダプタなどを採用することができる。
キーボード210は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス211は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ212は、画像を光学的に読み取り、情報処理装置100内に画像データを取り込む。なお、スキャナ212は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ213は、画像データや文書データを印刷する。プリンタ213には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。なお、光ディスクドライブ206、光ディスク207、ディスプレイ208、キーボード210、マウス211、スキャナ212、およびプリンタ213の少なくともいずれか1つは、なくてもよい。
次に、図3〜図8を用いて、情報処理装置100により信頼度決定に使用される変更前後のプログラムP1,P2および変更前後のプログラムP1,P2に対するテスト結果の一例を示す。
(変更前のプログラムP1)
図3は、変更前のプログラムP1の一例を示す説明図である。符号301のソースコードに示すように、プログラムP1は、変数「x,y」を入力にし、変数「rtn」を返値にする。また、プログラムP1は、2個のif文と1個の更新文が記述されている。そのため、符号302のフロー図に示すように、プログラムP1は、2個のif文による条件分岐に依存して、3つのパスP11,P12,P13を含む。
(変更前のプログラムP1に対するテスト結果)
図4は、図3に示したプログラムP1に対するテスト結果の一例を示す説明図である。図4に示すように、プログラムP1に対するテスト結果は、例えば、情報処理装置100が有する変更前テスト結果テーブル400に格納される。変更前テスト結果テーブル400は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置により実現される。
変更前テスト結果テーブル400は、テストケース項目のそれぞれに対応付けて、テスト入力値項目と、期待値項目と、返値項目と、テスト結果項目と、備考項目と、を有し、テストケースTCごとにレコードを構成する。
テストケース項目には、テストケースTCの識別子が記憶される。テスト入力値項目には、テストケース項目のテストケースTCに対応するテスト入力値が記憶される。期待値項目には、テスト入力値項目のテスト入力値に対する期待値が記憶される。返値項目には、テスト入力値項目のテスト入力値に対するプログラムP1からの返値が記憶される。テスト結果項目には、テストが成功か否かが記憶される。テストが成功とは、返値と期待値が一致することをいう。備考項目には、テストケース項目のテストケースTCが、どのパスをテストしたテストケースTCであるかが記憶される。
図4の例では、変更前テスト結果テーブル400には、テスト入力値「(0,0)」に対する期待値が「2」になる「テストケースTC2」に関するレコードが記憶されている。変更前テスト結果テーブル400には、テストケースTC2に対応付けて、返値が「2」であることと、返値が期待値と一致するためテスト結果が「成功」であることと、が記憶されている。また、変更前テスト結果テーブル400には、テストケースTC2が「パスP12」をテストしたテストケースTCであることが記憶されている。
(変更後のプログラムP2)
図5は、変更後のプログラムP2の一例を示す説明図である。符号501のソースコードに示すように、プログラムP2は、変数「x,y」を入力にし、変数「rtn」を返値にする。また、符号5−1に示すように、プログラムP2は、プログラムP1に追加して1個のif文が記述され、3個のif文が記述されている。そのため、符号502のフロー図に示すように、プログラムP2は、実行可能な4つのパスP21a,P21b,P22,P23を有する。
また、符号5−2に示すように、プログラムP2は、プログラムP1に追加して1個の代入文が追加されている。また、符号5−3に示すように、プログラムP2は、プログラムP1の返値を示す数式「2」が「2+x」に変更されている。ここで、プログラムP1の返値を示す数式が変更されているのは、プログラムPの変更者によるミスとする。
(変更後のプログラムP2に対するテスト結果)
図6および図7は、図5に示したプログラムP2に対するテスト結果の一例を示す説明図である。図6に示すように、プログラムP2に対するテスト結果は、例えば、情報処理装置100が有する変更後テスト結果テーブル600に格納される。変更後テスト結果テーブル600は、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置により実現される。
変更後テスト結果テーブル600は、テストケース項目のそれぞれに対応付けて、テスト入力値項目と、期待値項目と、返値項目と、テスト結果項目と、備考項目と、を有し、テストケースTCごとにレコードを構成する。
テストケース項目には、テストケースTCの識別子が記憶される。テスト入力値項目には、テストケース項目のテストケースTCに対応するテスト入力値が記憶される。期待値項目には、テスト入力値項目のテスト入力値に対する期待値が記憶される。返値項目には、テスト入力値項目のテスト入力値に対するプログラムP2からの返値が記憶される。テスト結果項目には、テストが成功か否かが記憶される。テストが成功とは、返値が変更前後において同一の期待値になることをいう。備考項目には、テストケース項目のテストケースTCが、どのパスをテストしたテストケースTCであるかが記憶される。
図6の例では、変更後テスト結果テーブル600には、テスト入力値「(0,0)」に対する期待値が「2」になる「テストケースTC2」に関するレコードが記憶されている。変更後テスト結果テーブル600には、テストケースTC2に対応付けて、返値が「2」であることと、返値が期待値と一致するためテスト結果が「成功」であることと、が記憶されている。また、変更後テスト結果テーブル600には、テストケースTC2が「パスP22」をテストしたテストケースTCであることが記憶されている。
ここで、図7に示すように、変更により、返値「rtn」の数式は「rtn=2」から、「rtn=2+x」に変更されている。しかし、テスト入力値が「x=0」の場合、変更前後において返値は変わらず「rtn=2」になり、期待値と一致する。そのため、図6の例では、テスト結果項目は「成功」になっている。このように、テスト結果項目には、変更前後において、偶々、返値が一致したために、「成功」と誤判定されたテスト結果が記憶される場合がある。そのため、情報処理装置100は、「成功」と誤判定された疑いがあるテスト結果の検出を容易にするために、図10〜図25を用いて後述するようにテスト結果の信頼度を決定することになる。
また、図6に示すように、パスP21a,P22,P23は、テストケースTC1〜TC3によりテストされている。しかし、パスP21bはテストされていない。そのため、情報処理装置100の利用者は、パスP21bをテストする追加テストケースTCを生成して、プログラムP2をテストしてもよい。
(追加テストケースTC)
次に、図8を用いて、追加テストケースTCの一例について説明する。図8に示す追加テストケースTCによるテスト結果は、例えば、情報処理装置100が有する追加テスト結果テーブルに記憶される。
図8は、追加テストケースTCの一例を示す説明図である。各項目の内容は図4に示した各項目の内容と同様のため、ここでは説明を省略する。図8の例では、テスト入力値「(2,−1)」に対する期待値が「0」になる「テストケースTC4」に対応付けて、返値が「0」であることと、返値が期待値と一致するためテスト結果が「成功」であることと、が記憶されている。また、テストケースTC2は、「パスP21b」をテストしたテストケースTCであることが記憶されている。ここで、追加テストケースTC4は、変更前のプログラムP1に対するテスト結果がないため、情報処理装置100による信頼度決定の対象にはならない。
(情報処理装置100の機能的構成例)
次に、図9を用いて、情報処理装置100の機能的構成例について説明する。図9は、情報処理装置100の機能的構成を示すブロック図である。情報処理装置100は、第1の取得部901と、第2の取得部902と、決定部903と、生成部904と、出力部905と、第3の取得部906と、を含む構成である。第1の取得部901と、第2の取得部902と、決定部903と、生成部904と、出力部905と、第3の取得部906とは、具体的には、例えば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムPをCPU201に実行させることにより、または、I/F209により、その機能を実現する。
第1の取得部901は、第1のプログラムP1および第1のプログラムP1が変更された第2のプログラムP2から共に期待値が返される入力値を第1のプログラムP1に与えた場合の第1の実行経路に関する第1のシンボリック実行結果を取得する。
ここで、第1のプログラムP1は、例えば、上述したプログラムP1である。第2のプログラムP2は、例えば、上述したプログラムP2である。期待値は、テストケースTCに含まれ、正しく動作するプログラムPにテスト入力値を与えた場合の返値になる値である。入力値は、テストケースTCに含まれるテスト入力値である。実行経路は、例えば、パスである。第1の実行経路は、例えば、上述したパスP12である。
第1のシンボリック実行結果は、第1の実行経路に関する条件式の系列を示すパスコンディションを含んでもよい。第1のシンボリック実行結果は、第1の実行経路に関する返値を示す数式を含んでもよい。
第1の取得部901は、具体的には、例えば、プログラムP1とプログラムP2とに対して「成功」のテストケースTC2に関するプログラムP1のシンボリック実行結果を取得する。プログラムP1のシンボリック実行結果は、例えば、パスコンディション「((y+1)>0)&&((y+x)≦0)」と返値を示す数式「rtn=2」とを含む。
取得されたシンボリック実行結果は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。これにより、決定部903は、第1の取得部901によって取得されたシンボリック実行結果から、リグレッションテストのテスト結果の信頼度を決定することができる。
第2の取得部902は、入力値を第2のプログラムP2に与えた場合の第2の実行経路に関する第2のシンボリック実行結果を取得する。ここで、第2の実行経路は、例えば、パスP22である。第2のシンボリック実行結果は、第2の実行経路に関する条件式の系列を示すパスコンディションを含んでもよい。第2のシンボリック実行結果は、第2の実行経路に関する返値を示す数式を含んでもよい。
第2の取得部902は、具体的には、例えば、プログラムP1とプログラムP2とに対して「成功」のテストケースTC2に関するプログラムP2のシンボリック実行結果を取得する。プログラムP2のシンボリック実行結果は、例えば、パスコンディション「((y+1)>0)&&((y+x)≦0)」と返値を示す数式「rtn=2+x」とを含む。
取得されたシンボリック実行結果は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。これにより、決定部903は、第2の取得部902によって取得されたシンボリック実行結果から、リグレッションテストのテスト結果の信頼度を決定することができる。
決定部903は、第1および第2の取得部902によって取得された第1および第2のシンボリック実行結果に基づいて、入力値による第2のプログラムP2のテスト結果に関する信頼性の高さの指標になる信頼度を決定する。入力値によるプログラムP2のテスト結果とは、リグレッションテストのテスト結果である。ここで、信頼度は、例えば、2つの度合いがあるとし、2つの度合いのうち信頼度の高い方を「信頼できる」と称し信頼度の低い方を「要確認」と称し、初期状態では「信頼できる」に設定されているとする。信頼度は、例えば、3以上の度合いがあってもよい。
決定部903は、具体的には、例えば、第1のシンボリック実行結果内のパスコンディションに、第2のシンボリック実行結果内のパスコンディションが包含されていない場合、信頼度を低くする。第1のシンボリック実行結果は、第1の取得部901によって取得されたシンボリック実行結果である。第2のシンボリック実行結果は、第2の取得部902によって取得されたシンボリック実行結果である。
ここで、プログラムP1のシンボリック実行結果内のパスコンディションが「((y+1)>0)&&((y+x)≦0)」、プログラムP2のシンボリック実行結果内のパスコンディションが「(y+x≦0)」である場合を例に挙げる。この場合、決定部903は、「((y+1)>0)&&((y+x)≦0)」に「(y+x≦0)」が包含されていないため、信頼度を「信頼できる」から「要確認」に変更する。
また、決定部903は、具体的には、例えば、第1および第2の取得部902によって取得された第1および第2のシンボリック実行結果内の数式が一致しない場合、信頼度を低くしてもよい。ここで、プログラムP1のシンボリック実行結果内の数式が「rtn=2」、プログラムP2のシンボリック実行結果内の数式が「rtn=2+x」である場合を例に挙げる。この場合、決定部903は、数式が不一致であるため、信頼度を「信頼できる」から「要確認」に変更する。
また、決定部903は、第1および第2の取得部902によって取得された第1および第2のシンボリック実行結果内の数式が、生成部904によって生成された値に対して同一の返値を示さない場合、信頼度を低くしてもよい。この場合、生成部904は、第1の実行経路に関する条件式の系列を示すパスコンディションと第2の実行経路に関する条件式の系列を示すパスコンディションとに共に包含される値を生成する。
生成部904は、具体的には、例えば、プログラムP1のパスコンディション「((y+1)>0)&&((y+x)≦0)」と、プログラムP2のパスコンディション「((y+1)>0)&&((y+x)≦0)」と、を充足する変数の値「(x,y)=(−1,0)」を生成する。次に、決定部903は、生成部904によって生成された変数の値「(x,y)=(−1,0)」を、変更前後の数式「rtn=2」と「rtn=2+x」とに代入する。ここで、決定部903は、代入結果が「2」と「1」とになり、不一致であるため、信頼度を「信頼できる」から「要確認」に変更する。
決定された信頼度は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。これにより、出力部905は、情報処理装置100の利用者に信頼度を通知することができる。
出力部905は、決定部903によって決定された信頼度を出力する。出力部905は、具体的には、例えば、決定部903によって決定された「要確認」を出力する。出力形式としては、例えば、ディスプレイ208への表示、プリンタ213への印刷出力、I/F209による外部装置への送信がある。また、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶することとしてもよい。
これにより、情報処理装置100の利用者は、リグレッションテストのテスト結果が「成功」であっても、信頼度「要確認」の通知を受けることにより、誤りのあるプログラムPを正しいプログラムPと誤認してしまうことを防止することができる。
第3の取得部906は、決定部903によって信頼度が低くされた場合、第2の実行経路に関する条件式の系列を示すパスコンディションを満たす充足解をソルバから取得する。この場合、第3の取得部906は、第2の実行経路に関する条件式の系列を示すパスコンディションをソルバに与える。ソルバは、渡されたパスコンディションから充足解を求め、第3の取得部906に返す。
第3の取得部906は、具体的には、例えば、パスP22に関するパスコンディション「((y+1)>0)&&((y+x)≦0)」を満たすテスト入力値をソルバから取得する。この場合、第3の取得部906は、ソルバにパスP22に関するパスコンディション「((y+1)>0)&&((y+x)≦0)」を渡す。ソルバは、渡されたパスコンディション「((y+1)>0)&&((y+x)≦0)」を充足するテスト入力値「(x,y)=(−1,0)」を充足解として求め、第3の取得部906に返す。ソルバには、例えば、制約ソルバが採用される。
取得された充足解は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。これにより、情報処理装置100は、取得部によって取得されたテスト入力値を用いて、「要確認」のテストケースTCに対して新たにテストを実行することができる。
・情報処理装置100による信頼度決定の詳細
次に、図10〜図25を用いて、情報処理装置100による信頼度決定の詳細について説明する。まず、図10を用いて、情報処理装置100による信頼度決定処理の流れについて説明する。その後、図11〜図25を用いて、図10に示す信頼度決定処理の各処理の詳細について説明する。
(信頼度決定処理)
図10は、情報処理装置100による信頼度決定処理の詳細な処理手順を示すフローチャートである。図10に示すように、情報処理装置100は、変更前のプログラムP1に対して実行したテストスイートを流用し、変更後のプログラムP2に対してテストスイートを実行して、テスト結果が「成功」のテストケースTCを取得する(ステップS1001)。
次に、情報処理装置100は、変更前後のプログラムP1,P2に対して、期待値と比較されるべき返値の指定を受ける(ステップS1002)。そして、情報処理装置100は、変更前後のプログラムP1,P2の各々をシンボリック実行し、シンボリック実行結果を保持する(ステップS1003)。
次に、情報処理装置100は、変更前後のプログラムP1,P2のシンボリック実行結果のうち、パスコンディションと、「成功」のテストケースTCのテスト入力値を比較する。これにより、情報処理装置100は、「成功」のテストケースTCに対応するパスコンディションを特定する(ステップS1004)。
そして、情報処理装置100は、「成功」のテストケースTCに対応する変更前のプログラムPの1のシンボリック実行結果と、「成功」のテストケースTCに対応する変更後のプログラムPの2のシンボリック実行結果と、を比較する(ステップS1005)。
次に、情報処理装置100は、比較結果を用いて、変更後のプログラムP2の「成功」のテストケースTCの信頼度を決定する(ステップS1006)。そして、情報処理装置100は、「成功」のテストケースTCの信頼度が「要確認」である場合、確認用のテストケースTCを生成し、生成したテストケースTCの実行結果を出力する(ステップS1007)。
次に、情報処理装置100は、信頼度決定処理を終了する。これにより、情報処理装置100は、情報処理装置100の利用者に、信頼度「要確認」を通知することができる。結果として、情報処理装置100の利用者は、リグレッションテストのテスト結果が「成功」であっても、信頼度「要確認」の通知を受けることにより、誤りのあるプログラムPを正しいプログラムPと誤認してしまうことを防止することができる。
また、情報処理装置100の利用者は、信頼度「要確認」の通知を受け、変更後のプログラムPに誤りがあるか否かを確認し、誤りがあればプログラムPを修正することができる。また、情報処理装置100の利用者は、信頼度「要確認」の通知を受けた場合、テストケースTCを増加させて、変更後のプログラムPのテストを実行することができる。
(プログラムPに対するシンボリック実行)
次に、図11〜図13を用いて、情報処理装置100によるプログラムPに対するシンボリック実行の一例について説明する。図11〜図13は、ステップS1001〜ステップS1003に示した処理に対応する。
図11は、プログラムPに対するシンボリック実行の手順を示す説明図である。図11に示すように、情報処理装置100は、シンボリック実行のため、シンボリック実行対象のプログラムPにテスト用ドライバを付与する。テスト用ドライバは、変数をシンボル値に設定する設定文と、返値を示す数式を出力させる出力文と、を含む。
次に、情報処理装置100は、テスト用ドライバとシンボリック実行対象のプログラムPとを併せて実行することにより、シンボリック実行対象のプログラムPをシンボリック実行する。図11の例では、テスト用ドライバにより変数x,yがシンボル値に設定されたプログラムPが実行される。
そして、情報処理装置100は、シンボリック実行対象のプログラムPをシンボリック実行して、プログラムPの実行可能な各経路におけるパスコンディションと返値を示す数式とを出力する。図11の例では、情報処理装置100は、シンボリック実行結果として、プログラムPの実行可能な各経路のパスコンディションと、テスト用ドライバが指定する返値rtnを示す数式と、を出力する。
次に、図12を用いて、図11に示したテスト用ドライバを用いて、変更前のプログラムP1をシンボリック実行する場合について説明する。
図12は、変更前のプログラムP1に対するシンボリック実行結果の一例を示す説明図である。図12に示すように、情報処理装置100は、図11に示したテスト用ドライバを付与したプログラムP1を、シンボリック実行する。
情報処理装置100は、シンボリック実行により、図3に示したプログラムP1のパスP11,P12,P13の各パスに関するパスコンディションと、返値を示す数式と、を含むシンボリック実行結果Pre1,Pre2,Pre3を取得する。ここで、情報処理装置100は、どのパスコンディションと、どの数式とが、どのパスに関するかを特定していない。
シンボリック実行結果は、例えば、変更前シンボリック実行結果テーブル1200に記憶される。変更前シンボリック実行結果テーブル1200は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域により実現される。
変更前シンボリック実行結果テーブル1200は、Id項目のそれぞれに対応付けて、パスコンディション項目と、数式項目とを有し、シンボリック実行結果ごとにレコードを構成する。Id項目には、便宜上付与されたシンボリック実行結果の識別子が記憶される。パスコンディション項目には、パスコンディションが記憶される。数式項目には、返値を示す数式が記憶される。
図12の例では、変更前シンボリック実行結果テーブル1200には、「シンボリック実行結果Pre2」に対応付けて、パスコンディションが「((y+1)>0)&&((y+x≦0))」であることが記憶されている。また、変更前シンボリック実行結果テーブル1200には、「シンボリック実行結果Pre2」に対応付けて、返値を示す数式が「2」であることと、が記憶されている。
次に、図13を用いて、図11に示したテスト用ドライバを用いて、変更後のプログラムP2をシンボリック実行する場合について説明する。
図13は、変更後のプログラムP2に対するシンボリック実行結果の一例を示す説明図である。図13に示すように、情報処理装置100は、図11に示したテスト用ドライバを付与したプログラムP2を、シンボリック実行する。
情報処理装置100は、シンボリック実行により、図5に示したプログラムP2のパスP21a,P21b,P22,P23の各パスに関するパスコンディションと、返値を示す数式と、を含むシンボリック実行結果Post1〜Post4を出力する。ここで、情報処理装置100は、どのパスコンディションと、どの数式とが、どのパスに関するかを特定していない。
シンボリック実行結果は、例えば、変更後シンボリック実行結果テーブル1300に記憶される。変更後シンボリック実行結果テーブル1300は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域により実現される。
変更後シンボリック実行結果テーブル1300は、Id項目のそれぞれに対応付けて、パスコンディション項目と、数式項目とを有し、シンボリック実行結果ごとにレコードを構成する。Id項目には、便宜上付与されたシンボリック実行結果の識別子が記憶される。パスコンディション項目には、パスコンディションが記憶される。数式項目には、返値を示す数式が記憶される。
図13の例では、変更後シンボリック実行結果テーブル1300には、「シンボリック実行結果Post2」に対応付けて、パスコンディションが「((y+1)>0)&&((y+x≦0))」であることが記憶されている。また、変更後シンボリック実行結果テーブル1300には、「シンボリック実行結果Post2」に対応付けて、返値を示す数式が「2+x」であることが記憶されている。
これにより、情報処理装置100は、特定したパスコンディションと数式とを用いて、リグレッションテストのテスト結果の信頼度を決定することができる。ここでは、情報処理装置100が変更前後のプログラムP1,P2に対してシンボリック実行を行ったが、これに限らない。例えば、情報処理装置100の外部に存在する他の情報処理装置によって変更前後のプログラムP1,P2に対するシンボリック実行が行われてもよい。この場合、情報処理装置100は、他の情報処理装置からシンボリック実行結果を取得することになる。
(シンボリック実行結果の特定)
次に、図14〜図15を用いて、情報処理装置100によるシンボリック実行結果の特定の一例について説明する。図14および図15は、ステップS1004に示した処理に対応する。
図14は、情報処理装置100による「成功」のテストケースTCの特定の一例を示す説明図である。図14に示すように、情報処理装置100は、変更後テスト結果テーブル600のテスト結果項目を用いて「成功」のテストケースTCを特定する。図14の例では、情報処理装置100は、テスト結果項目に「成功」が記憶されたテストケースTC1〜TC3を特定する。
特定されたテストケースTCは、例えば、成功テストケーステーブル1400に記憶される。成功テストケーステーブル1400は、変更後テスト結果テーブル600のテストケース項目と、テスト入力値項目と、期待値項目と、を抽出したテーブルである。成功テストケーステーブル1400は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域により実現される。
図15は、情報処理装置100による「成功」のテストケースTCに対応するシンボリック実行結果の特定の一例を示す説明図である。図15に示すように、情報処理装置100は、成功テストケーステーブル1400に記憶された「成功」のテストケースTCのテスト入力値を取得する。
次に、情報処理装置100は、テスト入力値を、変更前シンボリック実行結果テーブル1200に記憶された変更前のプログラムP1のパスコンディションに入力した場合に、「真」になるパスコンディションを特定する。また、情報処理装置100は、テスト入力値を、変更後シンボリック実行結果テーブル1300とに記憶された変更後のプログラムP2のパスコンディションに入力した場合に、「真」になるパスコンディションを特定する。そして、情報処理装置100は、「真」になるパスコンディションを含む変更前後のシンボリック実行結果を特定する。
図15の例では、情報処理装置100は、テストケースTC2のテスト入力値「(x,y)=(0,0)」を変更前のプログラムP1のシンボリック実行結果Pre1〜Pre3内のパスコンディションに代入する。ここで、情報処理装置100は、シンボリック実行結果Pre2のパスコンディションが「真」になるため、「成功」のテストケースTC2に対応するシンボリック実行結果として、シンボリック実行結果Pre2を特定する。
同様にして、情報処理装置100は、テストケースTC2のテスト入力値「(x,y)=(0,0)」を変更後のプログラムP2のシンボリック実行結果Post1〜Post4内のパスコンディションに代入する。ここで、情報処理装置100は、シンボリック実行結果Post2のパスコンディションが「真」になるため、「成功」のテストケースTC2に対応するシンボリック実行結果として、シンボリック実行結果Post2を特定する。
特定された変更前後のシンボリック実行結果は、例えば、シンボリック実行結果組み合わせテーブル1500に記憶される。シンボリック実行結果組み合わせテーブル1500は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域により実現される。
シンボリック実行結果組み合わせテーブル1500は、テストケース項目のそれぞれに対応付けて、変更前のシンボリック実行結果項目と、変更後のシンボリック実行結果項目とを有し、テストケースごとにレコードを構成する。テストケース項目には、テストケースの識別子が記憶される。変更前のシンボリック実行結果項目には、変更前のシンボリック実行結果の識別子が記憶される。変更後のシンボリック実行結果項目には、変更後のシンボリック実行結果の識別子が記憶される。
これにより、情報処理装置100は、或る「成功」のテストケースTCに対応する変更前後のプログラムP1,P2のシンボリック実行結果の組を特定することができる。次に、情報処理装置100は、特定したシンボリック実行結果の組を用いて、或る「成功」のテストケースTCの信頼度を決定することができる。
(シンボリック実行結果特定処理)
次に、図16を用いて、シンボリック実行結果特定処理について説明する。シンボリック実行結果特定処理は、図14および図15に示した情報処理装置100による「成功」のテストケースTCに対応する変更前後のプログラムP1,P2のシンボリック実行結果の組を特定する処理である。
図16は、シンボリック実行結果特定処理の詳細な処理手順を示すフローチャートである。図16に示すように、まず、情報処理装置100は、「成功」のテストケースTCの集合、および変更前後のパスコンディションを取得する(ステップS1601)。
次に、情報処理装置100は、「成功」のテストケースTCの集合から、順にテストケースTCを取得する(ステップS1602)。そして、情報処理装置100は、取得したテストケースTCのテスト入力値が、未処理のテスト入力値か否かを判定する(ステップS1603)。ここで、未処理のテスト入力値でない場合(ステップS1603:No)、情報処理装置100は、「成功」のテストケースTCに対応するパスコンディションを出力し(ステップS1608)、シンボリック実行結果特定処理を終了する。
一方、未処理のテスト入力値である場合(ステップS1603:Yes)、情報処理装置100は、変更前後のシンボリック実行結果の中から、パスコンディションを順に取得する(ステップS1604)。ここで、未処理のパスコンディションでない場合(ステップS1605:No)、情報処理装置100は、ステップS1602に戻る。
一方、未処理のパスコンディションである場合(ステップS1605:Yes)、情報処理装置100は、取得したテスト入力値により取得したパスコンディションが「真」になるか否かを判定する(ステップS1606)。ここで、「真」にならない場合(ステップS1606:No)、情報処理装置100は、ステップS1604に戻る。
一方、「真」になる場合(ステップS1606:Yes)、情報処理装置100は、取得したテスト入力値の「成功」のテストケースTCと、取得したパスコンディションと、を対応付けておく(ステップS1607)。次に、情報処理装置100は、ステップS1602に戻る。
これにより、情報処理装置100は、或る「成功」のテストケースTCに対応する変更前後のプログラムP1,P2のシンボリック実行結果の組を特定することができる。次に、情報処理装置100は、特定したシンボリック実行結果の組を用いて、或る「成功」のテストケースTCの信頼度を決定することができる。
(シンボリック実行結果の比較)
次に、図17を用いて、情報処理装置100によるシンボリック実行結果の比較について説明する。シンボリック実行結果の比較は、ステップS1005に示した処理である。
図17は、情報処理装置100によるシンボリック実行結果の比較の一例を示す説明図である。情報処理装置100は、シンボリック実行結果組み合わせテーブル1500に記憶された変更前後のシンボリック実行結果のパスコンディションを、変更前シンボリック実行結果テーブル1200と変更後シンボリック実行結果テーブル1300とから取得する。次に、情報処理装置100は、取得したパスコンディションを比較する。そして、情報処理装置100は、変更前のパスコンディションと変更後のパスコンディションとが「同一」、「限定」、または「拡張」のいずれに該当するかを判定する。
「同一」は変更前のパスコンディションと変更後のパスコンディションとが一致することを示す。「限定」は変更前のパスコンディションに変更後のパスコンディションが包含されることを示す。例えば、変更前のシンボリック実行結果内のパスコンディションが「x>0」であり、変更後のシンボリック実行結果内のパスコンディションが「x>5」である場合、「限定」になる。
「拡張」は変更前のパスコンディションより変更後のパスコンディションが広いことを示す。例えば、変更前のシンボリック実行結果内のパスコンディションが「x>0」であり、変更後のシンボリック実行結果内のパスコンディションが「x>−5」である場合、「拡張」になる。
また、情報処理装置100は、シンボリック実行結果組み合わせテーブル1500に記憶された変更前後のシンボリック実行結果の数式を、変更前シンボリック実行結果テーブル1200と変更後シンボリック実行結果テーブル1300とから取得して、比較する。次に、情報処理装置100は、変更前の数式と変更後の数式とが「同一」または「非同一」のいずれに該当するかを判定する。
図17の例では、情報処理装置100は、テストケースTC2に対応する変更前後のパスコンディションが、共に「((y+1)>0)&&((y+x≦0))」であるため、パスコンディションの関係は「同一」であると判定する。また、情報処理装置100は、テストケースTC2に対応する返値を示す数式が「x」と「2+x」とであり、異なるため、数式の関係は「相違」であると判定する。
比較結果は、例えば、比較結果テーブル1700に記憶される。比較結果テーブル1700は、例えば、RAM203、磁気ディスク205、光ディスク207などの記憶領域により実現される。比較結果テーブル1700は、テストケース項目のそれぞれに対応付けて、パスコンディションの関係項目と、数式の関係項目とを有し、テストケースごとにレコードを構成する。テストケース項目には、テストケースの識別子が記憶される。パスコンディションの関係項目には、パスコンディションの関係が記憶される。数式の関係項目には、数式の関係が記憶される。
(シンボリック実行結果比較処理)
次に、図18〜図20を用いて、情報処理装置100によるシンボリック実行結果比較処理の詳細な処理手順について説明する。シンボリック実行結果比較処理は、パスコンディション比較処理と、数式比較処理と、を含む。
図18および図19は、情報処理装置100によるパスコンディション比較処理の詳細な処理手順を示すフローチャートである。図18に示すように、まず、情報処理装置100は、「成功」のテストケースTCに対応するパスコンディションを用いて、シンボリック実行結果の集合を取得する(ステップS1801)。
次に、情報処理装置100は、シンボリック実行結果の集合の中から、変更前後のパスコンディションの組を順に取得する(ステップS1802)。そして、情報処理装置100は、取得したパスコンディションの組が、未処理のパスコンディションの組か否かを判定する(ステップS1803)。
ここで、未処理のパスコンディションの組でない場合(ステップS1803:No)、情報処理装置100は、「成功」のテストケースTCに対応するパスコンディションの組の比較結果を出力し(ステップS1804)、パスコンディション比較処理を終了する。一方、未処理のパスコンディションの組である場合(ステップS1803:Yes)、情報処理装置100は、図19のステップS1901に移行する。
図19において、情報処理装置100は、パスコンディションの組が、文字列として同一か否かを判定する(ステップS1901)。ここで、文字列として同一である場合(ステップS1901:Yes)、情報処理装置100は、ステップS1905に移行する。
一方、文字列として同一でない場合(ステップS1901:No)、情報処理装置100は、パスコンディションの組から、2つの条件式を生成する(ステップS1902)。2つの条件式とは、条件式1「変更前のパスコンディション&&Not(変更後のパスコンディション)」と条件式2「Not(変更前のパスコンディション)&&変更後のパスコンディション」である。
次に、情報処理装置100は、2つの条件式が共に充足可能か否かを判定する(ステップS1903)。ここで、2つの条件式が充足可能である場合(ステップS1903:Yes)、情報処理装置100は、変更前後のパスコンディションが「同一」であると判定し(ステップS1904)、図18のステップS1802に戻る。
一方、2つの条件式が充足可能でない場合(ステップS1903:No)、情報処理装置100は、条件式1が充足不可能、かつ、条件式2が充足可能か否かを判定する(ステップS1905)。ここで、条件式1が充足不可能、かつ、条件式2が充足可能である場合(ステップS1905:Yes)、情報処理装置100は、変更前後のパスコンディションが「拡張」であると判定し(ステップS1906)、図18のステップS1802に戻る。
一方、条件式1が充足不可能でない場合、または、条件式2が充足可能でない場合(ステップS1905:No)、情報処理装置100は、条件式1が充足可能、かつ、条件式2が充足不可能か否かを判定する(ステップS1907)。ここで、条件式1が充足可能、かつ、条件式2が充足不可能である場合(ステップS1907:Yes)、情報処理装置100は、変更前後のパスコンディションが「限定」であると判定し(ステップS1908)、図18のステップS1802に戻る。
一方、条件式1が充足可能でない場合、または、条件式2が充足不可能でない場合(ステップS1907:No)、情報処理装置100は、変更前後のパスコンディションが「相違」であると判定し(ステップS1909)、図18のステップS1802に戻る。これにより、情報処理装置100は、変更前後のパスコンディションの関係を特定して、変更後のプログラムP2のリグレッションテストのテスト結果の信頼度を決定することができる。
図20は、情報処理装置100による数式比較処理の詳細な処理手順を示すフローチャートである。図20に示すように、情報処理装置100は、「成功」のテストケースTCに対応するパスコンディションを用いて、シンボリック実行結果の集合を取得する(ステップS2001)。
次に、情報処理装置100は、取得したシンボリック実行結果の集合の中から、変更前後の数式の組を順に取得する(ステップS2002)。そして、情報処理装置100は、未処理の数式の組か否かを判定する(ステップS2003)。
ここで、未処理の数式の組でない場合(ステップS2003:No)、情報処理装置100は、「成功」のテストケースTCに対応する数式の比較結果を出力し(ステップS2010)、数式比較処理を終了する。
一方、未処理の数式の組である場合(ステップS2003:Yes)、情報処理装置100は、変更前後の数式が文字列として同一か否かを判定する(ステップS2004)。ここで、文字列として同一である場合(ステップS2004:Yes)、情報処理装置100は、変更前後の数式は「同一」であると判定し(ステップS2005)、ステップS2002に戻る。
一方、文字列として同一でない場合(ステップS2004:No)、情報処理装置100は、変更前後の数式の組に、数式比較ルールを適用する(ステップS2006)。数式比較ルールについては、図21および図22を用いて後述する。
次に、情報処理装置100は、数式比較ルールに従って、変更前後の数式が同一と判定されたか否かを判定する(ステップS2007)。ここで、変更前後の数式が同一と判定された場合(ステップS2007:Yes)、情報処理装置100は、変更前後の数式は「同一」であると判定し(ステップS2008)、ステップS2002に戻る。
一方、変更前後の数式が同一でないと判定された場合(ステップS2007:No)、情報処理装置100は、変更前後の数式は「相違」であると判定し(ステップS2009)、ステップS2002に戻る。これにより、情報処理装置100は、変更前後の数式の関係を特定して、変更後のプログラムP2のリグレッションテストのテスト結果の信頼度を決定することができる。
(数式比較ルール)
次に、図21および図22を用いて、ステップS2006に示した数式比較ルールについて説明する。数式比較ルールは、変更前後の数式が文字列として同一でない場合に、変更前後の数式が実質的に同一であるか否かを判定するためのルールである。
図21は、数式比較ルールの例1を示す説明図である。数式比較ルールの例1は、変更前後の数式を、数学の法則を用いて変換し、変換後の数式同士を比較するルールである。数学の法則とは、例えば、分配法則、交換法則、および結合法則のうち少なくともいずれかである。
図21の例では、情報処理装置100は、文字列としては同一でない数式「z(x,y)×g(y)+f(x)×z(x,y)」と数式「(f(x)+g(y))×z(x,y)」とが実質的に同一か否かを判定する。
情報処理装置100は、具体的には、例えば、各数式を分配法則に従って展開し、かつ、変数のアルファベット順に並べ替える。これにより、情報処理装置100は、変更前後の数式が共に「f(x)×z(x,y)+g(y)×z(x,y)」となるため、変更前後の数式が実質的に同一であると判定する。
図22は、数式比較ルールの例2を示す説明図である。数式比較ルールの例2は、数学の法則を用いて変換することができない数式が実質的に同一か否かを判定するためのルールである。
図22の例では、情報処理装置100は、文字列としては同一でない数式「f(x)」と数式「F(x)」とが実質的に同一か否かを判定する。情報処理装置100は、具体的には、例えば、変更前後のパスコンディションを共に充足する1または複数のテスト入力値を生成する。次に、情報処理装置100は、生成したテスト入力値に対して、変更前後の数式が示す返値が一致するか否かを判定する。ここで、情報処理装置100は、生成したテスト入力値に対して、返値が一致する場合、変更前後の数式が実質的に同一であると判定する。
情報処理装置100は、具体的には、例えば、変更前後のパスコンディションを共に充足するテスト入力値「(x,y)=(X1,Y1)」を、変更前後の数式「f(x)」と「F(x)」に代入する。ここで、情報処理装置100は、変更前後の数式が示す返値が「Z1」であり一致するため、変更前後の数式が実質的に同一であると判定する。
ステップS2006において、情報処理装置100は、数式比較ルールとして、上述した数式比較ルールの例1,数式比較ルールの例2,または、数式比較ルールの例1と例2との組み合わせのいずれを使用してもよい。
(信頼度決定)
次に、図23を用いて、情報処理装置100による信頼度決定の一例について説明する。信頼度決定は、ステップS1006に示した処理である。
図23は、情報処理装置100による信頼度決定の一例を示す説明図である。情報処理装置100は、例えば、比較結果テーブル1700を参照して、変更前後のパスコンディションの比較結果が「拡張」になるテストケースTCの信頼度を「要確認」であると決定する。また、情報処理装置100は、例えば、比較結果テーブル1700を参照して、変更前後の数式の比較結果が「相違」になるテストケースTCの信頼度を「要確認」であると決定する。また、情報処理装置100は、他の場合のテストケースTCの信頼度を「信頼できる」と決定する。
図23の例では、情報処理装置100は、テストケースTC2の数式が「相違」のため、テストケースTC2の信頼度を「要確認」であると決定する。また、情報処理装置100は、他のテストケースTC1,TC3の信頼度を「信頼できる」と決定する。そして、情報処理装置100は、信頼度を出力する。
ここで、情報処理装置100は、3種類以上の信頼度を決定してもよい。例えば、信頼度は、「高、中、低」である。この場合、情報処理装置100は、例えば、パスコンディションの比較結果と数式の比較結果とが共に「同一」になるテストケースTCを信頼度「高」に決定してもよい。また、情報処理装置100は、例えば、パスコンディションの比較結果が「拡張」であり、数式の比較結果が「同一」になるテストケースTCを信頼度「中」に決定してもよい。また、情報処理装置100は、例えば、パスコンディションの比較結果が「拡張」であり、数式の比較結果が「相違」になるテストケースTCを信頼度「低」に決定してもよい。
これにより、情報処理装置100は、偶々、変更前後のプログラムP1,P2の返値が一致し、リグレッションテストのテスト結果が「成功」になる場合に、情報処理装置100の利用者に、信頼度「要確認」を通知することができる。
結果として、情報処理装置100の利用者は、リグレッションテストのテスト結果が「成功」であっても、信頼度「要確認」の通知を受けることにより、誤りのあるプログラムPを正しいプログラムPと誤認してしまうことを防止することができる。また、情報処理装置100の利用者は、信頼度「要確認」の通知を受け、変更後のプログラムPに誤りがあるか否かを確認し、誤りがあればプログラムPを修正することができる。
ここでは、1つのパスコンディションは1つのテストケースTCに対応するが、これに限らない。例えば、1つのパスコンディションに複数のテストケースTCが対応してもよい。この場合、複数のテストケースTCによるテスト結果が「成功」であれば、数式が「相違」であっても、プログラム2の信頼度を「信頼できる」に決定してもよい。
(決定処理)
次に、図24を用いて、情報処理装置100による決定処理の詳細な処理手順について説明する。
図24は、情報処理装置100による決定処理の詳細な処理手順を示すフローチャートである。図24に示すように、情報処理装置100は、「成功」のテストケースTCに対応するシンボリック実行結果の比較結果の集合を取得する(ステップS2401)。
次に、情報処理装置100は、取得した比較結果の集合の中から、比較結果を順に取得する(ステップS2402)。そして、情報処理装置100は、取得した比較結果が未処理であるか否かを判定する(ステップS2403)。ここで、未処理でない場合(ステップS2403:No)、情報処理装置100は、「成功」のテストケースTCの信頼度を出力し(ステップS2407)、決定処理を終了する。
一方、未処理でない場合(ステップS2403:Yes)、情報処理装置100は、変更前後において、パスコンディションが同一または限定であり、かつ、数式が同一か否かを判定する(ステップS2404)。ここで、パスコンディションが同一または限定であり、かつ、数式が同一である場合(ステップS2404:Yes)、情報処理装置100は、「成功」のテストケースTCを「信頼できる」と判定し(ステップS2405)、ステップS2402に戻る。
パスコンディションが同一または限定であり、かつ、数式が同一でない場合(ステップS2404:No)、情報処理装置100は、「成功」のテストケースTCを「要確認」と判定し(ステップS2406)、ステップS2402に戻る。
これにより、情報処理装置100は、偶々、変更前後のプログラムP1,P2の返値が一致し、リグレッションテストのテスト結果が「成功」になる場合に、情報処理装置100の利用者に、信頼度「要確認」を通知することができる。情報処理装置100の利用者は、信頼度「要確認」の通知を受けた場合、テストケースTCを増加させて、変更後のプログラムPのテストをさらに実行してもよい。
(テスト入力値の生成)
次に、図25を用いて、情報処理装置100によるテスト入力値の生成について説明する。
図25は、情報処理装置100によるテスト入力値の生成を示す説明図である。情報処理装置100は、「要確認」と判定されたテストケースTC2に対応する新たなテスト入力値を生成して、プログラムP2のテストをさらに実行する。新たなテスト入力値は、例えば、パスコンディションを制約ソルバに与えることにより、制約ソルバから取得することができる。
図25の例では、情報処理装置100は、「要確認」のテストケースTC2に対応するテスト入力を生成する。ここで、情報処理装置100は、テストケースTC2のパスコンディション「y+1>0&&y+x≦0」と、既にあるテスト入力値以外の値が生成されるように「x!=0」と「y!=0」と、を含む条件を充足するテスト入力値を生成する。この場合、情報処理装置100は、テスト入力値「(x,y)=(−1,1)」を生成する。
(テスト入力値生成処理)
次に、図26を用いて、テスト入力値生成処理について説明する。
図26は、テスト入力値生成処理の詳細な処理手順を示すフローチャートである。図26に示すように、まず、情報処理装置100は、「要確認」と判定されたテストケースTCの集合を取得する(ステップS2601)。次に、情報処理装置100は、取得したテストケースTCの集合の中から、順にテストケースTCを取得する(ステップS2602)。
そして、情報処理装置100は、取得したテストケースTCが未処理であるか否かを判定する(ステップS2603)。ここで、未処理でない場合(ステップS2603:No)、情報処理装置100は、「要確認」のテストケースTCのテスト入力値を出力し(ステップS2606)、テスト入力値生成処理を終了する。
一方、未処理である場合(ステップS2603:Yes)、情報処理装置100は、「要確認」のテストケースTCのテスト入力値とパスコンディションとを用いて、新たなテスト入力値が充足すべき条件式を生成する(ステップS2604)。
次に、情報処理装置100は、生成した条件式を制約ソルバに与え、条件式を充足する新たなテスト入力値を制約ソルバから取得し(ステップS2605)、ステップS2602に戻る。これにより、情報処理装置100の利用者は、「要確認」のテストケースTCに対する新たなテスト入力値の生成にかかる手間を削減することができる。
以上説明したように、情報処理装置100は、「成功」のテストケースTCに関する変更前後のプログラムP1,P2のシンボリック実行結果を取得し、取得したシンボリック実行結果を用いて、リグレッションテストのテスト結果の信頼度を決定する。情報処理装置100は、決定した信頼度を出力する。これにより、情報処理装置100は、リグレッションテストのテスト結果が「成功」であっても、偶々「成功」になったのか否かの指標になる信頼度を決定することができる。また、情報処理装置100は、情報処理装置100の利用者に、信頼度を通知することができる。
結果として、情報処理装置100の利用者は、リグレッションテストのテスト結果が「成功」であっても、通知された信頼度が低い場合、変更後のプログラムPに誤りがあるか否かを確認し、誤りがあればプログラムPを修正することができる。そのため、情報処理装置100の利用者は、誤りのあるプログラムPを正しいプログラムPと誤認してしまうことを防止することができる。また、情報処理装置100の利用者は、通知された信頼度が低い場合、テストケースTCを増加させて、変更後のプログラムPのテストを実行することができる。
また、情報処理装置100は、変更前のシンボリック実行結果内のパスコンディションに比べて、変更後のシンボリック実行結果内のパスコンディションが「拡張」されている場合、信頼度を低くする。これにより、情報処理装置100は、パスコンディションから信頼度を決定することができる。
また、情報処理装置100は、変更前のシンボリック実行結果内の数式に比べて、変更後のシンボリック実行結果内の数式が「相違」する場合、信頼度を低くする。これにより、情報処理装置100は、数式から信頼度を決定することができる。
また、情報処理装置100は、変更前後のシンボリック実行結果内の数式に適当な値を代入した場合の返値が一致するか否かを判定することにより、変更前後のシンボリック実行結果内の数式が実質的に同一であるか否かを判定する。これにより、情報処理装置100は、変更前後の数式か文字列として同一でない場合も、実質的に同一か否かの判定結果を用いて、信頼度を決定することができる。
また、情報処理装置100は、信頼度を低くした場合、新たにプログラムP2をテストする場合に使用するテスト入力値を生成する。これにより、情報処理装置100の利用者は、信頼度が低い場合、プログラムP2をテストする場合に使用するテスト入力値を生成する手間を削減することができる。
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムPをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムPは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報処理プログラムPは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明した情報処理装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と表す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述した情報処理装置100の機能(第1の取得部901、第2の取得部902、決定部903、生成部904、出力部905、第3の取得部906)をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、情報処理装置100を製造することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)第1のプログラムおよび前記第1のプログラムが変更された第2のプログラムから共に期待値が返される入力値を前記第1のプログラムに与えた場合の第1の実行経路に関する条件式の系列を示すパスコンディションと、前記第1の実行経路に関する返値を示す数式と、を含む第1のシンボリック実行結果を取得する第1の取得部と、
前記入力値を前記第2のプログラムに与えた場合の第2の実行経路に関する条件式の系列を示すパスコンディションと、前記第2の実行経路に関する返値を示す数式と、を含む第2のシンボリック実行結果を取得する第2の取得部と、
前記第1の取得部によって取得された第1のシンボリック実行結果内のパスコンディションに、前記第2の取得部によって取得された第2のシンボリック実行結果内のパスコンディションが包含されているか否か、または、前記第1および第2のシンボリック実行結果内の数式が一致するか否か、に基づいて、前記入力値による前記第2のプログラムのテスト結果に関する信頼性の高さの指標になる信頼度を決定する決定部と、
前記決定部によって決定された信頼度を出力する出力部と、
を有することを特徴とする情報処理装置。
(付記2)前記決定部は、
前記第1の取得部によって取得された第1のシンボリック実行結果内のパスコンディションに、前記第2の取得部によって取得された第2のシンボリック実行結果内のパスコンディションが包含されていない場合、前記信頼度を低くすることを特徴とする付記1に記載の情報処理装置。
(付記3)前記決定部は、
前記第1および第2の取得部によって取得された第1および第2のシンボリック実行結果内の数式が一致しない場合、前記信頼度を低くすることを特徴とする付記1または2に記載の情報処理装置。
(付記4)前記第1の実行経路に関する条件式の系列を示すパスコンディションと前記第2の実行経路に関する条件式の系列を示すパスコンディションとに共に包含される値を生成する生成部を有し、
前記決定部は、
前記第1および第2の取得部によって取得された第1および第2のシンボリック実行結果内の数式が、前記生成部によって生成された値に対して同一の返値を示さない場合、前記信頼度を低くすることを特徴とする付記1乃至3のいずれか一つに記載の情報処理装置。
(付記5)前記決定部によって信頼度が低くされた場合、前記第2の実行経路に関する条件式の系列を示すパスコンディションをソルバに与えることにより、前記第2の実行経路に関する条件式の系列を示すパスコンディションを満たす充足解を前記ソルバから取得する第3の取得部を有することを特徴とする付記1乃至4のいずれか一つに記載の情報処理装置。
(付記6)コンピュータが、
第1のプログラムおよび前記第1のプログラムが変更された第2のプログラムから共に期待値が返される入力値を前記第1のプログラムに与えた場合の第1の実行経路に関する条件式の系列を示すパスコンディションと、前記第1の実行経路に関する返値を示す数式と、を含む第1のシンボリック実行結果を取得し、
前記入力値を前記第2のプログラムに与えた場合の第2の実行経路に関する条件式の系列を示すパスコンディションと、前記第2の実行経路に関する返値を示す数式と、を含む第2のシンボリック実行結果を取得し、
取得された第1のシンボリック実行結果内のパスコンディションに、取得された第2のシンボリック実行結果内のパスコンディションが包含されているか否か、または、取得された第1および第2のシンボリック実行結果内の数式が一致するか否か、に基づいて、前記第2のプログラムの信頼性の指標になる信頼度を決定し、
決定された信頼度を出力する、
処理を実行することを特徴とする情報処理方法。
(付記7)コンピュータに、
第1のプログラムおよび前記第1のプログラムが変更された第2のプログラムから共に期待値が返される入力値を前記第1のプログラムに与えた場合の第1の実行経路に関する条件式の系列を示すパスコンディションと、前記第1の実行経路に関する返値を示す数式と、を含む第1のシンボリック実行結果を取得し、
前記入力値を前記第2のプログラムに与えた場合の第2の実行経路に関する条件式の系列を示すパスコンディションと、前記第2の実行経路に関する返値を示す数式と、を含む第2のシンボリック実行結果を取得し、
取得された第1のシンボリック実行結果内のパスコンディションに、取得された第2のシンボリック実行結果内のパスコンディションが包含されているか否か、または、取得された第1および第2のシンボリック実行結果内の数式が一致するか否か、に基づいて、前記第2のプログラムの信頼性の指標になる信頼度を決定し、
決定された信頼度を出力する、
処理を実行させることを特徴とする情報処理プログラム。