《敏捷宣言》
2001年2月,17名軟件專家在美國猶他州瓦薩奇山雪鳥滑雪勝地相聚,經(jīng)過幾天的討論和辯論,共同起草了《敏捷軟件開發(fā)宣言》,簡稱《敏捷宣言》。這些專家包括來自于極限編程、Scrum、DSDM、自適應(yīng)軟件開發(fā)、水晶系列、特征驅(qū)動開發(fā)、實(shí)效編程的代表們。許多人已經(jīng)有了自己創(chuàng)建的方法論,并開始傳播,他們都具有編寫軟件的豐富經(jīng)驗(yàn),并且都在尋求文檔驅(qū)動的重量級軟件開發(fā)流程的替代方案。
敏捷宣言四大價值觀
- 個體和互動高于流程和工具。
- 工作的軟件高于詳盡的文檔。
- 客戶合作高于合同談判。
- 響應(yīng)變化高于遵循計劃。
也就是說,盡管右項(xiàng)有其價值,但更要重視左項(xiàng)的價值。
伴隨著四大價值觀,敏捷宣言提供了12條原則:
1、我們最重要的目標(biāo)是通過持續(xù)不斷地及早交付有價值的軟件使客戶滿意(價值優(yōu)先)。
2、欣然面對需求變化,即使在開發(fā)后期也一樣。為了客戶的競爭優(yōu)勢,通過敏捷過程掌控變化(擁抱變化)。
3、經(jīng)常地交付可工作的軟件,相隔幾星期或一兩個月,傾向于采取較短的周期(短迭代交付)。
4、業(yè)務(wù)人員和開發(fā)人員必須相互合作,項(xiàng)目中的每一天都不例外(業(yè)務(wù)參與)。
5、激發(fā)個體的斗志,以他們?yōu)楹诵拇罱?xiàng)目。提供所需的環(huán)境和支援,輔以信任,從而達(dá)成目標(biāo)(以人為本)。
6、無論團(tuán)隊(duì)內(nèi)外,傳遞信息效果最好、效率也最高的方式是面對面的交談(面對面溝通)。
7、可工作的軟件是進(jìn)度的首要度量標(biāo)準(zhǔn)(成果導(dǎo)向)。
8、敏捷過程倡導(dǎo)可持續(xù)開發(fā)。發(fā)起人、開發(fā)人員和用戶要能夠共同維持其步調(diào)穩(wěn)定延續(xù)(保持節(jié)奏)。
9、堅持不懈地追求技術(shù)卓越和良好設(shè)計,敏捷能力由此增強(qiáng)(追求卓越)。
10、以簡潔為本,它是極力減少不必要工作量的藝術(shù)(簡單務(wù)實(shí))。
11、最好的架構(gòu)、需求和設(shè)計出自于組織團(tuán)隊(duì)(團(tuán)隊(duì)自組織)。
12、團(tuán)隊(duì)定期地反思如何能提高成效,并相應(yīng)地調(diào)整自身的行為(持續(xù)改進(jìn))。
盡管這些價值觀和原則源自于軟件行業(yè),但至今敏捷方法的應(yīng)用已擴(kuò)展到許多其他的非計算機(jī)軟件開發(fā)行業(yè),并將其發(fā)展為一種思維模式,在許多不同的實(shí)踐中體現(xiàn)。
敏捷軟件開發(fā)
“敏捷”是一個囊括了各種框架和方法的涵蓋性術(shù)語。它指的是符合《敏捷宣言》價值觀和原則的任何方法、技術(shù)、框架、手段或?qū)嵺`。敏捷軟件開發(fā)簡稱敏捷開發(fā),是從20世紀(jì)90年代開始逐漸引起廣泛關(guān)注的一些新型軟件開發(fā)方法,以應(yīng)對快速變化的需求。它們的具體名稱、理念、過程、術(shù)語都不盡相同,相對于“非敏捷”,更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作、面對面溝通、頻繁交付新的軟件版本、緊湊而自我組織型的團(tuán)隊(duì)、能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重人的作用。
敏捷開發(fā)的發(fā)展過程中,出現(xiàn)了多個不同的流派,比如:極限編程(Extreme Programming,XP)、自適應(yīng)軟件開發(fā)(ASD)、動態(tài)系統(tǒng)開發(fā)方法(DSDM)、水晶方法、特性驅(qū)動開發(fā)(FDD)等,但其中的基本原則是一致的。從開發(fā)者的角度,主要特點(diǎn)有站立會議、看板、小版本發(fā)布、較少的文檔、注重合作、客戶參與、自動化測試、適應(yīng)性計劃調(diào)整、結(jié)對編程等等。從管理者的角度,主要關(guān)注點(diǎn)有測試驅(qū)動開發(fā)(TDD)、持續(xù)集成(CI)、重構(gòu)等等。在具體項(xiàng)目中,各團(tuán)隊(duì)可選擇適合其項(xiàng)目和組織文化的不同方法和實(shí)踐。
還可以將敏捷方法視為精益方法的子集,它們都是精益方法的具體實(shí)例。
敏捷是許多方法的一個總稱
看板方法雖然是精益陣營中的一種重要方法,但人們也通常將其視為一種重要的敏捷框架,廣泛地應(yīng)用于敏捷環(huán)境中。
所有這些方法都具有以下共同特征:
1、迭代式開發(fā)。即整個開發(fā)過程被分為幾個迭代周期,每個迭代周期是一個定長或不定長的時間塊每個迭代周期持續(xù)的時間一般較短,通常為一到六周。
2、增量交付。產(chǎn)品是在每個迭代周期結(jié)束時被逐步交付使用,而不是在整個開發(fā)過程結(jié)束的時候一次性交付使用。每次交付的都是可以被部署到用戶應(yīng)用環(huán)境中被用戶使用的、能給用戶帶來即時效益和價值的產(chǎn)品。
3、開發(fā)團(tuán)隊(duì)和用戶反饋推動產(chǎn)品開發(fā)。敏捷開發(fā)方法主張用戶能夠全程參與到整個開發(fā)過程中。這使需求變化和用戶反饋能被動態(tài)管理并及時集成到產(chǎn)品中。同時,團(tuán)隊(duì)對于用戶的需求也能及時提供反饋意見。
4、持續(xù)集成。新的功能或需求變化總是盡可能頻繁地被整合到產(chǎn)品中。一些項(xiàng)目是在每個迭代周期結(jié)束的時候集成, 有些項(xiàng)目則每天都在這么做。
5、開發(fā)團(tuán)隊(duì)自我管理。擁有一個積極的、自我管理的、具備自由交流風(fēng)格的開發(fā)團(tuán)隊(duì),是每個敏捷項(xiàng)目必不可少的條件。人是敏捷開發(fā)的核心。敏捷開發(fā)總是以人為中心建立開發(fā)的過程和機(jī)制,而非把過程和機(jī)制強(qiáng)加給人。
敏捷開發(fā)過程
敏捷開發(fā)過程
敏捷開發(fā)過程通過對頻繁交付的可交付成果的評審,團(tuán)隊(duì)將能獲得更多的信息,從而在此基礎(chǔ)上進(jìn)行計劃和重新計劃。從業(yè)務(wù)角度看,敏捷就是創(chuàng)建組織更快(早)地交付有價值的產(chǎn)品和靈活地響應(yīng)變化的能力。
結(jié)構(gòu)化的需求管理
Epic、Feature、Story、Task是用來劃分需求顆粒度的標(biāo)簽,需求根據(jù)顆粒度大小按分為不同的層級。
- Epic:史詩,是項(xiàng)目的愿景目標(biāo)。通常是對整個項(xiàng)目的概括性描述。
- Feature:可以帶來價值的產(chǎn)品功能或特性。Feature比Epic更具體形象,用戶可以感知,具有業(yè)務(wù)價值。
- Story:我們通常所說的用戶故事,User Story的簡稱。是從用戶角度對產(chǎn)品功能的詳細(xì)描述,承接Feature,并放入項(xiàng)目的待辦事項(xiàng)列表,動態(tài)調(diào)整。始終讓高優(yōu)先級的Story優(yōu)先交付給客戶。Story要符合INVEST原則:Independent(獨(dú)立的)、Negotiable(可討論的)、Valuable(有價值的)、Estimable(可估算的)、Small(顆粒度適中的)、Testable(可測試的)。
- Task:是團(tuán)隊(duì)成員要完成的具體任務(wù)。通常將Story分配給開發(fā)人員,然后開發(fā)人員將Story分解為Task并估算相應(yīng)的工時。
Epic-Feature-Stroy-Task是一種將需求進(jìn)行結(jié)構(gòu)化管理的方法,從上到下逐層分解并形成自下而上的依賴。在實(shí)際開發(fā)過程中,需要變換而動態(tài)調(diào)整時,要避免偏離目標(biāo)方向,保證所添加的Story和Task和它們上層是有關(guān)聯(lián)的。從而保證團(tuán)隊(duì)的工作是在朝著目標(biāo)前進(jìn)。
敏捷團(tuán)隊(duì)
敏捷團(tuán)隊(duì)注重快速開發(fā)產(chǎn)品。在實(shí)踐中,最有效的敏捷團(tuán)隊(duì)往往由5到9個成員組成。理想情況下,敏捷團(tuán)隊(duì)?wèi)?yīng)該集中在一個團(tuán)隊(duì)工作場所工作,團(tuán)隊(duì)成員都為專職成員。敏捷提倡自我管理型團(tuán)隊(duì),敏捷團(tuán)隊(duì)與仆人式領(lǐng)導(dǎo)一起成長,領(lǐng)導(dǎo)充分信任并支持團(tuán)隊(duì)的工作方法。
特點(diǎn)一:自組織自管理
自組織自管理是指當(dāng)團(tuán)隊(duì)遇到問題的時候,團(tuán)隊(duì)成員需要自己研究解決方案,自己解決問題,不需要領(lǐng)導(dǎo)的監(jiān)督,實(shí)現(xiàn)自我驅(qū)動。例如:如果一個團(tuán)隊(duì)成員承諾8個小時完成某一項(xiàng)開發(fā)任務(wù),并認(rèn)領(lǐng)了該任務(wù),就不需要其他人去監(jiān)督他了,自己可以主動完成任務(wù),主動反饋問題,主動尋求幫助等等。
特點(diǎn)二:自適應(yīng)
通過對以往項(xiàng)目的研發(fā)流程、技術(shù)方案、團(tuán)隊(duì)協(xié)作、交付成果、客戶反饋、存在的問題等進(jìn)行回顧、復(fù)盤、反思,團(tuán)隊(duì)自行優(yōu)化調(diào)整,以更好地進(jìn)行下一次迭代過程。
特點(diǎn)三:完全透明
項(xiàng)目進(jìn)行過程中,團(tuán)隊(duì)成員每天在做什么,遇到了什么問題,完成了什么任務(wù),彼此都是清晰了解的??梢栽诿咳照緯袀鬟f這些信息,或是在看板中展示。
常見敏捷實(shí)踐
敏捷開發(fā)過程有一些常用實(shí)踐,在實(shí)際開發(fā)過程中可以參照或有選擇性執(zhí)行。
回顧
回顧也經(jīng)常稱作“復(fù)盤”、“階段性總結(jié)”,是最重要的一個實(shí)踐,原因是它可以幫助團(tuán)隊(duì)從之前的產(chǎn)品開發(fā)工作及其過程中學(xué)習(xí)、改進(jìn)和調(diào)整其過程。敏捷的原則之一是“團(tuán)隊(duì)定期地反思如何能提高成效,并相應(yīng)地調(diào)整自身的行為”。回顧可以在項(xiàng)目中間進(jìn)行,也可以在項(xiàng)目結(jié)束時進(jìn)行。通常可以選擇在這些關(guān)鍵時刻進(jìn)行:
- 當(dāng)團(tuán)隊(duì)完成一個發(fā)布或者加入一些功能時。不一定是一個巨大的增量,可以是任何發(fā)布,無論它有多小。
- 自上次回顧以來,又過了幾周時間。
- 當(dāng)團(tuán)隊(duì)出現(xiàn)問題時,以及團(tuán)隊(duì)協(xié)作完成工作不順暢時。
- 當(dāng)團(tuán)隊(duì)達(dá)到任何其他里程碑時。
通過回顧,針對定性的或定量的數(shù)據(jù)為依據(jù),然后利用這些數(shù)據(jù)找到根源,設(shè)計對策,并對所有的需要改進(jìn)的事項(xiàng)進(jìn)行優(yōu)先級排序和制定行動計劃,然后團(tuán)隊(duì)選擇合適數(shù)量的事項(xiàng)加入下一次迭代計劃。
重要的是,回顧并不是責(zé)備,而是讓團(tuán)隊(duì)學(xué)習(xí)并改進(jìn)。
待辦事項(xiàng)列表
待辦事項(xiàng)列表可以理解為一個需求池,我們收集到的客戶需求和反饋意見,以及團(tuán)隊(duì)內(nèi)部的產(chǎn)品規(guī)劃和反饋意見,都可以存放到需求池,并給每一項(xiàng)需求標(biāo)注優(yōu)先級和計劃版本,以顯示預(yù)期的可交付成果序列。根據(jù)實(shí)際情況,優(yōu)先級和計劃版本也可以動態(tài)調(diào)整。依據(jù)待辦事項(xiàng)列表,就可以劃定下一個迭代開發(fā)的范圍。
每日站會
團(tuán)隊(duì)成員利用每日站會對彼此做出小的承諾,發(fā)現(xiàn)問題,并確保團(tuán)隊(duì)工作順利進(jìn)行。需要為每日站會規(guī)定時間,比如不超出15分鐘??梢酝ㄟ^某種形式“過一下”看板或任務(wù)清單,團(tuán)隊(duì)中的任何人都可以主持站會。
通常,在基于迭代的敏捷中,每個團(tuán)隊(duì)成員都輪流回答下列問題:
- 上次站會以來我都完成了什么?
- 從現(xiàn)在到下一次站會,我計劃完成什么?
- 我的障礙(或風(fēng)險或問題)是什么?
從這些問題得出的答案能夠讓團(tuán)隊(duì)自我組織,并讓團(tuán)隊(duì)成員為完成之前和整個迭代中承諾完成的工作承擔(dān)彼此的責(zé)任。
站會是為了發(fā)現(xiàn)存在問題,而不是解決它們。將問題記錄起來,然后創(chuàng)建另一次會議,它可以在站會之后立即召開或者選擇某個合適的時間召開,并在會上解決問題。
要鼓勵任何團(tuán)隊(duì)成員主持會議而不是由項(xiàng)目經(jīng)理或領(lǐng)導(dǎo)主持,以確保它不會變成狀態(tài)報告會議,而是作為團(tuán)隊(duì)進(jìn)行自我組織和相互承諾的會議。
看板
在敏捷項(xiàng)目管理中,團(tuán)隊(duì)常用的一個工具就是白板加上便簽。我們可以把任務(wù)寫在便簽上,把白板做成待辦、處理中、已完成等泳道,然后把這些便簽貼到相應(yīng)的泳道里面,每天更新各項(xiàng)任務(wù)的進(jìn)度。團(tuán)隊(duì)成員也可以根據(jù)看板清楚地了解到每項(xiàng)任務(wù)的進(jìn)度等信息。
展示/評審
當(dāng)團(tuán)隊(duì)以用戶故事的形式完成特定功能時,團(tuán)隊(duì)會定期展示工作成果??催^展示后,產(chǎn)品負(fù)責(zé)人接受或拒絕故事。一般的指導(dǎo)方針是,每兩周至少展示一次團(tuán)隊(duì)的工作產(chǎn)品,這種頻率對于大多數(shù)團(tuán)隊(duì)來說是足夠的,這樣,團(tuán)隊(duì)成員就可以得到反饋,防止他們朝著錯誤的方向前進(jìn)。
展示/評審的作用還體現(xiàn)在,可以保障產(chǎn)品、開發(fā)和測試對需求理解一致。我們在敏捷過程中通過版本計劃評審、需求評審、設(shè)計評審、測試用例評審和開發(fā)ShowCase這幾個關(guān)鍵活動保障。版本計劃評審和需求評審中,產(chǎn)品經(jīng)理講解版本范圍、需求及上下文關(guān)聯(lián)影響,開發(fā)和測試都會參加,如果需求理解不一致的地方就馬上溝通由產(chǎn)品經(jīng)理把關(guān)。到測試用例評審的時候,需求細(xì)化成一個個測試用例,這樣讓開發(fā)和測試進(jìn)一步深化理解需求達(dá)成一致。到開發(fā)完成功能,給測試和產(chǎn)品Showcase,測試和產(chǎn)品再一次核對開發(fā)實(shí)現(xiàn)功能與需求是否一致,明顯不一致的地方當(dāng)場指出來,等開發(fā)人員修正后才提交給測試進(jìn)行測試,這樣就能及早發(fā)現(xiàn)開發(fā)中的一些問題,避免帶到測試環(huán)境,提升測試的有效性。
持續(xù)集成
持續(xù)集成是指每當(dāng)我們有新的代碼產(chǎn)出時,可以通過一種自動化的方式在服務(wù)器上進(jìn)行構(gòu)建、打包,進(jìn)而可以發(fā)布到集成環(huán)境、測試環(huán)境或者生產(chǎn)環(huán)境里面。有了持續(xù)集成作為基礎(chǔ),我們才能快速對代碼進(jìn)行重構(gòu)(所謂重構(gòu)就是響應(yīng)變化)、盡快收到反饋、以及頻繁發(fā)布。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實(shí),本站將立刻刪除。