mda技術による再利用の可能性 - fujitsuxmi形式を入出力とするmdaツール...

41

Upload: others

Post on 19-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

MDA技術による再利用の可能性

富士通株式会社

吉田

Page 2: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

2All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAとは

Model Driven Architecture:モデル駆動型開発.

UMLを使った,業務やシステムのモデリン

グを主体とするソフトウェア開発アプローチ.

「自動化」がキーワード

2001年にOMGがOMAに代わる新しい標準化の考え方として提唱,推進.

Page 3: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

3All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAの考え方

CORBA PSM Java PSM .NET PSM XML PSM

CORBA IDL Javaソースコード C#ソースコード XMLスキーマ

PIM (Platform Independent Model)

PSM(Platform Specific Model)

PIM

「Platform」もOMG用語であることに注意完全にindependentなモデルは現実的ではなく,

相対的な言い方と考えてよい

Page 4: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

4All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAとは(再)

OMGにとっては,「標準化はUMLで!」典型的には,「UMLモデルからのソースコードの自動生成」のこと以下の技術も包含する:

業務モデル(PIM)から実装依存モデル(PSM)への自動詳細化ソースコードからモデルへのリバースモデルとソースコードの同期(生成+リバース)モデルでのテスト・デバッグ実行可能なモデル(Executable UML: 究極の目標)

Page 5: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

5All Rights Reserved, Copyright Ⓒ FUJITSU 2004

いまなぜMDAか?

UMLの特徴

単なる記法ではない(モデル)

そもそもMachine readableInteroperabilityへの期待(デファクト)

Eclipseの普及

統合開発環境は使い出したらやめられない

EMF, UML2, GMTへの期待

Page 6: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

6All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDA技術の現状[Interstage Apworksの場合]

Enterprise Ed.とModelers-J Ed.にIBM Rational XDE Developerを同梱

コードモデルとソースコードの同期Java, EJB, Servletのスケルトンコード生成とリバース

データモデルとDBスキーマの同期

配置モデルからの自動生成JAR, EJB-JAR, WAR, EAR

コードテンプレートメソッド内部処理の自動生成カスタマイズJavaScript, Java, COM/.NETコンポーネント

デザインパターンGoFパターン,J2EEパターン(1.2, 1.3), テーブル変換

パターン定義機能

Page 7: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

7All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDA技術の利用例Javaコードモデル

≪N i jo S c re e n C l a s s ≫E m p l o y e e B e a n

- i d : S tr i n g- n a m e : S tr i n g- e m a i l : S tr i n g- p h o n e : S tr i n g- a d d re s s : S tr i n g

+ E m p l o y e e B e a n ( )+ g e t Id ( )+ s e t Id ( )+ g e tN a m e ( )+ s e tN a m e ( )+ g e tE m a i l ( )+ s e tE m a i l ( )+ g e tP h o n e ( )+ s e tP h o n e ( )+ g e tA d d re s s ( )+ s e tA d d re s s ( )

E m p l o y e e A c c e s s o r

n n e c t i o n : j a v a .s q l .C o n n e c t i o n

p l o y e e A c c e s s o r ( )p l o y e e A c c e s s o r ( )

i t ( )e a te ( )d A l l ( )d B y C o n d i t i o n ( )

B y P r i m a ry K e y ( )+ re m o v e ( )+ u p d a te ( )+ ≪s e l e c t≫ f i n d B y A d d re s s ( )+ ≪in s e r t≫ i n s e rtA l l ( )+ ≪u p d a te ≫ u p d a te A l l ( )+ d o S o m e th i n g ( )

E m p l o y e e T e s t D r i v e r

+ m a i n ( )

≪N i j o S c re e n C l a s s ≫E m p l o y e e L i s t B e a n

+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )

- e m p l o y e e B e a*

E m p l o y e e A c c e s s o r R u n t i m eE x c e p t i o n

+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )

R u n t i m e E x c e p t i o n

T h r o w a b l e

- c a u s e1

E m p l o y e e A c c e s s o r . j a v a≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

E m p l o y e e T e s t D r i v e r . j a v a

≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

≪N i j o S c re e n C l a s s ≫E m p l o y e e B e a n

- i d : S tr i n g- n a m e : S tr i n g- e m a i l : S tr i n g- p h o n e : S tr i n g- a d d re s s : S tr i n g

+ E m p l o y e e B e a n ( )+ g e t Id ( )+ s e t Id ( )+ g e tN a m e ( )+ s e tN a m e ( )+ g e tE m a i l ( )+ s e tE m a i l ( )+ g e tP h o n e ( )+ s e tP h o n e ( )+ g e tA d d re s s ( )+ s e tA d d re s s ( )

E m p l o y e e A c c e s s o r

n n e c t i o n : j a v a .s q l .C o n n e c t i o n

p l o y e e A c c e s s o r ( )p l o y e e A c c e s s o r ( )

i t ( )e a te ( )d A l l ( )d B y C o n d i t i o n ( )

B y P r i m a ry K e y ( )+ re m o v e ( )+ u p d a te ( )+ ≪s e l e c t≫ f i n d B y A d d re s s ( )+ ≪in s e r t≫ i n s e rtA l l ( )+ ≪u p d a te ≫ u p d a te A l l ( )+ d o S o m e th i n g ( )

E m p l o y e e T e s t D r i v e r

+ m a i n ( )

≪N i j o S c re e n C l a s s ≫E m p l o y e e L i s t B e a n

+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )

- e m p l o y e e B e a*

E m p l o y e e A c c e s s o r R u n t i m eE x c e p t i o n

+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )

R u n t i m e E x c e p t i o n

T h r o w a b l e

- c a u s e1

E m p l o y e e A c c e s s o r . j a v a≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

E m p l o y e e T e s t D r i v e r . j a v a

≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

≪N i j o S c re e n C l a s s ≫E m p l o y e e B e a n

- i d : S tr i n g- n a m e : S tr i n g- e m a i l : S tr i n g- p h o n e : S tr i n g- a d d re s s : S tr i n g

+ E m p l o y e e B e a n ( )+ g e t Id ( )+ s e t Id ( )+ g e tN a m e ( )+ s e tN a m e ( )+ g e tE m a i l ( )+ s e tE m a i l ( )+ g e tP h o n e ( )+ s e tP h o n e ( )+ g e tA d d re s s ( )+ s e tA d d re s s ( )

E m p l o y e e A c c e s s o r

n n e c t i o n : j a v a .s q l .C o n n e c t i o n

p l o y e e A c c e s s o r ( )p l o y e e A c c e s s o r ( )

i t ( )e a te ( )d A l l ( )d B y C o n d i t i o n ( )

B y P r i m a ry K e y ( )+ re m o v e ( )+ u p d a te ( )+ ≪s e l e c t≫ f i n d B y A d d re s s ( )+ ≪in s e r t≫ i n s e rtA l l ( )+ ≪u p d a te ≫ u p d a te A l l ( )+ d o S o m e th i n g ( )

E m p l o y e e T e s t D r i v e r

+ m a i n ( )

≪N i j o S c re e n C l a s s ≫E m p l o y e e L i s t B e a n

+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )

- e m p l o y e e B e a*

E m p l o y e e A c c e s s o r R u n t i m eE x c e p t i o n

+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )

R u n t i m e E x c e p t i o n

T h r o w a b l e

- c a u s e1

E m p l o y e e A c c e s s o r . j a v a≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

E m p l o y e e T e s t D r i v e r . j a v a

≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

≪N i j o S c re e n C l a s s ≫E m p l o y e e B e a n

- i d : S tr i n g- n a m e : S tr i n g- e m a i l : S tr i n g- p h o n e : S tr i n g- a d d re s s : S tr i n g

+ E m p l o y e e B e a n ( )+ g e t Id ( )+ s e t Id ( )+ g e tN a m e ( )+ s e tN a m e ( )+ g e tE m a i l ( )+ s e tE m a i l ( )+ g e tP h o n e ( )+ s e tP h o n e ( )+ g e tA d d re s s ( )+ s e tA d d re s s ( )

E m p l o y e e A c c e s s o r

n n e c t i o n : j a v a .s q l .C o n n e c t i o n

p l o y e e A c c e s s o r ( )p l o y e e A c c e s s o r ( )

i t ( )e a te ( )d A l l ( )d B y C o n d i t i o n ( )

B y P r i m a ry K e y ( )+ re m o v e ( )+ u p d a te ( )+ ≪s e l e c t≫ f i n d B y A d d re s s ( )+ ≪in s e r t≫ i n s e rtA l l ( )+ ≪u p d a te ≫ u p d a te A l l ( )+ d o S o m e th i n g ( )

E m p l o y e e T e s t D r i v e r

+ m a i n ( )

≪N i j o S c re e n C l a s s ≫E m p l o y e e L i s t B e a n

+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )

- e m p l o y e e B e a*

E m p l o y e e A c c e s s o r R u n t i m eE x c e p t i o n

+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )

R u n t i m e E x c e p t i o n

T h r o w a b l e

- c a u s e1

E m p l o y e e A c c e s s o r . j a v a≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

E m p l o y e e T e s t D r i v e r . j a v a

≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

≪N i j o S c re e n C l a s s ≫E m p l o y e e B e a n

- i d : S tr i n g- n a m e : S tr i n g- e m a i l : S tr i n g- p h o n e : S tr i n g- a d d re s s : S tr i n g

+ E m p l o y e e B e a n ( )+ g e t Id ( )+ s e t Id ( )+ g e tN a m e ( )+ s e tN a m e ( )+ g e tE m a i l ( )+ s e tE m a i l ( )+ g e tP h o n e ( )+ s e tP h o n e ( )+ g e tA d d re s s ( )+ s e tA d d re s s ( )

E m p l o y e e A c c e s s o r

n n e c t i o n : j a v a .s q l .C o n n e c t i o n

p l o y e e A c c e s s o r ( )p l o y e e A c c e s s o r ( )

i t ( )e a te ( )d A l l ( )d B y C o n d i t i o n ( )

B y P r i m a ry K e y ( )+ re m o v e ( )+ u p d a te ( )+ ≪s e l e c t≫ f i n d B y A d d re s s ( )+ ≪in s e r t≫ i n s e rtA l l ( )+ ≪u p d a te ≫ u p d a te A l l ( )+ d o S o m e th i n g ( )

E m p l o y e e T e s t D r i v e r

+ m a i n ( )

≪N i j o S c re e n C l a s s ≫E m p l o y e e L i s t B e a n

+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )+ g e tE m p l o y e e B e a n s ( )+ s e tE m p l o y e e B e a n s ( )

- e m p l o y e e B e a*

E m p l o y e e A c c e s s o r R u n t i m eE x c e p t i o n

+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )+ E m p l o y e e A c c e s s o rR u n t im e E x c e p t i o n ( )

R u n t i m e E x c e p t i o n

T h r o w a b l e

- c a u s e1

E m p l o y e e A c c e s s o r . j a v a≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

E m p l o y e e T e s t D r i v e r . j a v a

≪re s i d e ≫

≪a c c e s s ≫

≪a c c e s s ≫

JavaコードモデルJavaソースコード

public classEmployeeAccessor {.........................

}

public classEmployeeAccessor {.........................

}

public classEmployeeAccessor {.........................

}

public classEmployeeBean {private String id;private String name;private String email;private String phone;private String address;.....

}

Javaソースコード

同期

n sn sn sn sn s

- c o

+ E m

+ i n c r

+ f i n+ f i+ f i n d

- c o

+ E m

+ i n c r

+ f i n+ f i+ f i n d

- c o

+ E m

+ i n c r

+ f i n+ f i+ f i n d

- c o

+ E m

+ i n c r

+ f i n+ f i+ f i n d

- c o

+ E m

+ i n c r

+ f i n+ f i+ f i n d

デザインパターン + E m+ E m+ E m+ E m+ E m

+++++

nnnnn

分析データモデル分析データモデル

≪Entity≫Employee

+ ≪PK≫ id : String+ name : String+ email : String+ phone : String+ address : String

+ ≪select≫ findByAddress ( )+ ≪insert≫ insertAll ( )+ ≪update≫ updateAll ( )+ doSomething ( )

DBテーブル

定義モデル

PK id : VARCHAR(255)N name : VARCHAR(255)N email : VARCHAR(255)N phone : VARCHAR(255)N address : VARCHAR(255)

<<table>>Employee

DBテーブル

定義モデルデータベーステーブル生成DDL

データベーステーブル生成DDL

CREATE TABLEEmployee (id ...,name ...,email ...,phone ...,address ...

)

テーブル変換

同期

PIM PSM コード

Page 8: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

8All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAは魔術?

「UMLで記述するだけで,なんでも自動生成できる」わけではない

種の仕込が必要パターン:「モデル→モデル」変換ルール

コードテンプレート:「モデル→コード」変換ルール

標準提供変換ルールだけでは効果少

変換ルール開発にはスキルが必要

Page 9: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

9All Rights Reserved, Copyright Ⓒ FUJITSU 2004

簡単なモデル変換の例

Person

+name:String

Person

-name:String

+getName()+setName()

変換ルール:対象クラスのすべてのpublicな属性に対して同じ属性をprivateで持たせその名前にset/getを付けたメソッドを持たせる

記述対象が「クラス」や「属性」

「Person」や「name」

Page 10: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

10All Rights Reserved, Copyright Ⓒ FUJITSU 2004

メタモデルによる表現

Class

name=“Person”

Class

name=“Person”

Property

name=“name”visibility=public

Property Operation Operation

name=“name”visibility=private

name=“getName”visibility=public

name=“setName”visibility=public

メタモデル:「モデル」のモデル

Page 11: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

11All Rights Reserved, Copyright Ⓒ FUJITSU 2004

OMGのメタモデル4層

Person

name:String

Kernel::Class

name:String

Model::Class

name:String

Person

name=“Jack”

Kernel::Class

name=“Person”

Model::Class

name=“Class”

(クラス表現)

(インスタンス表現)

<<instance of>>

より正確にはUML::Classes::Kernel::Class

M0 M1 M2 M3

Page 12: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

12All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDA技術開発動向

OMGUML2.0MOF (Meta Object Facility)XMI (XML Metadata Interchange)QVT (Query/Views/Transformations)

EclipseEMF (Eclipse Modeling Framework)UML2GMT (Generative Model Transformer)

Page 13: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

13All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MOF OMG

UMLなどのモデリング言語を規定するためのメタ言語

OMGは4月にMOF2.0を採択する予定

NameSpace

ModelElementcontainedElement (M3クラス図の一部)

container Feature

GeneralizedElement BehavioralFeature StructuralFeature

Package Classifier

Association DataType Class

AttributeOperation

Page 14: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

14All Rights Reserved, Copyright Ⓒ FUJITSU 2004

QVT OMG

MOF2.0改訂の一環Transformations

• メタモデルS(source)とメタモデルT(target)の関係を記述• Sに従うモデルからTに従うモデルのインスタンスを生成• SとTは同じでもよい

Query• ソースの一部を切り取るようなTransformation??

Views• ターゲットがソースに対応づくようなTransformation??

4月に2回目の改訂サブミッション

変換の再利用性などが評価基準

Page 15: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

15All Rights Reserved, Copyright Ⓒ FUJITSU 2004

変換とMOFとの関係 OMG

MOF

Sourceメタモデル(例えばUMLメタモデル)

Targetメタモデル(例えばIDLメタモデル)

Transformationのメタモデル

規定する 規定する

規定する

規定する

規定する

ソース ターゲットM1

M2

変換規定する

Sourceモデル(例えばUMLモデル)

Targetモデル(例えばIDL定義)

Transformation 規定する

M3

Page 16: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

16All Rights Reserved, Copyright Ⓒ FUJITSU 2004

EMF Eclipse

モデリングと設計データ表現のためのJavaフレームワークEMF本体

ECore:各種のモデルを実装するためのメタモデルクラス群(MOFのM3のJava実装)モデル変更通知,XMI永続化,reflective API等

EMF.EditEMFモデルのエディタ用フレームワーク.

EMF.Codegenメタモデル(M2)からのコード生成機能.以下を生成:

メタモデルのクラスのJavaインタフェースと実装クラス,およびファクトリやパッケージの実装クラス.モデルクラスをエディタで表示や編集するためのアダプタクラスモデルを編集するツリーエディタ

Page 17: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

17All Rights Reserved, Copyright Ⓒ FUJITSU 2004

UML2 Eclipse

昨年末に活動開始したばかり

ゴール

EMFベースのUML2.0メタモデル(M2)実装の提供

モデルの交換を容易にする共通XMIスキーマの提供

UML2.0仕様を検証するテストケースとなること

UML2.0仕様が定義する「準拠レベル」の検証ルールの提供

Page 18: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

18All Rights Reserved, Copyright Ⓒ FUJITSU 2004

EMFとUML2の関係

Roseで記述したUML2.0のメタモデル

EClass

Class:EClass

<<instance of>>

class

UML2が提供するJavaクラス

EMF Ecoreが提供するJavaクラス

M3

Class

EMF.CodegenのRose2Ecore

で自動変換

EMF.Codegen.JETでJavaソース生成*

classM2

<<instance of>>

Person:ClassM1

* 正確にはインターフェースと実装クラスを生成

Page 19: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

19All Rights Reserved, Copyright Ⓒ FUJITSU 2004

GMT Eclipse

XMI形式を入出力とするMDAツール

Mapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付けた一つのXMI形式モデルを出力

Transformation: 対応付いたモデルを入力し,変換結果のXMI形式モデルを出力

Text generation: 対応付いたモデルを入力し,変換結果のソースコードテキストを出力

Workflow: 上記の三種のコンポーネントを糊付けし,Eclipseから起動できるようにする

昨年5月から活動開始

QVT標準化を目標としている?

Page 20: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

20All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAによる再利用の拡大

ソースコード,フレームワーク,コンポーネントの再利用に加えて

PIMの再利用

PSMの再利用

パターンの再利用

コードテンプレートの再利用

Page 21: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

21All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAによる再利用のイメージ

同一プロジェクト内での再利用

PIM

自動生成 自動生成PSM

:手作業 :再利用or自動生成

自動生成 自動生成コード

Page 22: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

22All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAによる再利用のイメージ

同一プラットフォームでの再利用

再利用素材 再利用できる部分PIM

再利用素材 再利用できる部分自動生成PSM

再利用素材 再利用できる部分自動生成コード

:手作業 :再利用or自動生成

Page 23: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

23All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAによる再利用のイメージ

異種プラットフォームでの再利用

再利用素材 再利用できる部分PIM

自動生成

:手作業 :再利用or自動生成

PSM

コード 自動生成

Page 24: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

24All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDAによる再利用のイメージ

同一プロジェクト内 同一プラットフォーム 異種プラットフォーム

PIM

:手作業 :再利用or自動生成

PSM

コード

Page 25: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

25All Rights Reserved, Copyright Ⓒ FUJITSU 2004

プロジェクト事例

中堅企業向け販売業務パッケージの開発(使用言語はC++)

プロジェクト内再利用したパターン

分析モデルの記述方法をテンプレート化したものを「分析パターン(15種)」と称して,業務SEに配布.

分析モデル→設計モデルの自動詳細化ツールを開発し,「設計パターン(20種)」を用意.

設計モデル→ソースコード自動生成ツールを開発し,「設計パターン」に対応するコードテンプレートを用意.

Page 26: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

26All Rights Reserved, Copyright Ⓒ FUJITSU 2004

パターンを中核とする開発

ソースコード

設計書

仕様書

要求書

パターン

カタログ

パターン

カタログ

パターン

カタログ

分析

設計

実装パターン採用

パターン採用

パターン採用

実装パターン

設計パターン

分析パターン

パターン抽出

パターン抽出

パターン抽出

Page 27: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

27All Rights Reserved, Copyright Ⓒ FUJITSU 2004

開発体制コアチーム

アーキテクト + オブジェクト指向設計専門家の支援

他チームの開発作業のレビューパターンの決定・文書化・周知徹底

先行チーム若手開発者2名

主力チームよりも早いタイミングで作業パターン化の素材を提供する

主力チーム一般開発者3名×2チーム

パターン利用により,流れ作業的な開発

Page 28: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

28All Rights Reserved, Copyright Ⓒ FUJITSU 2004

分析パターン

クライアント・サーバ間プロトコル

マスタの照会・更新・起票処理

伝票の照会・更新・起票処理

伝票の状態遷移方式

入力データのチェック処理

在庫管理方式

採番方式

など15種類

Page 29: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

29All Rights Reserved, Copyright Ⓒ FUJITSU 2004

分析パターンの例(1)

クライアント

伝票の生成

伝票処理コントローラ

create:伝票

伝票のデータ項目の設定

属性設定

伝票の処理状態の設定

状態変更

伝票の追加

insert

データベース

Page 30: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

30All Rights Reserved, Copyright Ⓒ FUJITSU 2004

分析パターンの例(2)

伝票処理コントローラ

slip := 伝票検索

伝票管理

create伝票:slip

参照・設定

伝票更新(slip)

select

データベース

update

属性参照

Page 31: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

31All Rights Reserved, Copyright Ⓒ FUJITSU 2004

設計パターン

データベースの具体的なアクセス方法

オブジェクトの属性の表現方法

他のオブジェクトへのリンクの表現方法

などの20種

Page 32: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

32All Rights Reserved, Copyright Ⓒ FUJITSU 2004

設計パターンの例

attr1: int

ConcreteSlip(String)̃ConcreteSlip()SetAttr1(int)GetAttr1(): intDataCheck(): ErrorList

ConcreteSlip

key: Stringstate: SlipState

TransState(SlipState)IsInState(SlipState): booleanDataCheck(): ErrorList {abstract}

SlipObject{abstract}

$uniqueInstance: ConcreteManager

$Instance: ConcreteManagerConcreteManager()̃ConcreteManager()createNew(String): SlipObject

ConcreteManager

GetNew(String): SlipObjectInsert(SlipObject)GetOne(String): SlipObjectUpdate(SlipObject)createNew(String): SlipObject {abstract}

ObjectManager{abstract}

key: String

Page 33: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

パターン適用支援ツール

パターン適用をできる限り自動化し,人手による不徹底を排除

設計書

Orderidproduct

Page 34: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

パターン適用支援ツール

パターン適用をできる限り自動化し,人手による不徹底を排除

開発対象モデル

Order

idproduct

自動拡張後の設計書

Order OrderManager

getOne()insertOne(Order*)updateOne(Order*)

0..n

idproduct

getId()getProduct()setId()setProduct()

idproduct

クラスとメソッドを自動追加.

Page 35: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

パターン適用支援ツール

パターン適用をできる限り自動化し,人手による不徹底を排除

開発対象モデル

Order

idproduct

自動拡張後の設計書

Order OrderManager

getOne()insertOne(Order*)updateOne(Order*)

0..n

idproduct

getId()getProduct()setId()setProduct()

Order*OrderManager::getOne( ){Order* obj = new

Order( );……

return obj;}

生成したソースコード

idproduct

クラスとメソッドを自動追加.

追加したメソッドのコードを自動生成

Page 36: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

36All Rights Reserved, Copyright Ⓒ FUJITSU 2004

適用結果

設計モデルの中で83% (4,829÷5,820)

のメソッドが自動生成

ソースコードの70%(21,251÷30,386)

が自動生成

生産性:外部発注基準の3倍

品質(バグ密度):部門内基準の数分の1

拡張性・保守性:一貫した設計とコーディング

Page 37: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

37All Rights Reserved, Copyright Ⓒ FUJITSU 2004

成功の秘密は?

先行チームによるパターン洗い出し

コアチームが,フレームワークと自動生成のバランスを考慮しながら随時更新

コアチームの熱心なレビューによって,パターン適用の徹底化

Page 38: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

38All Rights Reserved, Copyright Ⓒ FUJITSU 2004

フレームワークとMDA

PIM PIM

ソースコード

PSM

特定フレームワーク向けデザインパターン

自動生成強化 フレームワーク導入の効果

モデルをより具体化

ソースをより抽象化

プラットフォーム(J2EEなど)

フレームワークや

共通コンポーネントソースコード

スケルトンコード

標準の自動生成

標準のデザインパターン

PSM

ハンドコーディング

Page 39: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

39All Rights Reserved, Copyright Ⓒ FUJITSU 2004

MDA技術の課題

まだちょっと‥敷居が高い

UML, モデリング,メタモデル

値段が高いツール,動作リソース

標準化・オープン化は次世代Interoperability, Reusability効果は今年後半から?

⇒効果が実感できれば一気に広まる?!

Page 40: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

40All Rights Reserved, Copyright Ⓒ FUJITSU 2004

まとめ

MDAとは(典型的には)UMLベースの自動化技術のこと

モデル/モデル,モデル/ソースの変換ルールをうまく設定すると高い生産性を実現できる

ソースコード,フレームワーク,コンポーネントに加えて,モデルや変換ルールへと,再利用資産を効果的に拡大する

Page 41: MDA技術による再利用の可能性 - FujitsuXMI形式を入出力とするMDAツール zMapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付

41All Rights Reserved, Copyright Ⓒ FUJITSU 2004