dcNavi:デバッグ支援のための グラフベース推薦システム 九州工業大学 塩塚大 九州大学 鵜林尚靖
概要 DCG また、プロジェクトの初期段階でデータが十分に無い場合を想定し、既存のリポジトリを活用した方法を提案します。 推薦 生成 関心事 見たことない 例外に直面! 例)同じ例外に関連した修正 例)APIの誤りやすい例 public class Property { public String readFile (String pathname) throws IOException { File file = new File(pathname); String val = null; FileReader fileReader = new FileReader(file) ; return val; val = br.readLine(); BufferedReader br = new BufferedReader(fileReader); } } public class Property { public String readFile (String pathname) throws IOException { String val = null; FileReader fileReader = new FileReader(file) ; File file = new File(pathname); BufferedReader br = new BufferedReader(fileReader); return val; val = br.readLine(); } } public class Property { public String readFile (String pathname) throws IOException { File file = new File(pathname); String val = null; FileReader fileReader = new FileReader(file) ; return val; val = br.readLine(); BufferedReader br = new BufferedReader(fileReader); } } プロジェクトXXXの リポジトリ プロジェクトXXXの リポジトリ APIの 使い方が間違ってる?! プロジェクトXXXの リポジトリ 推薦 生成 DCG 関心事 既存のリポジトリを活用! 他プロジェクトを活用! Debug Concern Graph 実行 生成 研究の概要を説明します。 デバッグをする際にはいろいろな問題に直面します。 例えば「見たことのない例外に直面して、修正方法が分からなかったり」あるいは「APIの正しい使い方が分からない」などです。 ここではそういった、頻繁に直面するような問題を関心事と呼んでいます。 本研究では、デバッグの際の知識・ノウハウを再利用することで、こういったよく起こる問題に応じた情報推薦をおこないます。 推薦を実現するために、テスト結果、プログラム要素、修正パターンを関連付けたデバッグ関心事グラフ(DCG)を提案します。 また、プロジェクトの初期段階でデータが十分に無い場合を想定し、既存のリポジトリを活用した方法を提案します。 TDD(テスト駆動開発) デバッグのノウハウの収集 ・テスト結果の取得 ・関連したプログラム要素の取得 ・修正パターンの取得
DCG デバッグ時のテスト結果、プログラム要素(クラス、メソッド、フィールド)、修正パターンの3情報を収集 テスト成功 ⇒ デバッグ終了 readFile のデバッグ :クラス :テスト結果 :メソッド :修正パターン diff-1 diff-2 バグ修正パターン(全27種) MC-DAP: メソッド呼出しのパラメータの変更 SQ-AROB: メソッド呼出しの追加 MC-DM:同一オブジェクトに対する呼び出すメソッドの変更 BufferedReader File Property PropertyTest Property File PropertyTest FileReader 修正パターン*: メソッド呼出の追加 exist readFile testReadFileFileNotExist testReadFile readLine DCGについて説明します。 DCGでは、テスト失敗をデバッグの開始ととらえ、その時点で関連していたクラス、メソッド、フィールドなどのプログラム要素を収集し、そして発生したテスト結果を保存します。 そして、なんらかの修正をした後、テストを再実行し成功したときを、デバッグの終了と判断します。 テスト失敗時点とテスト成功時点のファイルの編集の差分から、どういった修正をおこなったか、つまり修正パターンをもとめます。 修正パターンは、Toward an understanding of bug fix patternsという論文で提案されたものを使っています。 全部で27種類あり、代表的なものに、メソッド呼出しのパラメータの変更、メソッド呼出しの追加、呼び出すメソッドの変更などがあります。 とくにこの3パターンが、プログラマが間違えやすいと知られているので、DCGでもこの3パターンの誤りを支援の対象とします。 情報推薦の際にはこの修正パターンを軸におこないます。 DCGを活用することで、ある例外が発生した際にどのような修正をしたか、 あるAPIを利用する際に、どういった誤りをおかしやすいか、といったことの取得が容易となります。 readFile テスト成功 assertEquals testReadFileFileNotExist テスト成功 ⇒ デバッグ終了 テスト失敗 例外:FileNotFound *Pan, K., et al.: Toward an understanding of bug fix patterns. Empirical Software Engineering, pp.286-315, 2009. テスト成功 テスト失敗 ⇒ デバッグ開始
実験 準備.リポジトリからのDCG生成 実験.推薦量/推薦時間/推薦の質の確認 Eclipseプラグインで、Mylynに関連した9つのオープンソース 実験.推薦量/推薦時間/推薦の質の確認 上記で生成したDCGを利用 [実施環境] CPU: Atom N280(1.66GHz), RAM:1GB, OS:Windows XP 実験をおこないました。 DCG生成時間の確認を目的とし、EclipseプラグインでMylynに関連した9つのオープンソースで実施しました。 これがオープンソースの一覧です。 たとえば、下から4番目プロジェクトは、Eclipse上でMylynとプロジェクト管理ツールのRedmineを連携して使うためのプラグインです。 一番下のプロジェクトは、subversionをEclipseから使うためのプラグインがあります。 実験では、生成したDCGを利用して推薦量、推薦時間、および推薦の質を確認しました。 以上でポスターの概要紹介を終わります。興味が御有りの方はポスター展示の際におこしください。