モデル駆動は無料で試せる
モデル駆動開発の概念や技術の解説を先に行うのが普通でしょう。しかし、この記事では、実際に試すことができるモデル駆動開発の環境を先に紹介します。なぜならエンジニアの皆さんは、「正しい方法と証明されているが、実用になるのはこれから」といった技術よりも、「十分実用になる、程よい考え方に基づいている」技術に親しみを覚えると思うからです。つまり、モデル駆動開発が使える技術であることを先に見てもらおうというわけです。
モデル駆動開発用ツールとして、「BridgePoint」を紹介しましょう。Shlaer–Mellor法の提唱者で、BridgePointを開発したStephen J.Mellorさんの談によれば、BridgePointが商業ツールとして発売されたのは1996年だそうです。商業版は大変高価でしたが、その後、2014年には完全にオープンソースとなりました。GitHubでソースコードが公開されており、One Fact, Inc.が有償でサポートしています。BridgePointはEclipse上で動作し、WindowsやMac、Ubuntuで利用できます。
モデルの作成
例として、図1のような自動搬送ロボットが、図2の配送コースで荷物を運搬するシステムについて考えます。このロボットの業務には「待機場所で荷物を受け取り配達先に運搬する」「配達先の荷物を転送する」「車庫へ回送する」の3つがあります。


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

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

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

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

ここではC言語用のモデルコンパイラを紹介しましたが、変換ルールは自分で編集できるので、他の言語や別のモデル(例えばデータベースのスキーマなど)へ変換する仕組みも作れます。
いかがでしょう。BridgePointのようなモデル駆動開発に対応したツール(MDDツール)を使うと、作成したモデルを使ってシミュレーションし、モデルから変換したコードで組み込み機器を実際に動かすことができるのです。
BridgePointはオープンソースかつ無料で使え、C言語のソースコードを生成することができる開発環境です。ぜひ一度使ってみることをお勧めします。
本記事で紹介した運搬システムの課題、ロボット、モデルは、筆者も参画した次のプロジェクトの成果を元に作成しています。
- 平成22年度文科省専修学校補助事業「産学連携による実践型人材育成事業-専門人材の基盤的教育推進プログラム-」採択「産業界と連携した高品質組込みソフトウェア技術者養成プロジェクト」(九州技教育専門学校主催)