諸般の事情により積読していたソフトウェアシステムアーキテクチャ構築の原理 第2版を読み始めた。といっても同書は第1版を一度読んでいたので、まずは更新箇所の確認だ。ちなみにKindle版をセールで買いました。このバイブルをいつも持ち歩ける幸せ。
第1版と第2版で何が変わったのか?
- まず翻訳版の出版社が変わった。第1版は翔泳社さんで第2版はSBクリエイティブさん。古書などで購入するときには注意(Amazonでは親切に「新版があります」とコメント表示されている)
- 章立ての表記方法が若干変わっている
- 序文に記載されている変更点は次の通り
第2版で最も重要な変更点は、以下の通りである。
- 新たなビューポイントを導入したが、それをコンテクストビューポイントという。これはシステムとその環境(人、システム、相互作用する外部エンティティ)との関係や依存性および相互作用を記述する。第1版の第8章にあったスコープとコンテクストに関する比較的簡潔な説明を拡大してまとめた上で標準化している。
- 第2部でアーキテクチャの役割が持つさまざまな側面に関して詳述している。
- ビューポイントとパースペクティブの定義の大半と、とりわけ、機能的および並行性ビューとパフォーマンスおよびスケーラビリティパースペクティブに関して改訂した。
- 参考文献について、ほとんどの章の節と巻末を改訂および拡大した。
- 新しい国際アーキテクチャ標準ISO4200(IEEE標準1471に由来)の概念と用語に沿うよう内容を刷新している。
- UMLモデリングに関するアドバイスと例を新しくして、UMLバージョン2で導入された変更点を反映sている。
ソフトウェアシステムアーキテクチャ構築の原理 第2版 第2版の序、より
- さらっと書かれているけれども、目次レベルでもいろいろと変化しているようだ(末尾に、目次の突合せ結果を記す)。というわけで変更されていそうな箇所についてピックアップして確認してみた。というか大著すぎて通しで読むのがつらい。
第4章 アーキテクチャパースペクティブ
「4.8 パースペクティブをビューと比較する」という節が追加されている。
この章は、第1版に対して寄せられた質問「なぜアーキテクチャパースペクティブという概念を取り入れたのか」に対する回答が書かれている(ちなみにISO42010/IEEE1417にはこの概念は取り込まれていない→参考記事)。
第8章 関心事、原理、決定
もともとのタイトルは「スコープ、関心事、原理、制約」である。この章は、アーキテクチャの意思決定に必要な、システムを取り巻く環境を扱っている。私の理解が間違っているかもしれないけれど、「プロジェクトの外部での既決事項」を明らかにし、様々なアーキテクチャに関する意思決定を明解にするために整理すべきことについて書かれている。
第2版では、システムのスコープと要求を「コンテクストビューポイント」という形で外出しにした結果、第8章はビジネスに関する分析事項に集中され、わかりやすさと深みが増していると思う。良くない言葉だが、本章は第1版では「上流」について書かれたものが、第2版では「超上流」になった
印象。
第10章 シナリオを特定して使用する
アーキテクチャを定義する際にシナリオを用いて、例えば複雑なトレードオフに関する意思決定などをする、というアイデアについて書かれた章。「10.5 何が良いシナリオを構成するか」という節が追加されている。ここではシナリオを作るなら、どういった品質のものを目指すべきかのアドバイスが追加された。
第11章 スタイルとパターンを使用する
「11.3 パターンとアーキテクチャ戦術」という節が追加されたのと、それ以降の構成が若干変更されている。うまく要約できないのだけれど、第1版の段階ではパターンが普及していなかったため、パターンそのものに関する説明が多くを占めていた(例えば一般的なアーキテクチャのパターンを10種類しっかりと説明する項があった)。しかし第2版ではパターンが普及したことを鑑み、パターンそのものではなく、パターンをどう活用するかに記載の方針が変更された・・・ような気がする。
第12章 アーキテクチャモデルの制作
「12.5 アジャイルモデリングテクニック」という節が「12.5 アジャイルチームとのモデル化」という名前に変わっている。第1版ではアジャイルモデリングの簡単な紹介程度だったものが、より具体的なアドバイスに拡充されている。
第13章 アーキテクチャ記述を作成する
「13.3 IEEE標準」が「13.3 ISO標準」に変わった(が、ほぼ内容は同一に見える)。また、「13.5 アーキテクチャ記述を提示する」という節が追加されている。この節はどのようにアーキテクチャ文書を(正式文書で?Wikiで?プレゼンで?ツールで?)提示すべきかについて論じていて興味深い。
第14章 アーキテクチャを評価する
「14.5 既存システムのアーキテクチャの妥当性を確認する」「14.7 評価アプローチを選択する」という節が追加されている。「14.5 既存システムのアーキテクチャの妥当性を確認する」はTARAと呼ばれる新しいアプローチを提言していてちょっと面白い。
だが、私たちの経験では、こういう状況でATAMのようなものを適用しようとすると、大した成果を上げられないものである。というのも、要する時間とリソースが膨大過ぎ、それだけ投資して何が得られるか理解してもらえないからである。そんな状況で必要になるのは、大人数のチーム抜きで、数週間ではなく数日内に、アーキテクト自身が実行することのできる単純で軽量なアプローチだ。私たちは、これを、Tiny Architectural Review Approach(小型アーキテクチャレビューアプローチ)、略してTARAと呼んでいる。
別途時間をとって調べてみたい。
第15章 ビューポイントカタログ概論
「16 コンテクストビューポイント」が追加されている。これは本書の改定のメイントピックである。ちょっと時間をとって読み込まないと何も言えない気がするので、本記事では省略〜。
第22章 ビュー間の整合性を実現する
「23.2 コンテクストビューと機能的ビューの整合性」「23.3 コンテクストビューと情報ビューとの整合性」「23.4 コンテクストビューと配置ビューとの整合性」の節が追加。15章でも記載の追加されたビューに関する拡張。
目次レベル突合せ
上記はざっと斜め読みして確認した変更点である。参考までに新旧目次の比較結果も示しておく。
第1版の目次 | 第2版の目次 |
---|---|
日本語版への序 | 日本語版第2版への序 |
- | 第2版への序 |
序文 | 第1版への序 |
第1章 概論 | 1 概論 |
1.1 ステークホルダとビューポイントおよびパースペクティブ | 1.1 ステークホルダとビューポイントおよびパースペクティブ |
1.2 本書の構成 | 1.2 本書の構成 |
1.3 本書が対象とする読者 | 1.3 本書が対象とする読者 |
1.4 使用している慣例 | 1.4 使用している慣例 |
第1部 アーキテクチャの基本 | 第1部 アーキテクチャの基本 |
第2章 ソフトウェアアーキテクチャの概念 | 2 ソフトウェアアーキテクチャの概念 |
2.1 ソフトウェアアーキテクチャ | 2.1 ソフトウェアアーキテクチャ |
2.2 アーキテクチャ要素 | 2.2 アーキテクチャ要素 |
2.3 ステークホルダ | 2.3 ステークホルダ |
2.4 アーキテクチャ記述 | 2.4 アーキテクチャ記述 |
2.5 中心的概念の相互関係 | 2.5 中心的概念の相互関係 |
2.6 要約 | 2.6 要約 |
2.7 参考文献 | 2.7 参考文献 |
第3章 ビューポイントとビュー | 3 ビューポイントとビュー |
3.1 アーキテクチャビュー | 3.1 アーキテクチャビュー |
3.2 ビューポイント | 3.2 ビューポイント |
3.3 核となる概念間の相互関係 | 3.3 核となる概念間の相互関係 |
3.4 ビューポイントとビューを使用する利点 | 3.4 ビューポイントとビューを使用する利点 |
3.5 ビューポイントの落とし穴 | 3.5 ビューポイントの落とし穴 |
3.6 ビューポイントカタログ | 3.6 ビューポイントカタログ |
3.7 要約 | 3.7 要約 |
3.8 参考文献 | 3.8 参考文献 |
第4章 アーキテクチャパースペクティブ | 4 アーキテクチャパースペクティブ |
4.1 品質特性 | 4.1 品質特性 |
4.2 アーキテクチャパースペクティブ | 4.2 アーキテクチャパースペクティブ |
4.3 パースペクティブをビューに適用する | 4.3 パースペクティブをビューに適用する |
4.4 パースペクティブ適用の結果 | 4.4 パースペクティブ適用の結果 |
4.5 核となる概念間の相互関係 | 4.5 核となる概念間の相互関係 |
4.6 パースペクティブを使用する利点 | 4.6 パースペクティブを使用する利点 |
4.7 パースペクティブの落とし穴 | 4.7 パースペクティブの落とし穴 |
- | 4.8 パースペクティブをビューと比較する |
4.8 パースペクティブカタログ | 4.9 パースペクティブカタログ |
4.9 要約 | 4.10 要約 |
4.10 参考文献 | 4.11 参考文献 |
第5章 ソフトウェアアーキテクトの役割 | 5 ソフトウェアアーキテクトの役割 |
5.1 アーキテクチャ定義プロセス | 5.1 アーキテクチャ定義プロセス |
5.2 アーキテクトの役割 | 5.2 アーキテクトの役割 |
5.3 核となる概念間の相互関係 | 5.3 核となる概念間の相互関係 |
5.4 アーキテクチャの専門化 | 5.4 アーキテクチャの専門化 |
5.5 組織コンテクスト | 5.5 組織コンテクスト |
5.6 アーキテクトのスキル | 5.6 アーキテクトのスキル |
5.7 アーキテクトの責務 | 5.7 アーキテクトの責務 |
5.8 要約 | 5.8 要約 |
5.9 参考文献 | 5.9 参考文献 |
第2部 ソフトウェアアーキテクチャのプロセス | 第2部 ソフトウェアアーキテクチャのプロセス |
第6章 ソフトウェアアーキテクチャプロセス概論 | 6 ソフトウェアアーキテクチャプロセス概論 |
第7章 アーキテクチャ定義プロセス | 7 アーキテクチャ定義プロセス |
7.1 指針となる原理 | 7.1 指針となる原理 |
7.2 プロセスの成果 | 7.2 プロセスの成果 |
7.3 プロセスコンテクスト | 7.3 プロセスコンテクスト |
7.4 サポートアクティビティ | 7.4 サポートアクティビティ |
7.5 アーキテクチャ定義アクティビティ | 7.5 アーキテクチャ定義アクティビティ |
7.6 プロセス終了基準 | 7.6 プロセス終了基準 |
7.7 ソフトウェア開発ライフサイクルにおけるアーキテクチャ定義 | 7.7 ソフトウェア開発ライフサイクルにおけるアーキテクチャ定義 |
7.8 要約 | 7.8 要約 |
7.9 参考文献 | 7.9 参考文献 |
第8章 スコープ、関心事、原理、制約 | 8 関心事、原理、決定 |
8.1 ビジネスの目標とドライバ | 8.1 問題重視の関心事 |
8.2 アーキテクチャのスコープ | 8.2 解決策重視の関心事 |
8.3 アーキテクチャの関心事 | 8.3 その他の現実的な制約 |
8.4 アーキテクチャ原理 | 8.4 妥当な関心事とは |
8.5 その他のアーキテクチャ制約 | 8.5 アーキテクチャ原理 |
- | 8.6 アーキテクチャ上の判断 |
- | 8.7 原理を使って関心事と判断を結びつける |
8.6 チェックリスト | 8.8 チェックリスト |
8.7 要約 | 8.9 要約 |
8.8 参考文献 | 8.10 参考文献 |
第9章 ステークホルダを特定して参加させる | 9 ステークホルダを特定して参加させる |
9.1 ステークホルダの選出 | 9.1 ステークホルダの選出 |
9.2 ステークホルダのクラス | 9.2 ステークホルダのクラス |
9.3 実例 | 9.3 実例 |
9.4 代理ステークホルダ | 9.4 代理ステークホルダ |
9.5 ステークホルダグループ | 9.5 ステークホルダグループ |
9.6 ステークホルダの責務 | 9.6 ステークホルダの責務 |
9.7 チェックリスト | 9.7 チェックリスト |
9.8 要約 | 9.8 要約 |
9.9 参考文献 | 9.9 参考文献 |
第10章 シナリオを特定して使用する | 10 シナリオを特定して使用する |
10.1 シナリオのタイプ | 10.1 シナリオのタイプ |
10.2 シナリオの用途 | 10.2 シナリオの用途 |
10.3 シナリオを特定して優先順位を付ける | 10.3 シナリオを特定して優先順位を付ける |
10.4 シナリオをとらえる | 10.4 シナリオをとらえる |
- | 10.5 何が良いシナリオを構成するか |
10.5 シナリオを適用する | 10.6 シナリオを適用する |
10.6 シナリオの有効活用 | 10.7 シナリオの有効活用 |
10.7 チェックリスト | 10.8 チェックリスト |
10.8 要約 | 10.9 要約 |
10.9 参考文献 | 10.10 参考文献 |
第11章 スタイルとパターンを使用する | 11 スタイルとパターンを使用する |
11.1 ソフトウェアパターン | 11.1 ソフトウェアパターン |
11.2 スタイル、パターン、イディオム | 11.2 スタイル、パターン、イディオム |
- | 11.3 パターンとアーキテクチャ戦術 |
11.3 アーキテクチャスタイルの例 | 11.4 アーキテクチャスタイルの例 |
11.4 アーキテクチャスタイルを使用する利点 | 11.5 アーキテクチャスタイルを使用する利点 |
11.5 スタイルとアーキテクチャ記述 | 11.6 スタイルとアーキテクチャ記述 |
11.6 一般的なアーキテクチャスタイル | - |
11.7 アーキテクチャでのデザインパターンと言語イディオム | 11.7 デザインパターンと言語イディオムを適用する |
11.8 チェックリスト | 11.8 チェックリスト |
11.9 要約 | 11.9 要約 |
11.10 参考文献 | 11.10 参考文献 |
第12章 アーキテクチャモデルの制作 | 12 アーキテクチャモデルの制作 |
12.1 モデルが重要な理由 | 12.1 モデルが重要な理由 |
12.2 モデルのタイプ | 12.2 モデルのタイプ |
12.3 モデリング言語 | 12.3 モデリング言語 |
12.4 効果的なモデルを作成するための指針 | 12.4 効果的なモデルを作成するための指針 |
12.5 アジャイルモデリングテクニック | 12.5 アジャイルチームとのモデル化 |
12.6 チェックリスト | 12.6 チェックリスト |
12.7 要約 | 12.7 要約 |
12.8 参考文献 | 12.8 参考文献 |
第13章 アーキテクチャ記述を作成する | 13 アーキテクチャ記述を作成する |
13.1 効果的なアーキテクチャ記述の特性 | 13.1 効果的なアーキテクチャ記述の特性 |
13.2 用語解説 | 13.2 用語解説 |
13.3 IEEE標準 | 13.3 ISO標準 |
13.4 アーキテクチャ記述の内容 | 13.4 アーキテクチャ記述の内容 |
- | 13.5 アーキテクチャ記述を提示する |
13.5 チェックリスト | 13.6 チェックリスト |
13.6 要約 | 13.7 要約 |
13.7 参考文献 | 13.8 参考文献 |
第14章 アーキテクチャの妥当性を確認する | 14 アーキテクチャを評価する |
14.1 なぜ、アーキテクチャの妥当性を確認するのか? | 14.1 なぜ、アーキテクチャの妥当性を確認するのか? |
14.2 妥当性確認のテクニック | 14.2 評価のテクニック |
14.3 シナリオベース評価手法 | 14.3 シナリオベース評価手法 |
14.4 ソフトウェアライフサイクル中での妥当性確認 | 14.4 ソフトウェアライフサイクル中での評価 |
- | 14.5 既存システムのアーキテクチャの妥当性を確認する |
14.5 妥当性確認の結果を記録する | 14.6 評価の結果を記録する |
- | 14.7 評価アプローチを選択する |
14.6 チェックリスト | 14.8 チェックリスト |
14.7 要約 | 14.9 要約 |
14.8 参考文献 | 14.10 参考文献 |
第3部 ビューポイントカタログ | 第3 部 ビューポイントカタログ |
第15章 ビューポイントカタログ概論 | 15 ビューポイントカタログ概論 |
- | 16 コンテクストビューポイント |
第16章 機能的ビューポイント | 17 機能的ビューポイント |
第17章 情報ビューポイント | 18 情報ビューポイント |
第18章 並行性ビューポイント | 19 並行性ビューポイント |
第19章 開発ビューポイント | 20 開発ビューポイント |
第20章 配置ビューポイント | 21 配置ビューポイント |
第21章 運用ビューポイント | 22 運用ビューポイント |
第22章 ビュー間の整合性を実現する | 23 ビュー間の整合性を実現する |
22.1 ビュー間の関係 | 23.1 ビュー間の関係 |
- | 23.2 コンテクストビューと機能的ビューの整合性 |
- | 23.3 コンテクストビューと情報ビューとの整合性 |
- | 23.4 コンテクストビューと配置ビューとの整合性 |
22.2 機能的ビューと情報ビューの整合性 | 23.5 機能的ビューと情報ビューの整合性 |
22.3 機能的ビューと並行性ビューの整合性 | 23.6 機能的ビューと並行性ビューの整合性 |
22.4 機能的ビューとと開発ビューの整合性 | 23.7 機能的ビューとと開発ビューの整合性 |
22.5 機能的ビューと配置ビューの整合性 | 23.8 機能的ビューと配置ビューの整合性 |
22.6 機能的ビューと運用ビューの整合性 | 23.9 機能的ビューと運用ビューの整合性 |
22.7 情報ビューと並行性ビューの整合性 | 23.10 情報ビューと並行性ビューの整合性 |
22.8 情報ビューと開発ビューの整合性 | 23.11 情報ビューと開発ビューの整合性 |
22.9 情報ビューと配置ビューの整合性 | 23.12 情報ビューと配置ビューの整合性 |
22.10 情報ビューと運用ビューの整合性 | 23.13 情報ビューと運用ビューの整合性 |
22.11 並行性ビューと開発ビューの整合性 | 23.14 並行性ビューと開発ビューの整合性 |
22.12 並行性ビューと配置ビューの整合性 | 23.15 並行性ビューと配置ビューの整合性 |
22.13 配置ビューと運用ビューの整合性 | 23.16 配置ビューと運用ビューの整合性 |
第4部 パースペクティブカタログ | 第4部 パースペクティブカタログ |
第23章 パースペクティブカタログ概論 | 24 パースペクティブカタログ概論 |
第24章 セキュリティパースペクティブ | 25 セキュリティパースペクティブ |
第25章 パフォーマンスとスケーラビリティパースペクティブ | 26 パフォーマンスとスケーラビリティパースペクティブ |
第26章 可用性とレジリエンスパースペクティブ | 27 可用性とレジリエンスパースペクティブ |
第27章 発展性パースペクティブ | 28 発展性パースペクティブ |
第28章 その他のパースペクティブ | 29 その他のパースペクティブ |
28.1 アクセシビリティパースペクティブ | 29.1 アクセシビリティパースペクティブ |
28.2 開発リソースパースペクティブ | 29.2 開発リソースパースペクティブ |
28.3 国際化パースペクティブ | 29.3 国際化パースペクティブ |
28.4 配置場所パースペクティブ | 29.4 配置場所パースペクティブ |
28.5 規則パースペクティブ | 29.5 規則パースペクティブ |
28.6 使用性パースペクティブ | 29.6 使用性パースペクティブ |
第5部 すべての1つにまとめる | 第5部 すべてを1つにまとめる |
第29章 ソフトウェアアーキテクトとして仕事をする | 30 ソフトウェアアーキテクトとして仕事をする |
29.1 プロジェクトライフサイクルにおけるアーキテクト | 30.1 プロジェクトライフサイクルにおけるアーキテクト |
29.2 いろいろなタイプのプロジェクトにおけるアーキテクト | 30.2 いろいろなタイプのプロジェクトにおけるアーキテクト |
付録 その他のビューポイントセット | 付録 その他のビューポイントセット |
A.1 KRUCHTENの「4+1」 | A.1 KRUCHTEN の「4+1」 |
A.2 RM-ODP | A.2 RM-ODP |
A.3 シーメンス(HOFMEISTER、NORD、SONI) | A.3 シーメンス(HOFMEISTER、NORD、SONI) |
A.4 SEIビュータイプ | A.4 SEI ”Views and Beyond”ビュー |
A.5 GARLANDとANTHONY | A.5 GARLANDとANTHONY |
- | A.6 IAF |
- | A.7 エンタープライズアーキテクチャフレームワーク |
- | A.8 その他のエンタープライズアーキテクチャフレームワーク |
さて、それでは最初からちゃんと読むか〜