軟體架構

軟體架構是有關軟體整體結構與元件的抽象描述，用於指導大型軟體系統各個方面的設計。軟體架構會包括軟體元件、元件之間的關係，元件特性以及元件間關係的特性。軟體架構可以和建築物的架構相比擬。軟體架構是構建計算機軟體，開發系統以及計劃進行的基礎，可以列出開發團隊需要完成的任務。軟體架構是在軟體的基礎架構上進行決策，決定後再做修改的代價很大。軟體架構中的決策包括在軟體設計時的一些特殊結構性選項，例如要控制太空船登陸艇的系統需要快速而且可靠，因此需要選擇適合實時計算的語言，而且為了滿足可靠度的需求，程式需要有數個冗餘的複本，各複本運作在不同的硬體上，以便比對各程式的結果。將軟體架構文件化有助於和之間的溝通，在高層設計時就可以提早進行決策，也可以在各專案之間復用設計元件:29–35。介紹.軟體體系結構是構建計算機軟體實踐的基礎。與建築師設定建築專案的設計原則和目標，作為繪圖員畫圖的基礎一樣，或者系統架構師陳述軟體架構以作為滿足不同客戶需求的實際系統設計方案的基礎。從和目的、主題、材料和結構的聯絡上來說，軟體架構可以和建築物的架構相比擬。一個軟體架構師需要有廣泛的軟體理論知識和相應的經驗來實施和管理軟體產品的高階設計。軟體架構師定義和設計軟體的模組化，模組之間的互動，使用者介面風格，對外介面方法，創新的設計特性，以及高層事物的物件操作、邏輯和流程。軟體架構師與客戶商談概念上的事情，與經理商談廣泛的設計問題，與軟體工程師商談創新的結構特性，與程式設計師商談實現技巧，外觀和風格。軟體架構是一個系統的草圖。軟體架構描述的物件是直接構成系統的抽象元件。各個元件之間的連線則明確和相對細緻地描述元件之間的通訊。在實現階段，這些抽象元件被細化為實際的元件，比如具體某個類或者物件。在面向物件領域中，元件之間的連線通常用介面來實現。範圍.軟體架構的範圍有許多不同的定義：在軟體架構、設計、需求工程之間，沒有具體明顯的分界。這些是「一連串意圖的結合」，從高階的設計意向到低階的設計細節:18。特點.軟體架構有以下這些特點：眾多的關係人：軟體架構需配合許多的關係人，例如業務經理、部門主管、使用者及運營商。每一個關係人都有各自關注的內容。在設計系統中，如何平衡這些關注，並展示他們所關注的訊息，也是一個重點:29–31。因此，軟體架構中就包括了處理眾多的關注及關係人，因此在本質上就是跨領域的。關注點分離：架構師降低複雜度的可行方式，就是將驅動設計的各關注分開。架構檔案會呈現相關者關注的所有內容，會以建構的方式表示，另外也會用各相關者關注的角度來描述軟體的架構。這種分開來的說明稱為架構檢視，例如4+1架構檢視。品質導向：傳統的軟體設計方法的關係更高。相關者的關注可以轉換為有關這些品質屬性上的需求，一般會稱為非功能性需求、額外功能性需求、行為需求或品質屬性需求。重覆的風格：軟體架構和建築類似，在處理一些重覆出現的事務時會發展出標準化的作法。標準化作法有許多不同的名稱，其中也有不同程度的抽象化。常見的術語有架構風格:273–277 、tactic:70–72、及架構模式:203–205。概念完整性：這是佛瑞德·布魯克斯在寫作《人月神話》一書時提及：軟體系統的架構是有關軟體系統該作什麼以及不該作什麼的實體觀點。這些觀點應和軟體的實現分開。架構師的角色是「觀點的看守者」，確認系統中增加的部份是符合此架構，因此可以保有概念完整性:41–50。認知制約：程式設計師馬爾文·康威在1967年論文發表了康威定律，其中提到一個組織開發的軟體，其架構會反映其組織架構。佛瑞德·布魯克斯在寫作《人月神話》一書時，就在書上時提到此例子，命名為「康威定律」。動機.軟體架構是複雜系統「在智力上能理解」的抽象:5–6，此抽象有以下的好處：歷史.早在1960年代，諸如艾茲格·迪傑斯特拉就已經涉及軟體架構這個概念了。自1990年代以來，部分由於在和Microsoft內部的相關活動，軟體架構這個概念開始越來越流行起來。卡內基梅隆大學和加州大學埃爾文分校在這個領域作了很多研究。卡內基·梅隆大學的Mary Shaw和David Garlan於1996年寫了一本叫做"Software Architecture perspective on an emerging discipline"的書，提出了軟體架構中的很多概念，例如軟體元件、聯結器、風格等等。加州大學埃爾文分校的軟體研究院所做的工作則主要集中於架構風格、架構描述語言以及動態架構。架構活動.開發軟體架構的過程會和許多的活動有關。軟體架構師一般會和專案經理一起工作，和專案關係人討論架構重要需求、設計軟體架構、評估設計、和設計師及專案關係人溝通、撰寫架構設計的檔案等在軟體架構設計中，有四個核心活動，分別是架構分析、架構合成、架構評估和架構演進。這些核心的架構活動會反覆的出現，也會出現在軟體開發生命週期的初始階段，及後續階段。架構分析是瞭解計劃的系統要運作的環境，以及決定系統的需求。分析活動的輸入或是需求可以來自專案關係人，也可能會包括以下專案：分析活動的產出是在軟體系統架構上有相關影響的需求，這些稱為是架構重要需求。架構合成或架構設計是指產生架構的過程。針對在架構分析時產生的架構重要需求、設計的目前狀態、及評估活動的結構，可以進行設計，也可以針對設計進行改善:311–326。架構評估。架構演進是指維護已有的軟體架構並且調整，以符合環境及需求變化的過程。軟體架構提供軟體系統的基本架構，其演進及維護必然會影響軟體基礎架構。因此，架構演進一方面關注的是加入新的功能，另一方面也要維護原有的機能以及系統行為。架構支援活動.架構設計需要關鍵性的支援活動。這些支援活動也和核心的軟體架構過程中一起出現。這些支援活動可以協助軟體架構師進行分析、合成、評估及演進。例如軟體架構師需要在分析階段蒐集資訊、進行決策，並且撰寫檔案。這些活動包括知識管理、交流、設計推理、決策以及撰寫檔案。軟體架構主題.軟體架構描述.軟體架構描述包括建模以及實現其架構的原理以及實務，其中會使用架構描述語言、架構檢視及架構框架等。架構描述語言.架構描述語言。ADL的基本構成包括元件、聯結器和配置。架構檢視.軟體架構的敘述常會整理成檢視模型。觀點不但指定框架的關注點，也指定說明的方式、使用的模型、使用的習慣，以及可以和其他檢視維持一致性的規則。以下是一些可能的檢視：目前已開發了許多描述軟體架構的語言，但是大家對於要用何種的符號集和檢視系統，還沒有達成共識。一些人相信UML將建立軟體架構檢視的標準。架構框架.架構框架。框架一般會用一個或多個檢視或ADL來表示。架構框架的例子有：、開放組體系結構框架、Kruchten的4+1架構檢視、等。架構模式.架構模式是針對在特定情境下軟體架構上的常見問題，通用性，可複用的解決方案。架構模式也像設計模式一樣有對應的檔案。架構模式的概念類似傳統的建築，軟體架構風格是有關架構的特定作法，有各自的特徵。有許多知名的架構模式及風格，舉例如下：有些人將架構模式和架構風格視為是同一件事，有時則是將架構風格視為是架構模式的例項，不過將架構模式和架構風格都是架構師常用的語言，在描述系統型別時「提供共用的語言」 或「字彙」。軟體架構和敏捷開發.也有研究者認為軟體架構造成太多的，尤其敏捷開發的提倡者更是如此認為。有許多的方式設計要在早期設計以及敏捷之間作取捨，其中包括敏捷式的，其中強制一個「基礎」階段，只要列出「夠用的」架構基礎即可。《IEEE軟體》曾特別探討敏捷和軟體架構之間的關係。軟體架構腐蝕.軟體架構腐蝕是指軟體系統設計的架構以及實現時實際架構之間的落差。軟體架構腐蝕會出現在實現時的決策沒有完成達到原先設計的架構，或是有一些違反架構原則或是限制的情形。這種設計架構和實際架構之間的落差有時也會以技術負債的方式表示。例如，考慮嚴格抽象化的系統，每一層都只能用往下一層所提供的服務。若程式碼元件無法遵守此一限制，就違反了架構。若此問題沒有修正，此架構違反會讓系統架構變成無法分層的架構，在程式理解性、可維護性和發展性都有不良影響。針對軟體架構腐蝕，有提出有許多的處理方法：「這些方法，包括工具、技術及流程，主要可以分為三大類，設法減小、預防及修復架構腐蝕。在這三大類以下，各方法都可以再細分，反映為瞭解決侵蝕而採取的高階策略。例如流程導向架構一致性、架構演進管理、架構設計強化、架構到實現的連結、包括恢復、發現以及調節的自適應及架構恢復技術。」針對偵測架構違反，有二種主流的技術：反射模型。反射模型技術會比較系統架構師提供的高階模型，和程式碼的實現特定領域的語言。領域特定語言則是專注在標示及檢查架構上的限制條件。軟體架構恢復.軟體架構恢復，又需要進行決策時，就需要進行軟體架構恢復。常見的技巧包括靜態程式分析，軟體架構恢復也是軟體智慧實務中的一部份。相關領域.設計.軟體架構是設計的一部份，不過不是所有的設計都和架構有關。實務上，架構師會劃分出軟體架構的分界。有沒可以符合所有情形的規則或指引，不過仍有許多人設法要將找到分界的固定體系。依照「內涵/區域性性假說」，這也是軟體設計屬於架構性的唯一條件。舉例，主從式架構是架構的程式裡。需求工程.需求工程和軟體架構可以視為是互補的二個方法：軟體架構專注在或是「如何進行」，需求工程專注在或是「要做什麼」。需求工程會展開需求獲取、需求分析、軟體需求說明、、需求可追蹤性及需求管理。需求工程和軟體架構都和專案關係人的關注、需要及期待有關。在需求工程和軟體架構之間有相當大的重疊，有一個針對五個軟體產業架構方法的研究，結論是：「輸入一般定義的不好，要到開始建立架構時才會發現，或是比較深入的瞭解。」以及「大部份的架構關注都以是系統需求來表示，不過其中也包括了強制的設計決策。」。簡單來說，需求的行為會影響解決方案的架構，架構又會產生新的需求。像Twin Peaks model等方式就是要利用需求以及架構之間的協同關係。計算機系統結構是針對電腦系統中的內容結構，是許多硬體元件的元件，例如中央處理器、匯流排及電腦記憶體。系統架構一開始是應用在描述系統的架構。系統架構主要關注的是軟體和硬體的整合，組成完成，可以正確運作的裝置。系統架構也可能是指更廣義而複雜之系統的架構，可能是技術、或是純社會的系統。企業架構是「將企業的理景及策略轉換為高效的企業運作」。企業架構，例如開放組體系結構框架及技術層。企業架構會處理各層之間的同步，是用top-down的方式進行。