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