プログラム理解のための 付加注釈 DocumentTag の提案

Slides:



Advertisements
Similar presentations
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
blanco Framework ご紹介 DB版
シーケンス図の生成のための実行履歴圧縮手法
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
JPAを利用した RESTful Webサービスの開発
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
変数間データフローグラフを用いた ソースコード間の移動支援
変数のスコープの設計判断能力 を育成するプログラミング教育
AspectScope によるアスペクトとクラスのつながりの視覚化
ユースケース図2-4~ FM11012 中島拓也.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
9.1 DOMの概要 9.2 DOMプログラミングの基礎 9.3 DOMのプログラミング例
オブジェクト指向プログラムのための 動的結合メトリクスの評価
類似するコーディングパターンの 利用状況調査ツールの提案
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
バイトコードを単位とするJavaスライスシステムの試作
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア工学 知能情報学部 新田直也.
同期処理のモジュール化を 可能にする アスペクト指向言語
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
プログラム分散化のための アスペクト指向言語
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
統合開発環境のための プログラミング言語拡張 フレームワーク
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Presentation transcript:

プログラム理解のための 付加注釈 DocumentTag の提案 ○田中昌弘,石尾隆,井上克郎(大阪大)

発表概要 付加注釈DocumentTagの提案・実装 発表の流れ プログラム中の識別子に対して記述する注釈 注釈伝播 関連する識別子にも同一の注釈を付加 プログラム理解の作業効率を向上 発表の流れ 背景 DocumentTag・注釈伝播の提案 実験・評価

[1] ジョシュア・ブロック(著)、柴田芳樹(訳) 『Effective Java 第2版』 背景 オブジェクト指向プログラミング [1] デザインパターンなどを用いた効果的な導入 熟練者がまとめたオブジェクト指向プログミングの向けの設計上の問題解決法のカタログ モジュール性の向上 実装の詳細に依存しないモジュール間の処理が可能 再利用性の向上 クラスを追加する機能拡張が容易 [1] ジョシュア・ブロック(著)、柴田芳樹(訳) 『Effective Java 第2版』 ピアソン・エデュケーション、2008年

問題点 ソースコード上の検索・移動の負担が増大 識別子の役割を理解するには,関連する識別子を調べる必要がある 変数の型となるクラス メソッドの戻り値・引数・例外の型となるクラス 親クラスとなるクラス 複数のクラス間を移動・読解する必要がある [2] ツールによる支援が必要 [2] [2] N. Wilde et al., Maintenance Support for Object-Oriented Programs. IEEE TSE, Vol.18, No.12, pp.1038-1044, 1992.

付加注釈DocumentTagの提案 識別子に対して開発者が記述する注釈 注釈伝播により関連する注釈が参照可能 変数,メソッド,クラス 識別子の仕様や使用例,バグレポートなどを記述 注釈伝播により関連する注釈が参照可能 クラス,インタフェース, 列挙型,アノテーション フィールド,仮引数,局所変数 メソッド,コンストラクタ 識別子が出現している箇所で同じ注釈を参照 開発者が識別子に対して注釈を記録 List リスト構造の総称型

関連する識別子に対しても注釈が付加される 注釈伝播の例 注釈を記録 関連する識別子に対しても注釈が付加される 開発者 関連する注釈も参照可能 注釈を参照 lineElementList エディタ内の各行の情報を記録するリスト (型) List リスト構造の総称型

注釈伝播ルール 変数への注釈伝播 メソッドへの注釈伝播 クラスへの注釈伝播 変数宣言の型 → 変数 変数初期化子に出現する識別子 → 変数 戻り値・仮引数・例外の型 → メソッド 親クラスのオーバーライドされたメソッド → メソッド 同一クラスでオーバーロードされたメソッド → メソッド クラスへの注釈伝播 親クラス → クラス

変数への注釈伝播 変数宣言の型 → 変数 (1/2) 変数の型を調べる作業負担を軽減 lineElementList (型) List 注釈を記録 開発者 注釈を参照 lineElementList エディタ内の各行の情報を記録するリスト (型) List リスト構造の総称型

変数への注釈伝播 変数初期化子に出現する識別子 → 変数 (2/2) 初期化子内で構文木上最初に出現する識別子 変数の実際の型や値の意味を調べる負担を軽減 開発者 注釈を記録 注釈を参照 lineElementList エディタ内の各行の情報を記録するリスト (初期化)ArrayList 配列のリスト構造を生成

注釈伝播ルール 変数への注釈伝播 メソッドへの注釈伝播 クラスへの注釈伝播 変数宣言の型 → 変数 変数初期化子に出現する識別子 → 変数 戻り値・仮引数・例外の型 → メソッド 親クラスのオーバーライドされたメソッド → メソッド 同一クラスでオーバーロードされたメソッド → メソッド クラスへの注釈伝播 親クラス → クラス

(引数)IProgressMonitor (例外)JavaModelException メソッドへの注釈伝播 (1/3) 戻り値・仮引数・例外の型 → メソッド メソッドの役割を理解する作業を効率化 注釈を記録 開発者 getAttachedJavadoc Javadocをソースから取得 (型)String 文字列を扱うクラス 注釈を参照 (引数)IProgressMonitor 進捗バーを管理するクラス (例外)JavaModelException Java要素への操作の例外

メソッドへの注釈伝播 親クラスのオーバーライドされたメソッド → メソッド (2/3) メソッド間の継承関係を把握した理解が可能 注釈を記録 開発者 Formatterクラス 注釈を参照 format() LogFormatterクラス クラス名@メソッド名:ログの形式で出力する (オーバーライド)format() 出力するログの形式を定める

(同名)ArrayList(Collection) メソッドへの注釈伝播 (3/3) 同一クラスでオーバーロードされたメソッド → メソッド 類似した処理を行うメソッドから補間理解が可能 開発者 注釈を記録 ArrayList() 配列リストを生成 注釈を参照 (同名)ArrayList(Collection) 引数を配列構造に変換生成 (同名)ArrayList(int) 配列の初期サイズを指定

注釈伝播ルール 変数への注釈伝播 メソッドへの注釈伝播 クラスへの注釈伝播 変数宣言の型 → 変数 変数初期化子に出現する識別子 → 変数 戻り値・仮引数・例外の型 → メソッド 親クラスのオーバーライドされたメソッド → メソッド 同一クラスでオーバーロードされたメソッド → メソッド クラスへの注釈伝播 親クラス → クラス

OverloadedMethodProp.. クラスへの注釈伝播 直接の親クラス → クラス クラス間を横断する作業負担を軽減 開発者 注釈を記録 注釈を参照 OverloadedMethodProp.. オーバーライドに基づく注釈伝播を行うクラス PropagationRuleが直接の親クラス PropagationRuleが直接の親クラス (親)PropagationRule 注釈伝播ルールを指定するインターフェース

注釈伝播ルール 変数への注釈伝播 メソッドへの注釈伝播 クラスへの注釈伝播 変数宣言の型 → 変数 変数初期化子に出現する識別子 → 変数 戻り値・仮引数・例外の型 → メソッド 親クラスのオーバーライドされたメソッド → メソッド 同一クラスでオーバーロードされたメソッド → メソッド クラスへの注釈伝播 親クラス → クラス

Eclipseプラグインとして実装 エディタ上でカーソル位置に ある識別子の注釈 関連する注釈を同時に参照できる

適用実験 DocumentTagを用いた保守作業を実施 作業対象:Eclipseプラグインのソースコード 被験者A,B,C,Dが拡張課題a,bを行う 注釈伝播の有効・無効と課題の順序で作業時間を比較 課題終了後にアンケートの回答を集計 DocumentTagを用いる利点・改善点 各作業課題の中で時間のかかった作業(時間順) プログラム理解・コーディング・デバッグなど5項目

実験結果 有効に活用された注釈伝播(アンケートより) 親クラス → クラス 戻り値・仮引数・例外の型 → メソッド 保守作業を行った被験者 作業時間(分) 有効 無効 A (課題a:有効.課題b:無効) 131 77 B (課題b:有効.課題a:無効) 91 98 C (課題a:無効.課題b:有効) 63 87 D (課題b:無効.課題a:有効) 45 165 平均作業時間 82.50 106.75 有効に活用された注釈伝播(アンケートより) 親クラス → クラス 戻り値・仮引数・例外の型 → メソッド

考察 注釈伝播による平均作業時間の短縮 操作性の改善点 表示されうる注釈数の問題 関連する注釈の同時参照が要因 親クラス → クラス 戻り値・仮引数・例外の型 → メソッド 操作性の改善点 関連する注釈を参照するまでの操作を簡略化 表示されうる注釈数の問題 メソッドの場合で平均約3.75,最大84 (Eclipse 3.4 のソースコードを対象.全識別子に注釈を1つ付加)

まとめ 付加注釈DocumentTagの提案 注釈伝播の効果を適用実験で評価 今後の課題 識別子に対して記述する注釈 注釈伝播により関連する識別子に注釈が伝わる 注釈伝播の効果を適用実験で評価 関連する注釈の同時参照により作業時間の短縮 今後の課題 多数の注釈が伝播されうる問題への対処 操作性の改善

関連研究 ソースコード上の移動を支援 (1/2) 開発者が注釈を記入 一覧に登録される このような問題を対処するために関連研究では,その断片化したソースコードの移動を支援するというツールがあります. 小さいですが,エディタ内でのテキストの選択位置で,開発者が,右クリックしてタグの作成を選択して, 注釈を記入すると,それが,この下のビューで一覧に追加されます. そして,この一覧の項目をダブルクリックなどで選択すると,タグとして登録したファイルと位置に瞬時に移動できます. これによってソースコード上の移動がスムーズになったのですが,問題として, タグとして登録したタグが,ソースコード上の別の場所で活かされないという問題があります. 例えばメソッドについて選択した注釈は,そのメソッドが呼び出されている場所でも表示できるようにしたいということなどです. M.-A. Storey et al., How Programmers can Turn Comments into Waypoints for Code Navigation. ICSM 2007, pp.265-274.

関連研究 Javadoc (2/2) 開発者がクラス・メソッド・フィールドに対する注釈 ソースコード中にコメントとして記入 開発者間で注釈が共有できる 開発環境を利用すれば同一の識別子で注釈の参照が可能 ソースコードを編集できない場合がある APIドキュメントや,運用中のシステムのソース このような問題を対処するために関連研究では,その断片化したソースコードの移動を支援するというツールがあります. 小さいですが,エディタ内でのテキストの選択位置で,開発者が,右クリックしてタグの作成を選択して, 注釈を記入すると,それが,この下のビューで一覧に追加されます. そして,この一覧の項目をダブルクリックなどで選択すると,タグとして登録したファイルと位置に瞬時に移動できます. これによってソースコード上の移動がスムーズになったのですが,問題として, タグとして登録したタグが,ソースコード上の別の場所で活かされないという問題があります. 例えばメソッドについて選択した注釈は,そのメソッドが呼び出されている場所でも表示できるようにしたいということなどです. D. Kramer., API documentation from source code comments: a case study of Javadoc. SIGDOC 1999, pp.147-153.

メソッド名に対する 伝播元となりうる識別子の数 Eclipse 3.4 の ソースコードから抽出

学習効果による影響 課題1回目,2回目で作業時間が大きく異なる

学習効果による影響

学習効果による影響

利点・改善点