チーム fsel 立命館大学情報理工学部 ソフトウェア基礎技術研究室
DESCRIPTION
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室. モデル班:丸山 勝久 石塚 聖啓 平井 孝 実装班:山本 哲男 筏谷 浩樹 原田 彬直. MDD ロボットチャレンジ 2005 主催者の皆様に感謝いたします.. モデル概要. 要求モデル (2 枚 ). … ユースケース図(調査システム,飛行船システム). クラス図(概念モデル) アクティビティ図(ユースケースごとに) … 非正常系の検討(タイマによる目的の切り替えと 制御不能モードの導入). 分析モデル (10 枚 ). クラス図(クラスの抽出,属性と操作の追加) - PowerPoint PPT PresentationTRANSCRIPT
(C) 2005 Katsuhisa Maruyama
チーム FSEL立命館大学情報理工学部
ソフトウェア基礎技術研究室
モデル班:丸山 勝久 石塚 聖啓 平井 孝実装班:山本 哲男 筏谷 浩樹 原田 彬直
3
(C) 2005 Katsuhisa Maruyamaモデル概要
モデル変換図 (5 枚 )
要求モデル (2 枚 )
分析モデル (10 枚 )
最終版クラス図 (1 枚 )
設計モデル (15 枚 )
詳細設計モデル (15 枚 )
… ユースケース図(調査システム,飛行船システム) クラス図(概念モデル) アクティビティ図(ユースケースごとに)… 非正常系の検討(タイマによる目的の切り替えと 制御不能モードの導入)
クラス図(クラスの抽出,属性と操作の追加)… シーケンス図(操作ごとに) 状態図(飛行船システム,飛行モード,タイマ)
通信部分のスレッド化とデータのロック… クラスから属性への変換 シーケンス図(操作ごとに,ループ終了条件と 分岐条件の詳細化) +
ソースコード (C++)
Jude で Java プログラムのテンプレートを生成 C++ プログラム (*.h, *.cpp) 形式に変換 操作 ( メソッド ) の中身をシーケンス図から追加… 座標計算アルゴリズムや通信プロトコルの実装
8
(C) 2005 Katsuhisa Maruyama
アピールポイント• Model-Centric Development ○ モデル → ソースコード, × ソースコード → モデル• 追跡可能性を意識 各モデルで名前を統一 コードは追加のみ,通信に関するユーティリティクラスの追加のみ• 教育用モデル,参照モデルになることを目標 飛行船システムをできるだけ単純に表現 平行性の考慮(スレッドやデータのロックの導入,タイマの導入) パターンの適用( strategy & read-write lock )• テスト容易性を考慮した要求分析 ユースケースに保守者を追加( H/W 試験をシステムに取り込む) スレッドの割り当てを外部から指定できる実装 ( テストドライバ,シミュレータの同時開発)• 拡張性を考慮した設計 UI クラスによるコンポーネント化,継承を用いたフレームワーク化
9
(C) 2005 Katsuhisa Maruyama
ありがとうございます
問い合わせ[email protected]
モデル公開 Web ページhttp://www.fse.is.ritsumei.ac.jp/mdd/
11
(C) 2005 Katsuhisa Maruyama
クラス図 (1 枚 )
ソースコード (C++)
シーケンス図 (15 枚 )
1. Jude で Java プログラムのテンプレートを生成2. C++ プログラム (*.h, *.cpp) に形式に変換3.操作 ( メソッド ) の中身をシーケンス図から追加4.座標取得アルゴリズムや通信プロトコルの実装* 2-4は手動で実施
void Blimp::startAutomaticFlight(){ controller->startAutomaticFlight(); Goal goal = plan.getFirstGoal(); controller->setGoal(goal);
bool isFinalGoal = false; while (!isFinalGoal) { bool hasArrived = false; bool passed = false;
while (!hasArrived && !passed) { flight(); showStatus(); hasArrived = controller->hasArrived(); if (!hasArrived) { passed = controller->passedBy(); } } if (hasArrived || passed) { isFinalGoal = plan.isFinalGoal();
if (!isFinalGoal) { goal = plan.getNextGoal(); controller->setGoal(goal);
}}
} stop();}