(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024000739
(43)【公開日】2024-01-09
(54)【発明の名称】パス変更プログラム、パス変更装置およびパス変更方法
(51)【国際特許分類】
G06F 11/36 20060101AFI20231226BHJP
【FI】
G06F11/36 180
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022099610
(22)【出願日】2022-06-21
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】井出 武浩
(72)【発明者】
【氏名】武智 慎太
(72)【発明者】
【氏名】黒田 隆一
(72)【発明者】
【氏名】佐々木 晃
(72)【発明者】
【氏名】中野 正久
(72)【発明者】
【氏名】新村 和己
(72)【発明者】
【氏名】山本 勝考
(72)【発明者】
【氏名】山本 倫也
(72)【発明者】
【氏名】倉繁 泰三
(72)【発明者】
【氏名】大森 誠
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042HH11
5B042HH17
(57)【要約】
【課題】プログラムの変更後における動作テストの対象とするパスの変更にかかる処理時間を短縮する。
【解決手段】パス変更装置1は、第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、第1のソフトウェアおよび第2のソフトウェアのそれぞれの実行環境でのパスの差異を抽出する。そしてパス変更装置1は、第1のソフトウェアの動作をテストする対象のパスを、差異に応じて、第2のソフトウェアの動作をテストする対象のパスに変更する。
【選択図】
図3B
【特許請求の範囲】
【請求項1】
第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、前記第1のソフトウェアおよび前記第2のソフトウェアのそれぞれの実行環境でのパスの差異を抽出し、
前記第1のソフトウェアの動作をテストする対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更する
処理をコンピュータに実行させることを特徴とするパス変更プログラム。
【請求項2】
前記抽出する処理は、前記パスを構成するファイル名とディレクトリ名とのうち、ファイル名が同一であって、且つ、ディレクトリ名の少なくとも一部が異なるパスを前記差異として抽出する
ことを特徴とする請求項1に記載のパス変更プログラム。
【請求項3】
前記抽出する処理は、前記パスを構成するファイル名を示す文字列のうち、前記ファイル名を構成する拡張子より前に記述された文字列の少なくとも一部が異なるパスを前記差異として抽出する
ことを特徴とする請求項1に記載のパス変更プログラム。
【請求項4】
前記変更する処理は、前記第1のソフトウェアの動作をテストする対象のパスを、前記差異を含む対象のパスに置き換えることで前記対象のパスを変更する
ことを特徴とする請求項1に記載のパス変更プログラム。
【請求項5】
前記変更する処理は、前記第1のソフトウェアの動作をテストする対象のパスを、テストを実行する際に組み立て、組み立てた対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更する
ことを特徴とする請求項1に記載のパス変更プログラム。
【請求項6】
前記変更する処理は、前記第2のソフトウェアの実行環境で、前記第1のソフトウェアの動作をテストする対象のパスを用いて動作テストを実行し、実行した結果と、予め定められた結果とが異なる場合に、前記対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更し、変更したパスを用いて動作テストを再実行する
ことを特徴とする請求項1に記載のパス変更プログラム。
【請求項7】
第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、前記第1のソフトウェアおよび前記第2のソフトウェアのそれぞれの実行環境でパスの差異を抽出する抽出部と、
前記第1のソフトウェアの動作をテストする対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更する変更部と、
を有することを特徴とすることを特徴とするパス変更装置。
【請求項8】
第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、前記第1のソフトウェアおよび前記第2のソフトウェアのそれぞれの実行環境でパスの差異を抽出し、
前記第1のソフトウェアの動作をテストする対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更する
処理をコンピュータが実行することを特徴とするパス変更方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、パス変更プログラムなどに関する。
【背景技術】
【0002】
ソフトウェアは、機能追加や新たな環境への対応などのエンハンスによりプログラムを変更する場合がある。エンハンスが行われると、以前のバージョンと差異が生じる場合がある。例えば機能追加によるエンハンスが行われると、差異が生じる。このため、以前動作していた機能が動かなくなる可能性がある。このため、運用者は、エンハンスを行ったソフトウェアにリグレッションテストを実施して、以前と同等の処理ができるかについての動作確認を行う。リグレッションテストについては、テストの自動実行化が行なわれている。
【0003】
ところで、近年、ソフトウェアの製品に、オープンソフトウェア(OSS:Open Source Software)が一般的に使用される。OSSには、バージョンがあり、ディレクトリ名やファイル名にバージョンが付与されることが多い。このため、新しいバージョンになると、ディレクトリ名やファイル名が変わってしまう。また、OSSは、ディレクトリ構造も変わることがある。
【0004】
ソフトウェアの製品にOSSが含まれる場合、製品がバージョンアップする際に、最新のバージョンのOSSが取り込まれることがある。運用者がバージョンアップされた製品に対して自動化されたリグレッションテストを実施しようとすると、OSSのバージョン変更に伴うディレクトリ名、ファイル名やディレクトリ構造の違いにより、リグレッションテストが正しく動作しなくなる。このため、従来では、運用者は、リグレッションテストを実施する前に、変更後の製品に合わせてリグレッションテストのテストセットを手作業で修正していた。
【0005】
なお、現行バージョンから新バージョンへのソフトウェアの入れ換えに関する技術が開示されている(例えば、特許文献1参照)。かかる技術では、ソフトウェアの旧バージョンから新バージョンに入れ換える前に、旧バージョンのソフトウェアから疑似的に生成される実行モジュールと既に登録されてある実行モジュール間の同一性を検証し、検証結果が良好の時に、新バージョンのソフトウェアに入れ換える。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来の技術では、エンハンス後のソフトウェア製品の動作テストを、手間をかけずに実行することが難しいという問題がある。例えば、従来では、運用者が、OSSのバージョン変更に伴うディレクトリ名、ファイル名やディレクトリ構造といった動作テストの対象とするパスの相違を、変更後のソフトウェア製品に合わせて手作業で修正していた。したがって、従来では、動作テストの対象とするパスの修正に多大な時間を要していた。
【0008】
本発明は、1つの側面では、プログラムの変更後における動作テストの対象とするパスの変更にかかる処理時間を短縮することを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、パス変更プログラムは、第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、前記第1のソフトウェアおよび前記第2のソフトウェアのそれぞれの実行環境でのパスの差異を抽出し、前記第1のソフトウェアの動作をテストする対象のパスを、前記差異に応じて、前記第2のソフトウェアの動作をテストする対象のパスに変更する、処理をコンピュータに実行させる。
【発明の効果】
【0010】
1実施態様によれば、プログラムの変更後における動作テストの対象とするパスの変更にかかる処理時間を短縮することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、実施例1に係るパス変更装置の機能構成の一例を示すブロック図である。
【
図2】
図2は、実施例1に係るパス対応付け表の一例を示す図である。
【
図3A】
図3Aは、実施例1に係るテストスクリプト修正の流れの一例を示す図(1)である。
【
図3B】
図3Bは、実施例1に係るテストスクリプト修正の流れの一例を示す図(2)である。
【
図4】
図4は、実施例1に係るパス対応付け処理のフローチャートの一例を示す図である。
【
図5】
図5は、実施例1に係るテストスクリプト修正処理のフローチャートの一例を示す図である。
【
図6】
図6は、実施例2に係るパス変更装置の機能構成の一例を示すブロック図である。
【
図7】
図7は、実施例2に係るテストスクリプト修正の流れの一例を示す図である。
【
図8】
図8は、実施例2に係るテストスクリプト修正処理のフローチャートの一例を示す図である。
【
図9】
図9は、実施例3に係るパス変更装置の機能構成の一例を示すブロック図である。
【
図10】
図10は、実施例3に係るテストスクリプト修正の流れの一例を示す図である。
【
図11】
図11は、実施例3に係るテストスクリプト修正処理のフローチャートの一例を示す図である。
【
図12】
図12は、パス変更プログラムを実行するコンピュータの一例を示す図である。
【
図13】
図13は、単純置換では正しく修正できない一例を示す参考図である。
【
図14】
図14は、単純置換では正しく修正できない別の例を示す参考図である。
【発明を実施するための形態】
【0012】
以下に、本願の開示するパス変更プログラム、パス変更装置およびパス変更方法の実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【0013】
まず、OSSのバージョン変更に伴うディレクトリ名、ファイル名やディレクトリ構造といった動作テストの対象とするパスの相違を、修正する方法について説明する。例えば、OSSのバージョン変更に伴うディレクトリ名、ファイル名やディレクトリ構造の違いを、自動的に文字列を単純に置換することにより修正する方法が考えられる。ところが、リグレッションテストのテストセットには、複数の変数などを組み合わせてパスを生成する場合があり、単純に置換するだけでは正しく修正できない場合がある。ここで、単純置換では正しく修正できない一例について、
図13を参照して説明する。
図13は、単純置換では正しく修正できない一例を示す参考図である。
【0014】
図13左図には、変更前のパスが記述されている。この変更前のパスは、テストセットでは、変数X、変数Y、変数Zを用いると、「“/”+X+“/”+Y+“/”+Z」と記述される。すなわち、テストセットでは、変数Xが「aaa」と定義され、変数Yが「bbb」と定義され、変数Zが「ccc」と定義される。ここで、変更後のパスが
図13右図に記述されたパスであるとする。すると、単純に、変更後のパスに合わせて変数Xの内容を「aaa」から「ddd」に変更すれば良いと考えられる。ところが、
図13右下に示すように、変更の前後で変わらず「/aaa」を使用しているテストがある場合もある。そうすると、変数Xの内容を「aaa」から「ddd」に単純置換するだけでは、正しく修正できない。
【0015】
また、ディレクトリ構造が変更になった場合も単純置換では正しく修正できない場合がある。ここで、単純置換では正しく修正できない別の例について、
図14を参照して説明する。
図14は、単純置換では正しく修正できない別の例を示す参考図である。
【0016】
図14左図には、変更前のパスが記述されている。この変更前のパス「/aaa/bbb/ddd」については、テストセットでは、変数X、変数Y、変数Zを用いると、「“/”+X+“/”+Y+“/”+ddd」と記述される。すなわち、テストセットでは、変数Xが「aaa」と定義され、変数Yが「bbb」と定義され、変数Zが「eee」と定義される。ここで、変更後のパスが
図14右図に記述されたパスであるとする。つまり、変更後のパスは、変更前のパス「/aaa/bbb/ddd」の「/ddd」の直前に「/eee」が追加されるパスである。そうすると、変数の内容を単純置換するだけでは、正しく修正できない。
【0017】
そこで、以降の実施例では、OSSのバージョン変更に伴うディレクトリ名、ファイル名やディレクトリ構造といった動作テストの対象とするパスの相違を、修正することができるパス変更装置について説明する。
【実施例0018】
[パス変更装置の機能構成]
図1は、実施例1に係るパス変更装置の機能構成の一例を示すブロック図である。実施例1に係るパス変更装置1は、エンハンス後のソフトウェアのリグレッションテストをする際、エンハンス前後の実行環境の差異を抽出する。そして、エンハンス前のソフトウェアの動作をテストする対象のパスを、差異に応じて、エンハンス後のソフトウェアの動作をテストする対象のパスに変更する。ここでいう「エンハンス」とは、新たな機能の追加を行なったり、新たな環境への対応を行ったりすることによるプログラムの変更をいう。エンハンス後のソフトウェアは、エンハンス前とディレクトリ名やファイル名に違いがある場合がある。特に、ソフトウェアにOSSが含まれる場合には、OSSにバージョンがあり、新たなバージョンになると、ディレクトリ名、ファイル名やディレクトリ構造が変わってしまうことがある。かかる違いがエンハンス前後の実行環境の差異に現れる。また、ここでいう「リグレッションテスト」とは、過去と同等の機能が動作可能かを確認するテストのことをいう。リグレッションテストには、複数のテストケースの集合であるテストスクリプトが複数含まれる。
【0019】
パス変更装置1は、制御部10と、記憶部20とを有する。制御部10は、前後一覧出力部11、パス対応付け部12、テストスクリプト修正部13およびテスト実行部14を有する。記憶部20は、パス対応付け表21、テストスクリプト(前)22、テストスクリプト(後)23、ディレクトリ/ファイル一覧(前)24aおよびディレクトリ/ファイル一覧(後)24bを有する。
【0020】
ディレクトリ/ファイル一覧(前)24aは、エンハンス前のソフトウェアにおける実行環境でのディレクトリおよびファイルの一覧である。ディレクトリ/ファイル一覧(後)24bは、エンハンス後のソフトウェアにおける実行環境でのディレクトリおよびファイルの一覧である。
【0021】
パス対応付け表21は、エンハンス前のソフトウェアと、エンハンス後のソフトウェアとのそれぞれの実行環境でのパスの差異を対応付けた表である。なお、パス対応付け表21は、後述するパス対応付け部12によって生成される。
【0022】
ここで、パス対応付け表21の一例を、
図2を参照して説明する。
図2は、実施例1に係るパス対応付け表の一例を示す図である。
図2に示すように、パス対応付け表21は、エンハンス前のソフトウェアの実行環境のパスと、エンハンス後のソフトウェアの実行環境のパスとを対応付けた情報である。一例として、エンハンス前のソフトウェアの実行環境のパスが「/aaa/bbb/ccc」である場合に、エンハンス後のソフトウェアの実行環境のパスとして「/aaa/xxx/ccc」と記憶している。エンハンス前のソフトウェアの実行環境のパスが「/aaa/bbb/ddd」である場合に、エンハンス後のソフトウェアの実行環境のパスとして「/aaa/bbb/eee/ddd」と記憶している。エンハンス前のソフトウェアの実行環境のパスが「/aaa/bbb/iii_1.1.jar」である場合に、エンハンス後のソフトウェアの実行環境のパスとして「/aaa/xxx/iii_2.0.jar」と記憶している。
【0023】
図1に戻って、テストスクリプト(前)22は、エンハンス前のテストセットに含まれるテストスクリプトである。テストスクリプト(後)23は、テストスクリプト(前)22を修正した結果のテストスクリプトである。テストスクリプト(前)22、テストスクリプト(後)23は、コマンドのパスや引数のパスの一部または全部を示すディレクトリについて、変数を用いて記載される場合であっても良いし、変数を用いないで記載される場合であっても良い。なお、テストスクリプト(前)22は、エンハンス前のテストスクリプト22と同義である。また、テストスクリプト(後)23は、エンハンス後のテストスクリプト23と同義である。また、テストスクリプト(後)は、後述するテストスクリプト修正部13によって生成される。
【0024】
前後一覧出力部11は、エンハンス前後のソフトウェアのそれぞれの実行環境でディレクトリおよびファイルの一覧を出力する。例えば、前後一覧出力部11は、OSによって提供されるコマンドを用いて、エンハンス前のソフトウェアの実行環境でディレクトリ/ファイル一覧24aを出力する。前後一覧出力部11は、OSによって提供されるコマンドを用いて、エンハンス後のソフトウェアの実行環境でディレクトリ/ファイル一覧24bを出力する。すなわち、前後一覧出力部11は、エンハンス前のソフトウェアおよびエンハンス後のソフトウェアのパスの一覧を出力する。一例として、かかるコマンドには、OSがLinux(登録商標)である場合、findコマンドが挙げられる。また、OSがWindowsである場合、dirコマンドが挙げられる。そして、前後一覧出力部11は、出力したディレクトリ/ファイル一覧24aおよびディレクトリ/ファイル一覧24bを記憶部20に保存する。
【0025】
パス対応付け部12は、エンハンス前後のソフトウェアのパスを対応付ける。例えば、パス対応付け部12は、前後一覧出力部11によって出力されたエンハンス前後のディレクトリ/ファイル一覧24a,24bを参照して、エンハンス前後のパスの差異を確認する。
【0026】
パス対応付け部12は、エンハンス前のディレクトリ/ファイル一覧24aに含まれるパスがエンハンス後のパスの一覧に存在しない場合には、エンハンス前のパスに含まれるファイル名(コマンド名)がエンハンス後のパスの一覧に存在するか否かを判定する。パス対応付け部12は、エンハンス前のパスに含まれるファイル名がエンハンス後のパスの一覧に存在する場合には、エンハンス前のパスとエンハンス後のパスとを対応付けてパス対応付け表21に記録する。すなわち、パス対応付け部12は、ファイル名は同じであるがディレクトリ名が異なるパスを対応付ける。例えば、
図2の1行目「/aaa/bbb/ccc→/aaa/xxx/ccc」や2行目「/aaa/bbb/ddd→/aaa/bbb/eee/ddd」が一例として挙げられる。
【0027】
また、パス対応付け部12は、エンハンス前のパスに含まれるファイル名がエンハンス後のパスの一覧に存在しない場合には、エンハンス前のパスに含まれるファイル名の拡張子は同じであるが後半部分が異なるファイル名がエンハンス後のディレクトリ/ファイル一覧24bに存在するか否かを判定する。パス対応付け部12は、エンハンス前のパスに含まれるファイル名の拡張子は同じであるが後半部分が異なるファイル名がディレクトリ/ファイル一覧24bに存在する場合には、エンハンス前のパスとエンハンス後のパスをパス対応付け表21に記録する。すなわち、パス対応付け部12は、ファイル名の前半部分や拡張子は同じであるが例えばバージョンが異なるパスを対応付ける。例えば、
図2の3行目「/aaa/bbb/iii_1.1.jar→/aaa/xxx/iii_2.0.jar」が一例として挙げられる。
【0028】
テストスクリプト修正部13は、エンハンス前のテストスクリプト22をパス対応付け表21に基づいてエンハンス後のパスに修正する。例えば、テストスクリプト修正部13は、エンハンス前のテストスクリプト22を読み込む。そして、テストスクリプト修正部13は、読み込んだテストスクリプト22に含まれるパスの中から、パス対応付け表21のエンハンス前のパスを探索する。テストスクリプト修正部13は、探索できた場合には、エンハンス前のパスをエンハンス後のパスに一括して置換する。そして、テストスクリプト修正部13は、置換が完了したテストスクリプトをエンハンス後のテストスクリプト23として保存する。
【0029】
なお、エンハンス前のテストスクリプト22には、変数が含まれていても良い。変数が含まれている場合には、テストスクリプト修正部13は、変数の値がパス対応付け表21のエンハンス前のパスに含まれているかを探索し、含まれている場合には、パス対応付け表21のエンハンス後のパスのパス情報を基に置換すれば良い。一例として、変数Xに「bbb」が入っており、パス対応付け表21が以下であったとする。
「/aaa/bbb/ccc→/aaa/xxx/ccc、/aaa/bbb/ddd→/aaa/xxx/ddd」
すると、「bbb」がパス対応付け表21のエンハンス前のパスに含まれており、エンハンス後のパスは「bbb」の部分が「xxx」に変更されているため、テストスクリプト修正部13は、変数Xの値「bbb」を「xxx」へ置換することができる。
【0030】
テスト実行部14は、エンハンス後のテストスクリプト23を用いてリグレッションテストを実行する。例えば、テスト実行部14は、テストスクリプト修正部13によって修正されたエンハンス後のテストスクリプト23を用いてエンハンス後のソフトウェアのリグレッションテストを実行する。これにより、テスト実行部14は、エンハンス後のソフトウェア製品の動作テストを、手間をかけずに実行することができる。
【0031】
[テストスクリプト修正の流れ]
ここで、エンハンス前のテストスクリプト22からエンハンス後のテストスクリプト23に修正するテストスクリプト修正の流れについて、
図3Aおよび
図3Bを参照して説明する。
図3Aおよび
図3Bは、実施例1に係るテストスクリプト修正の流れの一例を示す図である。
【0032】
図3Aには、エンハンス前のディレクトリ/ファイル一覧24aと、エンハンス後のディレクトリ/ファイル一覧24bとが表されている。例えば、前後一覧出力部11は、findコマンドを用いて、エンハンス前のソフトウェアの実行環境で、エンハンス前のディレクトリ/ファイル一覧24aを出力する。また、前後一覧出力部11は、findコマンドを用いて、エンハンス後のソフトウェアの実行環境で、エンハンス後のディレクトリ/ファイル一覧24bを出力する。
【0033】
ここでは、エンハンス後のディレクトリ/ファイル一覧24bでは、エンハンス前とファイル名が同じであるがディレクトリ名が異なるパスが存在する。一例として、「/aaa/bbb/ccc」が「aaa/xxx/ccc」に変更されている。また、エンハンス後のディレクトリ/ファイル一覧24bでは、エンハンス前とファイル名の拡張子は同じであるが後半部分が異なるファイル名を含むパスが存在する。一例として、「/aaa/ggg/hhh_1.1.jar」が「/aaa/ggg/hhh_2.0.jar」に変更されている。
【0034】
この後、パス対応付け部12は、エンハンス前のディレクトリ/ファイル一覧24aとエンハンス後のディレクトリ/ファイル一覧24bとを用いて、エンハンス前後のパスの差異を抽出する。例えば、パス対応付け部12は、エンハンス前のディレクトリ/ファイル一覧24aの中のパスを1行ずつ読み込む。そして、パス対応付け部12は、読み込んだ対象のパスがエンハンス後のディレクトリ/ファイル一覧24bに存在するか否かを判定する。パス対応付け部12は、存在しない場合には、対象のパスに含まれるファイル名がエンハンス後のディレクトリ/ファイル一覧24bに存在しないか否かを判定する。そして、パス対応付け部12は、対象のパスに含まれるファイル名がエンハンス後のディレクトリ/ファイル一覧24bに存在する場合には、エンハンス前の対象のパスとエンハンス後のパスとを対応付けてパス対応付け表21に記録する。すなわち、パス対応付け部12は、ファイル名は同じであるがディレクトリ名が異なるパスを対応付ける。ここでは、
図3Aに示す「/aaa/bbb/ccc」と「/aaa/xxx/ccc」との対応付け、「/aaa/bbb/ddd」と「/aaa/xxx/ddd」との対応付け、「/aaa/bbb/eee/fff」と「/aaa/xxx/eee/fff」との対応付けが一例として挙げられる。
【0035】
また、パス対応付け部12は、対象のパスに含まれるファイル名がエンハンス後のディレクトリ/ファイル一覧24bに存在しない場合には、対象のパスに含まれるファイル名の拡張子は同じであるが後半部分が異なるファイル名がエンハンス後のディレクトリ/ファイル一覧24bに存在しないか否かを判定する。パス対応付け部12は、存在する場合には、エンハンス前の対象のパスとエンハンス後のパスとを対応付けてパス対応付け表21に記録する。すなわち、パス対応付け部12は、ファイル名の前半部分や拡張子は同じであるがファイル名の後半部分が異なるパスを対応付ける。ここでは、
図3Aに示す「/aaa/ggg/hhh_1.1.jar」と「/aaa/ggg/hhh_2.0.jar」との対応付けが一例として挙げられる。
【0036】
そして、
図3Bに示すように、テストスクリプト修正部13は、エンハンス前のテストスクリプト22を、パス対応付け表21を用いてエンハンス後のテストスクリプト23に修正する。例えば、テストスクリプト修正部13は、パス対応付け表21を使用して、エンハンス前のテストスクリプト22について、エンハンス前のパスをエンハンス後のパスに一括置換して、エンハンス後のテストスクリプト23を生成する。ここでは、エンハンス前のテストスクリプト22に含まれる「/aaa/bbb/ccc -f /AAA/BBB」が「/aaa/xxx/ccc -f /AAA/BBB」に置換され、エンハンス後のテストスクリプト23に設定されている。
【0037】
[パス対応付け処理のフローチャート]
図4は、実施例1に係るパス対応付け処理のフローチャートの一例を示す図である。なお、エンハンス前のディレクトリ/ファイル一覧24aおよびエンハンス後のディレクトリ/ファイル一覧24bは、前後一覧出力部11によって出力されたとする。
【0038】
図4に示すように、パス対応付け部12は、エンハンス前のディレクトリ/ファイル一覧24aを一行ずつ読み込む(ステップS11)。パス対応付け部12は、読み込んだエンハンス前のパスがテスト環境であるエンハンス後の環境に存在するかを確認する(ステップS12)。例えば、パス対応付け部12は、読み込んだエンハンス前のパスがエンハンス後のディレクトリ/ファイル一覧24bに存在するかを確認する。
【0039】
パス対応付け部12は、読み込んだエンハンス前のパスがエンハンス後のディレクトリ/ファイル一覧24bに存在するか否かを判定する(ステップS13)。読み込んだエンハンス前のパスがエンハンス後のディレクトリ/ファイル一覧24bに存在すると判定した場合には(ステップS13;Yes)、パス対応付け部12は、エンハンス前後のパスに変更がないので、ステップS19に移行する。
【0040】
一方、読み込んだエンハンス前のパスがエンハンス後のディレクトリ/ファイル一覧24bに存在しないと判定した場合には(ステップS13;No)、パス対応付け部12は、以下の処理を行う。すなわち、パス対応付け部12は、エンハンス前のファイル名(コマンド名)がエンハンス後のディレクトリ/ファイル一覧24bに存在しないかを検索する(ステップS14)。
【0041】
パス対応付け部12は、エンハンス前のファイル名(コマンド名)がエンハンス後のディレクトリ/ファイル一覧24bに存在するか否かを判定する(ステップS15)。エンハンス前のファイル名(コマンド名)がエンハンス後のディレクトリ/ファイル一覧24bに存在すると判定した場合には(ステップS15;Yes)、パス対応付け部12は、パスを対応付けるために、ステップS18に移行する。
【0042】
一方、エンハンス前のファイル名(コマンド名)がエンハンス後のディレクトリ/ファイル一覧24bに存在しないと判定した場合には(ステップS15;No)、パス対応付け部12は、以下の処理を行う。すなわち、パス対応付け部12は、エンハンス前のファイル名(コマンド名)の拡張子は同じであるが後半部分が異なるファイル(コマンド)がエンハンス後のディレクトリ/ファイル一覧24bに存在しないかを検索する(ステップS16)。
【0043】
パス対応付け部12は、エンハンス前のファイル名(コマンド名)の拡張子は同じであるが後半部分が異なるファイル(コマンド)がエンハンス後のディレクトリ/ファイル一覧24bに存在するか否かを判定する(ステップS17)。エンハンス前のファイル名の拡張子は同じであるが後半部分が異なるファイルがエンハンス後のディレクトリ/ファイル一覧24bに存在しないと判定した場合には(ステップS17;No)、パス対応付け部12は、対応するパスがないので、ステップS19に移行する。
【0044】
一方、エンハンス前のファイル名の拡張子は同じであるが後半部分が異なるファイルがエンハンス後のディレクトリ/ファイル一覧24bに存在すると判定した場合には(ステップS17;Yes)、パス対応付け部12は、パスを対応付けるために、ステップS18に移行する。
【0045】
ステップS18において、パス対応付け部12は、エンハンス前のパスに対応するエンハンス後のパスをパス対応付け表21に記録する(ステップS18)。そして、パス対応付け部12は、ステップS19に移行する。
【0046】
ステップS19において、パス対応付け部12は、処理中の行がエンハンス前のディレクトリ/ファイル一覧24aの最終行か否かを判定する(ステップS19)。処理中の行がエンハンス前のディレクトリ/ファイル一覧24aの最終行でないと判定した場合には(ステップS19;No)、パス対応付け部12は、次の行を読み込むべく、ステップS11に移行する。
【0047】
一方、処理中の行がエンハンス前のディレクトリ/ファイル一覧24aの最終行であると判定した場合には(ステップS19;Yes)、パス対応付け部12は、パス対応付け処理を終了する。
【0048】
[テストスクリプト修正処理のフローチャート]
図5は、実施例1に係るテストスクリプト修正処理のフローチャートの一例を示す図である。なお、パス対応付け表21は、パス対応付け部12によって生成されたとする。
【0049】
図5に示すように、テストスクリプト修正部13は、パス対応付け表21から、エンハンス前後のパス対応付けを読み込む(ステップS21)。そして、テストスクリプト修正部13は、エンハンス前のテストスクリプト22を読み込む(ステップS22)。
【0050】
テストスクリプト修正部13は、エンハンス前後のパス対応付けを1行選択する(ステップS23)。そして、テストスクリプト修正部13は、読み込んだテストスクリプト22から、選択したエンハンス前後のパス対応付けにおけるエンハンス前のパスを検索し、見つかったらエンハンス後のパスに一括して置換する(ステップS24)。
【0051】
そして、テストスクリプト修正部13は、全てのエンハンス前後のパス対応付けを選択したか否かを判定する(ステップS25)。全てのエンハンス前後のパス対応付けを選択していないと判定した場合には(ステップS25;No)、テストスクリプト修正部13は、次のパス対応付けを選択すべく、ステップS23に移行する。
【0052】
一方、全てのエンハンス前後のパス対応付けを選択したと判定した場合には(ステップS25;Yes)、テストスクリプト修正部13は、全てのエンハンス前のテストスクリプト22に対して処理したか否かを判定する(ステップS26)。全てのエンハンス前のテストスクリプト22に対して処理していないと判定した場合には(ステップS26;No)、テストスクリプト修正部13は、次のエンハンス前のテストスクリプト22に対して処理すべく、ステップS22に移行する。
【0053】
一方、全てのエンハンス前のテストスクリプト22に対して処理したと判定した場合には(ステップS26;Yes)、テストスクリプト修正部13は、置換が完了したテストスクリプトをエンハンス後のテストスクリプト23として保存する(ステップS27)。
【0054】
[実施例1の効果]
上記実施例1によれば、パス変更装置1は、第1のソフトウェアのバージョンが更新された第2のソフトウェアをテストする際に、第1のソフトウェアおよび第2のソフトウェアのそれぞれの実行環境でのパスの差異を抽出する。そして、パス変更装置1は、第1のソフトウェアの動作をテストする対象のパスを、差異に応じて、第2のソフトウェアの動作をテストする対象のパスに変更する。かかる構成によれば、パス変更装置1は、ソフトウェアの変更後における動作テストの対象とするパスの変更にかかる処理時間を短縮できる。また、パス変更装置1は、バージョンの異なるソフトウェアの動作テストを、手間をかけずに実行することが可能となる。
【0055】
また、上記実施例1によれば、パス変更装置1は、パスを構成するファイル名とディレクトリ名とのうち、ファイル名が同一であって、且つ、ディレクトリ名の少なくとも一部が異なるパスを差異として抽出する。かかる構成によれば、パス変更装置1は、実行環境のパスの差異を用いることで、エンハンス前後のテストセットの差異あるディレクトリ名を含むパスを変更できることとなり、エンハンス前のテストセットを、手間をかけずにエンハンス後に用いるテストセットに修正できる。
【0056】
また、上記実施例1によれば、パス変更装置1は、パスを構成するファイル名を示す文字列のうち、ファイル名を構成する拡張子より前に記述された文字列の少なくとも一部が異なるパスを差異として抽出する。かかる構成によれば、パス変更装置1は、実行環境のパスの差異を用いることで、エンハンス前後のテストセットの差異あるファイル名を含むパスを変更できることとなり、エンハンス前のテストセットを、手間をかけずにエンハンス後に用いるテストセットに修正できる。
【0057】
また、上記実施例1によれば、パス変更装置1は、第1のソフトウェアの動作をテストする対象のパスを、差異を含む対象のパスに置き換えることで対象のパスを変更する。かかる構成によれば、パス変更装置1は、実行環境のパスの差異を用いることで、エンハンス前のテストセットをエンハンス後のテストセットに手間をかけずに修正できる。
ところで、実施例1に係るパス変更装置1は、リグレッションテストを実行する前に、エンハンス前のテストスクリプト22を修正し、修正したエンハンス後のテストスクリプト23を用いてリグレッションテストを実行すると説明した。しかしながら、パス変更装置1は、これに限定されず、リグレッションテストの実行時に、エンハンス前のテストスクリプト22に含まれるコマンドラインをパスに組み立てて、組み立てたパスに対して修正を行い、リグレッションテストを実行するようにしても良い。エンハンス前のテストスクリプト22には、パスの一部または全部のディレクトリに変数を用いたコマンドラインが含まれ、変数に代入する内容が当該コマンドラインの前に定義される。同じ変数を使ったコマンドラインが複数箇所に存在する場合、同じ変数であっても異なる内容が代入される場合がある。この場合、変数を含むパスが単純に修正(置換)されると、エンハンス後でもエンハンス前と同じ内容を使用するパスがある場合には、当該パスは間違ったパスに修正されてしまう。すなわち、複数箇所で同じ変数を使用し、且つ変数の内容の変更が必要な箇所と必要でない箇所とが混在する場合、単純にエンハンス後のパスに置換することができない。
そこで、実施例2では、リグレッションテストの実行時に、エンハンス前のテストスクリプト22に含まれるコマンドラインをパスに組み立てて、組み立てたパスに対して修正を行い、リグレッションテストを実行するパス変更装置1について説明する。
パス組立部31は、テストを実行する際に、エンハンス前のテストスクリプト22に含まれるコマンドラインのパスを組み立てる。例えば、パス組立部31は、エンハンス前のテストスクリプト22に含まれるコマンドラインを順番に実行する際に、コマンドラインの中の変数に、当該コマンドラインの前に定義される内容を代入して、パスを組み立てる。
テストスクリプト修正部13Aは、組み立てられた後のパスに対して、パス対応付け表21に基づいてエンハンス後のパスに修正する。例えば、テストスクリプト修正部13Aは、パス対応付け表21のエンハンス前のパスの中から、パス組立部31によって組み立てられたパスと一致するエンハンス前のパスを探索する。テストスクリプト修正部13は、探索できた場合には、パス対応付け表21に基づいて、エンハンス前のパスをエンハンス後のパスに置換する。そして、テストスクリプト修正部13Aは、探索できた場合には、置換が完了したパスをエンハンス後のパスとしてエンハンス後のテストスクリプト23に保存する。なお、テストスクリプト修正部13Aは、探索できなかった場合には、組み立てられたパスをエンハンス後のパスとしてエンハンス後のテストスクリプト23に保存する。
テスト実行部14Aは、エンハンス後のパスを用いてリグレッションテストを実行する。これにより、テスト実行部14Aは、エンハンス後のソフトウェア製品の動作テストを、手間をかけずに実行することができる。
例えば、テストツール30に含まれるパス組立部31は、エンハンス前のテストスクリプト22に含まれるコマンドラインの中の変数に、当該コマンドラインの前に定義された内容を代入して、パスを組み立てる。ここでは、組み立てたパスが「/aaa/bbb/ccc」であった場合である。そして、テストツール30に含まれるテストスクリプト修正部13Aは、パス対応付け表21のエンハンス前のパスの中から、パス組立部31によって組み立てられたパス「/aaa/bbb/ccc」と一致するエンハンス前のパスを探索する。ここでは、パス対応付け表21のエンハンス前のパスの中に、組み立てられたパス「/aaa/bbb/ccc」と一致するエンハンス前のパスが存在する。そこで、テストスクリプト修正部13Aは、パス対応付け表21に基づいて、エンハンス前のパス「/aaa/bbb/ccc」をエンハンス後のパス「/aaa/xxx/ccc」に置換する。そして、テストツール30に含まれるテスト実行部14Aは、置き換えられたエンハンス後のパス「/aaa/xxx/ccc」を実行する。
これにより、テストスクリプト修正部13Aは、組み立てられた後のパスに対して、パス対応付け表21を用いてエンハンス後のパスに置換することで、一部に同じ変数を使ったパスが複数存在する場合であっても間違ったパスに修正することを防ぐことができる。すなわち、テストスクリプト修正部13Aは、複数箇所で同じ変数を使用し、且つ変数の内容の変更が必要な箇所と必要でない箇所とが混在する場合、単純にエンハンス後のパスに置換してしまうことにより間違ったパスに修正することを防ぐことができる。一例として、変数Xを複数箇所で使用している場合、箇所Aでは、変数Xを「ddd」の変更が必要であり、箇所Bでは、変数Xを「aaa」と変わらず使用する場合がある。かかる場合に、変数Xを単純に「ddd」に一括置換してしまうと、箇所Bでは、変わらず使用したい「aaa」が「ddd」に変わってしまい、間違ったパスに修正してしまう。しかしながら、テストスクリプト修正部13Aは、変数Xに内容を代入した、組み立てられた後のパスに対して、エンハンス後のパスに置換することで、間違ったパスに修正してしまうことを防ぐことができる。
なお、テストセットTSの作りは、どのようなものであっても良い。例えば、テストツール30がテストスクリプトに記載されたコマンドラインを読み取る構成の場合には、テストツール30は、以下の作りであっても良い。すなわち、テストツール30は、組み立てられたエンハンス前のパスで実行した結果と以前の結果とを比較し、異なる場合にエンハンス前のパスを修正したエンハンス後のパスでリトライするという仕組みを作り込んだものであっても良い。また、テストスクリプトが、OS標準のシェルスクリプト/バッチファイルの場合には、コマンドラインに対応するコマンド実行部分を関数化し、対応するテストツール30の部分をシェルスクリプト/バッチファイルの関数として実装しても良い。また、シェルスクリプトを実行する例えばbash(Boume Again Shell)は、オープンソースであるため、bash自体にテストツール30の仕組みを作りこんでも良い。
そして、テストスクリプト修正部13Aは、組み立てられたパスがパス対応付け表21にある、エンハンス前のパスと一致するかを確認する(ステップS33A)。テストスクリプト修正部13Aは、組み立てられたパスがパス対応付け表21にある、エンハンス前のパスと一致するか否かを判定する(ステップS33B)。組み立てられたパスがパス対応付け表21にある、エンハンス前のパスと一致しないと判定した場合には(ステップS33B;No)、テストスクリプト修正部13Aは、そのまま実行すべく、ステップS35に移行する。
一方、組み立てられたパスがパス対応付け表21にある、エンハンス前のパスと一致したと判定した場合には(ステップS33B;Yes)、テストスクリプト修正部13Aは、組み立てられたパスをエンハンス後のパスに置き換える(ステップS34)。そして、テストスクリプト修正部13Aは、置き換えたコマンドを実行すべく、ステップS35に移行する。
ステップS35において、テスト実行部14Aは、エンハンス後のパスに置換された場合には、置換されたパスを示すコマンドを、エンハンス後のパスに置換されない場合には、組み立てられたパスを示すコマンドを実行する(ステップS35)。
そして、パス組立部31は、全てのコマンドラインを選択したか否かを判定する(ステップS36)。全てのコマンドラインを選択していないと判定した場合には(ステップS36;No)、パス組立部31は、次のコマンドラインを選択すべく、ステップS32Aに移行する。
一方、全てのコマンドラインを選択したと判定した場合には(ステップS36;Yes)、テストスクリプト修正部13Aは、全てのテストスクリプトに対して処理したか否かを判定する(ステップS37)。全てのテストスクリプトに対して処理していないと判定した場合には(ステップS37;No)、テストスクリプト修正部13Aは、次のテストスクリプトへ進む(ステップS38)。そして、テストスクリプト修正部13Aは、ステップS31に移行する。