Essence of Software Architecture & Design
ITシステムを運用するためには、必要な機能を求められる性能で実行可能な、“ソフトウェア”と、“ソフトウェア”を実行するための“ハードウェア”が必要です。
“ソフトウェア”構築において、アプリケーションコードを実装する、あるいは、サードパーティ製のソフトウェアの導入やそれらの組合せを行う前段階で、“アーキテクチャ”を定義しておくことが非常に重要です。
“アーキテクチャ”という用語は、普段のソフトウェア開発においても、よく使われる用語です。一般的には、開発対象のシステムの機能構成図やデータの流れを概観する図と補足情報をアーキテクチャとして扱い、大抵の場合はそれで事足りていますが、実は、アーキテクチャは、ISO/IEC/IEEE 42010 で正式に国際標準として定義された用語です。この標準において、Architectureとは、
であり、
と定義されていて、システムを構成の全てではないが、その本質を記述するモノだとしています。
更に、“fundamental”とは、
であると定義されています。
「概念モデリング教本」で解説している“概念モデル”は、この“elements”に相当すると考えてよいでしょう。それ以外の”relationships”と“the principles”を定義していく工程を、本稿では、”設計(Design)“と呼ぶことにします。また、”概念モデル“に対して”設計“の成果物を適用して、実際に実行可能な”ソフトウェア“を作成する過程を”実装“と呼ぶことにします。
ビジネス用途のソフトウェア開発の目的はコードを書くことではありません。既に所有するソフトウェア資産(と呼ばれるもの)の再利用でもありません。ソフトウェア開発の目的は、あくまでも、ビジネス戦略達成で見込まれる利益に見合う投資額で、内製開発、外部発注に関わらず、ビジネス戦略の達成に必要な機能を有し、かつ、ビジネスの発展に伴って継続的に改変可能なソフトウェアを構築することです。
以上を踏まえ、本稿では、ソフトウェア開発における“設計”を行う上で必要な基礎知識のうち、最低限おさえておきたい項目について筆者の経験を元に、概念モデリングのプラクティスを実践しない従来型の開発の事情も含めて解説していきます。