這兩天開始讀由Edward Crawley(愛德華 克勞利)、Bruce Cameron(布魯斯 卡梅隆)、Daniel Selva(丹尼爾 塞爾瓦)著做的系統架構,一開始看目錄覺得是介紹系統軟件架構的書,也是我買它的原因,但粗略看完序和第一章第二章後不經肅然起敬,這本書是真的好,該書面向對象是適用於全部須要系統架構行業而不僅僅是軟件行業。它系統地介紹了系統的概念,組成,功能,如何分解系統,抽象系統,組合系統等相關的理論,相信無論什麼學科什麼專業什麼行業讀這本書都會有所收穫。決心仔細研讀一遍。算法
有的書傳播知識,有的書介紹技能,有的書娛樂大衆,而優秀的書傳播優秀的思想,本書就是。編程
這篇是第一部分讀書筆記,介紹了寫系統架構理念,系統分析必備思路,系統架構所用的思惟模式。數組
架構的概念:對系統中實體以及實體之間關係所進行的抽象描述。安全
架構的目的:找出系統架構得以確立的決策點,並謹慎作出決策。不良的架構決策則會使得大型的研發活動從剛開始就變得難以推行。架構
核心觀點:一些早期的決策能夠加依分析和處理,在不知道各個組件的詳細設計狀況下,系統架構依然能經得起檢驗。不要指望直接設計出最優的架構,而僅僅是結構良好的創造活動要優於毫無結構的創造活動。目標當下。框架
學習目標:造成一套思考並建立系統架構的方式。編程語言
系統思惟:與其餘一些思惟模式相併立,如批判思惟,分析思惟,創新思惟。把某一種疑問、情況或難題明確視爲系統是思惟方式。模塊化
系統:由一組實體和這些實體之間的關係所構成的集合,其功能要大於這些集體各自的功能之和。其由有兩個重點函數
實體:構成全體的小塊,也稱之爲部件、模塊、例程、配件等工具
實體關係:能夠是靜態的(鏈接關係),也能夠是動態並交互的(貨物的交換關係)。
哪些能夠視爲系統:任何一組實體均可以解讀爲一個系統。Complex做爲
系統和產品:產品是可以交換或具備交換潛力的事物,有些事物是產品不是系統(大米),有些事物既是產品(可供交換)也是系統(含有不少相互聯繫的實體)
架構:對系統種的實體及實體之間的關係所進行的抽象描述。
一組實體及其關係的集合,其功能大於這些實體各自功能之和。
涌現:系統在運做時所表現、呈現或浮現出的東西。爲何要構建系統就是要爲了取得滿意的涌現物。對涌現的理解,是系統思惟的目標,也是系統的藝術。
功能:是系統最明顯和最關鍵的涌現物。是系統所做的事情,也就是系統的動做、產出或輸出。
功能/涌現物有四種分類(以汽車爲例):
預期的涌現 | 意外的涌現 | |
---|---|---|
使人滿意的 | 汽車能夠載人 汽車內可使人感到溫暖或涼爽 汽車使人感到愉悅 |
汽車創造一種我的自由的感受 |
不和人意的 | 汽車燃燒碳氫化合物 | 汽車能夠致人死亡 |
性能:系統涌現物:是系統運做或執行其功能的好壞程度。系統功能的一項屬性。
原則:一種長期有效的道理,可以適用於各類問題。
涌現原則:當各實體拼合成一個系統時,實體之間的交互會把功能、行爲、性能和其餘內在屬性涌現出來。將探尋系統所涌現出的預期屬性和意外屬性。名人名言
系統還會涌現出其餘屬性:可靠性,可維護性,可操做性,安全性,健壯性,魯棒性。這些屬性與性能不一樣,這些屬性不是馬上就能創造出價值,而是經過系統在整個生命期種的運做狀況來體現。
不合人意的意外涌現被稱之爲緊急情況。
價值:是有着必定成本的利益。構建系統就是爲了得到利益。
系統思惟的第一任務:肯定系統及其形式與功能。
形式:系統是什麼,具備必定的形狀、配置、編排及佈局,是一種已然存在或有可能存在的物之載體或信息載體。形式在一段時間內是靜止固定的。系統必定具有必定的形式。
功能:系統作什麼,可以引起並創造某種性能,是對性能有所貢獻的活動、操做及轉換行爲。是使某物得以存在或得以體現其用途的一種動做。涌現物出如今功能領域。由過程和操做數組成。
功能與形式:功能須要以形式的手段來展示。功能比形式更抽象,功能涉及轉變,比形式更難以描述。
過程:功能中純粹標識動做或轉換的那一部分,改變操做數狀態的那一部分。
操做數:其狀態會在過程當中發生改變的事物。
例子:
形式和功能的區別:相似於商業活動中的商品和服務,商品是有形的產品(稱爲形式),而服務則是相對較爲無形,面向過程的產品(稱之爲功能)。
每一種系統都具有形式、過程與操做數着三項特徵。
名詞-動詞-名詞:第一個名詞充當執行動做全部的工具(形式),動詞用來描述該動做(過程),第二個名詞用來標識動做對象(操做數)。
系統思惟的第二任務:肯定系統中的實體、實體的形式和功能,以及系統邊界和系統所處的環境。
系統是由一組實體所構成的。系統中的每一個實體都有其形式和功能。
當功能按某種次序執行時,會涌現出更加動態的行爲。
一個系統能夠分解爲更小的系統,能夠擴展成更大的系統,定義系統的實體和系統的邊界,是一件很是重要而又比較困難的事情。
系統思考須要面對5個問題:
難點在於:系統究竟屬於互不相同的元素所組成的系統,仍是模塊化或集成系統。
若是系統由界限清楚的實體組成,能夠用一種很是清晰的方式來分解。系統確實是由彼此較爲獨立的一些實體所彙集並定義而成的。艦隊、馬羣、樹林、圖書館
模塊化的系統 :各個模塊之間(尤爲在功能上)相對獨立。模塊內部的關係比較密集,模塊之間的關係比較稀疏。放大電路
集成系統:系統系統很難在不影響其功能的前提下進行簡單分解,通常都是內部高度互聯的系統。汽車轉向裝置系統,集成電路。
總體論:強調總體概念,從總體上把握事物之間的緊密聯繫。
總體思惟:發現對系統可能有重要意義的所有實體。經過總體思惟促使發現與系統交互的每同樣東西,並考量給系統的影響和後果。
已知不肯定和未知不肯定:已知不肯定是知道但不瞭解,未知不肯定是連有沒有都不知道的事物。
總體思惟的目標是儘量找出位置不肯定的事物。
總體原則:每一個系統都做爲某一個或某些個大系統的一小部分而運做,同時,每一個系統總中也都包含着更小的一些系統。總體思考這些關係,並研發出與上級系統、下級系統和平級系統相協調的架構。
激發總體思惟:結構化和非結構化頭腦風暴,研發框架來保證相關問題能夠獲得考慮,從多個視角進行思考,把系統明確地放在大環境下進行思考。
聚焦:把與當前問題有關的重要事物找出來
聚焦原則:在任何一個點上,都唔那個發現不少影響系統的問題,而其數量已經超出了人的理解能力。所以,必須找出其中最關鍵,最重要的哪些問題,並集中精力思考它們。
聚焦過程當中,把疑問、情況或難題肯定出來,把其中重要方面凸顯出來。更具體就是利益相關的東西是什麼,
面對實體問一個簡單的問題:這個實體對關係的成果或涌現物來講是否重要。通常來講把握其交互關係的前提下,人腦能夠同時思考的事情優先,通常數量是7浮動2。列出對系統重要的事物通常爲7個,把這些事物替換掉對系統的影響。
抽象:抽離於物體的性質描述,只含本質不含細節。好的抽象能夠促進思考,很差的抽象會阻礙思考。
例子:
實際放大器:
抽象機制指導原則:
違背第一條,可能會把放大器抽象成熱源,不能凸顯放大的過程,若是違背第三條,可能會在抽象過程當中覆蓋過多的細節。
系統邊界能夠清晰地劃分出系統與其外圍事物之間的界限。定義系統邊界就等於將系統與其外圍環境區隔,
外圍環境:圍繞在系統外圍的東西。
系統邊界:位於系統和大環境之間。劃定邊界考慮下列問題
外部接口:當某個關係跨越系統邊界的時候,系統與大環境之間定義了一個外部接口
例子:若是認爲Team X 的任務是製做設計方案,那麼把john、susan和amy放在系統內,把市場人員和操做人員放在系統以外就是一種較爲合理的邊界劃分方式。用虛線表示系統邊界。
例子中第二項任務:找出系統的實體,實體的形式與功能,以及系統邊界及外圍環境後的結果:
系統思惟的第三任務:找出系統內及系統邊界處實體之間所具有的關係,以及那些關係的形式與功能。
關係按特徵分類:功能關係和形式關係。
功能關係:用來完成某件事情的實體之間所具有的關係,此關係可能涉及實體之間對某物的操做、傳輸或交換。功能關係具備動態性,因此其也成爲交互關係。交互過程當中,相關實體可能交換操做數,也可能協同對操做數執行操做。
形式關係:在某段那時間內穩定存在或有可能穩定存在的實體之間所具有的關係。其一般體現爲鏈接關係或幾何關係。爲了強調其靜態性也稱爲結構關係
功能關係與形式關係:功能關係一般以形式關係爲前提。形式關係是功能關係的載體。例子:心臟不與肺相連,就沒法同肺部交換血液。
形式關係與功能關係能夠表示爲關係圖或N×N表。
關係圖例子:系統內兩個實體與系統外圍環境中一個實體之間的關係。
放大器關係圖:黑色表示功能關係,灰色表示形式關係。
電路圖:把結構化鏈接或形式關係稱爲電氣鏈接,功能交互中的箭頭,在電路圖中指的是電流的流動。
N×N表:表的上方和左側都寫了N個實體,第一張表列出形式關係,第二張表列出功能關係。表中虛線左邊是表示系統邊界內部實體。位於對角線以外的每個單元格都表示一種內部關係或外部關係
關係圖能夠更加直觀,N×N可以體現更多的細節,當節點和鏈接數量變多以後不會顯得特備雜亂。
形式關係通常比較具體,剛開始思考關係的時候能夠從形式關係入手,再思考的同時再考慮其承載的功能。形式關係的重要性,主要體如今對功能關係的曾在上。涌現物出如今功能領域,因此功能交互纔是真正重要的。
外部接口:系統內部的實體和系統外圍環境中的實體之間。無論是形式關係仍是功能關係都有可能跨越系統邊界。
系統思惟第四項任務:基於實體的功能以及實體之間的功能互動,來肯定系統的涌現屬性。
系統是奇妙之處在於涌現。系統各個實體組合一塊兒後,實體的功能與實體之間的功能交互造成的組合涌現出更多的功能。
在形式領域中不會發成涌現。在功能領域中則會複雜不少,就涌現出不少其餘的功能。
系統思惟的主要目標:努力瞭解並預測涌現物以及涌現物帶給系統的強大能力。
系統故障就是因爲預測涌現物沒有出現。
預期涌現物沒有出現:預期的良好涌現物未能出現,意外的涌現物出現
預測的難點在於不知道系統會涌現出何種功能。
三種方式來預測:
涌現物依賴於系統各實體的功能以及實體之間的功能交互。形式是功能交互的載體,形式於形式之間的關係(結構)對預測物有着重要意義。
三個例子,過濾器,槓桿,語句:
機械槓桿:槓桿和支點組成,支點放在遠離操做者就是良好涌現方法,若改變支點位置,良好涌現物就消失了。
形式關係對於涌現物起着關鍵做用,對特定的功能交互起着重要引導做用。
系統思惟就是把某個疑問、情況或難題明確當成系統來思考。
複雜的系統:由不少高度相關、高度互聯或高度混雜的元素或實體所組成的系統。
爲何會複雜:
複雜度衡量法:經過一些複雜度的指標來衡量系統的複雜性。
難懂:系統的複雜度超越了人類由先的觀察和理解呢能力,難懂的事物具備較高的表面複雜度。
架構師訓練本身的思惟:去理解複雜的系統,令那些系統再也不那麼難懂,應努力構建易懂的架構。
良好的系統架構:構建一套具有必要複雜度同時又不難懂的系統。
Team XT是Team X的擴展,角色仍然是製做設計方案。
分析一個系統先提出三個問題:
第一項任務:肯定系統及其形式與功能。經過仔細觀察,普遍經驗,每位成員談話等手段。
第二項任務:肯定系統中的實體、實體的形式和功能,以及系統邊界和系統所處的環境。
劃定系統邊界,虛線如下的部分是系統的外部環境。
第三項任務:找出系統內及系統邊界處實體之間所具有的關係,以及那些關係的形式與功能。
第四項任務:基於實體的功能以及實體之間的功能互動,來肯定系統的涌現屬性。
分解:就是把實體分紅小的部件或組成部分。分而治之。
分解的難點:分解出來的實體構建整個系統的這一過程,這一過程一般稱爲整合。
整合:把各個部件所具有的形式聚合起來。
分解方式:取決於系統元素的構成狀況。不一樣元素構成的系統,把team XT按照成員進行分解。元素的形式不肯定,能夠考慮按照功能來分解(例如,轉向機制,壓縮機,排序算法)。按照功能分解比較好。
體系:一種其實體均處在某個層次或某個位階的系統,這些層次按照上下順序排列起來。
元素在體系上有位階的緣由:
該圖沒有體現出三位小組長之間的區別
能夠清楚的看到三個組長之間不一樣的分工。每一個節點所統領的下層節點數量限制在7個之內,不超越認知能力。
組是一種有用的抽象單元,但不是惟一的分解方式,還能夠按照地理位置,鏈接性或功能關係等分解。
如何肯定分解結束:底層元素是不便於分解的原子部件。
簡單系統:只須要分解一次,分解出來的這一層中元素不超過7個。
複雜度適度系統:通過兩次分解,每一個上級部件統領的夏季部件不超過7個,最低層數量不超過81個,如Team XT。
複雜系統:分解層級數超過3層。不多有這樣的系統。
系統自己稱爲第0層,分解出來的那些層分別稱爲系統之下的第1層,第2層。系統之下的那些層能夠叫作:
系統之上的那些層:
原子部件:不能拆解的東西,凡是一經拆解就是去意義的東西。
類:一種結構,用來描述某種事物所共有的特徵。
實例:類的具體表現。類的實例化。
特化/泛化關係:通用的物體與一組特殊的物體之間的關係。
特化在編程語言中相似於繼承:某個通用的類中建立子類,使得子類繼承通用類中的某些屬性及功能。
遞歸:某套過程或某個對象把本身包括進來。以一種於自身類似的方式來使用實體或關係的現象。
自頂而下或自底而上思考:使用最多的是自頂而下,從系統的目標開始,思考概念和高層架構。
由外向內思考。
現實工做是由內向外,最經常使用的方法是:從系統中選一個點,而後由這個點開始想上或向下探索1~2層。
交替思考:在思考系統時:思惟會在形式領域和功能領域之間來回切換。以team XT爲例:先從功能領域:研發設計方案,到形式領域:肯定小組這一形式:功能領域:思考小組都要完成功能,思考研發設計方案這一功能如何涌現。
架構展現有兩種方法:
對象過程方法(object process methodology , OPM):把形式、功能、實體及關係有關的信息不都融入同一個模型中。
系統建模語言(System Modeling Language ,SysML)和美國國防部架構框架(Department of Defense Architecture Framework,DoDAF):採用不一樣視圖來表示信息。
SysML:對軟件工程中的統一建模語言進行改編
OPM:將面向對象的圖表與面向過程的圖表合併到同一套方法中,以便對系統進行描述。
在OPM中,對象用方框表示,過程用橢圓表示,其特色:並不會針對系統建立多個不一樣的視圖,或多種不一樣類型的圖表,只會爲系統建立一個繼承模型,多個SysML圖能夠融合到一張含有對象、過程及關係的OPM圖中。