什么是敏捷開發(fā)?
敏捷開發(fā)(Agile Development)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法。在敏捷開發(fā)中,軟件項(xiàng)目在構(gòu)建初期被切分成多個子項(xiàng)目,各個子項(xiàng)目的成果都經(jīng)過測試,具備可視、可集成和可運(yùn)行使用的特征。(把一個大項(xiàng)目分為多個相互聯(lián)系,但也可獨(dú)立運(yùn)行的小項(xiàng)目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。)
主要目的:降低需求變化的成本
開發(fā)流程:編寫用戶案例,架構(gòu)規(guī)范,實(shí)施規(guī)劃,迭代計(jì)劃,代碼開發(fā),單元測試,驗(yàn)收測試等等。
原則和方法:迭代式開發(fā)。增量交付。開發(fā)團(tuán)隊(duì)和用戶反饋推動產(chǎn)品開發(fā)。持續(xù)集成。團(tuán)隊(duì)自我管理。
核心做法:小規(guī)模,頻繁的版本發(fā)布,短迭代周期。測試驅(qū)動開發(fā)、結(jié)對編程、持續(xù)集成、每日站立會議、共同擁有代碼、系統(tǒng)隱喻。
精髓:2/8法則(20%交付功能代表80%最終商業(yè)價值);
為什么說是以人為核心?
我們大部分人都學(xué)過瀑布開發(fā)模型,它是以文檔為驅(qū)動的。在瀑布的整個開發(fā)過程中,要寫大量的文檔,把需求文檔寫出來后,開發(fā)人員都是根據(jù)文檔進(jìn)行開發(fā)的,一切以文檔為依據(jù);
而敏捷開發(fā)它只寫有必要的文檔,或盡量少寫文檔,敏捷開發(fā)注重的是人與人之間,面對面的交流,所以它強(qiáng)調(diào)以人為核心。
什么是迭代?
迭代是指把一個復(fù)雜且開發(fā)周期很長的開發(fā)任務(wù),分解為很多小周期可完成的任務(wù),這樣的一個周期就是一次迭代的過程;同時每一次迭代都可以生產(chǎn)或開發(fā)出一個可以交付的軟件產(chǎn)品。
關(guān)于Scrum和XP
敏捷是一種指導(dǎo)思想或開發(fā)方式,而Scrum和XP就是敏捷開發(fā)的具體方式了,你可以采用Scrum方式也可以采用XP方式
什么是Scrum?
Scrum是一個敏捷開發(fā)框架;由一個開發(fā)過程,幾種角色以及一套規(guī)范的實(shí)施方法組成。
【Scrum開發(fā)流程中的四大角色】
產(chǎn)品負(fù)責(zé)人(Product Owner)
該角色負(fù)責(zé)產(chǎn)品的遠(yuǎn)景規(guī)劃,平衡利益相關(guān)者的利益。確定不同的產(chǎn)品需求積壓的優(yōu)先級等。
在開發(fā)中,主要負(fù)責(zé)確定產(chǎn)品的功能和達(dá)到要求的標(biāo)準(zhǔn),指定軟件的發(fā)布日期和交付的內(nèi)容,同時有權(quán)力接受或拒絕開發(fā)團(tuán)隊(duì)的工作成果。
他是開發(fā)團(tuán)隊(duì)和客戶或最終用戶之間的聯(lián)絡(luò)點(diǎn)。
利益相關(guān)者(Stakeholder)
該角色與產(chǎn)品之間有直接或間接的利益關(guān)系,通常是客戶或最終用戶代表。他們負(fù)責(zé)收集編寫產(chǎn)品需求,審查項(xiàng)目成果等。
流程管理員(Scrum Master)
主要負(fù)責(zé)整個Scrum流程在項(xiàng)目中的順利實(shí)施和進(jìn)行,以及清除擋在客戶和開發(fā)工作之間的溝通障礙,使得客戶可以直接驅(qū)動開發(fā)。
他也是開發(fā)團(tuán)隊(duì)與產(chǎn)品擁有者之間交流的聯(lián)絡(luò)點(diǎn)。
開發(fā)團(tuán)隊(duì)(Scrum Team)
主要負(fù)責(zé)軟件產(chǎn)品在Scrum規(guī)定流程下進(jìn)行開發(fā)工作,每個成員可能負(fù)責(zé)不同的技術(shù)方面,但要求每成員必須要有很強(qiáng)的自我管理能力,同時具有一定的表達(dá)能力;成員可以采用任何工作方式,只要能達(dá)到Sprint的目標(biāo)。
Scrum名詞解釋:
backlog:可以預(yù)知的所有任務(wù),包括功能性的和非功能性的所有任務(wù)。建立Product Backlog 的過程就是將用戶需求轉(zhuǎn)化為一個個User Story 并確定其優(yōu)先級的過程。
story:用講故事的方式來表達(dá)需求,這樣便于讓原始客戶比較清晰的對需求進(jìn)行表達(dá),開發(fā)和測試也會逐漸以客戶的需求思維來思考自己的工作。
sprint:一次迭代開發(fā)的時間周期,一般最多以30天為一個周期。在這段時間內(nèi),開發(fā)團(tuán)隊(duì)需要完成一個制定的backlog,并且最終成果是一個增量的,可交付的產(chǎn)品。
sprint backlog:一個sprint周期內(nèi)所需要完成的任務(wù)
scrum Master:監(jiān)督整個Scrum進(jìn)程,修訂計(jì)劃
time-box:一個用于開會時間段。每個daily scrum meeting的time-box為15分鐘。
sprint planning meeting:啟動每個sprint前召開。一般為8小時。產(chǎn)品Owner和團(tuán)隊(duì)成員將backlog分解成小的功能模塊,決定在即將進(jìn)行的sprint里需要完成多少小功能模塊,確定Product Backlog的任務(wù)優(yōu)先級。還需詳細(xì)討論如何按需求完成小功能模塊。
Daily Scrum meeting:開發(fā)團(tuán)隊(duì)召開,開發(fā)人員向ScrumMaster匯報(bào):今天完成了什么?遇到了什么障礙?明天做什么?團(tuán)隊(duì)成員相互了解項(xiàng)目進(jìn)度
Sprint review meeting:每個Sprint結(jié)束后,Team將Sprint成果演示給Product Owner和其他人員。并總結(jié)結(jié)束的Sprint。
Scrum流程圖
如何進(jìn)行Scrum開發(fā)?
1、確定Product Backlog(按優(yōu)先順序排列的一個產(chǎn)品需求列表),由Product Owner 負(fù)責(zé)的;
2、Scrum Team做工作量的預(yù)估和安排;
3、Product Backlog列表中挑選出一個Story作為迭代目標(biāo),然后Story進(jìn)行細(xì)化。
團(tuán)隊(duì)在Backlog列表中挑選出當(dāng)前sprint內(nèi)完成的工作。團(tuán)隊(duì)決定如何將選定的產(chǎn)品Backlog轉(zhuǎn)化為潛在可交付產(chǎn)品的功能增量。
形成一個Sprint Backlog(Sprint Backlog是由Scrum Team去完成的)
4、召開sprint planning meeting,確定迭代任務(wù),優(yōu)先級,并分配給每個成員
5、在Scrum Team完成計(jì)劃會議上選出的Sprint Backlog過程中,需要進(jìn)行 Daily Scrum Meeting,每個人匯報(bào)昨天完成了什么,承諾今天要完成什么,遇到不能解決的問題。回答完成后,更新 Sprint burn down(Sprint燃盡圖);
6、做到每日集成,也就是每天都要有一個可以成功編譯、并且可以演示的版本;
7、當(dāng)一個Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,這時,我們要進(jìn)行?SrpintReviewMeeting(演示會議),也稱為評審會議,產(chǎn)品負(fù)責(zé)人和客戶都要參加(最好本公司老板也參加),每一個Scrum Team的成員都要向他們演示自己完成的軟件產(chǎn)品(這個會議非常重要,一定不能取消);
8、最后就是Sprint Retrospective?Meeting(回顧會議),也稱為總結(jié)會議,以輪流發(fā)言方式進(jìn)行,每個人都要發(fā)言,總結(jié)并討論改進(jìn)的地方,放入下一輪Sprint的產(chǎn)品需求中;
其他資料
利益相關(guān)者:敏捷開發(fā)保證了項(xiàng)目中所有利益相關(guān)者的利益,不論是客戶、項(xiàng)目管理、開發(fā)團(tuán)隊(duì)或測試小組。每個人對項(xiàng)目都有清晰的可見性,這是成功的關(guān)鍵點(diǎn)所在。敏捷開發(fā)原則上鼓勵用戶積極地參與,不論是產(chǎn)品開發(fā),或是團(tuán)體協(xié)同的方方面面。這對關(guān)鍵利益相關(guān)者提供了非常好的可見性,包括項(xiàng)目的進(jìn)度或是產(chǎn)品本身,最終這有利于保證產(chǎn)品預(yù)期的效果。
質(zhì)量:不像傳統(tǒng)的瀑布模型,等到開發(fā)完成才開始測試,可是在敏捷開發(fā)中,我們隨著需求的準(zhǔn)備便開始進(jìn)行測試。因此,測試集成貫穿整個開發(fā)周期,使得工作產(chǎn)品像開發(fā)一樣去定期檢查。這允許工作所有者有必要時做出適當(dāng)調(diào)整,以及及早的給產(chǎn)品團(tuán)隊(duì)檢查出任何質(zhì)量問題。
核心原則
◆主張簡單:簡單模型入手,慢慢迭代
◆擁抱變化:需求時刻在變,Project stakeholder(項(xiàng)目利益相關(guān)者)也可能會變化。項(xiàng)目環(huán)境不斷變化
◆可持續(xù)性:實(shí)現(xiàn)項(xiàng)目投資者的需求,其中就包括你的系統(tǒng)應(yīng)該要有足夠的魯棒性(robust ),能夠適應(yīng)日后的擴(kuò)展。可持續(xù)性可能指的是系統(tǒng)的下一個主要發(fā)布版,或是你正在構(gòu)建的系統(tǒng)的運(yùn)轉(zhuǎn)和支持
◆遞增的變化:
和建模相關(guān)的一個重要概念是你不用在一開始就準(zhǔn)備好一切。你不用在模型中包容所有的細(xì)節(jié),你只要足夠的細(xì)節(jié)就夠了,開發(fā)一個小的模型,或是概要模型,打下一個基礎(chǔ),然后慢慢的改進(jìn)模型。
◆令投資最大化
你的項(xiàng)目投資者為了開發(fā)出滿足自己需要的軟件,需要投入時間、金錢、設(shè)備等各種資源。投資者應(yīng)該可以選取最好的方式投資,也可以要求你的團(tuán)隊(duì)不浪費(fèi)資源。并且,他們還有最后的發(fā)言權(quán),決定要投入多少的資源。
◆快速反饋
從開始采取行動,到獲得行動的反饋,二者之間的時間至關(guān)緊要。和其他人一共開發(fā)模型,你的想法可以立刻獲得反饋,特別是你的工作采用了共享建模技術(shù)的時候。和你的客戶緊密工作,去了解他們的的需求,去分析這些需求,或是去開發(fā)滿足他們需求的用戶界面,這樣,你就提供了快速反饋的機(jī)會。
◆輕裝前進(jìn)
你建立一個工件,然后決定要保留它,隨著時間的流逝,這些工件都需要維護(hù)。如果你決定保留7個模型,不論何時,一旦有變化發(fā)生(新需求的提出,原需求的更新,團(tuán)隊(duì)接受了一種新方法,采納了一項(xiàng)新技術(shù)...),你就需要考慮變化對這7個模型產(chǎn)生的影響并采取相應(yīng)的措施。而如果你想要保留的僅是3個模型,很明顯,你實(shí)現(xiàn)同樣的改變要花費(fèi)的功夫就少多了,你的靈活性就增強(qiáng)了,因?yàn)槟闶窃谳p裝前進(jìn)。每次你要決定保留一個模型時,你就要權(quán)衡模型載有的信息對團(tuán)隊(duì)有多大的好處(所以才需要加強(qiáng)團(tuán)隊(duì)之間,團(tuán)隊(duì)和項(xiàng)目投資者之間的溝通)。