索引 / 001 JA
Software Architecture in Practice(実践ソフトウェアアーキテクチャ) cover

コンピュータサイエンス

コンピュータサイエンス

Software Architecture in Practice(実践ソフトウェアアーキテクチャ)

Len Bass; Paul Clements; Rick Kazman

英語原題: Software Architecture in Practice

ソフトウェア工学研究所(SEI)に関わる研究者による、ソフトウェアアーキテクチャの体系的な解説書。アーキテクチャ上の決定が可用性、性能、セキュリティ、変更容易性などの品質特性をどう決めるかを説明し、実プロジェクトでアーキテクチャを設計・文書化・評価するための戦術、パターン、手法を示す。

前提知識: ソフトウェア工学の授業と、できればチームで複数コンポーネントからなるソフトウェアを構築した実務経験。

難易度レベル
上級
学術レベル
上級
software architecturequality attributesarchitectural tacticsarchitecture evaluationsoftware design教科書

01 / 読書ガイド

読書ガイド

引用

Bass, L., Clements, P., & Kazman, R. (2022). Software Architecture in Practice (4th ed.). Addison-Wesley Professional.

章の要約

第4版は 464 ページ、26 章、6 部構成で、出版社は 11 の新しい章を加えて更新されたと説明している。ソフトウェアアーキテクチャとは何か、なぜ重要か、品質特性に向けてどう設計するか、現代のプラットフォームに対するアーキテクチャ上の解決策、アーキテクチャを設計し、評価し、文書化する実践、そして組織におけるアーキテクチャの役割を扱う。枠組みの中心は、アーキテクチャ上の決定と、可用性、性能、セキュリティ、変更容易性といった品質特性との関係である。各章の末尾には参考文献と討論の課題がある。

第I部、第1〜2章:ソフトウェアアーキテクチャとは何か、なぜ重要か

第1章はソフトウェアアーキテクチャが何であり何でないかを定義し、アーキテクチャ構造とビューを紹介して、何が「良い」アーキテクチャかを問う。第2章はアーキテクチャが重要である十三の理由を挙げる。品質特性の阻害または促進、変更についての推論と管理、システム特性の予測、ステークホルダ間のコミュニケーション、早期の設計決定、実装への制約、組織構造への影響、漸進的な開発などである。

第3章:品質特性を理解する

第II部の土台となる章である。機能性と品質特性に関する考慮事項を扱い、品質特性の要求をシナリオとして記述する方法を示し、アーキテクチャパターンと戦術(タクティクス)による品質の達成、戦術を用いた設計、戦術に基づく質問票による設計決定の分析を紹介する。

第4〜13章:品質特性の各章

これらの章は同じ型に従う。その特性の一般シナリオ、戦術、戦術に基づく質問票、パターンである。扱う特性は、可用性(第4章)、継続的デプロイを含むデプロイ容易性(第5章)、エネルギー効率(第6章)、統合容易性(第7章)、変更容易性(第8章)、性能(第9章)、安全性(safety、第10章)、セキュリティ(第11章)、テスト容易性(第12章)、使用性(第13章)である。構造が繰り返されるため、参照用の章として使いやすい。

第14章:その他の品質特性との付き合い方

一覧にない特性についての章。他の種類の品質特性、標準的な特性の一覧を使う(または使わない)こと、新しい「〜性」を取り込む方法を扱う。

第III部、第15〜18章:ソフトウェアインタフェース、仮想化、クラウドと分散コンピューティング、モバイルシステム

第15章はインタフェースの概念、インタフェースの設計と文書化を扱う。第16章は共有資源、仮想マシンとそのイメージ、コンテナ、Pod、サーバーレスアーキテクチャを扱う。第17章はクラウドの基礎、クラウドでの障害、性能と可用性を高めるための複数インスタンスの利用を扱う。第18章はモバイルシステムを扱い、エネルギー、ネットワーク接続、センサとアクチュエータ、資源、ライフサイクルを論じる。出版社はモバイルシステムのアーキテクチャについてのオンラインのサンプル章を提供している。

第IV部、第19〜23章:スケーラブルなアーキテクチャの実践

第19章はアーキテクチャ上重要な要求(ASR)を扱い、要求文書、ステークホルダへのインタビュー、ビジネス目標から収集し、ユーティリティツリーに記録する。第20章は属性駆動設計とその手順を示す。第21章は評価をリスク低減の活動として扱い、アーキテクチャトレードオフ分析手法(ATAM)と軽量な評価を含む。第22章は文書化を扱い、用途と読者、記法、ビュー、ビューの組み合わせ、振る舞い、根拠、ステークホルダを論じる。第23章はアーキテクチャの負債の管理で、診断、ホットスポットの発見、例、自動化を扱う。

第V部、第24〜25章:プロジェクトにおけるアーキテクトの役割、アーキテクチャ能力

第24章はアーキテクトとプロジェクトマネージャ、漸進的なアーキテクチャ、アジャイル開発、分散開発を扱う。第25章は個々のアーキテクトの職務・技能・知識、アーキテクチャ組織の能力、より良いアーキテクトになる方法を扱う。

第VI部、第26章:未来への一瞥——量子コンピューティング

単一の量子ビット、量子テレポーテーション、量子コンピューティングと暗号、その他のアルゴリズム、潜在的な応用についての短い結びの章である。

主要概念

第1〜3章:アーキテクチャと品質特性

  • アーキテクチャ構造とビュー:一つのアーキテクチャを見る異なる方法。
  • 品質特性シナリオ:品質の要求を述べる構造化された方法。
  • 戦術とパターン:品質特性に影響する設計上の決定と、それらを組み合わせた確立された構成。

第4〜14章:品質特性

  • 戦術に基づく質問票:設計がある特性にどう対処しているかを分析するための質問群。
  • 一般シナリオ:各章が一つの特性について用いる雛形。
  • 継続的デプロイ:デプロイ容易性の章の背景にある実践。

第15〜26章:解決策と実践

  • アーキテクチャ上重要な要求とユーティリティツリー:設計を駆動する要求を見つけて優先順位をつける方法。
  • 属性駆動設計:アーキテクチャを設計する段階的な方法。
  • ATAM:評価のためのアーキテクチャトレードオフ分析手法。
  • アーキテクチャの負債とホットスポット:構造上の問題を見つけて管理する方法。

批判的分析

長所

  • 一貫した枠組み。 品質特性は、一般シナリオ、戦術、質問票、パターンという同じ要素を持つ並行した章で扱われ、比較しやすく、設計者にチェックリストを与える。
  • ライフサイクルを網羅。 第IV部はアーキテクチャ上重要な要求の収集から、設計、評価、文書化、負債までを扱い、第V部は組織とアーキテクトの役割に及ぶ。
  • 現代的なプラットフォームの話題。 出版社が強調するとおり、第4版ではエネルギー効率、安全性(safety)、デプロイ容易性、仮想化、コンテナ、サーバーレスアーキテクチャ、クラウド、モバイルシステムが加わった。
  • 実践志向。 書名と出版社は実用的な指針、専門家の方法、検証済みのモデルを強調しており、各章末には討論課題と参考文献の一覧がある。

短所

  • 広さが深さに勝る。 本文約 400 ページに 26 章を収めるため、一つの話題に割ける紙幅は小さい。品質特性の章はそれぞれ十数ページから二十ページ程度、プラットフォームの章は約十五ページである。一つの特性を深く知りたい読者は、参考文献の一覧をたどることになる。
  • 展望としての最終章。 最後の章は未来への一瞥と位置づけられ、8 ページである。量子ソフトウェアアーキテクチャの論考ではない。
  • 手法は簡潔な形で示される。 第20章は属性駆動設計とその七つの手順に約 18 ページ、21.5 節は ATAM に約 11 ページを割いており、これらの名前のある手法は紹介されるが、徹底的に教えられるわけではない。うまく使うにはプロジェクトでの実践が要る。

コースにおける位置づけ

ソフトウェア工学の書目の中で、アーキテクチャに特化した本である。Sommerville の『Software Engineering』は要求からテスト、進化までシステムを追う広い入門書で、アーキテクチャはその一話題にすぎない。この分野全体を知る必要があれば、まずそれを読む。『A Philosophy of Software Design』はモジュール内部の複雑さの管理についての短い本、『The Pragmatic Programmer』は個々の習慣の本、『Software Engineering at Google』は大きな組織がどのようにソフトウェアを保つかを述べ、『Software Abstractions』は設計を形式的にモデル化し分析する方法を示す。

Bass、Clements、Kazman の本は、コードレベルの助言と組織の実践との間に位置する。設計レビューで使われる品質特性、戦術、ビューの語彙を提供し、設計を記述するだけでなく検査もしたいときは『Software Abstractions』とよく組み合わさる。

本書の使い方

複数の構成要素からなるソフトウェアを(できればチームで)作ったり学んだりしたことがあり、アーキテクチャへの体系的なアプローチを求める学生と実務家向けである。

実用的な進め方:

  • 中核: 語彙のために第1〜3章、続いて自分のシステムに関わる品質特性の章(可用性、変更容易性、性能、セキュリティがよい出発点となる)。
  • プロセス: 第19〜22章(要求、設計、評価、文書化)は実践の背骨で、授業のプロジェクトに適している。ユーティリティツリーを作り、属性駆動設計を一巡させ、結果を複数のビューで文書化する。
  • 背景: 自分が扱うプラットフォームに応じて第15〜18章を、負債、アジャイルなプロジェクト、アーキテクトの成長については第23〜25章を読む。
  • 任意: 第14章と第26章。

各章末の討論課題を勉強会で使い、戦術に基づく質問票を自分が知っているシステムに当てはめてみるとよい。