本書系統(tǒng)地介紹軟件體系結構的基本原理、方法和實踐,全面反映軟件體系結構研究和應用的最新進展。既討論軟件體系結構的基本理論知識,又介紹軟件體系結構的設計和工業(yè)界應用實例,強調理論與實踐相結合。
全書共10章,第1章簡單介紹軟件體系結構的概念、發(fā)展和應用現狀; 第2章討論軟件體系結構建模,包括視圖模型、核心模型、生命周期模型和抽象模型; 第3章介紹軟件體系結構的風格和特定領域軟件體系結構; 第4章討論軟件體系結構的描述方法,重點介紹軟件體系結構描述語言; 第5章介紹動態(tài)軟件體系結構及其描述方法; 第6章介紹WEB服務體系結構相關知識,以及面向服務的體系結構的基本概念和設計原則; 第7章討論基于體系結構的軟件開發(fā)方法,介紹基于體系結構的軟件過程; 第8章討論軟件體系結構的分析與測試問題,重點介紹軟件體系結構的可靠性風險分析; 第9章討論軟件體系評估方法,重點介紹ATAM和SAAM方法; 第10章介紹軟件產品線的原理和方法、框架技術,重點討論產品線體系結構的設計和演化。
本書可作為計算機軟件專業(yè)高年級本科生、研究生和軟件工程碩士的軟件體系結構教材,作為軟件工程高級培訓、系統(tǒng)分析師和系統(tǒng)架構設計師培訓教材,也可作為軟件開發(fā)人員的參考書。
體系結構一詞在英文里就是“建筑”的意思。把軟件系統(tǒng)比做一座樓房,從整體上講,是因為它有基礎、主體和裝飾,即操作系統(tǒng)之上的基礎設施軟件,實現計算邏輯的主體應用程序,方便使用的用戶界面程序。從細節(jié)上看,每一個程序也是有結構的。早期的結構化程序就是以語句組成模塊,模塊的聚集和嵌套形成層層調用的程序結構,也就是體系結構。結構化程序的程序(表達)結構和(計算的)邏輯結構的一致性及自頂向下的開發(fā)方法自然而然地形成了體系結構。由于結構化程序設計時代程序規(guī)模不大,通過強調結構化程序設計方法學,自頂向下、逐步求精,并注意模塊的耦合性就可以得到相對良好的結構,所以,并未特別深入研究軟件體系結構。
隨著軟件系統(tǒng)規(guī)模越來越大、越來越復雜,整個系統(tǒng)的結構和規(guī)格說明就顯得越來越重要。對于大規(guī)模的復雜軟件系統(tǒng)來說,總體的系統(tǒng)結構設計和規(guī)格說明比起對計算的算法和數據結構的選擇變得明顯重要。在此種背景下,人們認識到了軟件體系結構的重要性,并認為對軟件體系結構的系統(tǒng)進行深入的研究將會成為提高軟件生產率和解決軟件維護問題的新的最有希望的途徑。
對于軟件項目的開發(fā)來說,具有清晰的軟件體系結構是首要的。傳統(tǒng)的軟件開發(fā)過程可以劃分為從概念直到具體實現的若干個階段,包括問題定義、需求分析、軟件設計、軟件實現及軟件測試等。軟件體系結構的建立應在需求分析之后,軟件設計之前。但在傳統(tǒng)的軟件工程方法中,需求和設計之間存在一條很難逾越的鴻溝,從而難以有效地將需求轉換為相應的設計。軟件體系結構就是試圖在軟件需求與軟件設計之間架起一座橋梁,著重解決軟件系統(tǒng)的結構和需求向實現平坦地過渡的問題。
體系結構在軟件開發(fā)中為不同的人員提供了共同交流的語言,體現并嘗試了系統(tǒng)早期的設計決策,并作為系統(tǒng)設計的抽象,為實現框架和構件的共享和重用、基于體系結構的軟件開發(fā)提供了有力的支持。鑒于體系結構的重要性,Perry將軟件體系結構視為軟件開發(fā)中第一類重要的設計對象,Barry Boehm也明確指出: “在沒有設計出體系結構及其規(guī)則時,整個項目不能繼續(xù)下去,而且體系結構應該看作軟件開發(fā)中可交付的中間產品”。
軟件體系結構是根植于軟件工程發(fā)展起來的一門新興學科,目前已經成為軟件工程研究和實踐的主要領域。專門和廣泛的研究軟件體系結構是從20世紀90年代才開始的,1993年到1995年,卡耐基梅隆大學的Mary Shaw與David Garlan,貝爾實驗室的Perry,南加州大學的Barry Boehm,斯坦福大學的David Luckham等人開始將注意力投向軟件體系結構的研究和學科建設。
目前,軟件體系結構的領域研究非;钴S,如南加州大學專門成立了軟件體系結構研究組,曼徹斯特大學專門成立了軟件體系結構研究所。同時,業(yè)界許多著名企業(yè)的研究中心也將軟件體系結構作為重要的研究內容。如由IBM、Nokia和ABB等企業(yè)聯合一些大學研究嵌入式系統(tǒng)的體系結構項目。國內也有不少機構在從事軟件體系結構方面的研究,如北京大學軟件工程研究所一直從事基于體系結構軟件組裝的工業(yè)化生產方法與平臺的研究,北京郵電大學則研究了電信軟件的體系結構,國防科學技術大學推出的CORBA規(guī)范實現平臺為體系結構研究提供了基礎設施所需的中間件技術。許多大學為計算機軟件專業(yè)碩士和軟件工程碩士都開設了軟件體系結構課程。
本書共分10章,第1章簡單介紹軟件體系結構的概念、發(fā)展和應用現狀; 第2章討論軟件體系結構建模,包括視圖模型、核心模型、生命周期模型和抽象模型; 第3章介紹軟件體系結構的風格和特定領域軟件體系結構; 第4章討論軟件體系結構的描述方法,重點介紹軟件體系結構描述語言; 第5章介紹動態(tài)軟件體系結構及其描述方法; 第6章介紹Web服務體系結構相關知識,以及面向服務的體系結構的基本概念和設計原則; 第7章討論基于體系結構的軟件開發(fā)方法,介紹基于體系結構的軟件過程; 第8章討論軟件體系結構的分析與測試問題,重點介紹軟件體系結構的可靠性風險分析; 第9章討論軟件體系評估方法,重點介紹ATAM和SAAM方法; 第10章介紹軟件產品線的原理和方法、框架技術,重點討論產品線體系結構的設計和演化。第4.6、4.7、5、6、7.7節(jié)和第8章由李雄編寫,其他章節(jié)由張友生編寫。
在本書出版之際,我們要特別感謝國內外軟件工程和軟件體系結構專著、教材和許多高水平論文、報告的作者們(恕不一一列舉,名單詳見各章中的主要參考文獻),他們的作品為本書提供了豐富的營養(yǎng),使我們受益匪淺。在本書中引用了他們的部分材料,使本書能夠盡量反映軟件體系結構研究和實踐領域的最新進展。
感謝閱讀本書第一版的讀者,特別要感謝使用本書第一版作為教材的老師,他們?yōu)楸緯男抻喓偷?版的出版提出了寶貴的意見。
感謝希賽網(http://www.csai.cn)為本書的意見反饋提供了空間和程序,感謝清華大學出版社的幫助。
由于作者水平有限,時間緊迫,加上軟件體系結構是一門新興的學科,本身發(fā)展很快,對有些新領域作者尚不熟悉。因此,書中難免有不妥和錯誤之處,我們誠懇地期望各位專家和讀者不吝指教和幫助。對此,我們將深為感激。
2006年9月
第1章軟件體系結構概論
1.1從軟件危機談起
1.1.1軟件危機的表現
1.1.2軟件危機的成因
1.1.3如何克服軟件危機
1.2構件與軟件重用
1.2.1構件模型及實現
1.2.2構件獲取
1.2.3構件管理
1.2.4構件重用
1.2.5軟件重用實例
1.3軟件體系結構的興起和發(fā)展
1.3.1軟件體系結構的定義
1.3.2軟件體系結構的意義
1.3.3軟件體系結構的發(fā)展史
1.4軟件體系結構的應用現狀
主要參考文獻
第2章軟件體系結構建模
2.1軟件體系結構建模概述
2.2“4+1”視圖模型
2.2.1邏輯視圖
2.2.2開發(fā)視圖
2.2.3進程視圖
2.2.4物理視圖
2.2.5場景
2.3軟件體系結構的核心模型
2.4軟件體系結構的生命周期模型
2.5軟件體系結構抽象模型
2.5.1構件
2.5.2連接件
2.5.3軟件體系結構
2.5.4軟件體系結構關系
2.5.5軟件體系結構范式
主要參考文獻
第3章軟件體系結構風格
3.1軟件體系結構風格概述
3.2經典軟件體系結構風格
3.2.1管道和過濾器
3.2.2數據抽象和面向對象組織
3.2.3基于事件的隱式調用
3.2.4分層系統(tǒng)
3.2.5倉庫系統(tǒng)及知識庫
3.2.6C2風格
3.3客戶/服務器風格
3.4三層C/S結構風格
3.4.1三層C/S結構的概念
3.4.2三層C/S結構應用實例
3.4.3三層C/S結構的優(yōu)點
3.5瀏覽器/服務器風格
3.6公共對象請求代理體系結構
3.7正交軟件體系結構
3.7.1正交軟件體系結構的概念
3.7.2正交軟件體系結構的實例
3.7.3正交軟件體系結構的優(yōu)點
3.8基于層次消息總線的體系結構風格
3.8.1構件模型
3.8.2構件接口
3.8.3消息總線
3.8.4構件靜態(tài)結構
3.8.5構件動態(tài)行為
3.8.6運行時刻的系統(tǒng)演化
3.9異構結構風格
3.9.1為什么要使用異構結構
3.9.2異構結構的實例
3.9.3異構組合匹配問題
3.10互聯系統(tǒng)構成的系統(tǒng)及其體系結構
3.10.1互聯系統(tǒng)構成的系統(tǒng)
3.10.2基于SASIS的軟件過程
3.10.3應用范圍
3.11特定領域軟件體系結構
3.11.1DSSA的定義
3.11.2DSSA的基本活動
3.11.3參與DSSA的人員
3.11.4DSSA的建立過程
3.11.5DSSA實例
3.11.6DSSA與體系結構風格的比較
主要參考文獻
第4章軟件體系結構描述
4.1軟件體系結構描述方法
4.2軟件體系結構描述框架標準
4.3體系結構描述語言
4.3.1ADL與其他語言的比較
4.3.2ADL的構成要素
4.4典型的軟件體系結構描述語言
4.4.1UniCon
4.4.2Wright
4.4.3C2
4.4.4Rapide
4.4.5SADL
4.4.6Aesop
4.4.7ACME
4.5軟件體系結構與UML
4.5.1UML簡介
4.5.2UML的主要內容
4.5.3直接使用UML建模
4.5.4使用UML擴展機制
4.6可擴展標記語言
4.6.1XML語言簡介
4.6.2XML相關技術簡介
4.7基于XML的軟件體系結構描述語言
4.7.1XADL 2.0
4.7.2XBA
主要參考文獻
第5章動態(tài)軟件體系結構
5.1動態(tài)軟件體系結構概述
5.2軟件體系結構動態(tài)模型
5.2.1基于構件的動態(tài)系統(tǒng)結構模型
5.2.2πADL動態(tài)體系結構
5.3動態(tài)體系結構的描述
5.3.1動態(tài)體系結構描述語言
5.3.2動態(tài)軟件體系結構的形式化描述
5.4動態(tài)體系結構特征
5.5化學抽象機
主要參考文獻
第6章Web服務體系結構
6.1Web服務概述
6.1.1什么是Web服務
6.1.2Web服務的不同描述
6.1.3Web服務的特點
6.2Web服務體系結構模型
6.3Web服務的核心技術
6.3.1作為Web服務基礎的XML
6.3.2簡單對象訪問協(xié)議
6.3.3Web服務描述語言
6.3.4統(tǒng)一描述、發(fā)現和集成協(xié)議
6.4面向服務的軟件體系結構
6.4.1面向服務體系結構概念
6.4.2面向服務體系結構的設計原則
6.5Web服務的應用實例
主要參考文獻
第7章基于體系結構的軟件開發(fā)
7.1設計模式
7.1.1設計模式概述
7.1.2設計模式的組成
7.1.3模式和軟件體系結構
7.1.4設計模式方法分類
7.2基于體系結構的設計方法
7.2.1有關術語
7.2.2ABSD方法與生命周期
7.2.3ABSD方法的步驟
7.3體系結構的設計與演化
7.3.1設計和演化過程
7.3.2實驗原型階段
7.3.3演化開發(fā)階段
7.4基于體系結構的軟件開發(fā)模型
7.4.1體系結構需求
7.4.2體系結構設計
7.4.3體系結構文檔化
7.4.4體系結構復審
7.4.5體系結構實現
7.4.6體系結構演化
7.5應用開發(fā)實例
7.5.1系統(tǒng)簡介
7.5.2系統(tǒng)設計與實現
7.5.3系統(tǒng)演化
7.6基于體系結構的軟件過程
7.6.1有關概念
7.6.2軟件過程網
7.6.3基本結構的表示
7.6.4基于體系結構的軟件過程Petri網
7.7軟件體系結構演化模型
7.7.1SA靜態(tài)演化模型
7.7.2SA的動態(tài)演化模型
主要參考文獻
第8章軟件體系結構的分析與測試
8.1體系結構的可靠性建模
8.2軟件體系結構的可靠性風險分析
8.2.1軟件體系結構風險分析背景
8.2.2軟件體系結構風險分析方法
8.3基于體系結構描述的軟件測試
8.3.1測試方法
8.3.2實例與實現
主要參考文獻
第9章軟件體系結構評估
9.1體系結構評估概述
9.2軟件體系結構評估的主要方式
9.3ATAM評估方法
9.3.1ATAM評估的步驟
9.3.2ATAM評估的階段
9.4SAAM評估方法
9.4.1SAAM評估的步驟
9.4.2SAAM評估實例
主要參考文獻
第10章軟件產品線體系結構
10.1軟件產品線的出現和發(fā)展
10.1.1軟件體系結構的發(fā)展
10.1.2軟件重用的發(fā)展
10.2軟件產品線概述
10.2.1軟件產品線的基本概念
10.2.2軟件產品線的過程模型
10.2.3軟件產品線的組織結構
10.2.4軟件產品線的建立方式
10.2.5軟件產品線的演化
10.3框架和應用框架技術
10.4軟件產品線基本活動
10.5軟件產品線體系結構的設計
10.5.1產品線體系結構簡介
10.5.2產品線體系結構的標準化和定制
10.6軟件產品線體系結構的演化
10.6.1背景介紹
10.6.2兩代產品的各種發(fā)行版本
10.6.3需求和演化的分類
主要參考文獻