2.4K Views
July 21, 22
スライド概要
自社勉強会の資料です。
ソフトウェアの概要設計・分析について書きました。
概要設計では具体的な実現手段を意識せずに、対象システムの目的・本質を表すように気をつけて設計することが大事だと思います。
組込みソフトウェアエンジニア。 技術バックボーンはC言語・ベアメタル。 CQ EVカートのオーナーで、ハード・ソフトウェアの改造を通じて自身のスキルアップを日々考え中・・・。 LAPRASポートフォリオ: https://lapras.com/public/k-abe GitHub: http://github.com/grace2riku Qiita: https://qiita.com/juraruming Zenn: https://zenn.dev/k_abe よろしくね。
組み込みソフトウェア基礎 【連続講座 #3】仕様から概要設計する 2022/7/21 パーソルテクノロジースタッフ株式会社 阿部耕二 [email protected]
目次 • 自己紹介 • 参加者一言コメント • 講座開催の背景・目的 • 本日のテーマ【仕様から概要設計する】 • 参加者感想 • 次回予告 2
自己紹介 • 阿部 耕二(あべ こうじ) • 技術本部 機電技術部 首都圏2G • [email protected] • 医療機器開発 • 組込みソフトウェア開発。C言語、ベアメタルの開発業務経験がほとん ど。 • twitter: @juraruming 3
参加者一言コメント ご自由に一言コメントいただけますとありがたいです。 例) お名前 例) 今回の講座に期待すること 例) お仕事内容(話せる範囲で) 例) ソフトウェア開発担当工程(要求仕様の定義?設計?実装?テスト?) 4
講座開催の背景・目的 • なにかテーマを決めて、ソフトウェア開発の上流工程から下流工程まで説明する講座を開催し、ス キルアップを図る。 ■要求仕様の理解 資料・記事 ■要求仕様の仕様化 資料・記事 ■設計 概要 ★いまここ 詳細 ■テスト ■実装 5
講座開催の背景・目的 テーマ: 【既存組込み製品(CQ EVカート)の マイコンを移植する】 6
講座開催の背景・目的 テーマ:【既存組込み製品のマイコンを移植する】 対象装置:CQ EVカート 背景: ・講師が持っており、対象装置のドメイン知識を理解している。 ・ソフトウェアの構造を理解している。 ・対象装置のマイコンが新規採用非推奨品になった。 ⇛学習・スキルアップのため別マイコンに移植してみよう!!! 7
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 8
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 9
本日のテーマ 【仕様から概要設計する】 ▪ 設計って何? 設計って何でしょうね?講座を開催するにあたり考えてみました。 設計(図)とはどんなものか? ・目的に応じて抽象化・取捨選択して表現する(例、建物の模型) モデル化 ・部品の構造を明確にする ・部品同士の関連、数を明確にする ・部品が持つ特徴を明確にする ・部品が持つ振る舞いを明確にする ・その他 10
本日のテーマ 【仕様から概要設計する】 ▪設計って何? 何故設計するのだっけ? ・複数人で物・システムをつくる際の資料→知見の共有 ・個人開発では未来の自分が過去の経緯を思い出せる資料 ・複雑な物・システムを複数人で開発する際に資料→作業分担・コミュニケーショ ン ・拡張の際に変更点を特定するため→変更点・他の部品への影響・作業量の見積り ・その他 11
本日のテーマ 【仕様から概要設計する】 ▪設計って何? まとめてみる。 ・複雑・高度な物・システムをつくるうえで設計は必要な技術。 複雑・高度な物・システムは一人ではつくれない。 開発チームで認識合わせするためにも設計図は必要。 12
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 13
本日のテーマ 【仕様から概要設計する】 ▪良い設計事例 日常の中で感じた良い設計・何故良いと思ったのか事例の紹介。 1) USBデバイス (USBメモリ、その他USB機器) USBメモリは接続するPCが変わっても問題なく使える。 USBの仕様に準拠していれば使える。 14
本日のテーマ 【仕様から概要設計する】 ▪良い設計事例 日常の中で感じた良い設計・何故良いと思ったのか事例の紹介。 2) コンセント コンセントに挿せば様々な機器が使える。 コンセントは挿される機器を限定しない。機器側はコンセントから供給 される電源を意識して設計する。 15
本日のテーマ 【仕様から概要設計する】 ▪良い設計事例 日常の中で感じた良い設計・何故良いと思ったのか事例の紹介。 3) テレビCM アイフル そこに愛はあるんか シリーズ 良い設計は物質的なものだけに限らない。 【そこに愛はあるんか】という汎用的・キャッチーなキーワードをベースにして様々な CMバリエーションを展開している。拡張性も抜群に良い!!! 少し調べましたが思いのほか、バリエーションがありましたw 参考) 「そこに愛はあるんか?」、『アイフル』CMの決めセリフ誕生の背景 16
本日のテーマ 【仕様から概要設計する】 ▪良い設計事例 日常の中で感じた良い設計・何故良いと思ったのか事例の紹介。 4) OSI参照モデル ・階層の構造 ・各階層でやるべきことが明確に決まっている。役割分担。 ・抽象化と具体化のお手本のような設計 17
本日のテーマ 【仕様から概要設計する】 3) OSI参照モデル 引用) OSI参照モデルとは?TCP/IPとの違いを図解で解説 https://www.itmanage.co.jp/column/osi-reference-model/ 18
本日のテーマ 【仕様から概要設計する】 3) OSI参照モデル 19
本日のテーマ 【仕様から概要設計する】 3) OSI参照モデル 20
本日のテーマ 【仕様から概要設計する】 ▪良い設計事例 良い設計の要件の例。 ・適切な粒度になっている(大きすぎず小さすぎず)。→テストもしやすい ・拡張に開かれている(変更しやすい)→素早い開発スピードで競合に勝てる製品展開 ・わかりやすい抽象化→理解しやすい OSI参照モデルの上の層はシステムが提供する目的、下の層は目的を達成する手段 21
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 22
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 Q) 具体的に設計って何をすれば良いの? 【何をするのか(Why)】の視点と 【どうするのか(How)】の視点で開発対象の分析・設計図の検証を繰り返す。 顧客の要求を満たせればOK(その他の基準、例えば社内の設計標準などもある)。 →絶対解はない。あるのは最適解。それが楽しい・難しいところ。 23
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 今回の【概要設計】の位置付け 【何をするのか(Why)】の視点と 【どうするのか(How)】の視点で開発対象の分析・設計図の検証を繰り返す。 今回のテーマは【何をするのか】の視点で設計(≒分析)をしていきます。 実際に【どうつくるのか】の視点での設計は次回講座【連続講座 #4】概要設計から詳細設計を行 う、で話したいと考えてます。 24
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 【概要設計】はどのように進めるのか? アプローチとして次が考えられる。 ・静と動の視点 静はソフトウェア部品の構造、部品同士の関係・数に注目する。 動はソフトウェア部品の動き・振る舞いに注目する。 25
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 【概要設計】はどのように整理するのか? 手法としてはつぎが有用かと思います。 ・構造化手法による分析 ・UMLによる分析。オブジェクト指向の言語(例. C++)と接続性よし。 今回は【UMLによる分析】を使います。 26
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 静的な分析 次の図で分析しているのをよく見る。 ・オブジェクト図 ・クラス図 27
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 動的な分析 次の図で分析しているのをよく見る。 ・状態遷移図 ・コミュニケーション図 28
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 概要設計においては 【何をつくるのか】の【目的】に注目すること。 【どのようにつくるのか】の【手段】は詳細設計で考える。 Q) 何故、概要設計では【何をつくるのか】に注目するのか? これを言語化できるかは大事そう。 29
本日のテーマ 【仕様から概要設計する】 ▪設計の手順 Q) 何故、概要設計では【何をつくるのか】に注目するのか? A1) 手段に注目して設計するとスパゲティなプログラムになりやすい。 例) 階層を無視した無秩序な関数呼び出し。 A2) 手段が変わると使えなくなってしまう。ソフトウェアの再利用がしにく い。 A3) その他、いろいろ。 30
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 31
本日のテーマ 【仕様から概要設計する】 ▪概要設計の具体例 開発テーマ(EVカート)の概要設計図 今回はつぎの図を書いた。 ●オブジェクト図 ●状態遷移図 ※UMLを使い書きましたが文法的に間違いがあるかもしれません。ご容赦くださ い。 32
本日のテーマ 【仕様から概要設計する】 ▪概要設計の具体例 ●オブジェクト図 33
本日のテーマ 【仕様から概要設計する】 ▪概要設計の具体例 ●状態遷移図 34
本日のテーマ 【仕様から概要設計する】 ▪概要設計の具体例 ・今回はオブジェクト図、状態遷移図を書いた。クラス図・コラボレーショ ン図は必要かと個人的に考える。 ・要求仕様を満たせるか、設計図同士で矛盾がないか、開発対象の本質(目 的)を表しているか・手段になっていないか、などの観点で図を見直し設計 を【洗練】していく。 35
本日のテーマ 【仕様から概要設計する】 • 設計って何? • 良い設計事例 • 設計の手順 • 概要設計の具体例 • 設計時に考慮すること 36
本日のテーマ 【仕様から概要設計する】 ▪設計時に考慮すること 設計する時に考慮すると良いと思ったこと ●抽象化・具体化の視点で分析する 組込みシステムでは一番具体的なところ(低レイヤ)はデバイス(デバイスド ライバ)になるかと思う。 このデバイスを動かす手段は?→このデバイスを動かす目的は? のように低レイヤから上のレイヤを考えていく方法もある(ボトムアップ的 な思考)。逆に上のレイヤから下のレイヤを考えていく方法もある。 組込みシステムはハードウェアが明確になっていることが多いと思うの でボトムアップな指向で開発対象の目的を考えることは有効だと思う。い ずれにしても【抽象⇄具体の世界を行き来する視点】が重要だと考える。 37
本日のテーマ 【仕様から概要設計する】 ▪設計時に考慮すること 設計する時に考慮すると良いと思ったこと ●要求仕様を満たす最適解を時間と相談して考える 設計に絶対解はない。あるのは最適解だと考えている。 要求仕様を満たしているならば時間と相談し設計を終えて次の工程に進 む。 そうしないと設計に時間をかけすぎてしまう。 ※設計に時間をかけるべきだと思いますが限られた開発スケジュールの中で 【度】をこさないこと、という意味。 38
参加者感想 • 是非とも講座の感想を一言お願いします。 39
次回予告 次回は【8/25(木) 19:30〜20:30】で開催予定です。 【連続講座 #4】概要設計から詳細設計を行う 今回は【目的】に注目して概要設計を行いました。次回はどのように【目 的を実現するのか】の視点で詳細設計をしていきます。 参加の方、是非ともよろしくおねがいします。 40
参考【テーマの前提説明】 • テーマの前提説明 【CQ EVカート】とは??? ・動画1: 走行中 ・動画2: 基板を拡大 過去に書いた技術書(EV カート 始めるモ ル ース開発)をベースに説明します。 記載箇所:【第1章 EVカートとは何か】 ベ デ で 41
参考【テーマの前提説明】 • テーマの前提説明 テーマ:【既存組込み製品のマイコンを移植する】は次の前提とする。 ・派生開発(既にある装置でマイコンのみ変更) ・ハードウェアあり。電気的仕様確認OK。 ・旧マイコンでのソフトウェア資産あり。※GitHub, 資料 の各リンク ・個人開発(お仕事にも適用できるエッセンスはあるかと思います) 42
終わり ご静聴ありがとう ございました。 43