拡張可能なアスペクト指向モデリング における織り合わせの検証 九州工業大学大学院 情報工学研究科 前野 雄作,鵜林 尚靖 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
© Copyright 2024 ExpyDoc