View
4
Download
0
Category
Preview:
Citation preview
MDA技術による再利用の可能性
富士通株式会社
吉田
2All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAとは
Model Driven Architecture:モデル駆動型開発.
UMLを使った,業務やシステムのモデリン
グを主体とするソフトウェア開発アプローチ.
「自動化」がキーワード
2001年にOMGがOMAに代わる新しい標準化の考え方として提唱,推進.
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なモデルは現実的ではなく,
相対的な言い方と考えてよい
4All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAとは(再)
OMGにとっては,「標準化はUMLで!」典型的には,「UMLモデルからのソースコードの自動生成」のこと以下の技術も包含する:
業務モデル(PIM)から実装依存モデル(PSM)への自動詳細化ソースコードからモデルへのリバースモデルとソースコードの同期(生成+リバース)モデルでのテスト・デバッグ実行可能なモデル(Executable UML: 究極の目標)
5All Rights Reserved, Copyright Ⓒ FUJITSU 2004
いまなぜMDAか?
UMLの特徴
単なる記法ではない(モデル)
そもそもMachine readableInteroperabilityへの期待(デファクト)
Eclipseの普及
統合開発環境は使い出したらやめられない
EMF, UML2, GMTへの期待
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), テーブル変換
パターン定義機能
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 コード
8All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAは魔術?
「UMLで記述するだけで,なんでも自動生成できる」わけではない
種の仕込が必要パターン:「モデル→モデル」変換ルール
コードテンプレート:「モデル→コード」変換ルール
標準提供変換ルールだけでは効果少
変換ルール開発にはスキルが必要
9All Rights Reserved, Copyright Ⓒ FUJITSU 2004
簡単なモデル変換の例
Person
+name:String
Person
-name:String
+getName()+setName()
変換ルール:対象クラスのすべてのpublicな属性に対して同じ属性をprivateで持たせその名前にset/getを付けたメソッドを持たせる
記述対象が「クラス」や「属性」
「Person」や「name」
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
メタモデル:「モデル」のモデル
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
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)
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
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回目の改訂サブミッション
変換の再利用性などが評価基準
15All Rights Reserved, Copyright Ⓒ FUJITSU 2004
変換とMOFとの関係 OMG
MOF
Sourceメタモデル(例えばUMLメタモデル)
Targetメタモデル(例えばIDLメタモデル)
Transformationのメタモデル
規定する 規定する
規定する
規定する
規定する
ソース ターゲットM1
M2
変換規定する
Sourceモデル(例えばUMLモデル)
Targetモデル(例えばIDL定義)
Transformation 規定する
M3
16All Rights Reserved, Copyright Ⓒ FUJITSU 2004
EMF Eclipse
モデリングと設計データ表現のためのJavaフレームワークEMF本体
ECore:各種のモデルを実装するためのメタモデルクラス群(MOFのM3のJava実装)モデル変更通知,XMI永続化,reflective API等
EMF.EditEMFモデルのエディタ用フレームワーク.
EMF.Codegenメタモデル(M2)からのコード生成機能.以下を生成:
メタモデルのクラスのJavaインタフェースと実装クラス,およびファクトリやパッケージの実装クラス.モデルクラスをエディタで表示や編集するためのアダプタクラスモデルを編集するツリーエディタ
17All Rights Reserved, Copyright Ⓒ FUJITSU 2004
UML2 Eclipse
昨年末に活動開始したばかり
ゴール
EMFベースのUML2.0メタモデル(M2)実装の提供
モデルの交換を容易にする共通XMIスキーマの提供
UML2.0仕様を検証するテストケースとなること
UML2.0仕様が定義する「準拠レベル」の検証ルールの提供
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
* 正確にはインターフェースと実装クラスを生成
19All Rights Reserved, Copyright Ⓒ FUJITSU 2004
GMT Eclipse
XMI形式を入出力とするMDAツール
Mapping: PIMとパターンをそれぞれXMI形式で入力し,それらを対応付けた一つのXMI形式モデルを出力
Transformation: 対応付いたモデルを入力し,変換結果のXMI形式モデルを出力
Text generation: 対応付いたモデルを入力し,変換結果のソースコードテキストを出力
Workflow: 上記の三種のコンポーネントを糊付けし,Eclipseから起動できるようにする
昨年5月から活動開始
QVT標準化を目標としている?
20All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAによる再利用の拡大
ソースコード,フレームワーク,コンポーネントの再利用に加えて
PIMの再利用
PSMの再利用
パターンの再利用
コードテンプレートの再利用
21All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAによる再利用のイメージ
同一プロジェクト内での再利用
PIM
自動生成 自動生成PSM
:手作業 :再利用or自動生成
自動生成 自動生成コード
22All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAによる再利用のイメージ
同一プラットフォームでの再利用
再利用素材 再利用できる部分PIM
再利用素材 再利用できる部分自動生成PSM
再利用素材 再利用できる部分自動生成コード
:手作業 :再利用or自動生成
23All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAによる再利用のイメージ
異種プラットフォームでの再利用
再利用素材 再利用できる部分PIM
自動生成
:手作業 :再利用or自動生成
PSM
コード 自動生成
24All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDAによる再利用のイメージ
同一プロジェクト内 同一プラットフォーム 異種プラットフォーム
PIM
:手作業 :再利用or自動生成
PSM
コード
25All Rights Reserved, Copyright Ⓒ FUJITSU 2004
プロジェクト事例
中堅企業向け販売業務パッケージの開発(使用言語はC++)
プロジェクト内再利用したパターン
分析モデルの記述方法をテンプレート化したものを「分析パターン(15種)」と称して,業務SEに配布.
分析モデル→設計モデルの自動詳細化ツールを開発し,「設計パターン(20種)」を用意.
設計モデル→ソースコード自動生成ツールを開発し,「設計パターン」に対応するコードテンプレートを用意.
26All Rights Reserved, Copyright Ⓒ FUJITSU 2004
パターンを中核とする開発
ソースコード
設計書
仕様書
要求書
パターン
カタログ
パターン
カタログ
パターン
カタログ
分析
設計
実装パターン採用
パターン採用
パターン採用
実装パターン
設計パターン
分析パターン
パターン抽出
パターン抽出
パターン抽出
27All Rights Reserved, Copyright Ⓒ FUJITSU 2004
開発体制コアチーム
アーキテクト + オブジェクト指向設計専門家の支援
他チームの開発作業のレビューパターンの決定・文書化・周知徹底
先行チーム若手開発者2名
主力チームよりも早いタイミングで作業パターン化の素材を提供する
主力チーム一般開発者3名×2チーム
パターン利用により,流れ作業的な開発
28All Rights Reserved, Copyright Ⓒ FUJITSU 2004
分析パターン
クライアント・サーバ間プロトコル
マスタの照会・更新・起票処理
伝票の照会・更新・起票処理
伝票の状態遷移方式
入力データのチェック処理
在庫管理方式
採番方式
など15種類
29All Rights Reserved, Copyright Ⓒ FUJITSU 2004
分析パターンの例(1)
クライアント
伝票の生成
伝票処理コントローラ
create:伝票
伝票のデータ項目の設定
属性設定
伝票の処理状態の設定
状態変更
伝票の追加
insert
データベース
30All Rights Reserved, Copyright Ⓒ FUJITSU 2004
分析パターンの例(2)
伝票処理コントローラ
slip := 伝票検索
伝票管理
create伝票:slip
参照・設定
伝票更新(slip)
select
データベース
update
属性参照
31All Rights Reserved, Copyright Ⓒ FUJITSU 2004
設計パターン
データベースの具体的なアクセス方法
オブジェクトの属性の表現方法
他のオブジェクトへのリンクの表現方法
などの20種
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
パターン適用支援ツール
パターン適用をできる限り自動化し,人手による不徹底を排除
設計書
Orderidproduct
パターン適用支援ツール
パターン適用をできる限り自動化し,人手による不徹底を排除
開発対象モデル
Order
idproduct
自動拡張後の設計書
Order OrderManager
getOne()insertOne(Order*)updateOne(Order*)
0..n
idproduct
getId()getProduct()setId()setProduct()
idproduct
クラスとメソッドを自動追加.
パターン適用支援ツール
パターン適用をできる限り自動化し,人手による不徹底を排除
開発対象モデル
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
クラスとメソッドを自動追加.
追加したメソッドのコードを自動生成
36All Rights Reserved, Copyright Ⓒ FUJITSU 2004
適用結果
設計モデルの中で83% (4,829÷5,820)
のメソッドが自動生成
ソースコードの70%(21,251÷30,386)
が自動生成
生産性:外部発注基準の3倍
品質(バグ密度):部門内基準の数分の1
拡張性・保守性:一貫した設計とコーディング
37All Rights Reserved, Copyright Ⓒ FUJITSU 2004
成功の秘密は?
先行チームによるパターン洗い出し
コアチームが,フレームワークと自動生成のバランスを考慮しながら随時更新
コアチームの熱心なレビューによって,パターン適用の徹底化
38All Rights Reserved, Copyright Ⓒ FUJITSU 2004
フレームワークとMDA
PIM PIM
ソースコード
PSM
特定フレームワーク向けデザインパターン
自動生成強化 フレームワーク導入の効果
モデルをより具体化
ソースをより抽象化
プラットフォーム(J2EEなど)
フレームワークや
共通コンポーネントソースコード
スケルトンコード
標準の自動生成
標準のデザインパターン
PSM
ハンドコーディング
39All Rights Reserved, Copyright Ⓒ FUJITSU 2004
MDA技術の課題
まだちょっと‥敷居が高い
UML, モデリング,メタモデル
値段が高いツール,動作リソース
標準化・オープン化は次世代Interoperability, Reusability効果は今年後半から?
⇒効果が実感できれば一気に広まる?!
40All Rights Reserved, Copyright Ⓒ FUJITSU 2004
まとめ
MDAとは(典型的には)UMLベースの自動化技術のこと
モデル/モデル,モデル/ソースの変換ルールをうまく設定すると高い生産性を実現できる
ソースコード,フレームワーク,コンポーネントに加えて,モデルや変換ルールへと,再利用資産を効果的に拡大する
41All Rights Reserved, Copyright Ⓒ FUJITSU 2004
Recommended