跳到主要內容

再讀「人月神話」(2)--關於架構

梭羅:「問題不在於你看著什麼,而是你看出了什麼」

重讀人月神話,方知這幾年,仍只是如來佛手中的小猴崽子......
我們來探討人月神話在架構及設計上的看法:
首先是整體概念性
軟體工程並不用像蓋教堂一樣要花好幾世紀的時間。但是,因概念的不統一而造成問題的情況,卻遠比蓋教堂還糟。這肇因於我們往往不採用主設計師的一系列想法,而是把設計這件工作切割成好幾個部分,然後分配給一群人去做。
我主張在系統設計時,保有概念整體性(conceptual integrity)是最重要的原則。寧可忽略掉某些新奇或更好的特色,來反映同一組設計理念,也不要蒐羅了一大堆很棒,但彼此無關或合不來的構想。

要做到概念性整體這點,我們發現,勢必須要有一位總工程師或是架構師的角色,且必須有深厚的經驗及技術,方能達成這項要求。

避免發生錯誤的設計方式

做好定義以防止誤解
最致命也最棘手的錯誤莫過於系統錯誤。這肇因於各個組件的開發人員做出了彼此不協調的假設,之前討論的概念整體性,就是針對這個問題所提出來的解決方案,簡而言之,具備了概念整體性,不但使軟體易於使用、易於開發,也比較不容易發生錯誤。

這做法意味得在架構上付出勤勉、辛苦的代價。貝爾電話實驗室的V.A.Vyssotsky說:「把產品定義清楚是非常關鍵的工作,有太多大多的失敗都源自於自始至終都搞不清楚要做的是什麼東西。」
詳細的功能定義、詳細的規格說明、規範良好的防錯設施與錯誤處理技術,都有助於減少發生系統錯誤的可能性。

規格審查
早在進入程式編寫階段之前,規格文件就應該先由其他獨立的測試小組進行審查,以確保規格的完整和明確,開發人員本身則不適合做這樣的工作。

由上而下的設計方式
Niklaus Wirth在1971年提出了一篇非常亮麗的論文。將整個系統開發工作劃分出架構、實作和實現,便是基於這種觀念的具體做法;更進一步來說,不論是架構、實作和實現,都可以透過由上而下的方式做出最佳的成果。

Wirth 提出來的是一個持續細分精製的步驟(refinement steps)。一開始,先勾勒出粗略的工作定義和執行方案以得到主要的結果。然後對此定義做更深入的探討,看看結果跟我們真正要的東西有何不同,並把方案 中幾個大的步驟細分成更小的步驟,於是,在工作定義中的每個細分精製過程都演變成解決方案演算法的細分精製,同時也可能伴隨著某個資料結構的細分精製。

透過上述的過程,就可以界定出解決方案的模組(module)。或是其他能夠獨立進行更進一步細分精製的資料,而模組化的程度便決定了軟體適應變動或修改的能力。
Wirth提倡每個步驟都應該盡可能運用高階(high-level)的表示方式,只彰顯出概念,而細節則隱藏起來,留待需要更進一步細分精製的時候再處理。

一 個良好的由上而下設計方式(top-down design)可以避免掉許多錯誤,這可從幾方面來說明。
首先,由於結構與表示方式變得很清楚,所以更容易描述出精確的需求和模組功能;
其次,藉由分割並 明確定義出獨立模組的過程。可以避免系統錯誤;
第三,隱藏細節將使結構中的缺陷更容易被突顯出來;
第四,每一次細分精製的步驟,都可以對該步驟的設計成果進行測試,這使得測試工作可以提早進行,並把測試的焦點集中在屬於該步驟中較為適當的細節層次。

這種逐步細分精製的過程並非只進不退,如果在某個細節上遭遇到意想不到的混亂,就有可能再回到較高的層次重頭再來,事實上這種情形很常發生。但你會比較容易精確判斷出何時、或為什麼該壯士斷腕重 新設計。

有許多爛系統就是因為當初捨不得放棄,結果一直架在不良的設計基礎上做些治標不治本、疊床架屋的違章建築,由上而下的設計方式可以減少這種做法的誘惑。

Brooks認為由上而下的設計方式是這十年間最重要的一個新的軟體開發形式。

在決定怎麼做之前,重要的是知道要做什麼。
而且要每個人都清楚知道作的是什麼,所以要有清楚的定義。
可是團隊中還是會有搞不清楚或是只想依自己方法幹的人,因此有一段時間我們需要規格審查,不斷地review,以確定大夥兒都清楚知道。

另外,架構師要清楚的了解:
架構旨在說明做什麼,而實作是說明如何做。

架構師與實作人員的互動:
*記住實作人員有發揮創意完成實作的責任,所以架構設計師只能建議,不能命令。
*在建議時,永遠只提出一個能夠符合規格的實作方式,同時也接受其他能夠達到目標的方案。
*默默地,私底下提出建議。
*準備為提出的建議付出喪失信任的代價。

所以要做好架構,必定要有清楚的文件指導。
這我們下次再來談。

留言

這個網誌中的熱門文章

GLOOMY BEAR 暴力熊

Gloomy Bear身世背景: Gloomy是一隻在路邊被遺棄的粉紅色小熊 , 被小朋友Pity發現,並將牠帶回家中收養, 並為小熊取名為Gloomy。 可惜.....Gloomy外表可愛,但因為被拋棄的緣故~卻有著一般熊的暴力性格, 長大長出爪子後就時常向主人用暴力招數打招呼, 而Pity就慘被Gloomy日日夜夜地欺負!悲慘ㄉ人生就這樣子開始囉!! 暴力熊喜好~咬主人頭, 而牠的主人,復原能力極高...打不死喔~厲害厲害! 暴力熊顏色:粉紅色,金色,銀色,紅色,藍色,黃色,還有罕見的綠色與混色。 粉紅色暴力熊性別:女 頭大身細,眼珠黑色,爪白色兼尖利,具有殺傷力,她多數用口爪殺人,殺完人後喜歡在街上徘徊。 小主人每次都被暴力熊揍得半死兼頭破血流, 但仍然不離不棄地緊緊抱住這隻血腥的寵物; Pity就算受到傷害亦要讓開心的回憶遮掩,然後繼續微笑期待小熊再次跟他一起溫習/做功課/看書;相信等待他的會是小熊的溫柔而非暴力傷害; 暴力熊和他小主人之間微妙的情感讓人感動又心酸; 這次轉輪科技所推出的暴力熊,內容包含小男孩Pity與粉紅熊Gloomy兩支一組。造形上善用Gloomy胖胖的軀體,將轉輪關節隱藏其中,全身有14處可動。可替換配件包含小男孩被打的表情,還有防止熊熊咬人的口罩以及牠嘴角流下來的血,原型制作為山口勝久。

明天是晴天嗎(明日晴れるかな)

因為最近的日劇:求婚大作戰,才聽到這首歌的。 桑田佳祐的"明日晴れるかな"。 歌詞的內容跟劇情還蠻貼切,求婚大作戰就劇情而言不是頂好的,但題材相當有趣,令人反省的地方也頗多。 很多時候很多事,如果再來一次,我們會怎麼選擇怎麼做? 這MV不同於日劇的片尾MV: 中文歌詞如下: 明天是晴天嗎 作詞:桑田佳祐  作曲:桑田佳祐  編曲:桑田佳祐 島健 炙熱的淚呼喚著愛 曾經閃爍的歲月 也迷失了方向 明天我依舊徘徊在街頭 沒有回頭路可走 側耳傾聽 心靈深處是什麼在私語 獨自躲在昏暗的街頭 回首當日的天空  上帝賜予我們孤獨與試煉 想哭就要放聲大哭 難道是命中注定 叫人不敢面對 日覆一日 不可思議 Oh baby No maybe 愛已走遠 情已不再 我只能佯裝嘆息 將怨恨拋給這世界 Oh baby you are maybe 憂喜交織 幸福的feeling 抱緊我 one more time 珍惜曾經的我 讓回憶刻骨銘心 往事已經隨風 人生路還漫長 只為見證夢想 誰來開啟奇跡之扉? 多想再一次觸碰你的笑顏 不知你是否發現命運的鑰匙 就握在你手中 Why baby? Oh tell me 愛恨纏綿 假裝視而不見 只為能守護在愛人身邊 Oh baby you are maybe 距離勝負僅一步之遙 站在崩潰邊緣的feeling 我想穿越 one more chance I talk to myself Oh baby No maybe 愛已走遠 情已不再 輕輕的嘆息背後 只留下深深的悔恨 Oh baby Smile baby 生命轉瞬即逝 每個人都在心中默默祈禱 明天是晴天嗎 在那遙遠的天空下 這些是有趣的文章: 釋日劇《求婚大作戰》中的「哈利路亞」 劇情解釋

不服從的領導學:不聽話的員工,反而有機會成為將才

這本書,清楚介紹了 計畫 - 行動 - 成果 的思考方式,尤其是「校準」的觀念。 也詳細指出了 領導 、 管理 與 指導 間的不同。 非常好的一本管理/領導者要看的書。強推。 執行的方法創造出奇蹟,執行的方法才是我們應該敬佩的地方。 在戰爭中,「事情不會像上好油的機器那樣運轉順暢;事實上,機器從開始運轉就會產生阻力,需要領導者極大的意志力才能克服。」在戰爭裡,「所有事情都很簡單,但連最簡單的事都很困難......在戰爭中展開行動,就像在阻力重重的介質裡移動。」 克勞塞維茨想將這樣的戰爭實況形成一種觀念,他找到「摩擦」這個詞。 摩擦就是一切「不確定性、錯誤、意外、技術上的困難、無法預見的事物及其對決策造成的影響、士氣與行動」的總合。 摩擦的存在,恰恰說明了為什麼軍隊需要軍官、企業需要主管的存在。也因此,預測與處理摩擦,就成了管理的核心工作。 一個由不同的個人組成的組績,不論紀律多麼嚴明,想要追求共同的目標,都會像在開車時踩煞車一樣,一定會造成摩擦。 我們只能取得部分資訊,又只能交給處在高壓狀態下的人、進行有瑕疵的處理。 我們之所以會遇到摩擦,是因為人類認知上的限制;我們對現在所知有限、而未來根本就不可知。 線性思維有兩個特徵:一是按照比例,也就是投入多少就產出多少;二是相加特性,亦即整體是各部分相加的總和。但非線性系統卻完全不是這樣,克勞塞維茨在當時就很清楚戰爭是非線性系統,只是無法形成具體概念,只能借用摩擦、偶發事件、不可預測性等概念來說明。 管理的課題:如何對付有資訊的有限、如何相互傳遞我們確實擁有的資訊,以及我們最終應該如何行動。 克勞塞維茨用兩種落差來描述摩擦的影響。一是我們試圖在不可預測的外部環境採取行動,但我們一直沒意識到這點,因而產生了「預期成果」與「實際成果」之間的落差。二是內部的摩擦,導致組織的「計畫」與「行動」之間出現落差。這種落差來自資訊在取得、傳輸和處理的過程中,涉及許多獨立自主的媒介。三是是行動與實際成果之間的落差(或是”計畫跟預期成果之間的落差”)。 實際採取的行動和應該採取的行動,是不同的。會出現這種狀況,可能是錯誤的行動計畫造成的,或是 我們雖然策畫了正確行動,但執行者沒有照計畫去做。 計畫不完美,是因為我們缺乏「知識」。我們可能沒蒐集到足夠的資訊,或是對資訊的詮釋有...