アーキテクチャ特性(-ility)とトレードオフ
『ソフトウェアアーキテクチャの基礎』 が中核に据える概念。システムの成功基準を定める「ドメインに依らない設計上の考慮事項」をアーキテクチャ特性と呼ぶ。非機能要件/品質特性とも呼ばれるが、著者らは QA 的に矮小化されるとして否定的。
特性の分類
- 運用特性: 可用性、継続性、パフォーマンス、回復性、信頼性/安全性、堅牢性、スケーラビリティ。
- 構造特性: 構成容易性、拡張性、インストール容易性、再利用性、ローカライゼーション(i18n)、メンテナンス容易性、可搬性、アップグレード容易性。
- 横断的特性: アクセシビリティ(a11y)、認証/認可、プライバシー、セキュリティ、サポート容易性、ユーザビリティ。
トレードオフが本質
- すべての特性をサポートする「汎用アーキテクチャ」はアンチパターン。パフォーマンスとセキュリティのように特性は互いに競合する。
- 特性を入れるほど設計が複雑化するため最小化し、「少なくとも最悪ではない」アーキテクチャを iterative に狙う。
- 特性に順序付けして全員合意を取るのは時間の無駄で、「選ぶだけ」にすべき。
発見と計測
- 要件・ドメインの関心事から暗黙的特性を抽出する(ビジネス側の「スピード感」=アジリティ+テスタビリティ+デプロイ容易性、のように言い換える)。
- 計測は客観的定義を必要とする。循環的複雑度(CC)などのコードメトリクスや First Contentful Paint などで統制する。アーキテクチャ適応度関数で継続的に検証。
関連: architecture-styles-comparison / microservices-architecture / _moc-book-notes