Aspect Logging before_call()
2. 学生 12 人によるデバッグ実験
AspectJ プログラムを対象にしたデバッグ作業
4 つのアスペクトのうち 1 つが,他の 1 つの動作を
阻害12
人中,6
人が,プログラムスライスの情報を使用評価 (1/2)
依存関係の追跡作業は,コストが高い
従来のツールは,他のアスペクトが「どこで動 くか」を表示するだけ
影響を与えるようなアスペクトかどうかは,コードを 読まないと分からない
スライシングでは,影響を与えるかどうかも同時に与 えられる
–
「影響を与えない」ところは最初から無視できるアスペクトは,通常,複数のファイルに定義さ
れるので,ファイルをまたいだ依存関係を接続
していく必要がある
評価 (2/2)
バグの原因特定について
作業に取り掛かる段階で,コードを読む指針となる
「原因の候補」として目をつけた点に対して,その部 分がスライスに含まれているかどうかで,候補を絞り 込める
バグの修正について
変更結果が他のアスペクトに影響を及ぼさないことを 確認するには,他のアスペクトも読まないといけない
スライスだけで,作業時間を短縮できるとは限らない 影響波及解析手法との組み合わせが考えられる†
† 四野見,玉井
:
アスペクト指向における織り込みによる影響波及解析.4章のまとめ
アスペクト指向プログラムのデバッグ支援
プログラムスライシングの適用
従来手法に,「アスペクト呼び出し」を追加
アスペクトの動作を,メソッド呼び出しと同様の形式で 扱う
静的情報,実行時情報を組み合わせた開発者の支援
評価実験の結果
スライシングは,アスペクトによる振る舞いの変化 を効果的に示すことができる
アスペクトによって引き起こされた問題の特定に有
効
アスペクト指向プログラムの品質
モジュール性などを客観的に評価する指標は?
アスペクトの導入の影響を評価したい
オブジェクト指向での指標には,アスペクトに関する定義 がない
CK メトリクスの拡張 †
「クラス」 → 「クラスまたはアスペクト」
結合度
: Coupling Between Objects
の拡張1
つのクラスまたはアスペクト中に登場する他のクラス,アスペク トの数凝集度
: Lack of Cohesion
の拡張1つのクラスあるいはアスペクト中のメソッド単位で,お互いにメ ンバー変数をまったく共有しないようなペアの個数(大きいほど悪 い)
† Sant Anna, C., Garcia, A., Chavez, C., Lucena, C. and Von Staa, A: On the Reuse
and Maintenance of Aspect-Oriented Software: An Assessment Framework.
新たな評価尺度の導入
新たな尺度: 関心事の分散度合い
1つの関心事は少数のモジュールで実現されるべ き
提案は複数
1つの関心事を実装に関わる クラス・アスペクトの数
+それらを直接参照する クラス・アスペクトの数
1 つのクラス(アスペクト)が 関わる要求の個数を数える †
† Kassab, M., Ormandjieva, O. and Constantinides, C.: Providing Quality
Measurement for Aspect-Oriented Software development. Proceedings of
品質の評価ケーススタディ
シミュレータに対する変更操作
†オブジェクト指向システムに比べ,結合度は大きく低下 1つのメソッドから呼び出されるメソッドの数は増加 する
CK
メトリクスにおける振舞いの複雑さの指標RFC (Response For a Class) =
呼び出したメソッドから推移的に呼び出すメソッド数
保守性,再利用性は上がる
結合度の低下が大きく貢献する
モジュール数の増加が,理解容易性の足を引っ張 る
個々の部品は単純になっても,部品点数が増える
† Shiu Lun Tsang, Siobhán Clarke, Elisa Baniassad: Object Metrics for Aspect Systems: Limiting
Empirical Inference Based on Modularity. Trinity College Dublin technical report. 2004.
むすび
アスペクト指向プログラミング
「横断的関心事の分離」を提案
モジュール単位「アスペクト」の導入
アスペクトの用途
: Development / Production / Runtime Aspect
Development Aspect
に属する関心事のモジュール化を提案Development Aspect
は,ソフトウェア開発作業全般で登場するため重要プログラムの動的解析
オブジェクトを横断した表明
Production / Runtime Aspect
での有用性は,他の研究者によっ て示されている横断的関心事のモジュール化にアスペクト指向プログラミング は有効
アスペクト指向のもたらす複雑さへ の対処
プログラムスライシングによるデバッグ支援を実現
プログラムスライシングをアスペクト指向向けに拡張
変数の値にアスペクトが影響を与えている場合,それを提示 できる
プログラムスライシングに基づく他の解析手法にも同様 の拡張は適用可能
影響波及解析は既に実現されている
プログラム解析手法を使うことで,アスペクト指向プロ グラミングの利用が容易となる
問題の発生を予測する方法の研究はまだ途上
型推論,プロセス代数など,理論的側面からの研究
今後の展望
アスペクト指向プログラミングから アスペクト指向ソフトウェア開発へ
Early Aspects
要求間の依存関係の整理
システムの広範囲に影響を与える要求の発見
Aspect-Oriented Modeling
関心事のモデリング
アスペクト指向プログラムの設計 アスペクトのためのモデル記述言語
Aspect-Oriented Programming
横断的関心事のモジュール化 アスペクトのテスト方法
アスペクト指向の影響
横断的関心事のクラスからの分離
以前よりも単一の部品は単機能に近づく
部品のモジュール性,凝集度,再利用性は向上
コンポーネント間の結合が増加
コンポーネントの結合を管理する必要性が増大
クラスの場合,「メソッド呼び出し」で明示的に結合 されていた
アスペクトの場合,いつ動作するかは,結合対象のプ ログラムが決まるまで分からない
研究課題
関心事の整理/管理
モデルとソースコードの関連付け
作ったものが,実際にモデルを反映しているか検査 ソフトウェアから,人間が「読める」情報を抽出する
関心事間の関係の可視化
1つのアスペクトが及ぼす影響の可視化は研究されているが
,
複数のアスペクトの関連の可視化は実現されていない
広範囲に影響を与えるアスペクトの振る舞いの可視化も困難
大規模ソフトウェアの抽象化
ソフトウェアの適切な単位への分割
「関心事」ごとに,対応するソフトウェアの要素を発見する