---
# System prepended metadata

title: 測試文件 (STD)
tags: [測試文件]

---

---
# 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 |