??? //作者: 王瑋琳? 2006-12-07 ?? ?
? 近期在一個小項目開發組里進行推行XP,嘗試了一段時間。結合過去帶項目開發組的經驗,說說我對在實際項目開發里應用極限編程方法一些體會,和大家交流。完全是個人理解,也不太成熟,不對的大家來拍。
?? 一 如何看待開發方法
??? 首先說點開發方法本身的理解。我一向認為沒有哪個開發方法可以徹底的解決項目開發的各個環節的問題,任何一個開發方法,其中有些理論的東西放到自己的實踐中可能就是事倍功半,在實際開發中還是要靈活,要掌握一個應用的度。過去我一直是用RUP的那一套東西,不能說它差,更不能說它好。我覺得RUP也就是給我們組織項目提供了一個參考,我們并沒有嚴格按它的來,比如文檔,我就是按國標的要求來寫,而不是RUP的;甚至文檔的數量、質量方面,對每個項目我們也是靈活處理,比如這個項目組的人擅長文檔編寫,就要求他們寫的詳細點,要是項目組整體文檔編寫能力都不行,就要求寫的簡略一點,能突出重點就可以了??傊矣X得實際項目開發的模式應該是慢慢摸索出來的適合自己的方法和模式,不需要嚴格遵守什么東西,另外就是要根據各方面的發展進行不斷的調整。
? 二 推廣XP價值觀???? 極限編程中用來指導開發的五個主要的價值觀是:
溝通、簡單、反饋、勇氣、尊重。我覺得對PM而言需要重點對Team成員強化的價值觀是:
溝通、簡單和反饋。這三個是實際影響所有工作方式的價值觀,應當在任何時間、任何條件下要求大家來理解、實踐。
?? 溝 通:在實際開發過程中,通過平時及時的口頭溝通來促進團隊的了解及合作,開發過程中相關人員盡可能的及時主動報告開發進度、問題,一方面自己要將所做的工作及時的告訴他人,另一方面不要等著在他人進行階段性的匯報時才了解項目開發情況,要隨時詢問、關注他人的工作進度,只有大家都了解了項目的真正的進展,才能消除對開發進度的懷疑、憂慮。
應該強調溝通的作用是多方面的,絕不能把溝通理解成去了解他人的工作進度,而是通過溝通來實現工作的簡單化,實現較小的反饋周期。至于進度問題,從領導角度來說,應當本著尊重、信任的價值觀進行合理的關注。
??
簡 單:開發過程中各項事務性工作應當化繁為簡,溝通方式、決策盡可能的簡單化;系統實現方案也應當考慮選用簡單的實現方式,盡早盡快的達到效果。
?? 反 饋:反饋是溝通的核心部分,應當成為所有開發人員的核心價值觀之一。大部分情況下,我們都不可能在開始的時候知道我們最終的系統是什么樣的,需要群策群力參與進來,一方面對系統的功能進行改進、提高,一方面對項目開發的溝通組織方面進行改進,提高整體的開發效率。推行反饋的價值觀是非常需要技巧的,因為我感覺大部分開發人員并不是不想反饋,而是不知道如何反饋、反饋什么,對此我提出的一個說法就是:一切都可反饋,一起都要反饋!
?? 至于
勇氣、尊重則是我認為這兩點和人的天生個性有關,要因人而異,有針對性的對Team的部分成員做出具體要求。我個人認為一些XP的書籍強調這兩個價值觀的前提是不太嚴謹的,舉個小例子,要組里一個弟兄本來就是個勇氣過剩,喜歡在項目用高風險的代碼的激進分子,我再老和他強調勇氣,豈不是要搬起石頭砸自己的腳?
? 三 掌握XP原則??? 極限編程方法提供了一整套的開發原則,在實際開發過程中,我覺得實踐中需要重點遵循的開發原則有:
- 人性化
- 質量第一
- 互相受益
- 從經濟角度出發
- 不斷提高 ?
- 慢慢走 (Baby steps,很多書翻成嬰兒步)???????????? ?
??? 挑兩個說說,其中最有感受的是第一條人性化。
??? 人性化是什么?看看國內眾多的軟件公司,老板大凡都是覺得自己還算對得起員工;PM總覺得自己比手下人更難更辛苦;干活的人就算受了委屈了,想想哪都差不多,只要薪水還可以能過的去就忍了,等差不多到了時候跳個槽就是了。在這種氛圍下,人性化具體下來是什么東西呢,給點加班費還是多去加幾頓餐?
??? 老外談人性化,說要把工作和生活分開,要讓員工有安全感、成就感、歸屬感,未來能發展,還能對其他同事感到很親切。對咱們中國的大部分工程師來說,除了遇到個好領導能感到親切一些,安全感、歸屬感、成就感,甚至長遠的發展就只是少數幸運的人才能擁有的了。這個問題我也沒有很明確的理解,就我自己的看法,我覺得作為領導能做到公平、寬容、鼓勵優先,能盡可能的讓弟兄們少加幾個班,就算是有點人性化原則了。
??? 算了,撇開讓人郁悶的人性化,來說說質量第一和不斷提高。其實在俺們的項目中,尤其對PM而言,質量第一有時候會成了一個自欺欺人的口號。質量和進度有沖突,怎么辦?我的經驗是質量第一不等于質量最先,產品有Bug不會扣錢,按期交不出活不但要扣錢,還要損失信譽;那怎么辦,要降低產品質量用不好的解決方案或者弄虛作假么?也不可!現在的程序都是B/S的,方便升級,先交互,再抓緊時間出補丁在客戶反饋之前去升級就是了,你去升級,客戶還高興覺得維護費用沒白交呢。
??? 這里就引出另一個原則了,慢慢走。這個我體會也很深,做項目真的就是應該一步一步做,不能好高騖遠,一下把功能設計的過復雜,把攤子鋪的太大。開發中把功能一個一個實現了,然后一個一個做穩定;交互給用戶后,不斷的能做一些功能的改善、提高;這個慢慢走不僅是一個什么成本、風險的問題,更是一種感覺,一種讓項目開發人員覺得不斷前進,讓用戶覺得你的產品在不斷的改善提高的Feeling!
? ?
?????? ?
? 四 XP實踐
?? XP編程理論里列舉了大量的實踐方法,我挑感觸比較深的和大家來交流一下:
??? 這一條簡直是中小軟件開發設計的至理名言!項目做的少的人可能很難理解這句話的重要性,極端的說,那些想一開始就把各個東西都設計好的項目,基本和沒有做設計差不多。過去我們提"原型開發法",在RUP里我們講短周期迭代,在XP中我們說要周循環,季循環,要增量設計,這都是為什么呢?就是因為我們老是發現設計和后來的變化差別太大,要回去改設計又總存在各方面的問題(懶惰嫌麻煩、怕出問題有顧慮、有風險不愿擔責任,太忙了沒時間等等)。最早原型開發法就是不要設計了,根據實際做出的東西來調整,RUP是有致命傷的,不敢面對這個問題,不痛不癢的說把開發過程多弄幾設幾個里程碑,及時調整好了。而XP提出的一點一點設計,似乎是最靠譜的,把設計過程一點一點分解到開發的過程中,或許一直一來很多的優秀的團隊也正是這樣做的。
??? 這一條對PM來說也是非常有實用價值。從負責人的角度,要盡可能寬松的制定計劃,避免“高承諾、低交付”對團隊帶來的信心、熱情、積極性的負面影響。一個弟兄,活干的快了受了表揚,下次干的可能就更好了;要是活沒干好交不出來,他的信心受了打擊,就不是簡單談談話能調動的起來了。
??? 這個從實際操作來說,XP講究實事求是,成員間信息透明,讓大家了解真實情況,不允許少干不報,也不允許多干少報。但我理解這是局限在團隊內部的,屬于人民內部矛盾,對于自己人,我們當然不能欺上瞞下,干活時,等或者是拖,都是不對的。但是對外面對那些只要結果的客戶,有時也是需要應用一些必要的策略,盡可能爭取到合理的時間,盡量把客戶的預期引導到正確的范圍內。
??? 可能你覺得很多少時候這種事情超出了PM的能力范圍,工作量、交互時間在你接到活時就已經定下來了,只能硬著頭皮上。光是咬牙做當然是愚蠢的,這種情況我過去的做法往往是在過的過程中要想辦法逐步降低用戶的預期,即要設法降低承諾,強調強調困難,方法得當大部分情況下客戶還是可以做出一定的讓步的。當然同時一定要提高交付的產品質量,保證客戶的滿意度。
?? 對這個我可能有些保守,我相信結對編程其實是大家一種在用的一種編程方式,并沒有什么特別神奇的。除了XP理論書籍里的提到的那些弊端,我認為結對編程的負面作用其實還有很多。比如對新人,養成編寫程序的獨立思考能力很要緊,不能上來就老結對,靠別人的啟發來慢慢搞。因此我認為讓大家知道結對編程這種方式是可取的,有必要的時候(比如有些問題自己想不太清楚)找個合適的人結個對,討論討論就可以了。
聲明:本博客中所有文章均為版主原創,轉載請保留作者信息,并請注明出處。