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