--- # System prepended metadata title:海大餐飲外送系統-測試文件(STD) --- # 測試文件 (STD) - **系統名稱**:Bing2Go - **專案名稱**:海大餐飲外送系統 - **撰寫日期**:2025/12/20 - **發展者**:林津瑄、郭浩、劉俊麟、宋辰星、黃俊源 --- ## 版次變更記錄 | 版次 | 變更項目 | 變更日期 | |---|---|---| | 0.1 | 初版 | 2025/12/20 | | 0.2 | | | | 0.3 | | | | 0.4 | | | | 0.5 | | | | 1.0 | | | --- ## 目錄 1. [測試目的與接受準則](#1-測試目的與接受準則-Objectives-and-Acceptance-Criteria) 1.1 [系統範圍](#11-系統範圍-System-Scope) 1.2 [測試接受準則](#12-測試接受準則-Test-Acceptance-Criteria) 2. [測試環境](#2-測試環境-Testing-Environment) 2.1 [硬體需求](#21-硬體需求-Hardware-Specification-and-Configuration) 2.2 [軟體需求](#22-軟體需求-Software-Specification-and-Configuration) 2.3 [測試資料來源](#23-測試資料來源-Test-Data-Sources) 2.4 [測試工具與設備](#24-測試工具與設備-Tools-and-Equipment) 3. [測試案例](#3-測試案例-Test-Cases) 4. [測試工作指派與時程](#4-測試工作指派與時程-Personnel-and-Schedule) 4.1 [測試成員](#41-測試成員-Personnel) 5. [測試結果與分析](#5-測試結果與分析-Test-Results-and-Analysis) 5.1 [測試結果](#51-測試結果-Test-Results) 5.2 [缺失報告](#52-缺失報告-Defect-Tracking) 6. [追溯表](#6-追溯表-Traceability-Matrix) --- ## 1. 測試目的與接受準則 (Objectives and Acceptance Criteria) ### 1.1 系統範圍 (System Scope) 本測試計畫涵蓋「海大餐飲外送系統」之核心功能驗證,測試範圍包含: 1. 顧客模組:註冊/登入、瀏覽餐廳與菜單、購物車管理、下單結帳、訂單追蹤、和外送員即時通訊、歷史紀錄查詢。 2. 外送員模組:查看訂單、接單、訂單狀態更新、和顧客即時通訊、歷史配送紀錄。 3. 系統整合:前後端 API 資料串接、資料庫存取(MongoDB Atlas)、地圖定位服務(Nominatim API)。 4. 管理員模組:編輯、新增餐廳、管理評論、查看所有訂單、歷史對話紀錄、管理會員。 測試目標版本:v1.0 (Iteration 2 Release) https://github.com/howard522/eating_at_ntou/releases/tag/v1.0 --- ### 1.2 測試接受準則 (Test Acceptance Criteria) 測試程序需要依照本測試計畫所訂定的程序進行,所有測試結果需要能符合預期測試結果方能接受。 - 當測試案例未通過時,相關模組開發之負責人需要進行程式修改(修復 bug 或改動功能),以能讓此案例重新通過測試。 - 重新進行測試時,測試人員需確認其他可能受影響的案例仍可正確執行。 --- ## 2. 測試環境 (Testing Environment) ### 2.1 硬體需求 (Hardware Specification and Configuration) | 項次 | 名稱 | 數量 | 規格 | 備註 | |---|---|---|---|---| | 1 | 伺服器 | 1 | Zeabur | 使用 Zeabur 部屬 | | 2 | 電腦 | 1 | 可連接至網路 | 模擬系統互動 | | 3 | 手機 | 1 | IOS / Android | 驗證 RWD 介面 | --- ### 2.2 軟體需求 (Software Specification and Configuration) | 項次 | 名稱 | 數量 | 規格 | 備註 | |---|---|---|---|---| | 1 | 瀏覽器 | 1 | Chrome / Safari | | | 2 | 伺服器 | 1 | node.js 24+ (nitro) | Zeabur | | 3 | 資料庫 | 1 | MongoDB Atlas | 雲端資料庫 | --- ### 2.3 測試資料來源 (Test Data Sources) - 帳號資料: - 預先建立 3 組測試帳號(1 組作為顧客、1 組作為外送員、1 組作為管理員)。 - 作為外送員的帳號需保證至少有完成一筆訂單的紀錄。 - 確保所有測試帳號的暱稱不是 "古代靈異雙頭戰象",密碼不是 "gd01stgt",頭像不是古代靈異雙頭戰象的圖片,預設外送地址不是 "202基隆市中正區中正路786之1號",聯絡電話不是 "0987987987"。 - 確保有且僅有一個非管理員帳號名稱包含 "potatoo700"。 - 餐廳資料: - 於 MongoDB 預先匯入學校附近的餐廳、菜單與圖片。 - 確保至少一間餐廳的名稱包含 "便當",和至少一間餐廳的名稱不包含 "便當"。 - 保證沒有餐廳的名稱包含 "巴拉巴拉巴拉"。 - 地理資訊:使用海大校區地址作為標準測試座標。 - 訂單資料: - 系統中需事先存在至少兩筆有效訂單資料,該訂單狀態為「待接單」,尚未被任何外送員接單。該訂單須關聯至一名有效顧客帳號與一間有效餐廳,且訂單內容完整(包含餐點項目與數量)。 - 確保至少一筆訂單中的取餐餐廳名稱包含 "便當",和至少一筆訂單的取餐餐廳名稱不包含 "便當"。 - 系統中不得存在其他影響本測試判斷之未接訂單資料。 - 確保至少兩張單建立、完成時間在 2025/12/20-2025/12/25 之間,且兩張單的金額不一樣。 --- ### 2.4 測試工具與設備 (Tools and Equipment) - API 測試:Swagger UI - 單元測試: - Vitest:單元測試執行框架 - Mock Models / Utils:模擬資料庫 Model 與外部 API(如 Nominatim)的回傳 --- ## 3. 測試案例 (Test Cases) ### 3.1 已登入用戶 - **Identification**:DL-US-01 - **Name**:修改個人資料 - **Reference**: - FR-DL-01 - FR-CUS-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號登入 - 點選我的帳戶 - 修改暱稱為"古代靈異雙頭戰象" - 修改密碼為"gd01stgt" - 點選頭像並將頭像改為古代靈異雙頭戰象的圖片 - 按下"儲存變更"按鈕 - 登出 - 使用同個帳號和修改後的密碼登入 - 點選我的帳戶 - **Expected Result**: - 能夠成功使用密碼"gd01stgt"登入 - 我的帳戶頁面顯示的暱稱為"古代靈異雙頭戰象"、頭像是古代靈異雙頭戰象的照片 - **Cleanup**: - 測試人員需將帳號恢復到修改前的狀態 --- - **Identification**:DL-US-02 - **Name**:預設常用電話與地址 - **Reference**: - FR-DL-02 - FR-CUS-02 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號登入 - 點選我的帳戶 - 修改聯絡電話為"0987987987" - 修改預設外送地址為"202基隆市中正區中正路786之1號" - 按下"儲存變更"按鈕 - 登出 - 使用同個帳號登入 - 點選我的帳戶 - **Expected Result**: - 我的帳戶頁面顯示的電話為"0987987987"、外送地址為"202基隆市中正區中正路786之1號" - **Cleanup**: - 測試人員需將帳號恢復到修改前的狀態 --- ### 3.2 外送員 - **Identification**:DL-ORD-01 - **Name**:外送員查看待接訂單清單 - **Reference**: - FR-DL-ORD-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - **Expected Result**: - 畫面顯示至少兩比訂單 - **Cleanup**: - 無 --- - **Identification**:DL-ORD-02 - **Name**:外送員查看依距離排序的待接訂單 - **Reference**: - FR-DL-ORD-01 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選排序、距離最近 - **Expected Result**: - 畫面中的訂單依照距離由近而遠排序 - **Cleanup**: - 無 --- - **Identification**:DL-ORD-03 - **Name**:外送員查看依訂單外送費排序的待接訂單 - **Reference**: - FR-DL-ORD-01 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選排序、最高外送費 - **Expected Result**: - 畫面中的訂單依照外送費由高到低排序 - **Cleanup**: - 無 --- - **Identification**:DL-ORD-04 - **Name**:外送員查看依送達時間排序的待接訂單 - **Reference**: - FR-DL-ORD-01 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選排序、最早送達時間 - **Expected Result**: - 畫面中的訂單依照送達時間由近到遠排序 - **Cleanup**: - 無 --- - **Identification**:DL-ORD-05 - **Name**:外送員依餐廳名關鍵字稱搜尋包含該關鍵字的代接訂單 - **Reference**: - FR-DL-ORD-01 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選搜尋餐廳名稱,並輸入"便當" - **Expected Result**: - 畫面顯示至少一筆訂單,且該訂單的取餐餐廳名稱包含"便當" - **Cleanup**: - 無 --- - **Identification**:DL-ORD-06 - **Name**:外送員查看訂單詳細資訊 - **Reference**: - FR-DL-ORD-02 - FR-DL-ORD-03 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選第一筆訂單的"查看並接單" - **Expected Result**: - 畫面顯示取餐餐廳的名稱及地點、外送地點、預計送達時間、顧客暱稱的一部分、顧客電話的一部分、訂單餐點內容及數量、外送費 - 畫面顯示的顧客暱稱有至少一個字元為"*",顧客電話有至少一個字元為"X" - **Cleanup**: - 無 --- - **Identification**:DL-ORD-07 - **Name**:外送員接單 - **Reference**: - FR-DL-ORD-04 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選第一筆訂單的"查看並接單" - 點選"立即接單" - **Expected Result**: - 畫面顯示"外送任務詳情"字樣 - 點選"我的訂單"可以在列表中找到和接取的任務一樣編號的訂單,且該訂單顯示為配送中 - 點選顧客訂單,該訂單不在列表中 - **Cleanup**: - 測試人員將該筆訂單資料重置回接單前 --- - **Identification**:DL-ORD-08 - **Name**:外送員於訂單中查看餐廳與送達地址並進行導航 - **Reference**: - FR-DL-ORD-05 - **Severity**: - 中 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選第一筆訂單的"查看並接單" - 點選"立即接單" - **Expected Result**: - 畫面顯示取餐餐廳的名稱及地點 - 畫面顯示地圖,地圖中有標出外送員、餐廳、取餐點三個位置 - **Cleanup**: - 測試人員將該筆訂單資料重置回接單前 --- - **Identification**:DL-TRK-01 - **Name**:外送員接單後,系統自動更新訂單狀態 - **Reference**: - FR-DL-TRK-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選第一筆訂單的"查看並接單" - 點選"立即接單" - **Expected Result**: - 點選"我的訂單"可以在列表中找到和接取的任務一樣編號的訂單,且該訂單顯示為配送中 - **Cleanup**: - 測試人員將該筆訂單資料重置回接單前 --- - **Identification**:DL-TRK-02 - **Name**:外送員完成配送並手動切換訂單狀態為已送達 - **Reference**: - FR-DL-TRK-02 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選第一筆訂單的"查看並接單" - 點選"立即接單" - 點選"已送達" - 點選"確認" - **Expected Result**: - 點選"我的訂單"可以在列表中找到和接取的任務一樣編號的訂單,且該訂單顯示為已送達 - **Cleanup**: - 測試人員將該筆訂單資料重置回接單前 --- - **Identification**:DL-01 - **Name**:外送員切換至顧客模式 - **Reference**: - FR-DL-03 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選我的帳戶 - 點選切換為顧客 - **Expected Result**: - 跳出"身份已切換為顧客"提示 - 頁面為"瀏覽店家" - **Cleanup**: - 無 --- - **Identification**:DL-02 - **Name**:外送員查看歷史配送訂單清單 - **Reference**: - FR-DL-04 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇外送員並登入 - 進入顧客訂單頁面 - 點選"我的訂單" - 點選"歷史訂單" - **Expected Result**: - 畫面顯示至少一筆訂單 - **Cleanup**: - 無 --- ### 3.3 管理員 - **Identification**:ADM-RES-01 - **Name**:管理員瀏覽餐廳與餐點清單 - **Reference**: - FR-ADM-RES-01 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 進入管理店家頁面 - 點擊第一間餐廳 - 進入編輯餐廳頁面 - **Expected Result**: - 管理店家頁面顯示至少一間餐廳 - 編輯餐廳頁面顯示至少一樣餐點 - **Cleanup**: - 無 --- - **Identification**:ADM-RES-02 - **Name**:管理員瀏覽特定關鍵字餐廳與餐點清單 - **Reference**: - FR-ADM-RES-01 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 進入管理店家頁面 - 在輸入餐廳名稱欄位輸入"便當" - 點擊第一間餐廳 - 進入編輯餐廳頁面 - **Expected Result**: - 管理店家頁面顯示至少一間餐廳 - 編輯餐廳頁面顯示至少一樣餐點 - **Cleanup**: - 無 --- - **Identification**:ADM-RES-03 - **Name**:管理員可新增、更新、餐廳與餐點資料 - **Reference**: - FR-ADM-RES-02 - **Severity**: - 高 - **Instructions**: - 使用admin帳號登入 - 進入管理店家頁面 - 點擊"新增餐廳" - 進入新增餐廳頁面 - 餐廳名稱輸入"巴拉巴拉巴拉" - 地址輸入"202基隆市中正區正濱路72號" - 電話輸入"0987987987" - 點擊"新增項目" - 餐點名稱輸入"耶耶耶" - 價格輸入"999" - 點擊"建立餐廳" - 進入編輯餐廳:巴拉巴拉巴拉 頁面 - 將電話改成"0123456789" - 將餐點價格改成"10" - 點擊"儲存所有變更" - 點擊"管理店家" - 進入管理店家頁面 - 在輸入餐廳名稱欄位輸入"巴拉巴拉巴拉" - 點擊第一間餐廳 - 進入編輯餐廳:巴拉巴拉巴拉 頁面 - **Expected Result**: - 成功進入編輯餐廳:巴拉巴拉巴拉 頁面 - 畫面顯示餐廳電話為"0123456789" - 畫面顯示餐點價格為"10" - **Cleanup**: - 將餐廳刪除 --- - **Identification**:ADM-ORD-01 - **Name**:管理員查看所有訂單紀錄,並可依日期篩選,可依金額排序 - **Reference**: - FR-ADM-ORD-01 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 點擊"查看訂單" - 進入訂單管理頁面 - 起始日期選擇2025/12/20 - 結束日期選擇2025/12/25 - 排序條件選擇"金額(由高到低) - **Expected Result**: - 畫面顯示最少兩筆訂單,且金額高的在上面 - **Cleanup**: - 無 --- - **Identification**:ADM-ORD-02 - **Name**:管理員查看訂單中每一節點(出餐、配送、完成等)的狀態 - **Reference**: - FR-ADM-ORD-02 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 點擊"查看訂單" - 點擊第一筆訂單 - 進入訂單詳情頁面 - **Expected Result**: - 畫面顯示沒人接QAQ、準備中、已送達、已接收、已完成五種狀態 - **Cleanup**: - 無 --- - **Identification**:ADM-MEM-01 - **Name**:管理員瀏覽會員清單與詳細資料 - **Reference**: - FR-ADM-MEM-01 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 點擊"管理會員" - 進入管理會員頁面 - 點擊第一個會員 - 進入會員詳細資料頁面 - **Expected Result**: - 管理會員頁面顯示至少一個會員 - 會員詳細資料頁面顯示使用者ID、建立帳號時間、電話、地址 - **Cleanup**: - 無 --- - **Identification**:ADM-MEM-02 - **Name**:管理員停用會員帳號 - **Reference**: - FR-ADM-MEM-02 - FR-ADM-MEM-03 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 點擊"管理會員" - 進入管理會員頁面 - 篩選角色選擇"一般用戶" - 點擊第一個會員 - 進入會員詳細資料頁面 - 點擊"停用此帳號" - 點擊"管理會員" - 進入管理會員頁面 - 篩選角色選擇"停權名單" - **Expected Result**: - 畫面顯示至少一個會員 - **Cleanup**: - 解除會員停權 --- - **Identification**:ADM-MEM-03 - **Name**:管理員停用會員帳號 - **Reference**: - FR-ADM-MEM-04 - **Severity**: - 中 - **Instructions**: - 使用admin帳號登入 - 點擊"管理會員" - 進入管理會員頁面 - 篩選角色選擇"一般用戶" - 搜尋欄輸入"potatoo700" - 點擊第一個會員 - 進入會員詳細資料頁面 - 點擊"停用此帳號" - 點擊左上角登出icon - 使用potatoo700帳號登入 - **Expected Result**: - 畫面顯示"您的帳號已被封禁,請聯繫客服了解詳情。" - **Cleanup**: - 解除會員停權 --- ### 3.4 未登入使用者 **Identification**:AU-REG-01 - **Name**:Email 註冊成功 - **Reference**: - FR-AU-01 - FR-AU-05 - **Severity**:高 - **Instructions**: - 進入註冊頁面 - 點擊"電子郵件欄位" - 輸入未註冊的 Email - 點擊"密碼欄位" - 輸入符合規則的密碼(例如 `5487haha`) - 送出註冊 - **Expected Result**: - 註冊成功 - 系統自動導向登入頁面 - **Cleanup**: - 移除本次新增的測試帳號 --- - **Identification**:AU-REG-02 - **Name**:Email 格式驗證 - **Reference**: - FR-AU-02 - **Severity**:高 - **Instructions**: - 進入註冊頁面 - 點擊"暱稱欄位" - 輸入任意暱稱(例如 `暗黑破壞邪神`) - 點擊"電子郵件欄位" - 輸入不合法 Email(例如 `Iwanttogotosleep`) - 點擊"密碼欄位" - 輸入符合規則的密碼(例如 `5487haha`) - 送出註冊 - **Expected Result**: - 顯示 Email 格式錯誤提示 - 不送出註冊 - **Cleanup**: - 無 --- - **Identification**:AU-REG-03 - **Name**:密碼規則檢核 - **Reference**: - FR-AU-03 - **Severity**:高 - **Instructions**: - 進入註冊頁面 - 點擊"暱稱欄位" - 輸入任意暱稱(例如 `暗黑破壞邪神`) - 點擊"電子郵件欄位" - 輸入未註冊的 Email(例如 `handsomehowhow@ntou.edu.tw`) - 點擊"密碼欄位" - 輸入不符合規則的密碼(例如 `阿文`) - 送出註冊 - **Expected Result**: - 顯示密碼不合規定的明確提示 - 不送出註冊 - **Cleanup**: - 無 --- - **Identification**:AU-REG-04 - **Name**:註冊 Email 重複 - **Reference**: - FR-AU-04 - **Severity**:高 - **Instructions**: - 進入註冊頁面 - 點擊"暱稱欄位" - 輸入任意暱稱(例如 `暗黑破壞邪神`) - 點擊"電子郵件欄位" - 輸入已註冊的 Email - 輸入符合規則的密碼 - 送出註冊 - **Expected Result**: - 顯示 Email 已註冊的提示 - 不送出註冊 - **Cleanup**: - 無 --- - **Identification**:AU-LOGIN-01 - **Name**:登入身分選擇(顧客 / 外送員) - **Reference**: - FR-AU-06 - FR-AU-06.1 - **Severity**:高 - **Instructions**: - 進入登入頁面 - 選擇顧客身分 - 輸入顧客帳號與密碼後登入 - 登出 - 再次進入登入頁面 - 選擇外送員身分 - 輸入外送員帳號與密碼後登入 - **Expected Result**: - 顧客身分登入成功並進入顧客首頁 - 外送員身分登入成功並進入外送員首頁 - **Cleanup**: - 無 --- - **Identification**:AU-LOGIN-02 - **Name**:登入失敗提示 - **Reference**: - FR-AU-07 - **Severity**:中 - **Instructions**: - 進入登入頁面 - 輸入錯誤密碼 - 送出登入 - **Expected Result**: - 顯示登入失敗的適當提示 - 不登入成功 - **Cleanup**: - 無 --- - **Identification**:AU-LOGIN-03 - **Name**:忘記密碼提示 - **Reference**: - FR-AU-07.1 - **Severity**:低 - **Instructions**: - 進入登入頁面 - 點選忘記密碼 - **Expected Result**: - 顯示「我也沒辦法」提示 - **Cleanup**: - 無 --- - **Identification**:AU-LOGOUT-01 - **Name**:登出後會話失效 - **Reference**: - FR-AU-08 - **Severity**:高 - **Instructions**: - 使用顧客帳號登入 - 於 A 裝置執行登出 - 輸入首頁網址 - **Expected Result**: - 會話立即失效 - 被導向登入頁或顯示未登入提示 - **Cleanup**: - 無 --- ### 3.5 顧客 - **Identification**:CUS-RES-01 - **Name**:顧客瀏覽餐廳清單並依距離排序顯示 - **Reference**: - FR-CUS-RES-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入瀏覽店家頁面 - **Expected Result**: - 餐廳清單依與顧客選擇的外送地址距離由近到遠顯示 - **Cleanup**: - 無 --- - **Identification**:CUS-RES-01.1 - **Name**:顧客下滑頁面自動載入更多餐廳 - **Reference**: - FR-CUS-RES-01.1 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入瀏覽店家頁面 - 將頁面下滑至接近底部 - **Expected Result**: - 系統自動載入更多餐廳項目 - 已載入的餐廳保持在列表中且不重複 - **Cleanup**: - 無 --- - **Identification**:CUS-RES-02 - **Name**:顧客餐點種類篩選 - **Reference**: - FR-CUS-RES-02 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入瀏覽店家頁面 - 點擊1個或以上搜尋標籤 - 套用篩選 - **Expected Result**: - 清單僅顯示符合條件的餐廳 - **Cleanup**: - 無 --- - **Identification**:CUS-RES-03 - **Name**:顧客查看餐廳詳細資料 - **Reference**: - FR-CUS-RES-03 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入瀏覽店家頁面 - 點選任一餐廳 - **Expected Result**: - 顯示餐廳詳細資料(位置、菜單、價格等) - **Cleanup**: - 無 --- - **Identification**:CUS-CRT-01 - **Name**:顧客將餐點加入購物車 - **Reference**: - FR-CUS-CRT-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入瀏覽店家頁面並選擇餐點 - 點選「加入購物車」 - **Expected Result**: - 餐點成功加入購物車 - 購物車數量或提示更新 - **Cleanup**: - 清空購物車內容 --- - **Identification**:CUS-CRT-02 - **Name**:購物車修改數量、刪除與清空 - **Reference**: - FR-CUS-CRT-02 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 將至少一項餐點加入購物車 - 進入購物車頁面 - 修改數量、刪除特定餐廳的所有餐點 - **Expected Result**: - 數量更新正確 - 指定項目被刪除 - **Cleanup**: - 無 --- - **Identification**:CUS-CRT-03 - **Name**:購物車金額、外送費即時更新 - **Reference**: - FR-CUS-CRT-04 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 將至少兩項餐點加入購物車 - 進入購物車頁面 - 調整餐點數量 - **Expected Result**: - 餐點金額、外送費即時更新 - **Cleanup**: - 清空購物車內容 --- - **Identification**:CUS-ORD-01 - **Name**:顧客設定送達地點與收件資料 - **Reference**: - FR-CUS-ORD-01 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入結帳頁面 - 輸入送達地址、電話與暱稱 - **Expected Result**: - 系統成功保存送達地點與收件資料 - **Cleanup**: - 無 --- - **Identification**:CUS-ORD-01.1 - **Name**:系統驗證地址與電話格式 - **Reference**: - FR-CUS-ORD-01.1 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入結帳頁面 - 輸入不合法地址或電話格式 - 嘗試提交 - **Expected Result**: - 系統提示欄位格式錯誤 - 不允許提交訂單 - **Cleanup**: - 無 --- - **Identification**:CUS-ORD-02 - **Name**:下單前確認訂單明細 - **Reference**: - FR-CUS-ORD-03 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 將餐點加入購物車 - 進入結帳頁面 - **Expected Result**: - 顯示完整訂單明細(餐點、數量、金額、外送費) - 顧客可確認後再送出 - **Cleanup**: - 清空購物車內容 --- - **Identification**:CUS-ORD-03 - **Name**:訂單編號唯一且避免重複送單 - **Reference**: - FR-CUS-ORD-04 - **Severity**: - 高 - **Instructions**: - 使用已註冊顧客帳號登入 - 完成一次下單流程 - 連續點擊送出或重新整理後再次送出 - **Expected Result**: - 訂單產生唯一編號 - 系統避免重複送出相同訂單 - **Cleanup**: - 無 --- - **Identification**:CUS-TRK-01 - **Name**:顧客追蹤訂單狀態與配送進度 - **Reference**: - FR-CUS-TRK-01 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入我的訂單頁面 - 點選"查看詳情" - 進入訂單狀態頁面 - **Expected Result**: - 系統顯示訂單狀態與預估送達時間 - **Cleanup**: - 無 --- - **Identification**:CUS-TRK-02 - **Name**:顧客更新訂單狀態為已送達 - **Reference**: - FR-CUS-TRK-02 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 進入訂單狀態頁面 - 點選「已接收」 - **Expected Result**: - 訂單狀態更新為「已接收」 - **Cleanup**: - 無 --- - **Identification**:CUS-01 - **Name**:顧客切換至外送員模式 - **Reference**: - FR-CUS-03 - **Severity**: - 高 - **Instructions**: - 使用已註冊非admin帳號,於登入介面選擇顧客並登入 - 點選我的帳戶 - 點選切換為外送員 - **Expected Result**: - 跳出"身份已切換為外送員"提示 - 頁面為"顧客訂單" - **Cleanup**: - 無 --- - **Identification**:CUS-02 - **Name**: 顧客可查看歷史訂單紀錄 - **Reference**: - FR-CUS-04 - **Severity**: - 中 - **Instructions**: - 使用已註冊顧客帳號登入 - 點選"我的訂單" - 點選"歷史訂單" - **Expected Result**: - 可以看到歷史訂單 - **Cleanup**: -無 --- ### 3.6 系統後端服務層單元測試 {%hackmd SyIkPxPQZl %} --- ## 4. 測試工作指派與時程 (Personnel and Schedule) ### 4.1 測試成員 (Personnel) 姓名 | 職責 | |---|---| | 林津瑄 | 執行測試、測試報告彙整 | | 郭浩 | 測試案例撰寫 | | 劉俊麟 | 測試案例撰寫 | | 宋辰星 | 執行測試、測試報告彙整 | | 黃俊源 | 測試案例撰寫 | --- ## 5. 測試結果與分析 (Test Results and Analysis) ### 5.1 測試結果 (Test Results) | 測試案例編號 | 測試結果 (Pass/Fail) | 註解 | |---|---|---| | DL-US-01 | Pass | 修改個人資料功能正常 | | DL-US-02 | Pass | 預設電話與地址更新正常 | | DL-ORD-01 | Pass | | | DL-ORD-02 | Pass | 距離排序功能正常 | | DL-ORD-03 | Pass | 外送費排序功能正常 | | DL-ORD-04 | Pass | 送達時間排序功能正常 | | DL-ORD-05 | Pass | 關鍵字搜尋正常 | | DL-ORD-06 | Pass | 訂單詳細資訊、訂單個資遮罩顯示正確 | | DL-ORD-07 | Pass | 外送員成功接單、接單狀態轉換正常 | | DL-ORD-08 | Pass | 地圖與導航顯示正常 | | DL-TRK-01 | Pass | 系統自動更新狀態正常 | | DL-TRK-02 | Pass | 切換訂單狀態為已送達正常 | | DL-01 | Pass | 身份切換為顧客正常 | | DL-02 | Pass | 歷史訂單查詢正常 | | ADM-RES-01 | Pass | | | ADM-RES-02 | Pass | | | ADM-RES-03 | Pass | 餐廳新增與修改功能正常 | | ADM-ORD-01 | Pass | 訂單篩選與排序正常 | | ADM-ORD-02 | Pass | 訂單節點狀態檢視正常 | | ADM-MEM-01 | Pass | | | ADM-MEM-02 | Pass | 停權功能正常 | | ADM-MEM-03 | Pass | 停權使用者無法再次登入系統 | | AU-REG-01 | Pass | | | AU-REG-02 | Pass | Email 格式驗證正確 | | AU-REG-03 | Pass | 密碼規則驗證正確 | | AU-REG-04 | Pass | Email 重複驗證正確 | | AU-LOGIN-01 | Pass | 雙身分登入分流正常 | | AU-LOGIN-02 | Pass | 登入失敗提示正常 | | AU-LOGIN-03 | Pass | | | AU-LOGOUT-01 | Pass | 登入資訊被清除 | | CUS-RES-01 | Pass | 距離排序顯示正常 | | CUS-RES-01.1 | Pass | 無限捲動載入正常 | | CUS-RES-02 | Pass | | | CUS-RES-03| Pass | | | CUS-CRT-01 | Pass | | | CUS-CRT-02 | Pass | | | CUS-CRT-03 | Pass | 金額即時計算正常 | | CUS-ORD-01 | Pass | | | CUS-ORD-01.1 | Pass | 地址電話驗證正常 | | CUS-ORD-02 | Pass | 訂單明細顯示正常| | CUS-ORD-03 | Pass | 避免重複下單機制正常 | | CUS-TRK-01 | Pass | | | CUS-TRK-02 | Pass | | | CUS-01 | Pass | 身份切換為外送員正常 | | CUS-02 | Pass | | | UT-AU-01 | Pass | 註冊驗證(重複Email/短密碼)與雜湊儲存正確 | | UT-AU-02 | Pass | 登入驗證(錯密碼/封鎖帳號)與 Token 回傳正確 | | UT-AU-03 | Pass | 密碼變更流程與舊密碼驗證正確 | | UT-AU-04 | Pass | 管理員封鎖/解鎖用戶與權限檢查正確| | UT-RE-01 | Pass | 餐廳 CRUD 與地址地理編碼 (Geocoding) 正確 | | UT-RE-02 | Pass | 關鍵字搜尋與半徑距離過濾正確 | | UT-RE-03 | Pass | 菜單項目 CRUD 與關聯驗證正確 | | UT-OR-01 | Pass | 訂單建立與購物車鎖定機制正確 | | UT-OR-02 | Pass | 外送員指派(防衝突)與狀態流轉正確 | | UT-OR-03 | Pass | 顧客/外送員訂單資料存取權限控管正確 | | UT-CA-01 | Pass | 購物車單一性與總金額自動計算正確 | | UT-CA-02 | Pass | 運費依距離計算邏輯正確 | | UT-CH-01 | Pass | 訊息前後空白修剪與格式化正確 | | UT-RV-01 | Pass | 評論儲存與排序查詢正確 | | UT-AD-01 | Pass | 廣告 CRUD 與隨機投放機制正確 | | <b>RATE</b> | <b>100 %</b> | | --- ### 5.2 缺失報告 (Defect Tracking) | 缺失標號 | 缺失嚴重性 | 缺失說明 | 測試案例編號 | 缺失負責人 | 修復狀態 | 修復說明 | |---|---|---|---|---|---|---| | DEF-001 | High | 遭停權的會員帳號仍可通過驗證並登入系統 | ADM-MEM-03 | 宋辰星 | Closed | 登入 API 邏輯已修正,補上針對 `banned` 角色的權限檢查阻擋 | | DEF-002 | Medium | 訂單狀態頁面的預計送達時間未隨配送進度自動更新,需手動重新整理 | CUS-TRK-01 | 郭浩 | Closed | 加入 WebSocket 事件監聽,狀態變更時會自動刷新時間 | --- ## 6. 追溯表 (Traceability Matrix) | Req. No. | Test Case # | Verification | |---|---|---| | FR-ADM-MEM-01 | ADM-MEM-01 | Verified | | FR-ADM-MEM-02 | ADM-MEM-02 | Verified | | FR-ADM-MEM-03 | ADM-MEM-02, **UT-AU-04** | Verified | | FR-ADM-MEM-04 | ADM-MEM-03 | Verified | | FR-ADM-ORD-01 | ADM-ORD-01 | Verified | | FR-ADM-ORD-02 | ADM-ORD-02 | Verified | | FR-ADM-RES-01 | ADM-RES-01, ADM-RES-02 | Verified | | FR-ADM-RES-02 | ADM-RES-03, **UT-RE-01**, **UT-RE-03** | Verified | | FR-AU-01 | AU-REG-01, **UT-AU-01** | Verified | | FR-AU-02 | AU-REG-02, **UT-AU-01** | Verified | | FR-AU-03 | AU-REG-03, **UT-AU-01** | Verified | | FR-AU-04 | AU-REG-04, **UT-AU-01** | Verified | | FR-AU-05 | AU-REG-01 | Verified | | FR-AU-06 | AU-LOGIN-01, **UT-AU-02** | Verified | | FR-AU-06.1 | AU-LOGIN-01, **UT-AU-02** | Verified | | FR-AU-07 | AU-LOGIN-02, **UT-AU-02** | Verified | | FR-AU-07.1 | AU-LOGIN-03 | Verified | | FR-AU-08 | AU-LOGOUT-01 | Verified | | FR-CUS-01 | DL-US-01, **UT-AU-03** | Verified | | FR-CUS-02 | DL-US-02 | Verified | | FR-CUS-03 | CUS-01 | Verified | | FR-CUS-04 | CUS-02 | Verified | | FR-CUS-CRT-01 | CUS-CRT-01, **UT-CA-01** | Verified | | FR-CUS-CRT-02 | CUS-CRT-02, **UT-CA-01** | Verified | | FR-CUS-CRT-03 | **UT-CA-01**, **UT-CA-02** | Verified | | FR-CUS-CRT-04 | CUS-CRT-03 | Verified | | FR-CUS-ORD-01 | CUS-ORD-01, **UT-OR-01** | Verified | | FR-CUS-ORD-01.1 | CUS-ORD-01.1 | Verified | | FR-CUS-ORD-02 | **UT-OR-01** | Verified | | FR-CUS-ORD-03 | CUS-ORD-02 | Verified | | FR-CUS-ORD-04 | CUS-ORD-03 | Verified | | FR-CUS-RES-01 | CUS-RES-01, **UT-RE-02** | Verified | | FR-CUS-RES-01.1 | CUS-RES-01.1 | Verified | | FR-CUS-RES-02 | CUS-RES-02, **UT-RE-02** | Verified | | FR-CUS-RES-03 | CUS-RES-03 | Verified | | FR-CUS-TRK-01 | CUS-TRK-01, **UT-OR-03** | Verified | | FR-CUS-TRK-02 | CUS-TRK-02 | Verified | | FR-DL-01 | DL-US-01 | Verified | | FR-DL-02 | DL-US-02 | Verified | | FR-DL-03 | DL-01 | Verified | | FR-DL-04 | DL-02 | Verified | | FR-DL-ORD-01 | DL-ORD-01, DL-ORD-02, DL-ORD-03, DL-ORD-04, DL-ORD-05 | Verified | | FR-DL-ORD-02 | DL-ORD-06 | Verified | | FR-DL-ORD-03 | DL-ORD-06, **UT-ORD-02** | Verified | | FR-DL-ORD-04 | DL-ORD-07, **UT-OR-02** | Verified | | FR-DL-ORD-05 | DL-ORD-08 | Verified | | FR-DL-TRK-01 | DL-TRK-01, **UT-OR-02** | Verified | | FR-DL-TRK-02 | DL-TRK-02 | Verified | | FR-CHT-01 | **UT-CH-01** | Verified | | FR-RV-01 | **UT-RV-01** | Verified | | FR-AD-01 | **UT-AD-01** | Verified |