《硝煙中的Scrum和XP》是作者Henrik Kniberg講述了一個團隊實施Scrum開發(fā)的過程汰蓉,針對Scrum實施的每個過程進行詳細的闡述。首先提到了如何編寫B(tài)acklog熊榛,介紹了Backlog應(yīng)該包含的一些信息舒帮,如ID、名稱澡罚、重要性、初始估算肾请、如何演示及備注等留搔,根據(jù)具體的業(yè)務(wù)可包含其他方面的信息,接下來的幾節(jié)主要是圍繞Sprint planning meeting展開的铛铁。
Scrum與傳統(tǒng)的軟件開發(fā)相比隔显,它更強調(diào)會議却妨。會議有計劃會議、每日會議?和?回顧會議荣月。在計劃會議中管呵,它強調(diào)產(chǎn)品經(jīng)理與Scrum Master以及團隊共同參與會議,然后確定每個Sprint周期內(nèi)要完成的故事哺窄,并將每個故事拆分成更小的故事捐下,最后把故事拆分成任務(wù),并估算每個任務(wù)的完成時間萌业。
????確定完計劃之后坷襟,接下來整個團隊每天都會進行短時間的每日會議,來確定前一天完成了哪些事情生年,以及接下來的一天要做哪些事情婴程。每日會議中可能會發(fā)生各種各樣的情況,包括會議時間多長抱婉、會議沒有結(jié)果等档叔,作者詳述了他們是如何處理這些事情的。這對于我們在實際項目中是非常寶貴的經(jīng)驗蒸绩。在此次培訓(xùn)前由于各種原因沒有將回顧會議放到日程中衙四。今后會在實際的項目中將回顧會議放到日程中,讓項目借鑒以往的成功經(jīng)驗患亿,并吸取教訓(xùn)传蹈,可以讓團隊少走很多彎路。
????Scrum是偏向于管理和組織實踐的步藕,但是軟件項目離不開編程惦界,所以項目要取得很大的成功還需要注重編程實踐,XP則恰恰彌補了這一點咙冗。將Scrum與XP整合起來使用沾歪,管理與編程想結(jié)合,最終項目可以獲得更大的成功雾消。
下面是重點章節(jié)的筆記:
第2章 怎樣編寫產(chǎn)品backlog
產(chǎn)品backlog是Scrum的核心瞬逊,是一個需求、或故事仪或、或特性等組成的列表,按照重要性的級別進行了排序士骤。故事包括這樣一些字段:名稱(簡短的范删、描述性的故事名)、重要性拷肌、初始估算(完成所需的工作量)到旦、如何演示旨巷、注解(想關(guān)的解釋說明、資料的引用)其他額外字段:Components(組件)——例如“數(shù)據(jù)庫添忘,服務(wù)器采呐,客戶端”。Requestor(請求者)——產(chǎn)品負責(zé)人可能需要記錄是哪個客戶或相關(guān)干系人最先提出了這項需求搁骑,在后續(xù)開發(fā)過程中向他提供反饋斧吐。Bug tracking ID(Bug跟蹤ID)——比如bug跟蹤系統(tǒng)(jira)
第3章 怎樣準備sprint計劃
在sprint計劃會議之前,要確保產(chǎn)品backlog的井然有序:
產(chǎn)品backlog必須存在仲器。
一個人產(chǎn)品只能有一個產(chǎn)品backlog和一個產(chǎn)品負責(zé)人煤率。
所有重要的backlog條目都已經(jīng)根據(jù)重要性被評過分。(評分是產(chǎn)品負責(zé)人獨有的權(quán)利)
產(chǎn)品負責(zé)人應(yīng)該理解每個故事的含義乏冀,要知道為什么這個故事會在這里
第4章 我們怎樣制定sprint計劃
Sprint計劃會議非常關(guān)鍵蝶糯,應(yīng)該算是Scrum中最重要的活動。舉辦Sprint計劃會議辆沦,是為了讓團隊獲得足夠的信息昼捍,能夠在幾個星期內(nèi)不受干擾的工作,也是為了讓產(chǎn)品負責(zé)人能對此有充分的信心肢扯。Sprint會議會產(chǎn)生一些實實在在的成功:
sprint目標妒茬。
團隊成員名單,以及他們的投入程度鹃彻。
sprint backlog郊闯,即sprint中的故事列表。
確定好sprint演示日期蛛株。
確定好每日scrum例會的時間和地點团赁。
每個故事都含有三個變量,范圍(scope)和重要性(importance)由產(chǎn)品負責(zé)人設(shè)置谨履。估算(estimate)由團隊設(shè)置欢摄。在sprint計劃會議上,這三個變量會逐步得到調(diào)整優(yōu)化笋粟。
Scrum中的一切事情都有時間盒怀挠。在sprint計劃會議之前初步制定一個時間表,可以減少打破時間盒的風(fēng)險害捕。
產(chǎn)品負責(zé)人對sprint目標進行總體介紹绿淋,概括產(chǎn)品backlog。團隊估算時間尝盼,在必要的情況下拆分backlog條目吞滞。產(chǎn)品負責(zé)人在必要時修改重要性評分。理清每個條目的含義。所有重要性高的backlog條目都要填寫“如何演示”裁赠。團隊選擇要放入sprint中的故事殿漠。計算生產(chǎn)率,用作核查工作安排的基礎(chǔ)佩捞。
決定哪些故事需要在這個sprint中完成
產(chǎn)品負責(zé)人和團隊需要對“完成”有一致的定義绞幌。
團隊成員必須要對故事內(nèi)容有一定的理解才能進行估算。要求每個人都做估算一忱,我們就可以確保他們都理解了每個條目的內(nèi)容莲蜘。這樣就為大家在sprint中相互幫助夯實了基礎(chǔ),也有助于故事中的重要問題被盡早發(fā)現(xiàn)掀潮。
如果要求每個人都對故事做估算菇夸,我們就會常常發(fā)現(xiàn)兩個人對同一個故事的估算結(jié)果差異很大。我們應(yīng)該盡早發(fā)現(xiàn)這些問題并就此進行討論仪吧。
把故事拆分成任務(wù)庄新。故事是可以交付的東西,是產(chǎn)品負責(zé)人所關(guān)心的薯鼠。把技術(shù)故事變成可以衡量業(yè)務(wù)價值的普通故事择诈。有助于產(chǎn)品負責(zé)人作出正確的權(quán)衡。
把產(chǎn)品backlog放到Jira上出皇。把bug與其他故事同等看待羞芍。
一個可供參考的Sprint計劃會議日程:
SPRINT 計劃會議:13:00 - 17:00(每小時休息10分鐘)
13:00-13:30:產(chǎn)品負責(zé)人對sprint目標進行總體介紹,概況產(chǎn)品backlog郊艘,定下演示時間荷科。
13:30-15:00:團隊估算時間,在必要的情況下拆分backlog條目纱注。產(chǎn)品負責(zé)人在必要時修重要性評級畏浆,所有重要性高的條目都要寫清示how to demo“如何演示”。
15:00-16:00:團隊選擇放入sprint中的故事狞贱。計算生成率刻获,用作核查工作安排的基礎(chǔ)。
16:00-17:00:為每日scrum會議安排固定的時間和地點瞎嬉,把故事進一步分解為任務(wù)蝎毡。
第7章 我們怎樣布置團隊房間
讓團隊坐在一起⊙踉妫“一起”意味著:
互相聽到:所有人都可以彼此交談沐兵,不必大聲喊,不必離開座位便监。
互相看到:所有人都可以看到彼此扎谎,都能看到任務(wù)板——不用非得近到可以看清楚內(nèi)容,但至少可以看到個大概。
隔離:如果你們整個團隊突然站起來簿透,自發(fā)形成一個激烈的設(shè)計討論,團隊外的任何人都不會被打擾到解藻。反之亦然老充。
第9章 我們怎樣進行sprint演示
堅持所有的sprint都結(jié)束于演示。團隊的成果得到認可螟左。他們會感覺很好啡浊。其他人可以了解你的團隊在做些什么。演示可以吸引相關(guān)干系人的注意胶背,并得到重要反饋巷嚣。團隊間可以相互交流,討論各自的工作钳吟。
Sprint演示檢查列表廷粒。
確保清晰闡述了sprint目標。如果在演示上有些人對產(chǎn)品一無所知红且,那就花上幾分鐘來進行描述坝茎。
讓演示關(guān)注于業(yè)務(wù)層次,注意力放在“我們做了什么”暇番,而不是“我們怎么做的”嗤放。
可能的話,讓觀眾自己試一下產(chǎn)品壁酬。
第10章 我們怎樣做sprint回顧
回顧是Scrum中第二重要的事情(最重要的是sprint計劃會議)臭脓,因為這是做改進的最佳時機耕赘。
我們?nèi)绾谓M織回顧。
根據(jù)要討論的內(nèi)容范圍,設(shè)定時間為1至3個小時米同。
參與者:產(chǎn)品負責(zé)人,整個團隊還有我自己鲸阻。
我們換到一個封閉的房間中切诀,或者舒適的沙發(fā)角,或者屋頂平臺等等類似的場所斜纪。只要能夠在不受干擾的情況下討論就好贫母。
指定某人當(dāng)秘書。
Scrum master向大家展示sprint backlog盒刚,在團隊的幫助下對sprint做總結(jié)腺劣。包括重要事件和決策等。
輪流發(fā)言因块。每個人都有機會在不被人打斷的情況下進出自己的想法橘原,他認為什么是好的,哪些可以做的更好,哪些需要在下個sprint中改變趾断。
Scrum master對具體建議進行總結(jié)拒名,得出下個sprint需要改進的地方。
我們怎樣才能在下個sprint中做的更好芋酌。
Good:如果我們可以重做同一個sprint增显,哪些做法可以保持。
Could have done better:如果我們可以重做同一個sprint脐帝,哪些做法需要改變同云。
Improvements:有關(guān)將來如何改進的具體想法。投票決定下個sprint所要采取措施的優(yōu)先級堵腹。
Scrum回顧會議炸站,如果過于沉寂,他應(yīng)該問一些簡單而目標明確的問題疚顷,以刺激團隊展開討論旱易。例如“如果時間可以倒流,從第一天重新開始這個sprint荡含,那你覺得哪些事情會用其他方式來做咒唆?
第12章 怎樣制定發(fā)布計劃
定義你的驗收標準。
產(chǎn)品負責(zé)人還會定義一系列的驗收標準释液,它從合同的角度將產(chǎn)品backlog中重要性級別的含義進行了簡單分類全释。下面是驗收標準規(guī)則的一個例子:
所有重要性>=100的條目都必須在1.0版本中發(fā)布,不然我們就會被罰款到死翹翹误债。
所有重要性在50-99之間的條目應(yīng)該在1.0中發(fā)布浸船,不過也許我們可以在緊接著的一個快速發(fā)布版中完成這些。
重要性在25-49之間的條目也都是需要的寝蹈,不過可以在1.1版本中發(fā)布李命。
重要性<25的條目都是不確定的,也許永遠不會用到箫老。
對最重要的條目進行時間估算封字。P78
對制定發(fā)布計劃,產(chǎn)品負責(zé)人需要進行時間估算耍鬓,至少是要估算在合同中包含的故事阔籽。跟sprint計劃會議一樣,這是產(chǎn)品負責(zé)人和團隊協(xié)作共同完成的——團隊進行估算牲蜀,產(chǎn)品負責(zé)人描述條目內(nèi)容笆制,回答問題。如果時間估算最后被證明接近正確結(jié)果涣达,那它就是有價值的在辆;如果結(jié)果有所偏離证薇,例如偏差30%,價值則有所降低了匆篓;如果它跟實際結(jié)果一點關(guān)系都沒有浑度,那就完全沒用了。
第13章:怎么結(jié)合使用scrum和xp
結(jié)對編程:一旦嘗試之后會迅速的喜歡上它鸦概。
測試驅(qū)動開發(fā)TDD:對我來說俺泣,它比scrum和xp還要重要!TDD意味著你要先寫一個自動測試完残,然后編寫恰好夠用的代碼,讓他通過這個測試横漏,接著對代碼進行重構(gòu)谨设,主要是提高他的可讀性和消除重復(fù)。他會把開發(fā)-構(gòu)建-測試這三者構(gòu)成的循環(huán)變得奇快無比缎浇,同時還可以充當(dāng)一個安全網(wǎng)扎拣,讓開發(fā)人員有足夠的信息頻繁重構(gòu),伴隨著系統(tǒng)的增長素跺,設(shè)計依然可以保持整潔和簡單二蓝。
增量設(shè)計:一開始就應(yīng)該保持設(shè)計簡單化,然后不斷的進行改進指厌,而不是一開始女里保證它的正確性刊愚,然后凍結(jié)它,不再改變踩验。持續(xù)的設(shè)計改進鸥诽,再很大程度上得益于TDD。
持續(xù)集成:是解決“可是箕憾,它在我的電腦上一切正衬到瑁……”這一問題的終極武器!
代碼集體所有權(quán):結(jié)對編程會自然提高代碼所有權(quán)袭异,這樣團隊就會變得健壯钠龙,不會因為個別關(guān)鍵人物的缺席而影響整個團隊。
充滿信息的工作空間:所有團隊都可以有效的利用白板和空的墻壁空間御铃,貼滿各種關(guān)于產(chǎn)品和項目的信息碴里。
第14章 我們怎樣做測試
在理想化的Scrum世界中,每個sprint最終會產(chǎn)生一個可部署的系統(tǒng)版本畅买。盡可能縮短驗收測試的時間并闲。說得更明白一些,把需要花在驗收測試階段上的時間減到最少谷羞。我們的做法是:
全力提高Scrum團隊交付的代碼質(zhì)量帝火。
全力提高人工測試的效率溜徙。
把測試人員放到Scrum團隊中。
每個sprint少做點工作
17章 Scrum master檢查列表
sprint開始階段:
sprint會議之后犀填,創(chuàng)建sprint信息頁蠢壹,在wiki上創(chuàng)建從dashboard指向創(chuàng)建頁面的連接;把頁面打印出來九巡,貼在通過你們團隊工作區(qū)域之外的墻上图贸,讓經(jīng)過的人都可以看到。
給每個人發(fā)郵件冕广,聲明sprint已啟動疏日。郵件中要包含sprint目標和指向sprint信息頁的連接。
更新sprint數(shù)據(jù)文檔撒汉。加入估算生產(chǎn)率沟优、團隊大小和sprint長度等等。
每一天:
確保每日scrum會議可以按時開始和結(jié)束睬辐。
為了保證sprint可以如期完成挠阁,需要適當(dāng)?shù)脑鰟h故事。確保產(chǎn)品負責(zé)人了解這些變化溯饵。
確保團隊可以及時得知sprint backlog和燃盡圖的最新狀態(tài)侵俗。
確保存在的問題和障礙都能被解決,并報告給產(chǎn)品負責(zé)人以及開發(fā)主管丰刊。
sprint結(jié)束時:
進行開放式的sprint演示隘谣。
在演示開始前一兩天,就要通知到每個人啄巧。
與整個團隊以及產(chǎn)品負責(zé)人一起開sprint回顧會議洪橘。
更新sprint數(shù)據(jù)文檔,加入實際生產(chǎn)率和回顧會議中總結(jié)出的關(guān)鍵點