Presentation is loading. Please wait.

Presentation is loading. Please wait.

プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装

Similar presentations


Presentation on theme: "プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装"— Presentation transcript:

1 プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装
仁井谷 竜介†, 石尾 隆† ‡, 井上 克郎† †大阪大学 大学院情報科学研究科 ‡日本学術振興会特別研究員(PD)

2 機能的関心事 (以降単に “関心事”) 開発者が興味ある事柄 ソフトウェアの理解に関心事の理解は必要 ソフトウェアの機能や品質など
複数のモジュール(クラスやメソッドなど)のコラボレーションによってソースコード上に実現される 修正や再利用をする1つの単位 ソフトウェアの理解に関心事の理解は必要 PPL2007 2007/03/09

3 ソースコード上の関心事の理解 手順 コストが高い 手がかりを探す(単語検索, Feature locationなど)
関連するモジュールを探す モジュール間の関係を理解 コストが高い 保守工程の多くが理解に費やされる PPL2007 2007/03/09

4 本研究の対象 手順 関心事の抽出手法を提案 手がかりを探す(単語検索, Feature locationなど) 関連するモジュールを探す
モジュール間の関係を理解 関心事の抽出手法を提案 ヒューリスティクスで拡張したプログラムスライシング ここを支援したい PPL2007 2007/03/09

5 プログラムスライシング スライシング基準と関連のあるプログラム要素、および要素間の関係の抽出を自動で行う技術
プログラム P をプログラム依存グラフに変換 頂点 : 文(など) 辺 : 依存関係(データ依存/制御依存) P に対してスライシング基準 <s, v> を指定 s : P 中の文 v : 変数 P 上の頂点の訪問により v に影響する/される文の集合とその間の関係を特定 i = 3; if (a > 0) { print i; } データ依存 <3, i> 制御依存 PPL2007 2007/03/09

6 理解支援でのスライシングの問題点 関心事との関連の弱い箇所が多く含まれる スライスのサイズが大きくなる 異なる関心事についての出力が重複する
例:main()やライブラリの詳細 スライスのサイズが大きくなる 異なる関心事についての出力が重複する 例: 「ドキュメントを開く」と「ドキュメントを保存」 依存 制御フロー 関心事(開く) スライス(開く) 関心事(保存) スライス(保存) Main.main(args) App.run() Menu.onClick(buttonID) FileDialog.getPath() Document.open(path) File.read(path) MDI.add(document) Log.debug(message) FileDialog.getPath() Document.save(path) File.write(path) App.quit() PPL2007 2007/03/09

7 提案手法 関連の強い / 弱い箇所の境界(バリア)をヒューリスティックに見つける
[1] では手動で配置される 頂点 提案手法では自動で配置される 依存辺 適切な関連の強さの箇所にバリアを配置することで、関心事に固有の部分が抽出できる バリア 依存 制御フロー 関心事(開く) スライス(開く) 関心事(保存) スライス(保存) Main.main(args) App.run() Menu.onClick(buttonID) FileDialog.getPath() Document.open(path) File.read(path) MDI.add(document) Log.debug(message) FileDialog.getPath() Document.save(path) File.write(path) App.quit() PPL2007 [1] Krinke, J.: Slicing, Chopping, and Path Conditions with Barriers. Software Quality Journal, Vol.12, No.4, pp ,December 2004. 2007/03/09

8 提案手法の手順 プログラム依存グラフの構築 開発者による入力(スライシング基準) 関心事に関連の強いメソッドと関係の抽出
ヒューリスティクスによるバリアの特定 バリアと開発者の入力を用いたスライシング 結果からライブラリに属すものをフィルタリング 開発者に提示 関心事グラフを用いた可視化 PPL2007 2007/03/09

9 入次数の大きい頂点に入る辺 キーワードマッチと距離に基づく境界 3.i. ヒューリスティクスによるバリアの特定 スライシング基準 PDG頂点
依存辺 バリア PPL2007 2007/03/09

10 入次数が閾値以上の頂点に入る辺をバリアにする
3.i 入次数の大きい頂点に入る辺 入次数の大きい頂点は関連が弱い ライブラリ ユーティリティ 複数の関心事の合流点 入次数が閾値以上の頂点に入る辺をバリアにする 入次数が大きい頂点 バリア PPL2007 2007/03/09

11 キーワードにマッチする箇所やその近隣によって関心事が実現されていると考えられる
3.i. キーワードマッチと距離に基づく境界 関心事には対応するキーワードがある 識別子などに用いられる 例) save: autosave(), saveBuffer() キーワードにマッチする箇所やその近隣によって関心事が実現されていると考えられる キーワードにマッチした箇所から遠い頂点に出入りする辺をバリアにする PPL2007 2007/03/09

12 3.i. 「キーワードマッチと距離に基づく境界」の手順
キーワードと閾値を与える 下の例は autosave と buffer と閾値1.0 頂点にマークをつける キーワードにマッチするメソッドに含まれる頂点 各頂点の重みを決める マーク付き頂点からの距離から以下の式で決定 単純な距離とは異なり、同じ距離でも中間の方が重みが高い 閾値以下の頂点の辺をバリアにする autosave() getBuffers() 距離2 1.70 1.46 1.28 0.93 0.75 1.16 1.70 1.46 1.28 0.93 0.75 1.16 PPL2007 2007/03/09

13 3.ii. バリアと開発者の入力を用いたスライシング
開発者の入力からの依存関係を順/逆両方向に辿る バリアで訪問を停止 スライシング基準 PDG頂点 依存辺 バリア  スライス PPL2007 2007/03/09

14 5. 関心事グラフを用いた可視化 頂点 辺 クラス(メソッド・フィールドを内包) メソッド フィールド 呼び出し辺
フィールドに対するデータフロー辺 インスタンス生成辺 親子クラス辺 org.gjt.sp.jedit.Autosave actionPerformed(java.awt.event.ActionEvent): void init(): void setInterval(int): void javax.swing.Timer timer org.gjt.sp.jedit.jEdit getIntegerProperty(java.lang.String, int): int propertiesChanged(): void call PPL2007 2007/03/09

15 評価実験 目的 : 関心事の理解支援に適したスライスかの評価 対象 : jEdit (テキストエディタ) 関心事
Java / 777 class / 144,692 LOC 関心事 Autosave : ファイルの自動保存 Undo : 変更取り消し マニュアルに機能として存在する単語 正解のメソッド集合は人手で作った VFS Search : 仮想ファイルシステム上のディレクトリ検索 版管理システム上で見つかった、追加された機能 差分から正解を作った スライシング基準 : grep により得られた文 PPL2007 2007/03/09

16 評価内容 スライスサイズの変化 ヒューリスティクスを組み合わせたもの 異なる関心事間のスライスの共通箇所 長さ制限付きスライシングとの比較
関心事グラフの変化 PPL2007 2007/03/09

17 スライスサイズの変化 従来のスライス 提案手法について以下の点を確認する 理解に必要な箇所はほぼ全て含んでいる サイズが大きすぎる
理解に適したサイズか サイズが小さくても必要な箇所を含んでいるか メソッド単位の再現率 / 適合率 / F値を計算 PPL2007 2007/03/09

18 スライスサイズの変化の結果 閾値を変えたときの変化 サイズ : スライシング基準~従来手法で変化
サイズ : スライシング基準~従来手法で変化 再現率 : スライシング基準~従来手法で変化 サイズに比例より良い 従来手法 スライシング基準 PPL2007 2007/03/09

19 スライスサイズの変化の結果(キーワード)
F値がスライシング基準より向上している その時のサイズは十分小さい 関連 PPL2007 2007/03/09

20 スライスサイズの変化の結果(入次数) 閾値によるサイズの制御が困難 F値は低い 小さな値付近(1~4)で極端にサイズが変わる PPL2007
2007/03/09

21 スライスサイズの変化の考察 キーワードマッチと距離に基づく境界 入次数の大きい頂点に入る辺 理解に適したサイズを適切な中身で提示できる
単体での使用には不適切 PPL2007 2007/03/09

22 ヒューリスティクスを組み合わせたもの 再現率を損なわず適合率が向上した(キーワードのヒューリスティクス基準)
入次数のヒューリスティクスも組み合わせることで有効 PPL2007 2007/03/09

23 異なる関心事間のスライスの共通箇所 従来のスライス 提案手法について以下を確認 異なる関心事間に、多くの関連の弱い共通箇所 共通箇所のサイズ
共通箇所と、それぞれの関心事との関連の強さ PPL2007 2007/03/09

24 異なる関心事間のスライスの共通箇所の結果
互いに共通箇所の小さなスライスが得られた AutosaveとUndoに共通するメソッド(うち2つ)は、共通して登場する 「ファイルが変更されたかどうか」 のフラグを扱う 残りの2つのメソッドは関連が弱かった 共通箇所 PPL2007 2007/03/09

25 長さ制限付きスライシングとの比較 長さ制限付きスライシング[2] キーワードマッチと距離に基づく境界
プログラム依存グラフ上での、スライシング基準からの距離を制限している キーワードマッチと距離に基づく境界 距離に基づいているため類似している 以下の点で異なる 複数頂点を考慮している 意味的情報(キーワード)を用いる [2] Krinke, J.: Visualization of Program Dependence and Slices, ICSM ’04: Proceedings of the 20th IEEE International Conference on Software Maintenance, 2004, pp. 168–177. PPL2007 2007/03/09

26 長さ制限付きスライシングとの比較の結果 提案手法(39メソッド)上 長さ制限付き 適切なものが抽出できた 同程度のメソッド数(45)下
関連の弱いクラスが多い 関心事グラフが接続されない 同程度の頂点数(479) 大きすぎるため不適 PPL2007 2007/03/09

27 関心事グラフの変化 閾値が大きい 閾値が小さい ソフトウェア構造の段階的な理解を支援する 重要なクラスや関係のみを抽出
重要なクラスの周辺の振る舞いも抽出 ソフトウェア構造の段階的な理解を支援する Storeyら[3]の提案する、ソフトウェア理解支援ツールが満たすべき項目の1つ「E5: システムの構造を表すオーバービューが抽象度を変化させながら使えること」とも合致 [3] M.-A. D. Storey, F. D. Fracchia, and H. A. M¨uller. Cognitive design elements to support the construction of a mental model during software exploration. The Journal of Systems and Software, Vol. 44, No. 3, pp. 171–185, 1999. PPL2007 2007/03/09

28 まとめ 機能的関心事の理解支援に適切な、プログラム要素とその間の関係を抽出 今後の課題 ヒューリスティクスにより関連の強い箇所のみ抽出
評価実験により理解支援に適したスライスが抽出ができたことが確認された 今後の課題 複数の関心事間の相互作用の調査 閾値の自動計算手法の確立 PPL2007 2007/03/09


Download ppt "プログラムスライシングを用いた 機能的関心事の抽出手法の 提案と実装"

Similar presentations


Ads by Google