摘要:軟件體系結構目前是軟件界研究的一個熱點,為什么要研究軟件體系結構,軟件體系結構目前的現狀如何,這些都是該文討論的問題。
關鍵詞:軟件體系結構;重用;模式
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)35-2519-02
A Comprehensive Introduction to the Study of Software Architecture
WANG Qiang
(AnHui Technical College of Mechanical and Electrical Engineering, Wuhu 241000, China)
Abstract: Software architecture is the hotspot in software engineering research. This article discusses about the purpose and current situation of software architecture researching.
Key words: software architecture; reuse; mode
1 引言
隨著計算機技術的發展和應用的不斷深入,軟件系統的規模和復雜度日益增加,在軟件設計過程中人們所面臨的問題不僅僅是考慮軟件系統的功能問題,而是面臨要解決更難處理的可修改性,性能,可靠性等非功能性問題。特別是80年代以來,對軟件適應變更的要求越來越高,所以對軟件整體的設計已經超過了算法和數據結構,成為系統開發關注的主要問題。軟件開發最大的風險來自需求變更,但一蹴而就搞定需求不現實,好的體系結構是易改動的基礎。 能否復用很重要,設計復用比代碼復用更有用更難。因此,研究軟件體系結構研究的能提高軟件生產率和簡化維護。提高軟件生產率的關鍵在于軟件相關部分的復用,而簡化維護的關鍵是減少軟件理解的成本和提高軟件的質量,這就是研究軟件體系結構的目的。
2 軟件體系結構的概念
軟件系統的規模在迅速增大的同時,軟件開發方法也經歷了一系列的變革.在此過程中,軟件體系結構也由最初模糊的概念發展到一個漸趨成熟的技術。
1) 1992年Perry 和Wo1f 在他們早期關于軟件體系結構的論文中指出:軟件體系結構是一組具有一定形式的結構化元素或稱為設計元素組成。
2) 1993年Shaw 和Garlan 認為軟件體系結構是軟件設計過程中的一個層次,這一層次超越計算過程中的算法設計和數據結構設計。
3) 1994年Hayes Roth 則認為軟件體系結構是一個抽象的系統規范,主要包括用其行為來描述的功能構件和構件之間的相互連接、接口和關系。
4) 1995年Garlan 和Perry 在IEEE 軟件工程學報上又采用如下的定義:軟件體系結構是一個程序各構件的結構、它們之間的相互關系以及進行設計的原則和隨時間進化的指導方針。
5) 1996年Boehm 和他的學生提出,一個軟件體系結構包括一個軟件和系統構件,互聯及約束的集合。
6) 1997年Ctements 和Kazman在《使用軟件體系結構》一書中給出如下的定義:一個程序或計算機系統的軟件體系結構包括一個或一組軟件構件、軟件構件的外部的可見特性及其相互關系。
3 軟件體系結構的現狀
下面介紹幾種常見的體系結構。
模型-視圖-控制結構是交互式應用程序廣泛使用的一種體系結構。它有效地在存儲和展示數據的對象中區分功能模塊以降低它們之間的連接度,這種體系結構將傳統的輸入、處理和輸入模型轉化為圖形顯示的用戶交互模型,或者換一種說法,是多層次的Web商業應用;MVC體系結構具有三個層面:模型(Model)、視圖(View)和控制(Controller),每個層面有其各自的功能作用。
模型層負責表達和訪問商業數據,執行商業邏輯和操作。也就是說,這一層就是現實生活中功能的軟件模擬;在模型層變化的時候,它將通知視圖層并提供后者訪問自身狀態的能力,同時控制層也可以訪問其功能函數以完成相關的任務。
視圖層負責顯示模型層的內容。它從模型層取得數據并指定這些數據如何被顯示出來。在模型層變化的時候,它將自動更新。另外視圖層也會將用戶的輸入傳送給控制器。控制層負責定義應用程序的行為。它可以分派用戶的請求并選擇恰當的視圖以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執行的操作;在一個圖形界面中,常見的用戶輸入包括點擊按鈕和菜單選擇。在Web應用中,它包括對Web層的HTTP GET和POST的請求;控制層可以基于用戶的交互和模型層的操作結果來選擇下一個可以顯示的視圖,一個應用程序通常會基于一組相關功能設定一個控制層的模塊,甚至一些應用程序會根據不同的用戶類型具有不同的控制層設定,這主要是由于不同用戶的視圖交互和選擇也是不同的。
在模型層、視圖層和控制層之間劃分責任可以減少代碼的重復度,并使應用程序維護起來更簡單。同時由于數據和商務邏輯的分開,在新的數據源加入和數據顯示變化的時候,數據處理也會變得更簡單。
軟件體系結構風格是描述某一特定應用領域中系統組織方式的慣用模式。它反映了領域中眾多系統所共有的結構和語義特性,并指導如何將各個模塊和子系統有效地組織成一個完整的系統。按這種方式理解,軟件體系結構風格定義了用于描述系統的術語表和一組指導構件系統的規則。
對軟件體系結構風格的研究和實踐促進了對設計的復用,一些經過實踐證實的解決方案也可以可靠地用于解決新的問題。體系結構風格的不變部分使不同的系統可以共享同一個實現代碼。只要系統是使用常用的、規范的方法來組織,就可使別的設計者很容易地理解系統的體系結構。例如,如果某人把系統描述為\"客戶/服務器\"模式,則不必給出設計細節,我們立刻就會明白系統是如何組織和工作的。
下面是Garlan和Shaw對通用體系結構風格的分類:
1) 數據流風格:批處理序列;管道/過濾器
2) 調用/返回風格:主程序/子程序;面向對象風格;層次結構
3) 獨立構件風格:進程通訊;事件系統
4) 虛擬機風格:解釋器;基于規則的系統
5) 倉庫風格:數據庫系統;超文本系統;黑板系統
設計模式使人們可以更簡單方便地復用成功地設計和體系架構。將以證實的技術表述成設計模式也會使新系統開發者更容易理解其設計思路。設計模式幫助你做出有利于系統復用的選擇,避免設計損害了系統復用性。通過提供一個顯示類和對象作用關系以及它們之間潛在聯系的說明規范,設計模式甚至能夠提高已有系統的文檔管理和系統維護的有效性。簡而言之,設計模式可以幫助設計者更快更好地完成系統設計。
一個設計模式描述了對于特定設計問題被驗證的解決方案,它綜合了所有開發者對這個問題所在領域的知識和見解;同時也是對于常見問題的可重用方案,它們一般適用于單個問題,但是組織在一起就可以提供整個企業系統的解決方案。J2EE平臺就用到很多設計模式,列舉如下:
1) 前控制器。
2) 控制器
3) 視圖
4) 視圖幫助
5) 會話面
6) 數據訪問對象
7) 值對象或傳輸對象
8) 截取過濾器
隨著軟件體系結構的不斷發展,出現了一種新型的體系結構即SOA。SOA被稱為軟件體系結構的劃時代革命。
SOA是一種結構模型,它可以根據需求通過網絡對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴性。SOA的關鍵是“服務”的概念,W3C將服務定義為:“服務提供者完成一組工作,為服務使用者交付所需的最終結果。最終結果通常會使使用者的狀態發生變化,但也可能使提供者的狀態改變,或者雙方都產生變化”。Service-architecture.com將SOA定義為:“本質上是服務的集合。服務間彼此通信,這種通信可能是簡單的數據傳送,也可能是兩個或更多的服務協調進行某些活動。服務間需要某些方法進行連接。所謂服務就是精確定義、封裝完善、獨立于其他服務所處環境和狀態的函數。” Looselycoupled.com將SOA定義為:“按需連接資源的系統。在SOA中,資源被作為可通過標準方式訪問的獨立服務,提供給網絡中的其他成員。與傳統的系統結構相比,SOA規定了資源間更為靈活的松散耦合關系。” Gartner則將SOA描述為:“客戶端/服務器的軟件設計方法,一項應用由軟件服務和軟件服務使用者組成……SOA與大多數通用的客戶端/服務器模型的不同之處,在于它著重強調軟件組件的松散耦合,并使用獨立的標準接口。” Gartner相信BPM和SOA的結合對所有類型的應用集成都大有助益——“SOA極大的得益于BPM技術和方法論,但是SOA面臨的真正問題是確立正確的企業意識,即:強化戰略化的SOA計劃(針對供應和使用)并鼓勵重用。”雖然不同廠商或個人對SOA有著不同的理解,但是我們仍然可以從上述的定義中看到SOA的幾個關鍵特性:一種粗粒度、松耦合服務結構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。
4 軟件體系結構存在的不足
盡管軟件體系結構研究領域取得了若干成果,但在應用方面,軟件體系結構仍然有很多可以改進的地方。N. Medvovonic認為,目前對軟件體系結構的理解還僅限于直觀、或當作稀奇事、或當作民間傳說;語義豐富但不嚴謹。體系結構似乎沒有解決實際問題。由此可見,若要有效地指導軟件工程實踐、為軟件開發提供一個好的結構及其設計結構的指導原則,軟件體系結構研究還有若干問題需要解決。比如缺乏統一的軟件體系結構的概念,各種軟件體系結構的不易操作性,ADL繁多,缺乏統一的ADL支持等等。
5 前景展望
目前,軟件體系結構領域研究非常活躍。隨著研究的不斷深入,軟件復用的層次越來越高,人們在開發新的系統時不必總是重復別人已經創造的東西,而是可在軟件開發中復用已有成果,這樣可以把注意力投入到軟件新增功能上,提高軟件開發效率。
針對軟件體系結構發展趨勢,Clements預測在未來的5~10年內軟件體系結構研究將圍繞如下5個方向展開:體系結構創建與選擇;體系結構表示;體系結構分析;基于體系結構開發;體系結構演化.而Perry在IFIP 2000 年世界計算機大會主題演講中認為,最為重要的3個研究方向是:體系結構風格、體系結構連接件和動態體系結構。
參考文獻:
[1] 王霞俊.淺談軟件體系結構[J].常州輕工職業技術學院學報,2007(1).
[2] 鄧倫丹,羅丹,汪偉.幾種主要的軟件體系結構風格的分析[J].科技信息,2007(32):102.
[3] 孫昌愛,金茂忠,劉超.軟件體系結構研究綜述[J].軟件學報,2002(13)
[4] 秦建超,杜友福,孟珍偉.淺談軟件體系結構科技信息[J],2007(2)
[5] Michale Kircher.面向模式的軟件體系結構[M].1版.北京:機械工業出版社,2005:5-6.
[6] The Boeing Company-Defense and Space Group.STARS conceptual framework for reuse processes,lockheed martin tactical defense system.STARS Program Technical Report,1994.
[7] Yu,Wei,Yang,Wei-hai,Cai,Xi-yao.Research on software architecture description[J].Computer Research and Development,2000,37(10):1185-1191.