(57)【特許請求の範囲】
【請求項１】
コンピュータに、
プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行された複数の第１テストの実行結果と、前記特定のモジュールと依存関係を有するモジュールに対して実行された複数の第２テストの実行結果とを用いて、前記複数の第１テストと前記複数の第２テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数の前記ペアのうち前記関連を有するペアの数を示す関連数情報とを生成し、
前記複数の第１テストに含まれる特定のテストが指定された場合、前記関連性情報と前記関連数情報とに基づいて、前記特定のテストに関連する関連テストを、前記複数の第２テストから抽出する
処理を実行させることを特徴とするテスト選択プログラム。
【請求項２】
前記関連性情報は、前記ペア毎の関連の有無を示す情報の情報量を示す関連度情報を含み、
テスト選択プログラムは前記コンピュータに、さらに、
前記関連数情報と、前記第１テストと前記第２テストのペアの総数と、に基づいて、前記関連度情報を更新し、
前記複数の第１テストに含まれる特定のテストが指定された場合、前記関連性情報と前記関連数情報とに基づいて、前記特定のテストに関連する関連テストを、該特定のテストと該関連テストのペアの関連度情報とともに、前記複数の第２テストから抽出する
処理を実行させることを特徴とする請求項１に記載のテスト選択プログラム。
【請求項３】
前記コンピュータに、
前記複数の第１テストに含まれる特定のテストの実行を指示された場合、前記特定のテストと前記関連テストのペアの関連度情報に基づいて、抽出した前記関連テストの実行順序を決定する
処理を実行させることを特徴とする請求項２に記載のテスト選択プログラム。
【請求項４】
前記コンピュータに、さらに、
前記特定のモジュールが変更された場合、前記変更後の特定のモジュールに対する前記複数の第１テストの実行結果と、前記変更後の特定のモジュールと依存関係を有するモジュールに対する複数の第２テストのうち、前記複数の第１テストのそれぞれに関連する前記抽出された関連テストの実行結果と、に基づいて、前記変更後における前記関連性情報と前記関連数情報とを生成し、
前記変更後における前記関連数情報と、前記第１テストと前記第２テストのペアの総数と、に基づいて、前記関連度情報を更新する
処理を実行させることを特徴とする請求項２または３に記載のテスト選択プログラム。
【請求項５】
前記関連性情報は、前記第１テストと前記第２テストのペアの実行結果がともにエラーを示す場合に、該ペアが関連を有することを示す
ことを特徴とする請求項１〜４のうちいずれか１項に記載のテスト選択プログラム。
【請求項６】
プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行された複数の第１テストの実行結果と、前記特定のモジュールと依存関係を有するモジュールに対して実行された複数の第２テストの実行結果とを用いて、前記複数の第１テストと前記複数の第２テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数の前記ペアのうち前記関連を有するペアの数を示す関連数情報とを生成し、
前記複数の第１テストに含まれる特定のテストが指定された場合、前記関連性情報と前記関連数情報とに基づいて、前記特定のテストに関連する関連テストを、前記複数の第２テストから抽出する
処理をコンピュータが実行することを特徴とするテスト選択方法。
【請求項７】
プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行された複数の第１テストの実行結果と、前記特定のモジュールと依存関係を有するモジュールに対して実行された複数の第２テストの実行結果とを用いて、前記複数の第１テストと前記複数の第２テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数の前記ペアのうち前記関連を有するペアの数を示す関連数情報とを生成する生成部と、
前記複数の第１テストに含まれる特定のテストが指定された場合、前記関連性情報と前記関連数情報とに基づいて、前記特定のテストに関連する関連テストを、前記複数の第２テストから抽出する抽出部と、
を備えることを特徴とするテスト選択装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テスト選択プログラム、テスト選択方法、及びテスト選択装置に関する。
【背景技術】
【０００２】
近年のソフトウェア利用の拡大に伴って、プログラムの開発には、限られた時間内で、プログラムのテストを実行してリリースすることが求められている。例えば、プログラムの開発に、ＤｅｖＯｐｓ(a portmanteau of development and operations)と呼ばれる手法が導入される場合がある。ＤｅｖＯｐｓは、リリースごとのプログラムの修正内容を細かくしてリリース間隔を短くする手法である。ＤｅｖＯｐｓでは、プログラムのテストを実行してリリースするまでの期間がより短期間に制限される。つまり、ＤｅｖＯｐｓでは、プログラムに対する一度の修正量は少量であるが、テストに要求される時間は短時間に制約される。
【０００３】
このような状況のもと、限られた時間でテストを実施した効果を最大化することが求められている。そのためには、優先して実施すべきテストを的確に選択し、不具合修正の確認やデグレードの発見を迅速に行うことが重要となる。
【０００４】
一方、効率的にプログラムのテストを実行することに関する以下の第１〜４の技術がある。
【０００５】
第１の技術は、生成手段と、算出手段と、抽出手段とを有する関連テスト項目提示装置についての技術である。生成手段は、テスト項目の実行の結果であるテスト結果とそのテスト項目とテスト項目の実行の対象のバージョンを示す情報を有するテスト結果データから、一つのテスト項目を各バージョンのソフトウェアに実施したテスト結果の変化の有無を表す情報を有するテスト結果変化データを生成する。算出手段は、テスト結果変化データに基づいて、テスト項目間の類似度を算出する。抽出手段は類似度に基づいて関連テスト項目を抽出する。
【０００６】
第２の技術は、テスト項目生成装置についての技術である。テスト項目生成装置は、情報蓄積手段と、入力手段と、テスト項目抽出手段を備える。情報蓄積手段は、ソフトウェアに関するプロジェクト情報およびテスト項目が蓄積される。入力手段は、被テスト・ソフトウェアに関するプロジェクト情報およびテスト項目の入力を受け付ける。テスト項目集出手段は、情報蓄積手段に蓄積されたテスト項目から被テスト・ソフトウェアのテストに用いられるテスト項目を、入力手段に入力されたプロジェクト情報およびテスト項目のうちの少なくともいずれか一方に基づいて抽出する。
【０００７】
第３の技術は、開発視線システムについての技術である。開発支援システムにおいて、影響範囲管理データベースを予め作成して記憶しておく。影響範囲管理データベースには、「要求」（または「プログラム」）ごとに、当該要求（またはプログラム）が修正された場合に影響がある範囲を格納する。すなわち、「要求」と、当該要求が修正された場合に修正する必要があるプログラムと、修正後に実施しなければならないテストケースとを関連付ける。また、「プログラム」と、当該プログラムが修正された場合に実施しなければならないテストケースとを関連付ける。例えば、障害が発生してプログラムの修正が指示されたときに、修正される「プログラム」を特定し、当該「プログラム」の影響範囲を影響範囲管理データベースから取得して、取得した影響範囲に含まれるテストケースのみを、再動作試験として実施する。
【０００８】
第４の技術は、テスト項目抽出システムについての技術である。テスト項目抽出部は前提条件入力部から入力された前提条件に基づいて、テスト項目管理部が管理するテスト項目の中から、対象となるソフトウェアのテスト項目の候補を抽出する。テスト項目抽出部はテスト項目抽出部が検索したテスト候補項目を、過去の不具合発生率に応じて、不具合が発生しやすい順に操作者画面に表示する。テスト仕様登録部は操作者が提示したテスト項目候補の中から、対象となるソフトウェアのテスト仕様としてテストする項目を選択し、テスト仕様管理部に対象となるソフトウェアのテスト仕様として登録する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１３−１４２９６７号公報
【特許文献２】特開２００９−２５２１６７号公報
【特許文献３】特開２００８−３９８５号公報
【特許文献４】特開２００５−３３２０９８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
テストを実行する対象となるプログラム（以下、対象プログラムという）が変更（修正）された場合、その対象プログラムに対するテストの実行結果も変わる場合がある。また、対象プログラムに対する修正の量に応じて、変更後の対象プログラムに対して実行されるテストのうちで、フェイルするテストの数が変わる場合もある。
【００１１】
ここで、対象プログラムの変更の度合いを示す値であって、変更後の対象プログラムに対して実行されたテストのうち、フェイルしたテストの数に応じて変動する、プログラムの仮の修正量の値を、以下の説明では粒度と記す。粒度が小さい変更が対象プログラムに対して行われた場合には、粒度が大きい変更が行われた場合よりも、フェイルするテストの数が少なくなる。粒度が最も小さい（細粒度）の変更が対象プログラムに対して行われた場合には、特定のテストのみフェイルする。
【００１２】
実際の開発においては、コード変更の際に必ずしも変更の粒度が一定になるとは限らない。しかしながら、上記第１〜４の技術では、変更の粒度については考慮されていない。
【００１３】
そこで、１つの側面では、本発明は、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることを目的とする。
【課題を解決するための手段】
【００１４】
一態様によるテスト選択プログラムがコンピュータに実行させる処理は、プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行された複数の第１テストの実行結果と、複数のモジュールと同一のモジュールを用いて行われるテストであって特定のモジュールと依存関係を有するモジュールに対して実行された複数の第２テストの実行結果とを用いて、複数の第１テストと複数の第２テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数のペアのうち関連を有するペアの数を示す関連数情報とを生成し、複数の第１テストに含まれる特定のテストが指定された場合、関連性情報と関連数情報とに基づいて、特定のテストに関連する関連テストを、複数の第２テストから抽出する処理を含む。
【発明の効果】
【００１５】
一側面によれば、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】実施形態に係るテスト選択装置の構成の一例を示す。
【図２】第１実施形態に係るテスト選択装置の構成の一例を示すブロック図である。
【図３】コンピュータで実現するテスト選択装置の一例を示すブロック図である。
【図４】対象プログラムに対して修正が行われた後に実行されたテスト結果と、その結果から得られた相互関係を示す相互関係情報の例である。
【図５】共起関係が発生しない場合のテスト結果の一例を示す。
【図６】共起関係の関係性が最も弱い場合のテスト結果の一例を示す。
【図７】共起関係の関係性が最も強い場合のテスト結果の一例を示す。
【図８】共起関係の関係性が中程度である場合のテスト結果の一例を示す。
【図９Ａ】テスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その１）である。
【図９Ｂ】テスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その２）である。
【図１０】対象プログラムのソースコードの一例を示す図である。
【図１１】ソース情報におけるモジュールの関係の一例を示す図である。
【図１２】対象プログラムのプログラム依存グラフの一例を示す図である。
【図１３】プログラム依存グラフにおける依存元に対するテストの関係を示す図である。
【図１４】関数に関連付けられるテストのテーブルを示す図である。
【図１５】テスト関係図の一例を示す図である。
【図１６】共起関係を示す共起テーブルの一例を示す図である。
【図１７】変更箇所リストの一例を示す図である。
【図１８】影響箇所リストの一例を示す図である。
【図１９】優先度に基づいて実行順序を決定することの説明図である。
【図２０】共起関係を示す共起テーブルの一例を示す図である。
【図２１】第２実施形態に係る対象プログラムのテスト選択装置の一例を示す。
【図２２Ａ】第２実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その１）を示す。
【図２２Ｂ】第２実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その２）を示す。
【図２３】第２実施形態における、共起関係係数Ｋの更新を説明する図である。
【図２４】コンピュータシステムで実現するテスト選択装置の一例を示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。実施形態は、複数のモジュールを含む対象プログラムに対してテストを実行する場合の一例として、回帰テスト（リグレッションテスト）を実行する場合に、開示の技術を適用したものである。
【００１８】
図１は、実施形態に係るテスト選択装置の構成の一例を示す。図１において、テスト選択装置１は、生成部２、抽出部３、及び決定部４を含む。
【００１９】
生成部２は、複数の第１テストの実行結果と、複数の第２テストの実行結果とを用いて、複数の第１テストと複数の第２テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数のペアのうち関連を有するペアの数を示す関連数情報とを生成する。第１テストは、プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行されたテストである。第２テストは、複数のモジュールと同一のモジュールを用いて行われるテストであって特定のモジュールと依存関係を有するモジュールに対して実行されたテストである。
【００２０】
抽出部３は、複数の第１テストに含まれる特定のテストが指定された場合、関連性情報と関連数情報とに基づいて、特定のテストに関連する関連テストを、複数の第２テストから抽出する。
【００２１】
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることができる。すなわち、指定された特定のテストが、プログラムの変更後にフェイルしたテストの場合、そのフェイルしたテストに関連して優先的に実行すべきテストを精度よく抽出することができる。また、粒度が異なる変更が行われた場合であっても、共起関係の数に応じて関連テストを抽出することができる。
【００２２】
また、関連性情報は、ペア毎の関連の有無を示す情報の情報量を示す関連度情報を含む。
また、生成部２は、関連数情報と、第１テストと第２テストのペアの総数と、に基づいて、関連度情報を更新する。
【００２３】
また、抽出部３は、複数の第１テストに含まれる特定のテストが指定された場合、関連性情報と関連数情報とに基づいて、特定のテストに関連する関連テストを、特定のテストと関連テストのペアの関連度情報とともに、複数の第２テストから抽出する。
【００２４】
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストとともに抽出する関連性を示す情報の精度を向上させることができる。
【００２５】
決定部４は、複数の第１テストに含まれる特定のテストの実行を指示された場合、特定のテストと関連テストのペアの関連度情報に基づいて、抽出した関連テストの実行順序を決定する。
【００２６】
このように構成することで、指定されたテストに関連するテストの実行順序を、共起関係の数に応じた関連性に基づいて決定することができる。すなわち、指定されたテストに関連するテストの実行順序を、より精度の高い関連性を示す情報に基づいて決定することができる。
【００２７】
また、生成部２は、特定のモジュールが変更された場合、変更後の特定のモジュールに対する複数の第１テストの実行結果と、変更後の特定のモジュールと依存関係を有するモジュールに対する複数の第２テストのうち、複数の第１テストのそれぞれに関連する抽出された関連テストの実行結果と、に基づいて、変更後における関連性情報と関連数情報とを生成する。
【００２８】
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることができる。
【００２９】
また、更新部は、変更後における関連数情報と、第１テストと第２テストのペアの総数と、に基づいて、関連度情報を更新する。
【００３０】
関連性情報は、第１テストと第２テストのペアの実行結果がともにエラーを示す場合に、そのペアが関連を有することを示す。
【００３１】
（第１実施形態）
図２は、第１実施形態に係るテスト選択装置の構成の一例を示すブロック図である。テスト選択装置１０は、実施部１１、特定部１２、算出部１３、評価部１４、関係図作成部１５、変更箇所特定部１６、抽出部１７、及び、制御部１８を含む。また、テスト選択装置１０には、記憶部２０が接続されている。尚、関係図作成部１５は生成部２の一例である。抽出部１７は抽出部３の一例である。制御部１８は決定部４の一例である。
【００３２】
対象プログラムは、複数のモジュールを含み、複数のモジュールの各々は、１以上の所定関数を含むことができる。
【００３３】
テストは、対象プログラムに含まれる複数のモジュールの各々の機能及び動作を確認するための処理である。各テストは、そのテストが機能及び動作を確認する対象のモジュールに関連付けられる。
【００３４】
記憶部２０は、対象プログラム情報２２、相互関係情報２４、テスト情報２６を記憶する。
【００３５】
対象プログラム情報２２は、対象プログラムを示す情報である。対象プログラム情報２２の一例として対象プログラムのソースコードがある。対象プログラム情報２２は、１つの対象プログラムの変更履歴を示す情報を含めることができる。また、対象プログラム情報２２は、１つの対象プログラムについて、変更を施した後の対象プログラム及び変更を施す前の対象プログラムの各々を示す情報を含めることができる。また、対象プログラム情報２２は、対象プログラムに含まれる複数のモジュール（関数）のモジュール（関数）間の依存関係を示す情報を含んでもよい。
【００３６】
相互関係情報２４は、対象プログラムに対して実行される複数のテスト間の相互関係を示す情報である。相互関係情報２４の一例として、モジュールの各々に対するテストの間の相互関係を示す情報がある。テスト間の相互関係の一例には共起関係がある。共起関係は、同一の対象プログラムに対してそれぞれテストを実施したときに、一方のテストが所定の実行結果に至った場合に、他方のテストも所定の実行結果に至るようなテスト間の関係である。尚、実施形態では、同一の名称のプログラムであっても、そのプログラムが変更された場合、変更の前後では、異なるプログラムとして区別する。相互関係情報２４は、相互関係を有するテストのペアを識別する情報、及び、各相互関係についての関係の度合いを示す情報を含むことができる。相互関連情報２４は、関連性情報及び関連数情報の一例である。相互関連情報２４が含む各相互関係についての関係の度合いを示す情報は、関連度情報の一例である。
【００３７】
テスト情報２６は、対象プログラムに対して実行される複数のテストの各々を示す情報である。テスト情報２６の一例として各テストを実行するために用いるプログラムのソースコード及びテスト実行時のパラメータを示す情報がある。
【００３８】
実施部１１は、テスト情報２６を用いて、対象プログラムに対する各テストを実施する。具体的には例えば、実施部１１は、対象プログラム情報２２を用いて、依存関係のあるモジュールのそれぞれに対するテストを実行する。
【００３９】
特定部１２は、依存関係のあるモジュールのそれぞれに対する各テストの実行結果に基づいて、相互関係を有するテストのペアを特定する。この特定において用いる各テストの実行結果は、同一の対象プログラムの各モジュールに対して実行されたテストの結果である。
【００４０】
算出部１３は、特定部１２により特定された相互関係を有するペアの相互関係の強さを算出する。相互関係の強さの算出は、依存関係のあるモジュールのそれぞれに対する各テストのすべてのペアの総数と、特定部１２により特定された相互関係を有するペアの数と、に基づいて行われる。算出部１３が算出する相互関係の強さは、具体的には例えば、後述するエントロピーの値である。
【００４１】
評価部１４は、算出部１３により算出された相互関係の強さが所定の閾値以上か否かを判定する。この評価で用いられる所定の閾値は、予めテスト選択装置１０の所定の記憶領域、または記憶部２０に格納されている。
【００４２】
関係図作成部１５は、特定部１２により特定された相互関係を有するペアの情報と、評価部１４による判定の結果に基づいて、相互関係情報２４を作成して記憶部２０に格納する。すなわち、関係図作成部１５は、評価部１４により相互関係の強さが所定の閾値以上と判定された場合、特定部１２により特定された相互関係を有するペアを識別する情報、及び各相互関係についての関係の度合いを示す情報を、相互関係情報に格納する。尚、相互関係情報２４が既に記憶部２０に存在する場合には、関係図作成部１５は、特定部１２により特定された相互関係を有するペアの情報と、評価部１４による判定の結果に基づいて、相互関係情報２４を更新する。各相互関係についての関係の度合いを示す情報は、具体的には例えば、後述する共起関係係数Ｋである。
【００４３】
変更箇所特定部１６は、対象プログラム情報２２に基づいて、対象プログラムにおける変更箇所を特定する。例えば、変更箇所の特定は、対象プログラム情報２２に含まれる変更履歴を示す情報等に基づいて行われる。
【００４４】
抽出部１７は、対象プログラムに対するテストを指定されると、相互関係情報２４に基づいて、指定されたテストと相互関係を有するテスト（以下、関連テストと記す）を、各相互関係についての関係の度合いを示す情報とともに、抽出する。
【００４５】
制御部１８は、変更箇所特定部１６により特定された変更箇所に対応するモジュールに関係するテストを実施部１１に実行させるように制御する。具体的には制御部１８は、先ず、変更箇所に対応するモジュールに対するテストを実施部１１に実行させる。そして制御部１８は、変更箇所に対応するモジュールに対するテストの実行の結果、所定の結果に至ったテストを特定する。この特定したテストを、次に制御部１８は、抽出部１７に対して指定して、特定したテストの関連テストを抽出させる。そして制御部１８は抽出部１７により抽出されたテストを、各相互関係の度合いに応じた順番で、実施部１１に実行させる。これによって、対象プログラムに対するテストについて、例えば、プログラム修正などの変更に伴うリグレッションテストの実行範囲を抑制でき、またテストの処理時間を短縮することができる。
【００４６】
図３に、コンピュータで実現するテスト選択装置の一例を示すブロック図を示す。コンピュータ３０はＣＰＵ３２、メモリ３４、不揮発性の格納部３６及び蓄積部３８を備えている。ＣＰＵ３２、メモリ３４、格納部３６及び蓄積部３８は、バス４８を介して互いに接続されている。また、コンピュータ３０は、ディスプレイ等の表示装置４０、キーボード及びマウス等の入力装置４２を備え、表示装置４０及び入力装置４２はバス４８に接続されている。また、コンピュータ３０は、記録媒体４６が挿入され、挿入された記録媒体４６に対して読み書きするための装置（ＩＯ装置）４４がバス４８に接続されている。なお、格納部３６及び蓄積部３８はＨＤＤ(Hard Disk Drive)やフラッシュメモリ等によって実現できる。また、コンピュータ３０はコンピュータネットワーク等に接続するためのインタフェースを備えることができる。
【００４７】
格納部３６には、ＯＳ（Operating System）６０及びコンピュータ３０をテスト選択装置１０として機能させるためのテストプログラム５０が記憶されている。テストプログラム５０は、実施プロセス５１、特定プロセス５２、算出プロセス５３、評価プロセス５４、関係図作成プロセス５５、変更箇所特定プロセス５６、抽出プロセス５７、及び、制御プロセス５８を含んでいる。ＣＰＵ３２がテストプログラム５０を格納部３６から読み出してメモリ３４に展開し、テストプログラム５０が有する各プロセスを実行することで、コンピュータ３０は図２に示すテスト選択装置１０として動作する。また、ＣＰＵ３２が実施プロセス５１を実行することで、コンピュータ３０は図２に示す実施部１１として動作し、ＣＰＵ３２が特定プロセス５２を実行することで、コンピュータ３０は図２に示す特定部１２として動作する。また、ＣＰＵ３２が算出プロセス５３を実行することで、コンピュータ３０は図２に示す算出部１３として動作し、ＣＰＵ３２が評価プロセス５４を実行することで、コンピュータ３０は図２に示す評価部１４として動作する。また、ＣＰＵ３２が関係図作成プロセス５５を実行することで、コンピュータ３０は図２に示す関係図作成部１５として動作し、ＣＰＵ３２が変更箇所特定プロセス５６を実行することで、コンピュータ３０は図２に示す変更箇所特定部１６として動作する。また、ＣＰＵ３２が抽出プロセス５７を実行することで、コンピュータ３０は図２に示す抽出部１７として動作し、ＣＰＵ３２が制御プロセス５８を実行することで、コンピュータ３０は図２に示す制御部１８として動作する。
【００４８】
蓄積部３８には、ソース情報６２、依存図情報６４，関係図情報６６，テーブル情報６８，及びテスト情報７０が蓄積されている。ソース情報６２は、対象プログラムのソースコードを示す。依存図情報６４は、対象プログラムのソースコードにおける関数を含むモジュールの依存関係を示す。関係図情報６６は、対象プログラムのソースコードにおける関数を含むモジュールに関係づけられる個別のテストの間の相互関係を示す。テーブル情報６８は、各種テーブルを示す。テスト情報７０は、複数の個別のテストの各々のソースコード等の情報を示す。蓄積部３８は、図２に示す記憶部２０に対応する。ソース情報６２は、図２に示す対象プログラム情報２２に対応する。依存図情報６４、関係図情報６６及びテーブル情報６８は、図２に示す相互関係情報２４に対応する。テスト情報７０は、図２に示すテスト情報２６に対応する。
【００４９】
なお、対象プログラムのソースコードにおける関数の依存関係を表す技術の一例として、プログラム依存グラフがある。
【００５０】
また、テスト選択装置１０はコンピュータネットワークに接続することを可能としてもよい。つまり、テスト選択装置１０はコンピュータネットワークに接続することまたは非接続にすることに限定されない。開示の技術におけるテスト選択装置１０の一例のように、コンピュータ３０のみで実現してもよく、複数のコンピュータによりテスト選択装置１０を実現してもよい。
【００５１】
次に、本実施形態の作用を説明する。
テストによりそれまで動作が保証されていた対象プログラムが変更された場合、変更による影響を確認するために、優先して実施すべきテストを選択することは、効率的なテストの実行に寄与する。なお、対象プログラムにおける変更内容の一例として、定数の修正等の単純なソースコードの差異を示す修正箇所ではなく、対象プログラムにおける関数を含むモジュールの関係に起因して他の関数を含むモジュールに影響を及ぼす変更箇所がある。
【００５２】
実施形態では、変更内容に応じて、優先して実施すべきテストが選択される。対象プログラムに対するテストのうち、加えられた変更とは無関係な箇所に対するテストについては、その結果は変更の前後で変わらない。よって、このような変更とは無関係な箇所に対するテストを、変更後に再度実施することは非効率である。従って、実施形態では、対象プログラムの変更後に優先して実施すべきテストの選択において、変更が加えられた箇所に対するテストと、その変更により影響が及ぶ範囲のテストが選択される。
【００５３】
具体的には、実施形態に係るテスト選択装置は、先ず、変更が加えられた箇所に対するテストを実施する。そしてテスト選択装置は、実施したテストのうち、フェイルしたテストを特定し、特定したテストと相互関係を有するテストを、変更により影響が及ぶ範囲のテストとして選択して実行する。相互関係は、具体的には共起関係である。
【００５４】
共起関係は、上述したが、同一の対象プログラムに対してそれぞれテストを実施したときに、一方のテストが所定の実行結果に至った場合に、他方のテストも所定の実行結果に至るようなテスト間の関係である。よって、変更が加えられた箇所に対するテストのうちでフェイルしたテストと共起関係を有するテストは、変更後に実施された場合、同様にフェイルする可能性が高い。従って、このような共起関係を有するテストは、その変更により影響が及ぶ範囲のテストである可能性が高いと考えられる。
【００５５】
実施形態では、過去に実施した対象プログラムに対するテストの結果から、テスト間の相互関係（共起関係）を示す相互関係情報を相互関係情報として記録しておく。そしてこの相互関係情報を用いて、変更が加えられた箇所に対するテストのうちフェイルしたテストと相互関係を有するテストを抽出する。
【００５６】
実施形態では、さらに、テスト間の各共起関係を、その共起関係が表れたときの情報量に応じて区別する。この理由を、図４を参照して説明する。
【００５７】
図４（Ａ）は、対象プログラムに対して１度目の修正が行われた後に実行されたテスト結果と、その結果から得られた相互関係（共起関係）を示す相互関係情報の例である。図４（Ｂ）は、対象プログラムに対して２度目の修正が行われた後に実行されたテスト結果と、その結果から得られた相互関係（共起関係）を示す相互関係情報の例である。図４においては、１度目の修正は修正量が少なく、２度目の修正は修正量が多い場合の例が示される。
【００５８】
図４（Ａ）及び図４（Ｂ）のテスト結果（以下の、図５〜図８についても同様）は、修正された関数に対する４つのテスト（test_m1〜test_m4）の実行結果と、修正された関数の上位関数に対する４つのテスト（test_u1〜test_u4）の実行結果とを示している。図４の実行結果の黒塗りで示されるテストは、実行の結果フェイルしたことを示し、白塗りで示されるテストは、実行の結果が正常であったことを示す。
【００５９】
図４（Ａ）のテスト結果では、test_m1とtest_u1がフェイルしている。この場合、共起関係は、（test_m1、test_u1）の１つのペアの間で発生している。よって、図４（Ａ）の相互関係情報に、（test_m1、test_u1）で共起関係が発生したことを示す情報が格納される。これは、図４（Ａ）の相互関係情報において、（test_m1、test_u1）の間に線（以下、共起線という）が引かれていることにより示されている。尚、共起線の横の「1」は、過去に（test_m1、test_u1）の間に共起関係が発生した回数を示している。
【００６０】
一方、図４（Ｂ）では、test_m1、test_m2とtest_u2、test_u3がフェイルしている。この場合、共起関係は、（test_m1、test_u2）、（test_m1、test_u3）、（test_m2、test_u2）、（test_m2、test_u3）の４つのペアの間で発生している。よって、図４（Ｂ）の相互関係情報に、（test_m1、test_u2）、（test_m2、test_u2）、（test_m2、test_u2）、（test_m2、test_u3）で共起関係が発生したことを示す情報が格納される。ここで、図４（Ｂ）の相互関係情報は、一度目の変更後に実施されたテストにおいて発生した共起関係の情報、ずなわち、図４（Ａ）の相互関係情報を含む形で更新されている。
【００６１】
ここで、１回目のテストにおいて発生した共起関係と、２回目のテストにおいて発生した共起関係とは、その共起関係が有する情報量が異なる。すなわち、１回目のテストにおいては、共起関係は１つだけ発生しているのに対し、２回目のテストにおいては、共起関係は４つ発生している。このような１回目に発生した共起関係は、２回目に発生した共起関係よりもより強い関係を有していると考えられる。
【００６２】
ある修正に対して発生する共起関係は、起こりうる共起関係の数に対して実際に発生した共起関係の割合が小さいほど、その共起関係の情報量が大きくなり、関係が強いと考えられる。すなわち、図４（Ａ）で発生した１つの共起関係は、図４（Ｂ）で発生した４つの共起関係のそれぞれよりもより情報量が大きく、関係が強いと考えられる。ここで、「起こりうる共起関係の数」とは、２つのテストセット（（test_m1〜test_m4）と（test_u1〜test_u4））間のペアの総数を示す。図４（Ａ）、図４（Ｂ）の場合はともに、起こりうる共起関係の数は「16」となる。なお、以下の説明では、同一の関数に対応付けられる１以上のテストをテストセットという。
【００６３】
しかしながら、すべての共起関係を、各共起関係が有する情報量を区別せず相互関係情報に格納する場合、どの共起関係がより強い関係があるのかを判別することができない。
【００６４】
実施形態では、共起関係それぞれを、その共起関係の情報量に応じて区別して相互関係情報に格納する。共起関係の情報量とは、共起関係が起きた際、それがどれほど起こりにくいかを表す尺度である。具体的には実施形態では、以下の式（１）により求められる値（以下、エントロピーと記す）を用いて、各共起関係の関係の強さを表す。
【００６５】
エントロピー＝-log（テストで起きた共起関係の数／起こりうる共起関係の数)
（式１）
ただし、共起関係が発生しない場合には、エントロピーの値は「0」となる。
【００６６】
尚、図４に示すように、ソースコードの修正量と、共起関係が発生する数には相関関係がある可能性がある。ソースコードに対する修正・変更内容が小さいほど、各テストセットでフェイルするテストケースが少なくなり、共起してフェイルする箇所が局所的に現れる。一方、ソースコードに対する修正・変更内容が大きいほど、各テストセットでフェイルするテストケースが増え、共起してフェイルする箇所は広範囲に現れる。よって、ソースコードの修正量が大きい場合は、予測への貢献が小さい共起関係が得られる場合がありえるため、情報量に応じた相互関係情報への反映が重要となる。
【００６７】
以下、図５〜図８を参照し、様々な修正が行われた際の、修正後に実行されたテスト結果の例と、そのときのエントロピーの値について説明する。
【００６８】
図５は、共起関係が発生しない場合のテスト結果の一例を示す。図５（Ａ）では、test_m1〜test_m4、test_u1〜test_u4のすべてのテストが正常終了している。図５（Ｂ）では、test_m2がフェイルし、その他のすべてのテストが正常終了している。図５（Ｃ）では、test_u2、test_u3がフェイルし、その他のすべてのテストが正常終了している。図５に示すように、依存関係を有する２つのテストセットのうち、いずれか一方のテストセットの1以上のテストがフェイルしても、他方のテストセットのテストが１つもフェイルしない場合には、共起関係は発生しない。上述したように、共起関係が発生しない場合には、エントロピーの値は「0」となる。
【００６９】
図６は、共起関係の関係性が最も弱い場合のテスト結果の一例を示す。図６では、test_m1〜test_m4、test_u1〜test_u4のすべてのテストがフェイルしている。この場合、全てのペアで共起関係が発生し、エントロピーの値は、「-log (16/16) = 0」となる。
【００７０】
図７は、共起関係の関係性が最も強い場合のテスト結果の一例を示す。図７では、test_m3とtest_u2の２つがフェイルしている。この場合（test_m3、test_u2）のペアで共起関係が発生し、エントロピーの値は、「-log (1/16) ≒ 1.20」となる。
【００７１】
図８は、共起関係の関係性が中程度である場合のテスト結果の一例を示す。図８（Ａ）では、（test_m1、test_u2）、（test_m2、test_u2）、（test_m3、test_u2）、（test_m4、test_u2）の４つのペアで共起関係が発生している。図８（Ｂ）では、（test_m2、test_u1）、（test_m2、test_u2）、（test_m2、test_u3）、（test_m2、test_u4）の４つのペアで共起関係が発生している。図８（Ｃ）では、（test_m2、test_u2）、（test_m2、test_u3）、（test_m3、test_u2）、（test_m3、test_u3）の４つのペアで共起関係が発生している。図８の例はいずれもエントロピーの値は、「-log (4/16) ≒ 0.6」となる。
【００７２】
以上、テストの実行結果の種々のケースにおける、エントロピーの値について説明した。このように、実施形態では、共起関係が表れたときの情報量に応じて、各共起関係を区別することで、ペア同士の関係性の精度を向上させることができる。
【００７３】
次に、第１実施形態に係るテスト選択装置におけるテスト処理の流れを説明する。図９Ａは、第１実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その１）を示す。図９Ｂは、第１実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その２）を示す。
【００７４】
図９Ａ及び図９Ｂに示すテストの流れは、開示の技術のテストプログラムの一例として実行されるテストプログラム５０による処理である。なお、以下の説明では、入力１を示す情報を、対象プログラムの変更前のソースコードを示す情報として説明する。また、入力２を示す情報を、対象プログラムの変更前のソースコードに対応するテスト関係図を示す情報として説明する。また、入力３を示す情報を、対象プログラムの変更後のソースコードを示す情報、及び対象プログラムの変更後のソースコードに対応するテストを示す情報として説明する。
【００７５】
まず、ＣＰＵ３２は、テストプログラム５０に含まれる各プロセスの実行を開始する。具体的には、ＣＰＵ３２は、ステップ１０１において、蓄積部３８からソース情報６２を取得することにより、対象プログラムを読み取る。次に、ＣＰＵ３２は、ステップ１０２において、入力３を示す情報を用いて、テスト関係図の作成処理を実行する。
【００７６】
ここで、ＣＰＵ３２がステップ１０１で実行するテスト関係図の作成処理を説明する。テスト関係図の作成処理では、先ず、対象プログラムのソース情報６２が解析されて対象プログラムのプログラム依存グラフが作成される。そして、作成された対象プログラムのプログラム依存グラフに対して、テストの実行結果に基づいて各テストが関係づけられるテスト関係図が作成される。
【００７７】
図１０に、対象プログラムのソース情報６２の一例を示し、図１１に、ソース情報６２におけるモジュールの関係を示す情報の一例を示す。また、図１２に、対象プログラムのプログラム依存グラフ７４の一例を示す。なお、以下の説明では、関数がモジュールに対応される一例を説明する。対象プログラムのソース情報６２は、関数単位のソースコード６２Ａ，６２Ｂ，６２Ｃ，６２Ｄ，６２Ｅに分類され、分類されたソースコード６２Ａ〜６２Ｅの各々がコマンド等の実行内容により関係している。図１０では、ソースコード６２Ａが関数ａ，ソースコード６２Ｂが関数ｂ，ソースコード６２Ｃが関数ｃ，ソースコード６２Ｄが関数ｄ，及びソースコード６２Ｅが関数ｅに対応される。関数単位のソースコード６２Ａ〜６２Ｅの各々は、自ソースコードから、自己以外のソースコード及びデバイスの少なくとも一つに対して依存関係を有する起点と考えられる。依存関係の一例として、制御依存関係またはデータ依存関係がある。また、デバイスの一例として、データを格納したストレージがある。
【００７８】
ソース情報６２の解析により、ＣＰＵ３２は図１１に示すように、依存関係の依存元、依存関係の依存先、及び依存関係の内容の各々を示す情報を得ることができる。図１１には、関数ａ〜ｅの依存関係の依存元（「From」列）、依存関係の依存先（「To」列）、及び依存関係の内容（「内容」列）の各々を示す情報のテーブル７２が示されている。テーブル７２を示す情報は、対象プログラムのソース情報６２に対応付けられて、プログラム依存グラフ７４を示す依存図情報６４として蓄積部３８（図３）に記憶される。テーブル７２を示す情報は、テーブル情報６８に含めて蓄積部３８（図３）に記憶してもよい。
【００７９】
ＣＰＵ３２は、図１１に示すテーブル７２を用いて、対象プログラムのプログラム依存グラフ７４を作成する。図１２は、図１１に示すテーブル７２により作成される対象プログラムのプログラム依存グラフ７４を示す。図１１における関数ａ〜ｅが、図１２では節点７６として表されている。また、図１２に示す対象プログラムのプログラム依存グラフ７４では、節点またはデバイスの間を有向線７８で接続した場合が示されている。なお、有向線７８は、節点７６である関数の内容が変更されたときに影響を及ぼす関係を関数間または関数とデバイスの間の関連づける接続関係として表すものでもある。
【００８０】
次に、対象プログラムのプログラム依存グラフ７４において節点７６となる関数ａ〜ｅの各々に対して、テストが関係づけられる処理を説明する。テスト情報７０に含まれる１または複数のテストはそれぞれ、適用対象の対象プログラムが予め定められている。ただし、１または複数のテストは、適用対象の対象プログラムの全ての関数に適用されるものではなく、各テストが対象プログラムのどの関数に対して実行されるのかについてはＣＰＵ３２が以下の処理により検出する。すなわちＣＰＵ３２は、対象プログラムに対して各テストを実行して、各テストで検証される関数を検出することにより、関数ａ〜ｅの各々に対してテストを関係づける。
【００８１】
具体的にはＣＰＵ３２は、まず、対象プログラムに対するテスト用の各テストを実行し、対象プログラムにおいて通過した関数を検出する。そしてＣＰＵ３２は、実行したテストと、そのテストで通過した関数の情報とを対応付けて、関数通過テーブル８０に格納する。
【００８２】
図１３は、関数通過テーブル８０の一例を示す。図１３において、関数通過テーブル８０では、テストの実行により通過された関数が丸記号で示されている。また、図１３の例は図１０の例に対応しており、関数ａ〜ｅ、及びｓｔｏｒａｇｅの順位で上位から下位に至る一例である。
【００８３】
テストの実行において通過された関数は、実行されたテストに関連しており、通過された関数のうちプログラム依存グラフ７４における最上位の関数が起点の関数であると考えられる。次にＣＰＵ３２は、このように検出した起点の関数を、実行したテストに関連付ける。
【００８４】
例えば、図１３の関数通過テーブル８０では、テストａ_１〜ａ_６については、そのテストの実行により通過した関数のうちで最上位の関数は関数ａである。また、テストb_１〜b_６、ｃ_１〜ｃ_６、ｄ_１〜ｄ_２、ｅ_１〜ｅ_２については、それぞれ、そのテストの実行により通過した関数のうちで最上位の関数は、関数ｂ、ｃ、ｄ、ｅである。従って、ＣＰＵ３２は、テストａ_１〜ａ_６、b_１〜b_６、ｃ_１〜ｃ_６、ｄ_１〜ｄ_２、ｅ_１〜ｅ_２を、それぞれ、関数ａ、ｂ、ｃ、ｄ、ｅに関連付ける。
【００８５】
次にＣＰＵ３２は、テストと関数を関連付けた結果を関数テストテーブル８２に格納する。図１４は、対象プログラムの各関数と、各関数に関連付けられるテストを示す。図１４において、関数テストテーブル８２には、関数ａにテストａ_１〜ａ_６が関連付けられていることを示す情報が記憶されている。また、関数テストテーブル８２には、関数ｂ、ｃ、ｄ、ｅに、それぞれ、テストb_１〜b_６、ｃ_１〜ｃ_６、ｄ_１〜ｄ_２、ｅ_１〜ｅ_２が関連付けられていることを示す情報が記憶されている。図１４に示す関数テストテーブル８２を示す情報は、テーブル情報６８に含めて蓄積部３８（図３）に記憶される。
【００８６】
尚、関数テストテーブル８２は予め蓄積部３８に記憶されていてもよい。関数テストテーブル８２が既に蓄積部３８に記憶されている場合には、関数通過テーブル８０及び関数テストテーブル８２を作成する処理は省略可能である。
【００８７】
次に、ＣＰＵ３２は、プログラム依存グラフ７４（図１２）と関数テストテーブル８２（図１４）とを用いて、テスト関係図８４を作成する。作成されるテスト関係図８４は、対象プログラムのプログラム依存グラフ７４における節点７６に、各関数に対応付けられる１以上のテストであるテストセット８６を関連付けたものである。図１５に、テスト関係図８４の一例を示す。なお、以下の説明では、関数に対応付けられる１以上のテストをテストセット８６という。テストセット８６を関数ごとに区別する場合、関数を示す記号を付す。図１５に示すテスト関係図８４では、関数ａに関連づけられるテストａ_１〜ａ_６をテストセット８６ａ、関数ｂに関連づけられるテストｂ_１〜ｂ_６をテストセット８６ｂと表記している。同様に、テストｃ_１〜ｃ_４をテストセット８６ｃ、テストｄ_１、ｄ_２をテストセット８６ｄ、テストｅ_１、ｅ_２をテストセット８６ｅと表記している。
【００８８】
また、テスト関係図８４は、共起関係も示すことができる。共起関係は、同一の対象プログラムに対してテストを実行したときに、エラーが発生した複数のテストの関係である。すなわち、共起関係は、同一の対象プログラムに対してテストセット８６に含まれるテストを、節点に対して順次実施した結果、エラーが発生した複数のテストについて、自節点のテストと他節点のテストの間の関係をいう。本実施形態では、エラーが発生した特定節点のテストと、特定節点と依存関係が上位の節点のテストとの相互関係を共起関係として説明する。なお、共起関係は、共起関係係数Ｋにより共起関係の度合いが示される。共起関係係数Ｋの一例として、共起関係が生じた累積回数、及び確率がある。
【００８９】
図１５に示すテスト関係図８４では、テストａ_２とテストｂ_１に共起関係が生じた場合の例を示しており、この共起関係は、テストａ_２とテストｂ_１が共起線８８により接続されることにより示されている。また、図１５に示すテスト関係図８４では、共起線８８付近に共起関係係数Ｋが「（１）」で表記されている。
【００９０】
ＣＰＵ３２はテスト関係図８４を作成するとともに、プログラム依存グラフ７４（図１２）と関数テストテーブル８２（図１４）とを用いて、共起テーブルを作成する。共起テーブルは、対象プログラムに対してテストを実施した結果により生じた共起関係を示す。
【００９１】
図１６は、共起テーブル９０の一例を示す。図１６において、共起テーブル９０は、共起されたテストａ_２とテストｂ_１の合致セルに、共起関係係数Ｋが格納されている。これは、テストａ_２とテストｂ_１の間に共起関係が生じており、その共起関係の関係係数の値がＫであることを示している。図１６に示す共起テーブル９０を示す情報は、テーブル情報６８に含めて蓄積部３８（図３）に記憶される。なお、テスト関係図８４における共起関係すなわち共起線８８及び共起関係係数Ｋは、テストが実施される毎に更新される。
【００９２】
尚、ステップ１０１においては、テスト関係図８４及び共起テーブル９０において共起関係係数Ｋは示されなくてもよい。その場合、ステップ１０１において作成されたテスト関係図８４及び共起テーブル９０の共起関係係数Ｋは、後ほど説明するステップ１０５及びステップ１１５において初めて格納されてもよい。
【００９３】
次に、ＣＰＵ３２は、ステップ１０２において、入力１を示す情報が有るか否かを判断する。つまり、ＣＰＵ３２は、蓄積部３８に蓄積されているソース情報６２に、対象プログラムの変更前のソースコードを示すソース情報６２が存在するか否かを判断する。ＣＰＵ３２は、ステップ１０２で否定判断すると図９Ｂのステップ１０９へ処理を移行し、ステップ１０２で肯定判断すると、ステップ１０３へ処理を移行する。ステップ１０３では、ＣＰＵ３２は、入力２を示す情報が有るか否かを判断する。つまり、ＣＰＵ３２は、蓄積部３８に蓄積されている関係図情報６６に、対象プログラムの変更前のソースコードに対応するテスト関係図を示す関係図情報６６が存在するか否かを判断する。
【００９４】
ＣＰＵ３２は、ステップ１０３で否定判断すると、ステップ１０４において、入力１を示す情報、つまり対象プログラムの変更前のソースコードを用いてプログラム依存グラフ７４を作成し、ステップ１０６へ処理を移行する。一方、ＣＰＵ３２は、ステップ１０３で肯定判断すると、ステップ１０５において、入力２を示す対象プログラムの変更前のソースコードに対応するテスト関係図を用いて、ステップ１０１で作成したテスト関係図８４に関係係数（共起関係係数Ｋ。詳細は後述。）を反映し、ステップ１０６へ処理を移行する。
【００９５】
次に、ＣＰＵ３２は、ステップ１０６において、対象プログラムの変更箇所を特定した後に変更箇所リスト９２（図１７）を作成する。
【００９６】
変更箇所を特定する処理では、対象プログラムの単なる修正箇所ではなく、変更後のプログラム依存グラフ７４における節点７６であるモジュールの一例である関数が特定される。つまり、ＣＰＵ３２は、変更前後の対象プログラムの各ソース情報６２から修正箇所を抽出し、抽出した修正箇所に対応するプログラム依存グラフ７４における節点７６である関数を特定する。ＣＰＵ３２は、特定した変更箇所の関数を示す情報を変更箇所リスト９２として作成する。作成された変更箇所リスト９２を示す情報は、テーブル情報６８に含めて蓄積部３８（図３）に記憶される。なお、変更箇所リスト９２は、メモリ３４に一時的に記憶してもよい。
【００９７】
また、変更箇所を特定する処理では、特定された変更箇所により影響を受ける箇所も特定される。つまり、ＣＰＵ３２は、特定した変更箇所である関数の修正により影響を受ける箇所を特定する。具体的には、特定した変更箇所である関数の節点７６から、変更後の対象プログラムのプログラム依存グラフ７４における有向線７８の依存元の関数を抽出することを繰り返す。例えば、関数ｃに修正が施された場合、プログラム依存グラフ７４における有向線７８の依存元の関数が、関数ｂ及び関数ａの順に抽出される。ＣＰＵ３２は、特定した変更箇所の関数、及び抽出した関数を示す情報を影響箇所リスト９４として、変更箇所毎に作成する。作成された影響箇所リスト９４を示す情報は、テーブル情報６８に含めて蓄積部３８（図３）に記憶される。なお、影響箇所リスト９４は、メモリ３４に一時的に記憶してもよい。
【００９８】
図１７に、変更箇所リスト９２の一例を示し、図１８に、影響箇所リスト９４の一例を示す。図１７に示す変更箇所リスト９２は、特定された変更箇所の関数が関数ｃと関数ｅである場合を示している。図１８に示す影響箇所リスト９４は、特定された変更箇所の関数が関数ｃであり、関数ｃの変更により影響を受ける関数として関数ｂ及び関数ａが抽出された場合を示している。
【００９９】
次に、ＣＰＵ３２は、図９Ｂのステップ１０７において、ステップ１０６で作成した変更箇所リスト９２から１つの変更箇所を選択する。なお、ＣＰＵ３２は、ステップ１０６で、変更箇所リスト９２における順位に従って選択する。また、ＣＰＵ３２は、ステップ１０７において、選択した変更箇所の節点である関数に関連付けられているテストセット８６を、関数テストテーブル８２に基づいて取得する。次に、ＣＰＵ３２は、ステップ１０８において、ステップ１０７で選択したテストセット８６が既に実施済みのテストセット８６であるか否かを判断する。ステップ１０７で選択したテストセット８６が既に実施済みのテストセット８６であるとき、ＣＰＵ３２はステップ１０８で肯定判断し、ステップ１０７へ戻る。なお、ステップ１０７で選択したテストセット８６が変更箇所リスト９２の最後の変更箇所であるときに、ＣＰＵ３２がステップ１０８で肯定判断した場合、本処理ルーチンを終了することができる。
【０１００】
一方、ステップ１０７で選択したテストセット８６が未実施のテストセット８６であるとき、ＣＰＵ３２は、ステップ１０８で否定判断し、ステップ１０９へ処理を移行する。
【０１０１】
ステップ１０９では、ＣＰＵ３２は、ステップ１０７で取得したテストセット８６を実行する。
【０１０２】
次にステップ１１０で、ＣＰＵ３２は、ステップ１０９でテストセット８６を実施した関数の上位にテストセット８６が関連付けられた関数が有るか否かを判断する。つまり、ＣＰＵ３２は、プログラム依存グラフ７４でテストセット８６を実施した関数に対応する節点について、上位階層に節点、つまり依存関係を有する関数が有るか否かを判断する。具体的には、ＣＰＵ３２は、ステップ１０７で選択された変更箇所に対応する影響箇所リスト９４を参照し、現在処理中の節点の上位に節点（関数）が有るか否かを判断する。ステップ１０９で実施したテストセット８６が最上位の場合、ＣＰＵ３２は、ステップ１１０で否定判断し、ステップ１１６において変更箇所リスト９２にテストセット８６を実施していない残存する変更箇所があるか否かを判断する。変更箇所リスト９２に登録された変更箇所の全てについてテストセット８６を実施した場合には、ＣＰＵ３２はステップ１１６で否定判断し、本処理ルーチンを終了する。変更箇所リスト９２にテストセット８６を実施していない変更箇所が存在する場合には、ＣＰＵ３２は、ステップ１１６で肯定判断し、ステップ１０７の処理に戻り、残存する変更箇所に対する処理を実行する。
【０１０３】
ステップ１０９で実施したテストセット８６の上位に関数がある場合、ＣＰＵ３２は、ステップ１１０で肯定判断する。
【０１０４】
そしてＣＰＵ３２は、ステップ１１１において、ステップ１０９においてエラーが発生したテストと共起関係にあるテストを、テスト関係図８４（共起テーブル９０）に基づいて、追加して実行するテストとして抽出する。そしてステップ１１１で、ＣＰＵ３２は、テスト関係図８４（共起テーブル９０）に基づいて、抽出したテスト、つまり上位のテストセット８６に含まれるテストの実行順序を決定する。
【０１０５】
ステップ１１１では、テストセット８６の優先度に基づいて実行順序が決定される。詳細には、ＣＰＵ３２はまず、エラーが発生したテストと共起関係にある上位関数のテストセット８６に含まれるテストの優先度ＴＰを次の数式により示される優先度判定式により求める。優先度判定式は、各テストセット８６の優先度ＴＰ（TestPriority）を下位のテストセット８６の共起関係の重み(relation_value)の和から求めるものである。なお、共起関係の重み（reration_value）は、共起関係係数Ｋである。また、テストは(Test)、下位のテストセット８６は（LowerTestCase）として表記している。なお、共起関係にない下位のテストセット８６に含まれるテストでは共起関係の重み（共起関係係数Ｋ）が０になる。次に、求めた優先度ＴＰが高い順序でテストの実施順位を決定し、決定された順位によるテストを、上位のテストセット８６におけるテストの実行順序として決定する。
【０１０６】
【数１】
0006409577.tif 000002
【０１０７】
次に、ステップ１１２でＣＰＵ３２は、ステップ１１１で抽出したテストを、ステップ１１１で決定した順序で実行する。なお、ステップ１０９で実施したテストセット８６でエラーが生じなかった場合、ＣＰＵ３２は、上位のテストセット８６に含まれる全てのテストを実施してもよい。また、ＣＰＵ３２は、テスト関係図８４に反映されている、変更箇所に対応するテストで過去にエラーが発生した共起関係にあるテストの実施順位を用いてテストを特定してもよい。
【０１０８】
次にステップ１１３において、ＣＰＵ３２は、ステップ１０９で実施したテストの実行結果と、ステップ１１２で実施したテストの実行結果と、を用いて、エントロピーを算出する。具体的には、ＣＰＵ３２は先ず、ステップ１０９とステップ１１２においてフェイルしたテストを特定する。そして、ＣＰＵ３２は、ステップ１０９でフェイルしたテストとステップ１１２でフェイルしたテストとのペアの数、及び、ステップ１０９で実施したテストとステップ１１２で実施したテストとのペアの数を用いて、エントロピーを算出する。エントロピーの算出式は上述した（式１）である。
【０１０９】
次にステップ１１４において、ＣＰＵ３２は、ステップ１１３で算出したエントロピーの値が所定の閾値よりも大きいか否かを判定する。エントロピーの値が所定の閾値以下の場合には、ＣＰＵ３２はステップ１１４で否定判断し、処理をステップ１１６に遷移させる。一方、エントロピーの値が所定の閾値より大きい場合には、ＣＰＵ３２はステップ１１４で肯定判断し、ステップ１１５において、ステップ１０９とステップ１１２で実施したテストの実行により発生した共起関係の情報をテスト関係図８４及び共起テーブル９０に反映する。すなわち、ＣＰＵ３２は、テスト関係図８４及び共起テーブル９０において、共起関係が発生したペアの共起関係係数Ｋの値を１インクリメントする。
【０１１０】
そして、ＣＰＵ３２は処理をステップ１１０に遷移させ、テップ１１０〜ステップ１１６の処理が繰り返される。ただし、ステップ１１０においては、ＣＰＵ１１０は、直近に実行したステップ１１１においてテストセット８６を実施した関数の上位にテストセット８６が関連付けられた関数が有るか否かを判断する。また、ステップ１１１においてＣＰＵ３２は、前回実行したステップ１１１においてエラーが発生したテストと共起関係にあるテストを、テスト関係図８４（共起テーブル９０）に基づいて、追加して実行するテストとして抽出してもよい。また、ステップ１１３においてＣＰＵ３２は、直近に実行した２回のステップ１１２において実施したテストの実行結果を用いて、エントロピーを算出してもよい。また、ステップ１１５においてＣＰＵ３２は、直近に実行した２回のステップ１１２において実施したテストの実行により発生した共起関係の情報をテスト関係図８４及び共起テーブル９０に反映してもよい。
【０１１１】
なお、ステップ１０９またはＳ１１２で実施したテストセット８６の上位に複数の関数が存在する場合がある。この場合、ステップ１１１においては、複数の関数の各々に対応付けられるテストセット８６に含まれるテストの各々の優先度ＴＰの総和を求め、求めた総和に基づいて、例えば優先度が高い序列で実行順序を決定すればよい。
【０１１２】
具体的には、図１７に示す変更箇所リスト９２の場合、まず、変更箇所リスト９２を参照し変更箇所として関数ｃを選択して（Ｓ１０７）、関数ｃに関するテストセット８６ｃが実施される（Ｓ１０９）。関数ｃに関するテストセット８６ｃに含まれるテストでエラーがない場合は上位の階層の関数ｂのテストセット８６ｂ、次に関数ａのテストセット８６ａが実施される。一方、関数ｃに関するテストセット８６ｃでエラーが発生した場合、上位階層のテストセット８６ｂで共起関係にあるテストを抽出し（Ｓ１１１）、各テストの優先度ＴＰつまり共起関係の重みの和の順にテストが実施される（Ｓ１１２）。
【０１１３】
図１９に、ステップ１１１において、テストセット８６の優先度に基づいて実行順序を決定することを説明するためのテスト関係図８４の一例を示す。図１９の例は、関数ｃを修正後、関数ｃのテストセット８６ｃを実施した結果、テストｃ_１、テストｃ_３でエラーが発生したときを示している。また、図２０に、共起関係を示す共起テーブル９０の一例を示す。図２０では、共起関係にあるテストｃ_１とテストｂ_２の合致セルに、共起関係係数Ｋとして「１５」が格納されていることが示されている。同様に、共起関係にあるテストｃ_３とテストｂ_２の合致セルに「２０」が格納され、テストｃ_３とテストｂ_４の合致セルに「２０」が格納され、テストｃ_３とテストｂ_５の合致セルに「３０」が格納されている。
【０１１４】
関数ｃのテストセット８６ｃの上位の関数ｂのテストセット８６ｂにおいて、共起関係にあるものはテストｂ_２、テストｂ_４、及びテストｂ_５である。また、テストｂ_１、テストｂ_３、及びテストｂ_６には共起関係がない。また、共起関係の重みの和である優先度ＴＰは、テストｂ_２＝３５、テストｂ_４＝２０、及びテストｂ_５＝３０である。従って、テストセット８６ｂに関して実施対象のテストは、テストｂ_２、テストｂ_４、及びテストｂ_５であり、テストｂ_２、テストｂ_５、及びテストｂ_４の順序が決定され、決定された順序で優先的にテストが実施される。
【０１１５】
なお、テストの実施により、共起してエラーが発生するテストを含むテストセットがあった場合は、発生した共起関係のエントロピーが算出される（Ｓ１１３）。そして算出されたエントロピーが所定の閾値よりも大きい場合には（Ｓ１１４でＹｅｓ）、テスト間の共起関係係数Ｋが更新される（Ｓ１１５）。例えば、図１９及び図２０に示す関係にあるとき、テスト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合、エントロピーは、「-log (2/24) = 1.08」となる。このとき所定の閾値が「0.5」である場合、エントロピーの値は閾値よりも大きくなる。すると、テスト_c_1とテスト_b_4の共起関係係数Ｋが「０」から「１」に更新され、テスト_c_3とテスト_b_4の共起関係係数Ｋが「２０」から「２１」に更新される。
【０１１６】
なお、以上説明したテストプログラム５０による処理において、ステップ１０８及び１１２の処理の一部または全部が実施プロセスによる処理に含まれる。また、ステップ１１３の処理の一部または全部が特定プロセス及び算出プロセスによる処理に含まれる。また、ステップ１１４の処理の一部または全部が評価プロセス及び算出プロセスによる処理に含まれる。また、ステップ１０１の処理が関係図作成プロセスによる処理に含まれる。また、ステップ１０７の処理の一部または全部が変更箇所特定プロセスによる処理に含まれる。また、ステップ１１１の処理の一部または全部が抽出プロセスによる処理に含まれる。また、ステップ１０９、ステップ１１１、ステップ１１２の処理の一部または全部が制御プロセスによる処理に含まれる。
【０１１７】
なお、実施形態で考慮する共起関係は、対象プログラムに含まれる所定の関数に対するテストと、その関数と直接依存関係のある関数に対するテストと、の間のペアにおいて発生した共起関係に限定されない。すなわち例えば、図１５に示す関数間の依存関係がある場合に、テストセット８６ａと８６ｂの間で発生した共起関係だけでなく、テストセット８６ａとテストセット８６ｄとの間に発生した共起関係も、テスト関係図８４及び共起関係テーブル９０に格納される構成としてもよい。
【０１１８】
以上説明したように、本実施形態では、共起関係が表れたときの情報量に応じて、共起関係の情報を相互関係情報２４に格納するか否かを判定する。共起関係の情報量が小さい場合には、その共起関係を示す情報を相互関係情報２４に格納しないことで、テスト間の相互関係を高い精度で示すことが可能となる。従って、対象プログラムの変更後にフェイルしたテストの関連テストを抽出する際に、このような相互関係情報２４を用いることで、より高い精度で関連テストを抽出することができる。
【０１１９】
また、本実施形態では、対象プログラムの変更箇所に該当する関数と依存関係を有する他の関数との間で共起関係にある関数に対応付けられるテストについて、優先的に実施する。つまり、対象プログラムの変更箇所に対応するテストでエラーが生じた場合、対象プログラムのモジュール間の関係からテスト間の関係が定められた共起関係にあるテストを追加して特定し、実行する。このように、プログラムに含まれる関数に対応するテストについて、蓄積されたテスト間の相互関係を用いて実施対象のテストを特定でき、対象プログラムに対するテスト内容を特定することができる。これによって、対象プログラムに対するテストについて、例えば、プログラム修正などの変更に伴うリグレッションテストの実行範囲を抑制でき、またテストの処理時間を短縮することができる。
【０１２０】
また、本実施形態では、複数のテストの間の関係を示す情報を蓄積部３８に記憶することにより、テストを実行した結果を蓄積することができる。
【０１２１】
また、本実施形態では、所定の関数を含むモジュールに対してテストが対応されるので、プログラムのソースコードを関数単位で分類してテストを対応させることができる。
【０１２２】
また、本実施形態では、特定のテストを実行させたときに、所定の実行結果としてエラーが生じた場合に、依存関係にあるテストとの間の相互関係を蓄積している。従って、対象プログラムをテストするときに、関数で発生するエラーに対して迅速に対応することができる。
【０１２３】
また、本実施形態では、対象プログラムの変更箇所に該当する関数と依存関係を有する他の関数との間の相互関係を示す情報を、共起関係係数Ｋにより相互関係の度合いが示される共起関係を示す情報としている。共起関係係数Ｋは、特定のテストを実行させたときに、エラーが生じた場合、逐次更新される。従って、対象プログラムに対する変更箇所に依存する影響箇所に対して、エラーが生じる可能性が高い箇所の履歴を蓄積することができ、対象プログラムにおける変更箇所に対して影響することが予測されるテストを実行させることができる。
【０１２４】
また、本実施形態では、複数のテストを含むテストセットを、特定の関数に関連付けている。対象プログラム上の関数の依存関係において、関数に対応付けたテストセットに含まれるテスト間の相互関係である共起関係を示す情報を用いている。従って、特定の関数に複数のテストが関連付けられる場合であっても、テストセットに含まれるテスト間の共起関係により、エラーが生じる可能性が高いことが予測されるテストを実行させることができる。
【０１２５】
また、本実施形態では、共起関係係数Ｋにより相互関係の度合いが示される共起関係を示す情報を用いて関数に対応付けたテストセットに含まれるテストの実行順序を決定している。従って、エラーが生じる可能性が高いことが予測されるテストを順位づけて実行させることができる。
【０１２６】
また、本実施形態では、対象プログラムの変更箇所について、ソースコードの単純な変更ではなく、他と依存性を有する起点となる関数等の変更箇所を抽出する。従って、依存関係がある関数に対してテストを実行することができ、対象プログラム上の関数の依存関係を考慮してテストを実行することができる。
【０１２７】
また、本実施形態では、対象プログラムにおいて実行順序を示す依存関係を求め、依存関係に基づきテストの実行順序を設定し、対象プログラムに含まれる関数に対してテストを実行する。従って、対象プログラムの実行内容に合致してテストを実行することができる。
【０１２８】
（第２実施形態）
次に、第２実施形態を説明する。第２実施形態では、関係図作成部は、各相互関係についての関係の度合いを示す情報に、算出部により算出された相互関係の強さに応じた重み付けを行って、相互関係情報２４に格納する。
【０１２９】
図２１に、第２実施形態に係る対象プログラムのテスト選択装置の一例を示す。テスト選択装置９００は、実施部９０１、特定部９０２、算出部９０３、関係図作成部９０５、変更箇所特定部９０６、抽出部９０７、及び、制御部９０８を含む。また、テスト選択装置には、記憶部９２０が接続されている。
【０１３０】
記憶部９２０は、対象プログラム情報９２２、相互関係情報９２４、テスト情報９２６を記憶する。対象プログラム情報９２２、相互関係情報９２４、テスト情報９２６は、第１実施形態の図２に示す対象プログラム情報２２、相互関係情報２４、テスト情報２６と同様である。
【０１３１】
実施部９０１、特定部９０２、変更箇所特定部９０６、抽出部９０７、及び、制御部９０８は、それぞれ、第１実施形態の図２に示す実施部１１、特定部１２、変更箇所特定部１６、抽出部１７、及び制御部１８と同様である。
【０１３２】
算出部９０３は、特定部９０２により特定された相互関係を有するペアの相互関係の強さを算出する。相互関係の強さの算出は、依存関係のあるモジュールのそれぞれに対する各テストのすべてのペアの総数と、特定部９０２により特定された相互関係を有するペアの数と、に基づいて行われる。算出部９０３が算出する相互関係の強さは、具体的には例えば、後述するエントロピーの値である。そして算出部９０３は、算出した相互関係の強さに基づいて、特定部９０２により特定された相互関係についての関係の度合いを示す情報に加える重みを算出する。
【０１３３】
関係図作成部９０５は、特定部９０２により特定された相互関係を有するペアの情報と、算出部９０３により算出された重みに基づいて、相互関係情報２４を作成して記憶部２０に格納する。具体的には例えば、関係図作成部９０５は、特定部９０２により特定された相互関係を有するペアについて、各相互関係についての関係の度合いを示す情報に、算出部９０３により算出された重みを加えて、相互関係情報２４を更新する。
【０１３４】
第２実施形態に係るテスト選択装置をコンピュータで実現する一例は、第１実施形態において図３に示したものと同様である。ただし、テストプログラム５０は、実施部９０１、特定部９０２、算出部９０３、及び、関係図作成部９０５にそれぞれ対応する、実施プロセス、特定プロセス、算出プロセス、及び関係図作成プロセスを含む。また、テストプログラム５０は、変更箇所特定部９０６、抽出部９０７、及び、制御部９０８にそれぞれ対応する、変更箇所特定プロセス、抽出プロセス、及び、制御プロセスを含む。
【０１３５】
第２実施形態では、相互関係についての関係の度合いを示す情報に加える重みは、具体的には以下の式（２）により求められる。
重み＝エントロピー／テストで起きた共起関係の数  （式２）
【０１３６】
次に、第２実施形態に係るテスト選択装置における対象プログラムのテストの流れについて説明する。図２２Ａは、第２実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その１）を示す。図２２Ｂは、第２実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート（その２）を示す。図２２Ａ及び図２２Ｂに示すテストの流れは、開示の技術のテストプログラムの一例として実行されるテストプログラムによる処理である。
【０１３７】
図２２Ａ及び図２２Ｂにおいて、ステップ２０１〜ステップ２１３、及びステップ２１６の処理は、第１実施形態の図９Ａ及び図９Ｂに示すステップ１０１〜ステップ１１３、及びステップ１１６の処理と同様である。
【０１３８】
図２２Ｂのステップ２１４において、ＣＰＵ３２は、ステップ２１３で算出したエントロピーの値に基づいて、共起関係係数Ｋに加える重みを算出する。
【０１３９】
次にステップ１１５において、ＣＰＵ３２は、ステップ２０９とステップ２１２で実施したテストの実行により発生した共起関係の情報を、ステップ２１４で算出した重みで重み付けを行い、テスト関係図８４及び共起テーブル９０に反映する。すなわち、ＣＰＵ３２は、テスト関係図８４及び共起テーブル９０において、共起関係が発生したペアの共起関係係数Ｋの値にステップ２１４で算出した重みの値を加える。そして、ＣＰＵ３２は、処理をＳ２１０に遷移させる。
【０１４０】
図２３は、第２実施形態における、共起関係係数Ｋの更新を説明する図である。図２３の例は、図１９に示すテスト関係図８４の状態から、テスト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合に、その共起関係を示す情報が更新された後のテスト関係図８４の状態を示す。スト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合、ＣＰＵ３２はエントロピーの値を「-log( 2/24) = 1.08」と算出する（Ｓ２１３）。次にＣＰＵ３２は、重みの値を「1.08 / 2 = 0.54」と算出する（Ｓ２１４）。そして、テスト関係図８４において、ＣＰＵ３２は、テスト_c_1とテスト_b_4の共起関係係数Ｋを「０」から「０．５４」に更新し、テスト_c_3とテスト_b_4の共起関係係数Ｋを「２０」から「２０．５４」に更新する。
【０１４１】
第２実施形態では、共起関係が有する情報量に基づいて、共起関係係数に重み付けを行って相互関係情報９２４に記憶する。これにより、相互関係情報９２４はテストケースの共起関係の度合いをより高い精度で示すことが可能となる。従って、対象プログラムの変更後にフェイルしたテストの関連テストを抽出する際に、このような相互関係情報９２４を用いることで、より高い精度で関連テストを抽出することができる。また、抽出した関連テストを実行する順序の決定を、関連性の度合いに基づいて、精度良く行うことができる。
【０１４２】
（第３実施形態）
次に、第３実施形態を説明する。第１実施形態及び第２実施形態では、テスト選択装置１０をコンピュータ３０により実現したが、第３実施形態では、テスト選択装置１０、９００を複数のコンピュータにより実現した場合の一例である。第３実施形態は、第１実施形態と同様の構成のため、同一部分には同一符号を付して詳細な説明を省略する。
【０１４３】
図２４に、テスト選択装置１０を、複数のコンピュータ３０Ａ〜３０Ｄを含むコンピュータシステム１１で実現する一例を示す。複数のコンピュータ３０Ａ〜３０Ｄの各々は、コンピュータ３０と同様に、コンピュータ３０はＣＰＵ３２Ａ〜３２Ｄ、メモリ３４Ａ〜３４Ｄ、及び格納部３６Ａ〜３６Ｄを備えている。ＣＰＵ３２Ａ〜３２Ｄ、メモリ３４Ａ〜３４Ｄ、及び格納部３６Ａ〜３６Ｄは、バス４８Ａ〜３８Ｄを介して互いに接続されている。また、コンピュータ３０Ａ〜３０Ｄの各々は、ディスプレイ等の表示装置４０Ａ〜４０Ｄ、入力装置４２Ａ〜４２Ｄを備え、各々バス４８Ａ〜４８Ｄに接続されている。また、コンピュータ３０Ａ〜３０Ｄの各々は、ＩＯ装置４４Ａ〜４４Ｄがバス４８Ａ〜４８Ｄに接続されている。コンピュータ３０Ａ〜３０Ｄは、コンピュータネットワーク４９に接続するためのインタフェースである通信制御部４７Ａ〜４７Ｄを備えている。また、コンピュータネットワーク４９には、蓄積部３８を備えた蓄積装置３８Ｚが接続されている。
【０１４４】
図２４に示すコンピュータシステム１１では、図３に示すテストプログラムに含まれる各プロセスを、別々のコンピュータ３０Ａ〜３０Ｄに格納して実行させる。尚、コンピュータ３０Ａ〜３０Ｄに各々格納するプロセスは、図２４に示すものに限定されず、任意の組合せとしてもよい。また、本実施形態のコンピュータシステム１１では、コンピュータ３０Ａ〜３０Ｄの各々の間で、通信制御部４７Ａ〜４７Ｄおよびコンピュータネットワーク４９を介してデータやコマンドを授受する。
【０１４５】
以上説明したように、第３実施形態では、対象プログラムをテストする装置を機能別に分散させて、テストを実行できるので、第１実施形態の効果に加えて、対象プログラムをテストするときにおける処理負荷を負荷分散できるという効果を有する。また分散された各機能に対するコンピュータを移動可能に設定でき、装置を設置する場所についての自由度を向上させることもできる。
【０１４６】
なお、上記ではテスト選択装置１０をコンピュータ３０により実現する一例を説明した。しかし、これらの構成に限定されるものではなく、上記説明した要旨を逸脱しない範囲において、各種の改良及び変更を行っても良いのはもちろんである。
【０１４７】
また、上記ではプログラムが記憶部２０に予め記憶（インストール）されている態様を説明したが、これに限定されるものではない。例えば、開示の技術におけるプログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【０１４８】
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。
【符号の説明】
【０１４９】
１      データ選択装置
２      生成部
３      抽出部
４      決定部
１０    テスト選択装置
１１    実施部
１２    特定部
１３    算出部
１４    評価部
１５    関係図作成部
１６    変更箇所特定部
１７    抽出部
１８    制御部
２０    記憶部
２２    対象プログラム情報
２４    相互関係情報
２６    テスト情報
【図１】
0006409577.tif 000003
【図２】
0006409577.tif 000004
【図３】
0006409577.tif 000005
【図４】
0006409577.tif 000006
【図５】
0006409577.tif 000007
【図６】
0006409577.tif 000008
【図７】
0006409577.tif 000009
【図８】
0006409577.tif 000010
【図９Ａ】
0006409577.tif 000011
【図９Ｂ】
0006409577.tif 000012
【図１０】
0006409577.tif 000013
【図１１】
0006409577.tif 000014
【図１２】
0006409577.tif 000015
【図１３】
0006409577.tif 000016
【図１４】
0006409577.tif 000017
【図１５】
0006409577.tif 000018
【図１６】
0006409577.tif 000019
【図１７】
0006409577.tif 000020
【図１８】
0006409577.tif 000021
【図１９】
0006409577.tif 000022
【図２０】
0006409577.tif 000023
【図２１】
0006409577.tif 000024
【図２２Ａ】
0006409577.tif 000025
【図２２Ｂ】
0006409577.tif 000026
【図２３】
0006409577.tif 000027
【図２４】
0006409577.tif 000028