(57)【要約】      （修正有）【課題】プログラムに対するデバッグを効率的に実施するための情報提示を可能にする情報処理プログラム、方法及び装置を提供する。【解決手段】分析対象プログラム及びそのテストケースの入力を受け付けＳ１、各テストケースを分析対象プログラムで実行することで得られるテスト結果、及び実行された分析対象プログラムの行を表す実行トレースを生成しＳ３、これらのデータに基づき、分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表すリスク値を算出しＳ５、実行トレースに基づき、分析対象プログラムの各行のクラスタリング処理を実行しＳ７、各クラスタにおいて、算出したリスク値に基づく順位付けを行いＳ９、クラスタリングの結果と、分析対象プログラムの各行について算出されたリスク値及び順位とを出力する処理Ｓ１１と、を含む。【選択図】図４
2016038612.tif 000002
【特許請求の範囲】
【請求項１】
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行し、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する
処理を、コンピュータに実行させるためのプログラム。
【請求項２】
前記クラスタリングによって生成された各クラスタにおいて、前記分析対象プログラムの各行について算出された前記指標値によって、前記分析対象プログラムの各行を順位付けして出力する
処理をさらに前記コンピュータに実行させるための請求項１記載のプログラム。
【請求項３】
前記クラスタリングを実行する処理が、
前記実行トレースと前記分析対象プログラムの各行について算出された前記指標値とに基づき、前記分析対象プログラムの各行のクラスタリングを実行する処理
である請求項１又は２記載のプログラム。
【請求項４】
前記クラスタリングを実行する処理が、
前記分析対象プログラムの各行について算出された前記指標値に対する所定関数の値を算出する処理
を含む請求項２記載のプログラム。
【請求項５】
前記所定関数が、シグモイド関数である
請求項４記載のプログラム。
【請求項６】
前記クラスタリングを実行する処理が、
前記実行トレースに基づき、前記分析対象プログラムの各行についてベクトルを生成し、
前記ベクトルに基づき、前記分析対象プログラムの各行のクラスタリングを実行する
処理を含む請求項１又は２記載のプログラム。
【請求項７】
前記生成する処理が、
前記実行トレースと前記指標値とに基づき、前記分析対象プログラムの各行についてベクトルを生成する
処理を含む請求項６記載のプログラム。
【請求項８】
前記生成する処理が、
前記実行トレースと前記指標値に対する所定関数の値とに基づき、前記分析対象プログラムの各行についてベクトルを生成する
処理を含む請求項６記載のプログラム。
【請求項９】
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行し、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する
処理を含み、コンピュータが実行する情報処理方法。
【請求項１０】
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出する算出部と、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行するクラスタリング部と、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する出力部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの欠陥を検出するための技術に関する。
【背景技術】
【０００２】
ある文献には、プログラムに含まれるバグ（欠陥）を特定するために、バグが含まれている怪しさの指標値（リスク値とも呼ぶ）を各行について算出することが開示されている。例えば図１に示すようなｘ、ｙ及びｚのうち中間値を出力するプログラムに対して６つのテストケースを実行すると、最終行に示すようなテスト結果（Ｐはパス（Ｐａｓｓ）を表し、Ｆはフェイル（Ｆａｉｌ）を表す）が得られる。また、各テストケースについて、実行された行を表す実行トレースも得られる。図１では、プログラムに含まれる行Ｓ1乃至Ｓ12のうち、各テストケースについて実行された行には黒丸印が付されている。この文献では、Tarantula's suspiciousnessとして、以下のような式にてリスク値が算出される。
【０００３】
【数１】
2016038612.tif 000003
なお、Fail(All)は、テスト結果がフェイルとなったテストケースの総数であり、Fail(Sn)は、行Ｓnを実行したテストケースのうちテスト結果がフェイルとなったテストケースの数である。同様に、Pass(All)は、テスト結果がパスとなったテストケースの総数であり、Pass(Sn)は、行Ｓnを実行したテストケースのうちテスト結果がパスとなったテストケースの数である。
【０００４】
図１の例において行Ｓ6に着目する。行Ｓ6ではｍ＝ｙとなっているが、本来ｍ＝ｘとしなければならないので、バグが含まれている。Fail(S6)は１であり、Fail(All)も１である。Pass(S6)は１であり、Pass(All)は５である。そうすると、Ｓ6のリスク値は、（１／１）／｛（１／１）＋（１／５）｝＝０．８３３となる。
【０００５】
同様に各行のリスク値を算出すると、図１に示すように、バグが含まれている行Ｓ6のリスク値が最も大きくなっていることが分かる。従って、リスク値が大きい行から順番にデバッグすれば早期にバグを除去でき、デバッグ作業の効率化が図られる。
【０００６】
しかしながら、図１の例ではバグは１カ所のみであったが、一般的にプログラムには複数のバグが含まれている。バグが複数ある場合、一部のバグについて、相対的に低いリスク値が算出されてしまうケースがあることが分かった。
【０００７】
例えば図２の例を考える。図２も図１と同様にリスク値を算出するが、ハッチング付きの２行にバグが含まれていることが分かっている。この２行のうち１行目には、リスク値「１」（＝１００％）が算出されているが、２行目には、リスク値「０．５７１」が算出されている。プログラム全体の中でリスク値の降順で順位付けすると、１行目は１位であるが、２行目は７位となってしまう。このように、複数のバグが含まれている場合には、リスク値の降順でデバッグを行っても必ずしも作業効率を向上できない現象が生ずる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】J. A. Jones and M. J. Harrold,”Empirical evaluation of the tarantula automatic fault-localization technique,”in Proceedings of the 20th IEEE/ACM international Conference on Automated softwareengineering, ser. ASE ’05. New York, NY, USA: ACM, 2005, pp. 273-282.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従って、本発明の目的は、一側面によれば、プログラムに対するデバッグを効率的に実施するための情報提示を可能にするための技術を提供することである。
【課題を解決するための手段】
【００１０】
本発明に係る情報処理方法は、（Ａ）予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各テストケースについて実行された、分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、（Ｂ）実行トレースに基づき、分析対象プログラムの各行のクラスタリングを実行し、（Ｃ）クラスタリングの結果と分析対象プログラムの各行について算出された指標値とを出力する処理を含む。
【発明の効果】
【００１１】
一側面によれば、プログラムに対するデバッグを効率的に実施するための情報提示が可能になる。
【図面の簡単な説明】
【００１２】
【図１】図１は、背景技術を説明するための図である。
【図２】図２は、背景技術を説明するための図である。
【図３】図３は、本実施の形態に係る情報処理装置の構成例を示す図である。
【図４】図４は、実施の形態における主要な処理フローを示す図である。
【図５】図５は、第１の実施の形態に係るクラスタリング処理の処理フローを示す図である。
【図６】図６は、ベクトル生成の一例を示す図である。
【図７】図７は、クラスタリング結果の一例を示す図である。
【図８】図８は、順位付けの結果を示す図である。
【図９】図９は、第２の実施の形態を説明するための図である。
【図１０】図１０は、第２の実施の形態を説明するための図である。
【図１１】図１１は、第２の実施の形態を説明するための図である。
【図１２】図１２は、第２の実施の形態に係るクラスタリング処理の処理フローを示す図である。
【図１３】図１３は、ベクトル生成の一例を示す図である。
【図１４】図１４は、第２の実施の形態に係るクラスタリングの結果例を示す図である。
【図１５】図１５は、シグモイド関数を表す曲線を示す図である。
【図１６】図１６は、効果を説明するための図である。
【図１７】図１７は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１３】
［実施の形態１］
複数のバグが含まれているプログラムにおいて、一部のバグのリスク値が相対的に低くなる理由は様々であるが、「同じ原因で高リスクとなる行は、類似するテストケースで複数回実行されている」という性質があることが分かった。
【００１４】
従って、類似するテストケースで実行される行を同じクラスタに分類すれば、全体としては低い順位になってしまったバグありの行についても、類似するテストケースで実行されている行のクラスタの中では、順位が高くなることが期待される。
【００１５】
そこで本実施の形態では、実行トレースに基づき、プログラムの各行に対してクラスタリングを実行した上で、クラスタ毎に順位付けを行うものとする。
【００１６】
本実施の形態に係る情報処理装置の構成例を図３に示す。本実施の形態に係る情報処理装置１００は、入力部１０１と、テストケース格納部１０２と、プログラム格納部１０３と、テスト実行部１０４と、テスト結果格納部１０５と、実行トレース格納部１０６と、リスク計算部１０７と、リスクデータ格納部１０８と、クラスタリング部１０９と、クラスタデータ格納部１１０と、ランキング部１１１と、ランキングデータ格納部１１２と、出力部１１３とを有する。情報処理装置１００は、表示装置、印刷装置などの出力装置２００に接続されている。なお、出力装置２００は、ネットワークで接続された他のコンピュータである場合もある。
【００１７】
入力部１０１は、ユーザ又は他のコンピュータから、分析対象のプログラムとそのプログラムに対する複数のテストケース（正解データを含む）とを受け取り、プログラムについてはプログラム格納部１０３に格納し、テストケースについてはテストケース格納部１０２に格納する。
【００１８】
テスト実行部１０４は、各テストケースについてプログラムを実行させ、実行された行を表す実行トレースと、出力データと正解データとを比較した結果であるテスト結果（パス又はフェイル）とを生成し、テスト結果をテスト結果格納部１０５に格納し、実行トレースを実行トレース格納部１０６に格納する。テスト実行部１０４の処理内容については、従来と同じであるから、これ以上述べない。
【００１９】
リスク計算部１０７は、テスト結果格納部１０５に格納されているテスト結果と、実行トレース格納部１０６に格納されている実行トレースとに基づき、分析対象プログラムの各行について、欠陥が含まれる蓋然性を表す指標値であるリスク値を算出し、リスクデータ格納部１０８に格納する。
【００２０】
また、本実施の形態に係るクラスタリング部１０９は、実行トレース格納部１０６に格納されている実行トレースに基づき、分析対象プログラムの各行をクラスタに分類し、クラスタのデータをクラスタデータ格納部１１０に格納する。なお、後に説明する第２の実施の形態では、リスクデータ格納部１０８に格納されているリスク値をも用いてクラスタリングを実行する（図３の点線部分）。
【００２１】
ランキング部１１１は、リスクデータ格納部１０８に格納されているリスク値の降順で、各クラスタにおいて、分析対象プログラムの各行を順位付けし、順位付けの結果をランキングデータ格納部１１２に格納する。出力部１１３は、テスト結果格納部１０５と実行トレース格納部１０６とランキングデータ格納部１１２とに格納されているデータを用いて出力データを生成し、表示装置などの出力装置２００に出力する。
【００２２】
次に、図４乃至図８を用いて情報処理装置１００の処理内容について説明する。
【００２３】
まず、入力部１０１は、ユーザなどから、分析対象プログラム及びそのテストケースの入力を受け取り、分析対象プログラムをプログラム格納部１０３に格納し、テストケースのデータをテストケース格納部１０２に格納する（図４：ステップＳ１）。
【００２４】
そうすると、テスト実行部１０４は、プログラム格納部１０３に格納されている分析対象プログラムで、テストケース格納部１０２に格納されている各テストケースを実行して、実行トレース及びテスト結果を生成し、実行トレースを実行トレース格納部１０６に格納し、テスト結果をテスト結果格納部１０５に格納する（ステップＳ３）。
【００２５】
そして、リスク計算部１０７は、テスト結果格納部１０５及び実行トレース格納部１０６に格納されているデータから、分析対象プログラムの各行について、リスク値を算出し、リスクデータ格納部１０８に格納する（ステップＳ５）。このリスク値の計算方法については、背景技術の欄で述べた方法であっても良いし、以下に示すような計算式にて算出するようにしても良い。
【００２６】
【数２】
2016038612.tif 000004
さらに、その他の算式であっても良い。
【００２７】
また、クラスタリング部１０９は、クラスタリング処理を実行する（ステップＳ７）。クラスタリング処理については、図５を用いて説明する。
【００２８】
なお、本実施の形態では、ｋ−ｍｅａｎｓ法を用いてクラスタリングを実行する。ｋ−ｍｅａｎｓ法では、ある空間に存在するサンプルをランダムにクラスタに分類した後、クラスタ毎にその重心を算出する。その後、各サンプルを最も近い重心のクラスタに分類し直す。再度、クラスタ毎に重心を算出し直す。その後、サンプルを最も近い重心のクラスタに分類し直す。といった処理を、分類に変化がなくなるまで繰り返す。
【００２９】
そこで、クラスタリング部１０９は、分析対象プログラムの各行に対して、実行トレース格納部１０６に格納されている実行トレースに基づき、空間における座標値に相当するベクトルを生成する（ステップＳ２１）。
【００３０】
分析対象プログラムにおける各行について、実行されたテストケースについては「１」を、実行されなかったテストケースについては「０」を設定することによって、各行についてテストケース数の成分を有するベクトルを生成する。図２に示したケースについては、図６に示すように、７成分のベクトルが生成される。類似するテストケースが実行された行のベクトルは類似する。
【００３１】
そうすると、クラスタリング部１０９は、分析対象プログラムの各行を、そのベクトルに基づきクラスタリングを実行し、生成されたクラスタのデータをクラスタデータ格納部１１０に格納する（ステップＳ２３）。そして呼び出し元の処理に戻る。
【００３２】
ベクトルを行の座標値として、上で述べたｋ−ｍｅａｎｓ法にてクラスタリングを実行する。なお、クラスタ数については、予め設定するものとする。
【００３３】
そうすると、図２の例を３つのクラスタに分類する場合には、図７に示すような分類結果が得られる。この例では、７つのテストケース全てで実行された行のグループ（第１グループ）と、左から１番目のテストケースと５番目のテストケースと６番目のテストケースとのうち少なくともいずれかで実行され且つそれら以外のテストケースで実行されていない行のグループ（第２グループ）と、それ以外の行のグループ（第３グループ）とに分けられている。
【００３４】
ここではｋ−ｍｅａｎｓ法を採用したが、クラスタリング方法としてはＷｏｒｄ法、群平均法、自己組織化写像などの方法を採用しても良い。
【００３５】
図４の処理の説明に戻って、ランキング部１１１は、リスクデータ格納部１０８に格納されているリスク値とクラスタデータ格納部１１０に格納されているクラスタのデータとから、各クラスタにおいて、リスク値の降順に分析対象プログラムの各行の順位付けを実行し、処理結果をランキングデータ格納部１１２に格納する（ステップＳ９）。
【００３６】
図７のようなクラスタリングがなされた場合には、図８に示すように、第１のグループでは３つとも同じ順位付けとなるが、バグを含む行（星印）を含む第３のグループではそのバグを含む行が第１位となると共に、第２のグループでもバグを含む行（＊印）が第１位となっている。
【００３７】
そして、出力部１１３は、テスト結果格納部１０５と実行トレース格納部１０６とランキングデータ格納部１１２とに格納されているデータから分析結果のデータを生成し、出力装置２００に出力する（ステップＳ１１）。例えば、図８に示すようなデータを表示装置に表示する。
【００３８】
図８のように、プログラムの各行について、所属クラスタを示すと共に、実行されたか否か（実行トレース）、リスク値及び所属クラスタにおける順位を提示するものである。
【００３９】
このようにすれば、各クラスタにおいて順位の高い行だけを精査することでバグを発見できるようになる。すなわち、単にリスク値で順位付けするよりも少ない作業量でバグを発見できるようになる。
【００４０】
［実施の形態２］
第１の実施の形態だけでも十分な効果を得られる場合もあるが、リスクの高くない行ばかりのクラスタと、リスクの高い行を多く含むクラスタとに分かれてしまう場合が生ずる。
【００４１】
図９に示すようなプログラムについての実行トレースを用いてクラスタリングを実行すると、リスク値が５０％以下のみのクラスタと、リスク値が１００％から０％まで分布するクラスタとに分けられている。特にリスク値１００％の２行が同じクラスタに含まれることになるため、場合によってはこのクラスタにおいてバグを含むにも拘わらず順位が下がる行が出現する恐れがある。
【００４２】
そこで本実施の形態では、第１の実施の形態において生成されたベクトルに対してリスク値を乗じることで、リスクによる重み付けを考慮した形でクラスタリングを行うものとする。
【００４３】
図１０に示すような２次元空間を例にしてこのようなクラスタリングの主旨を説明する。低リスクの行を×印で表し、高リスクの行を丸印で表すものとすると、第１の実施の形態では、実行トレースの状態に応じて２次元空間に各行が配置されるが、リスクとは無関係に、その位置に応じて楕円で表されるようなクラスタが生成される。
【００４４】
本実施の形態では、リスク値が位置に相当するベクトルに乗じられるので、図１１に示すように、低リスクの行はベクトルの大きさが小さくなるので原点付近に配置され、高リスクの行は、元の配置からあまり変化しないので、原点から離れた位置に配置されることになる。従って、この状態でクラスタリングを実行すれば、楕円で表されるようなクラスタが生成され、高リスクな行が含まれ且つ類似したテストケースが実行された行が同じクラスタに分類されるようになる。
【００４５】
本実施の形態に係る情報処理装置１００では、図３に点線で示したように、クラスタリング部１０９は、リスクデータ格納部１０８に格納されているリスク値を用いてクラスタリングを実行する。
【００４６】
図１２に本実施の形態に係るクラスタリング処理の処理フローを示す。本実施の形態でも、基本的にはｋ−ｍｅａｎｓ法を用いてクラスタリングを実行する。
【００４７】
まず、クラスタリング部１０９は、分析対象プログラムの各行に対して、実行トレース格納部１０６に格納されている実行トレース及びリスクデータ格納部１０８に格納されているリスク値に基づき、ベクトルを生成する（ステップＳ３１）。
【００４８】
分析対象プログラムにおける各行について、実行されたテストケースについては「１」を、実行されなかったテストケースについては「０」を設定することによって、各行についてテストケース数の成分を有するベクトルを生成する。そして、リスク値をベクトルの各成分に対して乗ずる。
【００４９】
図９に示した例では、図１３に示すようなベクトルが生成される。例えば第１行目は、全テストケースで実行されるが、リスク値が０．５なので、全成分が０．５となるベクトルが生成される。
【００５０】
そして、クラスタリング部１０９は、分析対象プログラムの各行を、そのベクトルに基づきクラスタリングを実行し、生成されたクラスタのデータをクラスタデータ格納部１１０に格納する（ステップＳ３３）。そして呼び出し元の処理に戻る。
【００５１】
ステップＳ３３の処理については第１の実施の形態と同様である。図１３のようなベクトルを用いると、図１４に示すようなクラスタが生成される。
【００５２】
図９では、リスク値１００％の２行が同じクラスタに分類されていたが、図１４では、それらは異なるクラスタに分類されている。すなわち、各クラスタにおいて順位が高い行に絞ってデバッグを行うことで、効率的にデバッグ作業を行えるようになる。
【００５３】
なお、上で述べたように、実行トレースに対応するベクトルに適切な重み値を乗ずることで、クラスタリングを制御できることが分かる。
【００５４】
例えば、より大きなリスク値を強調するようにシグモイド関数を用いると良いことが分かった。シグモイド関数ｓ（ｘ）は以下のように表される。なお、例えば、図１５に示すような関数である。図１５の例で、縦軸は出力値、横軸はリスク値を表す。
ｓ（ｘ）＝１／（１＋ｅ-ax）
リスク値を代入することで重み値を算出する。なお、ａは定数であり、適切に設定する。
【００５５】
従って、ステップＳ３１において、リスク値の代わりにシグモイド関数にリスク値を代入した結果得られる値をベクトルに乗ずることで、クラスタリングに用いるベクトルを得る。
【００５６】
なお、シグモイド関数は一例であって、より好ましい他の関数を採用しても良い。
【００５７】
ここで、デバッグ作業のコストとして以下のような値を定義する。このコストの総和が低いほど、効率的なデバッグ作業が可能になる。
コスト＝順位／プログラムの行数
【００５８】
図１６に、図１６の右端に示すようなリスク値が算出されるようなプログラムについて、リスク値で順位付けした際のコスト（従来手法のコスト）、第１の実施の形態の方法（方法１）を採用した場合のコスト、第２の実施の形態の方法（方法２）を採用した場合のコスト、シグモイド関数を用いた方法（方法３）のコストを算出した結果を示す。
【００５９】
この例では、従来手法に比べて方法１を採用するとコストは約１／３となっている。さらに、方法２を採用すると方法１に比してコストは１／２以下となっており、方法３を採用すると方法１に比してコストは約１／４となる。
【００６０】
このように実施の形態によるコスト削減効果が高い。
【００６１】
以上本発明に係る実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、機能ブロック構成は一例であって、プログラムモジュール構成とは一致しない場合もある。
【００６２】
処理フローについても処理結果が変わらない限り、実行順番を入れ替えたり、複数のステップを並列に実行するようにしても良い。
【００６３】
なお、上で述べた情報処理装置１００は、コンピュータ装置であって、図１７に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６４】
以上述べた本実施の形態をまとめると、以下のようになる。
【００６５】
本実施の形態に係る情報処理方法は、（Ａ）予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各テストケースについて実行された、分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、（Ｂ）実行トレースに基づき、分析対象プログラムの各行のクラスタリングを実行し、（Ｃ）クラスタリングの結果と分析対象プログラムの各行について算出された指標値とを出力する処理を含む。
【００６６】
このようにすることで、本来欠陥が含まれているのに指標値（例えば実施の形態におけるリスク値）が相対的に低くなってしまうような場合であっても、このようなクラスタリングを実行することによってクラスタ内における順位が高くなり、デバッグ対象としてより抽出されやすくなる。従って、出力データを参照すればデバッグを効率的に実施することができるようになる。
【００６７】
なお、本情報処理方法は、クラスタリングによって生成された各クラスタにおいて、分析対象プログラムの各行について算出された指標値によって、分析対象プログラムの各行を順位付けして出力する処理をさらに含むようにしても良い。このようにすればより効率的に高リスクの行を抽出しやすくなる。
【００６８】
さらに、上で述べたクラスタリングを実行する処理が、実行トレースと分析対象プログラムの各行について算出された指標値とに基づき、分析対象プログラムの各行のクラスタリングを実行する処理である場合もある。このようにすることで、よりデバッグコストを下げることができるようになる。
【００６９】
なお、上で述べたクラスタリングを実行する処理が、分析対象プログラムの各行について算出された指標値に対する所定関数の値を算出する処理を含むようにしても良い。上記指標値を用いて適切に重み付けする所定関数を採用するものである。この所定関数は、シグモイド関数である場合もある。この場合、大きな指標値をより強調することで、適切なクラスタリングが行われるようになる。
【００７０】
さらに、上で述べたクラスタリングを実行する処理が、実行トレースに基づき、分析対象プログラムの各行についてベクトルを生成し、ベクトルに基づき、分析対象プログラムの各行のクラスタリングを実行する処理を含むようにしても良い。ベクトルを座標値として用いるものである。
【００７１】
さらに、上で述べた生成する処理が、実行トレースと指標値とに基づき、分析対象プログラムの各行についてベクトルを生成する処理を含むようにしても良い。指標値で実行トレースに基づくベクトルを重み付けしても良い。
【００７２】
また、上で述べた生成する処理が、実行トレースと指標値に対する所定関数の値とに基づき、分析対象プログラムの各行についてベクトルを生成する処理を含むようにしても良い。より適切な関数値で実行トレースに基づくベクトルを重み付けしても良い。
【００７３】
なお、上で述べたような処理をプロセッサ又はコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【００７４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７５】
（付記１）
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行し、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する
処理を、コンピュータに実行させるためのプログラム。
【００７６】
（付記２）
前記クラスタリングによって生成された各クラスタにおいて、前記分析対象プログラムの各行について算出された前記指標値によって、前記分析対象プログラムの各行を順位付けして出力する
処理をさらに前記コンピュータに実行させるための付記１記載のプログラム。
【００７７】
（付記３）
前記クラスタリングを実行する処理が、
前記実行トレースと前記分析対象プログラムの各行について算出された前記指標値とに基づき、前記分析対象プログラムの各行のクラスタリングを実行する処理
である付記１又は２記載のプログラム。
【００７８】
（付記４）
前記クラスタリングを実行する処理が、
前記分析対象プログラムの各行について算出された前記指標値に対する所定関数の値を算出する処理
を含む付記２記載のプログラム。
【００７９】
（付記５）
前記所定関数が、シグモイド関数である
付記４記載のプログラム。
【００８０】
（付記６）
前記クラスタリングを実行する処理が、
前記実行トレースに基づき、前記分析対象プログラムの各行についてベクトルを生成し、
前記ベクトルに基づき、前記分析対象プログラムの各行のクラスタリングを実行する
処理を含む付記１又は２記載のプログラム。
【００８１】
（付記７）
前記生成する処理が、
前記実行トレースと前記指標値とに基づき、前記分析対象プログラムの各行についてベクトルを生成する
処理を含む付記６記載のプログラム。
【００８２】
（付記８）
前記生成する処理が、
前記実行トレースと前記指標値に対する所定関数の値とに基づき、前記分析対象プログラムの各行についてベクトルを生成する
処理を含む付記６記載のプログラム。
【００８３】
（付記９）
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出し、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行し、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する
処理を含み、コンピュータが実行する情報処理方法。
【００８４】
（付記１０）
予め与えられた各テストケースを分析対象プログラムで実行することで得られるテスト結果及び各前記テストケースについて実行された、前記分析対象プログラムの行を表す実行トレースを格納するデータ格納部に格納されたデータに基づき、前記分析対象プログラムの各行について、当該行に欠陥が含まれる蓋然性を表す指標値を算出する算出部と、
前記実行トレースに基づき、前記分析対象プログラムの各行のクラスタリングを実行するクラスタリング部と、
前記クラスタリングの結果と前記分析対象プログラムの各行について算出された指標値とを出力する出力部と、
を有する情報処理装置。
【符号の説明】
【００８５】
１０１  入力部
１０２  テストケース格納部
１０３  プログラム格納部
１０４  テスト実行部
１０５  テスト結果格納部
１０６  実行トレース格納部
１０７  リスク計算部
１０８  リスクデータ格納部
１０９  クラスタリング部
１１０  クラスタデータ格納部
１１１  ランキング部
１１２  ランキングデータ格納部
１１３  出力部
【図１】
2016038612.tif 000005
【図２】
2016038612.tif 000006
【図３】
2016038612.tif 000007
【図４】
2016038612.tif 000008
【図５】
2016038612.tif 000009
【図６】
2016038612.tif 000010
【図７】
2016038612.tif 000011
【図８】
2016038612.tif 000012
【図９】
2016038612.tif 000013
【図１０】
2016038612.tif 000014
【図１１】
2016038612.tif 000015
【図１２】
2016038612.tif 000016
【図１３】
2016038612.tif 000017
【図１４】
2016038612.tif 000018
【図１５】
2016038612.tif 000019
【図１６】
2016038612.tif 000020
【図１７】
2016038612.tif 000021