ソフトウェアアーキテクチャは、
ソフトウェアコンポーネント、それらの外部特性、およびそれらの相互関係から構成される、
ソフトウェアシステムの設計図です。これは単なるコードの集まりではなく、システム全体をどのように構築し、どのように相互作用させるかを定義する青写真です。
ソフトウェアアーキテクチャは、開発依頼主とのコミュニケーションを円滑にし、プロジェクト初期段階での設計判断を支援し、コンポーネントとパターンの再利用を促進します。
背景
計算機科学の初期から、
複雑性の管理は重要な課題でした。初期には、
データ構造や
アルゴリズムを工夫することで対応していましたが、
ソフトウェアアーキテクチャという概念は、より大規模で複雑なシステムに対応するために生まれました。1980年代頃から、
ソフトウェア工学の先駆者たちがその根本原理を適用し始めましたが、当初は曖昧で混乱したものでした。
1990年代には、アーキテクチャ記述方法の標準化が進み、デザインパターン、
ベストプラクティス、記述言語、形式論理などが開発されました。
ソフトウェアアーキテクチャは、複雑さを軽減するために抽象化と問題分割を行います。しかし、厳密な定義はまだ定まっておらず、科学と技術の混合領域とされています。特に、商業
ソフトウェアではビジネスニーズに合わせて品質特性が重視されるため、システムの要件は機能だけでなく、
可用性、信頼性、セキュリティなど様々な要素が考慮されます。
歴史
ソフトウェアアーキテクチャの概念は、1968年の
エドガー・ダイクストラの研究や1970年代初期のデイビッド・パーナスの研究に端を発します。彼らは、
ソフトウェアシステムの構造が重要であることを強調しました。
1990年代初期には、アーキテクチャスタイル、記述言語、文書化、形式手法などの研究が活発化しました。
カーネギーメロン大学やカリフォルニア大学アーバイン校(UCI)などの研究機関がこの分野の研究を推進し、特に
カーネギーメロン大学のMary ShawとDavid Garlanは、1996年に「Software Architecture: Perspectives on an Emerging Discipline」を出版し、コンポーネント、コネクター、スタイルといった概念を提唱しました。また、ANSI/IEEE 1471-2000は、
ソフトウェアアーキテクチャに関する初の国際標準となり、ISOによってISO/IEC DIS 25961として採用されました。
アーキテクチャの記述法
アーキテクチャ記述言語 (ADL)
アーキテクチャ記述言語(ADL)は、
ソフトウェアアーキテクチャを記述するための専用言語です。これまで、Wright、Acme、xADL、Darwin、DAOP-ADLなど、さまざまなADLが開発されてきました。ADLの基本要素として、コンポーネント、コネクター、コンフィギュレーションなどがあります。
ビュー
ソフトウェアアーキテクチャは、通常、複数のビュー(視点)で構成されます。これは、建築設計図が複数の図面で構成されるのと同様です。ANSI/IEEE 1471-2000によれば、ビューはビューポイントのインスタンスであり、ビューポイントは、システムの関係者がそれぞれの立場で必要とするアーキテクチャを記述したものです。
主なビューには、以下のようなものがあります。
機能/ロジックビュー: システムの機能とロジックを記述します。
コードビュー: ソースコードの構成を記述します。
開発/構造ビュー: 開発チームの組織やモジュールの構造を記述します。
並列性/プロセス/スレッドビュー: 並列処理やスレッドの実行を記述します。
物理/配置ビュー: ソフトウェアがどのようにハードウェアに配置されるかを記述します。
ユーザー行動/フィードバックビュー: ユーザーの操作とシステムの反応を記述します。
現在、
ソフトウェアアーキテクチャを記述するための統一された言語は存在しません。
アーキテクチャのフレームワーク
ソフトウェアアーキテクチャの設計には、さまざまなフレームワークが利用されています。主なフレームワークには以下のものがあります。
Department of Defense Architecture Framework (DODAF): 米国防総省で使用されるフレームワーク。
MODAF: 英国国防省で使用されるフレームワーク。
The Open Group Architecture Framework (TOGAF): エンタープライズアーキテクチャのフレームワーク。
ザックマンフレームワーク: エンタープライズアーキテクチャのフレームワーク。
Federal Enterprise Architecture (FEA): 米国連邦政府で使用されるフレームワーク。
アーキテクチャの例
ソフトウェアモジュール間の通信や連携を行うための一般的なパターンやアプローチには、以下のようなものがあります。
クライアントサーバモデル: クライアントがサーバに要求を送り、サーバが処理結果を返すモデル。
分散コンピューティング: 複数のコンピュータが連携して処理を行うモデル。
Peer to Peer: 各ノードが対等な立場で通信を行うモデル。
パイプとフィルター: データがパイプラインを流れ、各フィルターで処理されるモデル。
プラグイン: ソフトウェアに機能を追加するための拡張機構。
SSADM: 構造化されたモジュールベースのシステム開発手法。
ソフトウェアコンポーネント: オブジェクト指向[[プログラミング]]におけるモジュールベースの設計。
サービス指向アーキテクチャ (SOA): サービスを組み合わせてシステムを構築するアーキテクチャ。
三層モデル: プレゼンテーション層、ビジネスロジック層、データ層の3層構造。
コアドメインの独立: ビジネスロジックとUIなどを分離する設計。
ヘキサゴナルアーキテクチャ: アプリケーションロジックを中心とし、外部とのインタラクションをポートとアダプターで抽象化する。
クリーンアーキテクチャ: レイヤー化されたアーキテクチャで、ビジネスルールを独立させ、技術的な詳細に依存しない構造。
UIの分離: ユーザーインターフェースをビジネスロジックと分離する。
Model-View-Controller (MVC): ドメイン、表示、入力を分離するデザインパターン。
Model-View-ViewModel (MVVM): 状態を持つModelと宣言的なViewを分離し、Viewの状態を管理するViewModelを利用する。
関連項目
ソフトウェア工学
デザインパターン
アンチパターン
標準データモデル
エンタープライズアーキテクチャ
システムアーキテクチャ