Download presentation
Presentation is loading. Please wait.
1
dcNavi: デバッグ方法をアドバイス する関心事指向リポジトリナビゲータ
九州工業大学 塩塚大 九州大学 鵜林尚靖
2
研究の概要 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)を提案します。 DCGを活用することで、ある例外が発生した際にどのような修正をしたか、 あるAPIを利用する際に、どういった誤りをおかしやすいか、といったことの検索が容易となります。 また、プロジェクトの初期段階でデータが十分に無い場合を想定し、他のプロジェクトのリポジトリを活用した方法を提案します。 TDD(テスト駆動開発) デバッグのノウハウの収集 ・テスト結果の取得 ・関連したプログラム要素の取得 ・修正パターンの取得
3
DCG デバッグ時のテスト結果、プログラム要素(クラス、メソッド、フィールド)、修正パターンの3情報を収集 バグ修正パターン(全27種)
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パターンの誤りを支援の対象とします。 情報推薦の際にはこの修正パターンを軸におこないます。 readFile テスト成功 assertEquals testReadFileFileNotExist テスト成功 ⇒ デバッグ終了 テスト失敗 例外:FileNotFound *Pan, K., et al.: Toward an understanding of bug fix patterns. Empirical Software Engineering, pp , 2009. テスト成功 テスト失敗 ⇒ デバッグ開始
4
dcNavi テスト結果収集:JUnitを利用 修正パターン収集:diff + ASTParserを利用
統合開発環境Eclipseのプラグインとして作成 機能1.デバッグ活動を監視しDCGを自動生成 機能2.既存のSVNなどのバージョン管理システムからDCGを生成 機能3.関連情報を推薦 テスト結果収集:JUnitを利用 修正パターン収集:diff + ASTParserを利用 関連したメソッド、フィールド、クラスの収集:Mylyn*を利用 Eclipse上でのファイル閲覧、編集、カーソル位置などを監視し作業(タスク)に関連した要素を記録. EclipseのプラグインとしてdcNaviというツールを作成しました。 本ツールは、1.デバッグ活動を監視しDCGを自動生成、2.既存のSVNなどのバージョン管理システムからのDCGを生成、3.関連情報を推薦、の3機能を持ちます。 関連情報の推薦機能については、予稿集に利用例を2つ載せています。 また、リポジトリからのDCGの生成方法については、興味のある方はポスター展示の際にお聞きください。 *Kersten, M. and Murphy, G. C.: Mylar: a degree-of-interest model for IDEs. In AOSD 2005, pp , 2005.
5
実験 準備.リポジトリからのDCG生成 実験.推薦量/推薦時間/推薦の質の確認
Eclipseプラグインで、Mylynに関連した9つのオープンソース 実験.推薦量/推薦時間/推薦の質の確認 上記で生成したDCGを利用 [実施環境] CPU: Atom N280(1.66GHz), RAM:1GB, OS:Windows XP 実験をおこないました。 まずDCG生成時間の確認を目的とし、EclipseプラグインでMylynというプラグインに関連した9つのオープンソースで実施しました。 これがオープンソースの一覧です。 たとえば、下から4番目のプロジェクトは、Eclipse上でMylynとプロジェクト管理ツールのRedmineを連携して使うためのプラグインです。 また一番下のプロジェクトはsubclipseという、subversionをEclipseから使うためのプラグインです。 こういったプラグインのプロジェクトで実験をおこないました。 つづいて、生成したDCGを利用して推薦量、推薦時間、および推薦の質を確認しました。 具体的には、リポジトリからバグを含んでいたメソッドを取出し、どういった修正例が推薦できたか確認しました。 以上でポスターの概要紹介を終わります。実験の詳細など興味が御有りの方はポスター展示の際におこしください。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.