Transcript pps

軟體開發與軟體工程
以 Scrum 為例
陳建村
[email protected]
http://teddy-chen-tw.blogspot.com
April 15 2011
1
我是誰

學歷
 台北科大資工系博士班畢業
(2008/10)
 台北工專電子科五專畢業 (1994)

經歷
 美超微電腦專案經理
(2008/10~今)
 肯心資訊: 技術總監 (2000-2002);
程式設計師 (1996-2000)
2
Outline
 現況
改變
 未來
 結論

3
選擇題:以下何者為對?

行醫需要醫德

從政需要道德

開發軟體需要軟體工程

以上皆非
4
台灣軟體開發的普遍現象

本公司的專案管理,就是凡事都照著 PM 的
時程表走

台灣經濟奇蹟的幕後無名英雄–加班

寫程式有什麼學問,不過就是一堆 printf()
而已
(http://blog.udn.com/chungchia/3388454)
5
對於軟體工程--業界普遍的心聲


你們學校的教授不懂啦,這在業界行不通的
很熟悉的敘述:
 (N
年前)台幣升破35對1美元,台灣的公司會倒
掉一堆
 基本工資若是調漲,企業會倒掉一堆
 若是 xxxxx,企業會倒掉一堆

是無法升級,還是不想升級?
 誰都想當派大星!
6
軟體開發流程
需求
開發
分析
設計
實做
佈署/維護
測試
7
需求:木工,軟工,傻傻分不清楚

(1/2)
XX 總經理:Teddy 啊,我們請木工做一個衣
櫥,木工會幫我們測量衣櫥大小。如果木工
不小心把木版的尺寸裁切錯誤,是要自己吸
收費用的,不可能讓業主來出這一筆錢。你
們做系統經驗不足,都沒有給我們『專業』
的建議,導致需求改來改去的。現在又要我
們全部負擔需求修改的費用,這樣是不是不
合理?
8
需求:木工,軟工,傻傻分不清楚




(2/2)
妳家衣櫃四周的牆壁位置,地板與天花板的
高度,會隨時變來變去的嗎?
衣櫃門板材質選好之後,木版也裁切好了,
妳還可以改變材質嗎?
木工把衣櫃都做好之後,妳可以因為突然發
現『衣服太多放不下』的這個理由,請對方
拆掉重作嗎?
衣櫃作到一半妳可以請木工改成狗屋嗎?
9
實做:硬體代工的思維

老闆:
 我一個工程師
3~4 個月就可以獨立設計一塊電
路板,你們 6~7 個人做個『小』軟體搞了兩年還
做不出來?
 沒有測試人員沒關係,工程師自己測就很好了。
 什麼,要花錢買 software components,15 萬,
這麼貴,自己寫比較省。要導入 Scrum,10 萬,
這麼貴,自己試就好了 。要導入自動化測試,8
萬,這麼貴,人工測一測就好了。要.......『賣夠
共阿啦』,要什麼一律免談。
10
維護:600 多個 bugs 要怎麼修?




做專案不需要自動化測試,做產品才要。
寫程式的時間都沒有了哪有時間寫測試。
解 600 多個 bugs 要靠找『domain knowhow』很強的人來幫忙。
我最多給你三天,在三天之內把這個 bug
給我改好。
11
Outline

現況
 改變
未來
 結論

12
台灣的軟體開發方式與思維
需要改變
13
Software:都是名字惹的禍

事實:
 軟體不軟。實際上,

軟體很硬。
軟體工程的目的:
 讓你有能力可以把軟體做出來。
 讓你的軟體變軟。
 讓你在可接受的成本範圍內達成上述兩件事。
14
什麼是軟體設計

What is Software Design?
 By
Jack W. Reeves, 1992, C++ Journal.
 http://www.developerdotstar.com/mag/articles/reeve
s_design.html.

軟體開發好比:
 Software
development is driving
 Software development is gardening
 All programming is maintenance programming
15
軟體開發教改宣言: Agile Manifesto,




2001
Individuals and interactions over processes
and tools
Working software over comprehensive
documentation
Customer collaboration over contract
negotiation
Responding to change over following a plan
16
敏捷實務作法







Testing early, often, and automated
Incremental design
Daily deployment
Customer involvement
Continuous integration
Short development cycles
Incremental planning
17
Agile methods






eXtreme Programming (XP)
Scrum
Feature Driven Development (FDD)
Dynamic Systems Development Method
(DSDM)
Agile Unified Process (AUP)
…
18
Scrum
Vision
Developers
PO
SM
Stakeholders
Product
Owner
Product
Backlog
Sprint Planning
Meeting
PO
Sprint
Backlog
Developers
SM
Feedbacks
Daily Scrum
Meeting
Developers
PO
1 Day
Developers
PO
PO
SM
Developers
SM
Sprint
Retrospective
Meeting
SM
Sprint Review
Meeting
19
為什麼是 Scrum?

軟體從業人員的直覺: It works!

實施門檻低:只要一個下午的訓練就可以上手

具備無限的擴充性

解決現實世界遭遇到的問題
把計畫變成動詞
營造分工且合作的環境
良好的回饋機制
分階段逐步改善 (不可能一步到位)
 減少浪費
 好玩(有趣)才能持續




20
我們如何導入 Scrum: 事前準備





人 (團隊 + 外部顧問)
觀察 (2-5天) + 面談 (一人/一小時)
一個小時的 Scrum 簡介
一到兩個小時的 sprint planning meeting 演練
Scrum 開發環境






座位調整 (利於溝通) +不受外部干擾的環境 (利於思考)
大桌子
大螢幕 (22”以上,雙螢幕更佳)
高級無線滑鼠,鍵盤
空白牆面或大白板 (taskboard, product backlog)
(專屬)會議室
21
我們如何導入 Scrum: 開始做

熟悉Scrum框架: 2-4 sprints

持續改善
 訂定階段性目標
 決定改善方法
 執行
 檢討改善項目
 重複第一步驟,直到達成目標
22
Scrum Master 的一天

觀察,觀察,觀察
 團隊
 Product
Owner
 其他相關人員

協助專案依循 Scrum (Agile) 精神進行
23
Product Owner 的一天

回答團隊成員的問題

研究競爭者產品

耕耘 Product Backlog

對外代表團隊與客戶,業務,行銷,老闆等相
關人員互動
24
Scrum 帶給我們最大的改善

穩定的產出

較高品質的產出
 每個
sprint 結束都有一個潛在可交付的軟體

依據需求優先順序施工

軟體變軟
25
Scrum 會議改善了我們的合作模式

Sprint Planning Meeting


Daily Scrum Meeting


讓每一天都有明確的工作目標
Sprint Demo (Review) Meeting


還沒動工,就知道要做什麼,有哪些事情要做,做多久
定期驗證系統是否符合顧客所需 (產品改善回饋機制)
Retrospective Meeting

回顧過去 + 展望未來 (流程改善回饋機制)
26
幾個最基本的實務作法






Testing
Continuous Integration
Refactoring
Pair Programming
Shared Code (Collective Ownership)
Test-Driven Development
27
Outline
現況
 改變

 未來

結論
28
Scrum 為什麼很難


任何改變都很難
Scrum 是一種制度


培養敏捷素養





專制 vs 民主
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
持續改善
29
導入 Scrum 不要忽略

軟體設計基本功夫依然重要
 OO
concepts, design patterns, architectures, etc.

軟體工程實務作法依然重要

努力追求成為卓越的專業人員依然重要

人性
30
Scrum roadmap

Type A Scrum: winning teams

Type B Scrum: winning product portfolios

Type C Scrum: winning companies
31
參考書籍
(1/2)
32
參考書籍
(2/2)
33
Is it good to drink?
喝看看(做看看) 就知道
34
結論:

軟體很硬,需要借助軟體工程讓它變軟

實施軟體工程需要方法

Scrum 是一個好方法
Question?
35
Linked slides
36
Product owner
Scrum Master
Team
Role
Sprint planning
meeting (4-8 hrs)
Vision
Story
Product backlog
Sprint backlog
Task
Burndown chart
(task, story, release)
Artifact
Scrum
Activity
Daily Scrum
(15 mins)
Sprint
(2-4 weeks)
Sprint review
meeting
(4 hrs)
Sprint
retrospective
meeting (3 hrs)
37
Agile workspace
38
Visual Studio Team System: Better Software Development for Agile Teams
Sprint Planning Meeting 讓需求與時
程透明化 (1/4)
軟體
分析設
計文件
客戶需
求文件
Customer
SA/SD
Programmers
傳統以文件為主的溝通模式
39
Sprint Planning Meeting 讓需求與時
程透明化 (2/4)
軟體
客戶需
求文件
Customer
分析設
計文件
SA/SD
Programmers
在許多不確定性下開發軟體
40
Sprint Planning Meeting 讓需求與時
程透明化 (3/4)
Vision
Developers
PO
SM
Stakeholders
Product
Owner
Product
Backlog
Sprint Planning
Meeting
PO
Sprint
Backlog
Developers
SM
Feedbacks
Daily Scrum
Meeting
Developers
PO
1 Day
Developers
PO
PO
SM
Developers
SM
Sprint
Retrospective
Meeting
SM
Sprint Review
Meeting
41
Sprint Planning Meeting 讓需求與時
程透明化 (4/4)
會議結束後產生施工所需的 stories 與 tasks
42
Daily Scrum Meeting 讓每個人每天都
有明確的工作目標 (1/2)
不要點到我
每次都在討論
同樣的事?
這個問題不關
我的事
傳統(每週)會議流於進度報告或
成為找「代罪羔羊」的會議
看不出來
我睡著了吧
43
Daily Scrum Meeting讓每個人每天都
有明確的工作目標 (2/2)
http://www.xqa.com.ar/visualmanagement/wp-content/uploads/standup2.jpg
44
Sprint Review Meeting 提供一個定期
產品改善回饋機制 (1/2)
3
軟體
(一年半載之後)
1
客戶需求
2
軟體開發
Customer
5
4
回饋
這不是
我要的
傳統作法:客戶在專案後期才拿到軟體,
回饋週期太長且回饋次數太少
45
Sprint Review Meeting 提供一個定期
產品改善回饋機制 (2/2)
http://www.agilemanagement.net/AMImageArchive/OpsReview4.jpg
Scrum作法:每個 sprint 客戶都看到軟體,
回饋週期短且回饋次數多
46
Retrospective Meeting 提供一個檢視
與改善開發流程的機制 (1/2)
測試都沒做
就要拿給客戶
程式碼亂到
改不下去
完整 build 一次
系統需要3小時
空調太冷,
都快感冒了
傳統作法:影響開發效率的問題要反應給誰?
何時反應? 誰會關心? 誰去追蹤?
47
Retrospective Meeting 提供一個檢視
與改善開發流程的機制 (2/2)
http://pragmaticagile.files.wordpress.com/2008/09/25092008003.jpg
Scrum作法:團隊成員在 sprint
結束前檢視現況並提出改善行動
48
Shared Code

(1/2)
傳統分工模式:
 每個模組有一個負責人

好處:
 個人專長極大化個人效率極大化

問題:
 派工困難
Web UI
Business
Logic
Database
 專業分工形成一堵高牆
 個人成長有限
Driver
 人員流動對專案造成極大影響
49
Shared Code

實施 shared code:


程式碼為所有開發人員共享
好處:





(2/2)
派工比較容易
很多眼睛在看,有效提升程式品質
個人成長性高
人員流動對專案影響較小
挑戰:


Web UI
Database
Business
Logic
Driver
初期成員抗拒
需要長時間經營
50

劉可煒 王瑞材老師訪問矽谷超微電腦公司
51
劉可煒王瑞材老師訪問矽谷超微電腦公司與在美校友合影
52
53
54