Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
モデル駆動開発(MDD)概論
そもそもモデル駆動開発とは?
1
もくじ
2
! モデル駆動開発 ! ドメイン特化開発 ! モデル駆動開発教育事例
組込みシステム開発の現状(1) 組込みソフトウェア開発の危機
3
組込みソフトウェア技術者数の指数的増大
2004 2006 年2005 2007 2008 2009
60
40
20
技術者数(万人)
不足数
技術者供給
技術者需要
開発手法改善
出典: 経済産業省組込みソフトウェア産業実態調査(2006年度版)
100M
50M
1995 2000
オブジェクトサイズ
年
情報家電:TV
携帯電話
出典: 組込みソフトウェア開発力強化推進フォーラム(2004年6月)日経エレクトロニクス 2000 9-1(no.778) をベース
組込みソフトウェア開発量の指数的増大
自動車:カーナビ
100M
50M
1995 2000
オブジェクトサイズ
年
情報家電:TV
携帯電話
出典: 組込みソフトウェア開発力強化推進フォーラム(2004年6月)日経エレクトロニクス 2000 9-1(no.778) をベース
組込みソフトウェア開発量の指数的増大
自動車:カーナビ
4
61.9%!!
組込みシステム開発の現状(2)
開発コスト!
5
ソフトのテストが たいへん
(たぶん)ソフトのテストがシステムテストにまで影響している
61.9%!!
組込みシステム開発の現状(2)
品質!
6
設計モデル ソースコード
(半分でもいいから)自動化できないの?
モデルを動作させてテストできないの?
モデル駆動開発 (Model Driven Development; MDD) モデルを使って開発を楽にする方法です
モデリングとは?! システムやビジネスプロセスを可視化
! 本質に注目して、様々な視点で ! 可視化することでレビューできるようになる
! 頭の中のイメージは評価できない ! 可視化するとレビューを通してヌケ・モレ・誤りを確認できる
! あらゆるステークホルダー: 現場で、顧客と、上司と、・・・
! 他分野の例 ! 建築図面、回路図、等価回路、・・・
7
モデル駆動開発の守破離
9
! 守 ! 既存のツール・文法を使って仕事をする
! 破 ! 依然、既存のツール・文法を利用しているが、自分たちの分野で使い易いようにカスタマイズする
! 離 ! 自分たちの分野で利用しやすい独自言語を定義して、ツールを開発する
モデルからコードへの変換~人間が実行
10
! クラスのソースコードへの変換を考えると・・・ ! 決まりきったソースコードのパターンがある
モデル要素 ソースコード
クラス 構造体
属性 構造体のメンバ変数
操作 関数
struct Tracer { int is_tracing;
}; void do_trace (void) {
… }
クラス→構造体
属性→メンバ変数
操作→関数
操作の中身については未定義
モデルからコードへの変換~コンピュータが実行
11
! 決まり切ったパターンがあるならば、コンピュータに実行させることができるのでは? ! 人間が行う「実装のパターン」を「変換ルール」としてとらえる ! 「変換ルール」が十分に形式的 (= プログラムにできる)であれば、機械化できる
! 「変換ルール」が汎用的ならば、再利用できる
モデル モデルコ
ンパイラ
ソースコード
変換ルール
モデルの抽象度と生産性
12
アイデア 製品
解決
問題
整理
アセンブラ
コード
UMLモデル
設計・実装
設計・実装
設計 生成 or 実装
コンパイル
モデルを動作させてテスト
13
! 設計段階で動かすことはできないか? ! 実装する前にモデル上で振る舞いをシミュレーションしてテストできれば、問題の早期発見につながる ! 実装を待たなくてもテストが可能
! 形式的な(= コンピュータが解釈可能な)モデルを利用
まとめ: 従来型開発とモデル駆動開発の比較
14
! 従来型開発 (aka ソースコード中心の開発) ! 要求仕様書、設計文書をもとにソースコードを開発 ! 上流での要求仕様書や設計文書の正しさを担保するのはレビュー ! 実際の製品の品質保証をするのは「テスト」
! 開発の半分以上がテスト・・・
! 要求仕様書・設計文書とソースコードの一貫性を保つのは困難
! モデル駆動開発 ! 要求レベル、設計レベルのモデルを作成 ! モデルから(ある程度は)自動的にソースコードを生成 ! 上流での検証が比較的容易
! 機械可読なモデルがあるのでシミュレーションが可能 ! 自動的にソースコードを生成するので、モデルとコードの一貫性保持が容易
ドメイン特化型開発とは(1)
15
! 例: 正規表現と正規表現エンジン ! テキストのパターンに対してある処理を行う場合
! 正規表現がなければ毎回パーサを実装 ! 生産性低い、品質の問題も
! 正規表現を定義、正規表現エンジンとして再利用 ! 「特定目的向けの言語」→ 「多くの問題を簡単に解決」
特定目的向けの言語を設計することによってソフトウェア開発における多くの問題をより簡単に解決する
~Steve Cook他: ドメイン特化型開発[1]~
正規表現エンジン
構成
正規表現記述(2) [0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]
正規表現記述(1) [0-9]+¥.[0-9]+¥.[0-9]+¥.[0-9]+
ドメイン特化型開発とは(2)
16
! プロダクトラインソフトウェア工学の実現手段のひとつ ! 相違部
! ドメイン特化型言語(Domain-Specific Language; DSL)で記述 ! DSL記述から構成情報などを生成
! 共通部 ! 従来手法で開発
! モデル駆動開発のひとつ ! 要求や設計をドメインに特化したモデル(DSM / DSML)で記述 ! 汎用のモデリング言語よりも記述が容易
固定部分
構成DSL記述
[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]
事例: マイコン上で動作するVoice Menu開発
" ホームオートメーションシステムのVoice Menu – 照明、空調、アラーム等の遠隔操作
" アセンブラに似た言語でデバイスにプログラム(8bit) " メニュー構造と音声案内のモデリング言語を定義 " コードジェネレータはすべてのメニューを生成可能 " 1機能の開発時間が1週間から1日に
Juha-Pekka Tolvanen: Domain-Specific Modeling Languages and Generators - Examples
17
Juha-Pekka Tolvanen: Domain-Specific Modeling Languages and Generators - Examples
事例: マイコン上で動作するVoice Menu開発DSL例
18
Juha-Pekka Tolvanen: Domain-Specific Modeling Languages and Generators - Examples 19
モデルの抽象度と生産性~DSLの場合~
22
アイデア 製品
解決
問題
整理
アセンブラ
コード
UMLモデル
ドメイン特化 言語
設計・実装
設計・実装
設計
フレーム ワーク
生成 or 実装
コンパイル
生成
ドメイン特化型開発の利点
• モデルと思考のミスマッチが減少 • アプリケーションの自動生成
生産性
• 設計と実装の一貫性保持• ドメイン特化最適化 • 汎用言語での記述エラーを最小化
品質
• 様々なステークホルダがモデルを利用しやすくなる
コミュニケーション
23
ドメイン特化型開発の欠点
24
• 多品種展開できなければ無意味 • ソフトウェアプロダクトラインと同様
コスト
• 独自の教育・教育コンテンツが必要 • 汎用言語よりは導入が容易だといわれている
教育
モデルを利用した開発と成熟度
25
コード
製品
コード
製品
モデル
コード
製品
モデル
コード
製品
モデル
コード
製品
モデル
コードのみ モデルが乖離リバース モデリング ラウンドトリップ モデル駆動
開発スタイルの変化: モデル駆動開発以前
26
分析 設計 実装 テスト
不具合を見つける度に、設計、実装、テストを「手動で」回さな
ければならない!
製品ドメインの知識 実装ドメインの知識
開発者は両者ともに必要
開発スタイルの変化: モデル駆動開発以前以降
27
分析 設計 テスト
モデルコンパイラが 設計から自動コード生成設計時は製品ドメインの知識を
実装ドメインの知識は 「ルール」として与える
関心の分離ができる!
モデル上で動作させて 問題の早期発見ができる
28
九州技術教育専門学校によるMDD教育
上流工程の教育は難しく、効果的に実施できていない。
• 設計の教育は、成果物の理解・評価が困難。 • 設計と実装を別々に教育していることが多く、設計と実装を結び付ける技術の習得は、独力に頼っている。
実装を重点的に教育した後、抽象度の高いモデルや別の言語を習得しようとすると、細部にこだわりすぎ、習得に時間がかかる。
要素技術を学んだ後に一連の開発プロセス体験を実施すると、要素技術の学習時のモチベーションの維持が難しい。
組込みソフトウェア教育の課題
産業界で実用化が進んでいるMDD(モデル駆動型開発)を教育に利用できないか?
! 組込み向けモデル駆動開発レイヤ ! アプリケーションドメイン ! モデリング ! 抽象化 ! ドメイン分割 ! ブリッジ ! アーキテクチャ設計! OS、ミドルウェア ! C言語
! 開発ごとに異なる(はずの)プロセス設計! どの工程でなにを成し遂げるかの設計 ! 技術のスコーピングとドメイン分割
! アプリケーションドメイン ! 技術ドメインの組み合わせ ! ブリッジ
29
モデル駆動開発を「仕込める」教育
ギャップ
こここそ アーキテクトの領分?
まとめ
30
! モデル駆動開発 ! 守、破
! UMLなどの標準記法を利用したモデル駆動開発
! 離 ! 自ドメインを対象とした独自言語を利用したモデル駆動開発
! モデル駆動開発教育 ! モデリングを中心に据えた教育が始まりつつある ! モデル駆動開発を「導入」できる技術者を育てる試み