スライド 1

アスペクト指向プログラムに対する
プログラムスライシング
石尾 隆†,楠本 真二‡,井上 克郎‡
†大阪大学大学院基礎工学研究科
‡大阪大学大学院情報科学研究科
{t-isio,kusumoto,inoue}@ist.osaka-u.ac.jp
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
発表の概要
アスペクト指向プログラミング
アスペクト指向の特徴
アスペクト指向の問題点
アスペクト指向プログラムの開発支援
アスペクト干渉の検出
プログラムスライシングの適用
ツールの実装
今後の課題
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
オブジェクト指向モデル
オブジェクトの相互通信でシステムをモデル化
システムの機能をオブジェクトが分担して担当
オブジェクトは内部に必要なデータを隠蔽する
自分にない機能,データは他のオブジェクトに要求
例:学生の成績管理システムのモデル
GUI
情報を要求
Student
情報の保存・取得
Database
履修情報
統計情報を要求
Statistics
Course
情報の保存・取得
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
オブジェクトの横断要素
横断要素=複数のオブジェクトに要求される特性
例:「デバッグ用に,オブジェクトに送られたメッセージを記録したい」
例:「データベースでエラーが起こったらユーザの指示を仰ぎたい」
処理が複数のオブジェクトに分散する
→ 分散したコードの一貫性の維持が困難
変更すべき場所を変更し忘れる
変更すべきでない場所まで一緒に変更してしまう
書かれたコードを後で見て,どこまでがその処理に関連するか分からない
横断要素をモジュール化する単位「アスペクト」の導入
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクト指向モデル
アスペクト= (動作タイミング, 処理) の集合で定義
動作タイミングは,メッセージ送受信や例外の発生など
複数のメッセージを,集合として指定可能
明示的な呼び出しが不要
ユーザへの通知
Error Notification Aspect
「DBへのアクセスは記録」
「エラーが起きたら通知」
監視
Student
GUI
Database
Statistics
Course
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ユーザ
からの
指示
アスペクト指向プログラミングの利点
モジュール性の向上
オブジェクト側の変更はアスペクトに波及しにくい
アスペクトの動作タイミングは集合演算的に取り出せる
アスペクトはオブジェクトとは独立して変更可能
ユーザから受ける指示の選択肢が変わってもデータベース側は
変更せずに済む
再利用性の向上
データベースオブジェクトがGUIオブジェクトに依存しないで済む
アスペクトだけをGUIとデータベースが既にある他のアプリケーショ
ンへ移行できる
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクト指向の「複雑さ」
アスペクトは便利だが……
オブジェクトを見ただけでは動作がわからない
単純な代入文でさえも,アスペクトが連動していることがある
アスペクトが,予想外の場面で作動してしまう可能性がある
アスペクトの干渉
アスペクトの動作順序で実行結果が変わる
アスペクトの動作中に別のアスペクトが動作する
ツールによるサポートが重要!
•アスペクトの表示
•デバッグ支援
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
関連研究
AspectJ† IDE for JBuilder, Forte, Emacs
ソースコードエディタで,オブジェクトのコード上にアスペクトの連動位
置を表示する
アスペクト干渉の検出は行わない
アスペクト指向プログラムに対するプログラムスライス計算の
提案‡
提案だけ,有効性については評価されていない
†: AspectJ Official Site: http://www.eclipse.org/aspectj/
‡: Jianjun Zhao, “Slicing Aspect-Oriented Software”,
In Proc. of the 10th IEEE International Workshop on
Programming Comprehension, pp.251--260, 2002
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
本研究の目的
アスペクトを組み込んだプログラムに対する依存関係
解析結果を用いた開発支援手法を提案する.
アスペクト干渉の検出
アスペクトを組み込む時点での支援
プログラムスライスの抽出
アスペクトを組み込んだ後のデバッグ支援
対象: AspectJ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクト干渉とは
アスペクトが他のアスペクトに影響を与える
単体では正しいアスペクトでも,正しい動作が阻害される
ことがある
以下は無限ループの例
Client
Object
Disk I/O
Object
ディスク I/O を
ネットワーク I/O にマップする
アスペクト
Network I/O
Object
ディスク I/O 以外の呼び出しを
ディスクに記録するアスペクト
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクト干渉に対する方針
アスペクトの干渉は必要な場合もある
ディスク I/O を置き換えるアスペクトなど
コンパイル時に干渉可能性を検出してユーザに通知,
実行するかどうかはユーザの選択
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクト干渉の検出
Aspect を含めた Call Graph の利用
頂点:クラス,アスペクトに含まれるメソッド(手続き)単位
辺:メソッドの呼び出し,アスペクトの呼び出し
(呼び出し関係はソースコードから解析)
ある地点でアスペクトが作動する=アスペクトを呼び
出している
「Call Graphでアスペクトの頂点に到達可能」ならば「ア
スペクトの影響を受ける」
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
Call Graph 例
凡例
Aspect
Class
call
無限ループ
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プログラムスライシングの適用
プログラムスライシングとは
プログラム解析手法のひとつ
プログラマが注目する必要があるコードのみを抽出し,提
示する技術
元々は手続き的プログラム用に開発され,オブジェクト指
向プログラムに対して拡張されている
プログラム実行時情報を用いてデバッグを支援
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プログラムスライスの定義
プログラムのある文sのある変数v(スライス基点
<s,v>)の値に“影響”を与えうる文の集合
影響 = 代入--参照 関係, if 文など制御関係
1:
2:
3:
4:
5:
6:
a = 5;
b = a + a;
if (b > 0) {
c = a;
}
d = b;
a
b
基点< 6, b >
制御
1:
2:
3:
4:
5:
6:
a = 5;
b = a + a;
if (b > 0) {
c = a;
}
d = b;
a
b
プログラム文を頂点,依存関係を辺としたグラフの探
索問題
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
スライス計算に必要な情報
データ依存関係
フィールド(メンバ変数)の 代入 → 参照 関係
ローカル変数の 代入 → 参照 関係
制御依存関係
実行制御文の条件節 → 制御される文
メソッド呼び出し文 → 呼び出されるメソッドの文
アスペクトが連動するタイミング → 動作するアスペクト
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
情報収集: 動的 or 静的
目的をデバッグに限定
実行が失敗するテストケースが特定されている状態を想定
動的(実行時)情報 が利用可能
オブジェクトの区別,動的束縛の解決によってコード量を減らす
データ依存関係
フィールド(メンバ変数)の 代入 → 参照 関係
ローカル変数の 代入 → 参照 関係
制御依存関係
実行制御文の条件節 → 制御される文
メソッド呼び出し文 → 呼び出されるメソッドの文
アスペクトが連動するメッセージ → 動作するアスペクト
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
動的情報収集の実装
アスペクトとして動的解析処理を記述する
1つのモジュールにカプセル化可能
可読性・保守性の向上
実現および実行時コストの軽減
実用上十分な情報が収集可能
Java を対象とした場合は十分に有効†
→ AspectJ で書かれたプログラム用に拡張
† 石尾隆, 楠本真二, 井上克郎: “アスペクト指向プログラミングの動的
スライス計算への応用", 2002年電子情報通信学会総合大会講演
論文集,D-3-4,p.30 (2002).
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
スライスツールの動作概要
スライス結果
依存関係解析
アスペクト
スライス対象
ソースコード
(含アスペクト)
スライス
計算
AspectJ Compiler
依存関係情報
アスペクト結合済み
クラスファイル
通常の
JVM
通常の実行結果
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
スライスツールの実装
統合開発環境 Eclipse への統合
Eclipse: オープンソースIDE フレームワーク
プラグインでIDEの機能を追加できる
開発者がエディタ上でそのまま利用できることが重要
コンパイル時にソースコード情報を収集
静的依存情報の収集
Call Graphの作成
スライス計算時に,実行時に収集した情報があれば,それを
適用
現時点では未実装
静的情報のみを用いたスライスが計算可能
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
プロトタイプのスクリーンショット
3. スライス計算実行を指示
2. スライス基準をエディタ上で選択
1. コンパイル時に静的情報収集
4. スライス結果を
エディタ上に出力
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめ
アスペクト指向プログラミングの特徴
横断要素のモジュール化
保守性,再利用性の向上
ソースコードの見た目と動作とのギャップが拡大
Call Graphを用いた干渉の検出
アスペクトの動作を,メソッド呼び出しと等価とみなす
ループ等,実行を不可能にするような重大な干渉の提示
プログラムスライシングの適用
従来手法に,「アスペクト呼び出し」を追加
実行時情報を用いた開発者の支援
今後の課題
ツールの有効性の評価
動的情報の付加によるプログラムスライスの変化の評価
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
終
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
†
利用例:プログラムの実行時情報収集
オブジェクト指向プログラムの実行経過を観測する
メソッドの呼び出し関係
データの依存関係(代入-参照)
抽出した情報の主な用途
デバッグ支援
ソフトウェアの定量的評価(複雑さ,品質等)
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
情報収集の従来の実現方法
「監視」処理は対象ソフトウェア全体に影響する
単純な実装:対象ソフトウェアの各所でログを生成する
→ アスペクトでモジュール化するべき
Java を対象とした場合のその他の実現方法
Java Virtual Machine (JVM)の改造
移植性がない,実現に必要なコストが高い
JVMの持つ Profiler Interface の利用
実行時のコストが高い,バイトコード最適化で結果が変わる
プリプロセッサによるソースコード変換
構文木の変換ルールが複雑,保守性が低い
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
アスペクトによる実装の利点
アスペクトとして動的解析処理を記述
1つのモジュールにカプセル化可能
可読性・保守性の向上
実現および実行時に要するコストの軽減
実用上十分な情報が収集可能
成果については論文投稿中†
†:
石尾 隆,楠本 真二,井上 克郎: アスペクト指向プログラミングの
動的プログラムスライスへの応用,情報処理学会論文誌,投稿中
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
その他のアスペクトの利用例
アスペクトによるトランザクションの実現†
種々のトランザクションメカニズムを利用したトランザクションのモジュール化
GoF デザインパターンのアスペクトによる書き換え‡
デザインパターン=オブジェクトの「連携のやりかた」のパターン
設計レベルでの再利用,使うときは個別のコードを書く
パターンに関連するオブジェクトにコードは分散する
いくつかのパターンは,単独のアスペクトに簡潔に記述することができる
アスペクトとして再利用可能なコードになったパターンも存在
S. Soares, E. Laureano, P. Borba: `Implementing Distribution and
Persistence Aspects with AspectJ'', OOPSLA 2002
†
J. Hannemann, G. Kiczales: ”Design Pattern Implementation in
Java and AspectJ'‘, OOPSLA 2002
‡
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University