Let's CI/CD!Agile x CI/CD如何相輔相成,提升98%以上效率!
2024/3/1 作家:林家瑋Ray
1889
作者/林家瑋(Ray Lin) AWS Security Hero, PMP, CSM
軟體開發的傳統困境
以電商網站開發為例,傳統的瀑布式開發模式下,一個包含搜尋商品、商品介紹頁面、加入購物車、金流支付、訂單處理以及物流系統串接的電商網站,假設需要花費一年的時間開發,初期團隊可能會花費兩到三個月進行詳細的規劃和需求蒐集,並把這些需求轉化為明確的規格文件,以便開發團隊進行實現。隨後的五個月將主要用於開發工作,然後進行QA測試。測試過程中可能會發現數百甚至數千個問題,需要反復來回修正,這一階段可能又會耗費超過一個月的時間。等到專案進行到第十個月時,才能有一個初步版本供客戶評估,此時客戶可能會皺著眉頭說:「這個網站跟我當初想的不一樣。」或是「我可以再加一些功能嗎?」
在這種情況下,如果開發團隊被告知需要進行更改或新增功能,他們通常會面有難色並感到困難重重,有時甚至需要回答:「這個要改底層架構,可能還要再花三個月!」想當然,再花三個月專案就Delay啦,所以最後就是PM去跟客戶溝通協調,承諾在後面的一年維護期間逐步完善這些功能,最後勉強地上線一版客戶不太滿意,開發團隊又要花很多時間額外修補的版本。這種情況就像是所謂的「七傷拳」,即使取得了一些進展,也是以自身和客戶的雙重損傷為代價。
為何要擁抱敏捷(Agile)?
敏捷開發的概念非常簡單,將原本一年的週期切成24段,每一段為兩週,在兩週的時間就要做完規劃、需求蒐集、分析、設計、開發、測試最後讓客戶Review並驗收上線。有些人就會想,一年都做不完了,最好是兩週能做完啦!
我們可以用一句話說明能如何解決問題:「網站切得小,敏捷做的好。」將大系統切分成多個小的可管理模組或單元,可以更有效地實現小步快跑增量式交付客戶價值。
舉例來說,如果兩週的目標只要做好商品頁面,其中包括左上角的商品圖片,右上角的商品名稱和簡單規格,以及下方的產品介紹和詳細規格,暫時不做購物車、庫存系統或金流支付。在這樣的情況下,是否兩週可以完成呢?答案當然是可以!接下來,每個兩週的迭代將陸續加入庫存系統、購物車、金流支付等,而且每次迭代後都會有客戶的審查和回饋。這種做法不僅加速開發進度,還提供了更快速的應對變化的能力。即使客戶要修要改,由於這些功能頂多才花兩週開發,也能迅速因應調整。即使產出不符合預期要停損,頂多也只浪費兩週的時間與成本而已,仍在可接受範圍內。
敏捷與CI/CD的結合
敏捷開發雖好,但在實踐中仍會遇到某些挑戰。例如,我們的團隊通常在每兩週迭代的最後一天安排Review會議,以供客戶驗收與回饋完成的功能。而能進入Review會議驗收的功能,必須經過QA與產品負責人(PO)的測試並確認無誤,才能進Review會議驗收。因此,至少需要在會議前兩天就要先把功能開發完並部署到測試環境,以便QA跟PO才能進行測試。然而,這裡會出現了一個問題:開發團隊通常需要花費約六個小時來完成程式碼的建置和部署,這在一個八小時的工作日中幾乎佔據了一整天。
也就是說,一天只能部署一次,若在測試中發現錯誤,則需等到隔天才能完成修正和重新部署,這樣就延緩了測試進度,這大大地限制了我們在迭代末期進行錯誤修正的能力。等於我們只能有一次的失敗機會,只要失敗第二次,週五的Review會議就可以跟客戶說拜拜下次再開囉。
為解決這一問題,我們的開發團隊導入了CI/CD Pipeline。所謂CI/CD是持續整合(Continuous Integration)和持續部署(Continuous Deployment)的簡稱,是現代軟體開發中一個非常重要的實踐,常見的CI/CD工具像是Jenkins、GitLab DevSecOps與AWS CodePipeline等。CI是RD每次將程式碼提交到GitHub、GitLab或AWS CodeCommit等程式庫時,會自動運行一系列的測試,以確保程式碼的變更不會破壞產品的現有功能,此做法有助於及早發現問題,並提高程式碼品質。CD則是接在CI後面,當程式碼通過測試並整合後,CD可確保這些變更可以快速且安全地部署到測試或正式環境。
CI/CD的價值與好處
不論是CI還是CD,都需要透過自動化流程,以減少人為錯誤並加快交付的速度。自動化意味著開發人員在提交程式碼後不需進行繁瑣的監控和指令輸入,從而節省大量時間。除了可釋放出雙手做更多的事情之外,更將原本需要6小時的整合、建置與部署時間縮短至僅需6分鐘就完成了,效率提升超過98%!這樣一來,原本一天只能部署一次的限制變成可以進行多次部署,從而大大降低了因錯誤導致無法在Review會議上展示功能的風險。
此外,導入CI/CD不僅提升了開發效率,減少錯誤和部署上的難度,還有助於縮短從構想到開發的時間。在DevSecOps的背景下,CI/CD的實踐更是提升了安全性,因為安全測試、報告彙整以及審核流程都可以被整合進整個開發和部署的Pipeline中,進一步加強產品的整體安全性。
在VUCA時代的今日,軟體開發產業正在經歷一場革命。從傳統的瀑布式開發到敏捷開發,甚至是將兩者結合的混合式開發,我們見證了如何通過調適性來應對不斷變化的市場需求和技術挑戰。敏捷開發不僅緩解了需求與技術複雜的問題,更讓開發過程成為一種與客戶密切合作、持續回饋的過程。同時,CI/CD的導入更進一步優化了此一過程,使開發團隊能夠更迅速、更高效地應對變更,同時提高了產品品質和安全性。這一系列變革不僅顯示了軟體開發領域的創新能力,也為其他行業提供了應對快速變化環境的寶貴經驗。隨著技術的不斷發展,我相信,軟體開發領域將變得更加高效且安全。
Ray從事軟體產業近二十年,擅長從0到1組建團隊與開發新產品,主要專長為資訊安全與稽核、DevSecOps、AI、AWS雲端架構設計、BA與SA、軟體專案管理與SaaS敏捷產品開發等。Ray曾獲得台灣發明家創意獎、EC-Council Cybersecurity Career Mentor,經歷過美商、日商、台商、新創、上市櫃、跨國集團等不同型態的公司並擔任跨領域高階主管。除了持有資安、雲端、AI、專案管理、敏捷等超過40張國際專家證照之外,目前也是全球首批台灣首位AWS Security Hero、DevSecOps Taiwan社長、ISC2 Taipei Chapter理事與專案管理大獎(PTGA)執行顧問,至今亦翻譯校稿出版共七本敏捷相關書籍。
您可能也喜歡這些文章