大綱
-
神馬是敏捷?
-
SCRUM是神馬?
-
SCRUM的團隊架構
-
SCRUM的最佳實踐
- 使用者故事
- Sprint(衝刺)
- Burn Down Chart(燃盡圖)
1.神馬是敏捷?
敏捷各路諸侯:極限程式設計(XP)、SCRUM、MSF(微軟解決方案框架)、OpenUP(RUP敏捷版)、精益開發、水晶方法、特性驅動開發
什麼是敏捷?
- 美國敏捷聯盟提出四大宣言和十二條準則
- 敏捷宣言:
- 個體和互動更優於流程和工具
- 工作的軟體更優於詳盡的文件
- 客戶合作更優於合同談判
- 響應變化更優於遵循計劃
靠左更敏捷,靠右更接近傳統開發模式
- 敏捷準則
1、 我們的最高目標是,透過儘早和持續地交付有價值的軟體來滿足客戶
2、 歡迎對需求提出變更——即使是在專案開發後期。要善於利用需求變更,幫助客戶獲得競爭優勢
3、要不斷交付可用的軟體,週期從幾周到幾個月不等,且越短越好
4、 專案過程中,業務人員與開發人員必須在一起工作
5、 要善於激勵專案人員,給他們以所需要的環境與支援,並相信他們能夠完成任務
6、 無論是團隊內還是團隊間,最有效的溝通方法是面對面交談
7、 可用的軟體是衡量進度的主要指標
8、敏捷過程提倡可持續的開發。專案方、開發人員和使用者應該能夠保持恆久穩定的進展速度
9、對技術的精益求精以及對設計的不斷完善將提升敏捷性
10、要做到簡潔,即盡最大可能減少不必要的工作。這是一門藝術
11、最佳的架構、需求和設計出自於自組織的團隊
12、團隊要定期反省如何能夠做到更有效,並相應地調整團隊的行為
2.SCRUM是神馬?
- 近年最火的敏捷方法論
- SCRUM中文翻譯:橄欖球
- SCRUM適用於大中小性專案
- SCRUM核心內容
- 團隊架構
- 軟體研發框架
3.SCRUM的團隊架構
- SCRUM的團隊角色
- 產品負責人
- SCRUM Master
- “自組織”的開發團隊
- 產品負責人(產品經理)
- 主要職責:
- 提供願景
- 提供邊界
- 提供使用者故事的優先順序
- 要特別注意:
- 需要和開發團隊溝通需求
- 需要考慮開發團隊的研發能力
- 主要職責:
- SCRUM Master(相當於教練角色)≠專案經理
- 沒有行政權利
- 訓練團隊用正確的方法做事,遵循SCRUM的流程和做事原則
- 不代替團隊做決定
- “自組織”的開發團隊有什麼角色?
- 業務分析師
- 程式設計師
- 測試人員
- 軟體架構師
- 資料庫設計師
- 使用者體驗設計師
- ……
- 怎樣才是“自組織”?——SCRUM Master領銜,其他成員聽從指揮
示例如下
4.SCRUM的最佳實踐
SCRUM在需求方面的核心理念
- 需求是“湧現”的!
- 不要檢視初期就明細化全部需求
- 透過“使用者故事”來組織及細化需求
- 將“寫需求”轉變為“討論需求”。
- 使用“使用者故事”來討論需求
- 所有人都參與討論,儲蓄明確需求細節
4.1使用者故事
示例:
作為網站的所有者,我希望能統計廣告的點選次數,以便我能清楚廣告收益
標註格式:(重要)
- 作為……角色
- 希望系統可以……(目標)
- 以便……(原因)
這個格式的作用:
作為……角色--->從使用者的角度來思考問題
希望系統可以……(目標)--->思考系統要實現什麼功能,達到什麼效果等
以便……(原因)--->思考這個功能對於該使用者有什麼實質價值
- 使用者故事的難點
- 需求有一系列大小不一的使用者故事組成。
- 最開始的使用者故事往往是“大故事”,需要拆分為“中故事”、“小故事”。
- 難點:
- 發現發現和提煉使用者故事
- 由粗到細地拆分使用者故事
- 安排使用者故事優先順序,分派不同的Sprint中去實現
-
如何寫出第一個使用者故事?
實戰:某網上售票系統,請寫出第一個使用者故事!
建議:以甲方老闆角度來寫。
參考答案:作為某某局長,希望建造一套網上售票系統,以便更好地為人們服務。
開始分解使用者故事:- 從第一個使用者故事開始分解
- 細分“以便……”這部分
- 反向思考“希望系統可以……”部分
- 進行系統涉眾分析,列出關鍵使用者
- 思考使用者在本專案上的利益所在
- 思考“希望系統可以……”部分
- 思考“以便……”這部分,確認“希望系統可以……”這部分的是否合適
- 從第一個使用者故事開始分解
-
同一種使用者不同場景繼續拆分
- 如何拆分下面的使用者故事?
- 作為一個使用者,我需要登入系統,以便只有我才能訪問自己的資訊。
- 提示:
- 作為一名已註冊過的使用者,……
- 作為一名新使用者,……
- 作為一名健忘的使用者,……
- 作為一名已註冊的使用者,……
- 參考答案-1
- 作為一名已註冊過的使用者,我能用我的使用者名稱和密碼登入,讓我能信任該系統。
- 作為一名新使用者,我能透過建立使用者名稱和密碼註冊,讓該系統能記住我的個人資訊。
- 作為一名已經註冊過的使用者,我能改變我的密碼, 讓我能保證它是安全的或容易記住他。
- 作為一名已經註冊過的使用者,我想要系統在我的密碼很容易被猜測時提醒我,讓我的賬號很難被侵入。
- 參考答案2
- 作為一名健忘的使用者,我想能夠申請一個新的密碼,讓我忘記密碼時不會被永久地鎖住。
- 作為一名一註冊過的使用者,我不想在我登入嘗試失敗後看到這是由於使用者名稱錯誤、密碼錯誤或二者資訊都錯誤導致的資訊,讓其他人很難冒充我。
- 作為一名已註冊過的使用者,我應能在我的賬戶出現連續3次失敗的嘗試後得到通知,讓我知道是否有人在檢視訪問我的賬戶。
- 使用者故事到底要拆分到多細?
-
兩大標準:
- 能在一個Sprint中完成。
- 加入滿意條件(詳細要求)
-
例如:以下使用者故事可在一個Sprint中完成:
- 作為負責市場的副總裁,我想在評估以往廣告促銷活動的效果時可以選擇節假日季節,以便我能確認那些有利潤的促銷活動。
- 如何加入滿意條件(詳細條件)呢?
-
“滿意條件”示例
- 確保它可以工作在大部分零售節假日。
- 聖誕節、復活節、總統節、母親節、父親節、勞動節和新年
- 支援跨2個日曆年的節日。
- 節假日季節可以從某個節假日到另一個設定(比如感恩節到聖誕節)
- 節假日季節可以設定為該節假日前面的某些天
- 不用支援中國的春節
- 確保它可以工作在大部分零售節假日。
4.2 Sprint
- Product Backlog 和 Sprint Backlog
- Product Backlog
- 中文翻譯:產品代辦列表
- 產品需要完成的所有使用者故事的集合
- 使用者故事有大有小,既有史詩級別,也有小粒度級別
- Sprint Backlog
- 中文翻譯:衝刺代辦列表
- Sprint中需要完成的所有使用者故事的集合
- Sprint中的使用者故事都可以在該Sprint中完成,並且都應該有滿意條件。
- Sprint - 1
- 一個Sprint就是一個小版本。
- 建議時長1個月。
- 一個Sprint並不是一個“小瀑布”。
- 很難區分需求、設計、程式碼、測試階段。
- 所有工作基於對使用者故事的討論。
- 測試先行,測試驅動,單元測試必不可少。
- 設計也是“湧現”式的。
- Sprint - 2
- 產品負責人和“自組織”開發團隊商量並規劃每個Sprint的使用者故事。
- 估算使用者故事。
- 精準估算有“滿意條件”
- 精準估算規劃在Sprint中的使用者故事。
- 粗略估算或暫不估損大中粒度的使用者故事。
- 估算由“自組織”開發團隊負責。
- 精準估算時,單位建議為小時;粗略估算時,單位建議為天。
4.3 Burn Down Chart
- 用來跟蹤Sprint未完成工作的情況
Sprint中的一些最佳實踐
- 結對程式設計。
- 持續整合。
- 測試驅動、測試自動化。
- 每日會議。
- Lessons Learned(經驗教訓總結)