********************************************************************** セッションS3-b チュートリアル テーマ:Domain-Specific Modeling for Full Code Generation 講師:Juha-Pekka Tolvanen 氏 日時:2010/9/03 10:30〜12:00 参加人数:30名(終了時) ********************************************************************** ■発表の概要 ☆本セッションの紹介 ・Juha氏の課題認識: 今までのUMLベースなどを用いたソフトウェア開発では, ソフトウェアをただ構造化しているだけで,抽象度が変わらない. そのため,ソフトウェアの生産性も向上しない. ・本セッションのポイント 今まで我々が用いているデザインパターンUMLなどのソフトウェアのクラス構造を メタケースというツールで形式化することで, さらなる生産性を向上することが可能となるという点. ☆なぜ新しい取り組みが求められのか? ・生産性の向上は停滞中 ソフトウェアの生産性を上げるには,抽象度を上げる必要がある. ・DSMによって生産性を向上 DSMを用いることで,生産性を向上できる. 例えば,NOKIAでは,コード生成率100%を達成している. ・モデルを使った開発 モデルベースで生産を行うことで,生産性の向上を実現できる. ・モデルベースの開発種類 古いスタイルのモデルベースの開発  1.コードをツールによって可視化   問題点:抽象度が全然あがっていない  2.MATLAB/Simulinkに見られるようなモデル開発(CASEツールなど)   問題点:生成されたモジュールと 最近のモデルベースの開発  3.MDA:ハイレベルな抽象度のモデル変換によって実装に近い所まで落とし込む  4.DSM:ケースツールと似ているが,利点としてモデル自体に自分達のノウハウを       導入できる       (=自分達のやりたいようにカスタマイズできる)点がある. ・デジタル時計:デモ例 DSMを用いることで,デジタル腕時計のプログラムを生成可能. ただし,すべてのプログラムを生成しているわけではなく,時計の振る舞いのみを コード生成する.  このように可変的な部分のみをフルコードジェネレーションすることで生産性を 向上することが可能となる.   よって,時計の表示などの各モジュールはフレームワークとして既に作成されている 必要がある.   ・DSM(ドメインスペシフィックモデリング)の利点  1.抽象度を上げることで,ドメインのコンセプトやルールをモデリング環境に 取り込むことが可能  2.言語作成者が分かりやすい言語を作成することで, ソフトウェアを詳しくしらない顧客でもプロダクトの振る舞いを容易に変更できる. ☆ドメインスペシフィックモデリングについて ・自分達のあったモデル言語の開発方法 1.ドメインの熟練者のコンセプトを採用する.  プロダクトも振る舞いを元にモデル言語を作成. 2.生成される成果物をベースにする.  ソースコードの共通部分・共通でない部分に着目しモデル言語を作成 3.目に見える構造に着目する  物理的な制約に着目し,それをそのままグラフに表す 4.システムのルック・アンド・フィールから  GUIの振る舞いに着目 5.変動点から  可変性分析のモデリング言語をそのまま使ってコードを生成するアプローチ  他のセッションで行われているプロダクトラインに深く関係する. ・モデリングの仕方 まず,メタモデルという形で形式化  =ボタンとその関係を形式化しながら定義 そして,作成したオブジェクトに対してアイコンを作成  =オブジェクト一個一個に対して分かりやすいアイコンをつけていく  これにより,視覚的に分かりやすい自分達の言語を作成できる. ☆実践的な成功例:メディカルミキシングマシーン メディカルミキシングマシーン:薬の吸い出し,投入,カップの洗浄の一連の作業を 行う機械 ・生成される言語から始めてみると スライド37Pの左側が要求,右側が実装方法 ・Version1:コードの意味とモデルの表記方の意味が一体一に対応した簡単なモデル 1:要求をメタモデル化すると,スライド38Pの図になる. 2:上記の要求をメタモデル化すると,スライド39Pの図のようになり, 3:このモデルのそれぞれのオブジェクトにグラフィックを定義するとスライド40Pの  図になる  ※ただし,このままではコードを実装する人にとってはツールを用いても生産性が   向上しない.   向上するためには,コンセプトを見つける必要がある. ・言語のコンセプトをどこから得るか? 4:動詞からコンセプトを見つける ・version2:仕様のかかる一つの意味に対して,実現方法である実装のかたまりを 割り付けることで生産性を向上したモデル 1:動詞から作成したモデルがスライド43Pの図 2:要求の動作に対して意味を持たせたものがスライド44Pの図  →version2を用いることで,エレメント数が47から16へと減少   =生産性が向上 ・抽象度を上げることの利点 抽象度が高い所で,設計に制約を与えることが出来る.  メタモデルを交わりにすることで,ソフトを実装する技術と要求の技術を同じ抽象度  に持ってくることが可能. ☆まとめ ・DSMの利点 自分が作ったモデルに沿って生成することはきわめて強力  今回はソースコードをジェネレートするパターンを用いて利点を説明した. ・DSMのさまざななパターンへの適用 さまざまなパターンに適用可能.例えば, 1:Simulinkブロックがあまりに大きくなりすぎて困っている人  →例えばモデルのブロックの固まりのパターンを抽出し,組み合わせることで活用  できる. 2:AUTOSARのコンフィギュレーションで困っている人  →あらかじめコンフィギュレーションパターンを抽出して,これらを組み合わせる  ことで活用できる. 3:UML クラスダイアグラム(例えばデザインパターン)を言語化しておいて,それを組み合 わせることで活用できる. 4:Java・C 今回の適用例のように活用できる. ・DSMの利用 Eclipseのプロジェクトを用いればすべて無料で利用することが可能 また,MicroSoftのVisual studioもこういったDSLのコンセプトを取り入れたものがある. ・MetaEditの強力な所  メタモデルを定義する環境(ジェネレーション・デバッグ等)が全部入っている.  →プログラミングの必要なくDSM環境を構築することが可能となる. ■質疑応答 質問:予稿集スライド34Pメタ言語を記述するためのものは何か? 応答:MetaCase 社提供しているメタメタモデルで記述 ■まとめ 今日持って帰って欲しいこと  ○ 抽象度を上げることで生産性は向上する.  ○ DSMを用いることで,抽象度の高いプログラミングを行うことが可能となる. 以上.