如何實施敏捷開發

2021-07-05 06:09:57 字數 3455 閱讀 4769

如果嚴格按照書本上的 scrum 法則一條條地看,那麼我們隊伍現在的做法也許根本不算 scrum。不過好歹我們也被稱作 scrum 一段時間了,我的資歷比不上前面的資深開發者,只能說一些目前的一點經驗。

經驗一:整個團隊必須理解 scrum 的目的和限制

如果管理團隊把 scrum 當作一種新的管理流程,那麼這個理解絕對是錯誤的,而且有害。要正確理解 scrum 的實施原則,需要從理解其設計

目的開始。

我所理解的 scrum 的目的在於兩點:

適應變化scrum 的乙個基本假設,就是外部需求模糊而難以理解。scrum 對此的理念是:讓客戶直接看到半成品,他們才知道自己要什麼。很多 scrum 的原則都是圍繞如何解決這個問題的:比如每個 sprint 結束時由 product owner 為客戶進行展示,又比如任務細化一般不超過乙個 sprint。理解了這一點,才會理解為什麼 scrum 似乎總在變化,因為需求總在變化。

快速迭代。scrum 的另乙個基本假設,是團隊生存在乙個快速變化且充滿競爭的世界。如果自己一年半才能發布乙個新版本,而競爭對手半年就能發布,那麼幾年之內,我們就會被對手甩得遠遠的。scrum 對此的理念是:發布即 milestone(里程碑),寧可每次發布二十個功能發布五次,也不要在內部搞五個 milestone 然後一口氣發布一百個功能。理解了這一點,才會理解為什麼 scrum 會認為發布時砍功能是一種正常情況而非一種失敗。

要實施 scrum,整個團隊至少必須取得共識,即以上兩點是不能商量的。流程必須為目的服務。如果

隊伍相信增加前期溝通才是讓需求清晰起來的最好方法,或者相信發布的功能必須是大批量一次性,那麼請使用瀑布開發模式。

相應地,我們必須明白 scrum 不能做什麼。我的理解可能聳人聽聞,仍是兩點:

因為發布週期縮短,團隊沒有能力保證作出的每乙個決定都正確,很多開銷都必須花在試錯上;

快速發布實際上導致 scrum 團隊的抗風險能力弱於瀑布模型團隊,因為乙個人的離職或病假都可能對單一功能的進度造成影響,不利於短期頻繁發布。scrum 對此的解答是:不要試圖不犯錯誤,而是保證小的錯誤能被盡快發現從而不會釀成大錯。所以 scrum 過程中總會有些不確定性,或者功能不合需求而返工,或者突然缺了人手導致一些單個功能必須延期完成。如果非要事先確定發布週期而且還得保證不許功能裁剪,請出門左轉找 cmm 認證:它可以把任務精確到每個對話方塊上該用什麼字型。前期計畫精確到這個粒度,什麼都可以在掌控之中。但問題是,我們必須用更長的發布週期來換。

理解了上面的內容,我們實施時就不會對某些形式性的東西過於糾結,比如burn down chart,比如scrum 撲克。需知形式服務於目的,而形式未必適用於每乙個團隊,正如瀑布模型在每乙個團隊中也都有差異。如果僅僅是因為團隊成員沒有在 planning meeting 上打撲克就認定這不是 scrum,那麼未免愚蠢了些。反過來,某些看似煩人的「流程」卻不可或缺,比如

每天的 15 分鐘 stand-up,如果我們明白它

對交流方面的重要作用,就絕對不會認為它可以被省略。

舉個實際的例子,在我們的團隊裡,我們強迫一周乙個 sprint。就我所知,即使在很多實施很成功的專案中,這種做法也是相當激進的。一開始我也不理解這一點,但實施了一段時間後,我開始認同這一條,因為一周的發布週期讓我們沒有機會把任務往後推,從而迫使我們盡快從瀑布模型中轉移出來。這對乙個有著悠久瀑布開發傳統的團隊來說非常重要,但對別的團隊來說,就不一定了。

經驗二:正確定位隊伍中的 scrum master。

為什麼單獨提 scrum master?如果只是看書本和參加培訓,我相信多數人都會同意我的觀點,即 scrum master 或許是整個開發過程中作用最不清楚的角色:不參與需求分析、不參與**開發、甚至不參與任何人事問題,只有一句「去除阻礙」這種含糊的表述。但是,當我真正當起這個 scrum master 之後,才發現這個角色承擔的職責非常具體。比如:

確保流程執行正確。進入 scrum 之後,很多團隊仍然會以各種方式走老路,比如有意無意地拉長 sprint 週期,並以此區別計畫周、開發周和測試周,實際上是把原來三個月的瀑布開發周期變成了兩到四個星期的瀑布週期;又比如以開發時間有限為理由把自動測試開發任務縮減為手工測試。好的 scrum master 應該有能力發現並制止這種情況。——順便說一句,相信我,不要以為兩個星期的瀑布週期是個可行的開發計畫,我們不可能完成測試任務的。

制止官僚主義流程。典型的例子就是乙個又乙個的 spec/plan review 和 sign-off 郵件;又比如非要區分所謂 unit test、bvt 和 functional test:或許對乙個圖形介面程式來說這兩者區別極大,可對於函式庫則幾乎沒有原則差別。合格的 scrum master 應該制止這樣的傾向。——不過我也得說,這一條我現在做得很差,還需要改進。

構建交叉知識結構。整個團隊的知識模型應該是各有專長但互有交叉的,而傳統開發的乙個很重要的問題是知識結構不平衡,比如測試的只管測試,開發的只管開發。這種模式對於發布時間長的大團隊來說也許能接受,但對人手短缺又要求快速發布的小團隊則是致命的。好的scrum master 應當能夠對團隊的決策具備影響力,確保不會讓某個任務陷入「只有乙個人知道細節」的情況。——這一條在習慣了傳統瀑布開發模型的團隊中往往是最大的阻礙,需要時間改善。

但正因為上面的理解,我基本上不同意 scrum alliance 的教科書裡關於 scrum master 的大多數表述。

首先,scrum master必須承擔一部分開發任務,因為沒有介入一線開發,很難想象 scrum master 會真正理解團隊的「痛點」。

其次,scrum master需要關注團隊的每乙個人,不然隊伍可能由於所謂「自組織」的原則而隱藏一些問題,比如某個人過於專精某一項而忽略了和其它成員的交流。當然,也有些部門的 scrum master 只負責寫報告和推事情。這不是我共事過的任何一位 scrum master 的做法,而且我也可以很自信地說,這種 scrum master 在我們公司是生存不下去的。

scrum master,你是肩負著人類使命的人啊!嗯!(握拳)

最後,貼兩句最近剛學到的話:

50% percent of our decisions are wrong. fail fast, learn fast. (我們作出的決定中, 50% 都是錯誤的。早早失敗,早早學習。)

no matter what you want to do, choose what is good for your team.(無論你選擇做什麼,選擇對你的團隊有利的事)

先宣告,說上面兩句話的哥們本人在我們隊伍裡不算很受歡迎,但這兩句我很喜歡。在我眼裡,這兩句話指出了 scrum 的所有實質。

敏捷開發實施流程

敏捷開發實施流程 迭代週期 2 3周 一 需求過程 1 2天 與產品經理,產品使用人員溝通產品功能與新需求 程式經理完成需求整理與確認 程式經理 開發經理 測試經理完成需求溝通 要求 二 開發過程 3 5天 開發經理確定開發任務點,並分配任務 開發人員完成開發 確保每日構建,並交付測試人員進行迭代測...

遊戲開發中敏捷實施

兩個程式設計師的 msn log a 說 2008 09 17 11 23 20 對了,問個咚咚,你們那邊是用scrum 麼?b 說 2008 09 17 11 23 26 對 a 說 2008 09 17 11 26 36 你們也是每天morning meeting 羅?a 說 2008 09 1...

敏捷開發的實施步驟

這個人必須知道帶領的團隊需要做什麼 製造什麼產品以及取得什麼成果,必須會面考慮到風險與回報 什麼具有可行性 什麼能做以及他們對什麼富有熱情。真正做事的是誰?這個團隊必須能夠落實產品負責人的願景。團隊規模宜小不宜大,一般3 9人較為合適。主管為scrum過程負責,負責培訓團隊其他成員,確保scrum得...