摘 要:針對現有軟件體系結構風格定義在客觀性和全面性方面存在的不足,從客觀角度出發,站在軟件工程的高度從多個方面對軟件體系結構風格進行定義;同時通過研究分析軟件體系結構風格的研究現狀,發現并指出其四個重點研究方向及各自存在的問題。
關鍵詞:軟件體系結構風格; 軟件體系結構; 軟件工程; 軟件復用
中圖分類號:TP31 文獻標志碼:A 文章編號:1001-3695(2008)08-2270-04
Current research state and existing problems of software architectural style
MAO Fei-qiao,QI De-yu
(Research Institute of Computer Systems, South China University of Technology, Guangzhou 510640, China)
Abstract:Existing software architectural style definitions have less objectivity and they are not defined roundly. Therefore, this paper tried to define software architectural style concept objectively and roundly. In addition, it found and pointed out four important research directions of software architectural style and their existing problems via analyzing their current research state.
Key words:software architectural style; software architecture; software engineering; software reuse
軟件體系結構風格是軟件工程領域中一個重要的研究問題。總體而言,研究者研究軟件體系結構風格的動因體現在兩個方面:a)研究軟件體系結構風格可指導結構設計師選用合適的軟件體系結構,降低軟件設計失敗的風險;b)一種軟件體系結構風格提供特定領域內一種高層的軟件復用模板——軟件體系結構級的復用,提高軟件開發效率。
1 軟件體系結構風格定義研究
在諸多有關軟件體系結構風格的研究文獻中,比較明確地給出的軟件體系結構風格定義有幾種,不少對軟件體系結構風格的研究中[1~8]提到其定義時,引用的也主要是這幾種。
體系結構風格概念率先由Perry等人[9]在1992年引入:軟件體系結構風格是由從各種相似的、具體詳細的體系結構中抽象出的組成元素及其組成關系表示的,比軟件體系結構受到的限制更少、更不完全。他們在軟件體系風格上關注的主要是軟件系統的組成元素以及元素間的連接關系。
Buschmann等人[10]進一步完善了此定義:軟件體系結構風格根據軟件系統的結構組織定義了軟件系統族;通過構件應用的限制及其與系統結構構建有關的組成和設計規則來表示組成元素和組成元素之間的關系;為一個軟件系統及其怎樣構造該系統表示一種特殊的基本結構;也包括何時使用它所描述的體系結構、它的不變量和特例以及其應用的效果等信息。并且,他們將體系結構風格與體系結構模式兩個概念區別開來,不僅關注構成軟件系統的組成元素及其之間的連接關系,而且關注組成元素使用的約束條件、表示組成元素間關系的角度以及體系結構風格的適用場合和應用效果。
Shaw等人[11]沒有區分體系結構風格和體系結構模式,將兩者視為相同的概念來使用。他們認為,軟件體系結構風格是軟件系統結構層次上的組織風格,它根據結構組織模式定義一個系統族(具體地,就是定義了關于構件和連接器類型的術語以及它們如何組織在一起);某些風格還存在一個或多個語義模型,指明如何根據系統各組成成分的屬性來確定系統的整體屬性。Shaw等人在體系結構風格上強調的是構成軟件系統的組成元素(構件)和連接關系(連接器)的類型、構件和連接器間的組織方式以及系統的屬性。他們采用基于不同連接方式的分類方式首次將熟知的軟件體系結構風格分為數據流系統、調用與返回系統、獨立構件系統、虛擬機和以數據為中心的系統五大類[12]。
Lee等人[13]則將軟件體系結構風格定義為是對構件類型、構件運行時的控制方式與/或構件間數據傳遞的描述。一種體系結構風格可看做是在結構上有關構件類型約束及構件間交互約束的一個約束集合,這些約束可以定義一個系統結構族集來滿足。可見,Lee等人在軟件體系結構風格上不僅關注構件在體系結構中受到的靜態約束,更關注運行時在體系結構中的動態約束。這在之前關于軟件體系結構風格定義中從未提到過。在區別軟件體系結構風格與軟件體系結構時,他們與Perry等人[9]持類似的觀點,均認為軟件體系結構風格與軟件體系結構沒有明確的界限,只是相對于描述比較具體的軟件體系結構而言,軟件體系結構風格更抽象、更概括。
也有一些文獻[14~16]在研究軟件體系結構風格時沒有明確給出定義,但討論了其內涵。例如Aborwd等人[14]把軟件體系結構風格看做是慣用的用框線圖描述軟件體系結構方式中,那些對圖中框和線的解釋。他們從這樣的角度來討論軟件體系結構風格,是因為他們打算用形式化的方法來刻畫軟件體系結構風格,從而使各種軟件體系結構風格能夠得到精確的理解,進而指導結構設計師選擇合適的體系結構風格。
通過對軟件體系結構風格定義的研究發現,有關軟件體系結構風格的研究者并沒有對軟件體系結構風格概念的定義形成統一觀點。具體研究目的與研究角度的不同,使他們在對軟件體系結構風格概念進行定義時強調和描述的內容存在差異。盡管他們在定義時也有共同之處:認為軟件體系結構風格研究的是軟件系統結構層次上的問題;認為軟件體系結構風格是軟件結構設計師設計軟件體系結構時所選用的基本格調。但是軟件體系結構風格概念需要一個客觀而又全面的定義,并且能夠站在一定的高度科學地給出。
本文嘗試從客觀的角度出發,站在軟件工程的高度比較全面地定義軟件體系結構風格概念。軟件體系結構風格是軟件設計師設計具體領域軟件的軟件體系結構時采用的一種結構組織藍本,類似于計算機系統結構中的系列機體系結構概念。軟件體系結構風格一般性地定義了具體領域系列軟件的軟件體系結構基礎和核心組織框架,是軟件體系結構的結構理論,比軟件體系結構更概括、更具一般性,但抽象層次又比軟件體系結構模式低。軟件體系結構風格包括對組成系統結構的主要構件元素的描述和能力、行為的約束,構件元素間組織關系(即連接方式)的描述和構件元素間動態交互的約束;也包括對體系結構所具備的特性的描述和解釋,以及各特性對所創建的系統可能產生的影響的描述;還包括對其自身優缺點的分析,以及對在系統進化和演化過程中體系結構中可變成分和不可變成分的約束。軟件體系結構風格的描述方式應盡量嚴格,從而使其得到精確理解,避免產生歧義。
2 研究現狀及存在的問題
雖然研究者對軟件體系結構風格概念的定義沒有形成共識,但對軟件體系結構風格的研究從未間斷,并且其被重視程度越來越高。近來對軟件體系結構風格的相關研究主要集中在如下幾個方面。
2.1 軟件體系結構風格的描述與刻畫
具有代表性的是文獻[17]用一種“組件代數”方法描述和刻畫協作式體系結構風格。作者把利用事件通知機制的基于事件的風格、多agent間異步通信時使用的角色組風格以及agent間傳遞消息時使用的協調控制風格都看做是協作式體系結構風格,分別用同一種方法即組件代數方法進行描述,從而為這三種相似的風格集成提供基礎。文獻[15]通過改進MDA(model-driven architecture)使之能將軟件體系結構特性封裝于其中,使MDA具備描述體系結構風格特性的能力。Loulou等人[18]圍繞基于事件的風格,提出一種正式的、基于邏輯的、使用Z描述符表達的體系結構描述方法,為將幾種基本的基于事件的體系結構風格集成為復雜的基于事件的體系結構風格提供基礎。文獻[16]借鑒組織學理論中的概念,以一種新的視角,形象地對多agent體系結構風格進行刻畫。文獻[19]則用時序邏輯語言XYZ/E形式化地描述并發處理風格、管理/過濾器風格、基于事件風格和客戶機/服務器四種軟件體系結構風格中的組件和連接方式;為通過組合這幾種風格中的組件和連接方式形成新的軟件體系結構風格提供基礎。
這些有關軟件體系結構風格描述與刻畫的研究,其目的主要體現在三個方面:a)通過對一種軟件體系結構風格進行描述與刻畫,使這種風格的構成元素、結構組織規則約束和適用場合等更清晰,達到指導結構設計師進行選擇的目的;b)通過對近似的基本體系結構風格,從相同的角度、用相同的描述方法對其進行描述,為其集成為復雜的同類體系結構風格提供基礎;c)通過對類似的體系結構風格從不同的角度或相同的角度、用相同的描述方法對其進行描述,為其集成提供基礎。
在這個方面還存在不少問題需要進一步研究:
a)還有一些應用較廣泛的體系結構風格從未用一種正式的描述方法刻畫過,或未被如文獻[17,18]那樣對其相似或近似的風格用一致的方法進行較全面的描述。例如分布式處理軟件體系結構風格(分布式環境下構建應用系統時用到的一種風格)中,只有客戶機/服務器(C/S)這種風格被描述和刻畫過[19],而與其相似的客戶機/服務器/服務器(C/S/S)、瀏覽器/服務器(B/S)、瀏覽器/服務器/服務器(B/S/S)風格卻沒有被描述和刻畫過。再如基于狀態轉換的軟件體系結構風格,不少應用軟件系統在設計時采用的就是這種風格,但這種風格卻從未用一種正式的描述方法刻畫過。另外,新出現的和新提出的軟件體系結構風格[1,5,20,21]基本上都沒有如文獻[17,18]那樣被描述過。
b)沒有一致、嚴格的方法描述不同軟件體系結構風格。現有的對軟件體系結構風格的描述和刻畫在覆蓋范圍上是很有限的,主要是用一致的方法對相似或近似的體系結構風格進行描述,還沒有人提出一種正式的方法可以具備描述刻畫大部分甚至所有軟件體系結構風格的能力,所提出的方法[19]只能描述少數幾種不同的軟件體系結構風格。也許這種理想的、能夠刻畫所有軟件體系結構風格的方法根本不存在,但這個存在性問題現在還沒有相關研究對其進行探討。所以,在軟件體系結構風格描述和刻畫的研究上,還值得去進一步研究的是提出一種新描述方法或改進現有的方法,使之在刻畫各種不同軟件體系結構風格時具有較大的覆蓋范圍,從而使大多數的軟件體系結構風格能用一致的方法進行描述和刻畫。在一致的描述和刻畫方法下,各種軟件體系結構風格才易于比較、對照,易于選擇、集成。
2.2 軟件體系結構風格特性的評估
軟件體系結構風格特性的評估實際上是對某一軟件體系結構風格多個不同實例的綜合性能評價。通過對選用某一軟件體系結構風格創建的多個不同軟件體系結構實例進行性能分析,可評估出這一軟件體系結構風格在滿足軟件系統性能需求上能達到什么程度、存在什么缺陷,從而指導結構設計師選取適合系統性能需求的軟件系統體系結構風格進行軟件系統結構設計和改進。目前這方面的研究不多,主要有文獻[22~25]。文獻[24]通過用系統建模方法對選用分層次的軟件體系結構風格創建的軟體體系結構進行性能評價,這種風格的采用在軟件工程實踐中是很頻繁的。實驗發現,隨著任務量(客戶端數量)的增多,分層次風格的軟件系統的吞吐量先穩步上升后趨于不變,而平均響應時間起初很短后來迅速上升。文獻[22]中,Shehory對多agent體系結構風格中的主要體系結構特性(包括agent自身的體系結構,分等級、平級和包容的多agent組織結構,分對稱、消息接收和連接方式的通信特性,分動態、靜態和離線的系統開放性,ANS(agent naming service)、ALS(agent location service)、安全服務和移動agent服務四個系統服務特性,系統健壯性以及代碼重用性這七個方面)進行定性評價,并通過研究三個不同的多agent體系結構風格實例證實了多agent體系結構風格適合于解決具有特定特征的問題。這些特定特征是指系統內的信息、相關位置和控制均具有高度分布性,系統的各個組成部分是異構而又自治的,整個系統環境是開放而又動態變化的且存在著不確定性。具有這些特征的系統采用多agent體系結構風格來設計系統體系結構風格是恰當的。文獻[25]則補充了Shaw等人[11]對軟件體系結構風格研究的工作,通過從結構組織方式、計算模型特點和設計詞匯表這幾個角度分別研究另外幾種體系結構風格(基于CORBA、基于Web的分布式、領域專家系統和特定商業背景層次)的實例,淺層次討論了這幾種體系結構風格的優缺點。文獻[23]中提到用形式化方法對消息路由器體系結構風格的特性進行分析和評估。這種風格因其具有能確保發送的消息到達目的地、消息到達時的順序與發送時的順序一致以及能確保收到的消息是有效的而不是已作廢的這三個典型優秀特性,適合于創建像郵件服務或新聞發布這樣的系統。
目前,僅發現文獻[26]嘗試用基于評價矩陣的方法定量地對軟件體系結構風格進行評估,還沒有人提出支持定量評估軟件體系結構風格的工具。不過通過量化一些影響軟件體系結構風格特性的因素,使用評估方法或評估工具使軟件體系結構風格特性的評估能達到定量的程度是很有挑戰性的,也是很有意義的。
當前,有關軟件體系結構風格特性評估的研究還是很初步的,存在著不少值得繼續深入研究的問題。
a)除比較新的多agent體系結構風格外,其他體系結構風格(包括常見的、不常見的和新出現的)都還沒有像Sheshory[22]那樣被研究者比較深入全面地對其具有的特性進行定性評估。這些研究工作對軟件結構設計師的設計工作具有直接的指導作用,并且對定量評估軟件體系結構風格研究也具有直接的促進作用。
b)缺少合適的評價方法或評價工具對軟件體系結構風格的特性進行定量評估。雖然這方面的研究工作在當前開展是很困難的,但筆者認為不妨可以嘗試通過改進現有的比較優秀的評價軟件體系結構的一些方法或工具[27, 28],使之能夠支持軟件體系結構風格的定量評估。
2.3 新的軟件體系結構風格的提出
以Shaw 和Garlan為代表的研究者所總結的軟件體系結構風格如管道/過濾器、層次、基于事件、面向對象和C/S等體系結構風格,在以往的軟件工程中常被用到。但隨著軟件開發技術的進步、Internet的應用和發展,為了有效地整合資源和共享資源,出現了網格計算、Web服務計算、基于agent的計算等新的計算方式。這些使得需要解決的問題復雜度越來越高,導致需要創建的應用系統更大、更復雜。在這些新的計算方式下,一些新的軟件體系結構風格正在形成或被提出,主要有Fenkam等人[20]提出的雙重保護軟件體系結構風格(dual protection style,DPS);Lee和Bae[13]將面向方面的軟件開發技術引入到交互式體系結構風格中形成一種新的、具有較強解決復雜系統非功能性需求能力的軟件體系結構風格;Birbilis等人[15]提出的E-Slate體系結構風格;Hong等人[4]提出的一種網絡分布式軟件集成體系結構風格(distributed software integration architectural style,DSIAS),利用其提供的結構組織方式可將分布在網絡中的多個COTS(commercial off-the-shelf)軟件系統集成為一個CBS(COTS based system);Juric等人[1]提出層次的基于構件體系結構風格,利用這種風格來支持多類型數據庫(關系型數據庫、對象型數據庫、XML數據倉庫和MMDB等)間的互操作;張世琨等人[21]提出的基于層消息總線的軟件體系結構風格(Jade bird hierarchical message bus-based style, JB/HMB),利用這種風格支持構建具有分布和并發特征的系統;Myuymki等人[6]通過分析軟件產業界幾種軟件產品線,提出一種產品線軟件體系結構風格(product-line architectural style), 可以利用這種風格來解釋和區分軟件業現有產品線的軟件系統產品的體系結構;Shehory[22]曾定性評估過其特性的多agent體系結構風格。
以上這些新提出的軟件體系結構風格自身所具有的特點,使之能解決一定范圍內的問題,但另外一些問題的解決也需要相應的體系結構風格來支持。例如在網格計算方式下,不少網格計算模型(五層沙漏結構模型、開放網格服務結構模型OGSA和織女星結構模型Vega grid等)被提出,那么應該有不同的軟件體系結構風格分別支持這些計算模型環境中的應用軟件系統的創建,但目前還沒有這樣的軟件體系結構風格被提出。僅文獻[29]針對OGSA提出一種網格計算軟件體系結構(computing-grid software architecture, CGSA)設計方式,但沒有實現。再如,在Web服務計算方式下,有不少Web服務組織方式被提出,而在這些Web服務組織方式環境中創建應用軟件系統也需要有合適的軟件體系結構風格支持。所以在這個研究方向還需要更多的新的軟件體系結構風格被提出。
2.4 不同軟件體系結構風格的集成
越來越大、越來越復雜的應用系統的創建,尤其是將幾個屬于不同體系結構風格的子系統集成為一個完整的復雜大系統,僅靠單獨一種體系結構風格的指導是很難滿足需求的。解決這個問題的一種趨勢是通過將若干種軟件體系結構風格集成,再用來指導系統的創建。在集成過程中要考慮兩個問題,即有選擇的集成和用什么方法集成。其中,有選擇的集成就是指選擇將哪幾種風格集成在一起。在集成方法的研究上,比較正式而又深入討論的目前只有文獻[30]。在這篇文獻中,作者提出一種在體系結構組成層次上利用ADLs(architecture description languages)相互替換的集成方法。這種方法的優勢在于允許屬于不同體系結構風格的體系結構用不同的ADL描述,因為這種集成方法不是在描述語言層次上;但其明顯不足是采用這種方法的前提是先要對待集成的、屬于不同軟件體系結構風格的體系結構用ADL描述出來。對于有選擇的集成這個問題,目前還沒有相關研究文獻。可見,對于不同軟件體系結構風格集成的研究,當前還處于初步階段,尤其是針對有選擇集成的研究還是空白,集成方法的研究也很欠缺。
3 總結
對軟件體系結構風格的研究是很重要的。筆者通過研究具有代表性的軟件體系結構風格定義的描述,發現現有的定義在客觀性和全面性方面存在著不足。為此,本文嘗試站在軟件工程的高度,比較客觀地從多方面對軟件體系結構風格進行定義。同時,通過對軟件體系結構研究現狀進行分析,發現并指出軟件體系結構風格描述與刻畫、軟件體系結構風格特性評估、新軟件體系結構風格的提出和不同軟件體系結構風格集成這四個重點研究方向及各自存在的需要進行深入研究的問題。
參考文獻:
[1]JURIC R, KULJIS J, PAUL R. Software architectural style for interoperable databases[C]//Proc of the 26th International Conference on Information Technology Interfaces. Zagreb: University Computing Centre, 2004:159-166.
[2]MONROE R T, GARLAN D. Style-based reuse for software architectures[C]//Proc of the 4th International Conference on Software Reuse. Washington DC: IEEE Computer Society,1996: 84-93.
[3]GAMBLE R F, STIGER P R, PLANT R T. Rule-based systems formalized within a software architectural style[J]. Knowledge-based Systems, 1999, 12(1-2): 13-26.
[4]HONG Zen-wei, LIN J M, CHEN De-sheng, et al. DSIAS: a software architectural style for distributed software integration systems[C]// Proc of the 25th International Conference ofComputer Software and Applications Conference. Washington DC: IEEE Computer Society, 2001:291-296.
[5]BIRBILIS G, KOUTLIS M, KYRIMIS K, et al.E-Slate: a software architectural style for end-user programming[C]//Proc of the 22nd International Conference on Software Engineering. New York: ACM Press, 2000:684-687.
[6]MYLLYMKI T, KOSKIMIES K, MIKKONEN T. Structuring pro-duct lines: a layered architectural style[C]//Proc of the 8th International Confenence on Object-Oriented Intormation Systems. London: Springer-Verlag, 2002:482-487.
[7]HEISEL M, LEVY N. Using LOTOS patterns to characterize architectural styles[C]//Proc of the 7th International Conference on Theory and Practice of Software Development. London: Springer-Verlag,1997:818-832.
[8]STUURMAN S, VAN KATWIJK J. Evaluation of software architectures for a control system: a case study[C]//Proc of the 2nd International Conference on Coordination Languages and Models. Berlin: Springer, 1997: 157-171.
[9]PERRY D E, WOLF A L. Foundations for the study of software architecture[J]. ACM SIGSOFT Software Engineering Notes, 1992, 17(4):40-52.
[10]BUSCHMANN F, MEUNIER R, ROHNERT H, et al. Pattern-oriented software architecture, volume 1: a system of patterns[M]. Chichester: Wiley, 1996: 229-237.
[11]SHAW M, GARLAN D. Software architecture: perspectives on an emerging[M]. New Jersey: Prentice Hall, 1996: 19-32.
[12]SHAW M, CLEMENTS P. A field guide to boxology: preliminary classification of architectural styles for software systems[C]//Proc of the 21st International Computer Software and Applications Confe-rence. Washington DC: IEEE Computer Society, 1997: 6-13.
[13]LEE J S, BAE D H. An aspect-oriented framework for developing component-based software with the collaboration-based architectural style[J]. Information and Software Technology, 2004, 46(2): 81-97.
[14]ABOWD G, ALLEN R, GARLAN D. Using style to understand descriptions of software architecture[J].Software Engineering Notes, 1993, 18(5):9-20.
[15]MIKKONEN T,PITKNEN R, PUSSINEN M. On the role of architectural style in model driven development[C]//Lecture Notes in Computer Science, vol 3047. 2004: 74-87.
[16]KOLP M, GIORGINI P, MYLOPOULS J. A goal-based organizatio-nal perspective on multi-agent architectures[C]//Lecture Notes in Computer Science, vol 2333. 2002:128-140.
[17]ACHEMANN F, KNEUBUEHL S, NIERSTRASZ O. Scripting coordination styles[C]//Proc of the 4th International Conference on Coordination Languages and Models. London: Springer-Verlag, 2000: 19-35.
[18]LOULOU I, KACEM A H. Compositional specification of event-based software architectural styles[C]//Proc of the IEEE International Conference on Computer Systems and Applications. Washington DC: IEEE Computer Society, 2006:337-344.
[19]焦文品,史忠植. 用XYZ/E形式化體系結構風格[J]. 軟件學報,2000, 11(3): 410-415.
[20]FENKAM P, GALL H, JAZAYERI M, et al. DPS: an architectural style for development of secure software[C]//Lecture Notes in Computer Science, vol2437. 2002: 180-198.
[21]王立福,楊芙清,張世琨. 基于層次消息總線的軟件體系結構風格[J]. 中國科學E輯, 2002, 32(3):393- 400.
[22]SHEHORY O. Software architecture attributes of multi-agent systems[C]//Proc of the 1st International Workshop on Agent-Oriented Software Engineering. 2001: 77-90.
[23]CIANCARINI P, MASCOLO C. Analyzing and refining an architectural style[C]//Lecture Notes in Computer Science, vol 1212. 1997: 347-368.
[24]SHARMA V S, JALOTE P, TRIVEDI K S. Evaluating performance attributes of layered software architecture[C]//Lecture Notes in Computer Science, vol 3489. 2005:66-81.
[25]葉俊民,趙恒,曹瀚,等. 軟件體系結構風格的實例研究[J]. 小型微型計算機系統,2002, 23(10):1158-1160.
[26]李瑩瑩,孫全玲,袁兆山. 基于評價矩陣的軟件體系結構風格選取[J]. 淮北煤炭師范學院學報:自然科學版, 2005, 26(4): 65-67.
[27]劉霞,李明樹,王青,等. 軟件體系結構分析與評價方法評述[J]. 計算機研究與發展, 2005, 42(7):1247-1254.
[28]胡紅雷,毋國慶,梁正平,等. 軟件體系結構評估方法的研究[J]. 計算機應用研究, 2004, 21(6): 11-14.
[29]LI Ming-lu, SUN Xian-he, et al. Research on computing grid software architecture[C]//Lecture Notes in Computer Science, vol 3032. 2004: 817-820.
[30]SNBUL A. Abstract state machines for the composition of architectural styles[C]//Lecture Notes in Computer Science, vol 1755. 2000: 54-61.
[31]HECKEL R, THONE S. Behavior-preserving refinement relations between dynamic software architectures[C]//Lecture Notes in Computer Science, vol 3423. 2005: 1-27.
[32]張友生.軟件體系結構[M].北京: 清華大學出版社, 2003:159-165.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文