跳到主要內容

再讀「人月神話」(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 生命轉瞬即逝 每個人都在心中默默祈禱 明天是晴天嗎 在那遙遠的天空下 這些是有趣的文章: 釋日劇《求婚大作戰》中的「哈利路亞」 劇情解釋

The Nightmare before Christmas 聖誕夜驚魂

這部片是29 October 1993上映的,我是到2000年時,因為在卡通公司上班,同事借我VCD看之後,才了解" 聖誕夜驚魂 "的魅力所在。 在這之前,每每看到這奇怪骷髏頭的相關產品,總覺得怪怪的,這東西怎麼會有人喜歡。 隔很久的後來,自己也是跑去找了片DVD買回去,因為jack的魅力真的是太黯然太銷魂了。 當然,之後的"提姆波頓之地獄新娘"(Tim Burton's Corpse Bride)也沒忘記收藏。 不過這裡不寫故事內容啦!有興趣的google一下就會找到不少相關資料。 製作人提姆波頓Tim Burton,早在81年於迪士尼公司擔任動畫製作時,即開始策劃本片。全片在佔地4000平方呎的攝影棚內拍攝,動員超過120位動畫人員、藝術家、攝影師及技術人員,場景便有20個之多,耗時兩年才完成。 為了維持整部長片的一致水準,製片聘請了艾瑞克主格坦等14位偶動畫權威來指導技術人員。由於製作技術難度高,即使在一流人員的高效率工作下,60秒的鏡頭亦平均需耗費一週的工作天。在人物聲音的表現方面,則聘請喜劇明星凱瑟琳奧哈拉、威廉希金等人助陣。 這部片已經重看過3次了,每次看都還是會很感動,大師作品就是這樣,隔多久,看幾次,都還是會喚起所謂的感動粒子這樣的情緒。 這次剛好又收集到"聖誕夜驚魂"新的場景組(4組),嘿嘿,當然不能放過囉! 我喜歡傑克邪惡的表情,特別有張力。 動感十足的傑克。 除了新的四組,也順便拍了些舊版的場景組,有興趣的到我 flickr 相簿看。