《軟件體系結(jié)構(gòu)(第3版)》內(nèi)容簡介:隨著軟件工程的不斷發(fā)展,軟件體系結(jié)構(gòu)逐漸成長起來,成為目前軟件開發(fā)的重要組成部分和研究熱點。軟件體系結(jié)構(gòu)的目標是為軟件開發(fā)者提供統(tǒng)一的、精確的、高度抽象和易于分析的系統(tǒng)信息。《軟件體系結(jié)構(gòu)(第3版)》詳細介紹和分析了軟件體系結(jié)構(gòu)的理論基礎、研究內(nèi)容、當前的發(fā)展狀況和實踐應用。通過《軟件體系結(jié)構(gòu)(第3版)》,讀者可以了解軟件體系結(jié)構(gòu)的研究背景、形式化描述、設計風格、評估方法、開發(fā)工具和柔性軟件體系結(jié)構(gòu)等內(nèi)容。《軟件體系結(jié)構(gòu)(第3版)》采用最近幾年的案例、數(shù)據(jù)、圖示以及其他相關材料以反映軟件體系結(jié)構(gòu)的最新發(fā)展。《軟件體系結(jié)構(gòu)(第3版)》可以作為計算機以及相關專業(yè)的研究生和本科生學習軟件體系結(jié)構(gòu)的教材和參考書,對從事軟件體系結(jié)構(gòu)研究和軟件開發(fā)的科研人員也有一定的理論參考價值和實用價值。
軟件體系結(jié)構(gòu)是軟件工程領域重要的研究方向之一,越來越多的研究人員關注如何構(gòu)建合理可靠的軟件體系結(jié)構(gòu)。目前,構(gòu)建軟件比幾十年前困難得多。以前,軟件工程師們致力于如何操作計算機,并使其正常地工作,正確地解決問題。數(shù)據(jù)的組織和算法的實現(xiàn)是當時軟件設計的核心過程。然而越來越多的底層工作,如內(nèi)存管理、網(wǎng)絡通信等,已經(jīng)被自動化了,或者至少可以用更小的代價來重用。程序員和設計人員通過使用高級編程語言和可以提高生產(chǎn)效率的開發(fā)工具,可以將更多的精力放在問題本身,而不是在機器代碼的手冊中埋頭苦干。然而,一個直接的后果就是來自軍事、企業(yè)等領域的需求帶來的問題更加復雜,并且這個復雜性日甚一日。我們相信軟件體系結(jié)構(gòu)是處理這些復雜性的關鍵。
許多人最近幾年才了解軟件體系結(jié)構(gòu)這個概念。然而事實上,軟件體系結(jié)構(gòu)有著相當長的歷史,早在C++或C語言出現(xiàn)之前,一些計算機科學家已經(jīng)注意到軟件體系結(jié)構(gòu)的概念以及它對軟件開發(fā)的影響。20世紀90年代,軟件體系結(jié)構(gòu)開始蓬勃發(fā)展,許多以軟件體系結(jié)構(gòu)為主題的團體建立起來,相關的研討會和學術(shù)會議也紛紛召開。同時,有關軟件體系結(jié)構(gòu)的文章、書籍和工具的數(shù)目激增。今天,軟件領域中一個負責軟件設計、分析并處理來自不同涉眾的不同關注點和需求關系的職位——“軟件架構(gòu)師”——已經(jīng)被普遍認為是軟件開發(fā)團隊的核心。
但是值得關注的是,大多數(shù)架構(gòu)師并沒有進行這個領域的系統(tǒng)的學習、研究或者培訓。他們中有些人甚至認為軟件體系結(jié)構(gòu)與人工智能或者數(shù)據(jù)挖掘等領域不同,根本就不需要進行科學研究和學術(shù)探討。這種觀點出現(xiàn)的原因是軟件體系結(jié)構(gòu)沒有可以廣泛接受的定義,也沒有理論和實踐方法的事實標準。同時,軟件體系結(jié)構(gòu)的快速發(fā)展和分化,也導致了其過多子領域和分支的出現(xiàn),而這些分化出來的產(chǎn)物既不能很好地普及,相互之間也很難統(tǒng)一。這些都成為學習軟件體系結(jié)構(gòu)的挑戰(zhàn)。本書將介紹軟件體系結(jié)構(gòu)一些經(jīng)典的理論和最新的進展,并試圖讓讀者領悟到軟件體系結(jié)構(gòu)的本質(zhì)。[1][2][1][2]本書的主要作者有覃征教授、陳旭等。覃征教授策劃、確定了本書的內(nèi)容并審核了全部書稿。陳旭博士負責本書的主要編寫和組織工作。葉文文、李經(jīng)緯負責本書中第1~3章的撰寫工作,李志鵬、王斌旭負責本書中第4~6章的撰寫工作,陳旭、徐濤負責本書中第7~9章的撰寫工作。
1. 目標
本書是軟件體系結(jié)構(gòu)領域的入門書籍,將對其基礎理論、子領域、當前的研究動態(tài)和實踐方法進行介紹。通過本書的學習,讀者可以了解軟件體系結(jié)構(gòu)的基本概念,例如,為什么說軟件體系結(jié)構(gòu)是必要的,如何用形式化語言來描述一個系統(tǒng)的軟件體系結(jié)構(gòu),哪些體系結(jié)構(gòu)風格在實踐中得到了廣泛應用和認同,如何在軟件系統(tǒng)的開發(fā)過程中應用軟件體系結(jié)構(gòu)。一些學習案例、數(shù)據(jù)、插圖和其他材料都是最近幾年才被發(fā)布的。這些材料有利于了解軟件體系結(jié)構(gòu)的最新進展。
2. 如何閱讀本書
遵循深入淺出的原則,本書分為兩大部分。
(1) 基礎理論: 第1~5章。
(2) 研究部分: 第6~9章。
每章的簡要介紹如下。
第1章: 緒論。本章是對軟件體系結(jié)構(gòu)進行基本介紹。讀者可以了解軟件體系結(jié)構(gòu)的必要性、發(fā)展歷史和一般性定義。希望本章的介紹可以使讀者對軟件體系結(jié)構(gòu)的整體內(nèi)容有大致的了解,對當前研究的熱點和方向有清晰的認識,本章是進一步了解后面章節(jié)的基礎。此外,一些軟件體系結(jié)構(gòu)的概念和應用隨著當前研究的進展而發(fā)生變化,本章最后一節(jié)將給予說明。
第2章: 軟件體系結(jié)構(gòu)風格和模式。本章是軟件體系結(jié)構(gòu)的重點,對不同的體系結(jié)構(gòu)風格進行了劃分,在每一個具體的類別中都詳細地進行了講解和介紹,為了使讀者對各種風格有比較深入的理解,在介紹理論的基礎上格外注重介紹每種風格的詳細案例。希望讀者在閱讀本章的過程中抓住每種風格的核心問題,把握各種模式的根本要素,把案例視為對理論的實踐與提高。
第3章: 軟件體系結(jié)構(gòu)風格的應用與分析。在分門別類地介紹常見的風格和模式后,本章繼續(xù)提供一些案例。每個案例中集合了多種風格和模式。在學術(shù)上,這些被稱為“異構(gòu)風格構(gòu)建”。事實上,實用的軟件通常都要同時使用多種風格,不管這個軟件多么簡單。本章的目的是將抽象的風格和模式與實際應用結(jié)合起來。
第4章: 軟件體系結(jié)構(gòu)描述。如何描述軟件體系結(jié)構(gòu)是軟件體系結(jié)構(gòu)領域的核心問題。它是表述軟件設計、在涉眾間進行有效溝通以及根據(jù)需求進行軟件行為校驗的基礎。本章將重點放在體系結(jié)構(gòu)的具有數(shù)學基礎的形式化描述上。對于在實踐中廣泛使用的UML,可以參考其他文獻和學習資源。
第5章: 基于軟件體系結(jié)構(gòu)的設計策略。本章介紹了基于形式化的體系結(jié)構(gòu)設計。不同于實踐中常用的開發(fā)過程(如RUP)中的設計,形式化的體系結(jié)構(gòu)設計策略強調(diào)功能空間和結(jié)構(gòu)空間之間的聯(lián)系和演算關系(空間的概念是對現(xiàn)實過程的抽象)。為了更好地理解這一章的內(nèi)容,需要讀者有基本的集合論和自動機理論知識。
第6章: 軟件體系結(jié)構(gòu)集成開發(fā)環(huán)境。本章主要介紹了一種軟件體系結(jié)構(gòu)的集成的開發(fā)環(huán)境,其中詳盡地闡述了該環(huán)境的使用原理、內(nèi)部機制,使用過程中的注意事項以及它是如何輔助人們進行設計、開發(fā)、維護軟件體系結(jié)構(gòu)的,為了方便閱讀使用,本章尤其詳細地介紹了軟件的安裝過程、使用規(guī)范以及使用的其他細節(jié)。通過本章的學習,可以利用軟件來輔助自己設計更為復雜、新穎的軟件體系結(jié)構(gòu)。
第7章: 軟件體系結(jié)構(gòu)評估。在軟件體系結(jié)構(gòu)的初步設計完成之后,任何涉眾都有理由去搞清楚這個設計是好是壞,是否能夠為項目的成功開發(fā)奠定基礎,是否能夠滿足預期的需求而不是因為設計缺陷而失敗,這就是評估的任務。本章將介紹和比較目前被廣泛使用的評估方法。大部分評估方法缺乏形式化基礎,更多的要依靠參與者的經(jīng)驗和能力。因此,本章主要介紹實踐中用到的評估方法和技術(shù)。
第8章: 柔性軟件體系結(jié)構(gòu)。柔性軟件體系結(jié)構(gòu)是當前研究的熱點之一,與傳統(tǒng)軟件相比,柔性軟件體系結(jié)構(gòu)在動態(tài)的環(huán)境中有著極其重要的優(yōu)勢,這也是獨立成章的原因,本章介紹了什么是柔性軟件體系結(jié)構(gòu),為什么使用柔性軟件體系結(jié)構(gòu),怎么具體使用柔性軟件體系結(jié)構(gòu)。介紹的過程中注重理論結(jié)合實際,把復雜的理論用淺顯的例子進行說明和解釋。
第9章: 軟件體系結(jié)構(gòu)展望。本章著重介紹未來軟件體系結(jié)構(gòu)的發(fā)展,如何對其他領域產(chǎn)生影響,希望本章的介紹能夠使有志于研究軟件體系結(jié)構(gòu)的讀者了解軟件體系結(jié)構(gòu)研究的方向和目標,了解目前這一領域中主流的研究熱點和方向。
考慮到每章的相對獨立性,讀者可以選擇感興趣的幾章來閱讀。此外,讀者也能通過參考文獻對一些問題找到更詳細、更深入的描述和解釋。
3. 哪些人該閱讀本書
軟件設計和軟件開發(fā)相關專業(yè)的研究生和本科生能夠從本書中獲得他們想要的知識。同時,其他對軟件體系結(jié)構(gòu)感興趣的人也可以將此書作為入門書籍,有經(jīng)驗的軟件設計從業(yè)人員和項目主管也可以閱讀本書,因為軟件體系結(jié)構(gòu)是他們每天必須接觸的工作內(nèi)容。假設讀者具有下面的簡單經(jīng)驗,但并不是每個章節(jié)都需要。
(1) 使用C++、Java或C#編寫程序。
(2) 軟件設計(即使僅僅是簡單的項目也可)。
(3) 軟件項目管理。
4. 致謝
非常感謝清華大學軟件體系結(jié)構(gòu)小組出色的工作,特別是陳旭博士、李志鵬、葉文文博士。課題組徐濤、王斌旭、李經(jīng)緯也參加了本書的撰寫工作。他們對本書的專注、協(xié)作精神和勤奮是本書撰寫過程中的不竭動力。
最近幾年,我一直在考慮軟件體系結(jié)構(gòu)中的一些問題,并希望能有一個機會把它們寫出來。
在本書編寫過程中,得到了許多人的幫助和支持。感謝刑建寬博士、鄭翔高級工程師、董金春教授/研究員在本書第2版撰寫過程中的出色研究工作,同時也感謝在第1版和第2版撰寫過程中做出過大量工作的王娟高級工程師、曹輝博士,由于第2版書的出版,在社會上產(chǎn)生了廣泛的影響,為本書的出版打下了扎實的基礎,在此深表感謝。
感謝清華大學出版社對本書出版的大力支持,感謝張民和薛陽編輯的辛勤勞動。
覃征
2015年8月
第1章緒論
1.1軟件開發(fā)簡史1
1.1.1編程語言的進化——抽象級別2
1.1.2軟件開發(fā)的進化——關注點3
1.1.3軟件體系結(jié)構(gòu)的起源和發(fā)展6
1.2軟件體系結(jié)構(gòu)簡介8
1.2.1基本術(shù)語9
1.2.2理解IEEE 1471—200011
1.2.3軟件體系結(jié)構(gòu)中的視圖14
1.2.4為什么軟件體系結(jié)構(gòu)是必要的24
1.2.5軟件生命周期中的軟件體系結(jié)構(gòu)定位27
1.2.6云計算與軟件體系結(jié)構(gòu)29
小結(jié)30
第2章軟件體系結(jié)構(gòu)風格和模式32
2.1軟件體系結(jié)構(gòu)風格和模式基礎32
2.2管道過濾器風格35
2.2.1概述35
2.2.2優(yōu)缺點36
2.2.3案例37
2.3面向?qū)ο箫L格41
2.3.1概述41
2.3.2優(yōu)缺點42
2.3.3案例43
2.4事件驅(qū)動風格50
2.4.1概述50[1][2][1][2]2.4.2優(yōu)缺點52
2.4.3案例54
2.5分層風格60
2.5.1概述60
2.5.2優(yōu)缺點61
2.5.3案例62
2.6數(shù)據(jù)共享風格67
2.6.1概述67
2.6.2優(yōu)缺點68
2.6.3案例69
2.7解釋器風格72
2.7.1概述72
2.7.2優(yōu)缺點73
2.7.3案例73
2.8反饋控制環(huán)風格77
2.8.1概述77
2.8.2優(yōu)缺點77
2.8.3案例78
2.9體系結(jié)構(gòu)風格比較78
2.10異構(gòu)風格的集成80
小結(jié)81
第3章軟件體系結(jié)構(gòu)風格的應用與分析83
3.1SMCSP簡介83
3.1.1項目背景83
3.1.2技術(shù)路線85
3.1.3功能設計86
3.2系統(tǒng)實現(xiàn)90
3.2.1模式選擇90
3.2.2交互機制95
3.2.3移動協(xié)同的實現(xiàn)98
3.2.4基于知識庫的設計105
小結(jié)109
第4章軟件體系結(jié)構(gòu)描述110
4.1軟件體系結(jié)構(gòu)建模概述110
4.1.1軟件體系結(jié)構(gòu)建模問題110
4.1.2軟件體系結(jié)構(gòu)描述方法111
4.2基于UML的軟件體系結(jié)構(gòu)描述112
4.2.1UML概述112
4.2.2UML結(jié)構(gòu)分析113
4.2.3UML的軟件體系結(jié)構(gòu)描述118
4.3UML體系結(jié)構(gòu)描述方式案例分析123
4.3.1“4+1”視圖模型123
4.3.2教務管理系統(tǒng)的非形式化描述案例125
4.4基于ADL的軟件體系結(jié)構(gòu)描述132
4.4.1ADL概述134
4.4.2ADL結(jié)構(gòu)分析137
4.4.3CSP——形式化行為描述的語義基礎142
4.5ADL體系結(jié)構(gòu)描述方式案例分析155
4.5.1構(gòu)件與連接器描述156
4.5.2配置的描述160
4.5.3風格描述162
4.6FEAL: 構(gòu)造ADL的基礎平臺165
4.6.1設計意圖165
4.6.2FEAL結(jié)構(gòu)167
4.6.3FEAL映射器168
4.6.4FEAL應用示例168
小結(jié)170
第5章軟件體系結(jié)構(gòu)級別的設計策略172
5.1體系結(jié)構(gòu)設計的重用173
5.2體系結(jié)構(gòu)設計空間與規(guī)則174
5.3SADPBA175
5.3.1總覽175
5.3.2使用設計空間對設計過程進行拆分177
5.3.3SADPBA的追蹤機制178
5.3.4軟件體系結(jié)構(gòu)的生命周期模型179
5.3.5實踐中的SADPBA180
5.4示例: MEECS182
5.4.1MEECS簡介182
5.4.2將SADPBA應用到MEECS184
小結(jié)192
第6章軟件體系結(jié)構(gòu)集成開發(fā)環(huán)境193
6.1軟件體系結(jié)構(gòu)集成開發(fā)環(huán)境的作用193
6.1.1形式化描述方法的比較193
6.1.2體系結(jié)構(gòu)集成開發(fā)環(huán)境的作用193
6.2體系結(jié)構(gòu)IDE原型196
6.2.1用戶界面層197
6.2.2模型層199
6.2.3基礎層201
6.2.4體系結(jié)構(gòu)集成開發(fā)環(huán)境設計策略 201
6.3ArchStudio 5系統(tǒng)202
6.3.1簡介202
6.3.2安裝ArchStudio 5205
6.3.3ArchStudio 5概況206
6.3.4ArchStudio 5的使用211
小結(jié)216
第7章軟件體系結(jié)構(gòu)評估217
7.1軟件體系結(jié)構(gòu)評估概述217
7.1.1質(zhì)量屬性217
7.1.2評估的必要性219
7.1.3評估方法分類220
7.2SAAM軟件構(gòu)架分析方法224
7.2.1SAAM的一般步驟225
7.2.2場景生成226
7.2.3體系結(jié)構(gòu)描述227
7.2.4場景的分類和優(yōu)先級確定227
7.2.5間接場景的單個評估228
7.2.6對場景關聯(lián)的評估229
7.2.7形成總體評估229
7.3ATAM體系結(jié)構(gòu)權(quán)衡分析方法230
7.3.1最初的ATAM231
7.3.2改進版ATAM232
7.3.3ATAM的一般過程234
7.3.4體系結(jié)構(gòu)描述及收集評估有關信息236
7.3.5以體系結(jié)構(gòu)為中心進行分析238
7.3.6以風險承擔者為中心進行分析240
7.3.7提供最終評估報告241
7.4評估方法比較241
7.4.1比較框架241
7.4.2評估方法概覽和比較245
小結(jié)262
第8章柔性軟件體系結(jié)構(gòu)264
8.1什么是柔性軟件體系結(jié)構(gòu)264
8.1.1動態(tài)軟件體系結(jié)構(gòu)265
8.1.2柔性軟件體系結(jié)構(gòu)286
8.2為什么使用柔性軟件體系結(jié)構(gòu)288
8.3怎樣使用柔性軟件體系結(jié)構(gòu)291
8.3.1Rainbow291
8.3.2MADAM293
小結(jié)297
第9章軟件體系結(jié)構(gòu)的前景299
9.1現(xiàn)代工業(yè)中的軟件體系結(jié)構(gòu)299
9.1.1全球軟件行業(yè)299
9.1.2軟件產(chǎn)品線301
9.2軟件體系結(jié)構(gòu)在系統(tǒng)中的應用306
9.3當今軟件體系結(jié)構(gòu)研究的不足310
9.4軟件體系結(jié)構(gòu)的研究展望311
小結(jié)312
參考文獻313
控制原則描述了如何激發(fā)一個構(gòu)件,或者描述了如何對運行邏輯進行處理。在《軟件體系結(jié)構(gòu)藝術(shù):設計方法和技巧》—書中,作者認為控制理論能夠被分為兩種層次:技術(shù)層次和設計層次。在技術(shù)層次中,方法調(diào)用和方法執(zhí)行匹配關系在運行時層被描述。這個技術(shù)也能夠描述中間件如何通過遠端的方法和消息序列激發(fā)遠端的實體。讀者需要知道,在C程序語言中,方法調(diào)用和方法執(zhí)行被綁在一起;但是在Smalltalk語言中,方法調(diào)用和方法執(zhí)行并不是緊緊連在一起的。Smalltalk中的客戶端對象能夠發(fā)送信息給另一個對象,于是對應的方法在另一個控制線程中執(zhí)行了。這就是說,客戶端的方法調(diào)用可能不會導致同一個線程中的方法執(zhí)行。在設計層次中,在運行時中的控制原則能夠被模擬。在當今,面向?qū)ο蟪绦蛟O計語言都有這些特性,例如C#和Java。如事件和消息的概念經(jīng)常出現(xiàn)在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O計中,甚至面向?qū)ο笙到y(tǒng)的實現(xiàn)中。在這個層面上,通信模式能夠被分成同步、異步和授權(quán)三種。同步通信意味著客戶構(gòu)件激發(fā)了一個服務器構(gòu)件,然后等待回應。總體來說,當一個操作被調(diào)用時,調(diào)用者總是一直等待直到返回值到來。不同構(gòu)件間的異步通信意味著當客戶端構(gòu)件調(diào)用一個服務器端構(gòu)件時,它不需要等待回應,而是可以在操作執(zhí)行過程中做其他的事情。最后,客戶端會收到結(jié)果。如果結(jié)果還沒有準備好,客戶端既可以繼續(xù)等待結(jié)果,或者在檢查結(jié)果的間隔中做其他的事情。異步通信模式是構(gòu)建高效率分布式系統(tǒng)的強有力模式,但是代價就是用起來更加復雜,同時也更容易出錯。第三個就是授權(quán)模式,客戶端構(gòu)件調(diào)用服務器構(gòu)件并且傳遞了一個地址,服務端的執(zhí)行結(jié)果會被送往這個地址。授權(quán)模式與異步通信相似,唯一的區(qū)別就是被調(diào)用構(gòu)件不需要等待響應。換句話說,執(zhí)行結(jié)果能夠發(fā)送給其他客戶端構(gòu)件,或者能夠在另一個線程中被處理。
總之,控制原則(又稱為激發(fā)模型),能夠用來比較不同體系結(jié)構(gòu)風格之間的不同。對子系統(tǒng)激發(fā)模型的確切比較對于更好地選擇、更好地描述合適的體系結(jié)構(gòu)風格,以及更好的設計或者設計體系結(jié)構(gòu)復合風格有很好的幫助。正如本章后面描述的一樣,在大部分應用系統(tǒng)中,多體系結(jié)構(gòu)風格復合起來達成某種質(zhì)量屬性。這就是異構(gòu)體系結(jié)構(gòu)風格的整合概念。
……