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