製程是否與軟體設計有關?我認為設計本來就不能昧於現實,要能在現實與理想之間找出調和的解決方案;再加上設計必然會面對團隊開發時,成員之間的謀和溝通等議題──這會與製程有關。所以,在「軟體設計必讀經典」系列中,我也會介紹關於製程、方法論等好書。

《極致軟體製程》是我最想推薦的經典指標。本書講究心法的傳授,沒有一行程式碼、只有少數幾張圖,其他全都是口述文字,作者閒話家常般地告訴你軟體的一些道理。

XP,eXtreme Programming(X要大寫,凸顯了Magic Letter),中文翻譯為「極致」軟體製程,我覺得eXtreme也可翻成「極端」,極致代表將軟體製程發揮到至善;極端則表達出XP一些顛覆傳統開發的方法,但很有效。(例如,搭檔編程,兩個人一起寫一支程式,開發效能反而提升)

極致軟體製程的始祖Kent Beck,從本書發表以後,儼然成為與UP(Unified Process)相對立的教派:XP為輕量級、UP為重量級開發製程。(這僅從方法論的角度來比較,實際上,這些製程的根本精髓仍是一致的)。

在本書之後,闡述XP的書籍如雨後春筍冒出,眾多有經驗的軟體開發者,紛紛寫書闡述XP的根本價值與原則,找出解決實務問題的最佳方法,目前XP書籍的中譯本約有5、6本,選擇雖多,但好像賣得不好,本書在某書局又是只賣99元。

從問題的根本找出解決方案

本書第一章就開宗明義提出:「軟體的根本問題在於風險!」例如無法準時交付、臭蟲太多、需求變更、不合適與不必要的功能、人員流動率……等。針對這些問題,XP先找出影響軟體製程的4個變數因子,提出4種價值觀,再以此訂出開發的基本原則,然後回歸簡單的基本面,制訂因應對策,找出實務的解決方法。

影響軟體製程的4個變數因子:成本、規模、時程、品質。你會發現其中有趣的是,成本、規模與時程,幾乎都控制在客戶手裡,而開發承包單位大概只能控制品質。而品質正是與成本、規模、時程成反比,所以,成本越低、規模越大、時程越短,那麼,品質必然會差。這是根本性的問題,這些變數因子如果缺乏有效控制,那麼即使導入如CMMI等認證制度,也是枉然。

針對這4個變數因子,Kent Beck發現可以先專注在規模變數的控制,也就是把規模收斂,專注在客戶真正想要的,早一點釋出版本(Release early),如此也比較容易消弭客戶與開發單位在見解上的歧異。

我覺得軟體製程的4種價值觀:溝通、簡單、回饋、勇氣,正是群體生活最符合人性的恆常價值。團隊開發,成員之間不說話,如何溝通?如果沒有回饋,如何知道問題所在?沒有勇氣表達你的觀點與決心,如何持續實踐下去?

團隊內部如能經常性的溝通、回饋、有勇氣表達,自然會形成良性的正向回饋,更容易有共識,簡單呈現也就出來了。

把握住基本原則後,再來才是找出解決實務的方法。本書提出12種實務,相當具有學習參考的價值,但是,可不要全盤接收。礙於國情、人文等因素,有些方法不一定行得通,我們應該從原則中自行找出方法,這才符合 XP的精神。

XP的道理簡單,卻難以執行

Kent Beck是生活大師,他把許多生活哲理帶入軟體領域,例如,書中提到媽媽教導他開車時,並非要求一直保持在「正確」的方向,而是提醒他時時保持專注,這裡修正一點、那裡修正一點,這正是漸進修正的最根本道理。書中的副標題為何叫做「擁抱改變」?因為,軟體開發中的每一件事物都會改變,問題不在於改變本身,而是在於無法應付改變。

XP的道理相當單純,但「執行面」卻很難貫徹,這在本書第二十四章有特別說明。作者認為導入的難處,主要還是情感上的問題,特別是恐懼感作祟。這點我很認同, 所以,從來不向客戶說:「我要協助你們導入某某方法論」,而是以誘導的方式,讓客戶不知不覺融入,然後當成一種習慣,久而久之,團隊成員就會以為理所當然。

 

極致軟體製程(Extreme programming explained : embrace change)

Kent Beck/著

李潛瑞/譯

培生教育集團出版

售價:350元

《作者簡介》

王克明

台北工專五專部電子科畢業。現於HSDc軟體設計顧問團隊擔任架構師/顧問/講師。興趣為整體架構性的思考與學習、期貨投機操作與閱讀。

相關閱讀:
軟體設計必讀經典(1)以簡約之道介紹UML最實用的部分
軟體設計必讀經典(2)物件導向分析與設計入門
軟體設計必讀經典(3)洞悉易學難精的Use Case
軟體設計必讀經典(5)用科學化方式搞懂設計模式
軟體設計必讀經典(6)RUP活用,也可以是敏捷開發
軟體設計必讀經典(7)重構讓程式回到應有位置
軟體設計必讀經典(8)由生活出發,輕鬆領會物件導向
軟體設計必讀經典(9)優質使用者介面,源自好的狀態圖設計
軟體設計必讀經典(10)幫助SA紮穩UML底子的實務手冊
軟體設計必讀經典(11)反覆測試與修正,讓錯誤消失

熱門新聞

Advertisement