持續交付(Continuous Delivery)究竟是什麼?Yahoo亞太區產品研發工程部軟體工程師李卿澄表示,根據維基百科的定義,持續交付是軟體工程中的開發方法。開發團隊得在快節奏下開發產品,並且確保每次釋出版本的品質皆為可靠。
而李卿澄表示,Yahoo自己有一套定義對持續交付的定義:從提交程式碼到產品進入線上環境中,都沒有任何人為的介入,一切都要仰賴自動化。「要達到如此,必須建立持續整合的流程。」他表示。
在持續交付中,李卿澄表示,他著重於更快的開發行程及更好的軟體品質。而如何在顧及品質的前提下加速開發步調,他表示,必須在開發流程之中盡可能導入自動化,讓開發人員的時間、精力都集中在開發新功能上,其他的事情如測試、部署等例行公事,可以透過電腦自動化執行。此外,因為這些流程由電腦執行,比人類可靠許多,讓軟體品質上也能獲得一定的提升。
在開發階段中,他認為,必須特別注意某些事情,如開發者須確定程式碼可以在本地端進行編譯,並且自行執行基本單元測試,避免提交品質不佳的原始碼到程式庫中。另外,Code review也相當重要,讓團隊中的成員彼此了解對方的程式碼,確保程式碼應有的品質。
而原始碼自提交就開啟了自動化流程。他表示,自動化流程要盡可能地結合版本控制系統,讓原始碼每一次的改變都會自動地產出相對應的上線候選版本,如此在釋出最終版本前,就能有許多候選版本中挑選,並且得以決定不同種的功能分別要於哪些版本中釋出。
此外,原始碼提交後,也可以透過Jenkins等DevOps工具,觸發自動化流程。例如程式碼若有所改變或者無法通過編譯,自動化的流程會立即停止。團隊必須停下手邊工作,一同思考如何解決問題。如此一來,開發者可以盡快的提早得知問題並且進行修正,避免把問題的版本發布給使用者。
而為了讓團隊成員對於流程的動態都有所掌握,目前可以透過開源的Web Dashboard顯示目前開發的動態。不過,李卿澄認為此方法成效有限。由於團隊成員多忙於開發或其他工作,無暇理會這些自動化程式送出的通知。
所以Yahoo決定使用實體燈泡,顯示團隊目前專案的狀況,如綠燈就是代表正確,而紅燈代表錯誤。他表示,視覺化的意義除了讓團隊快速的得到回饋,也讓團隊的人都意識到必須為產品品質以及讓自動化流程的順利與否負責。
李卿澄表示,自動化流程包含3大步驟:提交暫存、驗收測試及非功能性測試。
圖片來源:Yahoo
自動化流程中的3大步驟:提交暫存、驗收測試及非功能性測試
他表示,目前導入自動化流程總共有3大步驟,第一是提交暫存(Commit stage),第二是驗收測試,第三則是非功能測試。
當程式碼通過審核並提交到程式庫中,便會進入提交暫存的階段。此階段的目的為確保App在技術層級可以運作。另外也要對程式碼進行單元測試,檢驗假想輸入是否會產出預期的輸出。當單元測試進行結束時,也會針對App進行基本分析,如App的測試覆蓋率測試。當覆蓋率越高,代表原始碼通過越多自動化測試,可預期未來釋出的App也會有一定的品質保證。
在驗收測試步驟中,團隊得衡量是否確實把產品價值傳遞給使用者。另外,此階段也要進行基本的UI測試,如煙霧測試,確保最重要的功能是否能運作。如果使用者一開啟App就當機,就代表程式碼本身存很大的問題。
最後,當App通過最後非功能性測試就可以釋出。此階段主要測試App的穩定性及效能表現。首先要通過猴子測試(Monkey test),即撰寫腳本程式隨機地滑動App,測試其穩定性。不過,他表示此測試會碰上實務面問題,比如腳本自動打開了飛航模式,導致無法得知與網路相關的測試結果。而效能表現則要測試冷開機測試、記憶體的使用量,或是因為過多UI元件導致App滑動不順暢。
李卿澄表示,全面自動化目前仍然屬於理想階段。產品在釋出前,仍然需經過最後一道的人工測試步驟。不過,他表示,目前人工測試所占比例已經非常的小,僅有比較特別的案例需要經過人工測試,比方說App中涉及金流的過程。但是事情並不在App釋出後就打住,如果上架後發現錯誤,下次便會檢討是否要在流程中增加額外的測試,避免錯誤再次發生。