現代軟體測試與 AI 實戰 (7):Built-in Quality 內建品質與測試重用實踐
敏捷與 DevOps 的核心宗旨:「品質不是檢查出來的,而是內建在設計之中的」。教你如何重用 Shared Test Utils 與 API 合約測試,實踐真正的左移測試 (Shift-Left)。
目錄
系列文章地圖
點節點可以直接跳到那一篇。
經過前幾篇探討的測試孤島與環境迷思,我們意識到將品質責任丟給 QA 團隊(丟過牆策略)往往是災難的開始。
在 DevOps 與 SAFe(Scaled Agile Framework)等現代軟體工程思維中,最關鍵的原則之一是 Built-in Quality(品質內建)。品質必須從一開始就深植於系統架構與開發流程中,不能留到最後一道防線再補救。
什麼是 Built-in Quality?
Built-in Quality 是在設計與開發時就放進品質檢查,讓檢查點分散在每個階段,不靠專案尾段的最後一關 QA 攔截 Bug。
傳統觀念把品質當作「附掛(Bolt-on)」,也就是在製造完成後再靠「最後的檢查(Inspection)」來過濾瑕疵品。但是軟體系統何其龐大複雜?當程式碼寫完,內部包含了無數的糾纏邏輯與狀態變革。若在開發結束後才除錯,成本與風險將呈幾何級數上升。
Built-in Quality 的核心做法有這幾項。
- 測試驅動開發(TDD)/行為驅動開發(BDD)。
- 頻繁的持續整合(Continuous Integration)。
- 消除技術債(積極的 Refactoring)。
- 制定強制的程式碼規範(例如 Linting 與靜態分析,我們將在下一篇專文探討)。
- 架構的低耦合與模組的獨立可測試性。
不過,每位開發者都開始狂寫測試之後,很快會面臨另一個問題:「寫測試太耗時了!一直重複寫一樣的測試打底程式庫。」
這時候,重用(Reutilization) 就成了讓開發者徹底落實 Shift-Left 左移測試的推手(Enabler)。
Reutilization 作為 Enabler:重用測試資產
如果團隊裡每個成員在編寫單元測試或整合測試時,都需要自己「發明」Mock 設定或資料庫建置邏輯,那麼落實 Built-in Quality 就會因為阻力太大而宣告失敗。
為了成為推動左移測試的「Enabler(推手)」,我們應該強調下面兩種實踐。
1. 建立 Shared Test Utils (共用測試工具包)
💡 展示:把 Mock 行為包裝起來
// BAD: 每次都在測項內手寫 mock
const userRepo = mock<UserRepository>();
userRepo.findById.mockResolvedValue({ id: 1, name: "Test" });
// GOOD: Shared Test Utils
export const createMockUser = (overrides = {}) => ({
id: 1,
name: "Test",
role: "User",
...overrides,
});
// 在任何測試裡都能一秒重用
const user = createMockUser({ role: "Admin" });2. 利用 API 合約測試 (Contract Testing) 避免笨重跨服務 E2E
微服務架構中,A 服務呼叫 B 服務。傳統上我們為了驗證這點,會在測試環境把 A 跟 B 整組架起來打(E2E)。這不僅極度緩慢又容易出 Flaky 錯誤。
在 Built-in Quality 思維中,團隊雙方會制定「API 合約(Contract)」。
- 重用合約:B 服務開發者只負責驗證「自己產出的結構(JSON Schema)是否符合合約」。A 服務開發者利用同一份合約做為 Mock 來源。
- 好處:測試完全解耦(Decoupled),A 團隊的開發人員隨時可以跑完幾百個測試,再也不必依賴脆弱的上游伺服器。合約就成了團隊之間最珍貴的「可重用測試資產」。
結語與下集預告
品質是開發者一行一行程式碼堆疊出來的。 藉由「重用測試庫」以及「擁抱 DevOps 精神」,我們成功拔除了把測試左移推行到開發者身上的阻力。但光有「心法」不夠,工程紀律終究需要系統層級的強硬手腕來維持。
在分支一的最後一篇文章中,我們將透過 GitHub Actions 打造這條防線,告訴你何謂「Quality Policies」: 在 CI/CD 打造品質防線:設定 Quality Gate 拒絕爛代碼。
支持作者 ☕
透過 LINE Pay 支持
透過 Ko-fi 支持
相關文章
2026 Obsidian AI 外掛推薦:從搜尋、寫作到記憶系統的 5 大神器
Obsidian 裝了幾百篇筆記卻找不到?本文推薦 5 款必裝的 Obsidian AI 外掛,涵蓋語意搜尋、寫作輔助,以及結合 FSRS 的 EngramQuest 記憶系統。
什麼是驗證矩陣 (Verification Matrix)?讓 AI 從需求端守護品質
探討 AWS AIDLC(AI-Driven Development Life Cycle)中的驗證矩陣概念。介紹如何利用 AI 將抽象需求轉化為清晰的測試與驗收準則,在規劃階段就落實測試左移。
現代軟體測試與 AI 實戰 (8):Quality Policies 實踐,在 CI/CD 打造品質防線
有了優秀的單元與整合測試後,我們必須將其轉化為 Quality Policies(品質政策)。本篇展示如何在 GitHub Actions 實作 Quality Gate,打造堅不可摧的 CI/CD 流程。
留言討論
Facebook 留言