QA 的角色再定義#

在專業開發團隊中,QA (Quality Assurance) 職責不僅是「找 Bug」,
更像是團隊中的規格定義者與系統描述者。

1. 需求規約定義者 (Specifier)#

QA 協助定義系統在各種狀況下應有的表現,特別是開發者容易忽略的角落:

維度定義範例預期目的
極端情況
(Corner Cases)
發生機率低且
複雜的組合情境
空值 (Null)
極大/極小值、
不合法的資料類型
確保系統
極限狀態下
不崩潰
邊界條件
(Boundary Conditions)
臨界數值陣列的 index 0
輸入長度的限制上限、
剛好符合條件的門檻值
避免「差一錯誤
(Off-by-one)」
異常路徑
(Unhappy-path)
偏離正常預期用戶輸入錯誤、
資料庫連線超時
權限不足等失敗情境
驗證系統的回復力
與錯誤處理

2. 特性描述者 (Characterizer)#

QA 透過探索式測試,觀察並描述系統在真實運行下的實際運作情況,確保系統行為符合業務預期。


自動化測試金字塔 (The Test Pyramid)#

作者依據負責人員、目的與覆蓋範圍,將測試策略分為五個層次。
專業測試策略應呈現金字塔狀:底層數量最多,越往上越精簡。

Figure 8-1: The test automation pyramid

測試種類一覽表#

測試種類負責人員目的與定義關鍵指標與備註
單元測試
(Unit Tests)
程式設計師在最低層次上定義系統行為。
確保個別函式或類別運作正常
• 覆蓋率應接近 100%
• 這是 TDD 的產物
元件測試
(Component Tests)
QA業務人員針對封裝後的系統元件進行測試,
確保業務規則被正確執行
• 覆蓋率約達 50%
• 重點在驗收功能
• 主要測試正常路徑,
測試異常路徑意義不大
(應在單元測試完成)
整合測試
(Integration Tests)
系統架構師
首席設計師
聚焦於編排性 (Choreography)
測試各個元件組合在一起時是否協調運作
• 適合較大型系統
• 通常在此階段進行性能測試
系統測試
(System Tests)
QA / 系統整合方對「整合完畢的系統」
執行自動化測試
• 確保系統構造正確 (Correct Construction)
• 這不等於確保系統行為正確 (Correct Behavior)
人工探索式
(Exploratory)
人類 (QA/User)結合人類的直覺與創意,
驗證預期行為並挖掘非預期行為
• 機器做不到的測試
• 探索系統預期之外的缺陷

策略細節解析#

為什麼元件測試不測異常路徑?#

在元件測試層級(通常對應到驗收測試),重點在於驗證「業務邏輯是否如預期運作」。
至於輸入驗證、錯誤捕捉等底層的異常處理,
應該在成本較低、回饋較快的單元測試層級就已經被攔截並驗證完畢。

Figure 8-2: Component acceptance test

整合測試 vs. 系統測試#

這兩者常被混淆,區別在於關注點不同:

類別關注核心範例目標
整合測試
(Integration)
通訊與協作資料庫連線是否成功、
Microservices 接口格式是否對齊
組件間交互正確性
系統測試
(System)
整體組裝系統是否能正確啟動
各模組與環境變數是否部署於正確位置
軟體交付完整性

Figure 8-3: Integration test

專業的測試策略不是「所有測試都混在一起」,而是各司其職。
程式設計師顧好單元邏輯,架構師顧好元件連接,QA 顧好業務規則與系統全貌。

不要讓人類去做電腦能做的事(如回歸測試)。
人類智慧應用於探索式測試,發現那些自動化腳本想像不到的邊緣問題。