機能的関心事を抽出するためのプログラムスライシング

機能的関心事を抽出するための
プログラムスライシングの拡張
井上研究室
仁井谷 竜介
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
概要

ソフトウェアは多くの機能的関心事(≒一連の処理、以
降単に関心事)で構成
 関心事は複数のモジュール(クラスやメソッド)のコラボレー
ションで実現

関心事を理解するのはコストが高い
 手がかりを見つける(単語検索,
 関連するモジュールを探す
 モジュール間の関係を理解

Feature locationなど)
ここを支援したい
関心事の抽出手法を提案
 ヒューリスティクスで拡張したプログラムスライシング
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
プログラムスライシング

スライシング基準と関連のあるプログラム要素、およ
び要素間の関係の抽出を自動で行う技術
1.
プログラム P をプログラム依存グラフに変換


2.
P に対してスライシング基準 <s, v> を指定


3.
頂点 : 文(など)
辺 : 依存関係(データ依存/制御依存)
s : P 中の文
v : 変数
P 上の頂点の訪問により v に影響する/される文の集合と
その間の関係を特定
データ依存
修士論文発表会
1 i = 3;
2 if (a > 0) {
3 print i;
<3, i>
4 }
制御依存
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
理解支援でのスライシングの問題点

関心事との関連の弱い箇所が多く含まれる

例: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()
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
提案手法

関連の強い / 弱い箇所の境界(バリア)をヒューリスティックに
見つける



[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()
2007/02/19
修士論文発表会
[1] Krinke, J.: Slicing,
Chopping, and Path Conditions with Barriers.
Software
Quality
Vol.12, No.4,
Department of Computer
Science,
GraduateJournal,
School of Information
Sciencepp.339-360,December
& Technology, Osaka University2004. 5
提案手法の手順
プログラム依存グラフの構築
開発者による入力(スライシング基準)
関心事に関連の強いメソッドと関係の抽出
1.
2.
3.
i.
ii.
4.
5.
ヒューリスティクスによるバリアの特定
バリアと開発者の入力を用いたスライシング
結果からライブラリに属すものをフィルタリング
開発者に提示

関心事グラフを用いた可視化
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
6
3.i.
ヒューリスティクスによるバリアの特定







フィールドへのアクセス
引数がないメソッド呼び出し辺
引数が callee の制御を変更しないメソッド呼び出し辺
入次数の大きい頂点に入る辺
キーワードマッチと距離に基づく境界 ここだけ紹介
Name Context(メソッド m からアクセスできる型や識
別子を構成する単語の集合)の類似度が低い頂点と
の境界
Name Context の類似度と距離に基づく境界
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7
3.i.
キーワードマッチと距離に基づく境界
1.
キーワードと閾値を与える

2.
頂点にマークをつける

3.
キーワードにマッチするメソッドに含まれる頂点
各頂点の重みを決める


4.
下の例は autosave と buffer と閾値1.0
マーク付き頂点からの距離から以下の式で決定
単純な距離とは異なり、同じ距離でも中間の方が重みが高い
閾値以下の頂点の辺をバリアにする
autosave()
1.70
0.93
修士論文発表会
getBuffers()
1.46
0.93
1.28 1.46
0.75
距離2
1.70
1.16
0.93
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
8
3.ii.
バリアと開発者の入力を用いたスライシング
開発者の入力からの依存関係を順/逆両方向に辿る
 バリアで訪問を停止

修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
9
5.
関心事グラフを用いた可視化

頂点




クラス(メソッド・フィールドを内包)
メソッド
フィールド
辺




呼び出し辺
フィールドに対するデータフロー辺
インスタンス生成辺
親子クラス辺
org.gjt.sp.jedit.Autosave
org.gjt.sp.jedit.jEdit
getIntegerProperty(java.lang.String, int): int
propertiesChanged(): void
call
actionPerformed(java.awt.event.ActionEvent): void
init(): void
setInterval(int): void
javax.swing.Timer timer
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
10
評価実験
目的 : 関心事の理解支援における有効性の評価
 対象 : jEdit (テキストエディタ)

 Java

/ 777 class / 144,692 LOC
関心事
: ファイルの自動保存
 Undo : 変更取り消し
 Autosave

マニュアルに機能として存在する単語
 VFS


Search : 仮想ファイルシステム上のディレクトリ検索
版管理システム上で見つかった、追加された機能
スライシング基準 : grep により得られた文
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
11
評価内容
「キーワードマッチと距離に基づく境界」のみ紹介
(Autosave, Undo に関して単体で一番良かった)
スライスサイズの変化
 grep の適合率/再現率との比較
 異なる関心事間のスライスの共通箇所
 ヒューリスティクスを組み合わせたもの
 長さ制限付きスライシングとの比較
 関心事グラフの評価

修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
12
スライスサイズの変化


スライシング基準~従来手法のサイズまで変えられる
再現率(メソッド単位)もスライシング基準~従来手法で変化する

ただしサイズに比例よりは良い
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
13
grep (スライシング基準) の
適合率/再現率との比較

前提


抽出されたメソッドにのみ着目(メソッド間の関係は考慮しない)
grep ⊆ スライス (メソッドの集合として)



スライスの再現率は必ず grep 以上
適合率は下がる可能性が高い
提案手法は抽出したメソッドだけでも grep より良い
0.95
Autosave について
メソッド単位での適合率/再現率
1.20
1.25
横軸: 適合率
縦軸: 再現率
丸: スライスの適合率/再現率
曲線の右上は
grep より性能が良い
1.35
閾値:1.45
破線: grep の適合率/再現率
曲線: grep のF値
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
14
異なる関心事間のスライスの共通箇所

互いに共通箇所の小さなスライスが得られた
 AutosaveとUndoに共通するメソッド(うち2つ)は、共通して
登場する 「ファイルが変更されたかどうか」 のフラグを扱う
 他の組にはもとから共通箇所がない
共通箇所
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
15
まとめ

機能的関心事の理解支援に適切な、プログラ
ム要素とその間の関係を抽出
 ヒューリスティクスにより関連の強い箇所のみ抽出
 評価実験により理解支援に適したスライスが抽出
ができたことが確認された

今後の課題
 複数の関心事間の相互作用の調査
 閾値の自動計算手法の確立
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
16
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
17
3.i
入次数の大きい頂点に入る辺

ライブラリやユーティリティや複数の関心事の
合流点

以下の入次数を個別に扱う
 全ての依存辺の入次数(頂点単位)
 呼出辺の入次数(メソッド単位)
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
18
実装
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
19
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
20
長さ制限付きスライシングとの比較

提案手法(17クラス)上
 適切なものが抽出できた

長さ制限付き
 同程度のクラス数(16)下


関連の弱いクラスが多い
関心事グラフ的に接続され
ない
 同程度の頂点数(175)

大きすぎるため不適
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
21
関心事グラフ変化の考察

閾値が大きい
 重要なクラスや関係のみを抽出

閾値が小さい
 重要なクラスの周辺の振る舞いも抽出

ソフトウェア構造の段階的な理解を支援する
 Storeyら[2]の提案する、ソフトウェア理解支援ツールが満た
すべき項目の1つ「E5: システムの構造を表すオーバー
ビューが抽象度を変化させながら使えること」とも合致
[2] 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.
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
22
フィールドへのアクセス

グラフの説明



白がヒューリスティクス有効 / 灰色が無効の従来手法を 1.0 とした時の
スライスサイズ(以降同様)
左から頂点数、メソッド数、クラス数
呼出辺の入次数の大きいメソッドのヒューリスティクスとの組み
合わせによりスライスサイズが目立って減少
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
23
引数のないメソッド

何と組み合わせても少し減っているだけ
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
24
入次数の大きい頂点(全ての辺)

入次数の制限次第(この図は >4)

ただし閾値の小さなところでスライスサイズが激減するため、単一使用
には向かない(べき乗則参照)
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
25
入次数の大きい頂点(呼出辺)


辺の総数が少ないので、全ての辺に比べてスライスは大きめ
ただし、フィールドへのアクセスとの組み合わせは全ての辺の
時よりスライスが小さい
修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
26
キーワードマッチした頂点との関連が弱い頂点との境界
閾値次第でサイズの調整が容易(この図は1.25)
 他のヒューリスティクスと比べメソッド数が減る傾向に
ある

修士論文発表会
2007/02/19
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
27