Under the hood as GoFreight SDET / 產品品質的幕後推手 — SDET

GF 小編
GoFreight HQ
Published in
6 min readApr 11, 2024

by Miti Lin

前言

GoFreight 是個全球雲端貨運代理管理系統,也是 2,800 億美金的國際貨運代理產業裡的明日之星,我們賣的不是產品,而是革新:以科技賦能重新定義海空運作業系統!

透過 GoFreight 讓分秒必爭的貨運代理產業從傳統紙本作業昇華成高速數位產業,而 SDET(Software Development Engineer in Test)在這裡扮演著不可或缺的角色!不僅是因為 SDET 的技術專長,更因為 SDET 體現了 GoFreight 的核心價值和我們所信奉的一切 —創新、品質與效率。

如何讓客戶相信 GoFreight 能研發高品質的產品乃至信任我們是高水準的公司的功臣就是 SDET,在另一篇 SDET 如何帶給 GoFreight 事半功倍的效率和品質! 敘述了 SDET 如何帶來高效率的測試與高品質的產品。

主旨

SDET 是測試與開發的契合者,將信念注入於確保軟體品質與持續改進的追求之中。

在這邊讓我們來看看 SDET 如何讓突破各種難關,解決各種難題而讓這一個目標成為可能,並告訴大家 SDET 是如何在 GoFreight 之中佔據一個舉足輕重的的地位,以及他們如何改變了整個 GoFreight 的軟體開發生態系統 。

透過 SDET 的努力,不僅確保了 GoFreight 的品質和可靠性,還推動了整個行業的創新與進步。SDET 不僅是驗證數據的實踐者,更是引領品質保障和技術創新的領航者!

SDET 透過慎密的測試策略、自動化測試與持續整合,大幅提高了軟體的開發效率和產品品質。SDET 是 GoFreight 產品研發過程中的堅定後盾,扛起了 80% 以上的系統、端對端測試重任,為 QA 釋放出更多寶貴資源,讓 QA 專注於發掘新功能和探索式測試,發揮他們的專業技能來發掘更有價值的問題。這樣不僅讓 GoFreight 在測試資源的調度上更加彈性,也讓整體開發更加有效率。

加速 CI/CD 流程

“最佳的測試策略是早發現,早修復。” — Martin Fowler

以下是初期 GoFreight 的開發流程

在初期的 GoFreight,Functional Test 與 Auto Test 的 Build verification test 都是在更新 stage server 後才開始測試,從 RD 準備好新功能到可以發布往往需要 3~5 個工作天。但是基於測試左移(Shift-Left Testing)的精神,越早越早發現問題修復所消耗的成本越低。

於是 SDET 將大量的手動測試轉成自動化測試,並且移到 “Merge PR” 前,讓 RD 自己來發現問題並提早修正,而另一方面則是讓 QA 能夠更有效地運用資源,把心力花在刀口上,集中精力於自動化測試沒有覆蓋到測試項目上。

最後將整個整個測試時程縮短到 1.5 小時就可以準備發布新版本,速度提升的程度讓人驚艷!

減少更新後被客戶發現的問題

“測試不僅是找錯,更是為了確保我們正確做對的事。” — James Bach

透過 SDET 的不懈努力和創新,確保產品在上線前經過各種測試的考驗。SDET 完成了

  1. 將自動化測試的覆蓋範圍擴大
  2. 在 CI 階段,針對每個 PR 做更完整的自動化測試。

如下圖所示,在半年的時間內,每次更新上線後,每個版本客戶回報的 issue 數量,從 30 以上降到 5 以下,最後的成果有著顯著的進步。

縮短 CI 測試時間

隨著覆蓋範圍的擴大,更多的挑戰也迎面而來。整個自動化測試的時間長達 9 個小時, 要同時兼顧品質與時間越來越困難,SDET 首先導入了平行化測試,在 Jenkins 裡針對同一個 CI 的測試,將它拆成多個任務分給 n 個 worker 同時處理,大大降低了實際等待時間。

但是這時 SDET 也發現了另一個問題!下面的圖呈現的是 SDET 在平行化後,分給 14 個 worker 的各自處理時間圖,非常不平均,所以 SDET 導入了「自動平均測試時間」的方式,讓每個 worker 的負載與時間平均分散,讓實際等待時間縮得更短。 這兩個功能極大的提高了發布效率和開發團隊的生產力,打破了品質與時間兩難的抉擇。

略過相同原始碼的測試

為了保證 GoFreight 在不同的階段的品質都合乎標準,以下階段都會做一次測試:

  1. 進入 stage 分支時,確認自己 PR 的程式碼沒有問題
  2. 進入 master 分支時,確認這個 sprint 的 PR 之間不會互相影響
  3. 進入正式 release 前,確認 hotfix 分支合併回 master 分支後沒有副作用產生

如下圖所示,同樣藍色區塊的測試組合 Frontend Unit Test / Backend Unit Test / System Test ,就算是同樣的程式碼整個 CI 的流程還是會跑三次。SDET 透過自動分析程式碼的改變的方式,當發現同樣的程式碼已經有測試成功的紀錄時就略過測試。

下圖減少了相同程式碼重複測試的情形發生,快速又直接的縮短了整個發布流程時間,尤其這個改變特別在有緊急發布需求時 ( 如 hotfix ) 時更能快速反應,不浪費一分一秒。

總結

“品質不是測試出來的,而是設計出來的,但通過測試來保證。” — W. Edwards Deming

SDET 在 GoFreight 扮演的角色遠超過傳統的測試工程師,他們是專業的測試與開發能力的結合,是推動創新、確保品質、加速發布新程式的關鍵力量。從自動化測試框架的構建到 CI / CD 流程的最佳化,SDET 團隊的不懈努力已經為 GoFreight 帶來了顯著的成果,提高了產品品質,縮短了程式迭代過程,進而增強了市場競爭力。

面向未來,SDET 將繼續在技術前沿探索和創新,透過引入新的工具和方法,比如微服務測試、AI 最佳化的自動化策略、以及加強安全和提高效能測試,保持 GoFreight 的領先地位。測試是個想像的世界,如何利用創造力讓想像化為實際就是 SDET 這個職位的魅力所在。發揮自己實力的讓測試更有品質、 效率、創新,這就是 SDET 對於 GoFreight,乃至整個 Vertical SaaS 的意義所在!

--

--