Upload
james-peng
View
311
Download
2
Embed Size (px)
Citation preview
Continuous Integration in Agile Software Development For Software Quality
James.Peng
2016/04/27
http://note.jhpeng.com/
2
Continuous Integration
3
持續Continuous
有事沒事就來一下
4
整合Integration
結合在一起
5
持續整合Continuous Integration
有事沒事就結合在一起
6
持續整合Continuous Integration
有事沒事就把大家的 Code 結合在一起跑看看有沒有錯
7
持續整合Continuous Integration
有事沒事就把大家的 Code 結合在一起跑看看有沒有錯
可以具體一點嗎?
8
自動化 + 測試 + 系統反饋Continuous Integration
9
自動化 + 測試 + 系統反饋Continuous Integration
目的就是自動化的替軟體品質做把關
10
在 1994 年 首次被提出
11
Continuous Integration
Agile Development 的武功招式之一
12
Agile Development ?
13
先提一下 傳統開發方式
14
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
15
1 個月
傳統開發方式Waterfall 瀑布開發
ReleaseWaterfall 瀑布式開發
1 週 1 週 1 週1 週
16
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
17
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
18
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
19
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
20
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
21
1 個月
傳統開發方式Waterfall 瀑布開發
Release一切順利,功德圓滿
1 週 1 週 1 週1 週
22
1 個月
傳統開發方式Waterfall 瀑布開發
Release今天報告到此結束,謝謝各位
1 週 1 週 1 週1 週
23
1 個月
傳統開發方式Waterfall 瀑布開發
Release但現實世界是殘酷的
1 週 1 週 1 週1 週
Release
24
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問
1 週 1 週 1 週1 週
Release
25
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問現實世界的需求,是複雜的
1 週 1 週 1 週1 週
Release
26
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問是多變的
1 週 1 週 1 週1 週
Release
27
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問是不可預期的
1 週 1 週 1 週1 週
Release
28
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問是抽象模糊的
1 週 1 週 1 週1 週
Release
29
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問是不確定性的
1 週 1 週 1 週1 週
Release
30
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問所以 PLAN 階段,通常是最為重要的
1 週 1 週 1 週1 週
Release
31
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問PLAN 、 PLAN 、 PLAN
1 週 1 週 1 週1 週
Release
32
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問PLAN 擬訂 SPEC
1 週 1 週 1 週1 週
Release
33
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問SPEC 、 SPEC 、 SPEC
1 週 1 週 1 週1 週
Release
34
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問PLAN 的最高境界
1 週 1 週 1 週1 週
Release
35
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問CMMI 軟體能力成熟度模式 Level 5
1 週 1 週 1 週1 週
Release
36
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問一些 Master 和 Mentor 曾經開示我
1 週 1 週 1 週1 週
Release
37
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問文件寫的好,程式沒煩惱
1 週 1 週 1 週1 週
Release
38
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問如果專案失敗的話
1 週 1 週 1 週1 週
Release
39
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問會再制定更詳細的規範及約束文件
1 週 1 週 1 週1 週
Release
40
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問所謂 「按圖施工,保證成功」
1 週 1 週 1 週1 週
Release
41
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問如果專案又再次失敗了的話
1 週 1 週 1 週1 週
Release
42
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問真的不能怪我
1 週 1 週 1 週1 週
Release
43
1 個月
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問一定是你文件沒寫好
1 週 1 週 1 週1 週
Release
44
1 個月3 週1 週
傳統開發方式Waterfall 瀑布開發
需求變變變 時間不夠用 測試被跳過
整合後 Build 不過 很恐怖,不要問內心獨白:不是沒寫好,是根本沒時間寫
45
敏捷開花 ?
46
敏捷開發Agile Development
47
之前逛 Facebook 看到過一句話。
敏捷開發Agile Development
48
在十倍速的時代,不是大的打敗小的、不是強的打敗弱的,是快的打敗慢的。
敏捷開發Agile Development
49
敏捷開發,難道是指把畫押日期提前就叫做敏捷?
敏捷開發Agile Development
50
敏捷開發,難道是指打字速度比較快,換一把機械鍵盤?
敏捷開發Agile Development
51
敏捷開發 =?
52
敏捷開發是一種迭代與增量式開發
53
1 個月
傳統開發方式Waterfall 瀑布開發
Release
1 週 1 週 1 週1 週
54
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
敏捷開發Agile Development
55
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
畫押日期不變,但增加 Sprint 次數
敏捷開發Agile Development
56
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
每個 Sprint 有點類似一次 Mini-Waterfall
敏捷開發Agile Development
57
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
但 這個類似 Mini-Waterfall 的 Sprint
敏捷開發Agile Development
58
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
不是 Waterfall
敏捷開發Agile Development
59
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
沒有 Waterfall 分隔線
敏捷開發Agile Development
60
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
Build 和 Test 是自動化的
敏捷開發Agile Development
61
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
Plan 出的都是一個個 User Story
敏捷開發Agile Development
62
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
User Story 切出的 Task 都有 優先序
敏捷開發Agile Development
63
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
先做優先權高的事
敏捷開發Agile Development
64
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
盡量在 Sprint 裡產出 最小可行性產品
Source : http://www.bnext.com.tw/article/view/id/37675
敏捷開發Agile Development
65
1 個月1 週 1 週 1 週 1 週
FormalRelease
Beta Release
Beta Release
Beta Release
得到 feedback 做出調整,再輪迴一次
Source : http://www.bnext.com.tw/article/view/id/37675
敏捷開發Agile Development
66
舉個淺顯的例子來解釋
明日邊界 Edge of Tomorrow
67
劇透 防雷線
明日邊界 Edge of Tomorrow
68
敏捷開發Agile Development
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關才能從中解脫。
69
敏捷開發Agile Development
有一天湯姆要拯救世界,戰死了
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關才能從中解脫。
70
敏捷開發Agile Development
他發現死了,可以無限次接關重玩。
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關才能從中解脫。
71
而記憶和技能都保留,甚至可以累積。
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關才能從中解脫。
敏捷開發Agile Development
72
於是湯姆透過不斷 Save/Load 大法
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關。
敏捷開發Agile Development
73
累積經驗實力,修正調整攻略
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關。
敏捷開發Agile Development
74
終於破關了。
Rule4 、記憶可以繼承。
Rule1 、 Tom 死了會 Reset 回到出發前的早晨。Rule2 、無論怎麼死,都適用 Rule1 。Rule3 、無法逃離這種循環,除非破關。
敏捷開發Agile Development
75
1 個月1 週 1 週 1 週 1 週
FormalRelease
Tom戰死了Tom 戰死了 Tom戰死了
Tom 重置調整攻略 Tom 重置調整攻略 Tom 重置調整攻略
Tom 贏了
Beta Release
Beta Release
Beta Release
Tom : 野豬騎士來囉
敏捷開發Agile Development
輪迴是累積經驗的最佳方式
76
1 個月1 週 1 週 1 週 1 週
儘快調整 儘快調整 儘快調整TDD TDD TDD
持續整合 持續整合 持續整合 頻繁檢驗 頻繁檢驗 頻繁檢驗
FormalRelease
Source: https://zh.wikipedia.org/wiki/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
Beta Release
Beta Release
Beta Release
敏捷開發Agile Development
本次實作重點
本次實作重點
77
1 個月1 週 1 週 1 週 1 週
儘快調整 儘快調整 儘快調整TDD TDD TDD
持續整合 持續整合 持續整合 頻繁檢驗 頻繁檢驗 頻繁檢驗
FormalRelease
Source: https://zh.wikipedia.org/wiki/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
Beta Release
Beta Release
Beta Release
中心思想是希望能盡快取得回饋並做出調整
敏捷開發Agile Development
78
So, What’s different
79Source : http://www.slideshare.net/dbMaestro/the-future-of-change-management-and-devops-for-dummies
一次爆發 一次爆發 一次爆發正常能量釋放
正常能量釋放 正常能量釋放
80
小強越晚發現,越碩大肥美
Release
1 個月
傳統開發方式Waterfall 瀑布開發
81
小強越晚發現,越碩大肥美
Release
1 個月
傳統開發方式Waterfall 瀑布開發
下醫治末病
82
來不及長大的小強
1 個月
來不及長大的小強 來不及長大的小強 來不及長大的小強
敏捷開發Agile Development
83
來不及長大
1 個月
來不及長大 來不及長大 來不及長大上醫治未病
敏捷開發Agile Development
84
聽完覺得太遙遠,回到現實世界
85Source: http://www.ithome.com.tw/news/94998
微軟開發平臺事業部全球資深副總裁潘正磊決定從 VS 2012版,要讓開發流程更加敏捷化,來加快產品交付周期,因此決定全面改變微軟研發軟體的流程。數千人參與的 VS 團隊,導入 Scrum 敏捷開發 和 DevOps 思維,將 3 年一次改版步調,加速到每 3周釋出一次小改版
2012 年,微軟開發團隊也敏捷了
86Source: http://www.ithome.com.tw/news/94998
微軟開發平臺事業部全球資深副總裁潘正磊決定從 VS 2012版,要讓開發流程更加敏捷化,來加快產品交付周期,因此決定全面改變微軟研發軟體的流程。數千人參與的 VS 團隊,導入 Scrum 敏捷開發 和 DevOps 思維,將 3 年一次改版步調,加速到每 3周釋出一次小改版
證明這不是我幻想出來的
87
言歸正傳
88Source: http://www.agilemanifesto.org/iso/en/
這次實作的部分
CI Server
89
目前 CI Server 上用到的工具
90
E2E TEST
BUILDSERVER
UNIT TEST
DevOps
Source: https://zh.wikipedia.org/wiki/DevOps
CI Server黑箱
白箱
91
E2E TEST
BUILDSERVER
UNIT TEST
DevOps
Source: https://zh.wikipedia.org/wiki/DevOps
CI Server黑箱
白箱 能抓 BUG 就是好箱
92
E2E TEST
BUILDSERVER
UNIT TEST
DevOps
Source: https://zh.wikipedia.org/wiki/DevOps
CI Server
三個主軸
BUILDSERVE
R
93
情況一:軟體開發階段
94
Build Server每日建置Daily Build / Nightly Build
軟體開發保持高度可見性
95
1 工作天Fast Build
Mail Trigger : Failure
早上 8 點Full Build
Mail Trigger : Always
中午 12 點Full Build
Mail Trigger : Always
下午 18 點Full Build
Mail Trigger : Always
Fast Build
Mail Trigger : Failure
Build Server 的一天日常1.Checkout SVN Code
2.Rebuild Debug
3.Rebuild Release
4.Check Coding Style
5.Static Code Analysis
6.Check Duplicated Code
7.Check Complex Methods
8.Unit Test
9.E2E Test
1.Checkout SVN Code
2.Rebuild Debug
3.Rebuild Release
96
假設功能寫好了 整合看看能不能 build 過
97
乾 哪個白痴誰 Commit 前不先檢查的
98
看一下信箱Server 最近是否 build 的過
99
原來白癡是自己剛剛複製一個 Form 忘記拿掉
100
2 天後
101
功能又寫好了 再次整合看看能不能 build 過
102
又出現錯誤SVN 衝突明明都修正了
103
看一下信箱Server 最近是否 build 的過
104
你麻痺來電一下 IVERSON
105
Commit 收工
106
隔天早上 8 點
107
不穩定 ?
108
CI ServerCode Review 系統反饋使軟體開發透明化
• Coding Style 檢查• 靜態程式碼分析• 重複程式碼分析• 函數複雜度分析• Unit Test 覆蓋率• E2E Test 覆蓋率
109
系統反饋的喜悅
110
檢查 Coding Style
111
靜態程式碼分析
112
重複程式碼分析
113
複雜度分析
114
經過一番修正之後
115
今天又默默的拯救了部門
116
雖然沒有人知道
117
感謝 CI Server 的努力
感謝 CI Server讚嘆 CI Server
E2E TEST
118
情況二:軟體寫好了
119
End-to-End Testing• 模擬使用者和軟體的互動行為• 測試一整個 User Story
120
繁體Win 7 V
上面告訴我要做 E2E 測試
121
繁體 简体 English
Win 7 V
要測 多國語言
122
繁體 简体 English
Win 7 V
Win 8
Win 10
Win XP
要每個 OS 都跑看看
當場不敢回話了
123
功能 A 測試結果
繁體 简体 English
Win 7 (x86) V
Win 8 (x86)
Win 10 (x86)
Win XP (x86)
Win 7 (x64)
Win 8 (x64)
Win 10 (x64)
Win XP (x64)
要包含 x86 x64
當場頭都不敢抬起來了
124
有 20 個測項要測 24平台 *20 測項= 480 次萬一眼神對到,叫我測怎麼辦
125
經過 2 天的不眠不休
20 測項 * 每測項 1 次花 5 分鐘 * 24平台 /60 分鐘 / 24 小時 = 1.67 天 20 測項 * 每測項 1 次花 5 分鐘 * 24平台 /60 分鐘 / 8 小時 = 5 工作天
126
全部測完了測了 480 次
127
全部測完了測了 480 次謎之聲:更新進版後,記得重測
128
全部測完了測了 480 次否則怎能保證加功能後,之前測的沒錯
129
目前版號 V1.0.0.10 版
130
目前版號 V1.0.0.10 版已經累積手動測試 4800 次
131
同時還面臨
132
同時還面臨
寶寶心理苦,可寶寶不說
133
同時還面臨
解決方案
134
同時還面臨
「先維護一下履歷表」
135
思考如何「不讓自己做重複的事」
136
「讓別人做重複的事」
137
「建立軟體自動化測試環境」
138
139
首先,把 20 個「測項」寫成「測試程式」
140
接著放到特定 Share Folder
141
所有虛擬測試平台,會定時自動複製、執行
142
把測試報告寫回特定路徑
143
CI Server 會定時反饋給開發人員
144
你寫的 20隻測試程式
還會收到精美報表
145
你寫的 20隻測試程式把 5 個工作天,縮短為 100 分鐘
還會收到精美報表
20 測項 * 24平台 * 每測項 1 次花 5 分鐘 / 轉為工作天 (60 分鐘 * 8 小時 ) = 5 工作天
20 測項 * 每測項 1 次花 5 分鐘 * 1( 24平台同時自動運行) = 100 分鐘
146
你寫的 20隻測試程式
還會收到精美報表
一天跑一次,一年測 115,200 個測項一年工作天( 12 個月 * 每個月 20 工作天) * 24平台 * 20 測項 =115200 次
147
你寫的 20隻測試程式
還會收到精美報表
需要 5 個專職工程師,一起測 1 年( 一年跑 115200 次 * 每個測項 5 分鐘 ) / 轉為工作天 (60 分鐘 *8 小時 ) / ( 一年工作天 12 月 * 每月 20 天 ) = 5 年
148
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
0.00
5.00
10.00
15.00
20.00
25.00
30.00
在 24 個平台上 進行軟體測試一年
手動測試自動測試
測項數量
所需人力20 個測項
需要 5 個專職工程師,一起測 1 年( 一年跑 115200 次 * 每個測項 5 分鐘 ) / 轉為工作天 (60 分鐘 *8 小時 ) / ( 一年工作天 12 月 * 每月 20 天 ) = 5 年
人
149
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
0.00
5.00
10.00
15.00
20.00
25.00
30.00
在 24 個平台上 進行軟體測試一年
手動測試自動測試
測項數量
所需人力40 個測項
葉問 要打 10 個 人
150
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
0.00
5.00
10.00
15.00
20.00
25.00
30.00
在 24 個平台上 進行軟體測試一年
手動測試自動測試
測項數量
所需人力100 個測項
劍一人敵,不足學,學萬人敵 人
UNIT TEST
151
情況三:開發階段、改版或重構時
152
Unit Testing – 單元測試• 針對程式的最小測試單位• 測試對象為單一函式• 獨立,不與其他測試程式碼相依
153
小強越晚發現,越碩大肥美
Release
1 個月
傳統開發方式Waterfall 瀑布開發
當需求變化到要 砍掉重練時 架構大改時
154
小強越晚發現,越碩大肥美
Release
1 個月
傳統開發方式Waterfall 瀑布開發
就要進行 Code Refactoring 重構
155
小強越晚發現,越碩大肥美
Release
1 個月
傳統開發方式Waterfall 瀑布開發
這時候就一定要有 Unit Test
156
這裡就不贅述了
157
What’s Next
158
自動化發行
159Source: https://zh.wikipedia.org/wiki/Scrum
自動化發行 + 自動化發行版測試
160Source: https://zh.wikipedia.org/wiki/Scrum
Scrum+Kanban
自動化發行 + 自動化發行版測試
1612015.03.02
Q&AJames.Peng
http://note.jhpeng.com/
162
Q :哪有美國時間寫 測試程式?
Source: https://youtu.be/8cT_Ulmcrys
163
A: Unit Test 先寫 重點函式 E2E Test 先寫 完美路徑
164
不要迷戀哥 (覆蓋率 100% ) ,哥只是個傳說
165
A:其他的遇到再補就好了
Q :先修 BUG ,還是 先寫測試?
166
167明日邊界 Edge of Tomorrow
A:先寫測試,再修 BUG
168明日邊界 Edge of Tomorrow
A:就可以看到 紅燈 變 綠燈
169明日邊界 Edge of Tomorrow
A:可以避免同樣錯誤不再出現第二遍
170
IT’S DEMO TIME
1712015.03.02
James.Peng
http://note.jhpeng.com/
THANK YOU