201070名以上の申込みを頂いて、午前・午後両方を合わせて相当な質疑応答が繰り広げられ、白熱したセミナーになりました。参加くださった方、ご質問で盛り上げてくださった皆様に感謝しています。モデルもインポートできるか?A1:可能。XML形式、XSLTの使用、パーシング(コードジェネレーターによりファイルからモデルを生成)など。UMLのメタモデルは既にMetaEdit+でサポート済み。違いは?A2:アーキテクチャの観点から言うと、EAST-ADL、AADL、AUTOSARもUMLではない。UMLはアーキテクチャデザインに向いていない。MetaEdit+を使う最大の利点は、コード生成がより良く行える点や、モデル言語内に明確なルール・コンストレインツを持たせることが柔軟にできること。モデル変換とモデル統合の、どちらの事例が多いのか?A3:ドメインとして統合するものが小さい場合、かつ複数の企業が関わる場合は、変換を採用する。自動車OEMメーカが機能の記述に関する部分を担当し、サプライヤーがそれをAUTOSARにマッピング、さらに別のサプライヤーという具合に企業間のつながりがあるが、OEMは詳細レベルまでは必要としなく、機能レベルで考え、サプライヤーレベルになると違った側面から考えるという必要性があるような場合は変換が使われる。一社だけの場合は統合を好む傾向にある。理由としては、自社で全て行え柔軟性が担保されるから。2社以上の場合は、変換になることが多い。進行中のプロジェクトがある。全てを包み隠さず見せたいのかどうか、ビジネス上の判断、あるいはOEM契約の内容に依存すると思われる。Q5:ボートのデモ例のHWモデルと機能モデル間統合のルールについてA5:各メタモデル間のコンポーネントの関連付けや、ルールなどはユーザーで指定可能。モデルの構成を変えた場合、そのルールチェックも変更させるように設定することも可能。MetaEdit+を使いこなせるのか?A6:全ての開発者がメタモデル(モデリング言語)を作るわけではない。再利用可能なコードや、フレームワークを作る開発者ばかりではないのと同じ。通常は、フレームワークの上にアプリケーションを多くの人で実装しているのと同じ。多くのユーザーはMetaEdit+を単にモデル化に使っており、メタモデルを作ることは無い。1人あるいは2~3名までの熟練者によりメタモデルが構築される。Q7:既存ソースコードから、MetaEdit+を使うアプローチ?A7:既存コードをコンポーネント(コード生成用)として扱うのか、あるいはそれらをモデル化するためのコンセプトを得るのが目的か。C++やJavaのコードなら、MetaEdit+の機能で読み込ませて、モデルのコンセプトを得ることも出来る。1つの機能モデルに対して、複数のHWモデルを選択肢として定義しているが、どのHWモデルのパフォーマンスが良いかを解析するテクニックや事例はあるか?A8:どのHWアーキテクチャを使うかという選択はコストに依存すると思われるが、何をもって十分とするのかがポイントですね。ユーザーが実際に行っているのは、サンプルHWアーキテクチャを作ってみて、コードを生成させて、TLAなど外部のツールで評価するということ。ツールも適切なものを選ばれています。デザインモデル上に、それぞれの要件を付けている(フレームレートとか)。ディスプレイのフレームレートは25、アプリケーションのスループットは10fps以上などの性能要件。各エレメントに要件をアタッチすることが出来る。生成したコードをテスト環境で実行させて、結果をモデルへ返すことができる。要件を満たせなかったものは赤色表示となる。モデル上で要件を満たしていることをジェネレーター側で計算させて確認することもできる。場合によっては、システムを実際に動作させてパフォーマンスを測ることも可能。この例では、パフォーマンスの判断を行うツールにデータを返すという方法になっている。<午後の部>Q1:ルールやコンストレインツ間の矛盾は自動的にわかるのか?A1:コードジェネレータに判定の処理を持たせることができる。結果をモデル上に反映させるようなことも出来る。Q2:メタモデルをアップデートした際に、前のモデルは使えなくなるはずだが、規模が大きくなった場合、全て作り直しが必要なのか?A2:MetaEdit+ではそのような問題は無い。通常はメタモデルの更新に合わせて既存アプリモデルが自動更新される。これはモデリング言語を構築するためのツールとして、他の手法・ツールに無い大きな優位性。最初にひどいメタモデルを作ってしまっていて、これを大幅に改善するという場合は、エレメントについては一部再利用が可能でも、まったく新しい言語を作った場合は、前のものは無くなってしまいます。モデルをASCIIでエクスポートするだけ。その仕組みを用いて、対象とするフレームワークに応じたジェネレータを定義する。あらゆるプログラミング言語のコード、コンフィギュレーション、日本語などによるドキュメント、モデルなどを生成させることが出来る。Q4:マルチタスク、マルチプロセスのソフトウエア開発で、モデルとGeneratorの設計上のガイドラインはあるのか?これらの同期をとらないといけない場合、モデルとGeneratorの設計の両方の考慮が必要なのか?A4:Watchデモでは、複数のアプリケーションが並列動作している。ラップタイムの裏で通常の時計機能が動き続けている。ここで開発者はスレッドのことをまったく考えなくても済んでいる。(プラットフォーム側にリアルタイム性の考察を隠蔽)あるいはセマフォなどを考慮に入れたモデリング言語にすることもできる。並列処理やスレッドを扱える専用のモデリング言語。AADLはスレッドやプロセスを扱うために開発された言語。ErLang(エリクソンが作った)というマルチタスクを扱う言語もある。モデル化のコンセプトとしてはスーバーバイザとその下のワーカーの関係があり、スーパーバイザが一人のワーカーを開始させる、または全てのワーカーをグループとして開始させるというやり方がある。より開発されたモデリング言語。興味があれば論文を送ります。Q5:モデリング言語に変更があった時、どのコードが変わったのかを開発者は知る必要はないと思うが、構成管理ツールに投入する際に、差分というものはDiffツールなどで開発者は確認する必要はないのか?A5:Diffツールなどでコードチェックは可能であるが、お考えどおり通常コードの変化を見る必要はなく、むしろデザインの変化が重要。モデルの2つのバージョンを比較するには、次のような方法がある。詳しくは、こちらを参照*ドメインスペシフィックなDiffツールをジェネレータで定義する。モデルの何処が変わったかを生成させる。*あるいはモデルをXML形式でエクスポートして、外部のDiffツールでモデルの差分を検出させることもできる。Q6:標準化されているモデリング言語を活用してDSMを構築したいと考えているが、UMLプロファイルであるMalteのサポートはどうか?A6:MalteはUMLプロファイルであり、サポートしない。Malteは非常に規模が大きくて複雑。シンプルではなく、お勧めできない。モデリング言語を作るためのツールなので、これらADLの一部のみ採用される場合もあれば、独自の拡張を加えているケースもある。MetaCase社で受託して、モデル言語を作成することも行っています。