一、說明
軟體開發/維護,離開不了測試,產品品質不但直接影響用戶體驗,更代表著企業形像、信譽,極為重要。
二、RD開發及測試要點
- 必需知道「原由」 (故事)
 - 必需有明確「開發目標」 (驗收標準/案例)
 - 必需拆解出「工作項目」
 - 每個「工作項目」應有對應的「測試項目」
 - 測試項目應需有明確敘述
- 環境: 如有前置環境,請描述如何建構測試環境
 - 5W1H: 對象(What)、目的(Why)、位置(Where)、時間/步驟(When)、人員(Who)、方法(How)
 - 對與錯: 測試正確性時,什麼狀況為「正確」;測試錯誤狀態時,什麼狀況為「錯誤」
 
 - 所有改動的影響,必需親自測試一次
- QA難以測試的,需在RD內部做「白箱測試」
 - 需大量資料比對的,需編寫測試工具
 
 
- 故事 <=> 驗收標準(案例) <=> 工作項目 <=> 測試項目
 - 白箱測試:測試者了解程式內部結構與邏輯,針對程式碼路徑、條件分支、邏輯判斷進行測試(如:單元測試)
 
實務範例:登入功能測試
- 故事:使用者需要登入系統查看個人資料
 - 驗收標準(案例):使用帳號密碼登入(包含多種情境與驗證機制)
- AC1:使用者輸入正確的帳號與密碼,系統驗證通過後建立 Session,並自動導向至首頁(Dashboard),顯示「歡迎回來」訊息
 - AC2:使用者連續輸入錯誤密碼 3 次後,帳號暫時鎖定 15 分鐘,並顯示「帳號已被鎖定,請稍後再試」
 
 - 工作項目(以 AC1 為例):
- 前端:實作登入表單(帳號、密碼欄位、送出按鈕)
 - 後端:實作登入 API(POST /api/login)
 - 後端:實作帳號密碼驗證邏輯(資料庫查詢、密碼 hash 比對)
 - 後端:實作 Session 管理(建立、驗證)
 - 前端:實作登入成功後導向首頁並顯示歡迎訊息
 
 - 測試項目(以 AC1 為例):
- 輸入正確帳號與密碼,驗證登入成功且導向首頁
 - 驗證登入後 Session 正確建立且包含使用者資訊
 - 驗證首頁顯示「歡迎回來」訊息
 
 
三、QA測試要點
- 必需知道「原由」 (故事)
 - 必需有明確「測試目標」 (驗收標準/案例)
 - 需了解「原由」、「測試目標」、「工作項目」、「測試項目」之間的關係
 - 精確測試與模糊測試
- 精確測試
- 必需要求RD條列測試項目,如果測試複雜,還要步驟化環境建置
 - 必需要求RD說明改動影響
- 功能、頁面、按鈕、表單欄位、錯誤訊息、流程
 
 
 - 模糊測試
- 自行評估可能影響並設計測試項目
 - 請「限時」測試
精確測試必需100%完成,模糊測試取重點完成
 
 
 - 精確測試
 - 評估本案對使用者影響或使用者可能遇到的狀況
 
QA是RD與User間的橋樑,不但需要求程式正確性,還需注意使用者體驗
QA的全名為Quality Assurance engineer,即品質保證工程師,其中最核心的任務並非是測試,而是保證產品交付的品質
四、測試分類
- 邏輯行為正確性
- 步驟(Create, Read, Update, Delete, Search, Export, Import)
 
 - 資料正確性
- 資料內容、計算規則、計算數值
 
 - 畫面正確性
- 前端顯示內容、版面、順序、習慣
 
 - 錯誤訊息
- 錯誤訊息處理&顯示
 
 - 自動化測試
- 前端自動化測試
- 行為測試(BDD) - 工具:
- Selenium:支援多瀏覽器,生態系統成熟,適合大型專案
 - Cypress:執行快速、除錯方便,適合現代前端框架
 - Playwright:微軟開發,支援多瀏覽器自動化,API 簡潔
 
 
 - 行為測試(BDD) - 工具:
 - 後端自動化測試
- 單元測試(unit test) - 工具:
- PHPUnit:PHP 的標準單元測試框架(使用教學)
 - Jest:JavaScript/Node.js 測試框架,配置簡單
 - JUnit:Java 的主流單元測試框架
 
 - 功能測試(function test)
 
 - 單元測試(unit test) - 工具:
 
 - 前端自動化測試
 
測試策略:測試金字塔
建議的測試比例與重點:
- 單元測試(70%):快速、成本低,測試最小可測試單位(函式、方法)
 - 整合測試(20%):測試模組間的互動與資料流
 - E2E 測試(10%):模擬使用者操作,測試完整流程,執行較慢但最接近真實情境
 
五、參考
六、Log
- 2019-04: Mars Hung編寫於HackMD
 - 2019-08-01: Mars Hung重製成md檔