(57)【要約】      （修正有）【課題】コードクローンの影響を考慮してモジュールのバグ混入確率の計算を可能とする。【解決手段】バグ混入確率計算プログラムは、プログラムの改版前のソースコードと、プログラムの改版後のソースコードとのそれぞれから、プログラムを構成するモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を抽出する抽出部と、改版前に係るモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報と、改版前におけるモジュールごとのバグの有無とに基づいて、予測モデルを導出する予測モデル導出部１３と、改版後に係るモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を予測モデルに入力して、バグ混入確率の予測値をモジュールごとに計算する予測値計算部１４、としてバグモジュール予測装置１０を機能させる。【選択図】図３
2017224185.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの改版前のソースコードと、前記プログラムの改版後のソースコードとのそれぞれから、前記プログラムを構成するモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を抽出する抽出部と、
前記改版前に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報と、前記改版前における前記モジュールごとのバグの有無に基づいて、予測モデルを導出する導出部と、
前記改版後に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を前記予測モデルに入力して、バグ混入確率の予測値を前記モジュールごとに計算する計算部、
としてコンピュータを機能させることを特徴とするバグ混入確率計算プログラム。
【請求項２】
前記改版前におけるバグと前記モジュールとの対応情報に基づいて、前記モジュールごとにバグ数とバグの有無とを集計する集計部を有し、
前記導出部は、前記集計部によって集計されたバグ数に基づいて、前記予測モデルを導出する、
ことを特徴とする請求項１記載のバグ混入確率計算プログラム。
【請求項３】
前記導出部は、回帰モデルの機械学習に基づいて、前記予測モデルを導出する、
ことを特徴とする請求項１又は２記載のバグ混入確率計算プログラム。
【請求項４】
前記導出部は、前記改版前に係る第１のモジュールの静的メトリクス情報、コードクローンメトリクス情報、及びバグの有無に基づいて前記予測モデルの候補を導出し、前記候補に対して前記改版前に係る前記第１のモジュールとは異なる第２のモジュールの静的メトリクス情報、コードクローンメトリクス情報を前記候補に入力して、当該候補の妥当性を検証する、
ことを特徴とする請求項１乃至３いずれか一項記載のバグ混入確率計算プログラム。
【請求項５】
プログラムの改版前のソースコードと、前記プログラムの改版後のソースコードとのそれぞれから、前記プログラムを構成するモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を抽出する抽出手順と、
前記改版前に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報と、前記改版前における前記モジュールごとのバグの有無とに基づいて、予測モデルを導出する導出手順と、
前記改版後に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を前記予測モデルに入力して、バグ混入確率の予測値を前記モジュールごとに計算する計算手順と、
をコンピュータが実行することを特徴とするバグ混入確率計算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バグ混入確率計算プログラム及びバグ混入確率計算方法に関する。
【背景技術】
【０００２】
情報システムが経済・社会の様々な分野で必要不可欠なものとなっている現在、信頼性の高いソフトウェア開発に対する要求が高まっている。信頼性の高いソフトウェアを開発するためには、ソフトウェア品質を定量的に評価し、開発途上の早い段階でバグを摘出することが、当該ソフトウェアを用いたサービスの開始の判断を適切に実施するためにも不可欠である。
【０００３】
開発途上の残存バグを推定する方法として広く利用されているのは、Ｆａｕｌｔ−Ｐｒｏｎｅ分析技術である。Ｆａｕｌｔ−Ｐｒｏｎｅ分析技術は、主に、自プログラムのソースコードから得られる情報から、バグが混入している可能性の高いモジュールを予測する技術である。特にテスト工程前にＦａｕｌｔ−Ｐｒｏｎｅ分析技術を適用してバグモジュールを予測して、品質リスクの高いモジュールにテスト稼働を集中させるなどの対策を講じることにより、品質を向上させることができる。
【０００４】
バグモジュール予測技術では、基本的に以下の方法を利用して予測モデルの構築が行われる。
（１）過去のバージョンのソースコードから得られるメトリクス情報及びバグ情報から、メトリクス値とバグ情報との関係をロジスティック回帰やランダムフォレスト等の機械学習技術を用いて分析し、その関係から予測モデルを構築する。次に、予測対象バージョンのメトリクス情報に予測モデルを適用し、バグモジュール予測を行う。
（２）ソースコードから得られるメトリクス情報には、ソースコードの構造の複雑さに関連があると考えられているプログラム行数、サイクロマチック数などの静的メトリクスが用いられている。これらの静的メトリクスは、例えば、市販ツールであるテクマトリクス社の「Ｕｎｄｅｒｓｔａｎｄ」メトリクス計測ツールを用いることにより、容易にメトリクス値を収集することができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「Understand −ソースコード解析ツール−」、［online］、［平成２８年４月７日検索］、インターネット＜https://www.techmatrix.co.jp/quality/understand/function/metrics.html＞
【非特許文献２】「CCFinderホームページ」、［online］、［平成２８年４月７日検索］、インターネット＜http://www.ccfinder.net/ccfinderx-j.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記（２）の方法は、Ｆａｕｌｔ−ｐｒｏｎｅモジュール（バグ混入確率の高いモジュール）を予測するための予測モデルの説明変数に、プログラム構造の複雑さを表す静的な複雑さメトリクス（ソースコード行数、サイクロマチック数等）を入力して予測モデルを構築している。
【０００７】
しかしながら、近年、ソフトウェア開発は既存プログラムに対して機能を追加変更する保守型開発が主流となってきた。保守型開発では、既存機能のコピーアンドペーストにより重複コードの追加変更が繰り返され、コードクローンが大量に発生してプログラム品質に影響を与える。このコードクローンによるバグモジュールへの影響は、静的メトリクスでは把握することが困難である。
【０００８】
本発明は、上記の点に鑑みてなされたものであって、コードクローンの影響を考慮してモジュールのバグ混入確率の計算を可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
そこで上記課題を解決するため、バグ混入確率計算プログラムは、プログラムの改版前のソースコードと、前記プログラムの改版後のソースコードとのそれぞれから、前記プログラムを構成するモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を抽出する抽出部と、前記改版前に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報と、前記改版前における前記モジュールごとのバグの有無とに基づいて、予測モデルを導出する導出部と、前記改版後に係る前記モジュールごとの静的メトリクス情報及びコードクローンメトリクス情報を前記予測モデルに入力して、バグ混入確率の予測値を前記モジュールごとに計算する計算部、としてコンピュータを機能させる。
【発明の効果】
【００１０】
コードクローンの影響を考慮してモジュールのバグ混入確率の計算を可能とすることができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態の概要を説明するための図である。
【図２】本発明の実施の形態におけるバグモジュール予測装置のハードウェア構成例を示す図である。
【図３】本発明の実施の形態におけるバグモジュール予測装置の機能構成例を示す図である。
【図４】モジュールごとのバグ情報の集計処理の処理手順の一例を説明するためのフローチャートである。
【図５】メトリクス情報の取得処理の処理手順の一例を説明するためのフローチャートである。
【図６】予測情報記憶部に記憶される情報の構成例を示す図である。
【図７】予測モデルの導出処理の処理手順の一例を説明するためのフローチャートである。
【図８】予測モデル導出用データの学習用データと検証用データへの分割の一例を説明するための図である。
【図９】予測モデルの一例を示す図である。
【図１０】最新バージョンに関するモジュールごとのバグ混入確率の予測値の導出処理の処理手順の一例を説明するためのフローチャートである。
【図１１】予測結果の出力処理の処理手順の一例を説明するためのフローチャートである。
【図１２】予測結果の出力例を示す図である。
【図１３】バグ混入確率が高いモジュールから順にテストを行った場合の効果を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態の概要を説明するための図である。図１の上段には、１以上のモジュールから構成されるプログラムの改版後のバージョン（以下、単に「最新バージョン」という。）の開発工程が示されている。修正工程において、当該プログラムの改版前のバージョン（以下、単に「過去バージョン」という。）のソースコードが修正され、変更後ソースコード（最新バージョンのソースコード）が生成される。モジュールとは、例えば、関数又はクラス等によって区別される、プログラムの構成単位である。
【００１３】
一方、図１の下段には、本実施の形態の予測モデル構築方法及びバグモジュール予測方法が示されている。
【００１４】
予測モデル構築方法では、過去バージョンのバグ情報と、当該過去バージョンのソースコードから得られるソフトウェアメトリクスとの２つの情報を入力とした機械学習分析手法によって予測モデルが導出される。バグ情報とは、バグごとに、当該バグがいずれのモジュールのバグであったのかを示す情報をいう。ソフトウェアメトリクスとは、静的メトリクス情報とコードクローンメトリクス情報とを含む情報である。静的メトリクス情報とは、例えば、プログラム行数、サイクロマチック数等を含む情報である。コードクローンメトリクス情報とは、例えば、ソースコードにおけるコードクローンの行数、コードクローンの割合等を示す情報である。
【００１５】
バグモジュール予測方法では、導出された予測モデルに対して、変更後ソースコードから得られる、モジュールごとの静的メトリクス情報とコードクローンメトリクス情報を入力することで、最新バージョンのモジュールごとのバグ混入確率の予測値が得られる。バグ混入確率は、モジュールにバグが含まれている確率（又は可能性の大きさ）を示す指標である。モジュールごとのバグ混入確率の予測値に基づいて、利用者は、バグが含まれている可能性が高いモジュールについて、修正確認テストや回帰テストを重点的に行うことで、早期にバグを摘出することができる。
【００１６】
このような予測モデル構築方法及びバグモジュール予測方法を実現するバグモジュール予測装置１０について説明する。図２は、本発明の実施の形態におけるバグモジュール予測装置のハードウェア構成例を示す図である。図２のバグモジュール予測装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、インタフェース装置１０５、表示装置１０６、及び入力装置１０７等を有する。
【００１７】
バグモジュール予測装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記憶した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１８】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってバグモジュール予測装置１０に係る機能を実現する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１０６はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０７はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。
【００１９】
図３は、本発明の実施の形態におけるバグモジュール予測装置の機能構成例を示す図である。図３において、バグモジュール予測装置１０は、バグ情報解析部１１、ソースコード解析部１２、予測モデル導出部１３、予測値計算部１４、及び予測結果出力部１５等を有する。これら各部は、バグモジュール予測装置１０にインストールされた１以上のプログラムが、ＣＰＵ１０４に実行させる処理により実現される。バグモジュール予測装置１０は、また、予測情報記憶部１１１及び予測モデル記憶部１１２等を利用する。これら各記憶部は、例えば、補助記憶装置１０２若しくはメモリ装置１０３、又はバグモジュール予測装置１０にネットワークを介して接続可能な記憶装置等を用いて実現可能である。なお、バグ情報解析部１１、ソースコード解析部１２、予測モデル導出部１３、及び予測情報記憶部１１１は、予測モデル構築方法に関する構成要素である。予測値計算部１４、予測結果出力部１５、及び予測モデル記憶部１１２は、バグモジュール予測方法に関する構成要素である。
【００２０】
バグ情報解析部１１は、開発データリポジトリ装置２０に記憶されている、過去バージョンのバグ情報に基づいて、モジュールごと（モジュール単位）のバグ数を集計し、集計結果（モジュールごとのバグの有無）を予測情報記憶部１１１に記憶する。
【００２１】
なお、開発データリポジトリ装置２０は、最新バージョン及び過去バージョンのそれぞれのソースコードや、過去バージョンのバグ情報等が記憶されている装置であり、例えば、ネットワークを介してバグモジュール予測装置１０に接続される。なお、開発データリポジトリ装置２０に相当する記憶部を、バグモジュール予測装置１０が有していてもよい。
【００２２】
ソースコード解析部１２は、開発データリポジトリ装置２０に記憶されている、最新バージョン及び過去バージョンのそれぞれのソースコードの静的メトリクス情報及びコードクローンメトリクス情報を、モジュールごとに測定（又は抽出）し、測定結果である静的メトリクス情報及びコードクローンメトリクス情報を予測情報記憶部１１１に記憶する。なお、バージョンごとに、モジュールの種類やモジュール数が異なってもよい。
【００２３】
ソースコードの静的メトリクス情報は、公知のソフトウェアメトリクス計測技術を利用して測定することができる（例えば、非特許文献１等）。また、ソースコードのコードクローンメトリクス情報は、公知のコードクローン分析技術を利用して測定することができる（例えば、非特許文献２等）。
【００２４】
予測情報記憶部１１１は、バグ情報解析部１１の出力情報である、過去バージョンのモジュールごとのバグの有無と、ソースコード解析部１２の出力情報である、各バージョンのモジュールごとの静的メトリクス情報及びコードクローンメトリクス情報等を記憶する。
【００２５】
予測モデル導出部１３は、予測情報記憶部１１１に記憶されている過去バージョンのモジュールごとのバグの有無、静的メトリクス情報、及びコードクローンメトリクス情報に基づいて、機械学習の技術を適用して予測モデルを導出する。当該予測モデルは、静的メトリクス情報及びコードクローンメトリクス情報を入力とし、バグ混入確率を出力するモデルである。予測モデル導出部１３は、導出した予測モデルを、予測モデル記憶部１１２に記憶する。
【００２６】
機械学習は、入力された大量のデータセットから得られる傾向を導出する技術である。機械学習については、これまでに多数のモデルが提案されており、バグ混入確率のような数値を求める回帰モデルと、バグの有無のような場合分けを求める分類モデルが存在する。本実施の形態では、バグ混入確率を求める必要があるため、回帰モデルが利用される。回帰の機械学習モデルとしては、例えば、ロジスティック回帰モデルやランダムフォレストモデルが知られている。また、ロジスティック回帰モデル、ランダムフォレストモデルのような機械学習モデルは、オープンソースとして配布されている統計解析ツールＲに実装されているので、容易に機械学習によるモデル化が可能である。
【００２７】
予測モデル記憶部１１２は、予測モデル導出部１３によって導出された予測モデルを記憶する。予測モデルは、回帰式の形式で記憶される。
【００２８】
予測値計算部１４は、予測モデル記憶部１１２に記憶された予測モデル（回帰式）に対し、予測情報記憶部１１１に記憶された最新バージョンの静的メトリクス情報及びコードクローンメトリクス情報をモジュールごとに入力し、バグ混入確率をモジュールごとに計算する。
【００２９】
予測結果出力部１５は、予測値計算部１４によって計算されたモジュールごとのバグ混入確率に基づく情報を、表形式又はグラフ形式等で出力する。利用者は、品質リスクが高い（バグ混入確率が高い）と予測されたモジュールについて、テストを強化したり、テストの実施時期を早めたりする。
【００３０】
予測モデル構築方法に関する各処理手順について説明する。
【００３１】
図４は、モジュールごとのバグ情報の集計処理の処理手順の一例を説明するためのフローチャートである。
【００３２】
ステップＳ１０１において、バグ情報解析部１１は、過去バージョンに関するバグ情報を開発データリポジトリ装置２０から取得する。ここで、過去バージョンとは、最新バージョンが、Ｎ＋１番目のバージョンであれば、Ｎ番目のバージョンである。以下、当該過去バージョンを「バージョンＮ」という。
【００３３】
続いて、バグ情報解析部１１は、バージョンＮのモジュール情報を、ソースコード解析部１２から取得する（Ｓ１０２）。モジュール情報とは、どのようなモジュールが含まれているのかを示す情報である。例えば、モジュール名（モジュールの識別情報）の集合が、モジュール情報である。なお、ソースコード解析部１２は、開発データリポジトリ装置２０に記憶されている、バージョンＮのソースコードを解析することにより、モジュール情報を抽出する。
【００３４】
続いて、バグ情報解析部１１は、バグ情報に含まれている各バグを、モジュール別に分類する（Ｓ１０３）。バグ情報には、発見されたバグごとに、バグの識別番号（以下、「バグ番号」という。）と、当該バグを含んでいたモジュールのモジュール名との対応情報が含まれている。ステップＳ１０３では、モジュールごとに、モジュール名に対して当該モジュールに含まれていたバグのバグ番号が対応付けられる。
【００３５】
続いて、バグ情報解析部１１は、モジュールごとに、バグ数を集計する（Ｓ１０４）。或るモジュールのバグ数は、当該モジュールのモジュール名に対してステップＳ１０３において対応付けられたバグ番号の数を集計することで得られる。
【００３６】
続いて、バグ情報解析部１１は、バグ数が１件以上の各モジュールには、バグが有ることを表す「１」を対応付け、バグ数が０件である各モジュールには、バグが無いことを表す「０」を対応付ける（Ｓ１０５）。
【００３７】
続いて、バグ情報解析部１１は、モジュールごとに、集計結果であるバグの有無を、当該モジュールのモジュール名に関連付けて予測情報記憶部１１１に記憶する（Ｓ１０６）。
【００３８】
図５は、メトリクス情報の取得処理の処理手順の一例を説明するためのフローチャートである。図５の処理手順は、バージョンＮ及び最新バージョン（バージョンＮ＋１）のそれぞれについて実行される。以下、処理対象とされているバージョン（バージョンＮ又は最新バージョン）を、「対象バージョン」という。
【００３９】
ステップＳ１１１において、ソースコード解析部１２は、対象バージョンのソースコードを開発データリポジトリ装置２０から取得する。
【００４０】
続いて、ソースコード解析部１２は、ソースコードを解析して、静的メトリクス情報をモジュールごとに測定（抽出）する（Ｓ１１２）。続いて、ソースコード解析部１２は、モジュールごとに、測定結果（静的メトリクス情報）を、当該モジュールのモジュール名に関連付けて予測情報記憶部１１１に記憶する（Ｓ１１３）。
【００４１】
続いて、ソースコード解析部１２は、ソースコードを解析して、コードクローンメトリクス情報をモジュールごとに測定（抽出）する（Ｓ１１４）。続いて、ソースコード解析部１２は、モジュールごとに、測定結果（コードクローンメトリクス情報）を、当該モジュールのモジュール名に関連付けて予測情報記憶部１１１に記憶する（Ｓ１１４）。
【００４２】
図６は、予測情報記憶部に記憶される情報の構成例を示す図である。図６において、予測モデル導出用データＴ１は、バージョンＮに関する図４及び図５の実行結果が記憶されるテーブルである。図６に示されるように、予測モデル導出用データＴ１には、モジュールごとに、モジュール名、静的メトリクス情報、コードクローンメトリクス情報、バグ数、及びバグの有無が記憶される。
【００４３】
一方、予測用データＴ２は、最新バージョンに関する図５の実行結果が記憶されるテーブルである。図６に示されるように、予測用データＴ２には、モジュールごとに、モジュール名、静的メトリクス情報、及びコードクローンメトリクス情報が記憶される。
【００４４】
なお、図６には、バージョンＮのモジュール構成と、最新バージョンのモジュール構成とが同じである例が示されているが、それぞれのモジュール構成は、異なっていてもよい。
【００４５】
また、バージョンＮより前のバージョンに関して、予測モデル導出用データＴ１と同様のテーブルが予測情報記憶部１１１に蓄積されていてもよい。例えば、バージョンＮが最新バージョンだった際に、バージョンＮ−１に関して図４及び図５の処理手順が実行されることにより得られた情報が予測モデル導出用データＴ１に蓄積されていてもよい。
【００４６】
図７は、予測モデルの導出処理の処理手順の一例を説明するためのフローチャートである。
【００４７】
ステップＳ１２１において、予測モデル導出部１３は、予測情報記憶部１１１に記憶されている予測モデル導出用データＴ１を取得する。続いて、予測モデル導出部１３は、予測モデル導出用データＴ１のレコード群を、学習用データと、検証用データとに任意に分割する。Ｌｅａｖｅ−ｏｎｅ−ｏｕｔ交差検証を行うためである。したがって、いずれか一つのレコードが検証用データとされ、残りの３つのレコードが学習用データとされる。
【００４８】
図８は、予測モデル導出用データの学習用データと検証用データへの分割の一例を説明するための図である。図８の例では、モジュールＡ、モジュールＢ、及びモジュールＣに関する３レコードが学習用データとされ、モジュールＤに関する１レコードが検証用データとされた例が示されている。
【００４９】
続いて、予測モデル導出部１３は、学習用データを入力として、機械学習に基づいて、予測モデルの候補（以下、「予測モデル候補」という。）を導出する（Ｓ１２３）。ここで導出される予測モデルは、最終的に予測モデルとして採用されるとは限らないため、説明の便宜上「候補」が付加されている。
【００５０】
続いて、予測モデル導出部１３は、予測モデル候補に検証用データを入力として、バグ混入確率の予測値を計算する（Ｓ１２４）。すなわち、予測モデル候補の妥当性が検証される。
【００５１】
続いて、予測モデル導出部１３は、計算された予測値と、検証用データの実績値との差分の絶対値を予測誤差として計算する（Ｓ１２５）。なお、実績値は、０又は１（１００％）である。すなわち、検証用データのバグ数が０であれば、バグ混入確率の実績値は、バグが無いことを示す０（０％）であり、検証用データのバグ数が１以上であれば、バグ混入確率の実績値は、１（１００％）である。一方、予測値は、中間の値をとりうる。
【００５２】
続いて、予測モデル導出部１３は、当該予測モデル候補に対応付けて、当該予測誤差をメモリ装置１０３又は補助記憶装置１０２に記憶する（Ｓ１２６）。
【００５３】
続いて、予測モデル導出部１３は、予測モデル導出用データＴ１の分割について、全ての組み合わせを実行したか否かを判定する（Ｓ１２７）。すなわち、予測モデル導出用データＴ１の４つのレコードのそれぞれが、検証用データとして利用されたか否かが判定される。本実値の形態において、予測モデル導出用データＴ１は４つのレコードを含むため、ステップＳ１２２以降が４回実行されることになる。
【００５４】
全ての組み合わせが実行されていない場合（Ｓ１２７でＮｏ）、未実行の組み合わせに関してステップＳ１２２以降が実行される。全ての組合せが実行済みであれば（Ｓ１２７でＹｅｓ）、予測モデル導出部１３は、ステップＳ１２６において記憶された予測モデル候補の中で、対応付けられている予測誤差が最小である予測モデル候補を、予測モデルとして選択し、当該予測モデルを予測モデル記憶部１１２に記憶する（Ｓ１２８）。
【００５５】
図９は、予測モデルの一例を示す図である。図９には、バージョンＮに関して一つの予測モデルが予測モデル記憶部１１２に記憶されている状態が示されている。また、予測モデルとして、回帰式（１）が示されている。回帰式（１）は、ロジスティック回帰モデルにより構築された予測モデルの一例である。
【００５６】
なお、回帰式（１）において、Ｐは、バグ混入確率、ｘｉは説明変数として選択したメトリクス（静的メトリクス情報のパラメータ又はコードクローンメトリクス情報のパラメータ）、ｃｉは標準化偏回帰係数を示す。
【００５７】
なお、予測モデル記憶部１１２には、バージョンＮより前のバージョンに関して過去に導出された予測モデルが蓄積されていてもよい。
【００５８】
次に、バグモジュール予測方法に関する処理手順について説明する。
【００５９】
図１０は、最新バージョンに関するモジュールごとのバグ混入確率の予測値の導出処理の処理手順の一例を説明するためのフローチャートである。
【００６０】
ステップＳ１３１において、予測値計算部１４は、予測用データＴ２を予測情報記憶部１１１（図６）から取得する。続いて、予測値計算部１４は、予測モデル（回帰式（１））を予測モデル記憶部１１２から取得する（Ｓ１３２）。続いて、予測値計算部１４は、予測用データＴ２のレコードごと（すなわち、モジュールごと）に、当該レコードの静的メトリクス情報及びコードクローンメトリクス情報を予測モデルに入力して、当該モジュールのバグ混入確率を計算する（Ｓ１３３）。図６の例によれば、４つのモジュールが有るため、４回の計算が行われ、４つのバグ混入確率が得られる。予測値計算部１４は、各計算結果（バグ混入確率）を、それぞれのモジュール名に対応付けて、メモリ装置１０３又は補助記憶装置１０２に記憶する。
【００６１】
図１１は、予測結果の出力処理の処理手順の一例を説明するためのフローチャートである。
【００６２】
ステップＳ１４１において、予測結果出力部１５は、予測値計算部１４によって計算されたモジュールごとのバグ混入確率（モジュール名及びバグ混入確率の組）をメモリ装置１０３又は補助記憶装置１０２から取得する。
【００６３】
続いて、予測結果出力部１５は、モジュール名及びバグ混入確率の組を、バグ混入確率の降順にソートする（Ｓ１４２）。続いて、予測結果出力部１５は、縦軸をバグ混入確率、横軸をソート結果のモジュール名の並びとする座標に対して、バグ混入確率がプロットされたグラフを、例えば、表示装置１０６に描画する（Ｓ１４３）。
【００６４】
図１２は、予測結果の出力例を示す図である。図１２には、縦軸をバグ混入確率とし、横軸をモジュールとする座標に、各モジュールのバグ混入確率がプロットされたグラフの描画例が示されている。図１２においては、便宜上、横軸がモジュール数とされている。なお、グラフの代わりに表形式によってモジュールごとのバグ混入確率が出力されてもよい。
【００６５】
続いて、予測結果出力部１５は、バグの有無を判定するための閾値αを、当該グラフに描画する（Ｓ１４４）。図１２では、閾値αが、約０．１５である例が示されている。なお、閾値αは、経験等に基づいて適宜設定されればよい。
【００６６】
続いて、予測結果出力部１５は、閾値αより大きいバグ混入確率を判定し、当該バグ混入確率に対応するモジュール名を出力する（Ｓ１４５）。
【００６７】
利用者は、例えば、出力されたモジュール名に係るモジュールについて、バグ混入確率が高いものから順にテストを行うことで、効率的にバグを摘出することができる。
【００６８】
図１３は、バグ混入確率が高いモジュールから順にテストを行った場合の効果を説明するための図である。図１３には、縦軸が累積バグ比率（累積バグモジュール数／全バグモジュール数）であり、横軸がテストを行ったモジュール数であるグラフが示されている。
【００６９】
直線Ｌ１は、バグ混入確率によって順位付けせずにテストした場合の累積バグ比率（累積バグ発見率）の推移を示す。この場合、テストするモジュール数に比例して累積バグ比率は単調増加する。
【００７０】
一方、折れ線Ｌ２は、バグ混入確率の予測値の高いモジュールから順にテストした場合の累積バグ比率（累積バグ発見率）の推移を示す。折れ線Ｌ２では、早期の段階で、累積バグ比率が高くなっていることを示す。すなわち、図１３の網掛け部分が示すように、バグ混入確率の予測値の高いモジュールから順にテストした場合、早期にバグを摘出することができる。
【００７１】
上述したように、本実施の形態によれば、説明変数候補であるメトリクスに、従来からのソースコードの構造の複雑さに起因するメトリクスに加え、機能追加開発型開発である保守型開発において問題となっている、機能のコピーアンドペーストに起因するコードクローン情報を加えることにより、保守型開発で問題となるコードクローンによる品質への影響を加味したバグを含む予測モデルの構築が可能とされている。
【００７２】
コードクローンの影響を考慮してモジュールのバグ混入確率の計算を可能とすることができる。
【００７３】
その結果、図１３に示したように、バグ混入確率が高いモジュールに対して重点的にテスト工数を割り当てることができ、信頼性の確保及び無駄なテスト工数の削減の両立を期待することができる。
【００７４】
すなわち、ソフトウェア開発において既存のソフトウェアの改良により開発を進める際において、改良に伴い、一定の品質を担保するために、どの程度の規模の検証をするべきかの指標を得ることができ、必要以上の検証の実施や、必要であるにも拘わらず検証工数が小さくなってしまう、といったことを回避することができる。
【００７５】
なお、本実施の形態において、バグモジュール予測装置１０は、バグ混入確率計算装置の一例である。ソースコード解析部１２は、抽出部の一例である。予測モデル導出部１３は、導出部の一例である。予測値計算部１４は、計算部の一例である。バグ情報解析部１１は、集計部の一例である。
【００７６】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００７７】
１０          バグモジュール予測装置
１１          バグ情報解析部
１２          ソースコード解析部
１３          予測モデル導出部
１４          予測値計算部
１５          予測結果出力部
２０          開発データリポジトリ装置
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        表示装置
１０７        入力装置
１１１        予測情報記憶部
１１２        予測モデル記憶部
Ｂ            バス
【図１】
2017224185.tif 000003
【図２】
2017224185.tif 000004
【図３】
2017224185.tif 000005
【図４】
2017224185.tif 000006
【図５】
2017224185.tif 000007
【図６】
2017224185.tif 000008
【図７】
2017224185.tif 000009
【図８】
2017224185.tif 000010
【図９】
2017224185.tif 000011
【図１０】
2017224185.tif 000012
【図１１】
2017224185.tif 000013
【図１２】
2017224185.tif 000014
【図１３】
2017224185.tif 000015