2010年11月24日

[書評] Brownfield Application Development in .NET (軟體構築美學)

Brownfield Application Development in .NET (軟體構築美學)

Kyle Baley and Donald Belcham
Foreword by David Laribee
April, 2010 | 416 pages
ISBN: 1933988711

Findbook找書 | 出版社連結 | 中文版譯者部落格

Table of Contents (中譯版)
第01章│認識棕地應用程式
第02章│棕地專案的版本控制
第03章│持續整合
第04章│自動化測試
第05章│軟體度量與程式碼分析
第06章│瑕疵管理
第07章│在專案中導入好的物件導向實務
第08章│應用程式的重新分層
第09章│鬆散一些:降低程式碼的依賴性
第10章│重整使用者介面
第11章│重構資料存取
第12章│管理系統外部的依賴
第13章│持續改善

作者借用土地管理的名詞 Brownfield 來稱呼「既有的、難以維護及改善」的軟體專案。許多人一踏進軟體開發的行業,就開始面臨這種專案,因為一般公司並不會將 Greenfield(剛開始起步) 的專案交給新人,通常是由維護、擴充既有的系統,延續使用前人已經訂好的架構,依樣畫葫蘆寫出新程式。

既有的系統發展到一定規模,通常已經有穩固的架構,而且也確實能滿足使用者的需求,又為何需要有一本專書來探討其中的問題?從 Brownfield 的定義來看就很清楚。

Brownfield狀態是一個條件,在某些法律排除和加法,不動產之內,擴展、再開發或者再用,其中可以由出現或危害物質、汙染物或者汙染物的潛力出現複雜化,也許包括石油碳氫化合物發行。 Brownfield狀態一般意味有對站點的用途或發展制約。
Brownfields 被摒棄或未充分利用的工業和商業設施,擴展或再開發由真正或被察覺的環境複雜化、汙穢。在市政規劃,brownfield土地 (或簡單地a brownfield)是土地早先使用為工業可以被低集中沾染的目的或某些商業用途有害廢料或汙染一旦清掃它,并且有潛力被重複利用。登陸更加嚴厲地沾染并且有有害廢料或汙染的高濃度,例如a Superfund 或有害廢料站點,不屬於brownfield分類。 [from WorldLingo]

軟體專案發展一段時間後,多數都會變成 Brownfield 狀態,且造成的原因通常都是無可避免。例如在出貨壓力下,程式開發時僅考慮怎麼做比較快完成,而不是採取比較好的設計方式;也可能是沒有清楚一致的架構,造成不同人寫的程式看起來像是來自不同專案;可能是架構師一開始就做了錯誤的決定,可能根本沒有 Pre-architecture 就開始寫程式;也可能在解決BUG時,因缺乏經驗或偷懶而加入了一些造成汙染的程式碼;軟體開發技術的改變很快,有時候軟體還沒到成熟的地步,使用的技術就已經顯得老態,開始翻新的時候,舊有技術的實作就變成了麻煩的來源。

由於許多主管只看重結果,也就是能達成時程規畫的產出,造成根本沒人在乎「好的設計」,或是在乎卻無法落實。站在企業經營的角度,這麼做是合理的,因為「好的設計」可能造成一開始成本就過高、開發時間過長、無法達成客戶要求的時限。在現實的考量下,許多好的設計先被犧牲,以完成專案目標為優先,最後面臨軟體專案變成 Brownfield 狀態。

變成 Brownfield 狀態,並不是代表軟體專案已經無藥可救,通常這時軟體已經發展到一定規模,企業也開始藉助這個軟體獲利,因此有更多資金可以投入改善。

如果拋棄 Brownfield 的軟體專案,讓這些已經在經驗中成長茁壯的團隊,重新啟動一個 Greenfield 專案,用更好的設計重新打造軟體不是更棒嘛?身處軟體開發的是非之地,我經常會有這種想法,但也一再驗證這樣做並不可行。

軟體重新由 Greenfield 狀態開始做起,剛開始可能很愉快,但之後還是會因為各種因素變成 Brownfield。而且過程還是要不斷面對既有醜陋惡劣的程式碼,因為發展到一定規模的 Brownfield 軟體專案,有太多商業邏輯的細節、特殊考量下的設計,被實作在程式碼中,雖然好的文件會有記載,但許多情況,看程式碼往往還是最清楚直接。既然還是要身陷泥濘中,翻修 Brownfield 的軟體,整體來說痛苦還是較輕一些。

這本書中各章節提供的方法,適合實際開發軟體的團隊成員,是開發大型軟體專案「必備」的各項 Know-how。在軟體還沒發展到一定規模前,現時營利的考量下,許多已知的更好做法派不上用場。但身為軟體開發人員,並不能因為這些方法目前用不上,就將它忽視,而必須儘早學習、謹記在心,在合適時機出現時,知道能夠採取什麼方法,並在開發過程中才能為自己留好後路,減少未來翻修時的痛苦。

良好的軟體整合開發環境,例如 Eclipse、Visual Studio .NET 等,已經開始具備現代軟體專案所需的功能,例如版本控制(Version Control)、重構(Refactoring)等,這本書是以 .NET 為例,操作實例也是以 Visual Studio .NET 為主,書中大部分的內容是與工具無關的觀念講解,所以也很適合其他開發工具、程式語言的讀者參考。

這本書很適合以下的讀者:
  1. 需要改善既有軟體專案
  2. 需要建置軟體專案環境、規畫軟體架構
  3. 想改善軟體專案的開發效率及品質
  4. 想避免開發「現在看起來很棒、但未來會變得很糟糕」的軟體
  5. 在軟體開發之路迷途,需要燈塔指引的旅客
  6. 在公車、火車上需要假裝認真看故事書的善男信女

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!