RUP與XP的平衡之道

RUP與XP的平衡之道
作者:袁琳 來源:希賽博客 http://www.csai.cn 

      人有過什麼經驗,遇到過什麼恐懼的事,就會形成設法避免這種事情的方法學。研究重型方法學的人可能一直以來的經驗就是組織上千人的開發隊伍進行開發,比如說大型電信系統的開發、軍事航天系統的開發......這種項目嚴格強調過程執行的規範,注重文檔規範、評審及過程度量。而發明XP的人可能一直是在小團隊裏做項目,項目團隊只有3、5個人,項目總是會因爲沒有滿足用戶價值而被Cancel,開發公司也蒙受損失,因此注重與用戶的交流、反饋,強調快速、靈活。

 

      每種軟件方法產生的背景不同、特點不同、適用的領域亦不相同。那麼對於軟件項目來說,是否可以使用同一種軟件開發方法來對不同類型、規模、複雜度的項目來進行開發呢,顯然是不合理的。

 

       前不久,恰巧和國內一位資深的軟件工程諮詢顧問做過一些交流,他本人熱衷於RUP的過程改進,倡導針對不同類型項目進行適當的裁剪,實際上這也是一種靈活適應的方式、隨需而變的思想。我對此是理解並贊同的,但是我對RUP卻一直保持一種相對謹慎的態度。

 

      對於RUP來說,首先,我認爲它過於理想化和理論化,RUP 是過程組件、方法以及技術的框架,你可以將其應用於任何特定的軟件項目,由用戶自己限定 RUP 的使用範圍。對於各種類型的軟件項目,RUP並未給出具體的自身裁減及實施策略,總有些無依據可循的感覺。你既可以說它能解決任何問題,也可以說它什麼都不是;其次,RUP從本質來說還是一個強調設計和規範的軟件方法,從這個角度來講,與傳統的瀑布模型沒有太大差別,它的靈活性較之敏捷方法還是相對較弱的。在一些小型軟件項目、特別是不可預測的軟件項目開發中,面臨着各種緊急需求、面臨着時間壓力,沿用RUP是很難應付自如的。但是在另一方面,RUP強調對知識的收集、整理和加工定義,強調在軟件開發的時候要有好的體系結構。所以它還是很有利於知識的積累和共享的。

 

           相比RUP ,敏捷方法如XP則更爲靈活,倡導儘早的、持續的交付有價值的軟件滿足用戶需要。用交流溝通取代詳盡的文檔,強調團隊的主動、自律、自我組織和自發管理。而XP也是以代碼爲核心的一種方法,這裏有很多的東西是未知的,知識只存在於兩個地方:開發者的頭腦和最後的代碼。對於項目管理者來說,他們會認爲敏捷開發方法弱化了知識管理的概念,而實際上敏捷開發注重的是最有價值的知識的積累和沉澱。

           如何靈活應對各種項目風險、如何最大化優先滿足用戶價值、又如何能夠有效的控制項目開發過程、如果做好項目過程中的知識管理,是每一個軟件項目管理者都需要深入思考的問題。RUP的倡導者一直強調RUP裁剪,實際上我認爲RUP不僅僅是需要自身的裁剪,還需要學會融合。在RUP裁剪的同時,適宜的融合敏捷開發的各種實踐。不要認爲RUP與XP是矛盾的,其實不然,它們具有不同的原理、具有不同的應用領域。在 RUP 中融合了 XP 技術時,纔會得到過程的正確量,既滿足了項目所有成員的需要,又解決了所有主要的項目風險問題。對於一個工作於高信任環境中的小型項目團隊,其中用戶是團隊的一部分,那麼 XP 完全可以勝任。對於團隊越來越分散,代碼量越來越大,或者構架沒有很好定義的情況,您需要做一些其他工作。在用戶交互具有"契約"風格的項目中,僅有 XP 是不夠的。RUP 是一個框架,可以從 RUP 出發,在必要時以一組更健壯的技術來擴展 XP。

 

RUP最佳實踐包括:

 1. 迭代開發 
  2. 管理需求 
  3. 使用基於組件的構架 
  4. 可視建模 
  5. 持續的質量驗證 
  6. 控制變更

 

 12 個 XP 實踐包括:

    ◆有計劃的開發:通過結合使用優先級"故事"和技術估算,確定下一版本的功能
  ◆小版本:以小的增量版本經常向客戶發佈軟件 
  ◆隱喻:隱喻是一個簡單、共享的"故事"或描述,說明系統如何工作 
  ◆簡單設計:通過保持代碼簡單從而保證設計簡單。不斷的在代碼中尋找複雜點並且立刻進行移除 
  ◆測試驅動開發:用戶編寫測試內容以對"故事"進行測試。程序員編寫測試內容來發現代碼中的任何問題。在編寫代碼前先編寫測試內容 
  ◆重構:這是一項簡化技術,用來移除代碼中的重複內容和複雜之處 
  ◆結對編程:團隊中的兩個成員使用同一臺計算機開發所有的代碼。一個人編寫代碼或者驅動,另一個人同時審查代碼的正確性和可理解性
  ◆集體代碼所有權:任何人都擁有所有的代碼。這就意味這每個人都可以在任何時候變更任何代碼 
  ◆持續集成:每天多次創建和集成系統,只要任何實現任務完成就要進行 
  ◆每週 40 個小時:程序員在疲勞時無法保證最高效率。連續兩週加班是絕對不允許的 
  ◆現場客戶:一名真實的客戶全時工作於開發環境中,幫助定義系統、編寫測試內容並回答問題 
  ◆編碼標準:程序員採用一致的編碼標準證

RUP與XP的融合,是各自特點的相互補充,也是軟件開發方法的平衡之道。而對軟件技術平衡的思考也可以說是技術成熟的開始吧。

最後,再闡明我對軟件項目開發的理解。在軟件項目開發過程中,應該能夠識別、分析不同軟件項目的特點,採用相對適合的開發實踐來適應軟件開發過程,保證對軟件開發的有效支持,以便能夠創造出“足夠好的”軟件。而這個足夠就是對 進度、成本、質量之間的平衡,最大化滿足客戶需要的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章