2. This presentation is provided on a strictly private and confidential basis for information purposes only.
現任 KKBOX 軟體測試工程師,
對怪怪的事情特別好奇,喜歡追溯原因、改善流程。
工作內容從軟體測試二轉成 Release Manager。
致力於改變開發文化,透過工具、指標、科學方法,
使軟體版本從開發到發布的過程變得更快速穩定!
也是個在家中愛講幹話、
跟快速發展的半獸人鬥智的平凡媽媽~ xD
About Me
3. This presentation is provided on a strictly private and confidential basis for information purposes only.
目錄
● 煤礦坑裡的金絲雀 (Canary Test)
● 為什麼 KKBOX 需要 階段性發布(Canary Release)?
2017~2019 的血淚分享
● 搭配 Canary Release 的流程、工具、觀測機制
● 心得
● 結論
4. This presentation is provided on a strictly private and confidential basis for information purposes only.
煤礦坑裡的金絲雀
images
5. This presentation is provided on a strictly private and confidential basis for information purposes only.
階段性發布 for Android, iOS
平台
Android
Play Store
iOS
App Connect Store
開放比率
手動
(3~4 天)
自動
(7 天)
實務
5%, 20%,
50%, 100%
如右圖
用戶可以
手動更新?
NO YES
● 適用於 Regular Release
● 可透過實際用戶的使用來偵測異常
● 可快速發布版本到市場上,
取得用戶回饋
6. This presentation is provided on a strictly private and confidential basis for information purposes only.
為什麼 KKBOX 需要
階段性發布?
7. This presentation is provided on a strictly private and confidential basis for information purposes only.
2017 KKBOX App 版本開發進度會議...
請問 Andoid 目前進度?😶
已經給版了,在等 QA 測試...
QA 還在測的樣子..
👷
為什麼又是 QA? QA 不能再快一點嗎?
這樣新功能無法儘速進入市場。👤
我也不想成為 bottleneck 啊! 💂
測試成為版本發布的瓶頸
必須解決! 😑
8. This presentation is provided on a strictly private and confidential basis for information purposes only.
2017 KKBOX App 測試與發布流程
42 天
9. This presentation is provided on a strictly private and confidential basis for information purposes only.
2017 KKBOX App 測試與發布流程
5 man-day
10. This presentation is provided on a strictly private and confidential basis for information purposes only.
2017 KKBOX Android App 回歸測試
11. This presentation is provided on a strictly private and confidential basis for information purposes only.
2017 KKBOX Android App 回歸測試找出的缺陷
花時間找了一堆 Minor
Issue可是最後都不修,
這些問題幾乎沒客訴 😑
13. This presentation is provided on a strictly private and confidential basis for information purposes only.
2018 KKBOX App 測試與發布流程
5 man-day
14. This presentation is provided on a strictly private and confidential basis for information purposes only.
2018 H2 KKBOX App 測試與發布流程
但直接向 100% 使用者發布
若有重大問題,
會造成大量客訴 😑
拿掉大型 Regression的風險,改由 Acceptance 分擔
17. This presentation is provided on a strictly private and confidential basis for information purposes only.
只有階段性發布
但未搭配一些流程跟
工具,是不行的。
18. This presentation is provided on a strictly private and confidential basis for information purposes only.
一年後...
19. This presentation is provided on a strictly private and confidential basis for information purposes only.
2019 KKBOX App 測試與發布流程
拿掉大型 Regression的風險,在內部軟體測試期間,
改由更精確的新功能測試、自動化集成驗收測試分擔
減少
人工回歸測試
的成本 👍
20. This presentation is provided on a strictly private and confidential basis for information purposes only.
2019 KKBOX App 測試與發布流程
搭配內部審核流程,掌握已知風險
Regular Release 採用階段性發布,
由小規模的發布,當作軟體測試的最後延伸的環節,增加多樣性,
觀測外部用戶滿意指標,儘早偵測異常。
加速得到使用者回饋
調整方向 👍
21. This presentation is provided on a strictly private and confidential basis for information purposes only.
2019 KKBOX App 測試與發布流程
22 天
22. This presentation is provided on a strictly private and confidential basis for information purposes only.
搭配階段性發布的一些工具跟指標
23. This presentation is provided on a strictly private and confidential basis for information purposes only.
2019 KKBOX App 內部發布審核(Sign-Off)流程
搭配內部發布審核流程,掌握已知風險
內部發布審核
(Sign-Off)
24. This presentation is provided on a strictly private and confidential basis for information purposes only.
KKBOX App 內部發布審核(Sign-Off)流程
Regular Release 採用階段性發布,
由小規模的發布,當作軟體測試的最後延伸的環節,增加多樣性
階段性發布
(Canary Release)
25. This presentation is provided on a strictly private and confidential basis for information purposes only.
階段性發布 for Android, iOS
平台
Android
Play Store
iOS
App Connect Store
開放比率
手動
(3~4 天)
自動
(7 天)
實務
5%, 20%,
50%, 100%
如右圖
用戶可以
手動更新?
NO YES
● 適用於 Regular Release
● 可透過實際用戶的使用來偵測異常
● 可快速發布版本到市場上,
取得用戶回饋
26. This presentation is provided on a strictly private and confidential basis for information purposes only.
KKBOX App 內部發布審核(Sign-Off)流程
觀測外部用戶滿意指標,儘早偵測異常。
● Crash
● App Rating
● 客訴量
監控指標
(App 滿意指標)
27. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - Crash Detection
28. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - Daily Crash User Ratio
Daily Crash User Ration 越低越好,
代表 Crash Free 越高
29. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 最新 3 個版本的 Daily Crash 河道圖
根據向使用者開放的 % 數,
確認單一版本的 Crash Ratio 是否過高。 來源:App Center
30. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 最新 3 個版本的 Daily Crash 河道圖
搭配可不可以開 100% 的計算器
31. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 單一版本的 Crash Ratio
Android Play Console 有此功能 👍
iOS App Connect Center 無此功能... 只能自己算。😐
32. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測指標 - 總體、單一版本 App Rating
Android Play Console 都有此功能 👍
iOS App Connect Center 無此功能... 只能打 API 回來自己算。😐
33. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 總體、單一版本 App Rating
來源:Android Play Console
34. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 總體、單一版本 App Rating
iOS App Connect Center 無此功能... 只能打 API 回來自己算。😐
35. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 總體、單一版本 App Rating
iOS App Connect Center 無此功能... 只能打 API 回來自己算。😐
方法:透過打 API 把每一頁內的評論搜集進我們的 DB 建檔
https://itunes.apple.com/tw/rss/customerreviews/page=1/id=<ap
p-store-id>/sortby=mostrecent/xml
36. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測 Crash 指標 - 總體、單一版本 App Rating
iOS App Connect Center 無此功能... 只能打 API 回來自己算。😐
37. This presentation is provided on a strictly private and confidential basis for information purposes only.
觀測指標 - App 滿意指標
38. This presentation is provided on a strictly private and confidential basis for information purposes only.
2019 H2 KKBOX Android 出版狀況
39. This presentation is provided on a strictly private and confidential basis for information purposes only.
不是每個情況都適合採用階段性發布。
若 App 穩定度較高,採用後一直發 Hotfix 的風險會較小。
(KKBOX App 平均 Crash Free 98~99.6 %)
採用階段性發布,需搭配一些流程、跟工具,配合觀測短期、長期
的指標,才能觀測整體 App Release 是否是健康的?
可以決策是否該停損(Stop Rolling-out),發行 Hotfix。
心得 (1/3)
40. This presentation is provided on a strictly private and confidential basis for information purposes only.
商業利益:
● 適用於 Regular Release 慢慢發布
○ Hotfix 通常會直接開到 100%
● 有助於快速小規模將新功能發布到市場上並取得回饋
● 甚至可以搭配 A/B Test 來觀察(Android)
App 穩定性維護:
● 有助於小規模觀測版本的穩定性,
及早發現複雜使用環境的相容性問題。
心得 (2/3)
41. This presentation is provided on a strictly private and confidential basis for information purposes only.
心得 (3/3)
Store Console 其他輔助工具比較:
平台
Android
Play Store
iOS
App Connect Store
開放比率
手動
(3~4 天)
自動
(7 天)
實務
5%, 20%, 50%,
100%
如右圖
用戶可以手動更新? NO
YES
(可彌補
無法手動決定開放%的缺點)
可以觀測
單個版本的生命徵象
Rating, Crash...
YES NO
可以輕易匯出評論追蹤 YES NO
有其他的測試工具 YES NO
Store 審查時間 0.5 ~ 3 HR 5~7 Day
42. This presentation is provided on a strictly private and confidential basis for information purposes only.
總結 - 階段性發布(Canary Release)
● 適用於 Regular Release.
● 階段性發布前,團隊對已知的風險要有掌握度,才能立即反應
● 可以減少內部的測試時程,加速發布版本到市場上
(42 day → 22 day)
● 需要搭配相關的工具跟指標來衡量版本發布的健康程度,
以決策是否要 100% 發布或是停損
● 可善用各平台發布工具的特性,來微調內部的流程
43. This presentation is provided on a strictly private and confidential basis for information purposes only.
參考資料
技術文件:
● Google Play Staged Rollout
● iTunes Connects Phased Release
● Microsoft Store Gradual Package Rollout
● iOS 開發筆記 - 透過 iTunesConnect RSS 處理 App
Customer Reviews 資料
44. This presentation is provided on a strictly private and confidential basis for information purposes only.
Q & A
45. This presentation is provided on a strictly private and confidential basis for information purposes only.
THANK YOU