研究室紹介 - ソフトウェア基礎技術研究室

Download Report

Transcript 研究室紹介 - ソフトウェア基礎技術研究室

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