dcNavi: デバッグ方法をアドバイス する関心事指向リポジトリナビゲータ

Slides:



Advertisements
Similar presentations
Trac と Eclipse の 便利な機能. プロジェクト管理システム: Trac 0. はじめに バージョン管理システム: Subversion 統合開発環境: Eclipse ・ Wiki による情報 管理 ・進捗状況の管理 ・プログラムの作 成 ・リポジトリに データを集める.
Advertisements

山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Struts VS SAStruts ・ STRUTS と SAStruts を比較します。. Struts のメリット1 STRUTS はディファクトスタンダード。 ↓ プログラマがたくさんいる。 ライブラリ、ツールがたくさんある。 ビジネス案件が豊富。 書籍などの情報元が豊富。
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
IO - 入出力 小西 亨.
組み合わせて実施された リファクタリングの調査
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
プログラミング基礎I(再) 山元進.
情報伝播によるオブジェクト指向プログラム理解支援の提案
haXeでオリジナルコンポーネント作り WCAN mini Vol 小笠原
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コーディングにおける 細粒度作業履歴を用いた 手戻り支援ツールの検討
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
類似するコーディングパターンの 利用状況調査ツールの提案
ソードコードの編集に基づいた コードクローンの分類とその分析システム
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗号技術 ~JAVAプログラム③~ (7週目)
動的スライスを用いた バグ修正前後の実行系列の比較
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
リファクタリング中に生じる コンパイルエラーの自動解消手法
デバッグ支援のための グラフベース推薦システム
デバッギングのための 関心事指向推薦システム
EclipseでWekaのAPIを呼び出す
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
実行時情報に基づく OSカーネルのコンフィグ最小化
Javaプログラムの変更を支援する 影響波及解析システム
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
ソフトウェア制作論 平成30年11月21日.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
オープンソースリポジトリにおける バグ修正履歴の再利用性評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コーディングパターンの あいまい検索の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
複数のリポジトリを統合できる バージョン管理システムの提案と試作
仮想マシンと物理マシンを一元管理するための仮想AMT
設計情報の再利用を目的とした UML図の自動推薦ツール
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
dcNavi:デバッグ支援のための グラフベース推薦システム
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
蓄積されたオブジェクトの動作履歴を用いた 実行履歴削減手法の提案
プログラム分散化のための アスペクト指向言語
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
統合開発環境のための プログラミング言語拡張 フレームワーク
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
プログラム理解のための 付加注釈 DocumentTag の提案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

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)を提案します。 DCGを活用することで、ある例外が発生した際にどのような修正をしたか、 あるAPIを利用する際に、どういった誤りをおかしやすいか、といったことの検索が容易となります。 また、プロジェクトの初期段階でデータが十分に無い場合を想定し、他のプロジェクトのリポジトリを活用した方法を提案します。 TDD(テスト駆動開発) デバッグのノウハウの収集  ・テスト結果の取得  ・関連したプログラム要素の取得  ・修正パターンの取得

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.286-315, 2009. テスト成功 テスト失敗 ⇒ デバッグ開始

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.159-168, 2005.

実験 準備.リポジトリからの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を利用して推薦量、推薦時間、および推薦の質を確認しました。 具体的には、リポジトリからバグを含んでいたメソッドを取出し、どういった修正例が推薦できたか確認しました。 以上でポスターの概要紹介を終わります。実験の詳細など興味が御有りの方はポスター展示の際におこしください。