天天看點

軟體架構的定義

軟體架構仍在不斷發展中,還沒有形成一個統一的、公認的定義,這裡僅舉出幾個較權威的定義。

定義 1:軟體或計算機系統的軟體架構是該系統的一個(或多個)結構,而結構由軟體元素、元素的外部可見屬性及它們之間的關系組成。

定義 2:軟體架構為軟體系統提供了一個結構、行為和屬性的進階抽象,由構成系統的元素的描述、這些元素的互相作用、指導元素內建的模式及這些模式的限制組成。

定義 3:軟體架構是指一個系統的基礎組織,它具體展現在:系統的構件,構件之間、構件與環境之間的關系,以及指導其設計和演化的原則上。(IEEE1471- 2000)

前兩個定義都是按“元素—結構—架構”這一抽象層次來描述的,它們的基本意義相同,其中定義 1 較通俗,是以,本章采用這一定義。該定義中的“軟體元素”是指比“構件”更一般的抽象,元素的“外部可見屬性”是指其他元素對該元素所做的假設,如它所提供的服務、性能特征等。

為了更好地了解軟體架構的定義,特作如下說明:

(1)架構是對系統的抽象,它通過描述元素、元素的外部可見屬性及元素之間的關系來反映這種抽象。是以,僅與内部具體實作有關的細節是不屬于架構的,即定義強調元素的“外部可見”屬性。

(2)架構由多個結構組成,結構是從功能角度來描述元素之間的關系的,具體的結構傳達了架構某方面的資訊,但是個别結構一般不能代表大型軟體架構。

(3)任何軟體都存在架構,但不一定有對該架構的具體表述文檔。即架構可以獨立于架構的描述而存在。如文檔已過時,則該文檔不能反映架構。

(4)元素及其行為的集合構成架構的内容。展現系統由哪些元素組成,這些元素各有哪些功能(外部可見),以及這些元素間如何連接配接與互動。即在兩個方面進行抽象:在靜态方面,關注系統的大粒度(宏觀)總體結構(如分層);在動态方面,關注系統内關鍵行為的共同特征。

(5)架構具有“基礎”性:它通常涉及解決各類關鍵的重複問題的通用方案(複用性),以及系統設計中影響深遠(架構敏感)的各項重要決策(一旦貫徹,更改的代價昂貴)。

(6)架構隐含有“決策”,即架構是由架構設計師根據關鍵的功能和非功能性需求(品質屬性及項目相關的限制)進行設計與決策的結果。不同的架構設計師設計出來的架構是不一樣的,為避免架構設計師考慮不周,重大決策應經過評審。特别是架構設計師自身的水準是一種限制,不斷學習和積累經驗才是擺脫這種限制走向自由王國的必經之路。

在設計軟體架構時也必須考慮硬體特性和網絡特性,是以,軟體架構與系統架構二者間的差別其實不大。但是,在大多情況下,架構設計師在軟體方面的選擇性較之硬體方面,其自由度大得多。是以,使用“軟體架構”這一術語,也表明了一個觀點:架構設計師通常将架構的重點放在軟體部分。

将軟體架構置于商業背景中進行觀察,可以發現軟體架構對企業非常重要。

(1)影響架構的因素。軟體系統的項目幹系人(客戶、使用者、項目經理、程式員、測試人員、市場人員等)對軟體系統有不同的要求開發組織(項目組)有不同的人員知識結構、架構設計師的素質與經驗、目前的技術環境等方面都是影響架構的因素。

這些因素通過功能性需求、非功能性需求、限制條件及互相沖突的要求,影響架構設計師的決策,進而影響架構。

(2)架構對上述諸因素具有反作用,例如,影響開發組織的結構。架構描述了系統的大粒度(宏觀)總體結構,是以可以按架構進行分工,将項目組為幾個工作組,進而使開發有序;影響開發組織的目标,即成功的架構為開發組織提供了新的商機,這歸功于:系統的示範性、架構的可複用性及團隊開發經驗的提升,同時,成功的系統将影響客戶對下一個系統的要求等。這種回報機制構成了架構的商業周期。

繼續閱讀