以下、図面を参照して開示の技術の実施形態の一例を詳細に説明する。実施形態は、複数のモジュールを含む対象プログラムに対してテストを実行する場合の一例として、回帰テスト(リグレッションテスト)を実行する場合に、開示の技術を適用したものである。
図1は、実施形態に係るテスト選択装置の構成の一例を示す。図1において、テスト選択装置1は、生成部2、抽出部3、及び決定部4を含む。
生成部2は、複数の第1テストの実行結果と、複数の第2テストの実行結果とを用いて、複数の第1テストと複数の第2テストとの間のペア毎の関連の有無を示す情報を含む関連性情報と、複数のペアのうち関連を有するペアの数を示す関連数情報とを生成する。第1テストは、プログラムを構成する複数のモジュールに含まれる特定のモジュールに対して実行されたテストである。第2テストは、複数のモジュールと同一のモジュールを用いて行われるテストであって特定のモジュールと依存関係を有するモジュールに対して実行されたテストである。
抽出部3は、複数の第1テストに含まれる特定のテストが指定された場合、関連性情報と関連数情報とに基づいて、特定のテストに関連する関連テストを、複数の第2テストから抽出する。
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることができる。すなわち、指定された特定のテストが、プログラムの変更後にフェイルしたテストの場合、そのフェイルしたテストに関連して優先的に実行すべきテストを精度よく抽出することができる。また、粒度が異なる変更が行われた場合であっても、共起関係の数に応じて関連テストを抽出することができる。
また、関連性情報は、ペア毎の関連の有無を示す情報の情報量を示す関連度情報を含む。
また、生成部2は、関連数情報と、第1テストと第2テストのペアの総数と、に基づいて、関連度情報を更新する。
また、抽出部3は、複数の第1テストに含まれる特定のテストが指定された場合、関連性情報と関連数情報とに基づいて、特定のテストに関連する関連テストを、特定のテストと関連テストのペアの関連度情報とともに、複数の第2テストから抽出する。
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストとともに抽出する関連性を示す情報の精度を向上させることができる。
決定部4は、複数の第1テストに含まれる特定のテストの実行を指示された場合、特定のテストと関連テストのペアの関連度情報に基づいて、抽出した関連テストの実行順序を決定する。
このように構成することで、指定されたテストに関連するテストの実行順序を、共起関係の数に応じた関連性に基づいて決定することができる。すなわち、指定されたテストに関連するテストの実行順序を、より精度の高い関連性を示す情報に基づいて決定することができる。
また、生成部2は、特定のモジュールが変更された場合、変更後の特定のモジュールに対する複数の第1テストの実行結果と、変更後の特定のモジュールと依存関係を有するモジュールに対する複数の第2テストのうち、複数の第1テストのそれぞれに関連する抽出された関連テストの実行結果と、に基づいて、変更後における関連性情報と関連数情報とを生成する。
このように構成することで、対象プログラムの複数のテストのうち、指定されたテストに関連するテストの抽出精度を向上させることができる。
また、更新部は、変更後における関連数情報と、第1テストと第2テストのペアの総数と、に基づいて、関連度情報を更新する。
関連性情報は、第1テストと第2テストのペアの実行結果がともにエラーを示す場合に、そのペアが関連を有することを示す。
(第1実施形態)
図2は、第1実施形態に係るテスト選択装置の構成の一例を示すブロック図である。テスト選択装置10は、実施部11、特定部12、算出部13、評価部14、関係図作成部15、変更箇所特定部16、抽出部17、及び、制御部18を含む。また、テスト選択装置10には、記憶部20が接続されている。尚、関係図作成部15は生成部2の一例である。抽出部17は抽出部3の一例である。制御部18は決定部4の一例である。
対象プログラムは、複数のモジュールを含み、複数のモジュールの各々は、1以上の所定関数を含むことができる。
テストは、対象プログラムに含まれる複数のモジュールの各々の機能及び動作を確認するための処理である。各テストは、そのテストが機能及び動作を確認する対象のモジュールに関連付けられる。
記憶部20は、対象プログラム情報22、相互関係情報24、テスト情報26を記憶する。
対象プログラム情報22は、対象プログラムを示す情報である。対象プログラム情報22の一例として対象プログラムのソースコードがある。対象プログラム情報22は、1つの対象プログラムの変更履歴を示す情報を含めることができる。また、対象プログラム情報22は、1つの対象プログラムについて、変更を施した後の対象プログラム及び変更を施す前の対象プログラムの各々を示す情報を含めることができる。また、対象プログラム情報22は、対象プログラムに含まれる複数のモジュール(関数)のモジュール(関数)間の依存関係を示す情報を含んでもよい。
相互関係情報24は、対象プログラムに対して実行される複数のテスト間の相互関係を示す情報である。相互関係情報24の一例として、モジュールの各々に対するテストの間の相互関係を示す情報がある。テスト間の相互関係の一例には共起関係がある。共起関係は、同一の対象プログラムに対してそれぞれテストを実施したときに、一方のテストが所定の実行結果に至った場合に、他方のテストも所定の実行結果に至るようなテスト間の関係である。尚、実施形態では、同一の名称のプログラムであっても、そのプログラムが変更された場合、変更の前後では、異なるプログラムとして区別する。相互関係情報24は、相互関係を有するテストのペアを識別する情報、及び、各相互関係についての関係の度合いを示す情報を含むことができる。相互関連情報24は、関連性情報及び関連数情報の一例である。相互関連情報24が含む各相互関係についての関係の度合いを示す情報は、関連度情報の一例である。
テスト情報26は、対象プログラムに対して実行される複数のテストの各々を示す情報である。テスト情報26の一例として各テストを実行するために用いるプログラムのソースコード及びテスト実行時のパラメータを示す情報がある。
実施部11は、テスト情報26を用いて、対象プログラムに対する各テストを実施する。具体的には例えば、実施部11は、対象プログラム情報22を用いて、依存関係のあるモジュールのそれぞれに対するテストを実行する。
特定部12は、依存関係のあるモジュールのそれぞれに対する各テストの実行結果に基づいて、相互関係を有するテストのペアを特定する。この特定において用いる各テストの実行結果は、同一の対象プログラムの各モジュールに対して実行されたテストの結果である。
算出部13は、特定部12により特定された相互関係を有するペアの相互関係の強さを算出する。相互関係の強さの算出は、依存関係のあるモジュールのそれぞれに対する各テストのすべてのペアの総数と、特定部12により特定された相互関係を有するペアの数と、に基づいて行われる。算出部13が算出する相互関係の強さは、具体的には例えば、後述するエントロピーの値である。
評価部14は、算出部13により算出された相互関係の強さが所定の閾値以上か否かを判定する。この評価で用いられる所定の閾値は、予めテスト選択装置10の所定の記憶領域、または記憶部20に格納されている。
関係図作成部15は、特定部12により特定された相互関係を有するペアの情報と、評価部14による判定の結果に基づいて、相互関係情報24を作成して記憶部20に格納する。すなわち、関係図作成部15は、評価部14により相互関係の強さが所定の閾値以上と判定された場合、特定部12により特定された相互関係を有するペアを識別する情報、及び各相互関係についての関係の度合いを示す情報を、相互関係情報に格納する。尚、相互関係情報24が既に記憶部20に存在する場合には、関係図作成部15は、特定部12により特定された相互関係を有するペアの情報と、評価部14による判定の結果に基づいて、相互関係情報24を更新する。各相互関係についての関係の度合いを示す情報は、具体的には例えば、後述する共起関係係数Kである。
変更箇所特定部16は、対象プログラム情報22に基づいて、対象プログラムにおける変更箇所を特定する。例えば、変更箇所の特定は、対象プログラム情報22に含まれる変更履歴を示す情報等に基づいて行われる。
抽出部17は、対象プログラムに対するテストを指定されると、相互関係情報24に基づいて、指定されたテストと相互関係を有するテスト(以下、関連テストと記す)を、各相互関係についての関係の度合いを示す情報とともに、抽出する。
制御部18は、変更箇所特定部16により特定された変更箇所に対応するモジュールに関係するテストを実施部11に実行させるように制御する。具体的には制御部18は、先ず、変更箇所に対応するモジュールに対するテストを実施部11に実行させる。そして制御部18は、変更箇所に対応するモジュールに対するテストの実行の結果、所定の結果に至ったテストを特定する。この特定したテストを、次に制御部18は、抽出部17に対して指定して、特定したテストの関連テストを抽出させる。そして制御部18は抽出部17により抽出されたテストを、各相互関係の度合いに応じた順番で、実施部11に実行させる。これによって、対象プログラムに対するテストについて、例えば、プログラム修正などの変更に伴うリグレッションテストの実行範囲を抑制でき、またテストの処理時間を短縮することができる。
図3に、コンピュータで実現するテスト選択装置の一例を示すブロック図を示す。コンピュータ30はCPU32、メモリ34、不揮発性の格納部36及び蓄積部38を備えている。CPU32、メモリ34、格納部36及び蓄積部38は、バス48を介して互いに接続されている。また、コンピュータ30は、ディスプレイ等の表示装置40、キーボード及びマウス等の入力装置42を備え、表示装置40及び入力装置42はバス48に接続されている。また、コンピュータ30は、記録媒体46が挿入され、挿入された記録媒体46に対して読み書きするための装置(IO装置)44がバス48に接続されている。なお、格納部36及び蓄積部38はHDD(Hard Disk Drive)やフラッシュメモリ等によって実現できる。また、コンピュータ30はコンピュータネットワーク等に接続するためのインタフェースを備えることができる。
格納部36には、OS(Operating System)60及びコンピュータ30をテスト選択装置10として機能させるためのテストプログラム50が記憶されている。テストプログラム50は、実施プロセス51、特定プロセス52、算出プロセス53、評価プロセス54、関係図作成プロセス55、変更箇所特定プロセス56、抽出プロセス57、及び、制御プロセス58を含んでいる。CPU32がテストプログラム50を格納部36から読み出してメモリ34に展開し、テストプログラム50が有する各プロセスを実行することで、コンピュータ30は図2に示すテスト選択装置10として動作する。また、CPU32が実施プロセス51を実行することで、コンピュータ30は図2に示す実施部11として動作し、CPU32が特定プロセス52を実行することで、コンピュータ30は図2に示す特定部12として動作する。また、CPU32が算出プロセス53を実行することで、コンピュータ30は図2に示す算出部13として動作し、CPU32が評価プロセス54を実行することで、コンピュータ30は図2に示す評価部14として動作する。また、CPU32が関係図作成プロセス55を実行することで、コンピュータ30は図2に示す関係図作成部15として動作し、CPU32が変更箇所特定プロセス56を実行することで、コンピュータ30は図2に示す変更箇所特定部16として動作する。また、CPU32が抽出プロセス57を実行することで、コンピュータ30は図2に示す抽出部17として動作し、CPU32が制御プロセス58を実行することで、コンピュータ30は図2に示す制御部18として動作する。
蓄積部38には、ソース情報62、依存図情報64,関係図情報66,テーブル情報68,及びテスト情報70が蓄積されている。ソース情報62は、対象プログラムのソースコードを示す。依存図情報64は、対象プログラムのソースコードにおける関数を含むモジュールの依存関係を示す。関係図情報66は、対象プログラムのソースコードにおける関数を含むモジュールに関係づけられる個別のテストの間の相互関係を示す。テーブル情報68は、各種テーブルを示す。テスト情報70は、複数の個別のテストの各々のソースコード等の情報を示す。蓄積部38は、図2に示す記憶部20に対応する。ソース情報62は、図2に示す対象プログラム情報22に対応する。依存図情報64、関係図情報66及びテーブル情報68は、図2に示す相互関係情報24に対応する。テスト情報70は、図2に示すテスト情報26に対応する。
なお、対象プログラムのソースコードにおける関数の依存関係を表す技術の一例として、プログラム依存グラフがある。
また、テスト選択装置10はコンピュータネットワークに接続することを可能としてもよい。つまり、テスト選択装置10はコンピュータネットワークに接続することまたは非接続にすることに限定されない。開示の技術におけるテスト選択装置10の一例のように、コンピュータ30のみで実現してもよく、複数のコンピュータによりテスト選択装置10を実現してもよい。
次に、本実施形態の作用を説明する。
テストによりそれまで動作が保証されていた対象プログラムが変更された場合、変更による影響を確認するために、優先して実施すべきテストを選択することは、効率的なテストの実行に寄与する。なお、対象プログラムにおける変更内容の一例として、定数の修正等の単純なソースコードの差異を示す修正箇所ではなく、対象プログラムにおける関数を含むモジュールの関係に起因して他の関数を含むモジュールに影響を及ぼす変更箇所がある。
実施形態では、変更内容に応じて、優先して実施すべきテストが選択される。対象プログラムに対するテストのうち、加えられた変更とは無関係な箇所に対するテストについては、その結果は変更の前後で変わらない。よって、このような変更とは無関係な箇所に対するテストを、変更後に再度実施することは非効率である。従って、実施形態では、対象プログラムの変更後に優先して実施すべきテストの選択において、変更が加えられた箇所に対するテストと、その変更により影響が及ぶ範囲のテストが選択される。
具体的には、実施形態に係るテスト選択装置は、先ず、変更が加えられた箇所に対するテストを実施する。そしてテスト選択装置は、実施したテストのうち、フェイルしたテストを特定し、特定したテストと相互関係を有するテストを、変更により影響が及ぶ範囲のテストとして選択して実行する。相互関係は、具体的には共起関係である。
共起関係は、上述したが、同一の対象プログラムに対してそれぞれテストを実施したときに、一方のテストが所定の実行結果に至った場合に、他方のテストも所定の実行結果に至るようなテスト間の関係である。よって、変更が加えられた箇所に対するテストのうちでフェイルしたテストと共起関係を有するテストは、変更後に実施された場合、同様にフェイルする可能性が高い。従って、このような共起関係を有するテストは、その変更により影響が及ぶ範囲のテストである可能性が高いと考えられる。
実施形態では、過去に実施した対象プログラムに対するテストの結果から、テスト間の相互関係(共起関係)を示す相互関係情報を相互関係情報として記録しておく。そしてこの相互関係情報を用いて、変更が加えられた箇所に対するテストのうちフェイルしたテストと相互関係を有するテストを抽出する。
実施形態では、さらに、テスト間の各共起関係を、その共起関係が表れたときの情報量に応じて区別する。この理由を、図4を参照して説明する。
図4(A)は、対象プログラムに対して1度目の修正が行われた後に実行されたテスト結果と、その結果から得られた相互関係(共起関係)を示す相互関係情報の例である。図4(B)は、対象プログラムに対して2度目の修正が行われた後に実行されたテスト結果と、その結果から得られた相互関係(共起関係)を示す相互関係情報の例である。図4においては、1度目の修正は修正量が少なく、2度目の修正は修正量が多い場合の例が示される。
図4(A)及び図4(B)のテスト結果(以下の、図5〜図8についても同様)は、修正された関数に対する4つのテスト(test_m1〜test_m4)の実行結果と、修正された関数の上位関数に対する4つのテスト(test_u1〜test_u4)の実行結果とを示している。図4の実行結果の黒塗りで示されるテストは、実行の結果フェイルしたことを示し、白塗りで示されるテストは、実行の結果が正常であったことを示す。
図4(A)のテスト結果では、test_m1とtest_u1がフェイルしている。この場合、共起関係は、(test_m1、test_u1)の1つのペアの間で発生している。よって、図4(A)の相互関係情報に、(test_m1、test_u1)で共起関係が発生したことを示す情報が格納される。これは、図4(A)の相互関係情報において、(test_m1、test_u1)の間に線(以下、共起線という)が引かれていることにより示されている。尚、共起線の横の「1」は、過去に(test_m1、test_u1)の間に共起関係が発生した回数を示している。
一方、図4(B)では、test_m1、test_m2とtest_u2、test_u3がフェイルしている。この場合、共起関係は、(test_m1、test_u2)、(test_m1、test_u3)、(test_m2、test_u2)、(test_m2、test_u3)の4つのペアの間で発生している。よって、図4(B)の相互関係情報に、(test_m1、test_u2)、(test_m2、test_u2)、(test_m2、test_u2)、(test_m2、test_u3)で共起関係が発生したことを示す情報が格納される。ここで、図4(B)の相互関係情報は、一度目の変更後に実施されたテストにおいて発生した共起関係の情報、ずなわち、図4(A)の相互関係情報を含む形で更新されている。
ここで、1回目のテストにおいて発生した共起関係と、2回目のテストにおいて発生した共起関係とは、その共起関係が有する情報量が異なる。すなわち、1回目のテストにおいては、共起関係は1つだけ発生しているのに対し、2回目のテストにおいては、共起関係は4つ発生している。このような1回目に発生した共起関係は、2回目に発生した共起関係よりもより強い関係を有していると考えられる。
ある修正に対して発生する共起関係は、起こりうる共起関係の数に対して実際に発生した共起関係の割合が小さいほど、その共起関係の情報量が大きくなり、関係が強いと考えられる。すなわち、図4(A)で発生した1つの共起関係は、図4(B)で発生した4つの共起関係のそれぞれよりもより情報量が大きく、関係が強いと考えられる。ここで、「起こりうる共起関係の数」とは、2つのテストセット((test_m1〜test_m4)と(test_u1〜test_u4))間のペアの総数を示す。図4(A)、図4(B)の場合はともに、起こりうる共起関係の数は「16」となる。なお、以下の説明では、同一の関数に対応付けられる1以上のテストをテストセットという。
しかしながら、すべての共起関係を、各共起関係が有する情報量を区別せず相互関係情報に格納する場合、どの共起関係がより強い関係があるのかを判別することができない。
実施形態では、共起関係それぞれを、その共起関係の情報量に応じて区別して相互関係情報に格納する。共起関係の情報量とは、共起関係が起きた際、それがどれほど起こりにくいかを表す尺度である。具体的には実施形態では、以下の式(1)により求められる値(以下、エントロピーと記す)を用いて、各共起関係の関係の強さを表す。
エントロピー=-log(テストで起きた共起関係の数/起こりうる共起関係の数)
(式1)
ただし、共起関係が発生しない場合には、エントロピーの値は「0」となる。
尚、図4に示すように、ソースコードの修正量と、共起関係が発生する数には相関関係がある可能性がある。ソースコードに対する修正・変更内容が小さいほど、各テストセットでフェイルするテストケースが少なくなり、共起してフェイルする箇所が局所的に現れる。一方、ソースコードに対する修正・変更内容が大きいほど、各テストセットでフェイルするテストケースが増え、共起してフェイルする箇所は広範囲に現れる。よって、ソースコードの修正量が大きい場合は、予測への貢献が小さい共起関係が得られる場合がありえるため、情報量に応じた相互関係情報への反映が重要となる。
以下、図5〜図8を参照し、様々な修正が行われた際の、修正後に実行されたテスト結果の例と、そのときのエントロピーの値について説明する。
図5は、共起関係が発生しない場合のテスト結果の一例を示す。図5(A)では、test_m1〜test_m4、test_u1〜test_u4のすべてのテストが正常終了している。図5(B)では、test_m2がフェイルし、その他のすべてのテストが正常終了している。図5(C)では、test_u2、test_u3がフェイルし、その他のすべてのテストが正常終了している。図5に示すように、依存関係を有する2つのテストセットのうち、いずれか一方のテストセットの1以上のテストがフェイルしても、他方のテストセットのテストが1つもフェイルしない場合には、共起関係は発生しない。上述したように、共起関係が発生しない場合には、エントロピーの値は「0」となる。
図6は、共起関係の関係性が最も弱い場合のテスト結果の一例を示す。図6では、test_m1〜test_m4、test_u1〜test_u4のすべてのテストがフェイルしている。この場合、全てのペアで共起関係が発生し、エントロピーの値は、「-log (16/16) = 0」となる。
図7は、共起関係の関係性が最も強い場合のテスト結果の一例を示す。図7では、test_m3とtest_u2の2つがフェイルしている。この場合(test_m3、test_u2)のペアで共起関係が発生し、エントロピーの値は、「-log (1/16) ≒ 1.20」となる。
図8は、共起関係の関係性が中程度である場合のテスト結果の一例を示す。図8(A)では、(test_m1、test_u2)、(test_m2、test_u2)、(test_m3、test_u2)、(test_m4、test_u2)の4つのペアで共起関係が発生している。図8(B)では、(test_m2、test_u1)、(test_m2、test_u2)、(test_m2、test_u3)、(test_m2、test_u4)の4つのペアで共起関係が発生している。図8(C)では、(test_m2、test_u2)、(test_m2、test_u3)、(test_m3、test_u2)、(test_m3、test_u3)の4つのペアで共起関係が発生している。図8の例はいずれもエントロピーの値は、「-log (4/16) ≒ 0.6」となる。
以上、テストの実行結果の種々のケースにおける、エントロピーの値について説明した。このように、実施形態では、共起関係が表れたときの情報量に応じて、各共起関係を区別することで、ペア同士の関係性の精度を向上させることができる。
次に、第1実施形態に係るテスト選択装置におけるテスト処理の流れを説明する。図9Aは、第1実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート(その1)を示す。図9Bは、第1実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート(その2)を示す。
図9A及び図9Bに示すテストの流れは、開示の技術のテストプログラムの一例として実行されるテストプログラム50による処理である。なお、以下の説明では、入力1を示す情報を、対象プログラムの変更前のソースコードを示す情報として説明する。また、入力2を示す情報を、対象プログラムの変更前のソースコードに対応するテスト関係図を示す情報として説明する。また、入力3を示す情報を、対象プログラムの変更後のソースコードを示す情報、及び対象プログラムの変更後のソースコードに対応するテストを示す情報として説明する。
まず、CPU32は、テストプログラム50に含まれる各プロセスの実行を開始する。具体的には、CPU32は、ステップ101において、蓄積部38からソース情報62を取得することにより、対象プログラムを読み取る。次に、CPU32は、ステップ102において、入力3を示す情報を用いて、テスト関係図の作成処理を実行する。
ここで、CPU32がステップ101で実行するテスト関係図の作成処理を説明する。テスト関係図の作成処理では、先ず、対象プログラムのソース情報62が解析されて対象プログラムのプログラム依存グラフが作成される。そして、作成された対象プログラムのプログラム依存グラフに対して、テストの実行結果に基づいて各テストが関係づけられるテスト関係図が作成される。
図10に、対象プログラムのソース情報62の一例を示し、図11に、ソース情報62におけるモジュールの関係を示す情報の一例を示す。また、図12に、対象プログラムのプログラム依存グラフ74の一例を示す。なお、以下の説明では、関数がモジュールに対応される一例を説明する。対象プログラムのソース情報62は、関数単位のソースコード62A,62B,62C,62D,62Eに分類され、分類されたソースコード62A〜62Eの各々がコマンド等の実行内容により関係している。図10では、ソースコード62Aが関数a,ソースコード62Bが関数b,ソースコード62Cが関数c,ソースコード62Dが関数d,及びソースコード62Eが関数eに対応される。関数単位のソースコード62A〜62Eの各々は、自ソースコードから、自己以外のソースコード及びデバイスの少なくとも一つに対して依存関係を有する起点と考えられる。依存関係の一例として、制御依存関係またはデータ依存関係がある。また、デバイスの一例として、データを格納したストレージがある。
ソース情報62の解析により、CPU32は図11に示すように、依存関係の依存元、依存関係の依存先、及び依存関係の内容の各々を示す情報を得ることができる。図11には、関数a〜eの依存関係の依存元(「From」列)、依存関係の依存先(「To」列)、及び依存関係の内容(「内容」列)の各々を示す情報のテーブル72が示されている。テーブル72を示す情報は、対象プログラムのソース情報62に対応付けられて、プログラム依存グラフ74を示す依存図情報64として蓄積部38(図3)に記憶される。テーブル72を示す情報は、テーブル情報68に含めて蓄積部38(図3)に記憶してもよい。
CPU32は、図11に示すテーブル72を用いて、対象プログラムのプログラム依存グラフ74を作成する。図12は、図11に示すテーブル72により作成される対象プログラムのプログラム依存グラフ74を示す。図11における関数a〜eが、図12では節点76として表されている。また、図12に示す対象プログラムのプログラム依存グラフ74では、節点またはデバイスの間を有向線78で接続した場合が示されている。なお、有向線78は、節点76である関数の内容が変更されたときに影響を及ぼす関係を関数間または関数とデバイスの間の関連づける接続関係として表すものでもある。
次に、対象プログラムのプログラム依存グラフ74において節点76となる関数a〜eの各々に対して、テストが関係づけられる処理を説明する。テスト情報70に含まれる1または複数のテストはそれぞれ、適用対象の対象プログラムが予め定められている。ただし、1または複数のテストは、適用対象の対象プログラムの全ての関数に適用されるものではなく、各テストが対象プログラムのどの関数に対して実行されるのかについてはCPU32が以下の処理により検出する。すなわちCPU32は、対象プログラムに対して各テストを実行して、各テストで検証される関数を検出することにより、関数a〜eの各々に対してテストを関係づける。
具体的にはCPU32は、まず、対象プログラムに対するテスト用の各テストを実行し、対象プログラムにおいて通過した関数を検出する。そしてCPU32は、実行したテストと、そのテストで通過した関数の情報とを対応付けて、関数通過テーブル80に格納する。
図13は、関数通過テーブル80の一例を示す。図13において、関数通過テーブル80では、テストの実行により通過された関数が丸記号で示されている。また、図13の例は図10の例に対応しており、関数a〜e、及びstorageの順位で上位から下位に至る一例である。
テストの実行において通過された関数は、実行されたテストに関連しており、通過された関数のうちプログラム依存グラフ74における最上位の関数が起点の関数であると考えられる。次にCPU32は、このように検出した起点の関数を、実行したテストに関連付ける。
例えば、図13の関数通過テーブル80では、テストa_1〜a_6については、そのテストの実行により通過した関数のうちで最上位の関数は関数aである。また、テストb_1〜b_6、c_1〜c_6、d_1〜d_2、e_1〜e_2については、それぞれ、そのテストの実行により通過した関数のうちで最上位の関数は、関数b、c、d、eである。従って、CPU32は、テストa_1〜a_6、b_1〜b_6、c_1〜c_6、d_1〜d_2、e_1〜e_2を、それぞれ、関数a、b、c、d、eに関連付ける。
次にCPU32は、テストと関数を関連付けた結果を関数テストテーブル82に格納する。図14は、対象プログラムの各関数と、各関数に関連付けられるテストを示す。図14において、関数テストテーブル82には、関数aにテストa_1〜a_6が関連付けられていることを示す情報が記憶されている。また、関数テストテーブル82には、関数b、c、d、eに、それぞれ、テストb_1〜b_6、c_1〜c_6、d_1〜d_2、e_1〜e_2が関連付けられていることを示す情報が記憶されている。図14に示す関数テストテーブル82を示す情報は、テーブル情報68に含めて蓄積部38(図3)に記憶される。
尚、関数テストテーブル82は予め蓄積部38に記憶されていてもよい。関数テストテーブル82が既に蓄積部38に記憶されている場合には、関数通過テーブル80及び関数テストテーブル82を作成する処理は省略可能である。
次に、CPU32は、プログラム依存グラフ74(図12)と関数テストテーブル82(図14)とを用いて、テスト関係図84を作成する。作成されるテスト関係図84は、対象プログラムのプログラム依存グラフ74における節点76に、各関数に対応付けられる1以上のテストであるテストセット86を関連付けたものである。図15に、テスト関係図84の一例を示す。なお、以下の説明では、関数に対応付けられる1以上のテストをテストセット86という。テストセット86を関数ごとに区別する場合、関数を示す記号を付す。図15に示すテスト関係図84では、関数aに関連づけられるテストa_1〜a_6をテストセット86a、関数bに関連づけられるテストb_1〜b_6をテストセット86bと表記している。同様に、テストc_1〜c_4をテストセット86c、テストd_1、d_2をテストセット86d、テストe_1、e_2をテストセット86eと表記している。
また、テスト関係図84は、共起関係も示すことができる。共起関係は、同一の対象プログラムに対してテストを実行したときに、エラーが発生した複数のテストの関係である。すなわち、共起関係は、同一の対象プログラムに対してテストセット86に含まれるテストを、節点に対して順次実施した結果、エラーが発生した複数のテストについて、自節点のテストと他節点のテストの間の関係をいう。本実施形態では、エラーが発生した特定節点のテストと、特定節点と依存関係が上位の節点のテストとの相互関係を共起関係として説明する。なお、共起関係は、共起関係係数Kにより共起関係の度合いが示される。共起関係係数Kの一例として、共起関係が生じた累積回数、及び確率がある。
図15に示すテスト関係図84では、テストa_2とテストb_1に共起関係が生じた場合の例を示しており、この共起関係は、テストa_2とテストb_1が共起線88により接続されることにより示されている。また、図15に示すテスト関係図84では、共起線88付近に共起関係係数Kが「(1)」で表記されている。
CPU32はテスト関係図84を作成するとともに、プログラム依存グラフ74(図12)と関数テストテーブル82(図14)とを用いて、共起テーブルを作成する。共起テーブルは、対象プログラムに対してテストを実施した結果により生じた共起関係を示す。
図16は、共起テーブル90の一例を示す。図16において、共起テーブル90は、共起されたテストa_2とテストb_1の合致セルに、共起関係係数Kが格納されている。これは、テストa_2とテストb_1の間に共起関係が生じており、その共起関係の関係係数の値がKであることを示している。図16に示す共起テーブル90を示す情報は、テーブル情報68に含めて蓄積部38(図3)に記憶される。なお、テスト関係図84における共起関係すなわち共起線88及び共起関係係数Kは、テストが実施される毎に更新される。
尚、ステップ101においては、テスト関係図84及び共起テーブル90において共起関係係数Kは示されなくてもよい。その場合、ステップ101において作成されたテスト関係図84及び共起テーブル90の共起関係係数Kは、後ほど説明するステップ105及びステップ115において初めて格納されてもよい。
次に、CPU32は、ステップ102において、入力1を示す情報が有るか否かを判断する。つまり、CPU32は、蓄積部38に蓄積されているソース情報62に、対象プログラムの変更前のソースコードを示すソース情報62が存在するか否かを判断する。CPU32は、ステップ102で否定判断すると図9Bのステップ109へ処理を移行し、ステップ102で肯定判断すると、ステップ103へ処理を移行する。ステップ103では、CPU32は、入力2を示す情報が有るか否かを判断する。つまり、CPU32は、蓄積部38に蓄積されている関係図情報66に、対象プログラムの変更前のソースコードに対応するテスト関係図を示す関係図情報66が存在するか否かを判断する。
CPU32は、ステップ103で否定判断すると、ステップ104において、入力1を示す情報、つまり対象プログラムの変更前のソースコードを用いてプログラム依存グラフ74を作成し、ステップ106へ処理を移行する。一方、CPU32は、ステップ103で肯定判断すると、ステップ105において、入力2を示す対象プログラムの変更前のソースコードに対応するテスト関係図を用いて、ステップ101で作成したテスト関係図84に関係係数(共起関係係数K。詳細は後述。)を反映し、ステップ106へ処理を移行する。
次に、CPU32は、ステップ106において、対象プログラムの変更箇所を特定した後に変更箇所リスト92(図17)を作成する。
変更箇所を特定する処理では、対象プログラムの単なる修正箇所ではなく、変更後のプログラム依存グラフ74における節点76であるモジュールの一例である関数が特定される。つまり、CPU32は、変更前後の対象プログラムの各ソース情報62から修正箇所を抽出し、抽出した修正箇所に対応するプログラム依存グラフ74における節点76である関数を特定する。CPU32は、特定した変更箇所の関数を示す情報を変更箇所リスト92として作成する。作成された変更箇所リスト92を示す情報は、テーブル情報68に含めて蓄積部38(図3)に記憶される。なお、変更箇所リスト92は、メモリ34に一時的に記憶してもよい。
また、変更箇所を特定する処理では、特定された変更箇所により影響を受ける箇所も特定される。つまり、CPU32は、特定した変更箇所である関数の修正により影響を受ける箇所を特定する。具体的には、特定した変更箇所である関数の節点76から、変更後の対象プログラムのプログラム依存グラフ74における有向線78の依存元の関数を抽出することを繰り返す。例えば、関数cに修正が施された場合、プログラム依存グラフ74における有向線78の依存元の関数が、関数b及び関数aの順に抽出される。CPU32は、特定した変更箇所の関数、及び抽出した関数を示す情報を影響箇所リスト94として、変更箇所毎に作成する。作成された影響箇所リスト94を示す情報は、テーブル情報68に含めて蓄積部38(図3)に記憶される。なお、影響箇所リスト94は、メモリ34に一時的に記憶してもよい。
図17に、変更箇所リスト92の一例を示し、図18に、影響箇所リスト94の一例を示す。図17に示す変更箇所リスト92は、特定された変更箇所の関数が関数cと関数eである場合を示している。図18に示す影響箇所リスト94は、特定された変更箇所の関数が関数cであり、関数cの変更により影響を受ける関数として関数b及び関数aが抽出された場合を示している。
次に、CPU32は、図9Bのステップ107において、ステップ106で作成した変更箇所リスト92から1つの変更箇所を選択する。なお、CPU32は、ステップ106で、変更箇所リスト92における順位に従って選択する。また、CPU32は、ステップ107において、選択した変更箇所の節点である関数に関連付けられているテストセット86を、関数テストテーブル82に基づいて取得する。次に、CPU32は、ステップ108において、ステップ107で選択したテストセット86が既に実施済みのテストセット86であるか否かを判断する。ステップ107で選択したテストセット86が既に実施済みのテストセット86であるとき、CPU32はステップ108で肯定判断し、ステップ107へ戻る。なお、ステップ107で選択したテストセット86が変更箇所リスト92の最後の変更箇所であるときに、CPU32がステップ108で肯定判断した場合、本処理ルーチンを終了することができる。
一方、ステップ107で選択したテストセット86が未実施のテストセット86であるとき、CPU32は、ステップ108で否定判断し、ステップ109へ処理を移行する。
ステップ109では、CPU32は、ステップ107で取得したテストセット86を実行する。
次にステップ110で、CPU32は、ステップ109でテストセット86を実施した関数の上位にテストセット86が関連付けられた関数が有るか否かを判断する。つまり、CPU32は、プログラム依存グラフ74でテストセット86を実施した関数に対応する節点について、上位階層に節点、つまり依存関係を有する関数が有るか否かを判断する。具体的には、CPU32は、ステップ107で選択された変更箇所に対応する影響箇所リスト94を参照し、現在処理中の節点の上位に節点(関数)が有るか否かを判断する。ステップ109で実施したテストセット86が最上位の場合、CPU32は、ステップ110で否定判断し、ステップ116において変更箇所リスト92にテストセット86を実施していない残存する変更箇所があるか否かを判断する。変更箇所リスト92に登録された変更箇所の全てについてテストセット86を実施した場合には、CPU32はステップ116で否定判断し、本処理ルーチンを終了する。変更箇所リスト92にテストセット86を実施していない変更箇所が存在する場合には、CPU32は、ステップ116で肯定判断し、ステップ107の処理に戻り、残存する変更箇所に対する処理を実行する。
ステップ109で実施したテストセット86の上位に関数がある場合、CPU32は、ステップ110で肯定判断する。
そしてCPU32は、ステップ111において、ステップ109においてエラーが発生したテストと共起関係にあるテストを、テスト関係図84(共起テーブル90)に基づいて、追加して実行するテストとして抽出する。そしてステップ111で、CPU32は、テスト関係図84(共起テーブル90)に基づいて、抽出したテスト、つまり上位のテストセット86に含まれるテストの実行順序を決定する。
ステップ111では、テストセット86の優先度に基づいて実行順序が決定される。詳細には、CPU32はまず、エラーが発生したテストと共起関係にある上位関数のテストセット86に含まれるテストの優先度TPを次の数式により示される優先度判定式により求める。優先度判定式は、各テストセット86の優先度TP(TestPriority)を下位のテストセット86の共起関係の重み(relation_value)の和から求めるものである。なお、共起関係の重み(reration_value)は、共起関係係数Kである。また、テストは(Test)、下位のテストセット86は(LowerTestCase)として表記している。なお、共起関係にない下位のテストセット86に含まれるテストでは共起関係の重み(共起関係係数K)が0になる。次に、求めた優先度TPが高い順序でテストの実施順位を決定し、決定された順位によるテストを、上位のテストセット86におけるテストの実行順序として決定する。
次に、ステップ112でCPU32は、ステップ111で抽出したテストを、ステップ111で決定した順序で実行する。なお、ステップ109で実施したテストセット86でエラーが生じなかった場合、CPU32は、上位のテストセット86に含まれる全てのテストを実施してもよい。また、CPU32は、テスト関係図84に反映されている、変更箇所に対応するテストで過去にエラーが発生した共起関係にあるテストの実施順位を用いてテストを特定してもよい。
次にステップ113において、CPU32は、ステップ109で実施したテストの実行結果と、ステップ112で実施したテストの実行結果と、を用いて、エントロピーを算出する。具体的には、CPU32は先ず、ステップ109とステップ112においてフェイルしたテストを特定する。そして、CPU32は、ステップ109でフェイルしたテストとステップ112でフェイルしたテストとのペアの数、及び、ステップ109で実施したテストとステップ112で実施したテストとのペアの数を用いて、エントロピーを算出する。エントロピーの算出式は上述した(式1)である。
次にステップ114において、CPU32は、ステップ113で算出したエントロピーの値が所定の閾値よりも大きいか否かを判定する。エントロピーの値が所定の閾値以下の場合には、CPU32はステップ114で否定判断し、処理をステップ116に遷移させる。一方、エントロピーの値が所定の閾値より大きい場合には、CPU32はステップ114で肯定判断し、ステップ115において、ステップ109とステップ112で実施したテストの実行により発生した共起関係の情報をテスト関係図84及び共起テーブル90に反映する。すなわち、CPU32は、テスト関係図84及び共起テーブル90において、共起関係が発生したペアの共起関係係数Kの値を1インクリメントする。
そして、CPU32は処理をステップ110に遷移させ、テップ110〜ステップ116の処理が繰り返される。ただし、ステップ110においては、CPU110は、直近に実行したステップ111においてテストセット86を実施した関数の上位にテストセット86が関連付けられた関数が有るか否かを判断する。また、ステップ111においてCPU32は、前回実行したステップ111においてエラーが発生したテストと共起関係にあるテストを、テスト関係図84(共起テーブル90)に基づいて、追加して実行するテストとして抽出してもよい。また、ステップ113においてCPU32は、直近に実行した2回のステップ112において実施したテストの実行結果を用いて、エントロピーを算出してもよい。また、ステップ115においてCPU32は、直近に実行した2回のステップ112において実施したテストの実行により発生した共起関係の情報をテスト関係図84及び共起テーブル90に反映してもよい。
なお、ステップ109またはS112で実施したテストセット86の上位に複数の関数が存在する場合がある。この場合、ステップ111においては、複数の関数の各々に対応付けられるテストセット86に含まれるテストの各々の優先度TPの総和を求め、求めた総和に基づいて、例えば優先度が高い序列で実行順序を決定すればよい。
具体的には、図17に示す変更箇所リスト92の場合、まず、変更箇所リスト92を参照し変更箇所として関数cを選択して(S107)、関数cに関するテストセット86cが実施される(S109)。関数cに関するテストセット86cに含まれるテストでエラーがない場合は上位の階層の関数bのテストセット86b、次に関数aのテストセット86aが実施される。一方、関数cに関するテストセット86cでエラーが発生した場合、上位階層のテストセット86bで共起関係にあるテストを抽出し(S111)、各テストの優先度TPつまり共起関係の重みの和の順にテストが実施される(S112)。
図19に、ステップ111において、テストセット86の優先度に基づいて実行順序を決定することを説明するためのテスト関係図84の一例を示す。図19の例は、関数cを修正後、関数cのテストセット86cを実施した結果、テストc_1、テストc_3でエラーが発生したときを示している。また、図20に、共起関係を示す共起テーブル90の一例を示す。図20では、共起関係にあるテストc_1とテストb_2の合致セルに、共起関係係数Kとして「15」が格納されていることが示されている。同様に、共起関係にあるテストc_3とテストb_2の合致セルに「20」が格納され、テストc_3とテストb_4の合致セルに「20」が格納され、テストc_3とテストb_5の合致セルに「30」が格納されている。
関数cのテストセット86cの上位の関数bのテストセット86bにおいて、共起関係にあるものはテストb_2、テストb_4、及びテストb_5である。また、テストb_1、テストb_3、及びテストb_6には共起関係がない。また、共起関係の重みの和である優先度TPは、テストb_2=35、テストb_4=20、及びテストb_5=30である。従って、テストセット86bに関して実施対象のテストは、テストb_2、テストb_4、及びテストb_5であり、テストb_2、テストb_5、及びテストb_4の順序が決定され、決定された順序で優先的にテストが実施される。
なお、テストの実施により、共起してエラーが発生するテストを含むテストセットがあった場合は、発生した共起関係のエントロピーが算出される(S113)。そして算出されたエントロピーが所定の閾値よりも大きい場合には(S114でYes)、テスト間の共起関係係数Kが更新される(S115)。例えば、図19及び図20に示す関係にあるとき、テスト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合、エントロピーは、「-log (2/24) = 1.08」となる。このとき所定の閾値が「0.5」である場合、エントロピーの値は閾値よりも大きくなる。すると、テスト_c_1とテスト_b_4の共起関係係数Kが「0」から「1」に更新され、テスト_c_3とテスト_b_4の共起関係係数Kが「20」から「21」に更新される。
なお、以上説明したテストプログラム50による処理において、ステップ108及び112の処理の一部または全部が実施プロセスによる処理に含まれる。また、ステップ113の処理の一部または全部が特定プロセス及び算出プロセスによる処理に含まれる。また、ステップ114の処理の一部または全部が評価プロセス及び算出プロセスによる処理に含まれる。また、ステップ101の処理が関係図作成プロセスによる処理に含まれる。また、ステップ107の処理の一部または全部が変更箇所特定プロセスによる処理に含まれる。また、ステップ111の処理の一部または全部が抽出プロセスによる処理に含まれる。また、ステップ109、ステップ111、ステップ112の処理の一部または全部が制御プロセスによる処理に含まれる。
なお、実施形態で考慮する共起関係は、対象プログラムに含まれる所定の関数に対するテストと、その関数と直接依存関係のある関数に対するテストと、の間のペアにおいて発生した共起関係に限定されない。すなわち例えば、図15に示す関数間の依存関係がある場合に、テストセット86aと86bの間で発生した共起関係だけでなく、テストセット86aとテストセット86dとの間に発生した共起関係も、テスト関係図84及び共起関係テーブル90に格納される構成としてもよい。
以上説明したように、本実施形態では、共起関係が表れたときの情報量に応じて、共起関係の情報を相互関係情報24に格納するか否かを判定する。共起関係の情報量が小さい場合には、その共起関係を示す情報を相互関係情報24に格納しないことで、テスト間の相互関係を高い精度で示すことが可能となる。従って、対象プログラムの変更後にフェイルしたテストの関連テストを抽出する際に、このような相互関係情報24を用いることで、より高い精度で関連テストを抽出することができる。
また、本実施形態では、対象プログラムの変更箇所に該当する関数と依存関係を有する他の関数との間で共起関係にある関数に対応付けられるテストについて、優先的に実施する。つまり、対象プログラムの変更箇所に対応するテストでエラーが生じた場合、対象プログラムのモジュール間の関係からテスト間の関係が定められた共起関係にあるテストを追加して特定し、実行する。このように、プログラムに含まれる関数に対応するテストについて、蓄積されたテスト間の相互関係を用いて実施対象のテストを特定でき、対象プログラムに対するテスト内容を特定することができる。これによって、対象プログラムに対するテストについて、例えば、プログラム修正などの変更に伴うリグレッションテストの実行範囲を抑制でき、またテストの処理時間を短縮することができる。
また、本実施形態では、複数のテストの間の関係を示す情報を蓄積部38に記憶することにより、テストを実行した結果を蓄積することができる。
また、本実施形態では、所定の関数を含むモジュールに対してテストが対応されるので、プログラムのソースコードを関数単位で分類してテストを対応させることができる。
また、本実施形態では、特定のテストを実行させたときに、所定の実行結果としてエラーが生じた場合に、依存関係にあるテストとの間の相互関係を蓄積している。従って、対象プログラムをテストするときに、関数で発生するエラーに対して迅速に対応することができる。
また、本実施形態では、対象プログラムの変更箇所に該当する関数と依存関係を有する他の関数との間の相互関係を示す情報を、共起関係係数Kにより相互関係の度合いが示される共起関係を示す情報としている。共起関係係数Kは、特定のテストを実行させたときに、エラーが生じた場合、逐次更新される。従って、対象プログラムに対する変更箇所に依存する影響箇所に対して、エラーが生じる可能性が高い箇所の履歴を蓄積することができ、対象プログラムにおける変更箇所に対して影響することが予測されるテストを実行させることができる。
また、本実施形態では、複数のテストを含むテストセットを、特定の関数に関連付けている。対象プログラム上の関数の依存関係において、関数に対応付けたテストセットに含まれるテスト間の相互関係である共起関係を示す情報を用いている。従って、特定の関数に複数のテストが関連付けられる場合であっても、テストセットに含まれるテスト間の共起関係により、エラーが生じる可能性が高いことが予測されるテストを実行させることができる。
また、本実施形態では、共起関係係数Kにより相互関係の度合いが示される共起関係を示す情報を用いて関数に対応付けたテストセットに含まれるテストの実行順序を決定している。従って、エラーが生じる可能性が高いことが予測されるテストを順位づけて実行させることができる。
また、本実施形態では、対象プログラムの変更箇所について、ソースコードの単純な変更ではなく、他と依存性を有する起点となる関数等の変更箇所を抽出する。従って、依存関係がある関数に対してテストを実行することができ、対象プログラム上の関数の依存関係を考慮してテストを実行することができる。
また、本実施形態では、対象プログラムにおいて実行順序を示す依存関係を求め、依存関係に基づきテストの実行順序を設定し、対象プログラムに含まれる関数に対してテストを実行する。従って、対象プログラムの実行内容に合致してテストを実行することができる。
(第2実施形態)
次に、第2実施形態を説明する。第2実施形態では、関係図作成部は、各相互関係についての関係の度合いを示す情報に、算出部により算出された相互関係の強さに応じた重み付けを行って、相互関係情報24に格納する。
図21に、第2実施形態に係る対象プログラムのテスト選択装置の一例を示す。テスト選択装置900は、実施部901、特定部902、算出部903、関係図作成部905、変更箇所特定部906、抽出部907、及び、制御部908を含む。また、テスト選択装置には、記憶部920が接続されている。
記憶部920は、対象プログラム情報922、相互関係情報924、テスト情報926を記憶する。対象プログラム情報922、相互関係情報924、テスト情報926は、第1実施形態の図2に示す対象プログラム情報22、相互関係情報24、テスト情報26と同様である。
実施部901、特定部902、変更箇所特定部906、抽出部907、及び、制御部908は、それぞれ、第1実施形態の図2に示す実施部11、特定部12、変更箇所特定部16、抽出部17、及び制御部18と同様である。
算出部903は、特定部902により特定された相互関係を有するペアの相互関係の強さを算出する。相互関係の強さの算出は、依存関係のあるモジュールのそれぞれに対する各テストのすべてのペアの総数と、特定部902により特定された相互関係を有するペアの数と、に基づいて行われる。算出部903が算出する相互関係の強さは、具体的には例えば、後述するエントロピーの値である。そして算出部903は、算出した相互関係の強さに基づいて、特定部902により特定された相互関係についての関係の度合いを示す情報に加える重みを算出する。
関係図作成部905は、特定部902により特定された相互関係を有するペアの情報と、算出部903により算出された重みに基づいて、相互関係情報24を作成して記憶部20に格納する。具体的には例えば、関係図作成部905は、特定部902により特定された相互関係を有するペアについて、各相互関係についての関係の度合いを示す情報に、算出部903により算出された重みを加えて、相互関係情報24を更新する。
第2実施形態に係るテスト選択装置をコンピュータで実現する一例は、第1実施形態において図3に示したものと同様である。ただし、テストプログラム50は、実施部901、特定部902、算出部903、及び、関係図作成部905にそれぞれ対応する、実施プロセス、特定プロセス、算出プロセス、及び関係図作成プロセスを含む。また、テストプログラム50は、変更箇所特定部906、抽出部907、及び、制御部908にそれぞれ対応する、変更箇所特定プロセス、抽出プロセス、及び、制御プロセスを含む。
第2実施形態では、相互関係についての関係の度合いを示す情報に加える重みは、具体的には以下の式(2)により求められる。
重み=エントロピー/テストで起きた共起関係の数 (式2)
次に、第2実施形態に係るテスト選択装置における対象プログラムのテストの流れについて説明する。図22Aは、第2実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート(その1)を示す。図22Bは、第2実施形態に係るテスト選択装置におけるテスト処理の流れの一例を示すフローチャート(その2)を示す。図22A及び図22Bに示すテストの流れは、開示の技術のテストプログラムの一例として実行されるテストプログラムによる処理である。
図22A及び図22Bにおいて、ステップ201〜ステップ213、及びステップ216の処理は、第1実施形態の図9A及び図9Bに示すステップ101〜ステップ113、及びステップ116の処理と同様である。
図22Bのステップ214において、CPU32は、ステップ213で算出したエントロピーの値に基づいて、共起関係係数Kに加える重みを算出する。
次にステップ115において、CPU32は、ステップ209とステップ212で実施したテストの実行により発生した共起関係の情報を、ステップ214で算出した重みで重み付けを行い、テスト関係図84及び共起テーブル90に反映する。すなわち、CPU32は、テスト関係図84及び共起テーブル90において、共起関係が発生したペアの共起関係係数Kの値にステップ214で算出した重みの値を加える。そして、CPU32は、処理をS210に遷移させる。
図23は、第2実施形態における、共起関係係数Kの更新を説明する図である。図23の例は、図19に示すテスト関係図84の状態から、テスト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合に、その共起関係を示す情報が更新された後のテスト関係図84の状態を示す。スト_c_1、テスト_c_3、テスト_b_4が共起してエラーが発生した場合、CPU32はエントロピーの値を「-log( 2/24) = 1.08」と算出する(S213)。次にCPU32は、重みの値を「1.08 / 2 = 0.54」と算出する(S214)。そして、テスト関係図84において、CPU32は、テスト_c_1とテスト_b_4の共起関係係数Kを「0」から「0.54」に更新し、テスト_c_3とテスト_b_4の共起関係係数Kを「20」から「20.54」に更新する。
第2実施形態では、共起関係が有する情報量に基づいて、共起関係係数に重み付けを行って相互関係情報924に記憶する。これにより、相互関係情報924はテストケースの共起関係の度合いをより高い精度で示すことが可能となる。従って、対象プログラムの変更後にフェイルしたテストの関連テストを抽出する際に、このような相互関係情報924を用いることで、より高い精度で関連テストを抽出することができる。また、抽出した関連テストを実行する順序の決定を、関連性の度合いに基づいて、精度良く行うことができる。
(第3実施形態)
次に、第3実施形態を説明する。第1実施形態及び第2実施形態では、テスト選択装置10をコンピュータ30により実現したが、第3実施形態では、テスト選択装置10、900を複数のコンピュータにより実現した場合の一例である。第3実施形態は、第1実施形態と同様の構成のため、同一部分には同一符号を付して詳細な説明を省略する。
図24に、テスト選択装置10を、複数のコンピュータ30A〜30Dを含むコンピュータシステム11で実現する一例を示す。複数のコンピュータ30A〜30Dの各々は、コンピュータ30と同様に、コンピュータ30はCPU32A〜32D、メモリ34A〜34D、及び格納部36A〜36Dを備えている。CPU32A〜32D、メモリ34A〜34D、及び格納部36A〜36Dは、バス48A〜38Dを介して互いに接続されている。また、コンピュータ30A〜30Dの各々は、ディスプレイ等の表示装置40A〜40D、入力装置42A〜42Dを備え、各々バス48A〜48Dに接続されている。また、コンピュータ30A〜30Dの各々は、IO装置44A〜44Dがバス48A〜48Dに接続されている。コンピュータ30A〜30Dは、コンピュータネットワーク49に接続するためのインタフェースである通信制御部47A〜47Dを備えている。また、コンピュータネットワーク49には、蓄積部38を備えた蓄積装置38Zが接続されている。
図24に示すコンピュータシステム11では、図3に示すテストプログラムに含まれる各プロセスを、別々のコンピュータ30A〜30Dに格納して実行させる。尚、コンピュータ30A〜30Dに各々格納するプロセスは、図24に示すものに限定されず、任意の組合せとしてもよい。また、本実施形態のコンピュータシステム11では、コンピュータ30A〜30Dの各々の間で、通信制御部47A〜47Dおよびコンピュータネットワーク49を介してデータやコマンドを授受する。
以上説明したように、第3実施形態では、対象プログラムをテストする装置を機能別に分散させて、テストを実行できるので、第1実施形態の効果に加えて、対象プログラムをテストするときにおける処理負荷を負荷分散できるという効果を有する。また分散された各機能に対するコンピュータを移動可能に設定でき、装置を設置する場所についての自由度を向上させることもできる。
なお、上記ではテスト選択装置10をコンピュータ30により実現する一例を説明した。しかし、これらの構成に限定されるものではなく、上記説明した要旨を逸脱しない範囲において、各種の改良及び変更を行っても良いのはもちろんである。
また、上記ではプログラムが記憶部20に予め記憶(インストール)されている態様を説明したが、これに限定されるものではない。例えば、開示の技術におけるプログラムは、CD−ROMやDVD−ROM等の記録媒体に記録されている形態で提供することも可能である。
本明細書に記載された全ての文献、特許出願及び技術規格は、個々の文献、特許出願及び技術規格が参照により取り込まれることが具体的かつ個々に記された場合と同程度に、本明細書中に参照により取り込まれる。