システムアーキテクチャ構築の原理

システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)

システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)

アーキテクチャ設計の際には、ぜひ手元に置いておきたい一冊。

設計に関する書籍はスタイルやパターンについて書かれたものが多いが、本書はステークホルダ、スコープ、パターンに始まり、データ構造、運用、セキュリティ、パフォーマンスなど取り扱う範囲が非常に広い。

しかし網羅性は高いものの、各項目はそれほど詳細に記述されているわけではない。詳しく学びたい場合は、各章で参考文献が紹介されているので、それらを参考にするのがよいだろう。

また、実際の設計の場面で、本書に記述されていることすべてを設計に含めるのは、よほどの時間がない限り難しいと思う。設計の前に本書を開き、必要な項目を選定してから設計を始めるのが良さそうだ。

ITアーキテクトが持つべき3つの思考

さて、本書ではサブタイトルが「ITアーキテクトが持つべき3つの思考」となっている。3つの思考とは以下の通り。

  • ステークホルダ
  • ビューポイント
  • パースペクティブ
ステークホルダ

本書でのステークホルダとは、単にシステムを利用するユーザだけではなく、お金を払う人、サービスを受ける人、運用する人、開発者、テスタなどシステムに関係するあらゆる人々を指している。

アーキテクトとしては、関係するステークホルダをプロジェクトに参加させ*1、それらのステークホルダのニーズを調整して優先順位を決め、対立が生じても、適切で筋の通った判断をしなければならないとのこと。

現実的には、そのように関係するステークホルダ全員を参加させ、かつ全員を納得させることは難しいだろうが、皆がハッピーになれるシステムを構築するためには必要なことだと思う。

また、すべてのステークホルダが完璧に満足する、高品質で、コスト0、即納期のシステムを開発することは不可能であるから、以下のような品質三角形のどこに位置するのか(どこで妥協するのか)を考える必要があるとのこと。

ビューポイント

ビューポイントとは、とある関心事に対して、どのようにアーキテクチャを構築するかを決めるための指針や原理、テンプレートなどを集めたものである。

本書では、下記の関心事に対して、ビューポイントを定義している。

  • 機能ビューポイント
  • 情報ビューポイント
  • 並行性ビューポイント
  • 開発ビューポイント
  • 配置ビューポイント
  • 運用ビューポイント

機能や情報(データ構造)については、どのようなシステムでも考えるだろうが、開発(テストの標準化、デバッグコードの埋め込み、ソースのディレクトリ構成)や、運用(インストールやアップグレード、バックアップやリストア)などは忘れがちなので、本書のチェックリストを活用したい。

パースペクティブ

一方、単純に1つの視点だけでは十分ではなく、システムに対して横断的に判断しなければならない項目がパースペクティブである。

本書では、以下の項目を定義している。

  • セキュリティ
  • パフォーマンスとスケーラビリティ
  • 可用性とレジリエンス
  • 発展性

また、以下の項目については簡単に説明している。

これらの項目は、なぜ横断的にチェックしなければならないのか?

例えば、パフォーマンスであれば、機能が影響するのはもちろんだが、情報(データベースの最適化)も影響するだろうし、並行性(マルチスレッド)や配置(分散処理)の仕方で解決できるかも知れない。このように複数のビューが絡んでくるから、横断的な見地が必要となる。セキュリティや他の項目についても同様である。

特に印象的だったのがこの一文。

典型的に、システム全体の品質特性は、最も振る舞いが悪い、または最も脆弱な内部要素の特性と実質的に同じになる

カタログ

本書の後半は、ビューポイントとパースペクティブのカタログになっている。

カタログには、関心事(何について考えるか)、アクティビティ(どういう順序で設計するか)、モデル(どのように表現するか)、問題と落とし穴(よくある問題点)、チェックリストがそれぞれ記述されている。

実際の設計の際には、このカタログを活用し、設計項目の洗い出し、モデリング、レビューと実施するのが良さそうだ。

*1:関係者を巻き込むってのは、アジャイルにも通じるところがありますね