SE-第七組
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note No publishing access yet

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    --- # 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 |

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password
    or
    Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully