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