• 検索結果がありません。

学生 12 人によるデバッグ実験

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つのアスペクトが及ぼす影響の可視化は研究されているが

複数のアスペクトの関連の可視化は実現されていない

広範囲に影響を与えるアスペクトの振る舞いの可視化も困難

大規模ソフトウェアの抽象化

ソフトウェアの適切な単位への分割

「関心事」ごとに,対応するソフトウェアの要素を発見する

アスペクトの可視化

ある1つのアスペクトに対して,関連する クラスを表示した場合

Database

Logger

Logging

Encryption

A client call

Database

A client call

補足資料

AOP 一般

「横断的関心事」の問題

横断的関心事: 従来のモジュールが対応で きない関心事

他のモジュールに少しずつ変更を加える必要あ り

例 : 名前が set で始まるメソッドの呼び出

しを記録 Class Line setColor

関連したドキュメント