範囲 ソフトウェアアーキテクチャの範囲については意見が分かれる。[ 6 ]
マクロシステム構造:これは、計算 コンポーネント の集合と、これらのコンポーネント間の相互作用を記述するコネクタ で構成されるソフトウェアシステムの高レベルの抽象化としてのアーキテクチャを指します。 [ 7 ] 重要なこと――それが何であれ ――とは、ソフトウェアアーキテクトはシステムとその利害関係者に大きな影響を与える決定に関心を持つべきであるという事実を指します。[ 8 ] 環境におけるシステムを理解する上で根本的なもの [ 9 ] 人々が変更しにくいと感じるもの :アーキテクチャの設計はソフトウェアシステムのライフサイクルの初期に行われるため、アーキテクトは「必ず」最初に正しくなければならない決定に集中すべきである。この考え方に従えば、アーキテクチャ設計上の問題は、不可逆性を克服できれば非アーキテクチャ的なものになる可能性がある。[ 8 ] 一連のアーキテクチャ設計上の決定事項 :ソフトウェアアーキテクチャは、単なるモデルや構造の集合として捉えるべきではなく、これらの特定の構造につながる決定事項と、その背後にある論理的根拠も含めるべきである。[ 10 ] この洞察は、ソフトウェアアーキテクチャの知識管理 に関する大規模な研究につながった。[ 11 ] ソフトウェアアーキテクチャと設計・要求工学の間には明確な区別はありません(下記の関連分野を 参照)。これらはすべて、高レベルの意図から低レベルの詳細に至るまでの「意図の連鎖」の一部です。[ 12 ] : 18
パターンとスタイル モデル・ビュー・コントローラーパターン ソフトウェアアーキテクチャパターン は、システムレベルで繰り返し発生する問題に対する再利用可能で実績のある解決策であり、システムの全体構造、コンポーネント間の相互作用、および品質属性に関連する懸念事項に対処します。ソフトウェアアーキテクチャパターンは、ソフトウェアデザインパターン よりも高い抽象度で動作し、より広範なシステムレベルの課題を解決します。これらのパターンは通常システムレベルの懸念事項に影響を与えますが、アーキテクチャパターンとアーキテクチャスタイルの区別は曖昧になる場合があります。例としては、サーキットブレーカー があります。[ 13 ] [ 14 ] [ 15 ]
ソフトウェアアーキテクチャスタイルは 、システム全体の構成を定義する高レベルの構造的組織であり、コンポーネントがどのように組織され、どのように相互作用し、それらの相互作用に対する制約を規定します。アーキテクチャスタイルには通常、コンポーネントとコネクタタイプの語彙、およびシステムのプロパティを解釈するための意味モデルが含まれます。これらのスタイルは、システム構成の最も粗粒度のレベルを表します。例としては、階層型アーキテクチャ 、マイクロサービス 、イベント駆動型アーキテクチャ などがあります。[ 13 ] [ 14 ] [ 15 ]
アンチパターン アーキテクトが 意思決定を行う際に、以下のようなアーキテクチャ上のアンチパターンが 発生する可能性があります。これらのアンチパターンは、多くの場合、段階的に発生し、1つを解決すると別のアンチパターンが出現する可能性があります。[ 4 ]
アーキテクトは、誤った選択をすることを恐れて、アーキテクチャ上の決定を遅らせたり、避けたりすることがあります。これに対処するには、開発チームとの継続的かつ緊密な連携がしばしば必要となり、彼らのフィードバックに基づいてアーキテクチャ上の選択が調整されます。さらに、決定は通常「最後の責任ある瞬間」に行われ、決定を正当化し検証するのに十分な情報が確保されるとともに、分析麻痺を 引き起こしチームの進捗を妨げる可能性のある不必要な遅延が回避されます。[ 4 ] アーキテクチャ上の決定が忘れられたり、文書化されなかったり、理解されなかったりすると、別のアンチパターンが発生し、解決に至らない議論が繰り返されることになります。これは、アーキテクチャ上の決定を伝えるために電子メールが使用される場合によく発生します。これらの課題に対処するために、アーキテクトは 通常、アーキテクチャ上の決定に関する単一の記録(通常はアーキテクチャ決定記録)に、技術的およびビジネス上の正当性(多くの場合、コスト、ユーザー満足度、市場投入までの時間に関連)の両方を提供します。この記録は、wiki などのアクセス可能なリポジトリで維持できます。電子メールによるコミュニケーションは、変更の性質とコンテキストに焦点を当て、中央集権的な記録へのリンクとともに、関連する利害関係者のみに向けられます。これにより、常に単一の更新された真実の情報源が確保されます。さらに、アーキテクチャ上の決定が具体的なビジネス価値を提供しない場合、またはビジネス価値がビジネス利害関係者と一致しない場合は、再検討が必要になる場合があります。[ 4 ]
特徴 ソフトウェアアーキテクチャは、以下の特徴を示す。
多数の利害関係者: ソフトウェアシステムは、ビジネス管理者、所有者、ユーザー、オペレーターなど、さまざまな利害関係者に対応する必要があります。これらの利害関係者は、システムに関してそれぞれ独自の懸念を持っています。これらの懸念のバランスを取り、それらが対処されていることを示すことは、システムの設計の一部です。[ 5 ] : 29-31 これは、アーキテクチャが幅広い懸念と利害関係者に対処することを伴い、学際的な性質を持つことを意味します。
関心の分離 : 建築家が複雑さを軽減するための確立された方法は、設計を推進する関心を分離することです。アーキテクチャドキュメントは、さまざまな利害関係者の関心に関連付けられた別々の視点からアーキテクチャをモデル化および記述することによって、すべての利害関係者の関心が対処されていることを示しています。 [ 16 ] これらの別々の記述は、アーキテクチャビューと呼ばれます(たとえば、 4+1アーキテクチャビューモデルを 参照)。
品質重視: 従来のソフトウェア設計 アプローチ ( Jackson Structured Programming など) は、必要な機能とシステムを通るデータの流れによって推進されていましたが、現在の洞察[ 5 ] : 26–28 では、ソフトウェア システムのアーキテクチャは、耐障害性 、後方互換性 、拡張性 、信頼性 、保守性 、可用性 、セキュリティ、ユーザビリティなどの 品質属性とより密接に関連しています。利害関係者の懸念は、多くの場合、これらの品質属性に関する 要件 に変換され、これらは非機能要件 、機能外要件、動作要件、または品質属性要件などと呼ばれます。
繰り返し用いられるスタイル: 建築設計と同様に、ソフトウェアアーキテクチャの分野では、繰り返し生じる懸念事項に対処するための標準的な方法が開発されてきました。これらの「標準的な方法」は、さまざまな抽象度レベルでさまざまな名称で呼ばれています。繰り返し用いられる解決策の一般的な用語としては、アーキテクチャスタイル[ 12 ] : 273–277 、タクティクス[ 5 ] : 70–72、参照アーキテクチャ 、アーキテクチャパターン [ 17 ] [ 18 ] [ 5 ] : 203–205などがあります 。
概念的整合性: フレッド・ブルックス が1975年の著書『人月の神話』 で提唱した用語で、ソフトウェアシステムのアーキテクチャは、システムが何を行い、どのように行うべきかという全体的なビジョンを表しているという考え方を指す。このビジョンは実装とは切り離して考える必要がある。アーキテクトは「ビジョンの守護者」の役割を担い、システムへの追加がアーキテクチャに沿っていることを確認し、それによって概念的整合性 を維持する。[ 19 ] : 41-50
認知制約:コンピュータプログラマーの メルビン・コンウェイ が1967年の論文で初めて指摘した観察で、システムを設計する組織は、その組織のコミュニケーション構造のコピーである設計を生み出すように制約されているというものである。[ 20 ] フレッド・ブルックスは、著書『人月の神話 』でこの論文とアイデアを引用し、コンウェイの法則 と呼んで、より広い読者に紹介した。
モチベーション ソフトウェアアーキテクチャは、複雑なシステムを「知的に理解可能な」形で抽象化したものである。[ 5 ] : 5-6 この抽象化には、以下のような利点がある。
これは、システムが構築される前にソフトウェアシステムの動作を分析するための基礎を提供する。 [ 2 ] 実際に構築することなく、将来のソフトウェアシステムが利害関係者のニーズを満たすことを検証できる能力は、大幅なコスト削減とリスク軽減につながる。[ 21 ] このような分析を実行するために、 ATAM [ 22 ] やソフトウェアシステムの視覚的表現を作成するなど、多くの技術が開発されている。これは要素や決定の再利用の基盤を提供する。 [ 2 ] [ 5 ] : 35 完全なソフトウェアアーキテクチャ、または個々のアーキテクチャ戦略や決定などのその一部は、利害関係者が同様の品質属性や機能を必要とする複数のシステム間で再利用でき、設計コストを削減し、設計ミスのリスクを軽減する。これは、システムの開発、展開、保守のライフサイクルに影響を与える初期の設計決定をサポートします。 [ 5 ] : 31スケジュールと予算の超過を 防ぐためには、初期の大きな影響を与える決定を正しく行うことが重要です。利害関係者とのコミュニケーションを促進し、彼らのニーズをよりよく満たすシステムに貢献します。 [ 5 ] : 29-31 利害関係者の視点から複雑なシステムについてコミュニケーションをとることで、彼らが表明した要件とそれに基づく設計上の決定の結果を理解するのに役立ちます。アーキテクチャは、システムが実装される前に、比較的容易に適応できる段階で設計上の決定についてコミュニケーションをとる能力を提供します。リスク管理に役立ちます。 ソフトウェアアーキテクチャは、リスクと障害発生の可能性を低減するのに役立ちます。[ 12 ] : 18コスト削減 を可能にする。 ソフトウェアアーキテクチャは、複雑なITプロジェクトにおけるリスクとコストを管理する手段である。[ 23 ]
歴史 ソフトウェア設計と(土木)建築の比較は1960年代後半に初めて行われたが[ 24 ] 、 「ソフトウェアアーキテクチャ」という用語は1990年代まで広く使われることはなかった[ 25 ] 。コンピュータサイエンス の分野は、その形成以来、複雑性に関連する問題に直面してきた[ 26 ]。 複雑性の初期の問題は、開発者が適切なデータ構造を 選択し、アルゴリズム を開発し、関心の分離の 概念を適用することによって解決された。「ソフトウェアアーキテクチャ」という用語は業界では比較的新しいが、この分野の基本原則は1980年代半ばからソフトウェアエンジニアリングの 先駆者によって散発的に適用されてきた。システムのソフトウェアアーキテクチャを捉えて説明しようとする初期の試みは不正確で整理されておらず、多くの場合、ボックスと線で構成された図によって特徴付けられていた [ 27 ] 。
ソフトウェアアーキテクチャという概念は、1968年のエドガー・ダイクストラ と1970年代初頭のデビッド・パルナス の研究に端を発しています。これらの科学者は、ソフトウェアシステムの構造が重要であり、構造を正しくすることが極めて重要であることを強調しました。1990年代には、この分野の基本的な側面を定義し体系化するための協調的な取り組みが行われ、研究はアーキテクチャスタイル(パターン )、アーキテクチャ記述言語 、アーキテクチャドキュメント 、形式手法 に集中しました。[ 28 ]
研究機関は、ソフトウェアアーキテクチャを学問分野として発展させる上で重要な役割を果たしてきた。カーネギーメロン大学 のメアリー・ショー とデビッド・ガーランは、1996年に 『ソフトウェアアーキテクチャ:新興分野の展望』 という書籍を執筆し、コンポーネント 、コネクタ、スタイルといったソフトウェアアーキテクチャの概念を提唱した。カリフォルニア大学アーバイン 校のソフトウェア研究所は、ソフトウェアアーキテクチャ研究において、主にアーキテクチャスタイル、アーキテクチャ記述言語、動的アーキテクチャに重点を置いている。
IEEE 1471 -2000、「ソフトウェア集約型システムのアーキテクチャ記述に関する推奨実施基準」は、ソフトウェアアーキテクチャ分野における最初の正式な標準規格でした。これは、2007 年に ISO によって ISO/IEC 42010:2007 として採用されました。2011 年 11 月、IEEE 1471-2000 はISO/IEC/IEEE 42010:2011、「システムおよびソフトウェアエンジニアリング - アーキテクチャ記述」(IEEE と ISO の共同発行)に置き換えられました。[ 16 ]
IEEE 1471では、ソフトウェアアーキテクチャは「ソフトウェア集約型システム」のアーキテクチャに関するものであり、「ソフトウェアがシステム全体の設計、構築、展開、進化に不可欠な影響を与えるあらゆるシステム」と定義されていましたが、2011年版ではさらに一歩進んで、ハードウェアとソフトウェアだけでなく、「人間、プロセス、手順、設備、材料、自然発生的な実体」も含むISO/IEC 15288およびISO/IEC 12207のシステム定義を取り入れています。これは、ソフトウェアアーキテクチャ、エンタープライズアーキテクチャ 、ソリューションアーキテクチャ の関係性を反映しています。
建築活動 建築上の意思決定には、十分な関連情報を収集し、決定の正当性を示し、決定とその根拠を文書化し、適切な利害関係者に効果的に伝えることが含まれます。[ 4 ]
ソフトウェアアーキテクトの責任は、アーキテクチャ特性 (非機能要件 とも呼ばれる)をビジネス要件に合わせることです。例:[ 4 ]
顧客満足度を 高めるには、システムの可用性、耐障害性、セキュリティ、テスト容易性、復旧性、俊敏性、およびパフォーマンスが不可欠である。合併・買収 (M&A)を行うには、拡張性、スケーラビリティ、適応性、相互運用性が必要となる。予算と時間の制約があるため、実現可能性と簡便性が求められる。 市場投入までの時間を 短縮するには、保守性、テスト容易性、および展開容易性が不可欠である。ソフトウェアアーキテクチャ設計には4つのコアアクティビティがあります。[ 29 ] これらのコアアーキテクチャアクティビティは、ソフトウェア開発ライフサイクルの初期段階とシステムの進化のさまざまな段階で反復的に実行されます。
アーキテクチャ分析 とは、提案されたシステムが動作する環境を理解し、システムの要件を決定するプロセスです。分析活動へのインプットまたは要件は、さまざまなステークホルダーから得られ、次のような項目が含まれます。
システムが稼働時に何を行うか(機能要件) システムがISO/IEC 25010 :2011規格[ 30 ] で定義されている信頼性、操作性、パフォーマンス効率、セキュリティ、互換性などの実行時非機能要件をどれだけうまく実行できるか ISO 25010:2011規格[ 30 ] で定義されている保守性や移転性などの非機能要件の開発時間システムのビジネス要件と環境コンテキストは、法律、社会、財務、競争、技術上の懸念など、時間の経過とともに変化する可能性があります[ 31 ]。 分析活動の成果物は、ソフトウェアシステムのアーキテクチャに測定可能な影響を与える要件であり、アーキテクチャ的に重要な要件と呼ばれます。[ 32 ]
建築的合成 または設計とは、建築物を創造するプロセスである。分析によって決定された建築的に重要な要件、設計の現状、およびあらゆる評価活動の結果に基づいて、設計が創造され、改良される。[ 29 ] [ 5 ] : 311-326
アーキテクチャ評価 とは、現在の設計またはその一部が、分析中に導き出された要件をどの程度満たしているかを判断するプロセスです。評価は、設計者が設計上の決定を検討しているとき、設計の一部が完了した後、最終設計が完了した後、またはシステムが構築された後にいつでも行うことができます。利用可能なソフトウェアアーキテクチャ評価手法には、アーキテクチャトレードオフ分析手法(ATAM) やTARAなどがあります。[ 33 ] これらの手法を比較するためのフレームワークについては、 SARAレポート [ 21 ] やアーキテクチャレビュー:実践と経験 [ 34 ] などのフレームワークで議論されています。
アーキテクチャの進化 とは、要件や環境の変化に対応するために、既存のソフトウェアアーキテクチャを維持・適応させるプロセスです。ソフトウェアアーキテクチャはソフトウェアシステムの基本的な構造を提供するものであるため、その進化と維持は必然的にその基本構造に影響を与えます。したがって、アーキテクチャの進化は、既存の機能やシステム動作を維持するだけでなく、新しい機能を追加することにも関わります。
アーキテクチャには、重要な支援活動が不可欠です。これらの支援活動は、ソフトウェアアーキテクチャの中核となるプロセス全体を通して行われます。具体的には、知識管理とコミュニケーション、設計上の推論と意思決定、そしてドキュメント作成などが含まれます。
建築支援活動 ソフトウェアアーキテクチャ支援活動は、コアとなるソフトウェアアーキテクチャ活動の過程で実施されます。これらの支援活動は、ソフトウェアアーキテクトが分析、合成、評価、進化を行う際に役立ちます。例えば、アーキテクトは分析フェーズにおいて、知識の収集、意思決定、文書化を行う必要があります。
知識管理とコミュニケーションは 、ソフトウェアアーキテクチャの設計に不可欠な知識を探索し管理する行為です。ソフトウェアアーキテクトは孤立して作業するわけではありません。さまざまなステークホルダーから入力、機能要件と非機能要件、設計コンテキストを受け取り、ステークホルダーに出力を提供します。ソフトウェアアーキテクチャの知識は暗黙的であることが多く、ステークホルダーの頭の中に保持されています。ソフトウェアアーキテクチャの知識管理活動は、知識を見つけ、伝達し、保持することです。ソフトウェアアーキテクチャの設計上の問題は複雑で相互依存的であるため、設計推論における知識のギャップは、誤ったソフトウェアアーキテクチャ設計につながる可能性があります。[ 35 ] [ 36 ] 知識管理とコミュニケーション活動の例としては、設計パターンの検索、プロトタイピング、経験豊富な開発者やアーキテクトへの質問、類似システムの設計の評価、他の設計者やステークホルダーとの知識の共有、Wikiページへの経験の文書化などがあります。設計推論と意思決定は、 設計上の決定を評価する活動です。この活動は、ソフトウェアアーキテクチャの 3 つのコア活動すべてに不可欠です。[ 10 ] [ 37 ] これには、決定コンテキストの収集と関連付け、設計上の決定問題の定式化、解決策の選択肢の発見、決定を行う前のトレードオフ の評価が含まれます。このプロセスは、重要なアーキテクチャ要件とソフトウェアアーキテクチャの決定、およびソフトウェアアーキテクチャの分析、合成、評価を評価する際に、さまざまなレベルの決定粒度で発生します。推論活動の例としては、要件または設計が品質属性に与える影響の理解、設計が引き起こす可能性のある問題の質問、可能な解決策の選択肢の評価、および解決策間のトレードオフ の評価などがあります。ドキュメント作成 とは、ソフトウェアアーキテクチャプロセス中に生成された設計を記録する行為です。システム設計 は、システムのコード構造を示す静的ビュー、実行中のシステムの動作を示す動的ビュー、および実行のためにシステムがハードウェア上にどのように配置されるかを示す配置ビューなど、複数のビューを使用して記述されます。Kruchten の 4+1 ビューは、ソフトウェアアーキテクチャのドキュメント作成によく使用されるビューの説明を提案しています。[ 38 ] Documenting Software Architectures: Views and Beyond に は、ビューの説明内で使用できる表記法の種類の説明があります。[ 1 ] ドキュメント作成活動の例としては、仕様書の作成、システム設計モデルの記録、設計根拠のドキュメント作成、ビューポイントの開発、ビューのドキュメント作成などがあります。
ソフトウェアアーキテクチャ設計戦略 ソフトウェアアーキテクチャは本質的に不確実性を扱い、アーキテクチャコンポーネントのサイズは、システムの結果にプラスにもマイナスにも大きな影響を与える可能性があります。ニール・フォードとマーク・リチャーズは、コンポーネントの特定と適切なサイズ決定という課題に対処するための反復的なアプローチを提案しています。この方法は、チームがシステムの動作と要件についてより繊細な理解を深めるにつれて、継続的な改善を重視します。[ 4 ]
このアプローチは通常、いくつかの段階からなるサイクルを伴います。[ 4 ]
高レベルのパーティショニング戦略が策定され、多くの場合、技術的またはドメインベースに分類されます。最小単位の展開可能な意味のある単位(「クオンタ」と呼ばれる)に関するガイドラインが定義されます。これらの基本的な決定は早期に行われますが、必要に応じてサイクル後半で再検討される可能性があります。 初期構成要素は、確立された戦略に基づいて特定される。 要件は、特定されたコンポーネントに割り当てられます。 各構成要素の役割と責任を分析し、明確性を確保し、重複を最小限に抑えます。 拡張性、耐障害性、保守性といったアーキテクチャ特性が評価される。 コンポーネントは、開発チームからのフィードバックに基づいて再構成される場合があります。 このサイクルは一般的な枠組みとして機能し、さまざまな分野に適用できる。
ソフトウェアアーキテクチャのトピック
ソフトウェアアーキテクチャの劣化 ソフトウェアアーキテクチャの劣化とは、ソフトウェアシステムの意図されたアーキテクチャと実装されたアーキテクチャとの間に、時間の経過とともに徐々に生じるギャップを指します。[ 40 ] ソフトウェアアーキテクチャの劣化という現象は、1992年にペリーとウルフがソフトウェアアーキテクチャの定義とともに初めて明らかにしました。[ 2 ]
ソフトウェアアーキテクチャの劣化は、ソフトウェア開発ライフサイクルの各段階で発生する可能性があり、開発速度と保守コストにさまざまな影響を及ぼします。ソフトウェアアーキテクチャの劣化は、アーキテクチャ違反 、技術的負債の蓄積 、知識の蒸発 など、さまざまな理由で発生します。[ 41 ] アーキテクチャ劣化の有名な事例は、Mozilla Web ブラウザの失敗です。[ 42 ] Mozilla は Netscape が作成したアプリケーションで、複雑なコードベースを持ち、継続的な変更により保守が困難になりました。初期の設計の不備とアーキテクチャ劣化の進行により、Netscape は Mozilla Web ブラウザの再開発に 2 年間を費やし、高額な修復やプロジェクトの遅延を防ぐための積極的なアーキテクチャ管理の重要性を示しました。
アーキテクチャの劣化は、ソフトウェアのパフォーマンスを低下させ、進化コストを大幅に増加させ、ソフトウェアの品質を低下させる可能性があります。アーキテクチャの劣化を検出するために、さまざまなアプローチとツールが提案されています。これらのアプローチは、主に一貫性ベース、進化ベース、欠陥ベース、および決定ベースのアプローチの 4 つのカテゴリに分類されます。[ 40 ] 例えば、自動化されたアーキテクチャ適合性チェック、静的コード分析ツール、およびリファクタリング技術は、劣化を早期に特定して軽減するのに役立ちます。
さらに、アーキテクチャの劣化に対処するために使用される対策には、予防的対策と是正的対策の 2 つの主要なタイプがあります。[ 40 ] 予防的対策には、アーキテクチャ ルールの強制、定期的なコード レビュー、自動テストが含まれますが、是正的対策には、リファクタリング、再設計、ドキュメントの更新が含まれます。
ソフトウェアアーキテクチャの復旧 ソフトウェアアーキテクチャの復元(または再構築、リバースエンジニアリング )には、実装やドキュメントなどの入手可能な情報からソフトウェアシステムのアーキテクチャを明らかにするための方法、技術、プロセスが含まれます。アーキテクチャの復元は、陳腐化または古くなったドキュメントや アーキテクチャの劣化 (想定されたアーキテクチャから逸脱した実装および保守の決定)に直面した際に、情報に基づいた意思決定を行うために必要となることがよくあります。[ 43 ] 静的プログラム分析 としてソフトウェアアーキテクチャを復元する手法が存在します。これは、ソフトウェアインテリジェンスの 実践で扱われる主題の一部です。
要求工学 要求工学 とソフトウェアアーキテクチャは、補完的なアプローチと見なすことができます。ソフトウェアアーキテクチャが「解決策の領域 」または「方法」を対象とするのに対し、要求工学は「問題の領域 」または「内容」に取り組みます。[ 45 ] 要求工学には、要求 の引き出し 、交渉 、仕様化 、検証 、文書化 、および管理が 含まれます。要求工学とソフトウェアアーキテクチャはどちらも、利害関係者の 懸念、ニーズ、および希望を中心に展開します。
要求工学とソフトウェアアーキテクチャの間にはかなりの重複があり、たとえば、5 つの産業用ソフトウェアアーキテクチャ手法に関する研究では、「入力(目標、制約など)は通常定義が曖昧で、アーキテクチャが出現し始めると初めて発見またはよりよく理解される」こと、 また「ほとんどのアーキテクチャ上の懸念はシステムの要求として表現されるが、義務付けられた設計上の決定も含まれる可能性がある」と結論付けていることからも明らかです 。[ 29 ] 要するに、要求された動作はソリューションアーキテクチャに影響を与え、それが今度は新しい要求を導入する可能性があります。[ 46 ] ツインピークスモデル[ 47 ] などのアプローチは、要求とアーキテクチャの間の相乗的な 関係を活用することを目的としています。
その他の「建築」の種類コンピュータアーキテクチャ コンピュータアーキテクチャは、 CPU (プロセッサ)、バス 、メモリ などのハードウェアコンポーネントの連携という観点から、コンピュータシステムの内部構造を対象としています。サーバーレスアーキテクチャ サーバーレスアーキテクチャは、サーバーが不要であると誤解されがちなクラウドコンピューティングのパラダイムです。これは基本的に、サーバー管理の責任を開発者からクラウドサービスプロバイダーに移管するものです。これにより、企業はバックエンドコードをクラウドインフラストラクチャ上で実行でき、物理サーバーの管理が不要になります。サーバーレスアーキテクチャのイベント駆動型アプローチは、オンデマンドで実行されるタスク固有の小さな関数に依存しています。これらの関数はFunction as a Service(FaaS)として知られており、従量課金モデルとアプリケーションの需要に基づく動的なリソーススケーリングによりコスト効率を提供します。[ 48 ] システムアーキテクチャ システムアーキテクチャ という用語は、もともとハードウェアとソフトウェアの 両方から構成されるシステム のアーキテクチャを指すために用いられてきました。システムアーキテクチャが扱う主な課題は、ソフトウェアとハードウェアを統合し、完全かつ正しく動作するデバイスを構築することです。しかし、より広義の一般的な意味では、この用語は技術的、社会技術的 、あるいは社会的な性質を持つあらゆる複雑なシステムのアーキテクチャにも適用されます。エンタープライズアーキテクチャ エンタープライズアーキテクチャ の目標は、「ビジネスビジョンと戦略を効果的なエンタープライズアーキテクチャに変換すること」です。TOGAFやザックマンフレームワーク などのエンタープライズアーキテクチャフレームワークは 、通常、異なるエンタープライズアーキテクチャレイヤーを区別します。用語はフレームワークによって異なりますが、多くの場合、少なくともビジネス レイヤー 、アプリケーション (または情報 )レイヤー 、およびテクノロジー レイヤーの 区別 が含まれています。エンタープライズアーキテクチャは、これらのレイヤー間の整合性などについて、通常はトップダウンのアプローチで取り組みます。
参考文献 1 2 3 Clements, Paul; Felix Bachmann; Len Bass ; David Garlan; James Ivers; Reed Little; Paulo Merson; Robert Nord; Judith Stafford (2010). Documenting Software Architectures: Views and Beyond, Second Edition . Boston: Addison-Wesley. ISBN 978-0-321-55268-6 。 1 2 3 4 Perry, DE; Wolf, AL (1992). "ソフトウェアアーキテクチャ研究の基礎" (PDF) . ACM SIGSOFT Software Engineering Notes . 17 (4): 40. CiteSeerX 10.1.1.40.5174 . doi : 10.1145/141874.141884 . S2CID 628695 . ↑ Head First Software Architecture . O'Reilly Media. 2024. ISBN 978-1-0981-3435-8 。1 2 3 4 5 6 7 8 9 10 11 ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ 。O'Reilly Media。2020年 。ISBN 978-1-4920-4345-4 。1 2 3 4 5 6 7 8 9 10 Bass, Len; Paul Clements; Rick Kazman (2012). Software Architecture in Practice, Third Edition . Boston: Addison-Wesley. ISBN 978-0-321-81573-6 。↑ SEI (2006). 「ソフトウェアアーキテクチャをどのように定義しますか?」 . 2012年9月12日 取得 。 ↑ Garlan & Shaw (1994). "ソフトウェアアーキテクチャ入門" (PDF) . 2012年9月13日 取得 。 1 2 Fowler, Martin (2003). "デザイン – 建築家は必要か?". IEEE Software . 20 (5): 11– 44. Bibcode : 2003ISoft..20e..11F . doi : 10.1109/MS.2003.1231144 . S2CID 356506 . ↑ ISO/IEC/IEEE 42010: 「アーキテクチャ」の定義。Iso-architecture.org。2013年7月21日取得。 1 2 Jansen, A.; Bosch, J. (2005). "ソフトウェアアーキテクチャ:アーキテクチャ設計上の決定事項の集合". 第5回IEEE/IFIPソフトウェアアーキテクチャワークショップ(WICSA'05) . p. 109. CiteSeerX 10.1.1.60.8680 . doi : 10.1109/WICSA.2005.61 . ISBN 978-0-7695-2548-8 . S2CID 13492610 . ↑ アリ・ババール、ムハンマド。ディンソイル、トルゲイル;ラゴ、パトリシア。ヴァン・ブリート、ハンス(2009)。 ソフトウェア アーキテクチャのナレッジ マネジメント 。ドルドレヒト ハイデルベルク ロンドン ニューヨーク: スプリンガー。 ISBN 978-3-642-02373-6 。1 2 3 George Fairbanks (2010). Just Enough Software Architecture . Marshall & Brainerd. 1 2 ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ 。O'Reilly Media。2020年 。ISBN 978-1-4920-4345-4 。1 2 ラーマン、クレイグ (2005). デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素 . ピアソン・ドイツ社. ISBN 978-0-201-63361-0 。1 2 エンタープライズアプリケーションアーキテクチャの パターン 。ISBN 978-0-321-12742-6 。1 2 ISO/IEC/IEEE (2011). "ISO/IEC/IEEE 42010:2011 システムおよびソフトウェアエンジニアリング - アーキテクチャ記述" . 2012年9月12日 取得 。 ↑ ミュラー、ゲリット(2007年8月20日)。 「参照アーキテクチャ入門」 (PDF) 。 ガウディサイト 。 2011年12月19日のオリジナルから アーカイブ (PDF) 。 2015年 11月13日 取得 。 ↑ Angelov, S.; Grefen, P.; Greefhorst, D. (2009). "ソフトウェア参照アーキテクチャの分類:その成功と有効性の分析". 2009 Joint Working IEEE/IFIP Conference on Software Architecture & European Conference on Software Architecture . IEEE. pp. 141–150 . doi : 10.1109/WICSA.2009.5290800 . ISBN 978-1-4244-4984-2 。↑ ブルックス、フレデリック・P・ジュニア (1975). 『人月の神話 ― ソフトウェア工学に関するエッセイ 』アディソン・ウェスリー 。ISBN 978-0-201-00650-6 。↑ コンウェイ、メルビン。 「コンウェイの法則」 。 メル・コンウェイのホームページ 。 2019年9月29日のオリジナルから アーカイブ済み。 2019年9月29日 取得 。 1 2 Obbink, H.; Kruchten, P.; Kozaczynski, W.; Postema, H.; Ran, A.; Dominick, L.; Kazman, R.; Hilliard, R.; Tracz, W.; Kahane, E. (2002年2月6日). "ソフトウェアアーキテクチャレビューおよび評価(SARA)レポート" (PDF) . 2015年 11月1日 取得 。 ↑ 「ATAM: アーキテクチャ評価方法」 (PDF) . apps.dtic.mil . 2025年2月2日にオリジナルから アーカイブ済み (PDF) . 2025年12月20日 取得 . ↑ Poort, Eltjo; van Vliet, Hans (2012年9月). "RCDA: リスクとコスト管理の規律としてのアーキテクチャ設計" . Journal of Systems and Software . 85 (9): 1995–2013 . doi : 10.1016/j.jss.2012.03.071 . ↑ P. Naur、B. Randell 編 (1969)。 「ソフトウェアエンジニアリング:NATO科学委員会主催の会議報告、ドイツ、ガルミッシュ、1968年10月7日~11日」 (PDF) 。ブリュッセル:NATO、科学問題部。 2003年6月7日のオリジナルから アーカイブ (PDF) 。 2012年11月16日 取得 。 ↑ P. Kruchten; H. Obbink; J. Stafford (2006). "ソフトウェアアーキテクチャの過去、現在、未来". IEEE Software . 23 (2): 22. Bibcode : 2006ISoft..23b..22K . doi : 10.1109/MS.2006.59 . S2CID 2082927 . ↑ ウォータールー大学 (2006)。 「コンピュータ科学の非常に簡潔な歴史」 。 2006年9月23日 取得 。 ↑ 「ソフトウェアアーキテクチャに関する特集号の紹介」。IEEE.org 。 2006年 。doi : 10.1109/TSE.1995.10003 。 ↑ Garlan & Shaw (1994). "ソフトウェアアーキテクチャ入門" (PDF) . 2006年9月25日 取得 。 1 2 3 Christine Hofmeister; Philippe Kruchten; Robert L. Nord; Henk Obbink; Alexander Ran; Pierre America (2007). "5 つの産業的アプローチから派生したソフトウェアアーキテクチャ設計の一般モデル". Journal of Systems and Software . 80 (1): 106– 126. doi : 10.1016/j.jss.2006.05.024 . 1 2 ISO/IEC (2011). "ISO/IEC 25010:2011 システムおよびソフトウェアエンジニアリング – システムおよびソフトウェアの品質要求事項および評価 (SQuaRE) – システムおよびソフトウェアの品質モデル" . 2012年10月8日 取得 。 ↑ Osterwalder and Pigneur (2004). "An Ontology for e-Business Models" (PDF) . Value Creation from E-Business Models . pp. 65–97 . CiteSeerX 10.1.1.9.6922 . doi : 10.1016/B978-075066140-9/50006-0 . ISBN 978-0-7506-6140-9 S2CID 14177438。 2018年11月17日に オリジナル(PDF) からアーカイブされました。 ↑ Chen, Lianping; Ali Babar, Muhammad; Nuseibeh, Bashar (2013). "Characterizing Architecturally Significant Requirements". IEEE Software . 30 (2): 38–45 . Bibcode : 2013ISoft..30b..38C . doi : 10.1109/MS.2012.174 . hdl : 10344/3061 . S2CID 17399565 . ↑ Woods, E. (2012). "TARAを用いた工業建築評価". Journal of Systems and Software . 85 (9): 2034–2047 . doi : 10.1016/j.jss.2012.04.055 . S2CID 179244 . ↑ Maranzano, JF; Rozsypal, SA; Zimmerman, GH; Warnken, GW; Wirth, PE; Weiss, DM (2005). "アーキテクチャレビュー: 実践と経験". IEEE Software . 22 (2): 34. Bibcode : 2005ISoft..22b..34M . doi : 10.1109/MS.2005.28 . S2CID 11697335 . ↑ Kruchten, P. (2008). "ソフトウェアアーキテクトは実際には何をしているのか?". Journal of Systems and Software . 81 (12): 2413– 2416. doi : 10.1016/j.jss.2008.08.025 . ↑ Babar, MA; Dingsøyr, T.; Lago, P.; Vliet, H. van (2009). Software Architecture Knowledge Management: Theory and Practice (eds.), First Edition . Springer. ISBN 978-3-642-02373-6 。↑ Tang, A.; Han, J.; Vasa, R. (2009). "ソフトウェアアーキテクチャ設計推論:方法論サポートの改善事例". IEEE Software . 26 (2): 43. Bibcode : 2009ISoft..26b..43T . doi : 10.1109/MS.2009.46 . hdl : 1959.3/51601 . S2CID 12230032 . ↑ Kruchten, Philippe (1995). "Architectural Blueprints – The '4+1' View Model of Software Architecture" (PDF) . IEEE Software . 12 (6): 42– 50. arXiv : 2006.04975 . doi : 10.1109/52.469759 . S2CID 219558624 . ↑ ベーム、バリー;ターナー、リチャード(2004)。 敏捷性と規律のバランス 。アディソン・ウェスリー 。ISBN 978-0-321-18612-6 。1 2 3 Li, Ruiyin; Liang, Peng; Soliman, Mohamed; Avgeriou, Paris (2022). "ソフトウェアアーキテクチャの侵食を理解する: 体系的なマッピング研究" . Journal of Software: Evolution and Process . 34 (3) e2423. arXiv : 2112.10934 . doi : 10.1002/smr.2423 . ↑ Li, Ruiyin; Liang, Peng; Soliman, Mohamed; Avgeriou, Paris (2021). "Understanding architecture erosion: The practitioners' perceptive". The 29th IEEE/ACM International Conference on Program Comprehension (ICPC) . pp. 311–322 . doi : 10.1109/icpc52881.2021.00037 . ISBN 978-1-6654-1403-6 。↑ van Gurp, J. および Bosch, J.: 2002、「設計の劣化:問題と原因」、Journal of Systems and Software 61(2)、105–119。 ↑ Lungu, M.「ソフトウェアアーキテクチャの復旧」、ルガーノ大学、2008年。http ://www.slideshare.net/mircea.lungu/software-architecture-recovery-in-five-questions-presentation 1 2 Amnon H. Eden; Rick Kazman (2003). "Architecture Design Implementation" (PDF) . 2007年9月28日に オリジナル (PDF) からアーカイブされました。 ↑ C. Shekaran; D. Garlan; M. Jackson; NR Mead; C. Potts; HB Reubenstein (1994). "要求工学におけるソフトウェアアーキテクチャの役割". IEEE国際要求工学会議議事録 . pp. 239–245 . doi : 10.1109/ICRE.1994.292379 . ISBN 978-0-8186-5480-0 . S2CID 3129363 . ↑ レムコ・C・デ・ブール、 ハンス・ファン・フリート (2009)。 「要件とアーキテクチャの類似性について」。 システムとソフトウェアのジャーナル 。 82 ( 3 ) : 544–550。CiteSeerX 10.1.1.415.6023 。 土井 : 10.1016/j.jss.2008.11.185 。 ↑ Bashar Nuseibeh (2001). "要件とアーキテクチャの統合" (PDF) . Computer . 34 (3): 115– 119. doi : 10.1109/2.910904 . 2012年9月7日にオリジナルから アーカイブされた (PDF) 。 ↑ 「サーバーレスアーキテクチャの使い方」 。DashDevs 。 2023年8月28日 取得 。
さらに読む リチャーズ、 マーク(2020)。ソフトウェアアーキテクチャの基礎:エンジニアリングアプローチ 。オライリーメディア 。ISBN 978-1-4920-4345-4 。Len, Bass (2012).ソフトウェアアーキテクチャの実践 (第3 版). Addison-Wesley Professional . ISBN 978-0-321-81573-6 。 本書は、当該分野の基本概念を網羅的に解説しています。テーマは、システムの品質特性を実現することに重点を置いています。クレメンツ、ポール(2010)。ソフトウェアアーキテクチャのドキュメント化:ビューとその先 (第2 版)。アディソン・ウェスリー・ プロフェッショナル 。ISBN 978-0-321-55268-6 。 本書では、ソフトウェアアーキテクチャとは何かを説明し、UMLなどの表記法を用いて複数の視点からアーキテクチャを文書化する方法を示します。また、アーキテクチャビューを動作、ソフトウェアインターフェース、および設計根拠に関するドキュメントで補完する方法についても解説します。本書には、ソフトウェアアーキテクチャのドキュメント例を掲載したWikiが付属しています。Bell, Michael (2008). Bell, Michael (編).サービス指向モデリング:サービス分析、設計、およびアーキテクチャ . Wiley. doi : 10.1002/9781119198864 . ISBN 978-0-470-25570-4 。 Shan, Tony; Hua, Winnie (2006年10月)「ソリューションアーキテクチャメカニズム」2006年第10回IEEE国際エンタープライズ分散オブジェクトコンピューティング会議(EDOC'06) pp. 23–32 . doi : 10.1109/EDOC.2006.54 . ISBN 978-0-7695-2558-7 . S2CID 8361936 . Garzás, Javier; Piattini, Mario (2005). "マイクロアーキテクチャ設計知識のためのオントロジー". IEEE Software . 22 (2): 28–33 . Bibcode : 2005ISoft..22b..28G . doi : 10.1109/MS.2005.26 . S2CID 17639072 . ファウラー、マーティン(2003年9月)。「建築 家は誰に必要なのか?」 (PDF ) 。IEEE Software。20 ( 5):11。Bibcode :2003ISoft..20e..11F。doi : 10.1109/ MS.2003.1231144。S2CID 356506 。 カズマン、リック(2003年5月)。「アーキテクチャ、設計、実装」(PDF) 。ソフトウェアエンジニアリング研究所 。2015年9月21日にオリジナルからアーカイブ(PDF) 。 ―建築設計と詳細設計の区別について。Kruchten, Philippe (1995). "Architectural Blueprints – The '4+1' View Model of Software Architecture" (PDF) . IEEE Software . 12 (6): 42– 50. arXiv : 2006.04975 . doi : 10.1109/52.469759 . S2CID 219558624 . 2006年6月13日にオリジナルからアーカイブされた(PDF) 。 Pautasso, Cesare (2020).ソフトウェアアーキテクチャ:ビジュアル講義ノート . LeanPub. p. 689. Magee, J.、Dulay, N.、Eisenbach, S.、Kramer, J. (1995年9月)。分散ソフトウェアアーキテクチャの仕様記述。欧州ソフトウェアエンジニアリング会議(pp. 137-153)。ベルリン、ハイデルベルク:Springer Berlin Heidelberg。
外部リンク IBM DeveloperWorksに関する説明 カーネギーメロン大学 (CMU)ソフトウェアエンジニアリング研究所 (SEI )におけるソフトウェアアーキテクチャ定義集国際ITアーキテクト協会(IASA Global)(旧称:国際ソフトウェアアーキテクト協会(IASA)) SoftwareArchitecturePortal.org – IFIPワーキンググループ2.10(ソフトウェアアーキテクチャ)のウェブサイト SoftwareArchitectures.com は、2023年10月29日にWayback Machine に アーカイブされました。これは、この分野に関する独立した情報リソースです。 ソフトウェアアーキテクチャ、ロイ・フィールディング のRESTに関する博士論文の第1章 優れた建築が悪くなる時 スパイラルアーキテクチャ主導開発–スパイラルモデル に基づくSDLCは 、非効率的なアーキテクチャのリスクを軽減することを目的としています。 ソフトウェアアーキテクチャの実例ケーススタディ