天天看點

什麼是極限程式設計 (XP)?

極限程式設計(XP) 是2000 年代初期最廣為人知和使用最多的靈活方法之一。XP 是Kent Beck、Ron Jeffries和Ward Cunningham的創意,基于他們在戴姆勒克萊斯勒的集體經驗。它的名字變成了馬麥醬并推遲了管理。它錯誤地喚起了沖浪者的幻想和缺乏專業精神。

XP 是一種疊代方法。團隊計劃少量工作并在稱為 1 到 4 周疊代的短時間盒内建構它。XP 與其他疊代架構的主要差別在于,XP 專注于達到極端水準的軟體工程實踐。例如,許多研究表明代碼審查是發現缺陷的最有效方法之一。XP 将這一點發揮到極緻,并通過結對程式設計 100% 地鼓勵同行評審。

XP 不僅專注于短疊代,而且還規定了較短的釋出周期,以降低技術産品傳遞中固有的風險。進度延誤、陳舊的需求與客戶需求不一緻、業務變更和不必要的功能都可以通過較短的釋出周期來解決。

XP 實踐 (Best Practices)

自 Kent Beck 首次發表“極限程式設計解釋”以來,XP 實踐一直在不斷發展。但是,下圖顯示了與 XP 最常關聯的集合。

什麼是極限程式設計 (XP)?

靈活開發方法XP的12個最佳實踐

1.規劃遊戲 (planning game)

  • 快速制定計劃,随着細節的變化而改進;
  • 詳細說明:需結合項目進度和技術條件确定下一階段拟開發和釋出的系統範圍。當計劃跟不上實際變化時,應更新計劃。

2. 小釋出 (Small release)

  • 系統的設計應該能夠盡早傳遞;
  • 詳細說明:強調新版本應該在極短的時間内增量釋出,這樣每個疊代周期的進度很容易估計,工作量和風險也很容易控制;同時,使用者的回報也能得到及時處理。

3.系統隐喻 (System Metaphor)

  • 找一個合适的比喻來傳達資訊;
  • 詳解:通過比喻來描述系統的工作原理以及系統如何添加新的功能。它通常包含一些可以參考和比較的類和設計模式。

4. 簡單的設計 (Simple Design)

  • 隻處理目前的需求,保持設計的簡單;
  • 在任何時候,系統都應設計得盡可能簡單。不必要的複雜性一旦被發現就會被移除。

5. 測試驅動 (Test-driven)

  • 先寫測試代碼,再寫程式;
  • 說明:程式員不斷地編寫單元測試,隻有這些測試能夠正确運作才能繼續開發。

6. 重構 (Refactoring)

  • 重新檢查需求和設計并重新清晰地描述它們以滿足新的和現有的需求;
  • 代碼重構是在不改變系統行為的情況下,重新調整和優化系統内部結構,以降低複雜度,消除備援,增加靈活性,提高性能。

7.結對程式設計 (Pair Programming)

  • 兩個程式員在同一台計算機上編寫代碼來解決同一個問題。
  • 解釋:通常一個人負責編寫代碼,另一個人負責保證代碼的正确性和可讀性。

8. 集體所有 (Collective Programming)

  • 任何人都可以随時随地更改系統中的任何代碼。
  • 說明:每個會員都有修改代碼的權利,每個人對所有的代碼負責。

9. 持續內建 (Continous integration)

  • 可以按天甚至按小時運作,供客戶運作版本;
  • 提倡一天內建幾次系統,随着需求的變化,不斷進行回歸測試,避免系統內建一次的噩夢。

10. 每周40小時 (40 hour work)

  • 目組成員每周工作時間不得超過40小時,加班時間不得連續超過兩周,否則會影響生産效率。

11. 現場客戶 (One-site customer)

  • 在團隊中添加一個真正的、功能性的使用者,他将全職回答問題。
  • 說明:在整個項目開發周期中,至少需要一名實際客戶代表在現場确定需求,回答團隊問題,并編寫功能驗收測試。

12. 代碼标準 (Code Standards)

  • 通過指定嚴格的代碼規範來強調溝通,以盡量減少不必要的文檔。

XP值 (Values)

XP 在Scrum 架構采用價值之前幾十年就将價值納入方法論中。4個 XP 值 (core Values)是:

什麼是極限程式設計 (XP)?
  • 溝通 (Communication) - 保持正确的對話流暢以減少問題的發生。
  • 簡單 (Simplecity) - 今天做一件簡單的事情,而不是制造你可能永遠不需要的鍍金。
  • 回報 (Feedback) - 與系統、客戶以及彼此驅動解決方案的回報循環。
  • 勇氣 (Courage) - 做出艱難的決定以幫助您以最快的速度傳遞。
  • 尊重 (Respect) - 尊重意味着分享成功和失敗的同時,我們尊重彼此、我們的協定和承諾。

XP角色 (Roles)

XP 規定了特定的角色。它非常重視程式員,并希望程式員能夠享受測試他們的代碼的樂趣。XP 程式員不僅需要廣泛的技術實踐,還需要有效的溝通和人際交往能力來實施結對程式設計等實踐。

盡管開發團隊執行測試的平衡,XP 需要測試人員。測試人員的角色轉變為幫助客戶定義和編寫驗收測試。

所有軟體項目都有一個客戶。XP 将客戶角色發揮到極緻,需要與開發團隊共處,他們必須能夠對産品做出決策并以使用者故事的形式指定系統的行為。

  • What is a Self-Organizing Team in Scrum?
  • What is Pig and Chicken in Scrum?
  • What is Cross-Functional Team in Agile?
  • Classical Project Management vs Agile Project Management

繼續閱讀