Application of Code Clone Information to Fault-Prone Module Prediction

あらまし 本論文では,Fault-Proneモジュール予 測にコードクローン情報を用いた実験結果について述 べる.従来用いられてきた複雑度メトリックスのほか に,コードクローンに関するメトリックスも説明変数 に加えたロジスティック回帰分析により Fault-Prone モジュールを予測した.その結果,従来手法に比べて 予測精度が向上することを確認した. キーワード Fault-Prone,コードクローン,複雑 度メトリックス,ロジスティック回帰 1. ま え が き 高品質なソフトウェア作成のために,早期段階での 不具合(フォールト)を含みやすいモジュールの特定 が求められており,様々な研究が行われている [1], [3]. 一般的な Fault-Proneモジュールの予測手法では,ソ フトウェア保守性を評価するための複雑度メトリック スの値を説明変数として予測モデルを作成し,予測し たいモジュールに適用することが多い. 一方,近年ソフトウェアの保守性に影響を与える要 因として,コードクローン(ソースコード中の類似し たまたは同一のコード片の集合)が指摘されている. 更に,コードクローンに関するメトリックスと複雑度 メトリックスはそれぞれ保守性に関する異なる側面 を評価しているという報告もあるが [2],筆者らの知 る限り,コードクローン情報を用いた Fault-Proneモ ジュールの予測手法は提案されていない. そこで,本論文では複雑度メトリックスに加えて コードクローンに関するメトリックスも説明変数と したロジスティック回帰分析によって Fault-Proneモ ジュールの予測を試みた.対象としたのは複数社で共 同開発された中規模情報システムである. 2. 実 験 方 法 2. 1 対象プロジェクト概要 対象プロジェクトは,経済産業省の支援を受けて, COSE参加企業によって実施されたプローブ情報 システムの開発プロジェクトである [5].このプロジェ クトには以下の特徴がある. • 2か年度にわたったプロジェクトであり,新規開 発を行った 2005年度版と,保守や改良を行った 2006 年度版のデータが取得可能である. • 実装内容別に分類されたコンポーネントが存在 する.コンポーネントは一つ以上のファイルの集合で あり,すべてのファイルはいずれか一つのコンポーネ ントに属している. • フォールト情報はコンポーネントごとに記録さ れている.したがって,これらの記録を調べることで, 2005 年度,2006 年度に開発・保守されたモジュール ごとのフォールトの有無が把握できる. 上記の特徴から,本論文ではコンポーネントをモ ジュールとみなす.つまり Fault-Proneか否かの予測 はコンポーネントごとに行う.また,2005年度に開発 された 40モジュールの情報から予測モデルを作成し, 2006年度に開発・保守された 32モジュールに対して 適用を行う.なお,これらのモジュールは C/C++で 実装されたものである. 2. 2 複雑度メトリックス 計測可能な範囲でできるだけ一般的なメトリックス を選定した.具体的には次の五つである. • 関数ごとのサイクロマチック数 • ファイルごとのコード行数 • ファイルごとのコメント率 • 関数ごとの IFANIN(入力となるパラメータと グローバル変数の数) • 関数ごとの IFANOUT(出力するパラメータと グローバル変数の数) また,本データではおよそ 8割のモジュールがフォー ルトを含んでいるという特徴がある.このような場 合,一つでも複雑なファイルや関数があれば,そこに フォールトがある可能性が高いと思われる.よって, モジュールのメトリックス値は,そのモジュール内の ファイルや関数等ごとの計測値の最大値とした.なお, 計測には Understand for C++ [6]を用いた.