軟件體系結構又被稱為軟件構件結構SCI(Software Component Infrastructure)或軟件架構,是對軟件系統整體結構的刻畫。軟件體系結構是具有一定形式的結構化元素,即構件的集合,包括處理構件、數據構件和連接構件。處理構件負責對數據進行加工,數據構件是被加工的信息,連接構件把體系結構的不同部分組組合連接起來。軟件體系結構是軟件工程繼過程性模型和面向對象模型之后的最新模型。軟件體系結構研究如何應用可復用構件系統快速可靠地對系統進行構造,著重于軟件系統自身的整體結構和構件間的互連與通信。軟件體系結構是軟件在系統級層次上的組成和行為,是設計過程中不可缺少的一個階段,它對復雜軟件的后期設計起到了決定性的作用。
雖然軟件體系結構已經在軟件工程領域中有著廣泛的應用,但迄今為止還沒有一個被大家所公認的定義。許多著名的專家學者都從不同角度和不同側面對軟件體系結構進行了刻畫說明,其中較為典型的定義有以下幾種:
(1)Dewayne Perry和Alex Wolf曾這樣定義:軟件體系結構是具有一定形式的結構化元素,即構件的集合。包括處理構件、數據構件和連接構件。處理構件負責對數據進行加工,數據構件是被加工的信息,連接構件把體系結構的不同部分組組合連接起來。這一定義注重區分處理構件、數據構件和連接構件,這一方法在其他的定義和方法中基本上得到保持。
(2)Mary Shaw和David Garlan認為軟件體系結構是軟件設計過程中的一個層次,這一層次超越計算過程中的算法設計和數據結構設計。體系結構問題包括總體組織和全局控制、通訊協議、同步、數據存取,給設計元素分配特定功能,設計元素的組織,規模和性能,在各設計方案問進行選擇等。軟件體系結構處理算法與數據結構之上關于整體系統結構設計和描述方面的一些問題,如全局組織和全局控制結構、關于通訊、同步與數據存取的協議,設計構件功能定義,物理分布與合成,設計方案的選擇、評估與實現等。
(3)Kruchte指出,軟件體系結構有四個角度,它們從不同方面對系統進行描述:概念角度描述系統的主要構件及它們之間的關系;模塊角度包含功能分解與層次結構;運行角度描述了一個系統的動態結構;代碼角度描述了各種代碼和庫函數在開發環境中的組織。
(4)Hayes Roth則認為軟件體系結構是一個抽象的系統規范,主要包括用其行為來描述的功能構件和構件之問的相互連接、接口和關系。
(5)David Garlan和Dewne Perry于1995年在IEEE軟件工程學報上又采用如下的定義:軟件體系結構是一個程序/系統各構件的結構、它們之間的相互關系以及進行設計的原則和隨時間進化的指導方針。
(6)Barry Boehm和他的學生提出,一個軟件體系結構包括一個軟件和系統構件,互聯及約束的集合:一個系統需求說明的集合:一個基本原理用以說明這一構件,互聯和約束能夠滿足系統需求。
(7)1997年,Bass,Ctements和Kazman在《使用軟件體系結構》一書中給出如下的定義:一個程序或計算機系統的軟件體系結構包括一個或一組軟件構件、軟件構件的外部的可見特性及其相互關系。其中。“軟件外部的可見特性”是指軟件構件提供的服務、性能、特性、錯誤處理、共享資源使用等。
軟件體系結構作為一個軟件系統的高層結構。它的主要特點有:
(1)軟件體系結構是一個高次上的抽象,它并不涉及具體的系統結構,比如
結構模式是C/S還是B/S,不關心具體的實現。
(2)軟件體系結構必須支持系統需求的功能。在設計軟件體系結構的時候,考慮系統的動態行為是必須的。
(3)軟件體系結構必須遵循系統的特征(系統的非功能需求)。包括考慮現有系統的兼容性、安全性和可靠性.同時還要考慮系統以后的擴展性、伸縮性和復用性。這些需求可能發生沖突,因此,在設計體系結構時,必須考慮在多個可選方案中如何達到某種層次上平衡。
(4)達到體系結構這個層次上后,系統實現的細節都被隱藏。
伴隨著軟件規模的擴大和新的商業模式的涌現,必然會出現更多、更大的應用系統。如何設計這些系統的體系結構,使軟件開發達到更快、更好、更便宜,是每個軟件開發人員都必須面對的問題。為了提軟件開發的效率和質量,研究軟件系統的體系構架還是非常必要的。常見的軟件體系結構風格主要有以下五種:
(1)管道和過濾器;
(2)數據抽象和面向對象結構;
(3)基于事件的隱式調用:
(4)分層系統;
(5)倉庫。
B/S結構模式大多采用的是分布式的分層體系結構。