ソフトウェアアーキテクチャ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ソフトウェアアーキテクチャ(Software Architecture)は、ソフトウェアコンポーネント、それらの外部特性、またそれらの相互関係から構成される。また、この用語はシステムのソフトウェアアーキテクチャの文書化を意味することもある。ソフトウェアアーキテクチャの文書は開発依頼主とのコミュニケーションを容易にするもので、概要レベルの設計に関する早期の決定を促し、プロジェクト間でのコンポーネントとパターンの設計を再利用することを可能にする[1]。
目次 |
[編集] 背景
計算機科学の分野は、その草創期から複雑性に関する問題を扱ってきた[2]。初期の複雑性の問題は、開発者が正しいデータ構造を使い、アルゴリズムを開発し、問題を分割する手法を用いることによって解決されていた。「ソフトウェアアーキテクチャ」という用語は業界でも比較的新しいもので、その分野の根本原理は1980年代ごろからソフトウェア工学のパイオニア達によって散発的に適用されてきた。システムのソフトウェアアーキテクチャを説明する初期の試みは不正確で混乱したものであった(四角形と線で描かれた図などである)[3]。1990年代、ソフトウェアアーキテクチャの根本的な記述方法の成文化が集中的に行われた。初期のデザインパターン、ベストプラクティス、記述言語、形式論理などがそのころ開発されたのである。
ソフトウェアアーキテクチャとは、抽象化と問題の分割によって複雑性を減らすことを主に念頭に置いたものである。今までのところ「ソフトウェアアーキテクチャ」という用語に関して、万人が合意した厳密な定義は存在しない[4]。
分野としては円熟してきていながら、明確な規則のないままシステムを設計しなければならないため、その作業は未だに科学と技能の混合となっている。ソフトウェアアーキテクチャの「技能」的側面は、商用ソフトウェアシステムがビジネスに使用されているという点によるところが大きい。あるシステムがビジネスの重要な一部を担っているため、システムの要求仕様は機能仕様ではなく、品質レベルなどで記述されることが多い[5]。システムはビジネスの性質に依存するため千差万別であり、品質特性のレベルもシステムによって様々で、実装によってフォールトトレラント性が求められたり、互換性が重視されたり、拡張性、信頼性、保守性、可用性、セキュリティ、ユーザービリティなどといった面が重視されたりする[5]。
ソフトウェアアーキテクチャにユーザーの洞察を持ち込むため、ソフトウェアアーキテクチャは言って見ればそのような各ユーザー(システム開発依頼主、開発者、運用者、保守要員、エンドユーザー)の専門分野に関わるタスクを行うための方向性を与えるものと言える[要出典]。そういった意味でソフトウェアアーキテクチャはシステムが備えるべき複数の洞察の混合物である。そのようないくつかの観点がソフトウェアアーキテクチャに組み込まれるということは、ソフトウェア開発が具体化する前にソフトウェアアーキテクチャを作成することの正当性を示している。
[編集] 歴史
概念としてのソフトウェアアーキテクチャの起源は、1968年のエドガー・ダイクストラの研究や1970年代初期のデイビッド・パーナスの研究である。科学者らはソフトウェアシステムの構造が重要であり、構造を正しくすることが肝要であることを強調した[6]。1990年代初期にはこの領域の研究は盛んになり、アーキテクチャ上のスタイル(パターン)、アーキテクチャ記述言語、アーキテクチャの文書化、形式手法などが主に研究されるようになった[7]。カーネギーメロン大学やカリフォルニア大学アーバイン校(UCI)など多数の研究機関がソフトウェアアーキテクチャの研究を行っている。カーネギーメロン大学の Mary Shaw と David Garlan の著書 Software Architecture: Perspectives on an Emerging Discipline(1996年)で、コンポーネント、コネクター、スタイルといったソフトウェアアーキテクチャ上の概念を提唱した。UCI の Institute for Software Research ではアーキテクチャ上のスタイル、アーキテクチャ記述言語、動的アーキテクチャなどを主に研究している。
ANSI/IEEE 1471-2000: Recommended Practice for Architecture Description of Software-Intensive Systems(ソフトウェアシステムのアーキテクチャ記述のための指針)は、ソフトウェアアーキテクチャの領域での世界初の標準であり、最近 ISO によって ISO/IEC DIS 25961 として採用された。
[編集] アーキテクチャの記述法
[編集] アーキテクチャ記述言語
アーキテクチャ記述言語(ADL) はソフトウェアアーキテクチャを記述するための言語である。これまで、いくつかの ADL がそれぞれ異なる組織によって開発されてきた。例えば、Wright(カーネギーメロン大学)、Acme(カーネギーメロン大学)、xADL(UCI)、Darwin(インペリアル・カレッジ・ロンドン)、DAOP-ADL(マラガ大学)などがある。ADL の基本要素として、コンポーネント、コネクター、コンフィギュレーションなどがある。
[編集] ビュー
ソフトウェアアーキテクチャは一般に複数のビュー(Views)で構成される[8]。これは建築で複数かつ様々な設計図が使用されるのに似ている。ANSI/IEEE 1471-2000によれば、ビューはビューポイント(viewpoints、観点)のインスタンスであり、ビューポイントとはそのシステムの関係者がそれぞれの立場で必要とするアーキテクチャを記述したものである。
以下のようなビュー(1471 ではビューポイント)がある。
- 機能/ロジックビュー
- コードビュー
- 開発/構造ビュー
- 並列性/プロセス/スレッドビュー
- 物理/配置ビュー
- ユーザー行動/フィードバックビュー
ソフトウェアアーキテクチャを記述するための言語はいくつか考案されているが、どれも広く受け入れられてはいない。UMLを最有力とする見方もある[要出典]。別の見方として、効果的なソフトウェア開発には個々の問題における固有の条件を理解する必要があり、汎用の記述法は何らかのバイアスを生むため、問題領域によっては使えないばかりか有害ですらあるとして、そのような記述法は無駄だという考え方もある[要出典]。その論拠として、プログラミング言語が増殖し続けており、統一プログラミング言語を制定しようという試みは失敗してきたという事実があり、これはソフトウェアが標準ではなく多様性の中で繁栄することを示している。
[編集] アーキテクチャのフレームワーク
- DODAF
- MODAF
- TOGAF
- ザックマンフレームワーク
- FEA
[編集] アーキテクチャの例
コンピュータソフトウェアのモジュール群を設計し、それらの間で通信を行う共通的な手法は数々存在する。以下に例をあげる。
- クライアントサーバモデル
- 分散コンピューティング
- Peer to Peer
- パイプとフィルター
- プラグイン
- 三層モデル
- SSADM (モジュールベースだが、通常モノリシック)
- ソフトウェアコンポーネント (モジュールベース。オブジェクト指向プログラミング)
- サービス指向アーキテクチャ
[編集] 関連項目
- デザインパターン
- アンチパターン
- 標準データモデル
- エンタープライズアーキテクチャ
- プロセスアーキテクチャ
- ソフトウェアアーキテクト
- システムアーキテクチャ / システムアーキテクト
- 技術アーキテクチャ
[編集] 脚注
- ^ Bass, Len; Paul Clements, Rick Kazman (1998年).Software Architecture In Practice, p. 23-28, Boston: Addison-Wesley. ISBN 0-201-19930-0.
- ^ University of Waterloo (2006年). "A Very Brief History of Computer Science" .
- ^ IEEE Transactions on Software Engineering (2006年). "Introduction to the Special Issue on Software Architecture" .
- ^ SEI (2006年). "How do you define Software Architecture?" .
- ^ a b SoftwareArchitectures.com (2006年). "Intro to Software Quality Attributes" .
- ^ SEI (2006年). "Origins of Software Architecture Study" .
- ^ Garlan & Shaw (2006年). "An Introduction to Software Architecture" .
- ^ Clements, Paul; Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Robert Nord, Judith Stafford (2003年).Documenting Software Architectures: Views and Beyond, pp. 13-15, Boston: Addison-Wesley. ISBN 0-201-70372-6.
[編集] 参考文献
- Len Bass, Paul Clements, Rick Kazman: Software Architecture in Practice, Second Edition. Addison Wesley, Reading 5/9/2003 ISBN 0-321-15495-9 (現在は第二版。基本概念を詳述している。テーマは主に品質に関すること)
- Garzás, Javier, and Piattini, Mario. An ontology for micro-architectural design knowledge, IEEE Software Magazine, Volume: 22, Issue: 2, March-April 2005. pp. 28 – 33.
- Philippe Kruchten: Architectural Blueprints - the 4+1 View Model of Software Architecture. In: IEEE Software. 12 (6) November 1995, pp. 42-50 (オンライン版は Rational website(PDF))
[編集] 外部リンク
- Software architecture definitions at Carnegie Mellon University Software Engineering Institute
- Software architecture vs. software design
- Worldwide Institute of Software Architects
- Grady Booch's Handbook of Software Architecture project
- SoftwareArchitectures.com この分野に関する独自の情報源
- International Association of Software Architects
- Microsoft Architecture Journal
カテゴリ: 出典を必要とする記事 | 書きかけの節のある項目 | ソフトウェアアーキテクチャ | ソフトウェア工学 | 情報学