アーキテクチャ特性(-ility)とトレードオフ

『ソフトウェアアーキテクチャの基礎』 が中核に据える概念。システムの成功基準を定める「ドメインに依らない設計上の考慮事項」をアーキテクチャ特性と呼ぶ。非機能要件/品質特性とも呼ばれるが、著者らは QA 的に矮小化されるとして否定的。

特性の分類

  • 運用特性: 可用性、継続性、パフォーマンス、回復性、信頼性/安全性、堅牢性、スケーラビリティ。
  • 構造特性: 構成容易性、拡張性、インストール容易性、再利用性、ローカライゼーション(i18n)、メンテナンス容易性、可搬性、アップグレード容易性。
  • 横断的特性: アクセシビリティ(a11y)、認証/認可、プライバシー、セキュリティ、サポート容易性、ユーザビリティ。

トレードオフが本質

  • すべての特性をサポートする「汎用アーキテクチャ」はアンチパターン。パフォーマンスとセキュリティのように特性は互いに競合する。
  • 特性を入れるほど設計が複雑化するため最小化し、「少なくとも最悪ではない」アーキテクチャを iterative に狙う。
  • 特性に順序付けして全員合意を取るのは時間の無駄で、「選ぶだけ」にすべき。

発見と計測

  • 要件・ドメインの関心事から暗黙的特性を抽出する(ビジネス側の「スピード感」=アジリティ+テスタビリティ+デプロイ容易性、のように言い換える)。
  • 計測は客観的定義を必要とする。循環的複雑度(CC)などのコードメトリクスや First Contentful Paint などで統制する。アーキテクチャ適応度関数で継続的に検証。

関連: architecture-styles-comparison / microservices-architecture / _moc-book-notes