モデル駆動型アーキテクチャ
モデル駆動型アーキテクチャ(モデルくどうがたアーキテクチャ、Model-Driven Architecture、MDA)とは、Object Management Group (OMG) が2001年に公式に発表したソフトウェア設計手法である。MDA はソフトウェアシステムにおけるモデル駆動工学サポートを意図したものである。
モデル駆動型アーキテクチャ (MDA) は、モデルとして表現される構造的仕様のガイドラインを提供するソフトウェア開発手法である。MDAでは、システムの機能はまず適切なドメイン固有言語を使ってプラットフォーム独立モデル (PIM) として定義する。CORBAや .NET といったプラットフォーム定義モデル (PDM) が与えられると、PIM は別のドメイン固有言語や汎用のプログラミング言語(Java、C#、Python など)に対応したプラットフォーム特化モデル(PSM)へと変換される。PIMとPSMとの変換は通常、モデル変換ツールなどの自動化されたツールを使って行われる(例えば OMG が標準化したQVT)。工程全体は文書化され、OMG が MDAガイド(MDA Guide)として保守している。
MDAモデルは、統一モデリング言語 (UML)、Meta-Object Facility (MOF)、XML Metadata Interchange (XMI)、Enterprise Distributed Object Computing (EDOC)、Software Process Engineering Metamodel (SPEM)、Common Warehouse Metamodel (CWM) といった複数の標準規格と関連している。モデル駆動型アーキテクチャの「アーキテクチャ」とはモデル化対象のシステムのアーキテクチャのことではなく、MDA を構成する各種標準やモデル形式のアーキテクチャを意味する。
Object Management Group (OMG) は、「MDA」や「Model Driven Architecture」を商標として登録しており、他にも関連する用語を商標として登録している。OMG が現状で商標登録していない略語としては MDE(モデル駆動工学の略語)がある。
MDAの主たる目的として、アーキテクチャから設計を分離し、設計とアーキテクチャがそれぞれ独立して変更できるような技術を確立するということが上げられる。設計とは機能的な要求仕様(ユースケース)の実装に対応するもので、アーキテクチャは機能とは無関係なスケーラビリティ・信頼性・性能などの要求仕様の実現に対応する。MDA は、実装技術やソフトウェアアーキテクチャが変化しても、機能的要求仕様の概念設計を表現したプラットフォーム独立モデル (PIM) が依然として利用可能となることを意図している。
モデル駆動型アーキテクチャでも特に重要となるのはモデル変換に関する部分である。OMG はQVTと呼ばれるモデル変換のための標準言語を定義した。
MDAツールは、モデルやメタモデルの開発・翻訳・比較・調整・計測・検証・変換などに使われる。以下では、モデルもメタモデルも総称して「モデル」と表記する。MDAには基本的に2種類のモデルがある。「初期モデル; initial model」は主に人間が手動で作成するものであり、「導出モデル; derived model」はプログラムによって自動的に生成されるものである。例えば、アナリストがビジネスの現状を観察してUMLの初期モデルを作成し、そのUMLモデルにモデル変換を施して自動的に Java モデルを生成する。
MDAツールは以下の種類に分類される。
作成ツール: 初期モデルの作成や導出モデルの編集のためのツール。
解析ツール: モデルの完全性・無矛盾性・エラー/警告条件などを検証するツール。モデルの統計情報の計算にも使われる。
変換ツール: モデルを別のモデルやコードや文書に変換するツール。
合成ツール: 通常同じメタモデルに従った複数のモデルを合成するツール。
評価ツール: モデルベーステストのようにモデルを評価するツール。
シミュレーションツール: あるモデルで表されるシステムに実行をシミュレートするツール。
メタデータ管理ツール: 各モデル内のメタデータ(作者名、作成日、更新日、使用したツールなど)やモデル間の相互関係(モデル変換の変換元と変換結果の関係やメタモデルのバージョンの関係など)を扱うツール。
リバースエンジニアリングツール: 古い情報システムをMDAで扱えるようモデルに変換するツール。
ツールによってはこれらの機能を複数備えている。例えば作成ツールによっては変換や評価の機能も持っている。もちろん、作成のみのツール、グラフィカルな表現のためだけのツール、変換だけを行うツールなどもある。
MDAツールの特徴は、モデル(MOFモデルやメタモデル)を入力とし、別のモデルを出力する点である。ただし、文書とモデルとの変換ツールなどではMDAの範囲外のパラメータの入力が必要となることもある。
MDAツールは、いくつかのベンダーやオープンソースプロジェクトで開発されている。Rational Rose はベンダー作成のツールである。マイクロソフトはMDAに準拠しない類似のツールを提案している。Eclipseでは各種オープンソースツールを開発中である。
MDAツールはUMLツールよりも範囲が広い点に注意されたい。これは、ベースとしているメタモデルが可変か固定かの違いである。UMLツールのメタモデルは一般に固定であり、特定のUMLメタモデル(例えば UML 2.1)上でのみ動作する。一方 MDAツールは任意のメタモデルに対応できる仕組みを用意しているか、複数のメタモデルをサポートしている。
MDAツールは基本的なアーキテクチャ仕様を扱うことが多いが、アーキテクチャ(およびプラットフォーム)に依存しないツールもある。ここでいうアーキテクチャ仕様とは次のようなものを意味する:
参照アーキテクチャ: Java EE や.NET
階層ごとのアーキテクチャ(プレゼンテーション層やビジネスロジック層)や階層間の一貫性技術(オブジェクトデータベースと関係データベースのマッピングなど)
2001年に始まったMDAの基盤となる概念は、1980年代後半にShlaer-Mellor法として初めて明確化された。その後、標準化がなされないまま Shlaer-Mellor Action Language を利用したMDA的手法がいくつかのベンダーで試みられた。しかし、この間のMDA的手法は業界に広く受け入れられることはなかった。ガートナーは2006年現在もMDAを "on the rise"(成長中)の技術であるとしている。フォレスターリサーチは2006年に MDA は死に体(D.O.A.)であるとした。OMGのMDAに関する懸案事項としては次のようなものがある:
MDAは各種技術標準に基づいているが、その一部は未だに仕様が定まっていないか(xtUMLのための言語など)、標準的手法で実装されていない(QVT変換エンジンや仮想実行環境でのPIM)。
MDAは、自動化された生成ステップによってモデルを実装物(実行コードやデータベーススキーマ)に変換する工学手法である。このため、OMGの展望としては MDA によって変換前のUMLで問題(対象システム)を完全にモデリングできなければならない。しかし、この手法では生成された実装物を変更することは考慮されていない(例えばデータベーススキーマの調整など)。このため、生成後の実装物を調整する際の問題が生じる。完全なMDA手法はあまりにも理想主義的であり、実際の開発にあたってはより実用的なMDAが必要になるとも考えられている。実用的なMDAでは、本来のMDAに加えて、従来からのモデル駆動的機構をサポートすることで実装物の修正を可能とする必要がある。
MDAに基づいた開発では、技術者に特別なスキルが要求される。そのようなスキルを持った技術者はごく少数である。
MDAを推進しているOMGは、かつて分散オブジェクト技術CORBA標準の普及に尽力したが成功したとは言いがたい。