SlideShare a Scribd company logo
1 of 34
極限編程 XP

eXtreme Programming
什麼是極限編程? (1/2)
 一種軟體工程方法學
 敏捷軟體開發中最富有成效的幾種方法學之一
 強調程式設計師團隊與業務專家之間的緊密協作、面對
面的溝通(認為比書面的文檔更有效)、頻繁交付新的
軟體版本、緊湊而自我組織型的團隊、能夠很好地適應
需求變化的代碼編寫和團隊組織方法,也更注重做為軟
體開發中人的作用

 傳統 V.S XP
 與傳統在項目起始階段,定義好所有需求再費盡心思的
控制變化的方法相比, XP 希望有能力在項目周期的任
何階段去適應變化

2
什麼是極限編程? (2/2)
 XP 其實它沒什麼新鮮的概念,而且大部分都是相當古
老的概念。有些專家認為 XP 是保守的
 它所有的技巧都已在過去數十年或數百年內被證明有效

 XP 的創新處在於:
 把這些做法一舉囊括
 確保這些做法都儘可能徹底的實施
 確保這些做法都儘可能彼此截長補短

3
歷史
 極限編程的創始者是 Kent Beck 、 Ward
Cunningham 和 Ron Jeffries ,他們在克萊斯勒時提出
了極限編程方法。
 1999 年 10 月發行《極限編程解析》( 2005 第二版
出版) By Kent Beck

4
極限編程的哲學思想






一種社會性的變化機制
一種開發模式
一種改進的方法
一種協調生產率和人性的嘗試
一種軟體開發方法
析》

By 《極限編程解

5
XP 的目標
 極限編程的主要目標在於降低因需求變更而帶來的成本
 極限編程透過引入基本價值、原則、方法等概念來達到
降低變更成本的目的
傳統

V.S.

XP

6
XP 的極致思維 (1/2)





如果程式碼檢查( code reviews )有益,我們應反覆
地檢查(搭檔編程, pair programming )。
如果測試有益,每個人都該常常做測試(單元測試,
unit testing ),即使是客戶也不例外(功能測
試, function testing )。
如果設計有益,則應被當作每個人每天工作的一部分
(重整, refactoring )。

7
XP 的極致思維 (2/2)
 如果簡潔有益,我們應讓系統保持在能夠支援目前所需
功能的最簡單狀態(能夠運作的最簡單架構)。
 架構如果重要,每個人都要常常反覆琢磨架構(對整個
系統下一個隱喻、象徵、或概念)。
 整合測試如果重要,我們每天就會做上好幾次(持續整
合)。
 短的開發週期如果有益,我們就把它縮短到真的真的非
常短 --- 短到可以用幾秒到幾分鐘到幾小時來計算,而
不是幾星期到幾個月到幾年(通盤規劃)。

8
XP 可保証二件事


對程式師而言




XP 保証他們可以每天都做些真正有意義的事;他們再
不必獨自面對那些會令人驚慌的情況;他們將可以自己
掌握每件事,成功地做出系統;下他們能做的最佳決定
,而不會做不是他們夠資格做的決定。

對客戶和經理人而言


XP 保証他們每個工作週,都可以獲致最大的利益;每
隔幾週,就會看到他們所在乎目標的具體進度;也可以
在不導致過高費用的狀況下,在專案進行到一半時改變
其進行方向。

析》

By 《極限編程解

9
XP 的價值






溝通
簡單
回饋 ( 設計師 & 客戶的測試 )
勇氣
尊重 ( 第二版最新添加的價值 )

10
XP 的原則
 由價值衍生而來





快速反饋
假設簡單
增量變化
包容變化

11
XP 的特徵
 增量和反覆式的開發

 一次小的改進跟著一個小的改進









反覆性,通常是自動重複的單元測試
成對程式設計
在程式設計團隊中包含 User
軟體重構
共享的程式碼所有權
簡單
回饋

12
XP 核心的實踐
 XP 的核心可被分為四個範圍

 小規模回饋 Fine scale feedback
 測試驅動開發、策劃遊戲、客戶、成對程式設計

 反覆持續性程序 Continuous process
 持續整合、設計最佳化 ( 軟體重構 ) 、小型發佈

 共識 ( 標準與規章 ) Shared understanding

 簡單設計、集體程式碼所有、程式設計標準 / 規約

 程式設計者的福利 Programmer welfare
 穩定標準的速率

13
小規模回饋 Fine scale feedback
 測試
 沒有經過測試的程式碼什麼都不是
 XP 認為,如果一個函數沒有經過測試就不能認為它可以
工作
 單元測試
 用以測試一小段程式碼的自動測試。在 XP 中,需要在程
式碼編輯前就編輯單元測試。這種方式的目的是激勵
Programmer 思考自己的 Code 在何種條件下會出錯。 XP
認為當 Programmer 無法再想出更多能使 Code 出錯的情
況時,這些程式碼便算完成。

14
小規模回饋 Fine scale feedback
 成對設計
 它迫使我們與別人溝通、把別人跟自己的想法看得更清
楚、也加快了寫程式的速度,對新手而言(每個人都是
某方面的新手),這更是一條學習的捷徑,大家都知道
,有人當場教,學得最快。
 一個 programmer 控制電腦並且主要考慮編碼細節。另
一個主要注意整體結構,不斷的對第一個 programmer
寫的程式碼進行反饋。
 成對的方式不是固定的 :
 XP 甚至建議程式設計師盡量交叉結對。這樣,每個人都可
以知道其它人的工作,每個人都對整個系統熟悉,成對程
式設計加強了團隊內的溝通。

15
小規模回饋 Fine scale feedback
 客戶 ( 現場客戶 )

 在 XP 中,「客戶」並不是為系統付帳的人,而是真正
使用該系統的人。
 極致編程認為客戶應該時刻在現場解決問題。

 例如:在團隊開發一個財務管理系統時,開發小組內應包
含一位財務管理人員

 一個小組理論上需要一個 User 在身邊 , 制定軟體的工作
需求和優先等級 , 並且能在問題出現的時候馬上回答 ( 實
際工作中,這個角色是由客戶代理商完成的 )

16
小規模回饋 Fine scale feedback
 策略遊戲
 策劃程序分為兩部分
 發佈策劃
 反覆狀態

17
策略遊戲
 發佈策略
 照價值排序:業務人員按照商業價值為使用者需求排序。
 按風險排序:開發者按風險為使用者需求排序。
 設定周轉率:開發者決定以怎樣的速度開展專案。
 選擇範圍:挑選在下一個版本 ( 工作點 ) 中需要被完成的
使用者需求,基於使用者需求決定發佈日期。

 值得一提的是
 在作業階段開發人員和業務人員可以「操縱」整個程序。
意指他們可以做出改變。某個使用者的需求,或是不同
使用者需求間相對優先等級,都有可能改變;預估時間
也可能出現誤差。也就是說這是在整個策略中,准許做
出相應調整的機會。
18
策略遊戲
 反覆狀態 ( 計畫 )- 探索階段
 關於建立任務和預估實施時間。
 收集使用者需求:
 收集並編輯下一個發布版本的所有使用者需求。

 組合 / 分割任務:
 如果程式設計師因為任務太大或太小而不能預估任務完成時
間,則需要組合或分割此任務。

 預估任務:
 預測需要實作此任務的時間。

19
策略遊戲
 反覆狀態 ( 計畫 )- 約定階段
 在約定階段以不同需求作為參考的任務被指派到
Programmer
 接受任務:
 每個 Programmer 都挑選一個所需負責的任務。

 預估任務:
 由於 Programmer 對此任務負責,所以必須給出一個完成任
務的估計時間。

 設定負載係數:
 負載係數表示每個 Programmer 在一個反覆中理想的開發時
間。
 一周工作 40 小時,其中 5 小時用於開會,則負載係數不會
超過 35 小時。
20
策略遊戲
 反覆狀態 ( 計畫 )- 約定階段 2
 平衡:當團隊中所有 Programmer 都已經被配置了任務
,便會在預估時間和負載係數間做出比較。任務配置在
Programmer 中達到平衡。如果有 Programmer 的開發
任務過重,其它 Programmer 必須接手他 / 她的一部分
任務,反之亦然。

21
策略遊戲
 反覆狀態 ( 計畫 )- 作業階段
 各個任務是在反覆計劃的作業階段中一步步實作的。
 取得一張任務卡片:
 Programmer 取得一張由自己負責的任務的卡片。

 找尋一名同伴:
 這個 Programmer 將和另一位 Programmer 一同完成開發工
作,也就是成對設計。

 設計這個任務:
 如果需要,兩位 Programmer 會設計這個任務所達成的功能。

22
策略遊戲
 反覆狀態 ( 計畫 )- 作業階段 2
 編輯單元測試:
 在 Programmer 開始編輯實作功能的程式碼之前,他 / 她
們首先編輯自動測試。

 編輯程式碼:
 兩位 Programmer 開始 Coding 。

 執行測試:
 執行單元測試來確定程式碼能正常工作。

 執行功能測試:
 執行功能測試 ( 基於相關使用者需求和任務卡片中的需
求)。

23
反覆持續性程序 Continuous process
 持續整合
 我們都知道開發工作是需要使用最新的版本同步開發
 每一個 Programmer 都會有做出不同的改變或新功能的
添加,在他們個人的電腦中
 XP 要求每個人需要在固定的短時間內上傳,或者是每當
發現重大錯誤,或成功時上傳。
 這可以有效避免,因為 cycle 導致的 delay 或 waste

24
反覆持續性程序 Continuous process
 軟體重構
 由於 XP 提倡 Coding 時只滿足目前的需求,並且以盡可
能簡單的方式實作。
 有時會碰上一套僵硬的系統,所謂僵硬的系統, XP 教
條認為當這種情況發生時,意味著系統正告訴你通過改
變系統架構以重構程式碼,使它更簡單、更泛用。
 僵硬系統 - 需要雙重(或多重)維護:
 功能變化需要對多份同樣(或類似)的程式碼進行修改;
或者對程式碼的一部分進行修改時會影響其它很多部分。

25
反覆持續性程序 Continuous process
 小型發佈
 把整個專案分成好幾的段落,進行 release ,在 project
開始就決定,何時要 release 個各段落。
 這樣的小型發佈,可以增進客戶對整個 project 的了解與
信心
 這些小型發佈,只是測試版,並不會繼續存在
 這也使得 User 可以在各部份提出自己的意見

26
共識 Shared understanding
 簡單設計
 第一個觀念“簡單是最好的”
 每當一個新的段落被完成, Programmer 必須思考,是
不是有更簡單的方法可以達成同樣目的
 如果是,則必須要選擇比較簡單的方法
 軟體重構也是用來完成,簡單化的工作

27
共識 Shared understanding
 集體所有制
 集體所有制表示每個人都對所有的程式碼負責;反過來
又意味著每個人都可以更改程式碼的任意部分。成對程
式設計對這一實踐貢獻良多:藉由在不同的 pair 中工作
,所有的 programmer 都能看到完全的 code 。
 集體所有制的一個主要優勢是提升了開發程序的速度,
因為一旦程式碼中出現錯誤,任何人都能修正它。
 當然在給予每個人修改程式碼的權限的情況下,可能存
在 Programmer 引入錯誤的風險,他 / 她們知道自己在
做什麼,卻無法預見某些依賴關係。完善的單元測試可
以解決這個問題:如果未被預見的依賴產生了錯誤,那
麼當單元測試執行時,它必定會失敗。
28
共識 Shared understanding
 程式設計標準 Standard
 在開始之前,整個團隊必須制定且同意一些標準的規則
 Code 的格式、 Language 的選擇、客戶的要求 ... 等

29
穩定標準的速率 Programmer welfare
 又稱“四十個工時”,這種聽起來像『大老闆的慈悲』的
規則, XP 認為應該內建成為一種工作倫理,準時下班
是一種美德。畢竟,如果家庭沒有了、身體健康沒有了
,就算寫出『宇宙無敵』的軟體,大概也找不到人分享
,很多書籍的作者,不都把書獻給家人嗎?
 它的實現,重點在於完整詳細的計畫,在 project 剛開
始,就決定好要在這個 release version 達成什麼樣的
目標。

30
爭論的觀點
 XP 也有其被爭論的一面:





沒有書面的詳細的規格說明書
客戶代表被安排在專案中
程式設計師以 pair 的方式工作
測試驅動的開發
 絕大多數設計活動都匆匆而過,並且是漸進式的,從
一個「最簡單的可能工作單位」開始並只有在其需要
時(測試失敗)才增加複雜性。
 只依靠單元測試促成為了設計紀律。

31
總結
 XP 針對的是中小型團隊和中小型專案,但世界上畢竟
還有大型專案跟超大型專案,究竟這種重視人甚於重視
製程方法論,能不能跟其他重視製程的方法論分庭抗禮
呢?
 當然 XP ,還需要時間來證明它自己!
 輕量級跟重量級分別代表著兩個極端,一邊是注重人甚
於製程,另一邊則是重視製程甚於人。
這代表一個不甚有經驗的人,也可以照著重量級製程的
種種規則一步步來,優點當然是穩定,缺點當然是僵化。
輕量級製程也差不多,好處是彈性,壞處是混亂。

32
總結
 所以,取長補短吧!導入任何製程都不免要做些修正,
沒辦法全盤複製的。導入 XP 時,有公式用公式,沒公
式用模式,如果都沒有,那就只好用常識了。

33
Reference
 極致軟體製程 ( 書,中譯版 )
http://140.109.17.94/Jyemii/xpcolumn/xpexplained/Tra
nslatePreface.htm
 Wikipedia- 極限製程 ( 中、英版 )
 Wikipedia- 軟體重構
 Mingster‘s Bliki 九月 2007
http://mingstert.blogspot.com/2007_09_01_archive.htm
l 中 Chinese about XP programming 一文
 新浪網
http://financenews.sina.com/sinacn/304-000106-109/2008-03-30/0500731317.html
 終極製程專欄
http://tropic.iis.sinica.edu.tw/xp/XP.htm
 http://www.xprogramming.com/xpmag/whatisxp.htm
34

More Related Content

What's hot

Estimation and Velocity - Scrum Framework
Estimation and Velocity - Scrum FrameworkEstimation and Velocity - Scrum Framework
Estimation and Velocity - Scrum FrameworkUpekha Vandebona
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
UnrealEngine4で合成音声を使いたい
UnrealEngine4で合成音声を使いたいUnrealEngine4で合成音声を使いたい
UnrealEngine4で合成音声を使いたいItsuki Inoue
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境KiyotomoHiroyasu
 
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)William Yeh
 
人生で大事なことは XP白本と参考文献に教わった
人生で大事なことは XP白本と参考文献に教わった 人生で大事なことは XP白本と参考文献に教わった
人生で大事なことは XP白本と参考文献に教わった Takeshi Kakeda
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?Yoshitaka Kawashima
 
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)Daichi Kitamura
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daikyon mm
 
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...Andreas Grabner
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVMYuki Tamura
 
Scrum Сhecklist (Russian)
Scrum Сhecklist (Russian)Scrum Сhecklist (Russian)
Scrum Сhecklist (Russian)Artem Glazkov
 
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in Scrum
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in ScrumA. Kamran's DoD and DoR: Definition of Done and Definition of Ready in Scrum
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in ScrumArman Kamran
 
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストJenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストHiroyuki Tanaka
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術Unity Technologies Japan K.K.
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかShunsuke (Sean) Osawa
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28th0x0472
 

What's hot (20)

Estimation and Velocity - Scrum Framework
Estimation and Velocity - Scrum FrameworkEstimation and Velocity - Scrum Framework
Estimation and Velocity - Scrum Framework
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
UnrealEngine4で合成音声を使いたい
UnrealEngine4で合成音声を使いたいUnrealEngine4で合成音声を使いたい
UnrealEngine4で合成音声を使いたい
 
RustによるGPUプログラミング環境
RustによるGPUプログラミング環境RustによるGPUプログラミング環境
RustによるGPUプログラミング環境
 
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)
從限制理論角度談敏捷導入階段 (Agile transition: a TOC perspective)
 
人生で大事なことは XP白本と参考文献に教わった
人生で大事なことは XP白本と参考文献に教わった 人生で大事なことは XP白本と参考文献に教わった
人生で大事なことは XP白本と参考文献に教わった
 
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
 
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)
Windowsマシン上でVisual Studio Codeとpipenvを使ってPythonの仮想実行環境を構築する方法(Jupyter notebookも)
 
ザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000daiザ・ジェネラリスト #5000dai
ザ・ジェネラリスト #5000dai
 
SCRUM Estimation
SCRUM EstimationSCRUM Estimation
SCRUM Estimation
 
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...
Application Quality Gates in Continuous Delivery: Deliver Better Software Fas...
 
12 分くらいで知るLuaVM
12 分くらいで知るLuaVM12 分くらいで知るLuaVM
12 分くらいで知るLuaVM
 
Scrum Сhecklist (Russian)
Scrum Сhecklist (Russian)Scrum Сhecklist (Russian)
Scrum Сhecklist (Russian)
 
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in Scrum
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in ScrumA. Kamran's DoD and DoR: Definition of Done and Definition of Ready in Scrum
A. Kamran's DoD and DoR: Definition of Done and Definition of Ready in Scrum
 
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテストJenkinsを使ったコンシューマゲームでのデプロイとテスト
Jenkinsを使ったコンシューマゲームでのデプロイとテスト
 
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのかチケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
チケット管理システム大決戦 JIRA vs Redmine vs Trac ユーザーが語る、なぜ私はこのツールを使うのか
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
 

Viewers also liked

共感力-暢銷商品的成功秘密
共感力-暢銷商品的成功秘密共感力-暢銷商品的成功秘密
共感力-暢銷商品的成功秘密Po Chung Wang
 
寫給大家的平面設計書
寫給大家的平面設計書寫給大家的平面設計書
寫給大家的平面設計書Po Chung Wang
 
Resintencia, mediciones y codigo de colores
Resintencia, mediciones y codigo de coloresResintencia, mediciones y codigo de colores
Resintencia, mediciones y codigo de coloresJairQQ
 
AnaClaudiaAlmeidaTaveira
AnaClaudiaAlmeidaTaveiraAnaClaudiaAlmeidaTaveira
AnaClaudiaAlmeidaTaveiraAna Taveira
 
Introduce Node.js Taiwan community
Introduce Node.js Taiwan communityIntroduce Node.js Taiwan community
Introduce Node.js Taiwan communityCaesar Chi
 
London Dine & Wine- A Bloomberg Brief Special Supplement
London Dine & Wine- A Bloomberg Brief Special Supplement London Dine & Wine- A Bloomberg Brief Special Supplement
London Dine & Wine- A Bloomberg Brief Special Supplement Bloomberg Briefs
 
Presentation1
Presentation1Presentation1
Presentation1Lu Jiaqi
 
La organizacion administrativa del estado mexicano
La organizacion administrativa del estado mexicanoLa organizacion administrativa del estado mexicano
La organizacion administrativa del estado mexicanoDaniel Garcia
 
三個鞠躬1030502cms
三個鞠躬1030502cms三個鞠躬1030502cms
三個鞠躬1030502cmsPhil Wen
 
The 9 Circles of Employee Engagement Hell
The 9 Circles of Employee Engagement Hell The 9 Circles of Employee Engagement Hell
The 9 Circles of Employee Engagement Hell Globoforce
 
CPD Newsletter, January-March 2016
CPD Newsletter, January-March 2016CPD Newsletter, January-March 2016
CPD Newsletter, January-March 2016Sazzad Mahmud Shuvo
 

Viewers also liked (18)

共感力-暢銷商品的成功秘密
共感力-暢銷商品的成功秘密共感力-暢銷商品的成功秘密
共感力-暢銷商品的成功秘密
 
Don't make me think
Don't make me thinkDon't make me think
Don't make me think
 
寫給大家的平面設計書
寫給大家的平面設計書寫給大家的平面設計書
寫給大家的平面設計書
 
PMI-TW Volunteer Practice (2009-2012)
PMI-TW Volunteer Practice (2009-2012)PMI-TW Volunteer Practice (2009-2012)
PMI-TW Volunteer Practice (2009-2012)
 
Resintencia, mediciones y codigo de colores
Resintencia, mediciones y codigo de coloresResintencia, mediciones y codigo de colores
Resintencia, mediciones y codigo de colores
 
AnaClaudiaAlmeidaTaveira
AnaClaudiaAlmeidaTaveiraAnaClaudiaAlmeidaTaveira
AnaClaudiaAlmeidaTaveira
 
Introduce Node.js Taiwan community
Introduce Node.js Taiwan communityIntroduce Node.js Taiwan community
Introduce Node.js Taiwan community
 
London Dine & Wine- A Bloomberg Brief Special Supplement
London Dine & Wine- A Bloomberg Brief Special Supplement London Dine & Wine- A Bloomberg Brief Special Supplement
London Dine & Wine- A Bloomberg Brief Special Supplement
 
MÍDIA KIT - CHARLES ARAUJO
MÍDIA KIT - CHARLES ARAUJOMÍDIA KIT - CHARLES ARAUJO
MÍDIA KIT - CHARLES ARAUJO
 
Presentation1
Presentation1Presentation1
Presentation1
 
Shockley ppt ch12
Shockley ppt ch12Shockley ppt ch12
Shockley ppt ch12
 
La organizacion administrativa del estado mexicano
La organizacion administrativa del estado mexicanoLa organizacion administrativa del estado mexicano
La organizacion administrativa del estado mexicano
 
Statistics
StatisticsStatistics
Statistics
 
三個鞠躬1030502cms
三個鞠躬1030502cms三個鞠躬1030502cms
三個鞠躬1030502cms
 
The 9 Circles of Employee Engagement Hell
The 9 Circles of Employee Engagement Hell The 9 Circles of Employee Engagement Hell
The 9 Circles of Employee Engagement Hell
 
¿Que sabe Ud. de nutrición?
¿Que sabe Ud. de nutrición?¿Que sabe Ud. de nutrición?
¿Que sabe Ud. de nutrición?
 
CPD Newsletter, January-March 2016
CPD Newsletter, January-March 2016CPD Newsletter, January-March 2016
CPD Newsletter, January-March 2016
 
The Role of Outreach?
The Role of Outreach?The Role of Outreach?
The Role of Outreach?
 

Similar to 極限編程XP

2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生appuniverz
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程hhliu
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列Chris Wang
 
專案進度追蹤
專案進度追蹤專案進度追蹤
專案進度追蹤黑狗 大
 
Why Scrum (敏捷式專案管理)
Why Scrum (敏捷式專案管理)Why Scrum (敏捷式專案管理)
Why Scrum (敏捷式專案管理)Yu Wei Shang
 
Scrum过程介绍
Scrum过程介绍Scrum过程介绍
Scrum过程介绍ben
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
專案管理理論基礎
專案管理理論基礎專案管理理論基礎
專案管理理論基礎黑狗 大
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)Josh Chen
 
软件工程 第一章
软件工程 第一章软件工程 第一章
软件工程 第一章浒 刘
 
移动开发敏捷实践
移动开发敏捷实践移动开发敏捷实践
移动开发敏捷实践Yuan Mai
 
敏捷软件开发——一个实践者的思考V1.2
敏捷软件开发——一个实践者的思考V1.2敏捷软件开发——一个实践者的思考V1.2
敏捷软件开发——一个实践者的思考V1.2Zhang Yongji
 
Extreme programming(古時候的簡報備份)
Extreme programming(古時候的簡報備份)Extreme programming(古時候的簡報備份)
Extreme programming(古時候的簡報備份)Hsin-lin Cheng
 
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗ryan4task
 

Similar to 極限編程XP (20)

2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生2012/05/23 AU Talk - 讓事情發生
2012/05/23 AU Talk - 讓事情發生
 
Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程Chapter 2 程式設計基本流程
Chapter 2 程式設計基本流程
 
Test
TestTest
Test
 
歡迎加入軟體構築行列
歡迎加入軟體構築行列歡迎加入軟體構築行列
歡迎加入軟體構築行列
 
專案進度追蹤
專案進度追蹤專案進度追蹤
專案進度追蹤
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 
软件工程2010
软件工程2010软件工程2010
软件工程2010
 
Why Scrum (敏捷式專案管理)
Why Scrum (敏捷式專案管理)Why Scrum (敏捷式專案管理)
Why Scrum (敏捷式專案管理)
 
Scrum过程介绍
Scrum过程介绍Scrum过程介绍
Scrum过程介绍
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
Xpp
XppXpp
Xpp
 
專案管理理論基礎
專案管理理論基礎專案管理理論基礎
專案管理理論基礎
 
Ch16
Ch16Ch16
Ch16
 
Pair Programming (结对编程)
Pair Programming (结对编程)Pair Programming (结对编程)
Pair Programming (结对编程)
 
软件工程 第一章
软件工程 第一章软件工程 第一章
软件工程 第一章
 
移动开发敏捷实践
移动开发敏捷实践移动开发敏捷实践
移动开发敏捷实践
 
敏捷软件开发——一个实践者的思考V1.2
敏捷软件开发——一个实践者的思考V1.2敏捷软件开发——一个实践者的思考V1.2
敏捷软件开发——一个实践者的思考V1.2
 
程式設計概論
程式設計概論程式設計概論
程式設計概論
 
Extreme programming(古時候的簡報備份)
Extreme programming(古時候的簡報備份)Extreme programming(古時候的簡報備份)
Extreme programming(古時候的簡報備份)
 
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗
ACCELERATE:精益軟體與DevOps背後的科學-重點整理、個人見解與實務經驗
 

極限編程XP

  • 2. 什麼是極限編程? (1/2)  一種軟體工程方法學  敏捷軟體開發中最富有成效的幾種方法學之一  強調程式設計師團隊與業務專家之間的緊密協作、面對 面的溝通(認為比書面的文檔更有效)、頻繁交付新的 軟體版本、緊湊而自我組織型的團隊、能夠很好地適應 需求變化的代碼編寫和團隊組織方法,也更注重做為軟 體開發中人的作用  傳統 V.S XP  與傳統在項目起始階段,定義好所有需求再費盡心思的 控制變化的方法相比, XP 希望有能力在項目周期的任 何階段去適應變化 2
  • 3. 什麼是極限編程? (2/2)  XP 其實它沒什麼新鮮的概念,而且大部分都是相當古 老的概念。有些專家認為 XP 是保守的  它所有的技巧都已在過去數十年或數百年內被證明有效  XP 的創新處在於:  把這些做法一舉囊括  確保這些做法都儘可能徹底的實施  確保這些做法都儘可能彼此截長補短 3
  • 4. 歷史  極限編程的創始者是 Kent Beck 、 Ward Cunningham 和 Ron Jeffries ,他們在克萊斯勒時提出 了極限編程方法。  1999 年 10 月發行《極限編程解析》( 2005 第二版 出版) By Kent Beck 4
  • 6. XP 的目標  極限編程的主要目標在於降低因需求變更而帶來的成本  極限編程透過引入基本價值、原則、方法等概念來達到 降低變更成本的目的 傳統 V.S. XP 6
  • 7. XP 的極致思維 (1/2)    如果程式碼檢查( code reviews )有益,我們應反覆 地檢查(搭檔編程, pair programming )。 如果測試有益,每個人都該常常做測試(單元測試, unit testing ),即使是客戶也不例外(功能測 試, function testing )。 如果設計有益,則應被當作每個人每天工作的一部分 (重整, refactoring )。 7
  • 8. XP 的極致思維 (2/2)  如果簡潔有益,我們應讓系統保持在能夠支援目前所需 功能的最簡單狀態(能夠運作的最簡單架構)。  架構如果重要,每個人都要常常反覆琢磨架構(對整個 系統下一個隱喻、象徵、或概念)。  整合測試如果重要,我們每天就會做上好幾次(持續整 合)。  短的開發週期如果有益,我們就把它縮短到真的真的非 常短 --- 短到可以用幾秒到幾分鐘到幾小時來計算,而 不是幾星期到幾個月到幾年(通盤規劃)。 8
  • 9. XP 可保証二件事  對程式師而言   XP 保証他們可以每天都做些真正有意義的事;他們再 不必獨自面對那些會令人驚慌的情況;他們將可以自己 掌握每件事,成功地做出系統;下他們能做的最佳決定 ,而不會做不是他們夠資格做的決定。 對客戶和經理人而言  XP 保証他們每個工作週,都可以獲致最大的利益;每 隔幾週,就會看到他們所在乎目標的具體進度;也可以 在不導致過高費用的狀況下,在專案進行到一半時改變 其進行方向。 析》 By 《極限編程解 9
  • 10. XP 的價值      溝通 簡單 回饋 ( 設計師 & 客戶的測試 ) 勇氣 尊重 ( 第二版最新添加的價值 ) 10
  • 12. XP 的特徵  增量和反覆式的開發  一次小的改進跟著一個小的改進        反覆性,通常是自動重複的單元測試 成對程式設計 在程式設計團隊中包含 User 軟體重構 共享的程式碼所有權 簡單 回饋 12
  • 13. XP 核心的實踐  XP 的核心可被分為四個範圍  小規模回饋 Fine scale feedback  測試驅動開發、策劃遊戲、客戶、成對程式設計  反覆持續性程序 Continuous process  持續整合、設計最佳化 ( 軟體重構 ) 、小型發佈  共識 ( 標準與規章 ) Shared understanding  簡單設計、集體程式碼所有、程式設計標準 / 規約  程式設計者的福利 Programmer welfare  穩定標準的速率 13
  • 14. 小規模回饋 Fine scale feedback  測試  沒有經過測試的程式碼什麼都不是  XP 認為,如果一個函數沒有經過測試就不能認為它可以 工作  單元測試  用以測試一小段程式碼的自動測試。在 XP 中,需要在程 式碼編輯前就編輯單元測試。這種方式的目的是激勵 Programmer 思考自己的 Code 在何種條件下會出錯。 XP 認為當 Programmer 無法再想出更多能使 Code 出錯的情 況時,這些程式碼便算完成。 14
  • 15. 小規模回饋 Fine scale feedback  成對設計  它迫使我們與別人溝通、把別人跟自己的想法看得更清 楚、也加快了寫程式的速度,對新手而言(每個人都是 某方面的新手),這更是一條學習的捷徑,大家都知道 ,有人當場教,學得最快。  一個 programmer 控制電腦並且主要考慮編碼細節。另 一個主要注意整體結構,不斷的對第一個 programmer 寫的程式碼進行反饋。  成對的方式不是固定的 :  XP 甚至建議程式設計師盡量交叉結對。這樣,每個人都可 以知道其它人的工作,每個人都對整個系統熟悉,成對程 式設計加強了團隊內的溝通。 15
  • 16. 小規模回饋 Fine scale feedback  客戶 ( 現場客戶 )  在 XP 中,「客戶」並不是為系統付帳的人,而是真正 使用該系統的人。  極致編程認為客戶應該時刻在現場解決問題。  例如:在團隊開發一個財務管理系統時,開發小組內應包 含一位財務管理人員  一個小組理論上需要一個 User 在身邊 , 制定軟體的工作 需求和優先等級 , 並且能在問題出現的時候馬上回答 ( 實 際工作中,這個角色是由客戶代理商完成的 ) 16
  • 17. 小規模回饋 Fine scale feedback  策略遊戲  策劃程序分為兩部分  發佈策劃  反覆狀態 17
  • 18. 策略遊戲  發佈策略  照價值排序:業務人員按照商業價值為使用者需求排序。  按風險排序:開發者按風險為使用者需求排序。  設定周轉率:開發者決定以怎樣的速度開展專案。  選擇範圍:挑選在下一個版本 ( 工作點 ) 中需要被完成的 使用者需求,基於使用者需求決定發佈日期。  值得一提的是  在作業階段開發人員和業務人員可以「操縱」整個程序。 意指他們可以做出改變。某個使用者的需求,或是不同 使用者需求間相對優先等級,都有可能改變;預估時間 也可能出現誤差。也就是說這是在整個策略中,准許做 出相應調整的機會。 18
  • 19. 策略遊戲  反覆狀態 ( 計畫 )- 探索階段  關於建立任務和預估實施時間。  收集使用者需求:  收集並編輯下一個發布版本的所有使用者需求。  組合 / 分割任務:  如果程式設計師因為任務太大或太小而不能預估任務完成時 間,則需要組合或分割此任務。  預估任務:  預測需要實作此任務的時間。 19
  • 20. 策略遊戲  反覆狀態 ( 計畫 )- 約定階段  在約定階段以不同需求作為參考的任務被指派到 Programmer  接受任務:  每個 Programmer 都挑選一個所需負責的任務。  預估任務:  由於 Programmer 對此任務負責,所以必須給出一個完成任 務的估計時間。  設定負載係數:  負載係數表示每個 Programmer 在一個反覆中理想的開發時 間。  一周工作 40 小時,其中 5 小時用於開會,則負載係數不會 超過 35 小時。 20
  • 21. 策略遊戲  反覆狀態 ( 計畫 )- 約定階段 2  平衡:當團隊中所有 Programmer 都已經被配置了任務 ,便會在預估時間和負載係數間做出比較。任務配置在 Programmer 中達到平衡。如果有 Programmer 的開發 任務過重,其它 Programmer 必須接手他 / 她的一部分 任務,反之亦然。 21
  • 22. 策略遊戲  反覆狀態 ( 計畫 )- 作業階段  各個任務是在反覆計劃的作業階段中一步步實作的。  取得一張任務卡片:  Programmer 取得一張由自己負責的任務的卡片。  找尋一名同伴:  這個 Programmer 將和另一位 Programmer 一同完成開發工 作,也就是成對設計。  設計這個任務:  如果需要,兩位 Programmer 會設計這個任務所達成的功能。 22
  • 23. 策略遊戲  反覆狀態 ( 計畫 )- 作業階段 2  編輯單元測試:  在 Programmer 開始編輯實作功能的程式碼之前,他 / 她 們首先編輯自動測試。  編輯程式碼:  兩位 Programmer 開始 Coding 。  執行測試:  執行單元測試來確定程式碼能正常工作。  執行功能測試:  執行功能測試 ( 基於相關使用者需求和任務卡片中的需 求)。 23
  • 24. 反覆持續性程序 Continuous process  持續整合  我們都知道開發工作是需要使用最新的版本同步開發  每一個 Programmer 都會有做出不同的改變或新功能的 添加,在他們個人的電腦中  XP 要求每個人需要在固定的短時間內上傳,或者是每當 發現重大錯誤,或成功時上傳。  這可以有效避免,因為 cycle 導致的 delay 或 waste 24
  • 25. 反覆持續性程序 Continuous process  軟體重構  由於 XP 提倡 Coding 時只滿足目前的需求,並且以盡可 能簡單的方式實作。  有時會碰上一套僵硬的系統,所謂僵硬的系統, XP 教 條認為當這種情況發生時,意味著系統正告訴你通過改 變系統架構以重構程式碼,使它更簡單、更泛用。  僵硬系統 - 需要雙重(或多重)維護:  功能變化需要對多份同樣(或類似)的程式碼進行修改; 或者對程式碼的一部分進行修改時會影響其它很多部分。 25
  • 26. 反覆持續性程序 Continuous process  小型發佈  把整個專案分成好幾的段落,進行 release ,在 project 開始就決定,何時要 release 個各段落。  這樣的小型發佈,可以增進客戶對整個 project 的了解與 信心  這些小型發佈,只是測試版,並不會繼續存在  這也使得 User 可以在各部份提出自己的意見 26
  • 27. 共識 Shared understanding  簡單設計  第一個觀念“簡單是最好的”  每當一個新的段落被完成, Programmer 必須思考,是 不是有更簡單的方法可以達成同樣目的  如果是,則必須要選擇比較簡單的方法  軟體重構也是用來完成,簡單化的工作 27
  • 28. 共識 Shared understanding  集體所有制  集體所有制表示每個人都對所有的程式碼負責;反過來 又意味著每個人都可以更改程式碼的任意部分。成對程 式設計對這一實踐貢獻良多:藉由在不同的 pair 中工作 ,所有的 programmer 都能看到完全的 code 。  集體所有制的一個主要優勢是提升了開發程序的速度, 因為一旦程式碼中出現錯誤,任何人都能修正它。  當然在給予每個人修改程式碼的權限的情況下,可能存 在 Programmer 引入錯誤的風險,他 / 她們知道自己在 做什麼,卻無法預見某些依賴關係。完善的單元測試可 以解決這個問題:如果未被預見的依賴產生了錯誤,那 麼當單元測試執行時,它必定會失敗。 28
  • 29. 共識 Shared understanding  程式設計標準 Standard  在開始之前,整個團隊必須制定且同意一些標準的規則  Code 的格式、 Language 的選擇、客戶的要求 ... 等 29
  • 30. 穩定標準的速率 Programmer welfare  又稱“四十個工時”,這種聽起來像『大老闆的慈悲』的 規則, XP 認為應該內建成為一種工作倫理,準時下班 是一種美德。畢竟,如果家庭沒有了、身體健康沒有了 ,就算寫出『宇宙無敵』的軟體,大概也找不到人分享 ,很多書籍的作者,不都把書獻給家人嗎?  它的實現,重點在於完整詳細的計畫,在 project 剛開 始,就決定好要在這個 release version 達成什麼樣的 目標。 30
  • 31. 爭論的觀點  XP 也有其被爭論的一面:     沒有書面的詳細的規格說明書 客戶代表被安排在專案中 程式設計師以 pair 的方式工作 測試驅動的開發  絕大多數設計活動都匆匆而過,並且是漸進式的,從 一個「最簡單的可能工作單位」開始並只有在其需要 時(測試失敗)才增加複雜性。  只依靠單元測試促成為了設計紀律。 31
  • 32. 總結  XP 針對的是中小型團隊和中小型專案,但世界上畢竟 還有大型專案跟超大型專案,究竟這種重視人甚於重視 製程方法論,能不能跟其他重視製程的方法論分庭抗禮 呢?  當然 XP ,還需要時間來證明它自己!  輕量級跟重量級分別代表著兩個極端,一邊是注重人甚 於製程,另一邊則是重視製程甚於人。 這代表一個不甚有經驗的人,也可以照著重量級製程的 種種規則一步步來,優點當然是穩定,缺點當然是僵化。 輕量級製程也差不多,好處是彈性,壞處是混亂。 32
  • 33. 總結  所以,取長補短吧!導入任何製程都不免要做些修正, 沒辦法全盤複製的。導入 XP 時,有公式用公式,沒公 式用模式,如果都沒有,那就只好用常識了。 33
  • 34. Reference  極致軟體製程 ( 書,中譯版 ) http://140.109.17.94/Jyemii/xpcolumn/xpexplained/Tra nslatePreface.htm  Wikipedia- 極限製程 ( 中、英版 )  Wikipedia- 軟體重構  Mingster‘s Bliki 九月 2007 http://mingstert.blogspot.com/2007_09_01_archive.htm l 中 Chinese about XP programming 一文  新浪網 http://financenews.sina.com/sinacn/304-000106-109/2008-03-30/0500731317.html  終極製程專欄 http://tropic.iis.sinica.edu.tw/xp/XP.htm  http://www.xprogramming.com/xpmag/whatisxp.htm 34