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