三分鐘了解敏捷開發(fā)
小灰經(jīng)過千辛萬苦骗露,終于拿到了心儀的 offer把夸,今天小灰上班的第一天 ……
下班后晨汹,小灰找到同學(xué)大黃來請(qǐng)教 ……
場(chǎng)景一:小灰在餐廳
場(chǎng)景二:無奈的項(xiàng)目經(jīng)理
什么是敏捷開發(fā)?
敏捷開發(fā)(Agile)是一種以人為核心晃琳、迭代拨匆、循序漸進(jìn)的開發(fā)方法姆涩。
在敏捷開發(fā)中,軟件項(xiàng)目的構(gòu)建被切分成多個(gè)子項(xiàng)目惭每,各個(gè)子項(xiàng)目的成果都經(jīng)過測(cè)試骨饿,具備集成和可運(yùn)行的特征。
簡(jiǎn)單地來說台腥,敏捷開發(fā)并不追求前期完美的設(shè)計(jì)宏赘、完美編碼,而是力求在很短的周期內(nèi)開發(fā)出產(chǎn)品的核心功能黎侈,盡早發(fā)布出可用的版本察署。然后在后續(xù)的生產(chǎn)周期內(nèi),按照新需求不斷迭代升級(jí)峻汉,完善產(chǎn)品贴汪。
這一切正如某人的名言:
是誰這么厲害脐往,提出了敏捷開發(fā)思想?是一位名叫 Martin Fowler
的美國(guó)大叔扳埂。
大叔不但是敏捷開發(fā)的創(chuàng)始人之一业簿,還在面向?qū)ο箝_發(fā)、設(shè)計(jì)模式阳懂、UML 建模領(lǐng)域做出了重要貢獻(xiàn)梅尤。目前擔(dān)任 ThoughtWorks 公司的首席科學(xué)家。
敏捷開發(fā)模式的分類
敏捷開發(fā)的實(shí)現(xiàn)主要包括 SCRUM岩调、XP(極限編程)巷燥、Crystal Methods、FDD(特性驅(qū)動(dòng)開發(fā))等等号枕。其中 SCRUM 與 XP 最為流行缰揪。
同樣是敏捷開發(fā),XP 極限編程 更側(cè)重于實(shí)踐堕澄,并力求把實(shí)踐做到極限邀跃。這一實(shí)踐可以是測(cè)試先行,也可以是結(jié)對(duì)編程等蛙紫,關(guān)鍵要看具體的應(yīng)用場(chǎng)景。
SCRUM 則是一種開發(fā)流程框架途戒,也可以說是一種套路坑傅。SCRUM 框架中包含三個(gè)角色,三個(gè)工件喷斋,四個(gè)會(huì)議唁毒,聽起來很復(fù)雜,其目的是為了有效地完成每一次迭代周期的工作星爪。在這里我們重點(diǎn)討論的是 SCRUM浆西。
SCRUM 的工作流程
學(xué)習(xí) Scrum 之前,我們先要了解幾個(gè)基本術(shù)語(yǔ):
- Sprint:沖刺周期顽腾,通俗的講就是實(shí)現(xiàn)一個(gè)“小目標(biāo)”的周期近零。一般需要 2-6 周時(shí)間。
- User Story:用戶的外在業(yè)務(wù)需求抄肖。拿銀行系統(tǒng)來舉例的話久信,一個(gè) Story 可以是用戶的存款行為,或者是查詢余額等等漓摩。也就是所謂的小目標(biāo)本身裙士。
- Task:由 User Story 拆分成的具體開發(fā)任務(wù)。
- Backlog:需求列表管毙,可以看成是小目標(biāo)的清單腿椎。分為 Sprint Backlog 和 Product Backlog桌硫。
- Daily meeting:每天的站會(huì),用于監(jiān)控項(xiàng)目進(jìn)度啃炸。有些公司直接稱其為 Scrum鞍泉。
- Sprint Review meeting: 沖刺評(píng)審會(huì)議,讓團(tuán)隊(duì)成員們演示成果肮帐。
- Sprint burn down:沖刺燃盡圖咖驮,說白了就是記錄當(dāng)前周期的需求完成情況。
- Release:開發(fā)周期完成训枢,項(xiàng)目發(fā)布新的可用版本托修。
如上圖所示,在項(xiàng)目啟動(dòng)之前恒界,會(huì)由團(tuán)隊(duì)的產(chǎn)品負(fù)責(zé)人(Product owner)按照需求優(yōu)先級(jí)來明確出一份 Product Backlog睦刃,為項(xiàng)目做出整體排期。
隨后在每一個(gè)小的迭代周期里十酣,團(tuán)隊(duì)會(huì)根據(jù)計(jì)劃(Sprint Plan Meeting)確定本周期的 Sprint Backlog涩拙,再細(xì)化成一個(gè)個(gè) Task,分配給團(tuán)隊(duì)成員耸采,進(jìn)行具體開發(fā)工作兴泥。每一天,團(tuán)隊(duì)成員都會(huì)進(jìn)行 Daily meeting虾宇,根據(jù)情況更新自己的 Task 狀態(tài)搓彻,整個(gè)團(tuán)隊(duì)更新 Sprint burn down chart。
當(dāng)這一周期的 Sprint backlog 全部完成嘱朽,團(tuán)隊(duì)會(huì)進(jìn)行 Spring review meeting旭贬,也就是評(píng)審會(huì)議。一切順利的話搪泳,會(huì)發(fā)布出這一版本的 Release稀轨,并且進(jìn)行 Sprint 回顧會(huì)議(Sprint Retrospective Meeting)。
那么岸军,現(xiàn)實(shí)中的 Scrum 是什么樣的情景呢奋刽?看看下面的照片就知道了:
敏捷開發(fā)與 DevOps
DevOps 是 Development 和 Operations 的合成詞,其目標(biāo)是要加強(qiáng)開發(fā)人員凛膏、測(cè)試人員杨名、運(yùn)維人員之間的溝通協(xié)調(diào)。如何實(shí)現(xiàn)這一目標(biāo)呢猖毫?需要我們的項(xiàng)目做到持續(xù)集成台谍、持續(xù)交付、持續(xù)部署吁断。
時(shí)下流行的 Jenkins趁蕊、Bamboo坞生,就是兩款優(yōu)秀的持續(xù)集成工具。而 Docker 容器則為 DevOps 提供了強(qiáng)大而有效的統(tǒng)一環(huán)境掷伙。
DevOps自動(dòng)化發(fā)布介紹
DevOps目前并沒有權(quán)威的定義是己,DevOps 強(qiáng)調(diào)的是高效組織團(tuán)隊(duì)之間如何通過自動(dòng)化的工具協(xié)作和溝通來完成軟件的生命周期管理,從而更快任柜、更頻繁地交付更穩(wěn)定的軟件卒废。
上圖主要是功能從拉取分支開發(fā)到上線的整體流程
代碼版本管理1.0采用SVN,2.0平臺(tái)全部采用Git
以Jenkins為核心宙地,實(shí)現(xiàn)開發(fā)到運(yùn)維的流水線
Bug管理及團(tuán)隊(duì)協(xié)同采用Jira摔认,代碼審核采用Sonar及人工Review
Docker鏡像主要是基于CentOS 6.x,部分采用CentOS 7.0
軟件版本基于Maven的版本控制及管理宅粥、搭建了內(nèi)部的Nexus私服