极限编程实践
1、客戶作為團(tuán)隊成員
? ? ? ? 誰是客戶?XP團(tuán)隊中的客戶是指定義產(chǎn)品的特性并排列這些特性優(yōu)先級的人或團(tuán)體。
最好是客戶和開發(fā)人員在一個房間中工作。
?
2、用戶故事
? ? ? ? 對于做計劃而言,了解需求只需要做到能夠估算它的程度就足夠了,需求的特定細(xì)節(jié)很可能會隨著時間而改變。新系統(tǒng)問世是關(guān)注需求的最好時刻。
? ? ? ? 在XP中,我們和客戶反復(fù)討論,以獲取對于需求細(xì)節(jié)的理解,但是不去捕獲那些細(xì)節(jié)。用戶故事(user stories)就是正在進(jìn)行的關(guān)于需求談話的助記符。它是一個計劃工具,客戶可以使用它并根據(jù)它的優(yōu)先級和估算代價來安排實現(xiàn)該需求的時間。
?
3、短交付周期
? ? ? ? XP項目每兩周交付一次可以工作的軟件。
3-1、迭代計劃
? ? ? ? 每次迭代通常耗時兩周。一旦迭代開始,客戶就同意不再修改當(dāng)次迭代中用戶故事的定義和優(yōu)先級別。迭代期間,開發(fā)人員可以自由地將用戶故事分解成任務(wù)(task),并依據(jù)最優(yōu)的順序來開發(fā)這些任務(wù)。
3-2、發(fā)布計劃
? ? ? ? XP團(tuán)隊通常會創(chuàng)建一個計劃來規(guī)劃隨后大約6次迭代的內(nèi)容。它表示了一次較大的交付,通常此次交付會被加入到產(chǎn)品中。發(fā)布計劃是由一組客戶根據(jù)開發(fā)人員給出的預(yù)算所選擇的、排好優(yōu)先級別的用戶故事組成。
?
4、驗收測試
? ? ? ? 驗收測試使用能夠讓它們自動并且反復(fù)運行的某種腳本語言編寫,這些測試共同來驗證系統(tǒng)按照客戶指定的行為運行。
? ? ? ? 一旦通過一項驗收測試,就將該測試加入到已經(jīng)通過的驗收測試集合中,并決不允許該測試再次失敗。
?
5、結(jié)對編程
? ? ? ? 所有的產(chǎn)品(production)代碼都是由結(jié)對的程序員使用同一臺電腦共同完成的。兩個人強烈地(intensely)進(jìn)行著交互,他們都全身心地投入到軟件的編寫中。
? ? ? ? 兩人頻繁互換角色。結(jié)對的關(guān)系每天至少要改變一次。團(tuán)隊的每個人都與其他成員一起工作過,并且都參與了迭代中所涉及的每項工作。
? ? ? ? Laurie Williams 和 Nosek 的研究表明,結(jié)對非但不會降低開發(fā)團(tuán)隊的效率,而且會大大減少缺陷率。
?
6、測試驅(qū)動開發(fā)
? ? ? ? 當(dāng)為了測試用例通過而編寫代碼時,這樣的代碼就被定義為可測試的代碼。這樣做會強烈地激發(fā)你去解除各個模塊間的耦合,這樣能夠獨立地對它們進(jìn)行測試。
?
7、集體所有權(quán)
? ? ? ? 結(jié)對編程中的每一對都具有檢出(check out)代碼并修改的權(quán)力。沒有程序員對任何一個特定的模塊或技術(shù)單獨負(fù)責(zé)。
?
8、持續(xù)集成
? ? ? ? 第一個檢入(check in)的只要完成檢入就可以了,所有其他的人負(fù)責(zé)代碼的合并(merge)工作。
?
9、可持續(xù)的開發(fā)速度
? ? ? ? 軟件項目是馬拉松長跑,團(tuán)隊必須要有意識地保持穩(wěn)定、適中的速度。
????????XP 的規(guī)則是不允許團(tuán)隊加班工作。除非是在發(fā)版前的一個星期,并且能夠一蹴而就,則允許加班。
?
10、開放的工作空間
? ? ? ? 團(tuán)隊在一個開放的房間中一起工作,房間中有一些桌子,每張桌子上擺放了兩到三臺工作站,每臺工作站前有給結(jié)對編程的人員預(yù)備的兩把椅子,墻壁上掛滿了狀態(tài)圖標(biāo)、任務(wù)明細(xì)表、UML圖等等。
? ? ? ? 密歇根大學(xué)的一項研究表明,在“充滿積極討論的屋子(war room)”里工作,生產(chǎn)率非但不會降低,反而會成倍地提高。
?
11、計劃游戲
? ? ? ? 計劃游戲(planning game)的本質(zhì)是劃分業(yè)務(wù)人員和開發(fā)人員的職責(zé)。業(yè)務(wù)人員(即客戶)決定特性(feature)的重要性,開發(fā)人員決定實現(xiàn)一個特性所花費的代價。
?
12、簡單的設(shè)計
? ? ? ? XP 團(tuán)隊使他們的設(shè)計盡可能地簡單、具有表現(xiàn)力(expressive)。
12-1、考慮能夠工作的最簡單的事情
? ? ? ? XP 團(tuán)隊總是盡可能尋找能實現(xiàn)當(dāng)前用戶故事的最簡單的設(shè)計。
12-2、你不需要它
? ? ? ? 除非有明顯的證據(jù)表明引入一個基礎(chǔ)結(jié)構(gòu)更加合算時,團(tuán)隊才會引入這個基礎(chǔ)結(jié)構(gòu)。
12-3、一次,并且只有一次
? ? ? ? XP 不能容忍重復(fù)的代碼。
?
13、重構(gòu)
? ? ? ? 重構(gòu)是持續(xù)進(jìn)行的,通過重構(gòu),我們可以持續(xù)地保持盡可能干凈、簡單并且具有表現(xiàn)力的代碼。
?
14、隱喻
? ? ? ? 隱喻(metaphore)將整個系統(tǒng)聯(lián)系在一起的全局視圖:它是系統(tǒng)的未來景象,是它使得所有單獨模塊的位置和外觀(shape)變得明顯直觀。
? ? ? ? 隱喻通常可以歸納為一個名字系統(tǒng)。這些名字提供了一個系統(tǒng)組成元素的詞匯表,并且有助于定義它們之間的關(guān)系。
? ? ? ? eg.一個每秒60個字符的速度將文本輸出到屏幕的系統(tǒng)。
? ? ? ? 我們用裝卸卡車拖運垃圾來比喻整個系統(tǒng)。緩沖區(qū)是小卡車,屏幕是垃圾場,程序是垃圾制造者。
?
總結(jié)
- 上一篇: Oracle常用sql操作总结
- 下一篇: Spring Data JPA 从入门到