組込みエンジニア教科書シリーズ第4弾。本書は、第1弾 『組込みソフトウェア開発のための構造化モデリング』 でご紹介した構造化手法の考え方に基づいた組込みソフトウェアの設計を、ソースコードからリバースして行うという方法を紹介します。
組込みソフトウェア開発の現場では、引き継ぐべきソースコードが存在することが非常に多いものです。そのソースコードを活用したうえで、効率的な開発の行い、良質なソフトウェアをつくりだすために、ソースコードからモデルを作成するのが「リバースモデリング」です。
ソースコードからのリバース方法とソースコードのリファクタリング、体系的な保守である再利用とプロダクトラインの概要、リアルタイムOS上への搭載方法、ソースコードが劣化していく原因を分析しプロセスを改善する方法などについて解説します。
Chapter 1 はじめに
1-1 本書について
1-1-1 本書の適用範囲
1-2 大規模化・短納期化・複数機種化に対処する
1-2-1 大規模化への対応
1-2-2 短納期化への対応
1-2-3 複数機種化への対応
1-3 リバースモデリングとは
1-3-1 ソフトウェアの全体構造を把握する
1-3-2 ソフトウェアを管理可能な粒度にする
1-3-3 ソフトウェア固定部と変動部を分離する
1-3-4 ソフトウェアの時間側面を把握する
1-3-5 ソフトウェア疲労に気づき、改善する
1-4 本書の活用方法
1-4-1 本書の読み進め方
1-5 リバースモデリングの活用
1-5-1 リバース設計
1-5-2 リファクタリング
1-5-3 リユース
1-5-4 リアルタイム設計
1-5-5 システム思考
1-5-6 リバースからフォワードへ
Chapter 2 課題説明
2-1 話題沸騰ポット(GOMA-3015)の要求仕様
2-2 話題沸騰ポットの開発経緯
2-3 話題沸騰ポットのソースコード
2-4 話題沸騰ポット開発の方針
Chapter 3 失敗事例
3-1 失敗パターン 1:設計不在
3-1-1 大きなファイルと大きな関数
3-1-2 入り組んだ依存関係や呼び出し関係
3-2 失敗パターン 2:設計と実装の乖離
3-2-1 ドキュメントとソースコードの一貫性の欠如
3-2-2 設計情報の埋没
3-3 失敗パターン 3:時間経過による劣化
3-3-1 ファイルと関数の肥大化
3-3-2 無意味なソースコード断片
3-3-3 コンパイルスイッチの複雑化
3-4 まとめ
Chapter 4 リバース設計
4-1 リバース設計で何をするのか
4-2 成果物の抽象度を上げる
4-2-1 関数呼び出し関係を図解する
4-2-2 ファイルの依存関係を図解する
4-3 分析モデリングのモデルと整合させる
4-4 設計と実装を同期させる
4-4-1 トップダウンアプローチ
4-4-2 ボトムアップアプローチ
4-4-3 変換アプローチ
4-5 まとめ
Chapter 5 リファクタリング
5-1 目指すのは「自然な姿」
5-2 リファクタリングの対象
5-3 リファクタリングで何をするのか
5-3-1 モデルを描く
5-3-2 分離する
5-3-3 凝集させる
5-3-4 独立させる
5-4 リファクタリングするとき
5-4-1 リファクタリング候補
5-4-2 リファクタリングするタイミング
5-5 リファクタリングの事例
5-5-1 1つのモジュールに複数の機能が入っている場合
5-5-2 フラグ渡しをしている場合
5-5-3 グローバルデータを使っている場合
5-6 まとめ
Chapter 6 リユース
6-1 固定と変動を明確にする
6-1-1 固定部と変動部の分離
6-1-2 変動部と変動点
6-1-3 変動部の実現方法
6-2 変動部の事例
6-2-1 コンパイルスイッチ
6-2-2 構成ファイル(コンフィグファイル)
6-3 変動点を管理する
6-4 変動点マップの事例
6-4-1 コンパイルスイッチ―コンポーネントマップ
6-4-2 機能―機種マップ
6-4-3 機種―機能―コンポーネントの管理
6-5 プロダクトラインを考慮する
6-5-1 変動点を戦略的に管理する
6-6 まとめ
Chapter 7 リアルタイム設計
7-1 構造設計と実装設計
7-1-1 構造設計
7-1-2 実装設計
7-2 モデルから実装設計を行う
7-2-1 起動周期を分析する
7-2-2 制御スレッドを分析する
7-2-3 ターミネータの仕様を決める
7-2-4 タスクへ分割する
7-3 リアルタイムOSの活用
7-3-1 リアルタイムOSのメリット、デメリット
7-3-2 リアルタイムOSの導入と移行
7-3-3 リアルタイムOS上のアプリケーションプログラムの構築
7-3-4 デバイスドライバ
7-4 まとめ
Chapter 8 設計品質
8-1 複雑さへの対処
8-1-1 分離と階層(トップダウン)
8-1-2 抽象化
8-1-3 俯瞰
8-1-4 図解
8-1-5 対話
8-2 設計の品質
8-2-1 モジュール分割
8-2-2 凝集度
8-2-3 結合度
8-2-4 システム形状
8-3 まとめ
Chapter 9 システム思考
9-1 ソフトウェア開発を取り巻く環境
9-1-1 もぐらたたき現象
9-1-2 ゆでがえる現象
9-1-3 メンタルモデル
9-2 プロセス改善とシステム思考
9-2-1 システム思考とは
9-2-2 時系列変化グラフ
9-2-3 因果ループ図
9-3 事例 1:ソフトウェア疲労モデル
9-3-1 時系列変化グラフ
9-3-2 因果ループ図
9-4 事例 2:学習意欲の低下モデル
9-4-1 時系列変化グラフ
9-4-2 因果ループ図
9-5 現場での適用について
9-6 まとめ
Appendix A 定石・格言 一覧
Appendix B 用語辞書
Appendix C 表記法の説明
Appendix D ポットの分析モデルと設計モデル
参考文献
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||
---|---|---|---|---|---|---|---|---|---|
1刷 | 036 表2.5、2つめの表の見出し(ファイル名) |
2刷 | 未 |
|
2013.08.07 | ||||
1刷 | 115 図6.9の「機能」 |
2刷 | 未 |
|
2013.08.07 |
たいそ さん
2019-11-13
2007年。「設計主導のフォワードエンジニアリング」と「実装主導のリバースエンジニアリング」があるんやね。設計と実装を同期させる必要性はわかっていてもできていないことが多いが逆方向についての解説を今まであまり見かけなかった気がする。「分割」という語がよく出てきた。設計、リファクタリング、コンパイルスイッチ設計(変動点)、といった場面での最適な分割について気を付けようと思う。「再利用にとって重要なのは、固定部分を作って利用するよりも、変動部分を明確にして管理することのほう。」
grenoui さん
2016-05-01
9章のシステム思考が意外と面白い
coco さん
2013-12-29
基本的な内容で、分かりやすく、取っ掛かりとしてはいいと思います。