本書系統(tǒng)地介紹軟件體系結(jié)構(gòu)的基本原理、方法和實踐,全面反映軟件體系結(jié)構(gòu)研究和應用的最新進展。既討論軟件體系結(jié)構(gòu)的基本理論知識,又介紹軟件體系結(jié)構(gòu)的設(shè)計和工業(yè)界應用實例,強調(diào)理論與實踐相結(jié)合。
全書共10章,第1章簡單介紹軟件體系結(jié)構(gòu)的概念、發(fā)展和應用現(xiàn)狀; 第2章討論軟件體系結(jié)構(gòu)建模,包括視圖模型、核心模型、生命周期模型和抽象模型; 第3章介紹軟件體系結(jié)構(gòu)的風格和特定領(lǐng)域軟件體系結(jié)構(gòu); 第4章討論軟件體系結(jié)構(gòu)的描述方法,重點介紹軟件體系結(jié)構(gòu)描述語言; 第5章介紹動態(tài)軟件體系結(jié)構(gòu)及其描述方法; 第6章介紹WEB服務體系結(jié)構(gòu)相關(guān)知識,以及面向服務的體系結(jié)構(gòu)的基本概念和設(shè)計原則; 第7章討論基于體系結(jié)構(gòu)的軟件開發(fā)方法,介紹基于體系結(jié)構(gòu)的軟件過程; 第8章討論軟件體系結(jié)構(gòu)的分析與測試問題,重點介紹軟件體系結(jié)構(gòu)的可靠性風險分析; 第9章討論軟件體系評估方法,重點介紹ATAM和SAAM方法; 第10章介紹軟件產(chǎn)品線的原理和方法、框架技術(shù),重點討論產(chǎn)品線體系結(jié)構(gòu)的設(shè)計和演化。
本書可作為計算機軟件專業(yè)高年級本科生、研究生和軟件工程碩士的軟件體系結(jié)構(gòu)教材,作為軟件工程高級培訓、系統(tǒng)分析師和系統(tǒng)架構(gòu)設(shè)計師培訓教材,也可作為軟件開發(fā)人員的參考書。
體系結(jié)構(gòu)一詞在英文里就是“建筑”的意思。把軟件系統(tǒng)比做一座樓房,從整體上講,是因為它有基礎(chǔ)、主體和裝飾,即操作系統(tǒng)之上的基礎(chǔ)設(shè)施軟件,實現(xiàn)計算邏輯的主體應用程序,方便使用的用戶界面程序。從細節(jié)上看,每一個程序也是有結(jié)構(gòu)的。早期的結(jié)構(gòu)化程序就是以語句組成模塊,模塊的聚集和嵌套形成層層調(diào)用的程序結(jié)構(gòu),也就是體系結(jié)構(gòu)。結(jié)構(gòu)化程序的程序(表達)結(jié)構(gòu)和(計算的)邏輯結(jié)構(gòu)的一致性及自頂向下的開發(fā)方法自然而然地形成了體系結(jié)構(gòu)。由于結(jié)構(gòu)化程序設(shè)計時代程序規(guī)模不大,通過強調(diào)結(jié)構(gòu)化程序設(shè)計方法學,自頂向下、逐步求精,并注意模塊的耦合性就可以得到相對良好的結(jié)構(gòu),所以,并未特別深入研究軟件體系結(jié)構(gòu)。
隨著軟件系統(tǒng)規(guī)模越來越大、越來越復雜,整個系統(tǒng)的結(jié)構(gòu)和規(guī)格說明就顯得越來越重要。對于大規(guī)模的復雜軟件系統(tǒng)來說,總體的系統(tǒng)結(jié)構(gòu)設(shè)計和規(guī)格說明比起對計算的算法和數(shù)據(jù)結(jié)構(gòu)的選擇變得明顯重要。在此種背景下,人們認識到了軟件體系結(jié)構(gòu)的重要性,并認為對軟件體系結(jié)構(gòu)的系統(tǒng)進行深入的研究將會成為提高軟件生產(chǎn)率和解決軟件維護問題的新的最有希望的途徑。
對于軟件項目的開發(fā)來說,具有清晰的軟件體系結(jié)構(gòu)是首要的。傳統(tǒng)的軟件開發(fā)過程可以劃分為從概念直到具體實現(xiàn)的若干個階段,包括問題定義、需求分析、軟件設(shè)計、軟件實現(xiàn)及軟件測試等。軟件體系結(jié)構(gòu)的建立應在需求分析之后,軟件設(shè)計之前。但在傳統(tǒng)的軟件工程方法中,需求和設(shè)計之間存在一條很難逾越的鴻溝,從而難以有效地將需求轉(zhuǎn)換為相應的設(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)應該看作軟件開發(fā)中可交付的中間產(chǎn)品”。
軟件體系結(jié)構(gòu)是根植于軟件工程發(fā)展起來的一門新興學科,目前已經(jīng)成為軟件工程研究和實踐的主要領(lǐng)域。專門和廣泛的研究軟件體系結(jié)構(gòu)是從20世紀90年代才開始的,1993年到1995年,卡耐基梅隆大學的Mary Shaw與David Garlan,貝爾實驗室的Perry,南加州大學的Barry Boehm,斯坦福大學的David Luckham等人開始將注意力投向軟件體系結(jié)構(gòu)的研究和學科建設(shè)。
目前,軟件體系結(jié)構(gòu)的領(lǐng)域研究非;钴S,如南加州大學專門成立了軟件體系結(jié)構(gòu)研究組,曼徹斯特大學專門成立了軟件體系結(jié)構(gòu)研究所。同時,業(yè)界許多著名企業(yè)的研究中心也將軟件體系結(jié)構(gòu)作為重要的研究內(nèi)容。如由IBM、Nokia和ABB等企業(yè)聯(lián)合一些大學研究嵌入式系統(tǒng)的體系結(jié)構(gòu)項目。國內(nèi)也有不少機構(gòu)在從事軟件體系結(jié)構(gòu)方面的研究,如北京大學軟件工程研究所一直從事基于體系結(jié)構(gòu)軟件組裝的工業(yè)化生產(chǎn)方法與平臺的研究,北京郵電大學則研究了電信軟件的體系結(jié)構(gòu),國防科學技術(shù)大學推出的CORBA規(guī)范實現(xiàn)平臺為體系結(jié)構(gòu)研究提供了基礎(chǔ)設(shè)施所需的中間件技術(shù)。許多大學為計算機軟件專業(yè)碩士和軟件工程碩士都開設(shè)了軟件體系結(jié)構(gòu)課程。
本書共分10章,第1章簡單介紹軟件體系結(jié)構(gòu)的概念、發(fā)展和應用現(xiàn)狀; 第2章討論軟件體系結(jié)構(gòu)建模,包括視圖模型、核心模型、生命周期模型和抽象模型; 第3章介紹軟件體系結(jié)構(gòu)的風格和特定領(lǐng)域軟件體系結(jié)構(gòu); 第4章討論軟件體系結(jié)構(gòu)的描述方法,重點介紹軟件體系結(jié)構(gòu)描述語言; 第5章介紹動態(tài)軟件體系結(jié)構(gòu)及其描述方法; 第6章介紹Web服務體系結(jié)構(gòu)相關(guān)知識,以及面向服務的體系結(jié)構(gòu)的基本概念和設(shè)計原則; 第7章討論基于體系結(jié)構(gòu)的軟件開發(fā)方法,介紹基于體系結(jié)構(gòu)的軟件過程; 第8章討論軟件體系結(jié)構(gòu)的分析與測試問題,重點介紹軟件體系結(jié)構(gòu)的可靠性風險分析; 第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)專著、教材和許多高水平論文、報告的作者們(恕不一一列舉,名單詳見各章中的主要參考文獻),他們的作品為本書提供了豐富的營養(yǎng),使我們受益匪淺。在本書中引用了他們的部分材料,使本書能夠盡量反映軟件體系結(jié)構(gòu)研究和實踐領(lǐng)域的最新進展。
感謝閱讀本書第一版的讀者,特別要感謝使用本書第一版作為教材的老師,他們?yōu)楸緯男抻喓偷?版的出版提出了寶貴的意見。
感謝希賽網(wǎng)(http://www.csai.cn)為本書的意見反饋提供了空間和程序,感謝清華大學出版社的幫助。
由于作者水平有限,時間緊迫,加上軟件體系結(jié)構(gòu)是一門新興的學科,本身發(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)的應用現(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進程視圖
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)范式
主要參考文獻
第3章軟件體系結(jié)構(gòu)風格
3.1軟件體系結(jié)構(gòu)風格概述
3.2經(jīng)典軟件體系結(jié)構(gòu)風格
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風格
3.3客戶/服務器風格
3.4三層C/S結(jié)構(gòu)風格
3.4.1三層C/S結(jié)構(gòu)的概念
3.4.2三層C/S結(jié)構(gòu)應用實例
3.4.3三層C/S結(jié)構(gòu)的優(yōu)點
3.5瀏覽器/服務器風格
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)風格
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)風格
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應用范圍
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)風格的比較
主要參考文獻
第4章軟件體系結(jié)構(gòu)描述
4.1軟件體系結(jié)構(gòu)描述方法
4.2軟件體系結(jié)構(gòu)描述框架標準
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可擴展標記語言
4.6.1XML語言簡介
4.6.2XML相關(guān)技術(shù)簡介
4.7基于XML的軟件體系結(jié)構(gòu)描述語言
4.7.1XADL 2.0
4.7.2XBA
主要參考文獻
第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化學抽象機
主要參考文獻
第6章Web服務體系結(jié)構(gòu)
6.1Web服務概述
6.1.1什么是Web服務
6.1.2Web服務的不同描述
6.1.3Web服務的特點
6.2Web服務體系結(jié)構(gòu)模型
6.3Web服務的核心技術(shù)
6.3.1作為Web服務基礎(chǔ)的XML
6.3.2簡單對象訪問協(xié)議
6.3.3Web服務描述語言
6.3.4統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議
6.4面向服務的軟件體系結(jié)構(gòu)
6.4.1面向服務體系結(jié)構(gòu)概念
6.4.2面向服務體系結(jié)構(gòu)的設(shè)計原則
6.5Web服務的應用實例
主要參考文獻
第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)復審
7.4.5體系結(jié)構(gòu)實現(xiàn)
7.4.6體系結(jié)構(gòu)演化
7.5應用開發(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)演化模型
主要參考文獻
第8章軟件體系結(jié)構(gòu)的分析與測試
8.1體系結(jié)構(gòu)的可靠性建模
8.2軟件體系結(jié)構(gòu)的可靠性風險分析
8.2.1軟件體系結(jié)構(gòu)風險分析背景
8.2.2軟件體系結(jié)構(gòu)風險分析方法
8.3基于體系結(jié)構(gòu)描述的軟件測試
8.3.1測試方法
8.3.2實例與實現(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評估實例
主要參考文獻
第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框架和應用框架技術(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)的標準化和定制
10.6軟件產(chǎn)品線體系結(jié)構(gòu)的演化
10.6.1背景介紹
10.6.2兩代產(chǎn)品的各種發(fā)行版本
10.6.3需求和演化的分類
主要參考文獻