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