Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

モデル駆動開発におけるモデル変換の役割

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から 第8回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 社会人エンジニア向けの教育プログラム「トップエスイー」から、エンジニアの皆さんに対して有用な情報をお届けするコーナーです。「モデル駆動開発(MDD:Model-Driven Development)」(注:MDDはOMGの商標になっています)は、分析・設計・実装・テストといった開発の成果をモデルとして作成し、モデル変換を繰り返し適用することによってプロセスを進める開発手法です。このとき使われるモデル変換は、モデルに付加情報を加えて異なる視点のモデルやコードを得る技法です。皆さんの中には、このような方法で果たして実用的なコードが得られるものなのか疑問に思う方もいるでしょう。この記事では、まずモデル駆動開発を試す方法を紹介します。その後で、モデル駆動開発の中心的技術であるモデル変換について解説します。

目次

モデル駆動は無料で試せる

 モデル駆動開発の概念や技術の解説を先に行うのが普通でしょう。しかし、この記事では、実際に試すことができるモデル駆動開発の環境を先に紹介します。なぜならエンジニアの皆さんは、「正しい方法と証明されているが、実用になるのはこれから」といった技術よりも、「十分実用になる、程よい考え方に基づいている」技術に親しみを覚えると思うからです。つまり、モデル駆動開発が使える技術であることを先に見てもらおうというわけです。

 モデル駆動開発用ツールとして、「BridgePoint」を紹介しましょう。Shlaer–Mellor法の提唱者で、BridgePointを開発したStephen J.Mellorさんの談によれば、BridgePointが商業ツールとして発売されたのは1996年だそうです。商業版は大変高価でしたが、その後、2014年には完全にオープンソースとなりました。GitHubでソースコードが公開されており、One Fact, Inc.が有償でサポートしています。BridgePointはEclipse上で動作し、WindowsやMac、Ubuntuで利用できます。

モデルの作成

 例として、図1のような自動搬送ロボットが、図2の配送コースで荷物を運搬するシステムについて考えます。このロボットの業務には「待機場所で荷物を受け取り配達先に運搬する」「配達先の荷物を転送する」「車庫へ回送する」の3つがあります。

図1 LEGO Mindstorms を使って組み立てた自動搬送ロボット
図1 LEGO Mindstorms を使って組み立てた自動搬送ロボット
図2 自動搬送ロボットの搬送するコース
図2 自動搬送ロボットの搬送するコース

 このシステムのモデルをBridgePointで作成しました。ロボットのクラス図は図3の通りです。

図3 自動搬送ロボットのクラス図
図3 自動搬送ロボットのクラス図

 運搬業務を担当するAutoTransporterクラスの振る舞いを表すステートマシン図が、図4です。

図4 自動搬送ロボットの運搬処理のステートマシン図
図4 自動搬送ロボットの運搬処理のステートマシン図

 このようにBridgePointでは、クラス図とステートマシン図を作成してシステムのモデルとします。規模が大きくなると、この組み合わせをサブシステムとして、複数のサブスシステムによってシステムを構成します。

モデルのシミュレーション

 BridgePointには、モデルを動かしてシミュレーションできる「Verifier」が付属しています。Verifierを使うと、作成した図を使ってモデルをシミュレーションできます。図5は、状態「start_wait」において「cargp_loaded」イベントを発生させた結果、状態が「loaded_start_wait」へ遷移した様子を示しています。このようにして、ターゲットデバイスから独立した環境で、作成したモデルが期待した動作をするか試すことができます。

図5 Verifierが動作している様子
図5 Verifierが動作している様子

ソースコードの生成と実行

 BridgePointには、標準でモデルからC言語のソースコードを生成するモデルコンパイラが付属しています。自動搬送ロボットのモデルからC言語のソースコードを生成し、RTOS向けプログラムに組み込めば、実際に自動搬送ロボットが動作します。もちろん、実物のセンサーやモーターを駆動するためには、生成したコードから外部のコード(デバイスドライバやRTOSのシステムコールなど)を呼び出す必要があります。また、逆に外界の変化をセンサーで読み取り、モデルがこれをイベントとして受け取る仕組みも必要です。BridgePointで作成するモデルでは図6に示すように、ユーザーが「ブリッジ」と「外部関数」と呼ばれるヘルパールーチンを用意することで、外部のコードとモデルから生成したコードをひも付けることができます。

図6 生成コードと外部のやり取り
図6 生成コードと外部のやり取り

 ここではC言語用のモデルコンパイラを紹介しましたが、変換ルールは自分で編集できるので、他の言語や別のモデル(例えばデータベースのスキーマなど)へ変換する仕組みも作れます。

 いかがでしょう。BridgePointのようなモデル駆動開発に対応したツール(MDDツール)を使うと、作成したモデルを使ってシミュレーションし、モデルから変換したコードで組み込み機器を実際に動かすことができるのです。

 BridgePointはオープンソースかつ無料で使え、C言語のソースコードを生成することができる開発環境です。ぜひ一度使ってみることをお勧めします。

 本記事で紹介した運搬システムの課題、ロボット、モデルは、筆者も参画した次のプロジェクトの成果を元に作成しています。

  • 平成22年度文科省専修学校補助事業「産学連携による実践型人材育成事業-専門人材の基盤的教育推進プログラム-」採択「産業界と連携した高品質組込みソフトウェア技術者養成プロジェクト」(九州技教育専門学校主催)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:トップエスイーからのアウトカム ~ ソフトウェア工学の現場から

もっと読む

All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5