言語のアーキテクチャ

開発者がアーキテクチャ上のルールに従ってアプリケーションを開発しメンテナンスすることを、全てのアーキテクトは望んでいることでしょう。さもなければ計画されたアーキテクチャは崩壊し、変更が困難でコストが嵩むことになるので。そしてこれは開発チームが増大したり、異なるサイトに配置されていたりすると、より大きな課題となる。

ガイドラインやマニュアル、トレーニングは助けになるものの、残念ながらアーキテクチャ上のガイドラインやルールが守られることを保証することは出来ない。そしてそれらが逆効果になる前に、レビューやコードスタイルのチェックだけが増大することになる。また残念ながら、コード記述された後でしかそのようなチェックは行われないことが大きな課題。

>解決策

健全なエンジニアリングの実践で良く知られるように、早期段階でアーキテクチャ上のルールが守られることが良い結果となる。理想的にはデザインの段階で直ちに実践されることで、それが後工程にいたっても維持されること。それはアプリケーションがデザインされビルドされる特別の言語に、アーキテクチャのルールを体系的に組込むことで達成できる。

そのようなドメインスペシフィックモデリング言語の定義は、ルールを既に良く知るアーキテクトが行うのがベスト。言語内のコンセプトとルールで開発者の作業をガイドし、より良いアプリケーションが即座に生成できることを支援し、アーキテクチャが守られることを確実にして、動作しないものや役に立たないものが生成されることを回避できる。コードジェネレータもアーキテクトに定義され、最終製品に至るコードの品質を堅持する。

ノキア・シーメンスネットワークス (Nokia Siemens Networks)のアーキテクトは、このようにして特定のテレコミュニケーションプラットフォームのアーキテクチャ上のルールとコンストレインツをドメインスペシフィック言語として、モデリング言語とコードジェネレータに用意した。

そのモデリング言語は、モデリング言語を編集するための最高峰の環境である MetaEdit+ を用いて開発された。特に注目すべきは、MetaEdit+ は再利用、リファクタリング、モデルエレメントの入替、大規模モデル化とその処理、マルチユーザアクセスといった産業界で実践的に活用できる機能を提供できることが、NSN の採用の決め手となったこと。

成果

アーキテクチャ上のルールをモデリング言語とコードジェネレターに組込むことで得られた成果:

  • 開発者がアーキテクチャ上のルール、コンストレインツを守れるようになった。これは大規模組織や長期間のプロジェクトで、組織上の課題に取組む場合、特に有効。
  • アーキテクチャの変更も容易で、モデリング言語やコードジェネレータを変更することで、アーキテクトは簡単にルールを変更できる。これは MetaEdit+ の、既存アプリを最新モデル言語へ自動アップデートできるユニークな機能の成果。そして開発者は既存アプリに対する仕様変更箇所のレポートを得ることが出来るので、新しいアーキテクチャの優位性を享受できる。
  • 生産性の向上。コード生成機能により開発作業の多くの工数を自動化できる。
  • OS、ライブラリ、フレームワークへの変更は容易にできる。なぜならコードレベルのコンセプトではなく、アーキテクチャやドメインのコンセプトを直接モデル化しているので。プラットフォーム内の実装が変更されても、モデルは変更されること無く、アーキテクトによるコードジェネレータへの変更のみで対処できる。
  • MetaEdit+ のモデル統合機能は真の再利用であり、文字列の参照などと異なり、diff & merge などの必要性が無くなる。
  • コード生成に加えて、各種ドキュメントやメトリクスなど全ての開発成果物は、一貫して一つのモデルから生成され更新される。>

大規模なプロセスをサポート

アプリケーションのデザインと実装は開発プロセスの大きな部分を占める。要件から始まって、レガシーコードの統合、各種テスト、パッケージングまで。そして DSM が、以下に示すように開発プロセスの様々な段階をカバーするために拡張された。

はじめにレガシーファイルを読込み構文解析して、重要な基本データやメッセージの定義を実装し、モデリングツールのライブラリにインポートした。その構文解析機能は、コード生成機能を構築するための MetaEdit+ Reporting Language を用いて実装された。

それら定義をインポートすることで、アプリケーション開発者はモデリングしながらレガシーデータをモデルエレメントとして直接参照することが出来た。 そして C や GUI 用の Java コードを自動生成させることに加えて、デザインドキュメント生成やモデルチェッキングなど様々な機能もジェネレータを活用して構築した。さらにパッケージング(ファイル構成)や make ファイルなどの自動生成も。またモデルレベルデバッグやデバッグにもジェネレータを有効活用できた。プログラム実行状況をモデル上にアニメーションで同期させたりなど。

まとめ

従来のマニュアルで人手に頼ったコーディングに比較して、 DSM では開発速度が飛躍的に向上し、また容易にもなった。そして開発者はアーキテクチャの詳細や配下のフレームワークについてマスターする必要が無くなるのでトレーニングも少なくて済む。アーキテクチャのルールはモデリング言語に組込まれ、コード生成機能によりアプリケーションコードの品質が向上し、アーキテクチャやコーディングのルールが保証される。そしてこれら自動化を享受できる仕組みを構築するために要した期間は 1人・週だけであったことは特筆すべき成果。