修士論文目次案

拡張可能なアスペクト指向モデリング
における織り合わせの検証
九州工業大学大学院 情報工学研究科
前野 雄作,鵜林 尚靖
MLG
Modeling Language Group
発表内容
•
•
•
•
研究の背景と目的
検証のメカニズム
考察
まとめ
第155回ソフトウェア工学研究会
2007/3/22
2
研究の背景と目的
MLG
Modeling Language Group
アスペクト指向プログラミング(AOP)
• システム本来の関心事と横断的関心事を分離し
て実装するためのメカニズム
• 横断的関心事をアスペクトと呼ばれる単位でモ
ジュール化
• 織り込み(weave)によりアスペクトをシステム本
来の関心事と結合
• AOPのメカニズムはジョインポイントモデル(JPM)
によって実現される
第155回ソフトウェア工学研究会
2007/3/22
4
MLG
Modeling Language Group
ジョインポイントモデルの構成
•
ジョインポイント
– メソッド呼び出しなどのプログラム実行フロー中のポイント
•
ポイントカット
– 全てのジョインポイントの中からある特定の条件を満たすポイントを選び出す機能
•
アドバイス
– ポイントカットによって抜き出したジョインポイントでのプログラム実行を変更する機能
ソースコード
ジョインポイント
•フィールドアクセス
•コンストラクタ
•メソッド呼び出し
・
・
・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
・・・・・・
アスペクト
ジョインポイントの絞込み
ポイントカット
関連付け
コードの追加・置換
第155回ソフトウェア工学研究会
アドバイス
2007/3/22
5
MLG
Modeling Language Group
アスペクト指向モデリング言語 AspectM
• アスペクト指向の概念はプログラミング段階だけでなく開
発上流工程のモデリング段階でも有効
• モデルレベルでのアスペクト指向をサポートする言語
AspectMを提案している
– UMLのクラス図を拡張
モデルレベルでのアスペクト指向
アスペクトモデル
UMLモデル
ジョインポイント
•
静的なモデル要素
–
–
–
–
クラス
属性
操作
パッケージ
クラス名
属性
・・・・・・
操作
・・・・・・
newOperation
ポイントカット
ジョインポイントの
絞込み
関連付け
ダイアグラムの編集
第155回ソフトウェア工学研究会
アドバイス
2007/3/22
6
MLG
Modeling Language Group
アスペクト指向モデリング言語 AspectM
• モデルレベルでの織り込みを行うために、7種類のジョイ
ンポイントモデルを定義している
• ユーザはJPMを用いて様々なアスペクトを定義することに
より、多様な織り込みが可能
ジョインポイントモデル 説明
pointcut & advice
メソッドの追加・置き換え
composition
クラス同士のマージ
new element
クラスの追加・削除
open class
属性・操作の追加・削除
rename
クラス・属性・操作の名前の変更
relation
クラス間の関連・集約・合成関係の追加・削除
inheritance
クラス間の継承関係の追加・削除
第155回ソフトウェア工学研究会
2007/3/22
7
MLG
Modeling Language Group
AspectMサポートツールの構成
モデルエディタ
アスペクトの織り込まれたモデル
クラスダイアグラム
アスペクトダイアグラム
weaving
モデルコンパイラ
第155回ソフトウェア工学研究会
2007/3/22
8
MLG
Modeling Language Group
アスペクト指向モデリング言語 AspectM
• AspectMのダイアグラム表記
– AspectMで扱うモデルはXML形式で保存される
クラスダイアグラム
<ownedElement xsi:type="asm:Class" name="Message">
<feature xsi:type="asm:Attribute" name="name" visibility="private" type=“String"/>
<feature xsi:type="asm:Attribute" name="message" visibility="private" type=“String"/>
<feature xsi:type="asm:Attribute" name="subject" visibility="private" type=“String"/>
<feature xsi:type="asm:Operation" name="getMessage">
<parameter name="message" kind="return"/>
</feature>
</ownedElement>
アスペクトダイアグラム
<ownedElement xsi:type="asm:Aspect“ joinPointModelType="cm">
<aspectFeature xsi:type="asm:Pointcut" joinPointType="class"
advice=“advice” body="Message||MessageProfile"/>
<aspectFeature xsi:type="asm:Composition" name="" adviceType="mergeByName“
pointcut=“pointcut" mergedClassName="PostMessageForm"/>
</ownedElement>
第155回ソフトウェア工学研究会
2007/3/22
9
MLG
Modeling Language Group
AspectMの特徴
• ユーザはAspectMのメタモデルを拡張することにより、モ
デルの表現能力を拡張可能
• ユーザのドメインに特化したモデリングが可能
UMLクラス図のメタモデル
•メタモデルとは?
UMLクラス図の拡張ポイント
アスペクト図の拡張ポイント
•モデルの文法をUMLによって記述したもの
•モデルの記述要素(モデル要素)の意味と構文を
Operationの拡張
記述したモデル
拡張後の記述例
アスペクトのメタモデル
第155回ソフトウェア工学研究会
2007/3/22
10
MLG
Modeling Language Group
AspectMの適用例~MDAへの適用~
• MDA(Model Driven Architecture)とは?
– UMLモデルを中心としたシステム開発手法
– プラットフォームに依存しないモデル(PIM)から、プ
ラットフォームに特化したモデル(PSM)を自動生成
PIM
model compiler
PIM : Platform Independent Model
PSM : Platform Specific Model
各プラットフォームごとのマッピングルール
CORBA PSM
Java PSM
.NET PSM
第155回ソフトウェア工学研究会
XML PSM
2007/3/22
11
MLG
Modeling Language Group
AspectMの適用例~MDAへの適用~
• 各プラットフォームへのマッピングルールをアスペ
クトとして記述
– 各プラットフォームに特化した記述をアスペクトルを用
マッピングルール
いてモジュール化し、織り込みを行うことでPSMを生成
アスペクトモデル
アスペクトモデル
アスペクトモデル
アスペクトモデル
PIM
model compiler
CORBA PSM
織り込み
Java PSM
.NET PSM
第155回ソフトウェア工学研究会
XML PSM
2007/3/22
12
MLG
Modeling Language Group
本研究の問題意識 その1
• アスペクト織り込み後のモデルの構造
– アスペクト織り込み後のモデルが、メタモデルの拡張
の有無に関わらず、メタモデルの定義と異なるモデル
構造であってはならない
つまり・・・
– 織り込み後のモデル構造をチェックするメカニズムが
必要
第155回ソフトウェア工学研究会
2007/3/22
13
MLG
Modeling Language Group
本研究の問題意識 その2
• アスペクトの適用順序や、アスペクト同士の干渉により、
正しい変換が行われない場合がある
モデルエディタ
クラス図
アスペクト図
アスペクト同士の干渉
モデル変換
適用順序により
によりモデルに誤りが
含まれる結果が異なる
……
……
……
第155回ソフトウェア工学研究会
2007/3/22
14
MLG
Modeling Language Group
研究の目的
• 適用後のモデルがメタモデルの定義に従ってい
るかを検証
• アスペクト織り込みの正しさを検証
それにより・・・
• モデルコンパイラによって正しい織り込み処理
が行われていることを保証する
第155回ソフトウェア工学研究会
2007/3/22
15
検証のメカニズム
•検証の概要
•モデル構造の検証
•モデル変換の妥当性検証
MLG
Modeling Language Group
検証の概要
•
検証は大きく分けて以下の2つのステップで行う
1. モデル構造の検証
– アスペクト適用後のモデルの構造がメタモデルの定義に
従っているかを検証
2. モデル変換の妥当性検証
– ユーザが指定するポイントカットに、対応するアドバイスが全
て適用されているかを検証
– アスペクトの干渉によりモデル中に誤りが含まれていないか
を検証
1. モデル構造の検証
2. モデル変換の妥当性検証
第155回ソフトウェア工学研究会
2007/3/22
17
1.モデル構造の検証
MLG
Modeling Language Group
1. モデル構造の検証
1.モデル構造の検証
2. モデル変換の妥当性検証
• モデルの構造はメタモデルが定義している
• モデルはXML文章として保存されている
つまり・・・
• モデル構造の定義はXML文章の構造の定義と
みなせる
そこで・・・
• スキーマ言語を用いてXML文章の構造を検証
第155回ソフトウェア工学研究会
2007/3/22
19
MLG
Modeling Language Group
スキーマ言語とは?
• XML文章の構造を定義するためのメタ言語
– XMLの要素や属性の出現可能性・データ型
• スキーマとはXML文章がvalidかどうかチェック
(validation)するための制約
• 代表的なスキーマ言語にXML Schemaがある
第155回ソフトウェア工学研究会
2007/3/22
20
MLG
Modeling Language Group
1.モデル構造の検証
• 検証に先立ち拡張前のメタモデルから、デフォル
トのスキーマを定義
• モデル構造の検証は以下のステップで行う
1.モデル構造の検証
Step1. メタモデルの拡張をチェック
Step2. メタモデルが拡張されていれば、デフォルトのスキーマ
を拡張情報を用いて再定義
Step3. 対象となるモデルの構造がスキーマの定義する構造
に従っているかをチェック
第155回ソフトウェア工学研究会
2007/3/22
21
MLG
Modeling Language Group
Step0. デフォルトのスキーマの定義
• AspectMメタモデル中のUMLクラス図に関する部
分の構造を定義
例)“Class”に関する構造の定義の一部
Classの制約
スキーマに従った
Classの表記
1 : <xsd:complexType name="ClassType">
2 : <xsd:choice maxOccurs="unbounded" minOccurs="0">
3:
<xsd:element name="Attribute" type="AttributeType"/>
4:
<xsd:element name="Operation" type="OperationType"/>
5 : </xsd:choice>
6 : <xsd:attribute name="name" type="Name" use=“required"/>
7 : <xsd:attribute name="isAbstract" type="Boolean" use="optional"/>
8: …
9 : </xsd:complexType>
1: <Class name=“ClassName” isAbstract=“false” …>
2: <Attribute …/>
3:
…
4: <Operation …/>
5:
…
6: </Class>
第155回ソフトウェア工学研究会
2007/3/22
22
MLG
Modeling Language Group
Step1. メタモデルの拡張をチェック
• メタモデルの拡張は拡張ポイントにサブクラスを
定義する形で行われる
従って・・・
• メタモデルを解析し、拡張ポイントを継承するクラ
スの有無を調べる
メタモデルの拡張
拡張ポイント
新たに追加する
モデル要素
1.モデル構造の検証
Step1. AspectMのメタモデルが拡張されているかをチェック
Step2. メタモデルが拡張されていれば、デフォルトのスキーマ
を拡張情報を用いて再定義
Step3. 対象となるモデルの構造がスキーマの定義する構造
に従っているかをチェック
第155回ソフトウェア工学研究会
2007/3/22
23
MLG
Modeling Language Group
Step2. メタモデルが拡張されていれば、デフォ
ルトのスキーマを拡張情報を用いて再定義
例)操作の拡張に伴うスキーマの再定義
1 :<xsd:complexType name="ClassType">
2 : <xsd:choice maxOccurs="unbounded" minOccurs="0">
3:
<xsd:element name="Attribute" type="AttributeType"/>
4:
<xsd:element name="Operation" type="OperationType"/>
5:
<xsd:element name=“TransactionOperation" type=" TransactionOperationType"/>
6 : </xsd:choice>
7 : <xsd:attribute name="name" type="Name" use="required"/>
8 : <xsd:attribute name="isAbstract" type="Boolean" use="optional"/>
9 : </xsd:complexType>
10 :
11 : <xsd:complexType name=" TransactionOperationType ">
12 : <xsd:complexContent>
13 :
<xsd:extension base=“OperationType“/>
14 : </xsd:complexContent>
15 : </xsd:complexType>
1.モデル構造の検証
Step1. AspectMのメタモデルが拡張されているかをチェック
Step2. メタモデルが拡張されていれば、デフォルトのスキーマ
を拡張情報を用いて再定義
Step3. 対象となるモデルの構造がスキーマの定義する構造
に従っているかをチェック
第155回ソフトウェア工学研究会
2007/3/22
24
MLG
Modeling Language Group
Step3. 対象となるモデルの構造がスキーマの
定義する構造に従っているかをチェック
• Javaのjavax.xml.validationパッケージの提供す
るValidatorクラスを利用
• スキーマと照合して XML文章の構造をチェック
1 : DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
2 : Document document = parser.parse(new File(“psm.asm")); 検証対象となるモデルの読み込み
3:
4 : SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
5 : Source schemaFile = new StreamSource(new File(“schema.xsd"));
スキーマの読み込み
6 : Schema schema = factory.newSchema(schemaFile);
7:
8 : Validator validator = schema.newValidator();
9 : try {
10: validator.validate(new DOMSource(document));
11: } catch (SAXException e)
12: e.printStackTrace();
モデルの妥当性検証
13: }
1.モデル構造の検証
Step1. AspectMのメタモデルが拡張されているかをチェック
Step2. メタモデルが拡張されていれば、デフォルトのスキーマ
を拡張情報を用いて再定義
Step3. 対象となるモデルの構造がスキーマの定義する構造
に従っているかをチェック
第155回ソフトウェア工学研究会
2007/3/22
25
2.モデル変換の妥当性検証
2.1 アスペクト適用順序のチェック
2.2 アスペクト同士の干渉のチェック
MLG
Modeling Language Group
2.モデル変換の妥当性検証
2.1 アスペクトの適用順序のチェック
– ユーザが指定するポイントカットに、対応するアドバイ
スが全て適用されているかを検証
2.2 アスペクト同士の干渉のチェック
– 誤ったアスペクトの組み合わせによる、名前の衝突・
多重継承・循環継承のチェック
1. モデル構造の検証
2. モデル変換の妥当性検証
2.1
2.1 アスペクトの適用順序のチェック
アスペクトの適用順序のチェック
2.2
2.2 アスペクト同士の干渉のチェック
アスペクト同士の干渉のチェック
第155回ソフトウェア工学研究会
2007/3/22
27
MLG
Modeling Language Group
2.1 アスペクト適用順序のチェック
• 検証には一階述語論理に基づいたプログラミン
グ言語であるprologを利用
– 処理系にはSWI-Prologを使用
– JPLを利用しJavaを用いて実装
• 検証は以下のステップで行う
2.1 アスペクト適用順序のチェック
Step1. 変換後のモデルから事実を生成
Step2. アスペクトから質問を生成
Step3. 質問の問い合わせ
第155回ソフトウェア工学研究会
2007/3/22
28
MLG
Modeling Language Group
Step1. 変換後のモデルから事実を生成
• XML文章からprologの事実を生成するジェネ
レータを実装
• 生成の概要
<ownedElement name=“Hello” xsi:type=“asm:Class”/>
モデル情報の保存
階層構造の保存
property(‘tagName’,’ownedElement’)
property(‘name’,’Hello’)
property(‘xsi:type’,’asm:Class’)
property(‘id’,’一意なID’)
property(‘parentID’,’親ノードのID’)
modelElement( [述語propertyのリスト] ).
第155回ソフトウェア工学研究会
2007/3/22
29
MLG
Modeling Language Group
Step2. アスペクトから質問を生成
• 質問はアスペクト適用後のモデルの制約
• 質問はJPMごとに、プリミティブな述語の組み合
わせで定義される
述語
説明
super_class_of(P,C)
PはCのスーパークラスである
attribute_of(A,C)
属性AはクラスCに属する操作である
operation_of(O,C)
操作OはクラスCに属する操作である
class_exist(C)
クラスCが存在する
related_to(C1,C2)
クラスC1とクラスC2間に関連がある
aggregated_to(C1,C2) クラスC1とクラスC2間に集約関係がある
composited_to(C1,C2 クラスC1とクラスC2間に合成関係がある
)
2007/3/22
第155回ソフトウェア工学研究会
30
MLG
Modeling Language Group
Step2. アスペクトから質問を生成
• 例)JPM:Compositionを用いたクラスのマージ
アスペクト適用後のモデルの制約
マージを行うアスペクト
生成
•クラスMessageは存在しない
not(class_exist(‘Message’)).
•クラスMessageProfileは存在しない
not(class_exist(‘MessageProfile’)).
•クラスPostMessageFormが存在する
class_exist(‘PostMessageForm’).
第155回ソフトウェア工学研究会
2007/3/22
31
MLG
Modeling Language Group
Step3. 質問の問い合わせ
変換後のモデル
•クラスPostMessageFormが存在する
•クラスPostMessageFormはActionForm
クラスを継承している
生成
事実
SWI-Prolog処理系
Java
生成
アスペクト
質問
JPL
結果:true
結果:false
問い合わせ
not(class_exist(‘Message’)).
not(class_exist(‘MessageProfile’)).
class_exist(‘PostMessageForm’).
super_class_of(‘ActionForm’,’PostMessageForm’).
第155回ソフトウェア工学研究会
2007/3/22
32
MLG
Modeling Language Group
2.2 アスペクト同士の干渉のチェック
• 以下の項目をチェックする
– 名前の衝突のチェック
– 多重継承のチェック
– 循環継承のチェック
第155回ソフトウェア工学研究会
2007/3/22
33
考察とまとめ
MLG
Modeling Language Group
考察
• 現在、出力後のモデルが満たすべき制約はアス
ペクトやメタモデルから生成
それに加えて・・・
• ユーザが出力後のモデルへの制約を加えること
も有効
それが出来れば・・・
• ユーザの本当に意図したモデルが生成されてい
るかを検証することが可能
第155回ソフトウェア工学研究会
2007/3/22
35
MLG
Modeling Language Group
まとめ
• モデル変換の正しさを検証するために、2つの観
点から検証を行った
– モデルの構造における問題点の検証
– アスペクトの織り込みに伴う問題点の検証
• 本研究により、ユーザにモデル変換時の誤りを
通知することが可能になった
第155回ソフトウェア工学研究会
2007/3/22
36
終わり
ご清聴ありがとうございました
付録
MLG
Modeling Language Group
AOPを用いたログ処理の例
通常のログ出力
アスペクトによるログ処理の織り込み
ログ出力
ログ出力アスペクト
log()
log()
log() log()
モジュールA
モジュールB
•
全てのオブジェクト
初期化直前にlog()
全てのメソッド実行
直前にlog()
モジュールA
モジュールB
モジュールAに適用されるログ出力アスペクト
– ポイントカット:全てのオブジェクト初期化
– アドバイス:直前にlog()
•
モジュールBに適用されるログ出力アスペクト
– ポイントカット:全てのメソッド実行
– アドバイス:直前にlog()
第155回ソフトウェア工学研究会
2007/3/22
39
MLG
Modeling Language Group
2.問題意識
• 具体例
– 組込みシステムにおける外部環境分析
 システムと外部環境の関係を表現するためにクラス図を利用
UMLのクラス図を使って表現
観測を妨害す
る光
環境光
EnvironmentLight
光センサー
光センサーを
制御
光センサーが
観測する光
SensorDriver LightSensor
ドライバ
光センサー
システム
ObservedLight
観測光
外部環境
第155回ソフトウェア工学研究会
2007/3/22
40
MLG
Modeling Language Group
2.問題意識
• 具体例
• 問題提起
UMLでは・・・
ステレオタイプを用いて
視覚的に区別を行う
ソフトウェア ハードウェア
外部環境
個々のモデル要素の役割を視覚的に区別できない
第155回ソフトウェア工学研究会
2007/3/22
41
MLG
Modeling Language Group
2.問題意識
• 問題提起
「ソフトウェア」と「外部環境」
→ハードウェアを仲介する
「ハードウェア」
→制御するソフトウェアが必要
しかし・・・ステレオタイプは単なるラベルであり、アノテーションにすぎない
モデルがドメイン特有の制約事項を満たしていることまでは保証できない
ドメインに特化した表現上の区別や制約を、厳密にモデリングできる機構が必要
第155回ソフトウェア工学研究会
2007/3/22
42
MLG
Modeling Language Group
2.2 アスペクト同士の干渉のチェック
• 検証項目
– 名前の衝突の検出
• 既にモデル中に存在する名前を持つモデル要素の追加
→同スコープ内での名前の衝突を検出
– 多重継承の検出
• 同じクラスへの複数の継承関係の追加
• 既にスーパークラスを持つクラスへの継承関係の追加
→複数のスーパークラスを持つクラスを検出
– 循環継承の検出
• 継承関係がループになるような継承関係の追加
→全クラスの継承関係を辿ることで検出
第155回ソフトウェア工学研究会
2007/3/22
43
MLG
Modeling Language Group
1.モデル構造の検証
• 検証に先立ち拡張前のメタモデルから、デフォル
トのスキーマを定義
• モデル構造の検証は以下のステップで行う
1.モデル構造の検証
Step1. メタモデルの拡張をチェック
Step2. メタモデルが拡張されていれば、デフォルトのスキーマ
を拡張情報を用いて再定義
Step3. 対象となるモデルの構造がスキーマの定義する構造
に従っているかをチェック
第155回ソフトウェア工学研究会
2007/3/22
44
MLG
Modeling Language Group
2.モデル変換の妥当性検証
2.1 アスペクトの適用順序のチェック
– ユーザが指定するポイントカットに、対応するアドバイ
スが全て適用されているかを検証
2.2 アスペクト同士の干渉のチェック
– 誤ったアスペクトの組み合わせによる、名前の衝突・
多重継承・循環継承のチェック
1. モデル構造の検証
2. モデル変換の妥当性検証
2.1
2.1 アスペクトの適用順序のチェック
アスペクトの適用順序のチェック
2.2
2.2 アスペクト同士の干渉のチェック
アスペクト同士の干渉のチェック
第155回ソフトウェア工学研究会
2007/3/22
45
MLG
Modeling Language Group
問題意識 その2
• アスペクトの適用順序や、アスペクト同士の干渉により、
正しい変換が行われない場合がある
モデルエディタ
クラス図
アスペクト図
アスペクト同士の干渉
モデル変換
適用順序により
によりモデルに誤りが
含まれる 結果が異なる
……
……
……
第155回ソフトウェア工学研究会
2007/3/22
46
MLG
Modeling Language Group
問題意識 その2
• アスペクトの適用順序により、正しい変換が行われない
場合がある
モデルエディタ
クラス図
アスペクト図
モデル変換
第155回ソフトウェア工学研究会
適用順序により
結果が異なる
2007/3/22
47
MLG
Modeling Language Group
3.モデリング言語の拡張
• モデル要素をメタレベルで区別することが有効
– メタモデル
UMLの定義をUML自身で記述
クラス
属性
操作
第155回ソフトウェア工学研究会
2007/3/22
48
MLG
Modeling Language Group
Document Object Model (DOM)
• XML文章で保存されているモデルをDOMを用い
て操作
• XML文章を汎用的に操作するためのインター
フェース
• XMLを構成する最小単位であるノードの追加・削
除・変更が可能
DOMツリー
第155回ソフトウェア工学研究会
2007/3/22
49