內容簡介
本書介紹瞭架構的設計過程及設計方法:屬性驅動設計(ADD)。書中通過介紹ADD的概念和應用實例,展示瞭如何執行架構設計,如何重新設計概念,可幫助讀者從“入門到精通”掌握軟件架構設計。第1章介紹瞭軟件架構設計和ADD方法的發展史,第2章討論軟件架構設計的細節,第3章詳細介紹ADD方法,第4~6章是幾個案例研究,第7章展示瞭其他一些設計方法,第8章深入討論瞭設計過程中的分析,第9章講解瞭實時過程如何適應組織級彆的應用,第10章總結瞭全書的內容。
目錄
譯者序
前言
第1章 引言 1
1.1 寫作動機 1
1.2 軟件架構 2
1.2.1 軟件架構的重要性 2
1.2.2 生命周期活動 3
1.3 架構師的角色 5
1.4 ADD發展史 6
1.5 小結 7
1.6 擴展閱讀 8
第2章 架構設計 9
2.1 通用設計 9
2.2 軟件架構中的設計 10
2.2.1 架構設計 11
2.2.2 元素交互設計 11
2.2.3 元素內部設計 12
2.3 為什麼架構設計如此重要 13
2.4 架構驅動因子 13
2.4.1 設計目的 14
2.4.2 質量屬性 15
2.4.3 主要功能 19
2.4.4 架構關注點 20
2.4.5 約束條件 21
2.5 設計概念:用於創建結構的構建塊 22
2.5.1 參考架構 22
2.5.2 架構的設計模式 24
2.5.3 部署模式 25
2.5.4 策略 26
2.5.5 外部開發組件 27
2.6 架構設計決策 30
2.7 小結 31
2.8 擴展閱讀 32
第3章 架構設計過程 34
3.1 原理性方法的必要性 34
3.2 屬性驅動設計 3.0 34
3.2.1 步驟1:評審輸入 35
3.2.2 步驟2:通過選擇驅動因子建立迭代目標 36
3.2.3 步驟3:選擇一個或多個係統元素來細化 37
3.2.4 步驟4:選擇一個或多個設計概念以滿足選中的驅動因子 37
3.2.5 步驟5:實例化架構元素、分配職責和定義接口 37
3.2.6 步驟6:草擬視圖和記錄設計決策 38
3.2.7 步驟7:分析當前設計、評審迭代目標、實現設計目的 38
3.2.8 按需迭代 39
3.3 根據係統類型遵循設計路綫圖 39
3.3.1 成熟領域的綠地係統設計 39
3.3.2 新興領域的綠地係統設計 41
3.3.3 現存係統的設計(棕地) 42
3.4 識彆和選擇設計概念 42
3.4.1 識彆設計概念 42
3.4.2 選擇設計概念 43
3.5 結構生成 46
3.5.1 元素實例化 47
3.5.2 劃分職責和識彆屬性 47
3.5.3 建立元素間的關係 48
3.6 定義接口 48
3.6.1 外部接口 48
3.6.2 內部接口 48
3.7 在設計中創建概要文檔 51
3.7.1 記錄視圖的草圖 51
3.7.2 記錄設計決策 53
3.8 追蹤設計進度 55
3.8.1 使用架構待辦事項清單 55
3.8.2 使用設計看闆 55
3.9 小結 57
3.10 擴展閱讀 57
第4章 案例研究:FCAPS係統 59
4.1 商用案例 59
4.2 係統需求 60
4.2.1 用例模型 60
4.2.2 質量屬性場景 62
4.2.3 約束條件 62
4.2.4 架構關注點 62
4.3 設計過程 63
4.3.1 ADD 步驟1:評審輸入 63
4.3.2 迭代1:建立一個完整的係統架構 63
4.3.3 迭代2:識彆支持基本功能的架構 70
4.3.4 迭代3:解決質量屬性場景的驅動因子(質量屬性-3) 77
4.4 小結 80
4.5 擴展閱讀 81
第5章 案例研究:大數據係統 82
5.1 商用案例 82
5.2 係統需求 83
5.2.1 用例模型 83
5.2.2 質量屬性場景 83
5.2.3 約束條件 84
5.2.4 架構關注點 84
5.3 設計過程 84
5.3.1 ADD方法的步驟1:評審輸入 85
5.3.2 迭代1:參考架構和係統整體結構 85
5.3.3 迭代2:技術選擇 91
5.3.4 迭代3:數據流元素的細化 99
5.3.5 迭代4:服務層的細化 104
5.4 小結 107
5.5 擴展閱讀 107
第6章 案例研究:銀行係統 109
6.1 商用案例 109
6.1.1 用例模型 110
6.1.2 質量屬性場景 111
6.1.3 約束條件 111
6.1.4 架構關注點 111
6.2 現有的架構文檔 112
6.2.1 模塊視圖 112
6.2.2 分配視圖 113
6.3 設計過程 114
6.3.1 ADD方法的步驟1:評審輸入 114
6.3.2 迭代1:支持新的驅動因子 114
6.4 小結 118
6.5 擴展閱讀 119
第7章 其他設計方法 120
7.1 一種軟件架構設計的通用模型 120
7.2 以架構為中心的設計方法 121
7.3 RUP中的架構活動 123
7.4 軟件架構設計的過程 124
7.5 一種實現架構與設計的方法 126
7.6 視點與視角方法 127
7.7 小結 129
7.8 擴展閱讀 129
第8章 設計過程中的分析 131
8.1 分析和設計 131
8.2 為何分析 133
8.3 分析方法 134
8.4 基於策略的分析 135
8.5 值得反思的問題 137
8.6 基於場景的設計評審 138
8.7 架構描述語言 141
8.8 小結 142
8.9 擴展閱讀 142
第9章 組織中的架構設計過程 144
9.1 架構設計與開發生命周期 144
9.1.1 售前階段的架構設計 145
9.1.2 開發運維階段的架構設計 146
9.2 組織方麵的問題 150
9.2.1 個人設計還是團隊設計 150
9.2.2 在組織中應用一套設計概念目錄 151
9.3 小結 152
9.4 擴展閱讀 152
第10章 結束語 154
10.1 方法的必要性 154
10.2 下一步 155
10.3 擴展閱讀 156
附錄A 設計概念目錄 157
附錄B 基於策略的問捲調查 184
術語錶 196
精彩書摘
《軟件架構設計:實用方法及實踐》:
那麼架構師如何實現適度的敏捷?他們如何在前期工作和導緻返工的技術債務之間找到適當的平衡?對於小而簡單的項目,使用沒有前期工作的架構是有道理的。簡單的修改和重構是容易且相對便宜的。在對需求有一些瞭解的項目中,可以從執行幾個ADD方法迭代開始。這些設計迭代可以專注於選擇主要架構模式(如果閤適包括參考架構)和框架。這是圖9.3e中描述的0迭代方法。這將有助於使項目結構化、定義工作任務和團隊組織,並解決最關鍵的質量屬性。如果當需求變化時,特彆是如果這些需求是驅動質量屬性的需求,那麼就采用敏捷開發實驗的實踐,其中火花用於滿足新的需求。火花是一個時間任務,用於迴答技術問題或收集信息,它不會形成一個最終産品。火花在單獨的分支中開發,如果成功,則閤並到代碼的主分支。這樣,新的需求可以被樂於接受和管理,而不會對整個發展進程造成太大的破壞。
……
前言/序言
提起軟件架構,人們常常會想到模型—模型錶示構成軟件架構的基本結構。偶爾,人們纔會思考這些結構産生的過程,到底經過什麼樣的思考過程纔有瞭這些結構,也就是說,設計的過程是什麼。設計是一種完成起來很復雜的活動,關於設計的主題也比較復雜,不容易寫清楚,因為這需要針對係統的方方麵麵來考慮並做齣決策。這些方麵往往很難錶達,尤其當它們來自於以往實戰性的軟件開發項目時,從這樣的項目中得來的經驗和知識是很難言傳的。盡管如此,因為設計行為本身是建立軟件架構的基礎,所以它亟待被解釋。雖然經驗很難通過一本書來傳授,但是我們可以通過分享一種方法,來幫助讀者以係統化的方式完成設計過程。
本書的主旨是介紹設計過程和一種特殊的設計方法,這種方法稱為屬性驅動設計(Attribute-Driven Design,ADD)。我們相信這種方法非常有效,能幫助讀者以有原則、有紀律和可重復的方式完成設計。在本書中,列舉瞭屬性驅動設計及現實生活中的幾個有關屬性驅動設計的真實案例。我們將通過這些案例演示如何進行架構設計。即便你目前沒有足夠的設計經驗,我們會舉例說明如何藉助該方法來復用設計概念,即那些曆經考驗的經典方案。
盡管屬性驅動設計十多年前已經提齣,關於它的文字資料卻很少,也很少有資料可以提供屬性驅動設計的實例並對其具體實現過程加以解釋。因為公開信息的缺乏,人們很難使用該方法或將該方法傳授給他人。此外,一些已經發錶的關於屬性驅動開發的文檔也都比較概括,很少涉及架構師日常使用的概念、實踐和技術。
我們已經跟職業架構師一起工作瞭多年,曾指導他們如何進行設計,以及如何在設計過程中學習。同時我們也學到瞭很多,例如,我們瞭解到職業架構師在設計過程的早期會考慮哪些技術因素,這一點在之前的屬性驅動設計版本中是沒有的。就因為這個原因,該方法被很多實踐者認為跟實際脫節。本書提供瞭一個修正過的屬性驅動設計新版本。在該版本中,我們試圖不遺餘力地在理論和實踐之間架設橋梁,縮小理論和實踐之間的差距。
雖然我們已經教授瞭多年軟件架構和設計軟件,但是一路走來我們認識到,對沒有經驗的人來說,軟件架構和軟件設計太難瞭。這種認識促使我們去創建設計路綫圖,可以肯定的是,這樣可以有效引導人們完成相關設計過程。我們同時設計瞭一種針對軟件設計教學的遊戲,可以作為本書的配套部分。
本書麵嚮的讀者首先是那些對軟件架構設計感興趣的人,尤其是那些必須展開這項設計任務現階段卻不得不使用某些臨時性方案的行業內人士,本書定會對他們彆有益處。而對於有經驗的軟件架構設計者來說,他們已經有瞭一套逐步建立起來的設計方法,相信這些讀者也能通過本書找到新的思路。例如,如何用看闆(Kanban)追蹤設計進度,如何利用基於策略的問捲調查分析一個設計理念,如何通過設計方法完成早期的評估預測。再者,對於已經在軟件工程學院熟知其他架構方法的讀者,則可以得到屬性驅動設計與其他設計方法的關聯信息。例如,與質量屬性工作坊(Quality Attribute Workshop,QAW),與架構權衡分析方法(Architecture Tradeoff Analysis,ATAM),以及與成本效益分析方法(Cost Benefit Analysis Method,CBAM)之間的聯係。最後,本書也適閤計算機科學或者軟件工程專業的學生和老師閱讀。我們深信本書中列舉的案例研究可以幫助讀者理解如何更輕鬆地完成一係列的設計過程。可以肯定的是,我們已經在課程中運用瞭相似的案例,並且效果顯著。就像愛因斯坦所說的,“舉例不是教學時可供選擇的方式,而是唯一的方式。”
我們期望本書能夠讓讀者明白,設計其實是有套路可依的,按照這樣的方法或者套路,你能夠在今後的軟件架構設計中設計齣更優秀的軟件産品。
本書各章內容如下:
第1章簡明地介紹瞭軟件架構和屬性驅動設計方法。
第2章討論軟件架構設計的細節,設計過程的主要輸入—架構驅動因子,以及設計的概念,這些概念會幫助你明白如何利用已經過驗證的方案來理清這些驅動因子有哪些。
第3章詳細介紹屬性驅動設計方法。重點討論屬性驅動設計方法的各個步驟,以及能夠用來完成這些步驟的多項技術。
第4章解釋瞭“綠地”(greenfield)係統的開發實例。在該案例研究中,我們盡力解釋如何將第3章描述的大多數概念運用到設計過程中,因此,你可以自然地認為該案例研究比較“學術”(雖然該案例源於真實存在的係統)。
第5章闡述第二個案例研究,該案例是與職業軟件架構師閤作完成的,因而更加專業、更加詳細。它將以翔實的細節展示屬性驅動設計如何應用於涉及多種技術的大數據係統的設計中。該案例展示瞭如何在“新”領域中開發係統,而不是在第4章提到的傳統領域。
第6章是一個較短的案例研究,展示如何將屬性驅動設計應用於常見的遺留(或棕地,brownfield)係統的擴展設計中。該實例說明架構設計並非是在係統開發第一版時一次完成的,而是在開發過程的不同階段實施的。
第7章展示瞭其他一些設計方法。在屬性驅動設計的修正版本中,我們采納瞭其他設計過程研究者的想法,在此簡要總結瞭他們的方法,在嚮他們的工作緻敬的同時,也比較瞭屬性驅動設計與其方法的不同。
第8章深入討論瞭分析這個主題(盡管這是一本關於設計的書)。分析本來就是設計的一部分,所以本章講述瞭一些技巧,它們既可以用於設計過程當中,又可以用於部分設計完成後。我們專門介紹瞭基於策略問捲調查方法的使用,該方法能幫助我們簡單有效地理解設計過程中的種種決定。
第9章展示瞭設計過程如何適應組織級彆的應用。例如,在項目周期的最早期進行一些架構設計有助於評估目標。同時,還展示瞭屬性驅動設計如何與其他軟件開發方法協同工作。
第10章總結瞭全書內容。
本書附有兩個附錄。附錄A給齣瞭各種設計概念的目錄,這些設計概念可用於特定的應用領域。該目錄集閤瞭我們從各處收集的設計概念,反映瞭現實中那些經驗豐富、訓練有素的架構師是如何工作的。目錄包含瞭第4章案例研究中使用的設計概念的樣本。附錄B針對7個最常見的質量屬性提供瞭一套基於策略的問捲調查(詳見第8章),同時針對DevOps額外提供瞭一份問捲調查。
緻謝希望能夠在此錶達我們對審閱人員Marty Barrett、Roger Champagne、Siva Muthu、Robert Nord、Vishal Prabhu、Andriy Shapochka、David Sisk、Perla Velasco-Elizondo和Olaf Zimmermann的感謝,感謝他們慷慨地提齣他們的觀點和意見。我們也要感謝Serge Haziyev和Olha Hrytsay,他們幫助我們完成瞭本書第5章。此外,如果漏掉Serge、Olha和Andriy在內的許多Softserve的架構師就是我們失職瞭,他們對整本著作提供瞭很多幫助。
Humberto希望感謝Quarksoft公司的主管和架構師小組。關於修改屬性驅動設計的很多想法和本書中的一個案例研究都來源於該方法在這傢公司的實踐。感謝我有幸閤作過和交換過意見的其他公司的架構師及開發者,我從他們身上學到瞭很多。我也希望感謝軟件工程學院,他們多年來一直邀請我和其他學者參加他們的精英教育研討會(ACE Educators Workshop)。我還要感謝我的母校,墨西哥首都伊斯塔帕拉帕自治大學,它一直在支持我。感謝我的同事Perla Velasco-Elizondo和Luis Castro,他們已經在架構之旅中陪伴我多年。感謝Alonso Leal,是他在多年前給瞭我成為一個職業架構師的機會。感謝Richard S. Hall,他教瞭我許多寫作本書時很有價值的技巧。最後,我要感謝我的閤作者Rick,他是個好人,也是個好同事,很高興能和他一起工作並交換意見。
Rick希望感謝軟件工程學院的James Ivers和他的研究小組。我還要特彆感謝Rod Nord悉心的審校和寶貴的建議。我也要感謝我的長期閤作者和導師Len Bass,在許多年前他引領我開啓瞭軟件架構之旅。沒有Len,我不知道自己今天會在哪裏。此外,我要感謝Linda Northrop,她多年來一直大力支持我的研究,並提供給我許多寶貴的機會。最後,我要感謝我的閤作者Humberto,他總是朝氣蓬勃,和他共事是一件真正的樂事。
軟件架構設計:實用方法及實踐 下載 mobi epub pdf txt 電子書