モデル駆動工学におけるモデル変換 (model transformation) とは、モデルのファミリが一貫性を保っていることを保証する自動化可能な方法であり、ソフトウェア技術者が正確に定義できる。モデル変換の目的は、モデルの構築と修正の自動化を可能にすることで、成果を保存し誤りを低減させることである。
モデル変換はモデルを入力とするプログラムとみなすことができる。モデル変換の種類と用法は様々であり、特に入力と出力の表現方法が様々である。
モデル変換では通常、入力として受け付け可能なモデルと、もしあれば出力として生成するモデルを指定するのに、それらが準拠しなければならないメタモデルを指定する。
モデル変換とそのための言語は様々な観点から分類できる[1][2]。主な分類を以下に示す。
モデル変換では、複数種類の入力モデルと複数種類の出力モデルを扱うこともある。モデル変換が従うべき唯一の絶対的制限は、少なくとも1つのモデルを入力としなければならないという点である。ただし、モデルを出力しないモデル変換は一般にモデル分析 (model analysis) あるいはモデルクエリ (model query) と呼ばれる。
入力と出力のモデルが同じ言語の場合、その変換を「内因的」(endogenous) と呼ぶ。逆に言語が異なっているなら、その変換を「外因的」(exogenous) と呼ぶ[3]。例えば、OMGのモデル駆動型アーキテクチャにおいてはプラットフォーム独立モデルからプラットフォーム特化モデルへの変換が行われるが、これは外因的モデル変換である。
一方向性モデル変換には唯一の実行モードしかなく、常に同種の入力を受け付けて、別の同種の出力を生成する。一方向性モデル変換はコンパイル的状況で便利であり、そこでの出力モデルは常にリードオンリーである。その際の一貫性は非常に単純であり、入力モデルは変換によって出力されるモデルと一貫しているだけである。
双方向性モデル変換では、同種のモデルが入力にも出力にもなる。双方向性モデル変換は、人々が複数のモデルを扱い、それらの間で一貫性を保たなければならない場合に必要となる。例えば、あるモデルに変更を加えたとき、一貫性を保つために他のモデルも変更する必要が生じる。モデルには他のモデルに反映されない情報が含まれることがあるので、あるモデルと一貫している多くのモデルが存在することもある。次のような重要な特殊ケースがある。
双方向性モデル変換を正しく機能させるには、適切な属性を持っていることが特に重要である。例えば、不必要な変更を加えないことや意図的に加えられた変更を捨てないことなどである[4]。
モデル変換は汎用プログラミング言語でも記述できるが、専用のモデル変換言語を使うこともできる。双方向性モデル変換は特にどちらの方向も適切に関連していることを保証する言語で記述するのが最良である。OMGの標準化したモデル変換言語群はQVTと総称されている。
QVTの言語群など一部のモデル変換言語においては、モデル変換自身もモデルである。すなわち、そのモデル変換言語の定義の一部であるメタモデルに従っている。このため、高階変換 (Higher Order Transformation、HOT) の定義が盛んに行われている[5]。高階変換とは、モデル変換を入力とし、別のモデル変換を出力する変換である。