(57)【要約】【課題】リグレッションテストを行う場合に、テスト項目が膨大になってしまわないように、変更した箇所に応じて優先的にテストすべき部分を自動的に抽出し、リグレッションテストを効率的、自動的に行うことを可能にすること。【解決手段】過去に行われたテストのテストケースについての情報を保存しておき、その情報と対象プログラムを解析して得られた依存関係を組み合わせることによりテストを行うリグレッションシステムを構成した。【選択図】図１
2008204405.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する、Ｓｔａｔｅｍｅｎｔ抽出手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出する、テストケース検出手段と、
前記検出されたテストケースの実行を行う、テスト実行手段と、
として機能させるためのプログラム。
【請求項２】
前記Ｓｔａｔｅｍｅｎｔ抽出手段では、前記変更されたＳｔａｔｅｍｅｎｔからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでＳｔａｔｅｍｅｎｔを抽出し、
前記閾値を変動させて、前記Ｓｔａｔｅｍｅｎｔ抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項１記載のプログラム。
【請求項３】
前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする請求項２記載のプログラム。
【請求項４】
更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項１また請求項２記載のプログラム。
【請求項５】
更に前記情報処理装置に、テスト時間終了後に、変更されたＳｔａｔｅｍｅｎｔによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項２記載のプログラム。
【請求項６】
ソフトウェアのリグレッションテストを行うシステムであって、
前記ソフトウェアプログラムにおけるＳｔａｔｅｍｅｎｔと該Ｓｔａｔｅｍｅｎｔを識別するための識別子の対応テーブルを格納するＳｔａｔｅｍｅｎｔ識別子格納手段と、
Ｓｔａｔｅｍｅｎｔ識別子を用いて記述された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を格納する依存関係格納手段と、
過去に行われたテストのテストケースについて、Ｓｔａｔｅｍｅｎｔ識別子を用いて記述した情報を格納するテストケース格納手段と、
前記依存関係格納手段に格納された依存関係に基づいて、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する依存関係解析手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを前記テストケース格納手段から検索し、前記Ｓｔａｔｅｍｅｎｔ識別子格納手段を参照して該当するプログラム部分を実行しテストを行うテスト実行手段と、
を備えることを特徴とするシステム。
【請求項７】
ソフトウェアプログラムのリグレッションテストを、情報を記憶する格納手段を備える情報処理装置で実行するための方法であって、
該情報処理装置は、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出し、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出し、
前記検出されたテストケースの実行を行う、
ことを特徴とする方法。
【請求項８】
ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する、Ｓｔａｔｅｍｅｎｔ抽出手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出する、テストケース検出手段と、
前記検出されたテストケースの実行を行う、テスト実行手段と、
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発においてプログラムを変更した際に、その変更によって予想外の影響が現れていなかどうか確認するためのリグレッションテスト（回帰テスト）を行うシステム、またはリグレッションテストを行うシステムを実現するためのプログラム、またはリグレッションテストを行う方法に関する。
【背景技術】
【０００２】
ソフトウェア開発における、ソフトウェアテストの効率化、自動化については、必要なテストの自動生成や、重複するテストの発見、最適化などについての方法、システム等が考案されている。
【０００３】
特許文献１では、予め各テストケースで実行して実行回数を記録しておき、修正の影響をうけるテストケースを抽出することが開示されている。
特許文献２では、プログラムに関する情報を基に、全てのテストケースの中から各テストケースをプログラム全体の機能における重要度順に選択するプログラムテスト装置を開示している。
【０００４】
また、プログラムの依存関係について、データ依存や制御依存といった依存の種類や解析方法（非特許文献１）などについて多くの提案がなされている。
特許文献３では、プログラムの修正による影響を受ける変数を分析し、またプログラムの実行順序をたどり計算経路を検出し、プログラムに施した修正の影響を分析する影響分析装置を開示している。  
【０００５】
また特許文献４では、変数間の代入元と代入先の依存関係を調べてソースプログラムを修正した際の影響範囲を調査することを開示している。
ソフトウェア開発における修正作業（デバッグ）においては、行った修正（変更）が誤っていないか、また行った修正（変更）がそれまでは正常に動作していた他の部分に影響を及ぼし、新たな問題を引き起こすことが無いかどうかを調べるために、リグレッションテストを行うことが必須である。しかし、ソフトウェアの規模が大きくなり、それに伴いテストケースの数が膨大になると、変更のたびに全てのテストを再実行するのは不可能である。
【０００６】
そのため変更内容に関連するテストケースを絞り込み、リグレッションテストを行うことが求められる。しかし、ソフトウェアの規模が大きく、テストケースの数も多くなっており、手作業でリグレッションテストに必要なテストケースを絞り込み、実行することは非常に困難である。また、ソフトウェアが複雑化しているために変更の影響が把握しきれず必要なテストケースを見落としてしまうことも問題となっている。
【特許文献１】特公平８−１６０９号公報
【特許文献２】特開昭６３−１１６２４８号公報
【特許文献３】特許第２６３４０１１号
【特許文献４】特開平８−１９０４７５号公報
【非特許文献１】Ｆｒａｎｋ  Ｔｉｐ，Ａ  Ｓｕｒｖｅｙ  ｏｆ  Ｐｒｏｇｒａｍ  Ｓｌｉｃｉｎｇ  Ｔｅｃｈｎｉｑｕｅｓ，Ｊｏｕｒｎａｌ  ｏｆ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅｓ，  Ｖｏｌ．３，  Ｎｏ．３，  ｐｐ．１２１−１８９，１９９５
【発明の開示】
【発明が解決しようとする課題】
【０００７】
そこで、本発明の課題は、プログラムの変更によって予想外の影響が現れていなかどうか確認するためのリグレッションテストを行う場合に、テスト項目が膨大になってしまわないように、変更した箇所に応じて優先的にテストすべき部分を自動的に抽出し、リグレッションテストを効率的、自動的に行うことを可能にすることにある。
【課題を解決するための手段】
【０００８】
上述した課題を解決するために、本発明では、過去に行われたテストのテストケースについての情報を保存しておき、その情報と対象プログラムを解析して得られた依存関係を組み合わせることによりテストを行うリグレッションシステムを構成した。
【０００９】
すなわち、変更を加えた部分に関連するテストケースに絞り込んでテストを行うためには、
（１）各テストケースにおいてソフトウェアのどの部分が実行されるか、ということと、（２）行われた変更による影響がソフトウェア中のどこに及ぶか、ということが、
分からなければならない。
【００１０】
そこで、本発明では上記（１）を実現するために、各テストケースについてテストを行った際に実行されたＳｔａｔｅｍｅｎｔをテストケースと関連付け、その情報を保存し、また上記（２）を実現するために、対象となるプログラムを解析し、依存関係を抽出し、該依存関係を用いて、変更された部分と依存関係があり、実行結果が変わると予想される部分を推定するように構成した。
【００１１】
そして、変更された部分とどの程度強い依存関係があるかを依存の段数や種類から解析し、変更部分と強く依存している、すなわち変更の影響を強く受ける部分について、過去に実行されたテストケースとプログラム中のＳｔａｔｅｍｅｎｔの対応情報に基づいて該当するテストケースを抽出し、テストを実行するように構成した。
【００１２】
このように構成することにより、変更された部分から依存関係の強いテストケースを確実に潰していくことが可能となり、リグレッションテストの効率化を図ることが可能である。
【発明の効果】
【００１３】
本発明によれば、ソフトウェアの開発における修正作業（デバッグ）において、リグレッションテストを効率的、自動的に行うことが可能である。これにより、ソフトウェア開発の効率自体を上げることが可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して、本発明の実施の形態について説明する。
図１に、本発明のソフトウェアリグレッションテストシステム１０１を示す。
リグレッションテストシステム１０１は、プログラム格納部１０２、依存関係格納部１０３、ユーザインタフェース１０４、プログラム解析部１０５、テスト実行部１０６、依存関係解析部１０７、テストケース格納部１０８、Ｓｔａｔｅｍｅｎｔ  ＩＤ格納部１０９を備えて成る。
【００１５】
プログラム格納部１０２には、テスト対象プログラムのソースファイルが保存される。
依存関係格納部１０３は、プログラム中のＳｔａｔｅｍｅｎｔ間の依存関係についての情報を保存するデータベースである。ソースファイルごとに、各Ｓｔａｔｅｍｅｎｔについて、影響を受けるＳｔａｔｅｍｅｎｔと影響を与えるＳｔａｔｅｍｅｎｔのリストを持
つ。
【００１６】
図２に依存関係格納部１０３の概要を示す。また、図２を依存関係格納部１０３で実現する場合のデータ構造を図３に示す。
また、テストケース格納部１０８はテストケース実行時に実行されたプログラムの部分についての情報を保存するデータベースである。各テストケースに対し、そのテストケースが実行されたときに、実際に実行されたプログラム中のＳｔａｔｅｍｅｎｔのリストを持つ。
【００１７】
図４にテストケース格納部１０８の概要を示す。また、図４をテストケース格納部１０８で実現する場合のデータ構造を図５に示す。
Ｓｔａｔｅｍｅｎｔ  ＩＤ格納部１０９には、テスト対象プログラムの各Ｓｔａｔｅｍｅｎｔと識別子（ＩＤ）の対応を示したテーブルが保存される。
【００１８】
ユーザインタフェース１０４は、ソフトウェア開発者などのユーザからのテスト実行指示などの入力を受け付け、テスト結果を表示して通知するなど、ユーザとシステムの仲介を行う。
【００１９】
プログラム解析部１０５は、テスト対象プログラムを静的に解析して、プログラム中の依存関係を抽出し、依存関係格納部１０３に出力する。また、プログラムが部分的に修正、変更された際には、修正や変更の行われた部分から関連のある部分について、再度依存関係を抽出し、依存関係格納部１０３に更新する。
【００２０】
依存関係解析部１０７は、テスト実行部１０６からプログラムの修正、変更された部分についての情報を受け取り、依存関係格納部１０３に格納された依存関係を用いて、修正、変更された部分に関連のある部分を解析し、その結果をテスト実行部１０６に出力する。
【００２１】
テスト実行部１０６は、依存関係解析部１０７から出力された結果をもとに、テストケース格納部１０８から必要なテストケースの選択・実行を行う。
図６に、図１に示したリグレッションテストシステム１０１において、プログラムが修正、変更された場合に、該修正、変更した部分に関係するテストを選択し、実行する際の処理の流れを示す。
【００２２】
尚、図６が実行される前に、プログラム格納部１０２に格納されたテスト対象プログラムは、プログラム解析部１０５によって解析され、依存関係格納部１０３に依存関係に関わる情報が格納されており、また、過去のテストに関するテストケースについてテストケース格納部１０８に格納されている。
【００２３】
また、以下の説明では、修正、変更されたＳｔａｔｅｍｅｎｔとの依存関係の強さを表す指標として「優先度」を用いる。「優先度」は、修正、変更されたＳｔａｔｅｍｅｎｔとの依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて増加するように設定されたものであり、優先度の値が大きくなれば大きくなるほどそのＳｔａｔｅｍｅｎｔの依存関係は修正、変更Ｓｔａｔｅｍｅｎｔとの関係は低い、ということを意味する。
【００２４】
また、依存関係の種類とは、少なくともデータ依存、制御依存、関数呼び出しのいずれかであるとする。
まず、Ｓ６０１でテスト実行部１０６が依存関係解析部１０７へ、プログラム中の修正、変更されたＳｔａｔｅｍｅｎｔと、修正、変更されたＳｔａｔｅｍｅｎｔからどの程度関連が強いＳｔａｔｅｍｅｎｔまで抽出するかをきめる優先度の閾値を通知する。
【００２５】
Ｓ６０２で、依存関係解析部１０７は、通知された、修正、変更されたＳｔａｔｅｍｅｎｔと優先度の閾値をもとに、依存関係格納部１０３に格納された依存関係を用いて、関連するＳｔａｔｅｍｅｎｔの抽出を行う。この抽出処理の詳細を図７に示す。
【００２６】
図７において、Ｓ７０１でＳｔａｔｅｍｅｎｔと優先度のペアの集合Ｓ１，Ｓ２，Ｓ３を用意し、すべて空にする。
Ｓ７０２で、プログラム中の修正、変更されたＳｔａｔｅｍｅｎｔと優先度の値０のペアをＳ１，Ｓ２に入れる。
【００２７】
Ｓ７０３で、Ｓ２に入っているＳｔａｔｅｍｅｎｔと依存関係にあるＳｔａｔｅｍｅｎｔと、その優先度のペアをＳ３に入れる。Ｓ７０３の処理の詳細を図８に示す。
図８において、Ｓ８０１で、Ｓｔａｔｅｍｅｎｔと優先度のペアの集合Ｓ２’を用意し、Ｓ２の内容をコピーする。Ｓ８０２で、Ｓ２’が空か否かを判断する。Ｓ２’が空（Ｙｅｓ）の場合は図８の処理を終了し、図７のＳ７０４に進む。Ｓ２’が空でない（Ｎｏ）場合は、Ｓ８０３に進む。
【００２８】
Ｓ８０３で、Ｓ２’からＳｔａｔｅｍｅｎｔと優先度のペア（ｓ，ｐ）を一つ取り出す。
Ｓ８０４で、依存関係格納部１０３に格納された依存関係を用いて、ｓに依存関係のあるＳｔａｔｅｍｅｎｔ  ｓ１、ｓ２、ｓ３、・・・について、ｐと依存関係の種類から優先度ｐ１、ｐ２、ｐ３、・・・を求める。
【００２９】
Ｓ８０５で、（ｓ１，ｐ１）、（ｓ２，ｐ２）、（ｓ３，ｐ３）、・・・をＳ３に入れる。この際、Ｓ３に既にあるＳｔａｔｅｍｅｎｔについては、新しいペアの優先度の値が小さい、すなわち依存関係がより強い場合は置き換え、優先度の値が大きい、すなわち依存関係が弱い場合には捨てる。
【００３０】
このように図８の処理により、Ｓ２に入っているＳｔａｔｅｍｅｎｔと依存関係にあるＳｔａｔｅｍｅｎｔとその優先度のペアをＳ３に得ることができる。
そして図７のＳ７０４に進む。Ｓ７０４で、Ｓ３から、優先度が閾値を超えているものを取り除く。Ｓ７０５で、Ｓ３に入っているペアのうち、そのＳｔａｔｅｍｅｎｔがＳ１に入っており、優先度の値がＳ３よりもＳ１のほうが大きいものをＳ３から取り除く。すなわち、依存関係の弱いものをＳ３から取り除く。
【００３１】
Ｓ７０６で、Ｓ３に入っているＳｔａｔｅｍｅｎｔをＳ１に入れる。このとき、Ｓ１に既に同じＳｔａｔｅｍｅｎｔについてのペアが入っている場合は、Ｓ３のペアで置き換える。
【００３２】
次にＳ７０７で、Ｓ３が空か否かを判断する。Ｓ３が空の場合（Ｙｅｓ）、図６に戻り、Ｓ６０３に進む。Ｓ３が空でない場合（Ｎｏ）、Ｓ７０８に進み、Ｓ２を空にする。そして、Ｓ７０９でＳ３の中身をＳ２に入れ、Ｓ３を空にし、Ｓ７０３に戻る。
【００３３】
上述のように図７の処理を行うことで、終了時にＳ１に入っているＳｔａｔｅｍｅｎｔが、優先度の閾値を超えない、修正・変更されたＳｔａｔｅｍｅｎｔから依存関係の強いＳｔａｔｅｍｅｎｔである、という結果を得る。
【００３４】
そして、図６のＳ６０３に進む。Ｓ６０３では、依存関係解析部１０７がテスト実行部１０６へ、図７、図８の処理の結果である、抽出されたＳｔａｔｅｍｅｎｔを通知する。そして、Ｓ６０４でテスト実行部１０６は通知されたＳｔａｔｅｍｅｎｔと関連付けられ
たテストケースをテストケース格納部１０８から検索し、見つかったテストケースの実行を行う。この際、図６に示すリグレッションテストのサイクルの中で既に実行されたテストケースについては実行を行わない。また、Ｓ６０５で、実行されたテストケースについて、当該テストケースが行われたことであることを記録し、テストケース格納部１０８を更新する。
【００３５】
その後、Ｓ６０６で、またテストを続行する時間的余裕があるかどうかを判断し、余裕がある場合（Ｙｅｓ）には、Ｓ６０７に進む。余裕がない場合（Ｎｏ）には、Ｓ６０８に進む。
【００３６】
Ｓ６０７では、修正、変更されたＳｔａｔｅｍｅｎｔからどの程度関連が強いＳｔａｔｅｍｅｎｔまで抽出するかを決定する閾値の値を大きくし（より依存関係の弱いＳｔａｔｅｍｅｎｔまで抽出するように値を設定）、Ｓ６０１に戻り、図６のフローを繰り返す。
【００３７】
Ｓ６０８では、十分なリグレッションテストが行われる、もしくはテスト時間に余裕がなくなり、一連のリグレッションテストが終了した後に、プログラム中の修正された箇所について依存関係格納部１０８の部分更新を行う。
【００３８】
図９にＳ６０８を詳細に説明する。
まず、Ｓ９０１でユーザからプログラムの修正、変更したＳｔａｔｅｍｅｎｔがユーザインタフェース１０４を介して指定される。このとき、Ｓｔａｔｅｍｅｎｔを新たに追加した場合には、追加したＳｔａｔｅｍｅｎｔが含まれる関数やソースファイルを指定することにより対応することができる。
【００３９】
次にＳ９０２で、プログラム解析部１０５は、指定された箇所のＳｔａｔｅｍｅｎｔから直接依存を受けている、もしくは直接依存を及ぼしているＳｔａｔｅｍｅｎｔについて、依存関係格納部１０３より検索する。
【００４０】
この検索されたＳｔａｔｅｍｅｎｔが含まれるソースファイルについて依存関係抽出処理（後述の、図１２、図１３参照）を行い、依存関係格納部１０３の該当エントリのみを更新する。
【００４１】
以上、図１から図９を参照して本発明のリグレッションテストシステムを詳細に説明した。
以下、本発明のリグレッションテストの動作について、具体的な例を用いて説明する。
【００４２】
今、図１０に示したＣ言語ライクな言語で書かれたサンプルプログラムの修正作業（デバッグ）において、本発明のリグレッションテストシステムを用いているとする。
まず、図１０のプログラムについて、プログラム解析部１０５は依存関係格納部１０３に依存関係についての情報を格納する。
【００４３】
また、図１０のプログラムにおける各ＳｔａｔｅｍｅｎｔとＳｔａｔｅｍｅｎｔ  ＩＤとの対応は図１１に示すテーブルであるとする。図１１に示すテーブルは、Ｓｔａｔｅｍｅｎｔ  ＩＤ格納部１０９に保存される。
【００４４】
図１０のプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を解析し、該依存関係に関わる情報を生成する処理の詳細については、非特許文献１に開示されている。
今回の例では、注目する依存関係としてデータ依存と制御依存、関数呼び出しを用いる。これらの依存関係は、プログラムのＳｔａｔｅｍｅｔをノードとし、実行時のＳｔａｔｅｍｅｎｔ間の遷移をエッジとして表現したコントロールフローグラフとして作成し、作
成したコントロールフローグラフを各ノードでの変数の代入と参照、エッジのパスを見ながら辿ることにより求めることができる。
【００４５】
図１２に、図１０のサンプルプログラムから作成されたコントロールフローグラフを示す。
このグラフを用いて、データ依存については、例えばノード（i=１）では、変数ｉへの代入が行われており、ノード（while(i<=max)）では、変数iが参照されていて、かつノード(i=１)からノード(while(i<=max))までの間に、変数iへの代入が行われないパスが存在するため、このノード間にはデータ依存が存在することがわかる。
【００４６】
また、制御依存については、例えばノード(while(i<=max))からはノード(fact = fact * i)へのパス以外にもSTOPへ繋がるパスがあるため、このノード間には制御依存が存在するということがわかる。
【００４７】
このように、プログラムからコントロールフローグラフを作成し、依存関係を解析すると、図１３に示すようなプログラム依存関係グラフを得ることができる。このグラフにおいて、実線がデータ依存を、一点鎖線が制御依存を、二点鎖線が関数呼び出しを示している。
【００４８】
上述のように作成したプログラム依存関係グラフを、プログラム解析部１０５は依存関係格納部１０３に保存する。すなわち、上述したようにプログラム依存関係グラフは図２のように表現することが可能で、図１０のサンプルプログラムの依存関係は図１４に示す通りとなる。そして、図１４は図１５に示したデータ構造の形で依存関係格納部１０３に保存される。
【００４９】
尚、図１４、図１５については、以下の説明に用いる、Ｓｔａｔｅｍｅｎｔ  ＩＤ：０とＳｔａｔｅｍｅｎｔ  ＩＤ：１０の影響を与えるリスト、影響を受けるリストのみを記述している。
【００５０】
Ｓｔａｔｅｍｅｎｔ  ＩＤ：０  の  write(int x) については、Ｓｔａｔｅｍｅｎｔ
ＩＤ：９、１０のＳｔａｔｅｍｅｎｔから関数呼び出しされているため、影響を受けるＳｔａｔｅｍｅｎｔのリストにＳｔａｔｅｍｅｎｔ  ＩＤ：９、１０が登録されている。
【００５１】
また、Ｓｔａｔｅｍｅｎｔ  ＩＤ：１０の write(sum)  については、Ｓｔａｔｅｍｅｎｔ  ＩＤ：０のＳｔａｔｅｍｅｎｔから関数呼び出しを受けているために、影響を与えるＳｔａｔｅｍｅｎｔのリストにＳｔａｔｅｍｅｎｔ  ＩＤ：０が登録されている。また、Ｓｔａｔｅｍｅｎｔ  ＩＤ：３、６のＳｔａｔｅｍｅｎｔからデータ依存を、Ｓｔａｔｅｍｅｎｔ  ＩＤ：９のＳｔａｔｅｍｅｎｔから制御依存を受けているために影響を受けるＳｔａｔｅｍｅｎｔリストにＳｔａｔｅｍｅｎｔ  ＩＤ：３，６，９が登録されている。
【００５２】
上述のように依存関係が依存関係格納部１０３に格納されるのと同時に、テストケース格納部１０８に過去のテストについての情報が格納される。
ここではサンプルとして過去にテストケース１、テストケース２、テストケース３のテストが実行されていたとする。過去の実行では、テストケース１では、Ｓｔａｔｅｍｅｎｔ  ＩＤ：０，１，２，３，４，５，６，７，８，９，１０，１１が実行され、テストケース２ではＳｔａｔｅｍｅｎｔ  ＩＤ：１，２，３，４，５，９が実行され、テストケース３ではいずれのＳｔａｔｅｍｅｎｔも実行されなかったとする。このような場合に、図１６に示すように、過去のテストの各テストケースにおいて実行されたＳｔａｔｅｍｅｎｔがリストにされて表現され、図１７に示すデータ構造の形でテストケース格納部１０８
に格納される。
【００５３】
以上のように、依存関係格納部１０３に図１４、図１５に示した依存関係が格納され、テストケース格納部１０８に図１６、図１７に示した過去のテストで行われた各テストケースとプログラムのＳｔａｔｅｍｅｎｔとの関係に関わる情報が格納されたところで、リグレッションテストの行う処理の例として、サンプルプログラム中のＳｔａｔｍｅｎｔ  「write(sum)」（Ｓｔａｔｅｍｅｎｔ  ＩＤ：１０）が修正されたときのリグレッションテストの処理について説明する。
【００５４】
本発明のリグレッションテストシステムでは、図６で示したフローに沿って、Ｓｔａｔｅｍｅｎｔ「write(sum)」から関連が強いＳｔａｔｅｍｅｎｔを実行するテストケースを探し、実行していく。
【００５５】
今回の例では、関連性の指標である優先度は、修正、変更されたＳｔａｔｅｍｅｎｔとの依存関係としてデータ依存、制御依存、関数呼び出しのいずれかを一段挟むごとに１増加するように設定されたものとする。すなわち、優先度の値は小さいほうが依存関係が強いことを意味する。
【００５６】
図１８に示すように、例えば図１０のサンプルプログラム中の「write(sum)」からの依存関係の強さを考えた場合、データ依存、制御依存、関数呼び出しで直接、関係のある「write(int x)」、「sum=0」、「sum=sum+i」、「if(print)」の優先度は１となり、更にこれら優先度１のＳｔａｔｅｍｅｎｔを挟んで関係のある「main()」、「i=1」、「while(i<=max)」、「i=i+1」、「write(fact)」の優先度は２となる。
【００５７】
さて、図６において、Ｓ６０１でテスト実行部１０６は、依存関係解析部１０７に修正、変更されたＳｔａｔｅｍｅｎｔ  ＩＤとして「１０」と、どの程度依存関係が強いＳｔａｔｅｍｅｎｔまで抽出するかを決める優先度として「０」を通知する。
【００５８】
Ｓ６０２で依存関係解析部１０７は、Ｓｔａｔｅｍｅｎｔ  ＩＤ：１０と依存関係のあるＳｔａｔｅｍｅｎｔを抽出する。
図７のＳ７０２で、Ｓ１＝Ｓ２＝｛（１０，０）｝（（１０，０）はＳｔａｔｅｍｅｎｔ  ＩＤ：１０と優先度の値が０のペアであることを表す。）とし、Ｓ７０３の処理を実行する。
【００５９】
Ｓ７０３の処理は図８のフローで示した処理で、Ｓ８０１で、Ｓ２’＝｛（１０，０）｝となり、Ｓ８０３でＳｔａｔｅｍｅｎｔと優先度のペア（１０，０）をＳ２’から取り出す。次にＳ８０４を実行する。
【００６０】
今回は優先度０のＳｔａｔｅｍｅｎｔ ＩＤ:１０について注目しており、依存関係データベースを参照すると、Ｓｔａｔｅｍｅｎｔ ＩＤ:１０と依存関係があるのはＳｔａｔｅｍｅｎｔ ＩＤ:０，３，６，９であり、それぞれ関数呼び出し、データ依存、制御依存で関係しているため、それぞれの優先度は「０(Ｓｔａｔｅｍｅｎｔ ＩＤ:０の優先度)＋１（関数呼び出しを一段挟んだときの優先度増加値)＝１」、「０＋１(データ依存を一段挟んだときの優先度増加値)＝１」、「０＋１(データ依存を一段挟んだときの優先度増加値)＝１」、「０＋１(制御依存を一段挟んだときの優先度増加値) ＝１」となる。
【００６１】
次にＳ８０５でＳ３にいれ、Ｓ３ ＝ {(０，１)，(３，１)，(６，１)，(９，１)}となる。この後、Ｓ８０２に戻るが、Ｓ２’からは（１０，０）が取り出されて空になっているため、図８の処理（図７のＳ７０３）は終了し、図７のＳ７０４に進む。
【００６２】
Ｓ７０４では、今回は優先度の閾値が０と設定されており、Ｓ３に入っているペアは全て０を超えているために取り除かれ、Ｓ３は空となる。このためＳ７０５、Ｓ７０６では何も処理は行われず、Ｓ７０７で図７の処理は終了する（図６のＳ６０２）。
【００６３】
Ｓ６０２では、Ｓ１に入っているＳｔａｔｅｍｅｎｔが、抽出されたＳｔａｔｅｍｅｎｔとされ、Ｓ６０３に進む。Ｓ６０３では、依存関係解析部１０７が抽出したＳｔａｔｅｍｅｎｔをテスト実行部１０６に通知する。
【００６４】
Ｓ６０４で、Ｓ１ ＝ {(１０，０)}となっているので、優先度の閾値を０としたときには関連するＳｔａｔｅｍｅｎｔはＳｔａｔｅｍｅｎｔ ＩＤ:１０のみとなる。テストケース格納部１０３を参照すると、(ｓａｍｐｌｅ．ｃ:１０)を通るテストケースはテストケース１のみであるので、このサイクルではテストケース１が実行される。
【００６５】
そして実行後、Ｓ６０５でテストケース格納部１０３を更新して、実行したテストケースについて記録する。
テスト時間がまだ存在するので、Ｓ６０７に進み、次に優先度の閾値を１とする。
【００６６】
図６において、Ｓ６０１でテスト実行部１０６は、依存関係解析部１０７に修正、変更されたＳｔａｔｅｍｅｎｔ  ＩＤとして「１０」と、どの程度依存関係が強いＳｔａｔｅｍｅｎｔまで抽出するかを決める優先度として「１」を通知する。  
【００６７】
Ｓ６０２で依存関係解析部１０７は、Ｓｔａｔｅｍｅｎｔ  ＩＤ：１０と依存関係のあるＳｔａｔｅｍｅｎｔを抽出する。
図７のＳ７０２で、Ｓ１＝Ｓ２＝｛（１０，０）｝とし、Ｓ７０３の処理（図８の処理）を実行する。
【００６８】
図８のＳ８０１でＳ２’ ＝ {(１０，０)}となり、Ｓ８０３でＳｔａｔｅｍｅｎｔと優先度のペア(１０，０)をＳ２’から取り出す。次にＳ８０４を実行する。今回は優先度０のＳｔａｔｅｍｅｎｔ ＩＤ:１０について注目しており、依存関係データベースを参照すると、Ｓｔａｔｅｍｅｎｔ ＩＤ:１０と依存関係があるのはＳｔａｔｅｍｅｎｔ ＩＤ:０，３，６，９であり、それぞれ関数呼び出し、データ依存、データ依存、制御依存で関係しているため、それぞれの優先度は０(Ｓｔａｔｅｍｅｎｔ ＩＤ:０の優先度)＋１(関数呼び出しを一段挟んだときの優先度減少値)＝１， ０＋１(データ依存を一段挟んだときの優先度減少値)＝１， ０＋１(データ依存を一段挟んだときの優先度減少値) ＝１， ０＋１(制御依存を一段挟んだときの優先度減少値) ＝１となる。
【００６９】
これをＳ８０５でＳ３にいれ、Ｓ３ ＝ {(０，１)，(３，１)，(６，１)，(９，１)}となる。この後Ｓ８０２へ戻るが、Ｓ２’からは(１０，０)が取り出されて空になっているため、図８で表される処理（図７のＳ７０３）は終了する。次のＳ７０４において、今回は優先度の閾値が１と設定されており、Ｓ３に入っているペアは全て優先度が１以下であるため、取り除かれずそのままとなる。このとき、Ｓ１ ＝ {(１０，０)}、Ｓ３ ＝ {(０，１)，(３，１)，(６，１)，(９，１)}となっており、Ｓ１とＳ３には同じＳｔａｔｅｍｅｎｔについてのペアは入っていないため、Ｓ７０５，Ｓ７０６でＳ３に入っているペアをＳ１へ入れ、Ｓ１ ＝ {(１０，０)，(０，１)，(３，１)，(６，１)，(９，１)}とする。ここでＳ３は空で無いため、Ｓ７０７で終了せず、Ｓ７０８、Ｓ７０９でＳ２ ＝{(０，１)，(３，１)，(６，１)，(９，１)}としてから再びＳ７０３で依存関係のあるＳｔａｔｅｍｅｎｔの探索を行う。
【００７０】
二回目の図８のＳ８０１ではＳ２’＝ {(０，１)，(３，１)，(６，１)，(９，１)}となり、含まれる４組のペアについてＳ８０３，Ｓ８０４，Ｓ８０５を行っていく。
まず(０，１)について依存関係格納部１０３を参照して依存関係のあるＳｔａｔｅｍｅｎｔを検索すると、依存関係があるＳｔａｔｅｍｅｎｔがＳｔａｔｅｍｅｎｔ ＩＤ:１０，１１であり、関数呼び出しで関係しているので、Ｓｔａｔｅｍｅｎｔとその優先度のペアとしてＳ３ ＝ {(１０，２)，(１１，２)}が得られる。
【００７１】
次に(３，１)について検索すると、関係するＳｔａｔｅｍｅｎｔとその優先度として{(１，２)，(６，２)，(１０，２)}が得られ、前に(０，１)について求めた{(１０，２)，(１１，２)}とＳ８０５においてマージされ、Ｓ３ ＝ {(１，２)，(６，２)，(１０，２)，(１１，２)}が得られる。
【００７２】
次に(６，１)について検索すると、関係するＳｔａｔｅｍｅｎｔとその優先度として{(２，２)，(３，２)，(５，２)，(８，２)，(１０，２)}が得られ、これまでに求められた{(１，２)，(６，２)，(１０，２)，(１１，２)}とＳ８０５においてマージされ、Ｓ３ ＝ {(１，２)，(２，２)，(３，２)，(５，２)，(６，２)，(８，２)，(１０，２)，(１１，２)}が得られる。
【００７３】
最後に(９，１)について検索すると、関係するＳｔａｔｅｍｅｎｔとその優先度として{(１，２)，(１０，２)，(１１，２)}が得られ、これまでに求められた{(１，２)，(２，２)，(３，２)，(５，２)，(６，２)，(８，２)，(１０，２)，(１１，２)}とＳ８０５においてマージされ、最終的にＳ３ ＝ {(１，２)，(２，２)，(３，２)，(５，２)，(６，２)，(８，２)，(１０，２)，(１１，２)}となり、図８で表される処理（図７のＳ７０３）は終了する。
【００７４】
次のＳ７０４において、今回は優先度の閾値が１と設定されており、Ｓ３に入っているペアは全て優先度が１を超えているために取り除かれ、Ｓ３は空となる。このためＳ７０５，Ｓ７０６では何も処理が行われず、Ｓ７０７でそのまま終了（図６のＳ６０２）する。
【００７５】
Ｓ６０２では、Ｓ１に入っているＳｔａｔｅｍｅｎｔが、抽出されたＳｔａｔｅｍｅｎｔとされ、Ｓ６０３に進む。Ｓ６０３では、依存関係解析部１０７が抽出したＳｔａｔｅｍｅｎｔをテスト実行部１０６に通知する。ここで、Ｓ１＝ {(１０，０)，(０，１)，(３，１)，(６，１)，(９，１)}となっているので、優先度の閾値を１としたとき、関係するＳｔａｔｅｍｅｎｔはＳｔａｔｅｍｅｎｔ ＩＤ:０，３，６，９，１０となる。テストケース格納部１０３を参照すると、これらのＳｔａｔｅｍｅｎｔを通るテストケースはテストケース１、２である。テストケース１は前のサイクルで既に実行されているため、このサイクルではテストケース２が実行される。
【００７６】
そして実行後、Ｓ６０５でテストケース格納部１０３を更新して、実行したテストケースについて記録する。
以上のようなフローで、優先度の閾値を増加させながら、時間がある限り繰り返され、修正、変更されたＳｔａｔｅｍｅｎｔと依存関係の強いテストケースから順にテストが行われるリグレッションテストが実現される。
【００７７】
そして、十分なリグレッションテストが行われる、もしくはテスト時間に余裕がなくなり、一連のリグレッションテストが終了した後に、プログラム中の修正、変更された箇所について依存関係格納部１０８の部分更新がＳ６０８で行われる。
【００７８】
Ｓ６０８の依存関係格納部１０８の部分更新処理は、プログラム解析部１０５が、指定された箇所のＳｔａｔｅｍｅｎｔから直接依存を受けている、もしくは直接依存を及ぼしているＳｔａｔｅｍｅｎｔについて、依存関係格納部１０３より検索し、該検索されたＳ
ｔａｔｅｍｅｎｔが含まれるソースファイルについて依存関係抽出し、依存関係格納部１０３の該当エントリのみを更新するものである。依存関係の抽出については図１０、図１２、図１３を用いて説明した通りである。Ｓ６０８では図１３のように抽出された依存関係と古い依存関係を比較し、異なる部分のみを更新する。
【００７９】
以上のように本発明のリグレッションテストシステムについて図１から図１８を参照して詳細に説明した。しかしながら、本発明な上述したリグレッションシステムの構成に限定されるものではなく、コンピュータなどの情報処理装置上で動作するソフトウェアプログラムとして実現されてもよい。
【００８０】
図１９に本発明のソフトウェアリグレッションテストシステムを実現する情報処理装置のハードウェア構成を示す。
情報処理装置１９００は、ＣＰＵ１９０１、メモリ１９０２、入力装置１９０３、出力装置１９０４、外部記憶装置１９０５、媒体駆動装置１９０６、及びネットワーク接続装置１９０７を備え、それらはバス１９０８により互いに接続されている。
【００８１】
メモリ１９０２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等を含み、リグレッションテストシステムを実現するためのプログラムやデータを格納する。
【００８２】
ＣＰＵ１９０１は、メモリ１９０２を利用してプログラムを実行することによりリグレッションテストシステムを実現する。
入力装置１９０３は、例えば、キーボード、ポインティングデバイス、タッチパネル等であり利用者からの指示や情報の入力に用いられる。出力装置１９０４は、例えばディスプレイやプリンタ等であり、情報処理装置１９００の利用者への問い合わせ、処理結果等の出力に用いられる。
【００８３】
外部記憶装置１９０５は、例えば磁気ディスク装置、光ディスク装置、光磁気ディスク装置等である。この外部記憶装置１９０５にプログラムとデータを保存しておき、必要に応じて、それらをメモリ１９０２上にロードして使用することもできる。
【００８４】
媒体駆動装置１９０６は、可搬型記録媒体１９０９を駆動し、その記録内容にアクセスする。可搬型記録媒体１９０９としては、メモリカード、メモリスティック、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ、光ディスク、光磁気ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等、任意のコンピュータで読み取り可能な記録媒体が用いられる。この可搬型記録媒体１９０９にプログラムとデータを格納しておき、必要に応じて、それらをメモリ１９０２にロードして使用することもできる。
【００８５】
ネットワーク接続装置１９０７は、ＬＡＮ，ＷＡＮ等の任意のネットワーク（回線）を介して外部の装置と通信し、通信に伴うデータ変換を行う。また、必要に応じて、プログラムとデータを外部装置から受け取り、それらをメモリ１９０２にロードして使用することもできる。
【００８６】
情報処理装置上で動作するプログラムは、情報処理装置のメモリ１９０２等を用いて、図６、図７、図８、図９のフローを処理するように構成される。
本発明のリグレッションテストシステムが情報処理装置上のプログラムを実行することによって実現される場合に、当該プログラムを情報処理装置へローディングする方法について図２０に示しておく。
図２０の（ａ）は、情報処理装置２００１のハードディスクなどの外部記憶装置に格納さ
れたプログラムやデータ２００２を情報処理装置２００１がローディングする方法を示したものである。
【００８７】
図２０の（ｂ）は、ＣＤ−ＲＯＭやＤＶＤなどの可搬型の記憶媒体に記録されたプログラムやデータ２００４が、情報処理装置２００１の媒体駆動装置を介してローディングする方法を示したものである。
【００８８】
図２０の（ｃ）は、ネットワークなどの回線を介して、情報提供者が提供するプログラムやデータ２００３を、情報処理装置２００１の通信装置を介してローディングする方法を示したものである。
【００８９】
以上のように本発明は、上述したシステムの各機能と同様の機能をコンピュータなどの情報処理装置に行わせるためのプログラムとして構成してもよい。また、本発明は、上述した機能と同様の機能をコンピュータなどの情報処理装置に行わせるためのプログラムを記録したコンピュータ読み出し可能記録媒体として構成することもできる。また、本発明は、搬送波に具現化された、上述のプログラムを表現するコンピュータ・データ・シグナルとして構成することもできる。
【００９０】
以上のように、過去に行われたテストのテストケースについての情報を保存しておき、その情報と対象プログラムを解析して得られた依存関係を組み合わせることによりテストを行うように構成した、本発明のリグレッションシステムによれば、変更された部分と依存関係の強いテストケースを優先的に潰していくことが可能となり、リグレッションテストの効率化を図ることが可能である。これにより、ソフトウェア開発の効率自体を上げることが可能となる。
【００９１】
（付記１）  ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する、Ｓｔａｔｅｍｅｎｔ抽出手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出する、テストケース検出手段と、
前記検出されたテストケースの実行を行う、テスト実行手段と、
として機能させるためのプログラム。（１）（図１、図６）
（付記２）  前記Ｓｔａｔｅｍｅｎｔ抽出手段では、前記変更されたＳｔａｔｅｍｅｎｔからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでＳｔａｔｅｍｅｎｔを抽出し、
前記閾値を変動させて、前記Ｓｔａｔｅｍｅｎｔ抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項１記載のプログラム。（２）（図１、図６、図７、図８）
（付記３）  前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記２記載のプログラム。（３）（図１、図６、図７、図８、図１８）
（付記４）  更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項１また請求項２記載のプログラム。（４）
（付記５）更に前記情報処理装置に、テスト時間終了後に、変更されたＳｔａｔｅｍｅｎ
ｔによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項２記載のプログラム。（５）（図１、図６、図９）
（付記６）  前記テスト実行手段では、前記テストケース記録手段により記録されたテストケースについては重複してテストを行わないことを特徴とする付記４記載のプログラム。
（付記７）  前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記３記載のプログラム。
（付記８）  ソフトウェアのリグレッションテストを行うシステムであって、
前記ソフトウェアプログラムにおけるＳｔａｔｅｍｅｎｔと該Ｓｔａｔｅｍｅｎｔを識別するための識別子の対応テーブルを格納するＳｔａｔｅｍｅｎｔ識別子格納手段と、
Ｓｔａｔｅｍｅｎｔ識別子を用いて記述された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を格納する依存関係格納手段と、
過去に行われたテストのテストケースについて、Ｓｔａｔｅｍｅｎｔ識別子を用いて記述した情報を格納するテストケース格納手段と、
前記依存関係格納手段に格納された依存関係に基づいて、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する依存関係解析手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを前記テストケース格納手段から検索し、前記Ｓｔａｔｅｍｅｎｔ識別子格納手段を参照して該当するプログラム部分を実行しテストを行うテスト実行手段と、
を備えることを特徴とするシステム。（６）（図１、図６）
（付記９）  前記依存関係解析手段では、前記変更されたＳｔａｔｅｍｅｎｔからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでＳｔａｔｅｍｅｎｔを抽出し、
テストする時間がある限り、前記閾値を変動させて前記テスト実行手段によるテストを繰り返すことを特徴とする付記８記載のシステム。（図１、図６、図７、図８）
（付記１０）  前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記９記載のシステム。（図１、図６、図７、図８、図１８）
（付記１１）  前記テスト実行手段は、テストを行ったテストケースについて前記テストケース格納手段に記録することを特徴とする付記８または付記９記載のシステム。
（付記１２）  更に、テスト時間終了後に、変更されたＳｔａｔｅｍｅｎｔによって変更された依存関係を部分更新する、プログラム解析部を備えることを特徴とする請求項９記載のシステム。
（付記１３）  前記テスト実行手段は、前記テストケース格納手段を参照して、一度行ったテストケースについては重複してテストを行わないことを特徴とする付記１１記載のシステム。（図１、図６、図９）
（付記１４）  前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記１０記載のシステム。
（付記１５）    ソフトウェアプログラムのリグレッションテストを、情報を記憶する格納手段を備える情報処理装置で実行するための方法であって、
該情報処理装置は、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出し、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出し、
前記検出されたテストケースの実行を行う、
ことを特徴とする方法。（７）（図１、図６）
（付記１６）  前記変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する際には、該変更されたＳｔａｔｅｍｅｎｔからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでＳａｔｅｍｅｎｔを抽出し、
前記閾値を変動させて、テストする時間がある限り前記変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔの抽出と、前記テストケースの検出と、前記テストケースの実行を繰り返すことを特徴とする付記１５記載の方法。（図１、図６、図７、図８）
（付記１７）  前記関連性の指標として定義された優先度は、データ依存、制御依存などの依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記１６記載の方法。（図１、図６、図７、図８、図１８）
（付記１８）  更に、前記検索されたテストケースのテストを行う際に、実行されたテストケースについて前記格納手段に記録する、ことを特徴とする付記１５記載または付記１６記載の方法。
（付記１９）  更に、テスト時間終了後、変更されたＳｔａｔｅｍｅｎｔによって変更された依存関係を、前記格納手段に更新する、ことを特徴とする付記１６記載の方法。（図１、図６、図９）
（付記２０）  前記検索されたテストケースを行う際に、前記格納手段に記録された、既に実行されたテストケースについては重複してテストを行わないことを特徴とする付記１８記載の方法。
（付記２１）  前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記１７記載のシステム。
（付記２２）ソフトウェアプログラムのリグレッションテストシステムを実現するために、情報を記憶する格納手段を備える情報処理装置を、
前記格納手段に格納された、前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔの依存関係を参照して、変更されたＳｔａｔｅｍｅｎｔと関係あるＳｔａｔｅｍｅｎｔを抽出する、Ｓｔａｔｅｍｅｎｔ抽出手段と、
前記抽出したＳｔａｔｅｍｅｎｔと関連付けられたテストケースを、前記格納手段に格納された、過去に実行されたテストケースと前記ソフトウェアプログラムにおける各Ｓｔａｔｅｍｅｎｔとの対応についての情報から、前記抽出したＳｔａｔｅｍｅｎｔと関連のあるテストケースを検出する、テストケース検出手段と、
前記検出されたテストケースの実行を行う、テスト実行手段と、
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。（８）（図１、図６）
（付記２３）  前記Ｓｔａｔｅｍｅｎｔ抽出手段では、前記変更されたＳｔａｔｅｍｅｎｔからの関連性の指標として定義された優先度が、指定された閾値を超えないものを選択することでＳｔａｔｅｍｅｎｔを抽出し、
前記閾値を変動させて、前記Ｓｔａｔｅｍｅｎｔ抽出手段と、前記テストケース検出手段と、前記テスト実行手段とをテストする時間がある限り繰り返すことを特徴とする請求項２２記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。（図１、図６、図７、図８）
（付記２４）  前記関連性の指標として定義された優先度は、依存関係を一段挟むごとに、挟まれた依存関係の種類に応じて優先度が増加するように設定されたものであり、前記依存関係に基づいて算出されるものであることを特徴とする付記２３記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。（図１、図６、図７、図８、図１８）
（付記２５）  更に前記情報処理装置に、前記テスト実行手段において実行されたテストケースについて前記格納手段に記録するテストケース記録手段として機能させることを特徴とする請求項２２また請求項２３記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
（付記２６）更に前記情報処理装置に、テスト時間終了後に、変更されたＳｔａｔｅｍｅ
ｎｔによって変更された依存関係を、前記格納手段に更新する依存関係更新手段として機能させることを特徴とする請求項２３記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。（図１、図６、図９）
（付記２７）  前記テスト実行手段では、前記テストケース記録手段により記録されたテストケースについては重複してテストを行わないことを特徴とする付記２５記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
（付記２８）  前記依存関係とは、データ依存、制御依存、関数呼び出しの少なくともいずれかであることを特徴とする付記２４記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
【図面の簡単な説明】
【００９２】
【図１】本発明のリグレッションテストシステムの構成を示す図である。
【図２】依存関係格納部１０３の概要を示す図である。
【図３】依存関係格納部１０３のデータ構造を示す図である。
【図４】テストケース格納部１０８の概要を示す図である。
【図５】テストケース格納図１０８のデータ構造を示す図である。
【図６】本発明のソフトウェアリグレッションテストシステムにおける、テストの選択・実行のフローを示す図である。
【図７】図６のＳ６０２の詳細フローを示す図である。
【図８】図７のＳ７０３の詳細フローを示す図である。
【図９】図６のＳ６０８の詳細フローを示す図である。
【図１０】サンプルプログラムを示す図である。
【図１１】サンプルプログラムのＳｔａｔｅｍｅｎｔとＳｔａｔｅｍｅｎｔ  ＩＤとの関係を定義するテーブルを示す図である。
【図１２】サンプルプログラムのコントロールフローグラフを示す図である。
【図１３】プログラム依存関係グラフを示す図である。
【図１４】サンプルプログラムの依存関係を示す図である。
【図１５】サンプルプログラムの依存関係を依存関係格納部に格納する場合のデータ構造を示す図である。
【図１６】テストケース格納部に格納された各テストケースとＳｔａｔｅｍｅｎｔの関係を示す図である。
【図１７】図１６の関係をテストケース格納部に格納する場合のデータ構造を示す図である。
【図１８】優先度の説明をする図である。
【図１９】ソフトウェアリグレッションテストシステムを実現する情報処理装置の構成を示す図である。
【図２０】プログラムの情報処理装置へのローディングを説明する図である。
【符号の説明】
【００９３】
１０１      ソフトウェアリグレッションテストシステム
１０２      プログラム格納部
１０３      依存関係格納部
１０４      ユーザインタフェース
１０５      プログラム解析部
１０６      テスト実行部
１０７      依存関係解析部
１０８      テストケース格納部
１０９      Ｓｔａｔｅｍｅｎｔ  ＩＤ格納部
１９００      情報処理装置
１９０１      ＣＰＵ
１９０２      メモリ
１９０３      入力装置
１９０４      出力装置
１９０５      外部記憶装置
１９０６      媒体駆動装置
１９０７      ネットワーク接続装置
１９０８      バス
１９０９      可搬記録媒体
２００１      情報処理装置
２００２      外部記憶装置に記録されたプログラムやデータ
２００３      情報提供者が提供するプログラムやデータ
２００４      可搬記録媒体に記録されたプログラムやデータ
【図１】
2008204405.tif 000003
【図２】
2008204405.tif 000004
【図３】
2008204405.tif 000005
【図４】
2008204405.tif 000006
【図５】
2008204405.tif 000007
【図６】
2008204405.tif 000008
【図７】
2008204405.tif 000009
【図８】
2008204405.tif 000010
【図９】
2008204405.tif 000011
【図１０】
2008204405.tif 000012
【図１１】
2008204405.tif 000013
【図１２】
2008204405.tif 000014
【図１３】
2008204405.tif 000015
【図１４】
2008204405.tif 000016
【図１５】
2008204405.tif 000017
【図１６】
2008204405.tif 000018
【図１７】
2008204405.tif 000019
【図１８】
2008204405.tif 000020
【図１９】
2008204405.tif 000021
【図２０】
2008204405.tif 000022