(57)【特許請求の範囲】
【請求項１】
グラフ生成部が、プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成ステップと、
データ生成部が、前記グラフ生成ステップにて生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成ステップと、
実行制御部が、前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成ステップにて生成した入力データにより前記プログラムを実行させる実行制御ステップと、
比較部が、前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較ステップと
を含むことを特徴とする検証支援方法。
【請求項２】
前記データ生成ステップにおいて、
前記実行経路に対して、当該実行経路におけるデータ処理ノードの処理を制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成する
ことを特徴とする請求項１に記載の検証支援方法。
【請求項３】
前記データ生成ステップにおいて、
前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成する
ことを特徴とする請求項１又は請求項２に記載の検証支援方法。
【請求項４】
前記データ生成ステップにおいて、
前記実行経路に対して、前記分岐処理ノードごとに、乱数に基づいて前記入力データを生成する第１の生成アルゴリズムと、
前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成する第２の生成アルゴリズムと、
前記実行経路に対して、当該実行経路におけるデータ処理ノードを制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成する第３の生成アルゴリズムと
を組み合わせて、前記入力データを生成する
ことを特徴とする請求項１に記載の検証支援方法。
【請求項５】
前記データ生成ステップにおいて、
前記第１の生成アルゴリズムと第２の生成アルゴリズムとのうちの少なくとも一方にて前記入力データを生成した後に、前記実行経路のうち、生成した前記入力データにて実行されない実行経路に対して、前記第３の生成アルゴリズムに基づいて前記入力データを生成する
ことを特徴とする請求項４に記載の検証支援方法。
【請求項６】
前記データ生成ステップにおいて、
前記プログラムの規模に基づいて、
前記実行経路に対して、前記分岐処理ノードごとに、乱数に基づいて前記入力データを生成する第１の生成アルゴリズムと、
前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成する第２の生成アルゴリズムと、
前記実行経路に対して、当該実行経路におけるデータ処理ノードを制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成する第３の生成アルゴリズムと
のうちのいずれかの生成アルゴリズムを選択し、選択した当該生成アルゴリズムに基づいて前記入力データを生成する
ことを特徴とする請求項１に記載の検証支援方法。
【請求項７】
プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成部と、
前記グラフ生成部が生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成部と、
前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成部が生成した入力データにより前記プログラムを実行させる実行制御部と、
前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較部と
を備えることを特徴とする検証支援装置。
【請求項８】
コンピュータに、
プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成ステップと、
前記グラフ生成ステップにて生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成ステップと、
前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成ステップにて生成した入力データにより前記プログラムを実行させる実行制御ステップと、
前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較ステップと
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証支援方法、検証支援装置、及びプログラムに関する。
【背景技術】
【０００２】
金融機関や公共機関などの業務において、例えば、ＣＯＢＯＬ（COmmon Business Oriented Language）で構築されたプログラムが多数利用されている。このようなプログラムを、新しい実行基盤（実行環境）にシステム更改する際には、更改前の旧環境と、更改後の新環境とでそれぞれプログラムを実行して、プログラムのどの部分が実行されたかを示すカバレッジ情報を利用してプログラムの検証を行っている。また、このようなプログラムの検証のために、プログラムを実行して自動的にカバレッジ情報を出力する技術が知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−３２４４０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述のような技術では、プログラムを動作させるための入力データを作成する必要があり、プログラムを網羅的に実行するための入力データを作成するのに膨大な作業工数が必要になることがあった。そのため、プログラムを網羅的に実行するための入力データを自動で生成して、より効率良くプログラムの検証を行うことができる技術が望まれる。
【０００５】
本発明は、上記問題を解決すべくなされたもので、その目的は、より効率良くプログラムの検証を行うことができる検証支援方法、検証支援装置、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記問題を解決するために、本発明の一態様は、グラフ生成部が、プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成ステップと、データ生成部が、前記グラフ生成ステップにて生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成ステップと、実行制御部が、前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成ステップにて生成した入力データにより前記プログラムを実行させる実行制御ステップと、比較部が、前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較ステップとを含むことを特徴とする検証支援方法である。
【０００８】
また、本発明の一態様は、上記の検証支援方法において、前記データ生成ステップにおいて、前記実行経路に対して、当該実行経路におけるデータ処理ノードの処理を制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成することを特徴とする。
【０００９】
また、本発明の一態様は、上記の検証支援方法において、前記データ生成ステップにおいて、前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成することを特徴とする。
【００１０】
また、本発明の一態様は、上記の検証支援方法において、前記データ生成ステップにおいて、前記実行経路に対して、前記分岐処理ノードごとに、乱数に基づいて前記入力データを生成する第１の生成アルゴリズムと、前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成する第２の生成アルゴリズムと、前記実行経路に対して、当該実行経路におけるデータ処理ノードを制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成する第３の生成アルゴリズムとを組み合わせて、前記入力データを生成することを特徴とする。
【００１１】
また、本発明の一態様は、上記の検証支援方法において、前記データ生成ステップにおいて、前記第１の生成アルゴリズムと第２の生成アルゴリズムとのうちの少なくとも一方に基づいて前記入力データを生成した後に、前記実行経路のうち、生成した前記入力データにて実行されない実行経路に対して、前記第３の生成アルゴリズムに基づいて前記入力データを生成することを特徴とする。
【００１２】
また、本発明の一態様は、上記の検証支援方法において、前記データ生成ステップにおいて、前記プログラムの規模に基づいて、前記実行経路に対して、前記分岐処理ノードごとに、乱数に基づいて前記入力データを生成する第１の生成アルゴリズムと、前記実行経路に対して、前記分岐処理ノードごとに、分岐条件を満たす前記入力データを生成する第２の生成アルゴリズムと、前記実行経路に対して、当該実行経路におけるデータ処理ノードを制約として、前記分岐処理ノードの分岐条件を満たす前記入力データを生成する第３の生成アルゴリズムとのうちのいずれかの生成アルゴリズムを選択し、選択した当該生成アルゴリズムに基づいて前記入力データを生成することを特徴とする。
【００１３】
また、本発明の一態様は、プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成部と、前記グラフ生成部が生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成部と、前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成部が生成した入力データにより前記プログラムを実行させる実行制御部と、前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較部とを備えることを特徴とする検証支援装置である。
【００１４】
また、本発明の一態様は、コンピュータに、プログラムを記述したソースコードを記憶するソースコード記憶部から前記ソースコードを取得し、取得した前記ソースコードを構文解析して、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含むグラフ構造を生成するグラフ生成ステップと、前記グラフ生成ステップにて生成したグラフ構造に基づいて、前記プログラムを実行する実行経路を抽出し、抽出した前記実行経路を前記プログラムに実行させるための入力データを生成するデータ生成ステップと、前記プログラムにより正常に動作することが確認されている第１の実行環境と、前記プログラムにより正常に動作することが確認されていない第２の実行環境とのそれぞれの実行環境において、前記データ生成ステップにて生成した入力データにより前記プログラムを実行させる実行制御ステップと、前記第１の実行環境と前記第２の実行環境とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果を比較する比較ステップとを実行させるためのプログラムである。
【発明の効果】
【００１５】
本発明によれば、より効率良くプログラムの検証を行うことができる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施形態による検証支援システムの一例を示すブロック図である。
【図２】同実施形態におけるソース記憶部が記憶するソースコードの一例を示す図である。
【図３】同実施形態におけるグラフ記憶部が記憶する中間データの一例を示す図である。
【図４】同実施形態におけるグラフ構造の一例を示す図である。
【図５】同実施形態におけるランダム生成処理の一例を示す図である。
【図６】同実施形態におけるシンプル生成処理の一例を示す図である。
【図７】同実施形態におけるシンボリック生成処理の一例を示す図である。
【図８】第１の実施形態による検証支援システムの動作の一例を示すフローチャートである。
【図９】同実施形態におけるノードの再構成の一例を示す図である。
【図１０】同実施形態におけるテストコードの実行動作の一例を示す図である。
【図１１】同実施形態における比較結果の表示例を示す図である。
【図１２】同実施形態におけるグラフ構造の生成処理の一例を示すフローチャートである。
【図１３】同実施形態におけるランダム生成処理の一例を示すフローチャートである。
【図１４】同実施形態におけるシンプル生成処理の一例を示すフローチャートである。
【図１５】同実施形態におけるシンボリック生成処理の一例を示すフローチャートである。
【図１６】第２の実施形態による検証支援システムの動作の一例を示すフローチャートである。
【図１７】第３の実施形態による検証支援システムの動作の一例を示すフローチャートである。
【図１８】本実施形態による比較結果の表示の変形例を示す第１の図である。
【図１９】本実施形態による比較結果の表示の変形例を示す第２の図である。
【図２０】本実施形態による比較結果の表示の変形例を示す第３の図である。
【発明を実施するための形態】
【００１７】
以下、本発明の一実施形態による検証支援装置、及び検証支援方法について、図面を参照して説明する。
［第１の実施形態］
図１は、本実施形態による検証支援システム１００の一例を示すブロック図である。
この図に示すように、検証支援システム１００は、検証支援装置１と、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とを備えている。
検証支援システム１００は、例えば、ＣＯＢＯＬによって旧環境（更改前の環境）で構築されているプログラムを、新しい環境である新環境（更改後の環境）に移植（更改）する場合に、プログラムが正しく新環境に移植されたか否かの検証を支援する。
【００１８】
本実施形態による検証支援システム１００は、検証支援装置１がＣＯＢＯＬのソースコードから検証用の入力データを生成するとともに、生成した入力データにより、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とのそれぞれで対象のプログラムを実行させる。そして、検証支援システム１００は、旧環境のコンピュータ装置２の実行結果と、新環境のコンピュータ装置３の実行結果とを比較することにより、対象のプログラムが正しく新環境に移植されたか否かの検証を支援する。
【００１９】
旧環境のコンピュータ装置２は、移植前（更改前）の動作環境であるコンピュータ装置である。
新環境のコンピュータ装置３は、移植後（更改後）の動作環境であるコンピュータ装置である。
【００２０】
検証支援装置１は、対象のプログラムを検出するための入力データを生成するとともに、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とで、生成した入力データによって対象のプログラムを実行させるテストコード（テストドライバ、及びスタブ）を生成する。そして、検証支援装置１は、生成したテストコード（テストドライバ及びスタブ）を、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とのそれぞれに実行させ、旧環境のコンピュータ装置２の実行結果と、新環境のコンピュータ装置３の実行結果とを比較する。
検証支援装置１は、入力部１０と、表示部２０と、記憶部３０と、制御部４０とを備えている。
【００２１】
入力部１０は、例えば、キーボードやマウスなどの入力装置であり、ユーザからの各種入力を受け付けて、制御部４０に出力する。入力部１０は、例えば、ソースコードの指定や、比較結果の表示の指定などを受け付ける。
【００２２】
表示部２０は、例えば、液晶ディスプレイなどの表示装置であり、検証支援装置１を操作するための各種表示を表示する。また、表示部２０は、例えば、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３との実行結果の比較結果（例えば、カバレッジ情報の比較結果など）を表示する。ここでカバレッジとは、例えば、ソースコードに含まれる全ステップ数に対する実際に実行されたステップ数の割合を示す。また、カバレッジ情報には、例えば、少なくともカバレッジを示す情報を含んでいる。
【００２３】
記憶部３０は、検証支援装置１が利用する各種情報を記憶する。記憶部３０は、例えば、ソース記憶部３１、グラフ記憶部３２、入力データ記憶部３３、実行環境記憶部３４、及び実行結果記憶部３５を備えている。
【００２４】
ソース記憶部３１（ソースコード記憶部）は、対象のプログラムを記述したソースコードを記憶する。ここでソースコードは、例えば、図２に示すように、ＣＯＢＯＬにより記述されたプログラムである。
図２は、実施形態におけるソース記憶部３１が記憶するソースコードの一例を示す図である。図２に示す例では、ソースコード（ＳＣ１）は、ＣＯＢＯＬにより記述されたプログラムであり、ソース記憶部３１は、ソースコードをテキストファイルとして記憶している。なお、この図２において、ソースコードの左端の数字は、ソースコードの行数を示している。
【００２５】
図１の説明に戻り、グラフ記憶部３２は、ソース記憶部３１が記憶するソースコードに基づいて生成される、中間データ、グラフ構造を示すグラフ構造情報などを記憶する。
ここで、中間データとは、ソースコードを構文解析したデータであり、例えば、図３に示すように、中間データ（ＸＤ１）は、ＸＭＬ（Extensible Markup Language）で記述されている。また、グラフ構造情報は、図４に示すように、ノードとエッジとで構成される数学的グラフ構造のデータである。中間データ、及びグラフ構造情報は、後述するグラフ生成部４１によって生成される。中間データ、及びグラフ構造情報の詳細については、図３及び図４を参照して後述する。
【００２６】
再び、図１に戻り、入力データ記憶部３３は、後述するデータ生成部４２が生成した検証用の入力データを記憶する。
実行環境記憶部３４は、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とで、対象のプログラムを実行させるための環境情報（例えば、テストコードやスタブ）を記憶する。なお、この環境情報は、後述する実行制御部４３によって構築（生成）される。
実行結果記憶部３５は、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とで実行し対象のプログラムの実行結果、及び、後述する結果比較部４４が比較した比較結果を記憶する。
【００２７】
制御部４０は、例えば、ＣＰＵ（Central Processing Unit）などを含むプロセッサであり、検証支援装置１を統括的に制御する。制御部４０は、グラフ生成部４１と、データ生成部４２と、実行制御部４３と、結果比較部４４とを備えている。
【００２８】
グラフ生成部４１は、ソース記憶部３１からソースコードを取得し、取得したソースコードを構文解析して、グラフ構造を生成する。グラフ生成部４１は、例えば、図２に示すようなソースコード（ＳＣ１）を取得し、取得したソースコード（ＳＣ１）を構文解析して、図３に示すようなＸＭＬによる中間データ（ＸＤ１）を生成する。グラフ生成部４１は、例えば、図２に示すソースコード（ＳＣ１）の“４０”行目の記述を、図３に示す中間データ（ＸＤ１）におけるＸＭＬの記述ＤＳＣ１に変換する。グラフ生成部４１は、生成したＸＭＬによる中間データをグラフ記憶部３２に記憶させる。
【００２９】
また、グラフ生成部４１は、グラフ記憶部３２が記憶する図３に示すような中間データ（ＸＤ１）から、図４に示すようなグラフ構造（ＧＲ１）を示す情報を生成する。グラフ生成部４１は、例えば、中間データのうち、“PROCEDURE DIVISION”の部分をグラフ構造化して、グラフ構造を生成する。また、グラフ生成部４１は、中間データのうち、実行経路（以下、ルートという）の解析に必要な情報、及びテストデータの生成に必要な情報をノード化して、グラフ構造情報を生成する。ここで、ルートの解析に必要な情報は、例えば、条件分岐文、“ＰＥＲＦＯＲＭ”文、“ＧＯＴＯ”文などの記述である。また、テストデータの生成に必要な情報は、例えば、代入文、四則演算などの演算処理、文字列処理などの記述である。すなわち、グラフ生成部４１は、データの処理に関するノード（代入文、演算処理、文字列処理など）であるデータ処理ノードと、処理の分岐に関するノード（条件分岐、“ＰＥＲＦＯＲＭ”文、“ＧＯＴＯ”文など）である分岐処理ノードとを含むグラフ構造を生成する。
【００３０】
なお、図４に示すように、分岐処理ノードには、分岐条件を示す情報が含まれている。例えば、図４に示すノードＮ１には、“４０：ＩＦ  ＢＥＡＮ１−１  ＝  ０”という分岐条件を示す情報が含まれている。ここで、“４０”は、ソースコードにおける行番号を示し、“ＩＦ  ＢＥＡＮ１−１  ＝  ０”が分岐条件を示す情報である。
また、データ処理ノードには、代入文、演算処理、文字列処理などのデータの処理情報が含まれている。例えば、図４に示すノードＮ２には、“４２：ＭＯＶＥ  ‘３’  ＴＯ  ＢＥＡＮ１−４” というデータの処理情報を含んでいる。
また、グラフ生成部４１は、生成したグラフ構造を示すグラフ構造情報をグラフ記憶部３２に記憶させる。
【００３１】
データ生成部４２は、グラフ生成部４１が生成したグラフ構造に基づいて、対象のプログラムを実行するルートを抽出し、抽出したルートを対象のプログラムに実行させるための入力データを生成する。本実施形態では、データ生成部４２は、以下の３つの生成アルゴリズムに基づいて、入力データを生成する。
【００３２】
データ生成部４２は、第１の生成アルゴリズムとして、抽出したルートに対して、分岐処理ノードごとに、乱数に基づいて入力データを生成するランダム生成処理を実行して、入力データを生成する。この場合、データ生成部４２は、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。そして、データ生成部４２は、対象の変数の変数型などから生成する入力データの範囲を設定し、設定した範囲内で乱数に基づいて入力データを生成する。なお、ランダム生成処理の詳細については、後述する。
【００３３】
また、データ生成部４２は、第２の生成アルゴリズムとして、抽出したルートに対して、分岐処理ノードごとに、分岐条件を満たす入力データを生成するシンプル生成処理を実行して、入力データを生成する。この場合、データ生成部４２は、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。そして、データ生成部４２は、対象の変数により分岐条件を満たす入力データを生成する。なお、このシンプル生成処理の場合には、データ生成部４２は、データ処理ノードによる代入処理や演算処理を考慮せずに、入力データを生成する。なお、シンプル生成処理の詳細については、後述する。
【００３４】
また、データ生成部４２は、第３の生成アルゴリズムとして、抽出したルートに対して、当該ルートにおけるデータ処理ノードを制約として、分岐処理ノードの分岐条件を満たす入力データを生成するシンボリック生成処理を実行して、入力データを生成する。すなわち、データ生成部４２は、制約充足問題を解くことにより入力データを生成する。なお、シンボリック生成処理の詳細については、後述する。
【００３５】
また、データ生成部４２は、例えば、対象のプログラムの規模に基づいて、上述した３つの生成アルゴリズムのうちのいずれかの生成アルゴリズムを選択し、選択した当該生成アルゴリズムに基づいて入力データを生成する。ここで、データ生成部４２は、対象のプログラムの規模を、例えば、ノードの数、ルートの数、ＩＦ文の数などに基づいて判定する。データ生成部４２は、例えば、対象のプログラムの規模を“大規模”、“中規模”、“小規模”の３種類に分類する。データ生成部４２は、例えば、対象のプログラムの規模が“大規模”であると判定した場合に、ランダム生成処理にて入力データを生成する。また、データ生成部４２は、例えば、対象のプログラムの規模が“中規模”であると判定した場合に、シンプル生成処理にて入力データを生成する。また、データ生成部４２は、例えば、対象のプログラムの規模が“小規模”であると判定した場合に、シンボリック生成処理にて入力データを生成する。
【００３６】
また、対象のプログラムの規模と、生成処理時間、又は、入力データによるカバレッジとの関係を統計的に予め求めておき、データ生成部４２は、生成処理時間、又はカバレッジが最適になるように、対象のプログラムの規模に応じて、入力データを生成する生成アルゴリズムを決定してもよい。
データ生成部４２は、生成した入力データを入力データ記憶部３３に記憶させる。
【００３７】
実行制御部４３は、第１の実行環境と、第２の実行環境とのそれぞれの実行環境において、データ生成部４２が生成した入力データにより対象のプログラムを実行させる。ここで、第１の実行環境は、対象のプログラムにより正常に動作することが確認されている旧環境であり、第２の実行環境は、対象のプログラムにより正常に動作することが確認されていない新環境のことである。
具体的に、実行制御部４３は、それぞれの環境でプログラムを実行させる、テストコード（テストドライバ、及び、入力データを含むスタブ）を生成し、生成したテストコード（テストドライバ、及びスタブ）と、ソースコードとを実行環境記憶部３４に記憶させる。実行制御部４３は、実行環境記憶部３４が記憶するソースコード、テストコード（テストドライバ、及びスタブ）により、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とのそれぞれに、対象のプログラムを実行させる。なお、実行制御部４３によるテストコードの実行動作の詳細については、後述する。
また、実行制御部４３は、旧環境のコンピュータ装置２と、新環境のコンピュータ装置３とのそれぞれが対象のプログラムを実行した実行結果を実行結果記憶部３５に記憶させる。
【００３８】
結果比較部４４（比較部の一例）は、旧環境と新環境とのそれぞれで実行されたルートと当該実行回数とを含むそれぞれの実行結果を比較する。結果比較部４４は、旧環境と新環境とにおいて、例えば、プログラムのどの部分が実行されたかを示すカバレッジ情報を比較して、当該比較結果を表示部２０に表示させる。
【００３９】
＜ランダム生成処理＞
次に、図５を参照して、本実施形態におけるランダム生成処理について説明する。
図５は、本実施形態におけるランダム生成処理の一例を示す図である。
データ生成部４２は、図５に示すグラフ構造ＧＲ２に対して、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。この図に示すグラフ構造ＧＲ２では、変数“Ａ”、“Ｂ”が、入力データを生成する対象の変数となる。データ生成部４２は、この変数“Ａ”、“Ｂ”に対して、乱数に基づいて、図５に示すような入力データＤ１を生成する。
【００４０】
図５に示す例では、「テスト１」として、“Ａ＝０、Ｂ＝０”の入力データが生成されたことを示している。また、「テスト２」として、“Ａ＝８８、Ｂ＝５９”の入力データが生成されたことを示している。
このように、ランダム生成処理では、データ生成部４２は、乱数に基づいて入力データを生成するため、大規模又は複雑なプログラムに対しても、入力データを生成することができる。また、データ生成部４２は、乱数を生成するという簡易な手段により、入力データを生成することができる。
【００４１】
＜シンプル生成処理＞
次に、図６を参照して、本実施形態におけるシンプル生成処理について説明する。
図６は、本実施形態におけるシンプル生成処理の一例を示す図である。
データ生成部４２は、図６に示すグラフ構造ＧＲ３に対して、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。この図に示すグラフ構造ＧＲ３では、変数“Ａ”、“Ｂ”が、入力データを生成する対象の変数となる。データ生成部４２は、抽出したルートごとに、この変数“Ａ”、“Ｂ”に対して、分岐の条件を満たす値として、図６に示すような入力データＤ２を生成する。
【００４２】
図６に示す例では、データ生成部４２は、ルートＲＴ１に対応する「テスト１」として、“Ａ＝０”の入力データを生成する。また、データ生成部４２は、ルートＲＴ２に対応する「テスト２」として、“Ａ＝１、Ｂ＝０”の入力データを生成する。また、データ生成部４２は、ルートＲＴ３に対応する「テスト３」として、“Ａ＝１、Ｂ＝１”の入力データを生成する。
このように、シンプル生成処理では、データ生成部４２は、ルートごとに、分岐条件を単独で満たす入力データを生成するので、より簡易な手段により、入力データを生成することができる。また、データ生成部４２は、入力データを生成する処理時間を短縮することができる。
【００４３】
＜シンボリック生成処理＞
次に、図７を参照して、本実施形態におけるシンボリック生成処理について説明する。
図７は、本実施形態におけるシンボリック生成処理の一例を示す図である。
データ生成部４２は、図７に示すグラフ構造ＧＲ４に対して、抽出したルートごとに、各ノードをシンボリック式（図７シンボル式ＳＢ１）に変換する。データ生成部４２は、各シンボル式を制約として、分岐処理ノードの分岐条件を満たす入力データを生成する。すなわち、データ生成部４２は、各シンボル式を制約として、制約充足問題を解くことにより、入力データを生成する。なお、データ生成部４２は、分岐条件を満たす入力データを生成する場合に、分岐処理ノードから遡って分岐条件を満たす入力データを生成してもよいし、ルートに沿って、シンボル式を演算して、分岐条件を満たす入力データを生成してもよい。
図７に示す例では、データ生成部４２は、ルートＲＴ４に対して、“Ａ＝ａｎｙ（任意）、Ｂ＝−１”の入力データ（Ｄ３）を生成する。
このように、シンボリック生成処理では、データ生成部４２は、ルートの途中で条件式に関わる演算がされている場合もあっても、適切な入力データを生成することができる。
【００４４】
次に、図面を参照して、本実施形態による検証支援システム１００の動作について説明する。
図８は、本実施形態による検証支援システム１００の動作の一例を示すフローチャートである。
この図において、まず、検証支援装置１の制御部４０は、ソースコードを取得する（ステップＳ１０１）。すなわち、制御部４０のグラフ生成部４１は、ソース記憶部３１
が記憶するソースコードを取得する。
【００４５】
次に、グラフ生成部４１は、グラフ構造を生成する（ステップＳ１０２）。すなわち、グラフ生成部４１は、取得したソースコードを、まず、構文解析して、ＸＭＬによる中間データを生成し、生成した中間データに基づいて、グラフ構造を生成する。なお、このステップＳ１０２の処理の詳細については、図１２を参照して後述する。グラフ生成部４１は、生成したグラフ構造を示す情報（グラフ構造情報）をグラフ記憶部３２に記憶させる。
【００４６】
次に、制御部４０のデータ生成部４２は、ルート検索処理を行う（ステップＳ１０３）。すなわち、データ生成部４２は、グラフ記憶部３２が記憶するグラフ構造情報に基づいて、ルートを抽出する。データ生成部４２は、抽出したルートを示す情報を、例えば、入力データ記憶部３３に記憶させる。
【００４７】
次に、データ生成部４２は、グラフ構造情報をシーケンスなプログラムに展開する（ステップＳ１０４）。データ生成部４２は、例えば、ＰＥＲＦＯＲＭ文の呼び先のプログラムをコピーして、プログラムに展開し、１つのシーケンシャルなプログラムにする。
【００４８】
次に、データ生成部４２は、意味のある処理単位にノードを再構成する（ステップＳ１０５）。データ生成部４２は、例えば、図９に示すように、複数の文から構成される処理を１つのノードとしてまとめて再構成する。ここで、図９を参照して、意味のある処理単位にノードを再構成する処理について説明する。
【００４９】
図９は、本実施形態におけるノードの再構成の一例を示す図である。
この図において、ソースコードＳＣ２には、条件式“Ａ＝Ｂ  ＡＮＤ  Ｃ＝Ｄ”により、“処理１”と“処理２”とに分岐する分岐処理が記述されている。また、ソースコードＳＣ３には、条件式“Ａ＝Ｂ”と条件式“Ｃ＝Ｄ”との２回の分岐処理により、“処理１”と“処理２”とに分岐する処理が記述されている。この２つの処理は、同一の処理を実行するが、ソースコードＳＣ２と、ソースコードＳＣ３とでは、記述が異なっている。そのため、グラフ構造は、ソースコードＳＣ２ではグラフ構造ＧＲ５に示すように１つのノードで表され、ソースコードＳＣ３ではグラフ構造ＧＲ６に示すように２つのノードで表される。
このような場合には、データ生成部４２は、ソースコードＳＣ３のグラフ構造ＧＲ６において、２つのノードを１つに再構成し、図９に示すグラフ構造ＧＲ５のようなグラフ構造を生成する。このように、ノードの再構成を行うことにより、検証支援装置１は、グラフ構造を簡略化することができるとともに、実行結果をグラフ構造により比較し易くすることができる。
【００５０】
図８に戻り、次に、データ生成部４２は、実行可能なルートをグラフ記憶部３２に記憶させる（ステップＳ１０６）。
次に、データ生成部４２は、対象のプログラムの規模に基づき、生成アルゴリズムを決定する（ステップＳ１０７）。例えば、データ生成部４２は、対象のプログラムの規模を、例えば、ノードの数、ルートの数、ＩＦ文の数などに基づいて判定する。データ生成部４２は、例えば、対象のプログラムの規模が“大規模”であると判定した場合に、生成アルゴリズムにランダム生成処理を選択する。また、データ生成部４２は、例えば、対象のプログラムの規模が“中規模”であると判定した場合に、生成アルゴリズムにシンプル生成処理を選択する。また、データ生成部４２は、例えば、対象のプログラムの規模が“小規模”であると判定した場合に、生成アルゴリズムにシンボリック生成処理を選択する。
【００５１】
ステップＳ１０８において、データ生成部４２は、ランダム生成処理を選択した場合に、処理をステップＳ１０９に進め、ランダム生成処理を行う。また、ステップＳ１０９の処理後に、データ生成部４２は、処理をステップＳ１１２に進める。なお、ステップＳ１０９のランダム生成処理の詳細については、後述する。
【００５２】
また、データ生成部４２は、シンプル生成処理を選択した場合に、処理をステップＳ１１０に進め、シンプル生成処理を行う。また、ステップＳ１１０の処理後に、データ生成部４２は、処理をステップＳ１１２に進める。なお、ステップＳ１１０のシンプル生成処理の詳細については、後述する。
【００５３】
また、データ生成部４２は、シンボリック生成処理を選択した場合に、処理をステップＳ１１１に進め、シンボリック生成処理を行う。また、ステップＳ１１１の処理後に、データ生成部４２は、処理をステップＳ１１２に進める。なお、ステップＳ１１１のシンボリック生成処理の詳細については、後述する。
【００５４】
ステップＳ１１２において、制御部４０の実行制御部４３は、旧環境のテストコードを作成する。実行制御部４３は、データ生成部４２が生成した入力データに基づいて、例えば、図１０に示すような、テストドライバＴＤ１と、スタブＳＴＢ１、及びテスト用ソースコードＴＣ１（単体テスト用ＣＯＢＯＬソースコード）とを旧環境のテスト環境情報として生成し、生成した旧環境のテスト環境情報を実行環境記憶部３４に記憶させる。
【００５５】
次に、実行制御部４３は、旧環境でテストコードを実行させる（ステップＳ１１３）。すなわち、実行制御部４３は、実行環境記憶部３４が記憶する旧環境のテスト環境情報を旧環境のコンピュータ装置２に送信して、テストコードを実行させる。
ここで、図１０を参照して、テストコードの実行動作について説明する。
【００５６】
＜テストコードの実行動作＞
図１０は、本実施形態におけるテストコードの実行動作の一例を示す図である。
実行制御部４３は、データ生成部４２が生成した入力データに基づいて、図１０に示すような、テストドライバＴＤ１と、スタブＳＴＢ１と、テスト用ソースコードＴＣ１（単体テスト用ＣＯＢＯＬソースコード）とをテスト環境情報として生成する。そして、実行制御部４３は、テスト環境情報を旧環境のコンピュータ装置２に送信して、テストコードを実行させる。
旧環境のコンピュータ装置２は、テストコードを実行する際に、次のように、テストコードを実行する。
【００５７】
まず、［ＳＴＥＰ１］として、旧環境のコンピュータ装置２は、テストドライバＴＤ１を実行する際に、テストを実行する前に、スタブＳＴＢ１に値（入力データ）をセットする。
次に、［ＳＴＥＰ２］として、旧環境のコンピュータ装置２は、テストを実行する。すなわち、旧環境のコンピュータ装置２及び新環境のコンピュータ装置３は、テストドライバＴＤ１のｃａｌｌ記述により、テスト用ソースコードＴＣ１（単体テスト用ＣＯＢＯＬソースコード）を呼び出して実行する。
次に、［ＳＴＥＰ３］として、旧環境のコンピュータ装置２は、テスト用ソースコードＴＣ１の実行において、スタブＳＴＢ１から値（入力データ）をゲット（取得）して、テストを実行する。
このように、旧環境のコンピュータ装置２は、実行制御部４３が生成（作成）したテスト環境により、テストを実行する。
【００５８】
再び、図８に戻り、次に、実行制御部４３は、旧環境でのテストコードを実行結果記憶部３５に記憶させる（ステップＳ１１４）。すなわち、実行制御部４３は、旧環境のコンピュータ装置２からテストコードの実行結果を取得し、取得した旧環境でのテストコードの実行結果を実行結果記憶部３５に記憶させる。実行制御部４３は、対象のプログラムの全ルートと、旧環境での実行可否フラグ、及び実行回数とを含むカバレッジ情報を実行結果として、実行結果記憶部３５に記憶させる。
【００５９】
次に、実行制御部４３は、新環境のテストコードを作成する（ステップＳ１１５）。すなわち、実行制御部４３は、例えば、図１０に示すような、テストドライバＴＤ１と、スタブＳＴＢ１と、テスト用ソースコードＴＣ１（単体テスト用ＣＯＢＯＬソースコード）とを新環境のテスト環境情報として生成し、生成した新環境のテスト環境情報を実行環境記憶部３４に記憶させる。
【００６０】
次に、実行制御部４３は、新環境でテストコードを実行させる（ステップＳ１１６）。すなわち、実行制御部４３は、実行環境記憶部３４が記憶する新環境のテスト環境情報を新環境のコンピュータ装置３に送信して、テストコードを実行させる。ここでの新環境のコンピュータ装置３の動作は、上述した図１０に示す動作と同様である。
【００６１】
次に、実行制御部４３は、新環境でのテストコードを実行結果記憶部３５に記憶させる（ステップＳ１１７）。すなわち、実行制御部４３は、新環境のコンピュータ装置３からテストコードの実行結果を取得し、取得した新環境でのテストコードの実行結果を実行結果記憶部３５に記憶させる。実行制御部４３は、対象のプログラムの全ルートと、新環境での実行可否フラグ、及び実行回数とを含むカバレッジ情報を実行結果として、実行結果記憶部３５に記憶させる。
【００６２】
次に、制御部４０の結果比較部４４は、旧環境と新環境との実行結果を比較する（ステップＳ１１８）。すなわち、結果比較部４４は、実行結果記憶部３５が記憶する旧環境での実行結果であるカバレッジ情報と、新環境での実行結果であるカバレッジ情報とを比較し、当該比較結果を表示部２０に表示させて、処理を終了する。結果比較部４４は、比較結果として、例えば、図１１に示すような画面Ｇ１を表示部２０に表示させる。
【００６３】
図１１は、本実施形態における比較結果の表示例を示す図である。
この図において、カバレッジ情報ＣＶ１は、旧環境のコンピュータ装置２によってテストコードを実行した実行結果を示し、カバレッジ情報ＣＶ２は、新環境のコンピュータ装置３によってテストコードを実行した実行結果を示している。
図１１に示すように、結果比較部４４は、旧環境のコンピュータ装置２によるカバレッジ情報ＣＶ１と、新環境のコンピュータ装置３によるカバレッジ情報ＣＶ２とを比較可能なように、並べて表示部２０に表示させる。
【００６４】
なお、図１１に示す例では、相違箇所ＤＦ１に示すように、ソースコードの５４行目に対応する処理が、新環境のコンピュータ装置３において実行されていないことを示している。その結果、相違箇所ＤＦ２に示すように、呼び出された累計回数に、旧環境と新環境とで差異が生じている。この場合、対象のプログラムは、新環境のコンピュータ装置３において、旧環境のコンピュータ装置２とは動作が異なることを示し、ユーザは、対象のプログラムを現在の状態では、新環境のコンピュータ装置３に適用できないことを判定することができる。
一方で、例えば、実行された箇所、及び呼び出された累計回数に、旧環境と新環境とで差異が生じていない場合には、対象のプログラムにおいて、旧環境と新環境とで同値性が確認されたことになり、対象のプログラムの移植（更改）が問題ないことになる。
【００６５】
次に、図１２を参照して、上述した図８のステップＳ１０２におけるグラフ構造の生成処理の詳細について説明する。
図１２は、本実施形態におけるグラフ構造の生成処理の一例を示すフローチャートである。
この図に示すように、グラフ生成部４１は、取得したソースコードの構文解析を行い、中間データを生成する（ステップＳ２０１）。すなわち、グラフ生成部４１は、例えば、図２に示すソースコード（ＳＣ１）を、図３に示すようなＸＭＬによる中間データ（ＸＤ１）に変換する。グラフ生成部４１は、生成（変換）したＭＬによる中間データをグラフ記憶部３２に記憶させる。
【００６６】
次に、グラフ生成部４１は、中間データに基づきグラフ構造を生成する（ステップＳ２０２）。すなわち、グラフ生成部４１は、グラフ記憶部３２が記憶する図３に示すようなＸＭＬによる中間データ（ＸＤ１）からグラフ構造を生成し、当該グラフ構造を示す情報をグラフ記憶部３２に記憶させる。
【００６７】
次に、グラフ生成部４１は、グラフ構造のノードを限定する（ステップＳ２０３）。グラフ生成部４１は、例えば、グラフ構造を“PROCEDURE DIVISION”の部分のみに限定する。また、グラフ生成部４１は、例えば、条件分岐文、“ＰＥＲＦＯＲＭ”文、“ＧＯＴＯ”文などの記述、及び、代入文、四則演算などの演算処理、文字列処理などの記述にグラフ構造を限定し、図４に示すようなグラフ構造（ＧＲ１）を生成する。また、グラフ生成部４１は、限定して生成したグラフ構造を示す情報をグラフ記憶部３２に記憶させる。
これにより、グラフ構造を示す情報が簡略化されるので、後でデータ生成部４２が実行する入力データの生成処理における処理負荷（処理の計算量）を低減することになる。
ステップＳ２０３の処理後に、グラフ生成部４１は、グラフ構造の生成処理を終了する。
【００６８】
次に、図１３を参照して、上述した図８のステップＳ１０９におけるランダム生成処理の詳細について説明する。
図１３は、本実施形態におけるランダム生成処理の一例を示すフローチャートである。
この図に示すように、まず、データ生成部４２は、対象の変数を特定する（ステップＳ３０１）。すなわち、データ生成部４２は、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。
【００６９】
次に、ステップＳ３０２からステップＳ３０４において、データ生成部４２は、予め指定された指定時間内、ステップＳ３０３の処理を繰り返し実行する。なお、指定時間は、入力部１０を介して、ユーザから指定されてもよいし、過去の生成処理の結果を統計的に解析して、対象のプログラムの規模などから指定されてもよい。
ステップＳ３０３において、データ生成部４２は、対象の変数の範囲を考慮して、図５に示すように、ランダムに入力データを生成する。データ生成部４２は、例えば、対象の変数が定義されている変数型の取り得る範囲内の乱数を生成し、生成した乱数に基づいて入力データを生成する。
データ生成部４２は、予め指定された指定時間の経過後に、ランダム生成処理を終了する。
【００７０】
次に、図１４を参照して、上述した図８のステップＳ１１０におけるシンプル生成処理の詳細について説明する。
図１４は、本実施形態におけるシンプル生成処理の一例を示すフローチャートである。
この図に示すように、まず、データ生成部４２は、対象の変数を特定する（ステップＳ４０１）。すなわち、データ生成部４２は、抽出したルートを検索することで、入力データを生成する対象の変数を特定する。
【００７１】
次に、ステップＳ４０２からステップＳ４０４において、データ生成部４２は、予め指定された指定実行ルート数に達するまで、ステップＳ４０３の処理を繰り返し実行する。なお、指定実行ルート数は、入力部１０を介して、ユーザから指定されてもよいし、過去の生成処理の結果を統計的に解析して、対象のプログラムの規模などから指定されてもよい。
ステップＳ４０３において、データ生成部４２は、図６に示すように、条件式から対象の変数の入力データを生成する。
データ生成部４２は、予め指定された指定実行ルート数に達した後に、シンプル生成処理を終了する。
【００７２】
次に、図１５を参照して、上述した図８のステップＳ１１１におけるシンボリック生成処理の詳細について説明する。
図１５は、本実施形態におけるシンボリック生成処理の一例を示すフローチャートである。
この図に示すように、まず、データ生成部４２は、ルートの共通部分の制約充足問題を解き、データを生成するルートを特定する（ステップＳ５０１）。ここで、データ生成部４２は、共通部分の制約充足問題が解けなかった場合には、当該共通部分を含むルートを入力データの生成対象から除外する。また、データ生成部４２は、後述するＳ５０３において、入力データ記憶部３３に記憶させた解が得られないルートの特徴に基づいて、対象のルートを限定する。すなわち、データ生成部４２は、解が得られないルートの特徴を示すルートを入力データの生成対象から除外する。
【００７３】
次に、データ生成部４２は、ステップＳ５０２からステップＳ５０５において、データ生成部４２は、予め指定された指定実行ルート数に達するまで、ステップＳ５０３及びステップＳ５０４の処理を繰り返し実行する。なお、指定実行ルート数は、入力部１０を介して、ユーザから指定されてもよいし、過去の生成処理の結果を統計的に解析して、対象のプログラムの規模などから指定されてもよい。
【００７４】
ステップＳ５０３において、データ生成部４２は、図７に示すように、制約充足問題を解くことで、各ルートに対しる入力データを生成する。
また、ステップＳ５０４において、データ生成部４２は、制約充足問題を解くことができない場合には、制約充足問題の解が得られないルートの特徴を入力データ記憶部３３に記憶させる。
データ生成部４２は、予め指定された指定実行ルート数に達した後に、シンボリック生成処理を終了する。
【００７５】
なお、上述において、グラフ生成部４１の処理は、グラフ生成ステップに対応し、データ生成部４２の処理は、データ生成ステップに対応し、実行制御部４３の処理は、実行制御ステップに対応し、結果比較部４４の処理は、結果比較ステップに対応する。
【００７６】
以上説明したように、本実施形態による検証支援方法は、グラフ生成ステップと、データ生成ステップと、実行制御ステップとを含んでいる。グラフ生成ステップにおいて、グラフ生成部４１が、プログラムを記述したソースコードを記憶するソース記憶部３１からソースコードを取得し、取得したソースコードを構文解析して、グラフ構造を生成する。なお、グラフ構造には、データの処理に関するノードであるデータ処理ノードと、処理の分岐に関するノードである分岐処理ノードとを含む。データ生成ステップにおいて、データ生成部４２が、グラフ生成ステップにて生成したグラフ構造に基づいて、プログラムを実行する実行経路（ルート）を抽出し、抽出した実行経路をプログラムに実行させるための入力データを生成する。実行制御ステップにおいて、実行制御部４３が、プログラムにより正常に動作することが確認されている第１の実行環境（例えば、旧環境）と、プログラムにより正常に動作することが確認されていない第２の実行環境（例えば、新環境）とのそれぞれの実行環境において、データ生成ステップにて生成した入力データによりプログラムを実行させる。
【００７７】
これにより、本実施形態による検証支援方法は、ソースコードからグラフ構造を生成し、グラフ構造の実行経路から自動で入力データを生成し、生成した入力データにより２つの実行環境でプログラムを実行させる。そのため、本実施形態による検証支援方法は、プログラムを網羅的に実行するための入力データを自動で生成することができ、入力データを作成するための作業工数を低減できる。したがって、本実施形態による検証支援方法は、より効率良くプログラムの検証を行うことができる。
【００７８】
例えば、プログラムがＣＯＢＯＬにより構築されている場合には、実行基盤（実行環境）ごとに、異なる構文や文法が存在しているため、従来の技術では、システム更改などにより、新しい実行基盤（実行環境）でプログラムの動作保障確認を行うためには、膨大な作業工数を必要とする。これに対して、本実施形態による検証支援方法では、プログラムがＣＯＢＯＬにより構築されている場合であっても、プログラムを網羅的に実行するための入力データを自動で生成することができる。よって、本実施形態による検証支援方法は、入力データを作成するための作業工数を低減でき、新しい実行基盤（実行環境）でプログラムの動作保障確認をより効率的に行うことができる。
【００７９】
また、本実施形態による検証支援方法は、結果比較部４４が、第１の実行環境（旧環境）と第２の実行環境（新環境）とのそれぞれで実行された実行経路と実行回数とを含むそれぞれの実行結果（例えば、カバレッジ情報）を比較する比較ステップを含んでいる。
これにより、本実施形態による検証支援方法は、第１の実行環境（旧環境）と第２の実行環境（新環境）との動作保障確認をより簡易に行うことができる。
【００８０】
また、本実施形態では、データ生成ステップにおいて、データ生成部４２が、実行経路（ルート）に対して、当該実行経路におけるデータ処理ノードの処理を制約として、分岐処理ノードの分岐条件を満たす入力データを生成する。すなわち、データ生成部４２は、実行経路における制約充足問題を解くことにより、入力データを生成する。
これにより、本実施形態による検証支援方法は、プログラムを網羅的に実行するための入力データより確実に生成することができる。よって、本実施形態による検証支援方法は、より効率良くプログラムの検証を行うことができる。
【００８１】
また、本実施形態では、データ生成ステップにおいて、データ生成部４２が、実行経路（ルート）に対して、分岐処理ノードごとに、分岐条件を満たす入力データを生成する。
これにより、分岐処理ノードごとに分岐条件を満たす入力データを生成するので、本実施形態による検証支援方法は、より簡易な手段により、プログラムを網羅的に実行するための入力データを生成することができる。よって、本実施形態による検証支援方法は、入力データを生成するための計算量を低減しつつ、プログラムを網羅的に実行するための入力データを生成することができる。
【００８２】
また、本実施形態では、データ生成ステップにおいて、データ生成部４２が、プログラムの規模に基づいて、第１の生成アルゴリズム（ランダム生成処理）と、第２の生成アルゴリズム（シンプル生成処理）と、第３の生成アルゴリズム（シンボリック生成処理）とのうちのいずれかの生成アルゴリズムを選択し、選択した当該生成アルゴリズムに基づいて入力データを生成する。第１の生成アルゴリズムは、実行経路（ルート）に対して、分岐処理ノードごとに、乱数に基づいて入力データを生成する。第２の生成アルゴリズムは、実行経路（ルート）に対して、分岐処理ノードごとに、分岐条件を満たす入力データを生成する。第３の生成アルゴリズムは、実行経路（ルート）に対して、当該実行経路におけるデータ処理ノードを制約として、分岐処理ノードの分岐条件を満たす入力データを生成する。
これにより、プログラムの規模に基づいて、適切な生成アルゴリズムにより、入力データが生成されるので、本実施形態による検証支援方法は、計算量を低減しつつ、プログラムを網羅的に実行するための入力データをより確実に生成することができる。
【００８３】
また、本実施形態による検証支援装置１は、上述したグラフ生成部４１と、データ生成部４２と、実行制御部４３と、結果比較部４４とを備えている。また、本実施形態による検証支援システム１００は、検証支援装置１を備えている。
これにより、本実施形態による検証支援装置１及び検証支援システム１００は、上述した本実施形態による検証支援方法と同様の効果を奏する。すなわち、本実施形態による検証支援装置１及び検証支援システム１００は、より効率良くプログラムの検証を行うことができる。
【００８４】
［第２の実施形態］
次に、図面を参照して、本発明に係る第２の実施形態について説明する。
上述した第１の実施形態では、ランダム生成処理と、シンプル生成処理と、シンボリック生成処理とのうちのいずれかに基づいて、入力データを生成する例を説明したが、本実施形態では、ランダム生成処理と、シンプル生成処理と、シンボリック生成処理とを組み合わせて効率的に入力データを生成する例を説明する。
【００８５】
なお、本実施形態における検証支援装置１及び検証支援システム１００の構成は、図１に示す第１の実施形態と同様であるので、ここではその説明を省略する。
本実施形態では、データ生成部４２の処理が、第１の実施形態と異なる。
【００８６】
本実施形態におけるデータ生成部４２は、ランダム生成処理（第１の生成アルゴリズム）と、シンプル生成処理（第２の生成アルゴリズム）と、シンボリック生成処理（第３の生成アルゴリズム）とを組み合わせて、入力データを生成する。例えば、データ生成部４２は、ランダム生成処理とシンプル生成処理とのうちの少なくとも一方にて入力データを生成した後に、抽出した全ルートのうち、生成した入力データにて実行されないルートに対して、シンボリック生成処理にて入力データを生成する。すなわち、データ生成部４２は、計算量の少なく（計算負荷の軽い）ランダム生成処理又はシンプル生成処理を実行した後に、生成した入力データにより網羅されていないルートに対して、シンボリック生成処理にて入力データを生成する。
【００８７】
次に、図１６を参照して、本実施形態による検証支援システム１００の動作について説明する。
図１６は、本実施形態による検証支援システム１００の動作の一例を示すフローチャートである。
この図において、ステップＳ６０１からステップＳ６０６までの処理は、図８に示すステップＳ１０１からステップＳ１０６までの処理と同様であるので、ここではその説明を省略する。
【００８８】
ステップＳ６０７において、データ生成部４２は、対象のプログラムの規模に基づき、生成アルゴリズムを決定する。例えば、データ生成部４２は、対象のプログラムの規模を、例えば、ノードの数、ルートの数、ＩＦ文の数などに基づいて判定する。データ生成部４２は、例えば、対象のプログラムの規模が“大規模”であると判定した場合に、生成アルゴリズムにランダム生成処理及びシンボリック生成処理を選択する。また、データ生成部４２は、例えば、対象のプログラムの規模が“中規模”であると判定した場合に、生成アルゴリズムにシンプル生成処理及びシンボリック生成処理を選択する。また、データ生成部４２は、例えば、対象のプログラムの規模が“小規模”であると判定した場合に、生成アルゴリズムにシンボリック生成処理を選択する。
【００８９】
ステップＳ６０８において、データ生成部４２は、ランダム生成処理及びシンボリック生成処理を選択した場合に、処理をステップＳ６０９に進める。また、データ生成部４２は、シンプル生成処理及びシンボリック生成処理を選択した場合に、処理をステップＳ６１１に進める。また、データ生成部４２は、シンボリック生成処理を選択した場合に、処理をステップＳ６１３に進める。
【００９０】
ステップＳ６０９において、データ生成部４２は、ランダム生成処理に基づいて、入力データを生成した後、シンボリック生成処理に基づいて、入力データを生成する（ステップＳ６１０）。なお、ステップＳ６１０におけるシンボリック生成処理では、データ生成部４２は、ステップＳ６０９において生成した入力データにより網羅されていないルートに対して、シンボリック生成処理にて入力データを生成する。ステップＳ６１０の処理後に、データ生成部４２は、処理をステップＳ６１４に進める。
【００９１】
ステップＳ６１１において、データ生成部４２は、シンプル生成処理に基づいて、入力データを生成した後、シンボリック生成処理に基づいて、入力データを生成する（ステップＳ６１２）。なお、ステップＳ６１２におけるシンボリック生成処理では、データ生成部４２は、ステップＳ６１１において生成した入力データにより網羅されていないルートに対して、シンボリック生成処理にて入力データを生成する。ステップＳ６１２の処理後に、データ生成部４２は、処理をステップＳ６１４に進める。
【００９２】
ステップＳ６１３において、データ生成部４２は、シンボリック生成処理を行う。また、ステップＳ６１３の処理後に、データ生成部４２は、処理をステップＳ６１４に進める。
ステップＳ６１４からステップＳ６２０までの処理は、図８に示すステップＳ１１２からステップＳ１１８までの処理と同様であるので、ここではその説明を省略する。
【００９３】
以上説明したように、本実施形態では、データ生成ステップにおいて、データ生成部４２が、第１の生成アルゴリズム（ランダム生成処理）と、第２の生成アルゴリズム（シンプル生成処理）と、第３の生成アルゴリズム（シンボリック生成処理）とを組み合わせて、入力データを生成する。
これにより、本実施形態による検証支援方法は、適切な生成アルゴリズムの組合せにより、入力データが生成されるので、計算量を低減しつつ、プログラムを網羅的に実行するための入力データを生成することができる。よって、本実施形態による検証支援方法は、より効率良くプログラムの検証を行うことができる。
【００９４】
また、本実施形態では、データ生成ステップにおいて、データ生成部４２が、第１の生成アルゴリズム（ランダム生成処理）と第２の生成アルゴリズム（シンプル生成処理）とのうちの少なくとも一方にて入力データを生成した後に、実行経路（ルート）のうち、生成した入力データにて実行されない実行経路に対して、第３の生成アルゴリズム（シンボリック生成処理）に基づいて入力データを生成する。
これにより、本実施形態による検証支援方法は、計算量を低減しつつ、プログラムを網羅的に実行するための入力データをより確実に生成することができる。
【００９５】
［第３の実施形態］
次に、本実施形態では、上述した第２の実施形態と同様に、ランダム生成処理と、シンプル生成処理と、シンボリック生成処理とを組み合わせて効率的に入力データを生成する別の例を説明する。
【００９６】
なお、本実施形態における検証支援装置１及び検証支援システム１００の構成は、図１に示す第１の実施形態と同様であるので、ここではその説明を省略する。
本実施形態では、データ生成部４２及び実行制御部４３の処理が、第１及び第２の実施形態と異なる。
【００９７】
本実施形態におけるデータ生成部４２は、一旦、生成した入力データに基づいて、実行制御部４３がテストコードを実行させた後に、実行されていないルートに対して、再度、入力データを生成する。すなわち、データ生成部４２は、実行されていない（網羅されていない）ルートに対して、ランダム生成処理（第１の生成アルゴリズム）と、シンプル生成処理（第２の生成アルゴリズム）と、シンボリック生成処理（第３の生成アルゴリズム）とのうちのいずれかにより入力データを生成することを繰り返す。例えば、データ生成部４２は、最初は、ランダム生成処理により入力データを生成し、次に実行されていない残りのルートに対して、シンプル生成処理により入力データを生成し、さらに次には、シンボリック生成処理により入力データを生成するなどの処理を実行する。すなわち、結果として、データ生成部４２は、ランダム生成処理と、シンプル生成処理と、シンボリック生成処理とを組み合わせて入力データを生成する。
【００９８】
本実施形態における実行制御部４３は、データ生成部４２が生成した入力データに基づいて、実行制御部４３がテストコードを実行させた後に、未実行のルートが所定の割合以下（カバレッジ情報が所定の値以上）であるか否かを判定する。実行制御部４３は、未実行のルートが所定の割合以下でない場合に、データ生成部４２に再度入力データを生成させる。
【００９９】
次に、図１７を参照して、本実施形態による検証支援システム１００の動作について説明する。
図１７は、本実施形態による検証支援システム１００の動作の一例を示すフローチャートである。
この図において、ステップＳ７０１からステップＳ７１４までの処理は、図８に示すステップＳ１０１からステップＳ１１４までの処理と同様であるので、ここではその説明を省略する。
【０１００】
ステップＳ７１５において、実行制御部４３は、未実行ルートが所定の割合以下であるか否かを判定する。ここで、未実行ルートとは、実行可能な全ルートのうち、実行されていないルートに割合を示している。なお、実行制御部４３は、例えば、旧環境でテストコードを実行させた結果であるカバレッジ情報が所定の値以上であるか否かによって、未実行ルートが所定の割合以下であるか否かを判定してもよい。実行制御部４３は、未実行ルートが所定の割合以下である場合（ステップＳ７１５：ＹＥＳ）に、処理をステップＳ７１７に進める。また、実行制御部４３は、未実行ルートが所定の割合以下でない場合（ステップＳ７１５：ＮＯ）に、処理をステップＳ７１６に進める。
【０１０１】
ステップＳ７１６において、データ生成部４２は、未実行ルートを抽出して、処理をステップＳ７０７に進めて、再び、入力データの生成を実行する。
また、ステップＳ７１７からステップＳ７２０までの処理は、図８に示すステップＳ１１５からステップＳ１１８までの処理と同様であるので、ここではその説明を省略する。
【０１０２】
以上説明したように、本実施形態では、実行制御ステップにおいて、実行制御部４３が、例えば、データ生成ステップにて生成した入力データによりプログラムを旧環境で実行させ、当該実行結果に応じて、データ生成ステップに処理を戻す。データ生成ステップにおいて、データ生成部４２は、再度、入力データを生成する。
これにより、本実施形態による検証支援方法は、繰り返しによって適切な生成アルゴリズムにより繰り返し入力データが生成されるので、プログラムを網羅的に実行するための入力データを効率良く生成することができる。
なお、データ生成部４２は、例えば、前回と異なる生成アルゴリズムに基づいて、入力データを生成してもよいし、前回と同じ生成アルゴリズムに基づいて、入力データを生成してもよい。前回と異なる生成アルゴリズムに基づいて、入力データを生成した場合には、本実施形態による検証支援方法は、適切な生成アルゴリズムの組み合わせにより、入力データを効率良く生成することができる。
【０１０３】
次に、図１８〜図２０を参照して、本実施形態による比較結果の表示の変形例について説明する。
図１８〜図２０は、本実施形態による比較結果の表示の変形例を示す図である。
なお、本実施形態において、対象のプログラムは、クラス、パッケージ、モジュール、ファンクションなどと称する階層に分かれて構成されており、例えば、図１８に示す例は、パッケージの階層における比較結果を表示する一例である。この場合、結果比較部４４は、画面Ｇ２に示すような比較結果を表示する。ここで、結果比較部４４は、サブ画面ＳＧ１に、旧環境での実行結果としてカバレッジ情報を示す棒グラフを表示させるとともに、新環境での実行結果としてカバレッジ情報を示す棒グラフを表示させる。
【０１０４】
また、結果比較部４４は、旧環境での実行結果と新環境での実行結果との比較結果を結果表ＲＥＳ１として表示させる。なお、旧環境と新環境とでのテストデータの実行において、実行制御部４３は、上述した各階層の処理における終了時の状態を示す終了時結果（例えば、各変数の値、戻り値など）を記憶部３０の実行結果記憶部３５に記憶させてもよい。この場合、結果比較部４４は、図１８の結果表ＲＥＳ１に示すように、「終了時結果（戻り値）」として、旧環境での終了時結果（戻り値）と、新環境での終了時結果（戻り値）とが一致するか否かを表示させる。この各階層の終了時結果（戻り値）の比較結果は、プログラムが正しく新環境に移植されたか否かの指標の１つとして活用できる。例えば、カバレッジ情報などの結果に差が生じた場合などに、補完的にプログラムが正しく新環境に移植されたか否かの指標として活用できる。
【０１０５】
このように、旧環境と新環境とで、各階層の終了時結果（戻り値）の比較結果を表示することにより、本実施形態による検証支援システム１００では、カバレッジ情報に差が生じた場合であっても、この終了時結果（戻り値）の比較結果により、プログラムが正しく新環境に移植されたか否かをユーザが判定することができる。
なお、結果表ＲＥＳ１において、例えば、各パッケージの結果部分をユーザが入力部１０を介して指定した場合（例えば、マウスなどによりクリックした場合）、結果比較部４４は、さらに下位の階層の比較結果を表示させるようにしてもよい。これにより、本実施形態による検証支援方法は、各階層の比較結果を確認し、対象のプログラム（システム）全体の比較結果を確認ことにより、対象のプログラム（システム）全体の検証が完了したか否かをユーザが判定することができる。
また、上述した例では、結果表ＲＥＳ１に示すような比較結果を表示させる例を説明したが、サブ画面ＳＧ１に示す棒グラフを、例えば、ＸＭＬの記述に変換して、テキスト情報として、テキスト比較ツール（例えば、ｄｉｆｆなど）により比較してもよい。
【０１０６】
図１９に示す例は、対象のプログラムの階層のうちの最下層における比較結果を表示する一例である。図１９において、結果比較部４４は、画面Ｇ３に示すような比較結果を表示する。ここで、結果比較部４４は、サブ画面ＳＧ２に、旧環境での実行結果としてグラフ構造ＧＲ７を表示させるとともに、新環境での実行結果としてグラフ構造ＧＲ８を表示させる。このサブ画面ＳＧ２において、ノードＮ３〜Ｎ５は、実行されなかったノードを示し、例えば、ノードの表示色を実行されたノードと異ならせて表示される。また、相違箇所ＤＦ３及び相違箇所ＤＦ４は、新環境の実行において旧環境との相違が生じたグラフ構造のノードを示しており、この場合も表示色を相違が生じていないノードと異ならせて表示される。
【０１０７】
また、結果比較部４４は、旧環境での実行結果と新環境での実行結果との比較結果を結果表ＲＥＳ２として表示させる。なお、結果表ＲＥＳ２において、例えば、“不一致”を示すボタンＢ１をユーザが入力部１０を介して指定した場合（例えば、マウスなどによりクリックした場合）、結果比較部４４は、図２０に示すようなサブ画面ＳＧ３を表示させる。サブ画面ＳＧ３において、結果比較部４４は、相違箇所ＤＦ３及び相違箇所ＤＦ４の相違内容を表示させる。
このように、図１９及び図２０に示す変形例では、結果比較部４４が、旧環境と新環境との相違箇所の表示色を異ならせて、表示部２０に表示させるので、ユーザが相違箇所をより容易に認識することができる。
また、結果比較部４４は、さらに、相違箇所の内容を相違箇所に表示させるので、ユーザは、旧環境と新環境とで相違が生じている内容を把握することができるとともに、その対策を検討し易くすることができる。
【０１０８】
また、図１９に示す例では、図１８に示す例と同様に、結果比較部４４は、「終了時結果（戻り値）」として、旧環境での終了時結果（戻り値）と、新環境での終了時結果（戻り値）とが一致するか否かを表示させる。この場合、例えば、ルートの比較結果が“不一致”を示す場合であっても、この「終了時結果（戻り値）」の比較結果により、プログラムが正しく新環境に移植されたとユーザが判断してもよい。
【０１０９】
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、上記の各実施形態において、検証支援装置１が記憶部３０を備える例を説明したが、これに限定されるものではなく、記憶部３０の一部又は全部を検証支援装置１の外部に備えてもよい。例えば、ネットワーク上の記憶装置が、ソース記憶部３１を備え、検証支援装置１は、ネットワーク上のソース記憶部３１からソースコードを取得してもよい。
また、上記の各実施形態において、検証支援装置１は、１台の装置として説明したが、複数の装置から構成されてもよい。例えば、制御部４０の一部を検証支援装置１の外部に備えてもよい。
【０１１０】
また、上記の各実施形態において、データ生成部４２は、対象のプログラムの規模に基づいて、入力データを生成する生成アルゴリズムを決定（選択）する例を説明したが、これに限定されるものではない。例えば、データ生成部４２は、対象のプログラムの複雑度に基づいて、生成アルゴリズムを決定（選択）してもよい。この場合、対象のプログラムの複雑度は、グラフ構造における分岐処理ノードの数や割合、ノード数に対するルートの数などに基づいて生成されてもよい。また、例えば、データ生成部４２は、対象のプログラムの規模と、実際に入力データの生成に掛かる処理時間（演算時間）の実績値やカバレッジの実績値との統計的な相関関係に基づいて、生成アルゴリズムを決定（選択）してもよい。また、データ生成部４２は、入力部１０を介してユーザによって入力された情報に基づいて、生成アルゴリズムを決定（選択）してもよい。
【０１１１】
また、上記の各実施形態において、検証支援装置１は、データ生成部４２による入力データの生成と、実行制御部４３による旧環境と新環境とでの実行させた後に、実行結果に基づいて、再度、データ生成部４２による入力データの生成を行うようにしてもよい。この場合、実行結果がフィードバックされて、入力データが生成されるので、より効率よく入力データを生成することができる。
【０１１２】
また、ソース記憶部３１は、新環境用に変更した対象のプログラムを記述したソースコードを記憶し、実行制御部４３は、データ生成部４２が生成した入力データと、当該新環境用に変更した対象のプログラムとに基づいてテストコード（テストドライバ、及び、入力データを含むスタブ）を生成してもよい。この場合、実行制御部４３は、新環境用に変更したソースコードと、生成したテストコード（テストドライバ、及びスタブ）とにより、新環境のコンピュータ装置３に、新環境用に変更した対象のプログラムを実行させる。これにより、上述した比較結果が不一致である場合に、新環境用に変更した対象のプログラムによる検証を行うことにより、ユーザは、効率良くデバックを行うことができる。
【０１１３】
また、上記の各実施形態において、ＣＯＢＯＬにより構築されたプログラムに適用する例を説明したが、これに限定されるものではなく、他の言語により構築されたプログラムに適用されてもよい。
【０１１４】
なお、上述した検証支援システム１００が備える各構成は、内部に、コンピュータシステムを有している。そして、上述した検証支援システム１００が備える各構成の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上述した検証支援システム１００が備える各構成における処理を行ってもよい。ここで、「記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行する」とは、コンピュータシステムにプログラムをインストールすることを含む。ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、インターネットやＷＡＮ、ＬＡＮ、専用回線等の通信回線を含むネットワークを介して接続された複数のコンピュータ装置を含んでもよい。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。このように、プログラムを記憶した記録媒体は、ＣＤ−ＲＯＭ等の非一過性の記録媒体であってもよい。
【０１１５】
また、記録媒体には、当該プログラムを配信するために配信サーバからアクセス可能な内部又は外部に設けられた記録媒体も含まれる。なお、プログラムを複数に分割し、それぞれ異なるタイミングでダウンロードした後に検証支援システム１００が備える各構成で合体される構成や、分割されたプログラムのそれぞれを配信する配信サーバが異なっていてもよい。さらに「コンピュータ読み取り可能な記録媒体」とは、ネットワークを介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、上述した機能の一部を実現するためのものであってもよい。さらに、上述した機能をコンピュータシステムに既に記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【０１１６】
また、上述した機能の一部又は全部を、ＬＳＩ（Large Scale Integration）等の集積回路として実現してもよい。上述した各機能は個別にプロセッサ化してもよいし、一部、又は全部を集積してプロセッサ化してもよい。また、集積回路化の手法はＬＳＩに限らず専用回路、又は汎用プロセッサで実現してもよい。また、半導体技術の進歩によりＬＳＩに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
【符号の説明】
【０１１７】
１  検証支援装置
２  旧環境のコンピュータ装置
３  新環境のコンピュータ装置
１０  入力部
２０  表示部
３０  記憶部
３１  ソース記憶部
３２  グラフ記憶部
３３  入力データ記憶部
３４  実行環境記憶部
３５  実行結果記憶部
４０  制御部
４１  グラフ生成部
４２  データ生成部
４３  実行制御部
４４  結果比較部
１００  検証支援システム
【図１】
0006364263.tif 000002
【図２】
0006364263.tif 000003
【図３】
0006364263.tif 000004
【図４】
0006364263.tif 000005
【図５】
0006364263.tif 000006
【図６】
0006364263.tif 000007
【図７】
0006364263.tif 000008
【図８】
0006364263.tif 000009
【図９】
0006364263.tif 000010
【図１０】
0006364263.tif 000011
【図１１】
0006364263.tif 000012
【図１２】
0006364263.tif 000013
【図１３】
0006364263.tif 000014
【図１４】
0006364263.tif 000015
【図１５】
0006364263.tif 000016
【図１６】
0006364263.tif 000017
【図１７】
0006364263.tif 000018
【図１８】
0006364263.tif 000019
【図１９】
0006364263.tif 000020
【図２０】
0006364263.tif 000021