驗收測試

驗收測試 (Acceptance Testing) #

溝通的鴻溝:想像 vs. 執行 #

開發過程中最常見的矛盾在於:客戶對功能的設想,往往無法承受電腦前真槍實刀的考驗。

人類語言是模糊的,但電腦程式須是精確的。當業務方僅憑模糊的概念描述需求,而開發者試圖將其轉化為精確程式碼時,溝通的落差就此產生。 這引發了兩個核心問題:

1. 陷阱:過早精細化 (Premature Precision) #

概念描述核心矛盾對策
不確定原則業務方在專案尚未啟動時,即要求精確預知最終結果早期資訊極度匱乏與需求的具體性衝突承認早期資訊不足
預估焦慮研發方在尚未評估實作細節前,就被迫做出精確交付承諾技術複雜度未知與時程死線的衝突避免過早給出死板承諾
解決方法學會 「推遲 (Deferral)」 與分階段精細化隨著專案推進,資訊完整度增加後再逐步細化逐步精細化預估

2. 假性共識 #

很多時候,研發和業務在交流細節時,雙方都「以為」達成了共識,直到交付時才發現南轅北轍。

  • 解方:編寫自動化的驗收測試。這是避免誤解的唯一真理標準。

什麼是驗收測試? #

驗收測試(Acceptance Testing)的定義很簡單:用來確定需求是否已經「完成 (Done)」的依據。

它是業務方與研發方之間的合約,必須具備以下特質:

特質規範細節與差異預期價值
執行方式盡量自動化減少依賴手動測試,確保在每次修改代碼後皆能快速、準確地驗證功能提升回歸測試效率
對象視角業務與測試導向驗收測試是寫給業務方與測試人員看的,而非僅供開發者理解建立團隊共同語言
測試性質非單元測試屬於黑箱測試,關注系統的整體功能行為,而非程式碼內部的運算邏輯確保交付符合需求

專業研發者的責任: 你有責任讓業務方、測試方都清楚明白「現在要做什麼」。如果需求不明確,你就不能開始寫程式。


實作策略:面對 GUI 的挑戰 #

在編寫驗收測試時,圖形使用者介面(GUI)往往是最棘手的部分,因為它變動頻繁且難以自動化測試。

原則策略做法預期效益
表象與本質分離GUI 僅是表象體認到 GUI 只是底層抽象概念的一種視覺呈現,並非邏輯核心降低測試對介面的依賴
針對穩定層測試聚焦抽象元素測試應針對背後相對穩定的業務邏輯與資料結構進行驗證提升測試腳本的生命週期
繞過 UI 交互直接呼叫 API透過 API 直接進行邏輯驗收,而非糾結於按鈕位置、顏色或 CSS 選擇器減少因 UI 改版導致的損壞

驗收測試是需求的最終依據。沒有自動化的驗收測試,你就無法自信地說出「我做完了」。