プログラム言語に対する関心と活動は,月を重ねるごとに新たな高みに達しているかのようだ。Javascript や Python の興隆,Dart のローンチ,あるいは Objective-C の復活,さらには "executable UML" 仕様など,何であってもこの業界は,新たなプログラム言語を迎え入れる用意ができているように思える。さらには Grace のような,プログラミング教育を容易にする言語の開発努力さえ行われている。InfoQ は今週,SPLASH 2011 カンファレンス で行われた COOMP ワークショップ に出席した。
ワークショップの目標は, "モデリング言語とプログラミング言語の発散" の原因を理解することにある。ワークショップの主催者からは,前置きとして次のような説明があった。
- 一部では,適切なモデルを手に入れる方法として OO 設計の活用を考えている開発者が,結果的にモデルとプログラムという2つの成果物のメンテナンス,という課題に突き当たっている。モデリング言語の多くがプログラム言語と同程度の抽象化レベルを備えているおかげで,独立したモデリング言語の利用に多少メリットを見いだしているのが現状だ。
- その一方で,OO 設計の理解や開発経験に乏しい開発者の手によって,大量の OO コードが生み出されている。アプリケーション領域の概念や現象がコードに十分反映されていないため,結果として理解や維持の難しい,複雑なコードになっている。
ワークショップでは Jean Bezivin 氏が,"なぜ MDE はこのチャンスを逃したのか" について,自身の見解を発表した。業界での採用実績や大規模なモデリングプロジェクトの実施によって成功を測るとすれば,MDE は現在足踏み状態にある,というのが氏の主張だ。しかし氏は,これで MDE が終わったとは考えていない。その理由として,オブジェクト指向の起源が SIMULA の発明された 60年代後半 に遡ることができるにも関わらず,最初の OOPSLA カンファレンス が開催された 1986 年までは主流としての関心と活用の段階に達しなかったこと,その3年後に Tom Love 氏が 10,000 行のコードを 220 行のオブジェクト指向コードに置き換えるに至って,始めて最初の OO キラーアプリが生み出されたこと,などを挙げている。
氏はさらに,MDE が機会を逸した理由をいくつか指摘した。
- 既存のソリューションに対して MDE が少なくとも1桁規模の改善をもたらすということの,定量的かつ再現性を持った証拠となり得るキラーアプリケーションが存在しなかったこと。
- 定義や派閥(camp)の数が多すぎたこと (MDD, MDSD, MDA, MDE, MDSE, MBD, …)。
- MDE が何かという定義に,現在でも多くの混乱があること。例えば,シミュレーションと MDE が,ソフトウェア工学的に非常に異なるブランチである点について。
- モデリングの基礎として多用されている UML が,業界的なコンセンサスに基づいて構築された,漠然とした定義の言語であること。モジュール性に乏しい,複雑すぎる,変更頻度が多すぎる ...
- 焦点の欠如。MDE がソリューションであるとすれば,対象となる問題は何なのか?
- 実行性と精度の対立。精度は必ずしも実行によって得られるものではない。そして MDE は必ずしも実行可能なモデルの作成を目的とはしていない。
- プログラミングとモデリングの区別が不明確になったこと。これは 90 年代のビジュアルなプログラミング言語の登場によって生じたものだ。
- MDE が複雑性を増すものであるという認識。メタモデルは大規模すぎることが多い上,その数もあまりに多く,関連性や順序性の理解が難しい。
- モジュール性の欠如。UMLのパッケージやプロファイルの導入では,この問題を解決できなかった。
- 移植性の欠如。時間的にも空間的にも,モデルの移植性に関しては目立った成果を上げられていない (10年前に作成されたモデルが,現在では利用できない可能性がある)。
- XMI の失敗。UML に対するメンテナンス性の問題を残しつつ,最終的に廃止されることになるだろう。
- プラットフォームモデルという概念が受け入れられなかったこと。CIM/PIM/PSM は,大してよいアイデアではなかった。
- コードモデルを過度に重視して,データモデルへの配慮が不十分であったこと。
- ソリューションモデルを過度に重視して,問題モデルへの配慮が不十分だったこと。
- 情報システムモデルを過度に重視して,ビジネスモデルへの配慮が不十分だったこと。
- 小規模モデリングを過度に重視して,大規模モデルへの配慮が不十分だったこと。
これらを次のように要約している。
MDE の一時的な失敗の主な要因は,
- 最大の問題である UML
- モデリング言語とプログラム言語の混乱
- 実行可能モデリングに対する定義と評価の欠如
- 派閥の過多
氏はさらに,我々はこの20年で多くのことを学んだ,と主張した。
- "統合手法(unified method)" から統合言語へと到達した。
- MDA はモデルの概念と重要性を確立した。
- MDE は型付きグラフを利用して情報システムのさまざまな側面を分離あるいは統合する上で,最適なソリューションである。
- DSL は至るところで使用されている。
- MDE はソフトウェア工学以外にも,データ工学,システム工学,経営工学など多くの IT 分野で適用されている。
氏はまた,モバイルデバイスの登場によってアプリケーションのエンドユーザ数が急速に増加したため,今後数年間で開発者の数がアプリケーション構築の要請に対応できなくなるだろう,と指摘した。
結論として氏は,セマンティック Web と新たなコンパイル技法の間に MDE が消えたと主張している。残るのは2つの痕跡,つまり DSL (grammarware および XMLware に基づく),設計とドキュメントのための UML だ。
プレゼンテーションにおいて氏は,次のような重要な疑問を提起もしている。すなわち,例えば Javascript や Dart,GWT などにおいて,私たちはプログラムを書くための言語としては必要ではないが,コード生成のために必要な言語を作り始めているのではないだろうか?
読者諸氏は氏に同意できるだろうか? ソフトウェア工学の将来について,どのように考えているのだろう? コンピュータ言語ブロックに住む新しい子供たちに夢を託すのか,あるいはモデル駆動エンジニアリング世代が登場して,我々の知っているソフトウェア工学を変えてしまうのだろうか?