在CMM(能力成熟度模型Capability Maturity Model的縮寫系谐,是一種側(cè)重于軟件開發(fā)過程的管理及工程能力的提高與評估的開發(fā)模型)神話崩潰以后道伟,敏捷開發(fā)逐漸引起了人們的關(guān)注,并被寄予厚望篮灼。下面我們就來談一談敏捷開發(fā)相關(guān)的一些知識。
敏捷開發(fā)的起源
我們大部分人都學(xué)過瀑布開發(fā)模型,它是以文檔為驅(qū)動(dòng)的浇坐。因?yàn)樵谄俨嫉恼麄€(gè)開發(fā)過程中,開發(fā)人員根據(jù)需求文檔進(jìn)行開發(fā)黔宛,一切以文檔為依據(jù)近刘。敏捷開發(fā)(Agile Development)是一種以人為核心、迭代臀晃、循序漸進(jìn)的開發(fā)方法觉渴,是一種軟件開發(fā)的流程,它會(huì)指導(dǎo)我們用規(guī)定的環(huán)節(jié)去一步一步完成項(xiàng)目的開發(fā)徽惋;而這種開發(fā)方式的主要驅(qū)動(dòng)核心是人案淋,注重的是人與人之間,面對面的交流险绘;它只寫有必要的文檔踢京,或盡量少寫文檔;采用的是迭代式開發(fā)隆圆。
敏捷開發(fā)提倡將一個(gè)完整的軟件版本劃分為多個(gè)迭代漱挚,每個(gè)迭代實(shí)現(xiàn)不同的特性。重大的渺氧、優(yōu)先級高的特性優(yōu)先實(shí)現(xiàn)旨涝,風(fēng)險(xiǎn)高的特性優(yōu)先實(shí)現(xiàn)。在項(xiàng)目的早期就將軟件的原型開發(fā)出來,并基于這個(gè)原型在后續(xù)的迭代不斷完善白华。迭代開發(fā)的好處是:盡早編碼慨默,盡早暴露項(xiàng)目的技術(shù)風(fēng)險(xiǎn)。盡早使客戶見到可運(yùn)行的軟件弧腥,并提出優(yōu)化意見厦取。可以分階段提早向不同的客戶交付可用的版本管搪。
在每個(gè)迭代中虾攻,架構(gòu)師負(fù)責(zé)將所有的特性分解成多個(gè)Story Card。每個(gè)Story可以視為一個(gè)獨(dú)立的特性更鲁。每個(gè)Story應(yīng)該可以在最多1個(gè)星期內(nèi)完成開發(fā)霎箍,交付提前測試(Pre-Test)。當(dāng)一個(gè)迭代中的所有Story開發(fā)完畢以后澡为,測試組再進(jìn)行完整的測試漂坏。在整個(gè)測試過程中(pre-test,test)媒至,基于Daily build顶别,測試組永遠(yuǎn)都是每天從配置庫上取下最新編譯的版本進(jìn)行測試,開發(fā)人員也隨時(shí)修改測試人員提交的問題單拒啰,并合入配置庫驯绎。
敏捷開發(fā)的一個(gè)特點(diǎn)是開放式辦公,充分溝通图呢,包括測試人員也和開發(fā)人員一起辦公条篷。基于Story Card的開發(fā)方式蛤织,團(tuán)隊(duì)會(huì)在開放式辦公區(qū)域放置一塊白板赴叹,上面粘貼著所有的Story Card,按當(dāng)前的開發(fā)狀態(tài)貼在4個(gè)區(qū)域中指蚜,分別是:未開發(fā)乞巧,開發(fā)中,預(yù)測試中摊鸡,測試中绽媒。Story Card的開發(fā)人員和測試人員根據(jù)開發(fā)進(jìn)度在Story Wall上移動(dòng)Story Card,更新Story Card的狀態(tài)免猾。這種方式可以對項(xiàng)目開發(fā)進(jìn)度有一個(gè)非常直觀的了解是辕。
敏捷開發(fā)宣言
個(gè)體和交互 勝過 過程和工具
可以工作的軟件 勝過 面面俱到的文檔
客戶合作 勝過 合同談判
響應(yīng)變化 勝過 遵循計(jì)劃
雖然右項(xiàng)也有價(jià)值,但是我們認(rèn)為左項(xiàng)具有更大的價(jià)值猎提。
敏捷開發(fā)的方式
敏捷開發(fā)作為一種指導(dǎo)思想或開發(fā)方式获三,Scrum和XP(Extreme Programming:極限編程)是敏捷開發(fā)的具體方式。Scrum和XP的區(qū)別是,Scrum偏重于過程疙教,XP則偏重于實(shí)踐棺聊,但是實(shí)際中,兩者是結(jié)合一起應(yīng)用的贞谓。
Scrum方式
Scrum的英文意思是橄欖球運(yùn)動(dòng)的一個(gè)專業(yè)術(shù)語限佩,表示“爭球”的動(dòng)作;把一個(gè)開發(fā)流程的名字取名為Scrum裸弦,大家像打橄欖球一樣迅速祟同、富有戰(zhàn)斗激情,運(yùn)用該流程烁兰,你就能看到你團(tuán)隊(duì)高效的工作耐亏。
Scrum整個(gè)開發(fā)過程由若干個(gè)短的迭代周期組成徊都,一個(gè)短的迭代周期稱為一個(gè)Sprint沪斟,每個(gè)Sprint的建議長度是2到4周(互聯(lián)網(wǎng)產(chǎn)品研發(fā)可以使用1周的Sprint)。在Scrum中暇矫,使用Product Backlog來管理產(chǎn)品的需求主之,Product backlog是一個(gè)按照商業(yè)價(jià)值排序的需求列表,Scrum團(tuán)隊(duì)總是先開發(fā)對客戶具有較高價(jià)值的需求李根。在Sprint中槽奕,Scrum團(tuán)隊(duì)從產(chǎn)品Backlog中挑選最高優(yōu)先級的需求進(jìn)行開發(fā)。挑選的需求在Sprint計(jì)劃會(huì)議上經(jīng)過討論房轿、分析和估算得到相應(yīng)的任務(wù)列表粤攒,我們稱它為Sprint backlog。在每個(gè)迭代結(jié)束時(shí)囱持,Scrum團(tuán)隊(duì)將遞交潛在可交付的產(chǎn)品增量夯接。Scrum 采用迭代、增量的方法來優(yōu)化可預(yù)見性并控制風(fēng)險(xiǎn)纷妆。
Scrum開發(fā)流程中的三大角色
產(chǎn)品負(fù)責(zé)人(Product Owner)
主要負(fù)責(zé)確定產(chǎn)品的功能和達(dá)到要求的標(biāo)準(zhǔn)盔几,指定軟件的發(fā)布日期和交付的內(nèi)容,同時(shí)有權(quán)力接受或拒絕開發(fā)團(tuán)隊(duì)的工作成果掩幢。
流程管理員(Scrum Master)
主要負(fù)責(zé)整個(gè)Scrum流程在項(xiàng)目中的順利實(shí)施和進(jìn)行逊拍,以及清除擋在客戶和開發(fā)工作之間的溝通障礙,使得客戶可以直接驅(qū)動(dòng)開發(fā)际邻。
開發(fā)團(tuán)隊(duì)(Scrum Team)
主要負(fù)責(zé)軟件產(chǎn)品在Scrum規(guī)定流程下進(jìn)行開發(fā)工作芯丧,人數(shù)控制在5~10人左右,每個(gè)成員可能負(fù)責(zé)不同的技術(shù)方面世曾,但要求每成員必須要有很強(qiáng)的自我管理能力缨恒,同時(shí)具有一定的表達(dá)能力;成員可以采用任何工作方式,只要能達(dá)到Sprint的目標(biāo)肿轨。
進(jìn)行Scrum開發(fā)的流程
1寿冕、我們首先需要確定一個(gè)Product Backlog(按優(yōu)先順序排列的一個(gè)產(chǎn)品需求列表),這個(gè)是由Product Owner 負(fù)責(zé)的椒袍;
2驼唱、Scrum Team根據(jù)Product Backlog列表,做工作量的預(yù)估和安排驹暑;
3玫恳、有了Product Backlog列表,我們需要通過 Sprint Planning Meeting(Sprint計(jì)劃會(huì)議) 來從中挑選出一個(gè)Story作為本次迭代完成的目標(biāo)优俘,這個(gè)目標(biāo)的時(shí)間周期是1~4個(gè)星期京办,然后把這個(gè)Story進(jìn)行細(xì)化雷激,形成一個(gè)Sprint Backlog们何;
4、Sprint Backlog是由Scrum Team去完成的歌憨,每個(gè)成員根據(jù)Sprint Backlog再細(xì)化成更小的任務(wù)(細(xì)到每個(gè)任務(wù)的工作量在2天內(nèi)能完成)叶雹;
5财饥、在Scrum Team完成計(jì)劃會(huì)議上選出的Sprint Backlog過程中,需要進(jìn)行 Daily Scrum Meeting(每日站立會(huì)議)折晦,每次會(huì)議控制在15分鐘左右钥星,每個(gè)人都必須發(fā)言,并且要向所有成員當(dāng)面匯報(bào)你昨天完成了什么满着,并且向所有成員承諾你今天要完成什么谦炒,同時(shí)遇到不能解決的問題也可以提出,每個(gè)人回答完成后风喇,要走到黑板前更新自己的 Sprint burn down(Sprint燃盡圖)宁改;
6、做到每日集成响驴,也就是每天都要有一個(gè)可以成功編譯透且、并且可以演示的版本;很多人可能還沒有用過自動(dòng)化的每日集成豁鲤,其實(shí)TFS就有這個(gè)功能秽誊,它可以支持每次有成員進(jìn)行簽入操作的時(shí)候,在服務(wù)器上自動(dòng)獲取最新版本琳骡,然后在服務(wù)器中編譯锅论,如果通過則馬上再執(zhí)行單元測試代碼,如果也全部通過楣号,則將該版本發(fā)布最易,這時(shí)一次正式的簽入操作才保存到TFS中怒坯,中間有任何失敗,都會(huì)用郵件通知項(xiàng)目管理人員藻懒;
7剔猿、當(dāng)一個(gè)Story完成,也就是Sprint Backlog被完成嬉荆,也就表示一次Sprint完成归敬,這時(shí),我們要進(jìn)行 Srpint Review Meeting(演示會(huì)議)鄙早,也稱為評審會(huì)議汪茧,產(chǎn)品負(fù)責(zé)人和客戶都要參加(最好本公司老板也參加),每一個(gè)Scrum Team的成員都要向他們演示自己完成的軟件產(chǎn)品(這個(gè)會(huì)議非常重要限番,一定不能取消)舱污;
8、最后就是 Sprint Retrospective Meeting(回顧會(huì)議)弥虐,也稱為總結(jié)會(huì)議扩灯,以輪流發(fā)言方式進(jìn)行,每個(gè)人都要發(fā)言躯舔,總結(jié)并討論改進(jìn)的地方驴剔,放入下一輪Sprint的產(chǎn)品需求中;
XP方式
極限編程是一個(gè)輕量級的粥庄、靈巧的軟件開發(fā)方法;同時(shí)它也是一個(gè)非常嚴(yán)謹(jǐn)和周密的方法豺妓。它的基礎(chǔ)和價(jià)值觀是交流惜互、樸素、反饋和勇氣琳拭;即训堆,任何一個(gè)軟件項(xiàng)目都可以從四個(gè)方面入手進(jìn)行改善:加強(qiáng)交流;從簡單做起白嘁;尋求反饋坑鱼;勇于實(shí)事求是。XP是一種近螺旋式的開發(fā)方法絮缅,它將復(fù)雜的開發(fā)過程分解為一個(gè)個(gè)相對比較簡單的小周期鲁沥;通過積極的交流、反饋以及其它一系列的方法耕魄,開發(fā)人員和客戶可以非常清楚開發(fā)進(jìn)度画恰、變化、待解決的問題和潛在的困難等吸奴,并根據(jù)實(shí)際情況及時(shí)地調(diào)整開發(fā)過程允扇。
XP的十三種核心實(shí)踐
團(tuán)隊(duì)協(xié)作(Whole Team)
規(guī)劃策略(The Planning Game)缠局;
結(jié)對編程(Pair programming)
測試驅(qū)動(dòng)開發(fā)(Testing-Driven Development)
重構(gòu)(Refactoring)
簡單設(shè)計(jì)(Simple Design)
代碼集體所有權(quán)(Collective Code Ownership)
持續(xù)集成(Continuous Integration)
客戶測試(Customer Tests)
小型發(fā)布(Small Release)
每周40小時(shí)工作制(40-hour Week)
編碼規(guī)范(Code Standards)
系統(tǒng)隱喻(System Metaphor)
關(guān)于規(guī)劃策略:計(jì)劃是持續(xù)的、循序漸進(jìn)的考润。每2周狭园,開發(fā)人員就為下2周估算候選特性的成本,而客戶則根據(jù)成本和商務(wù)價(jià)值來選擇要實(shí)現(xiàn)的特性糊治。
關(guān)于測試驅(qū)動(dòng)開發(fā):編寫單元測試是一個(gè)驗(yàn)證行為妙啃,更是一個(gè)設(shè)計(jì)行為。同樣俊戳,它更是一種編寫文檔的行為揖赴。編寫單元測試避免了相當(dāng)數(shù)量的反饋循環(huán),尤其是功功能能驗(yàn)證方面的反饋循環(huán)抑胎。程序員以非常短的循環(huán)周期工作燥滑,他們先增加一個(gè)失敗的測試,然后使之通過阿逃。
關(guān)于隱喻:隱喻同體系結(jié)構(gòu)是同義詞铭拧,隱喻用于描述項(xiàng)目的全貌,Story用于描述個(gè)別具體的特征恃锉。隱喻是將整個(gè)系統(tǒng)聯(lián)系在一起的全局視圖搀菩;它是系統(tǒng)的未來影像,是它使得所有單獨(dú)模塊的位置和外觀變得明顯直觀破托。如果模塊的外觀與整個(gè)隱喻不符肪跋,那么你就知道該模塊是錯(cuò)誤的
XP的一個(gè)成功因素是重視客戶的反饋——開發(fā)的目的就是為了滿足客戶的需要。XP方法使開發(fā)人員始終都能自信地面對客戶需求的變化土砂。XP強(qiáng)調(diào)團(tuán)隊(duì)合作州既,經(jīng)理、客戶和開發(fā)人員都是開發(fā)團(tuán)隊(duì)中的一員萝映。團(tuán)隊(duì)通過相互之間的充分交流和合作吴叶,使用XP這種簡單但有效的方式,努力開發(fā)出高質(zhì)量的軟件序臂。XP的設(shè)計(jì)簡單而高效蚌卤;程序員們通過測試獲得客戶反饋,并根據(jù)變化修改代碼和設(shè)計(jì)奥秆,他們總是爭取盡可能早地將軟件交付給客戶逊彭。XP程序員能夠勇于面對需求和技術(shù)上的變化。
什么是優(yōu)秀團(tuán)隊(duì)
有家公司的一個(gè)團(tuán)隊(duì)的一個(gè)項(xiàng)目用的是"敏捷開發(fā)方法"吭练,而當(dāng)時(shí)公司的理念恰恰是:開放诫龙、協(xié)作性強(qiáng)、扁平化團(tuán)隊(duì)鲫咽,以用戶為中心签赃;和團(tuán)隊(duì)使用的敏捷方法理念正好相同谷异,結(jié)果毫無懸疑的拿到了優(yōu)秀團(tuán)隊(duì)獎(jiǎng)。即使開發(fā)的項(xiàng)目并不是很成功锦聊,但公司需要一個(gè)團(tuán)隊(duì)來做榜樣歹嘹,來激勵(lì)其他團(tuán)隊(duì),而那里正好有這么一個(gè)團(tuán)隊(duì)孔庭。
如果做不了優(yōu)秀的團(tuán)隊(duì)尺上,那么就做一個(gè)典型的團(tuán)隊(duì),公司需要這么一個(gè)做示范的話題圆到。優(yōu)秀的團(tuán)隊(duì)并不是拘泥于某種開發(fā)方式的怎抛,而是最適合某種方式的。希望您也能在一個(gè)優(yōu)秀的團(tuán)隊(duì)芽淡。