跳到主要內容

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

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

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

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

避免發生錯誤的設計方式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

留言

這個網誌中的熱門文章

小褶 Life(3) 古亭景美線段

經過上周的總統大選後,想說可以好好地規劃路線,這週末再來享受我的Bike Life,沒想到天氣預報一直恐嚇著我:「週末會下雨,週末會下雨,週末會下雨......。」 哇靠,早上起來,天色是有些陰暗,查了yahoo天氣,竟然下雨機率僅20%,趕緊重新考慮騎車的路線。 這次的目標是新店溪。 想說從哪邊切入比較好,唔,從師大路那邊進古亭河濱公園看來是不錯的選擇,要是下午真的下雨,就在師大路那邊晃一下午也比較安全。 查了google map,怪怪的,不知哪邊是公園的入口處。 不管了,到那附近再說,總有路口的。 結果是......迷路了。 -___-||| 到師大路跟兒童交通博物館那邊,就是看不到古亭河濱公園的入口。 沒辦法,走確定知道的路,以前新店上班時,總是從思源街接到景美堤外便道,果然,從那邊進去就對了。 (後來從古亭河濱公園也騎到中正河濱公園,才發現,那邊只有很小一條汽車進來的道路,真的很難找。 建議從思源街沿自來水廠那邊進來比較方便。) 就目前騎的3個線段而言,沿景美溪新店溪的河濱是最好騎的了,路又寬廣又平直,要飆車也容易。 看看地圖,只到舊橋就沒了,不知什麼時候才會完工咧...... 這樣,之後還可以直接騎到動物園咧!! 這個線段有較多的網球場地,靠古亭河濱公園那邊還有羽球場地,騎車的族群跟前兩次的線段比較起來,嗯,在地居民比較多(關渡到淡水則是遊客特多),應該是方便的緣故吧,騎Dahoon折疊車的人也比較多,莫非這附近有Dahoon專賣店?! 終點出來就到景美夜市一帶。 不錯的塗鴉作品。北市很多自行車道旁的圍牆,是開放給民眾塗鴉的。 (旁邊有 borther的簽名,莫非這是傳說中塗鴉客brother先生的作品?! 但......割腕的少女 ...... 繪在自行車道的旁邊,想表達什麼咧!?) 在終點處有很大的Taipei Cycling Mark。 雖然一開始有些小迷路,但也剛好繞到了兒童交通博物館......的外面,跟小丸子的看板合照。 門票太貴了,也聽有人說其實有些不值得,所以也不打算買票進去。 >___...

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

因為最近的日劇:求婚大作戰,才聽到這首歌的。 桑田佳祐的"明日晴れるかな"。 歌詞的內容跟劇情還蠻貼切,求婚大作戰就劇情而言不是頂好的,但題材相當有趣,令人反省的地方也頗多。 很多時候很多事,如果再來一次,我們會怎麼選擇怎麼做? 這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 生命轉瞬即逝 每個人都在心中默默祈禱 明天是晴天嗎 在那遙遠的天空下 這些是有趣的文章: 釋日劇《求婚大作戰》中的「哈利路亞」 劇情解釋

GLOOMY BEAR 暴力熊

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