---
# System prepended metadata

title: 軟體測試文件（STD）

---

---

title: 軟體測試文件（STD）

---

# 軟體測試文件（STD）

## 專案資訊

- **專案名稱**：海大教室租借系統
- **撰寫日期**：2025/12/19
- **發展者**：吳致緯、黃星智、陳宥嘉、薛翔安、高翊誠

---

## 版次變更記錄

| 版次 | 變更項目 | 變更日期 |
| :-: | :-----: | :----: |
| 0.1 |   初版   | 2025/12/19 |
| 0.2 |  |  |
| 0.3 |  |  |
| 0.4 |  |  |
| 0.5 |  |  |
| 1.0 |  |  |

---

## 目錄

1. [測試目的與接受準則](#1.-測試目的與接受準則-(Objectives-and-Acceptance-Criteria))
    1.1 [系統範圍](#1.1-系統範圍-(System-Scope))
    1.2 [測試接受準則](#1.2-測試接受準則-(Test-Acceptance-Criteria))
2. [測試環境](#2.-測試環境-(Testing-Environment))
    2.1 [硬體需求](#2.1-硬體需求-(Hardware-Specification-and-Configuration))
    2.2 [軟體需求](#2.2-軟體需求-(Software-Specification-and-Configuration))
    2.3 [測試資料來源](#2.3-測試資料來源-(Test-Data-Sources))
    2.4 [測試工具與設備](#2.4-測試工具與設備-(Tools-and-Equipment))
3. [測試案例](#3.-測試案例-(Test-Cases))
4. [測試工作指派與時程](#4.-測試工作指派與時程-(Personnel-and-Schedule))
    4.1 [測試成員](#4.1-測試成員-(Personnel))
5. [測試結果與分析](#5.-測試結果與分析-(Test-Results-and-Analysis))
    5.1 [測試結果](#5.1-測試結果-(Test-Results))
    5.2 [缺失報告](#5.2-缺失報告-(Defect-Tracking))
6. [追溯表](#6.-追溯表-(Traceability-Matrix))

---

## 1. 測試目的與接受準則 (Objectives and Acceptance Criteria)

### 1.1 系統範圍 (System Scope)

本測試計畫之測試範圍涵蓋教室預約系統之核心功能模組，
包含使用者註冊與登入、教室查詢、教室預約流程、歷史紀錄查詢、
以及管理員端之教室管理、預約審核與黑名單機制。

系統已完成以下功能並納入測試範圍：

- 使用者登入 / 註冊 / 忘記密碼流程
- 教室列表與搜尋功能
- 教室預約、取消與歷史紀錄查詢
- 管理員端教室管理與申請審核
- 黑名單限制預約機制

本次測試僅針對已完成功能進行驗證。

---

### 1.2 測試接受準則 (Test Acceptance Criteria)

測試程序需要依照本測試計畫所訂定的程序進行，所有測試結果需要能符合預期測試結果方能接受。

- 當測試案例未通過時，相關模組開發之負責人需要進行程式修改(修復 bug 或改動功能)，以能讓此案例重新通過測試。
- 重新進行測試時，測試人員需確認其他可能受影響的案例仍可正確執行。

---

## 2. 測試環境 (Testing Environment)

### 2.1 硬體需求 (Hardware Specification and Configuration)

| 項次 | 名稱 | 數量 | 規格 | 備註 |
| :---: | :---: | :---: | :---: | :---: |
|  1|伺服器  |1  |Aiven  |server  |
|  2|電腦  |1  |Windows  |client  |

---

### 2.2 軟體需求

| 項次 | 名稱  | 備註 |
| :---: | :---: | :---: |
| 1 | Python | Django 後端 |
| 2 | Node.js| React 前端 |
| 3 | Django | Web 框架 |
| 4 | React | 前端框架 |
| 5 | MySQL | 資料庫（Aiven Cloud） |
| 6 | Redis | 快取系統 |
| 7 | Gmail SMTP |郵件服務 |

### 2.3 測試資料來源

- **使用者資料**：自動建立測試帳號
- **教室資料**：使用 Django seed 指令初始化 12 間教室

### 2.4 測試工具與設備

| 工具 | 用途 |
| :---: | :---: |
| Curl | API 測試 |
| Django Admin | 資料檢查 |
|  Vitest| 前端 |
| Git | 版控 |

---

## 3. 測試案例

### 3.1 登入介面 (Login Interface)

#### TC-001：學校信箱註冊驗證

- **Reference**：FR-LG-01
- **Severity**：High
- **Instructions**：
  1. 進入註冊頁面
  2. 輸入符合學校網域之信箱（例：`student@email.ntou.edu.tw`）
  3. 設定密碼並再次輸入以確認
  4. 點擊「註冊」
- **Expected Result**：
  - 顯示「註冊成功」提示訊息
  - 系統跳轉回登入頁面，且資料庫成功建立該帳號
- **Cleanup**：測試完畢後刪除該帳號

#### TC-002：攔截非學校信箱註冊

- **Reference**：FR-LG-01
- **Severity**：Medium
- **Instructions**：
  1. 進入註冊頁面
  2. 輸入一般個人信箱（例：`user@gmail.com`）
  3. 填寫其餘資訊並點擊「註冊」
- **Expected Result**：
  - 顯示「僅限使用學校信箱註冊」錯誤提示
  - 系統阻擋提交，不建立該帳號紀錄
- **Cleanup**：無

#### TC-003：正常帳號登入

- **Reference**：FR-LG-02
- **Severity**：High
- **Instructions**：
  1. 於登入頁輸入正確的註冊信箱與密碼
  2. 點擊「登入」
- **Expected Result**：
  - 成功進入系統主畫面
  - 介面正確顯示該使用者的歡迎語或名稱
- **Cleanup**：無

#### TC-004：忘記密碼流程

- **Reference**：FR-LG-03
- **Severity**：High
- **Instructions**：
  1. 於登入頁點擊「忘記密碼」
  2. 輸入註冊信箱並點擊發送驗證碼
  3. 輸入郵件中收到的正確 6 位數驗證碼
  4. 設定新密碼並確認提交
- **Expected Result**：
  - 驗證碼校驗通過後，顯示「密碼更新成功」
  - 舊密碼立即失效，使用新密碼可成功登入
- **Cleanup**：無

---

### 3.2 主畫面 (Main Page)

#### TC-005：搜尋教室功能

- **Reference**：FR-MP-01
- **Severity**：Medium
- **Instructions**：
  1. 在搜尋欄輸入特定關鍵字（如「會議室」）
  2. 點擊「搜尋」按鈕
- **Expected Result**：
  - 列表僅顯示名稱或詳細資訊包含「會議室」的教室
  - 若無匹配結果，則顯示「查無符合教室」
- **Cleanup**：清除搜尋條件

---

### 3.3 預約模組 (Reservation)

#### TC-006：成功預約教室

- **Reference**：FR-CR-02, FR-CR-06, FR-CR-04
- **Severity**：High
- **Instructions**：
  1. 選擇一間可用教室並進入詳情頁
  2. 選擇未來日期（例如 2025/12/25）
  3. 選擇 14:00-15:00 時段
  4. 輸入用途：「課程教學」
  5. 點擊「預約」
- **Expected Result**：
  - 顯示「申請已提交，等待核准」提示
  - 歷史紀錄中該筆預約狀態顯示為「待審核」
  - 用戶收到「申請收悉」確認郵件（FR-CR-04）
- **Cleanup**：管理員端駁回或刪除該測試申請

#### TC-007：教室詳細資訊瀏覽

- **Reference**：FR-CR-01
- **Severity**：Medium
- **Instructions**：
  1. 在教室列表中能看到教室的資訊
- **Expected Result**：
  - 顯示該教室設備清單（如：投影機、白板、插座數量等）
  - 顯示容納人數及可租借時段表
- **Cleanup**：無

#### TC-008：取消或編輯租借申請

- **Reference**：FR-CR-03
- **Severity**：Medium
- **Instructions**：
  1. 進入「檢視歷史紀錄」
  2. 針對一筆「待審核」或「已核准」的紀錄點擊「取消」
- **Expected Result**：
  - 顯示「取消租借成功」提示
  - 該筆紀錄狀態更新為「已取消」，且該時段重新開放預約
- **Cleanup**：無

#### TC-009：檢視歷史紀錄

- **Reference**：FR-CR-05
- **Severity**：Medium
- **Instructions**:
  1. 點擊選單中的「歷史紀錄」分頁
- **Expected Result**：
  - 清晰列出過去所有借用紀錄之教室名稱、日期時段與最終狀態（核准/駁回/取消）
- **Cleanup**：無

---

### 3.4 管理模組 (Management)

#### TC-010：管理教室（新增與刪除）

- **Reference**：FR-MG-01
- **Severity**：High
- **Instructions**：
  1. 管理員新增一間編號為「LAB-999」的教室
  2. 於前台確認該教室出現
  3. 管理員於後台執行「刪除」該教室
- **Expected Result**：
  - 新增後使用者可立即搜尋到「LAB-999」
  - 刪除後，該教室於系統中完全消失，無法再預約
- **Cleanup**：無

#### TC-011：更新教室器材與人數限制

- **Reference**：FR-MG-02
- **Severity**：Medium
- **Instructions**：
  1. 管理員編輯現有教室之資訊
  2. 將容納人數修改為 60 人，並新增「智慧白板」至器材清單
  3. 點擊「儲存」
- **Expected Result**：
  - 顯示「更新成功」提示
  - 使用者查閱該教室資訊時，同步呈現更新後之人數與器材
- **Cleanup**：將數據還原回初始設定

#### TC-012：黑名單功能驗證

- **Reference**：FR-MG-03
- **Severity**：High
- **Instructions**：
  1. 管理員將帳號「User_01」設為「黑名單」狀態
  2. 切換以「User_01」登入並嘗試點擊預約按鈕
- **Expected Result**：
  - 系統禁用預約按鈕，或提交申請時顯示「因未按時歸還，暫停您的租借權限」
- **Cleanup**：解除該帳號之黑名單標記

#### TC-013：申請核准與駁回作業

- **Reference**：FR-MG-04
- **Severity**：High
- **Instructions**：
  1. 管理員開啟審核介面
  2. 對申請 A 點擊「核准」；對申請 B 點擊「駁回」並填寫原因
- **Expected Result**：
  - 申請 A 狀態變更為「已租借」，並發送通知郵件
  - 申請 B 狀態變更為「已駁回」，用戶收到包含駁回理由的郵件
- **Cleanup**：無

#### TC-014：修改個人資料

- **Reference**：FR-MG-05
- **Severity**：Low
- **Instructions**：
  1. 進入個人帳戶設定，修改使用者名稱為「NewName」
  2. 執行密碼更改操作
- **Expected Result**：
  - 系統提示修改成功
  - 頁面右上角名稱即時更新為「NewName」
- **Cleanup**：無

---

### 3.5 系統健壯性與安全性 (Security & Integrity)

#### TC-015：預約時段衝突攔截

- **Reference**：FR-CR-02
- **Severity**：High
- **Instructions**：
  1. A 用戶已成功核准預約 101 教室 13:00-14:00
  2. B 用戶嘗試選取並預約 101 教室同日期的 13:00-14:00
- **Expected Result**：
  - 系統應在介面上將該時段顯示為灰色不可選
  - 若強行提交，應顯示「該時段已被佔用，請重新選擇」
- **Cleanup**：無

#### TC-016：越權存取管理頁面測試

- **Reference**：N/A
- **Severity**：High
- **Instructions**：
  1. 以一般學生權限帳號登入
  2. 在瀏覽器地址列手動輸入管理路徑（例如 `/admin/dashboard`）
- **Expected Result**：
  - 系統應強制導回首頁或顯示「403 權限不足」
  - 不得流出任何管理員專屬功能或數據
- **Cleanup**：無

---

## 4. 測試工作指派與時程 (Personnel and Schedule)

### 4.1 測試成員 (Personnel)

| 姓名 | 職責 |
| :---: | :---: |
| 薛翔安 | 測試規劃 |
| 陳宥嘉 | 測試案例撰寫 |
| 高翊誠 | 執行測試 |
| 薛翔安 | 測試報告彙整 |

---

## 5. 測試結果與分析 (Test Results and Analysis)

### 5.1 測試結果 (Test Results)

| 測試案例編號 | 測試結果 (Pass/Fail) | 註解 |
| :---: | :---: | :---: |
| TC-001 | PASS |  |
| TC-002 | PASS |  |
| TC-003 | FAIL | 同瀏覽器登入兩個帳號舊的會被強製替換#D001 |
| TC-004 | PASS |  |
| TC-005 | PASS |  |
| TC-006 | PASS |  |
| TC-007 | PASS |  |
| TC-008 | PASS |  |
| TC-009 | PASS |  |
| TC-010 | PASS |  |
| TC-011 | PASS |  |
| TC-012 | PASS |  |
| TC-013 | PASS |  |
| TC-014 | PASS |  |
| TC-015 | PASS |  |
| TC-016 | PASS |  |
| RATE | 92.9 % |  |

---

### 5.2 缺失報告 (Defect Tracking)

| 缺失標號 | 缺失嚴重性 | 缺失說明 | 測試案例編號 | 缺失負責人 | 修復狀態 | 修復說明 |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| D001 | LOW | 同瀏覽器登入第二個帳號舊的會被換掉| TC-003 | 薛翔安 | Open |  |

---

## 6. 追溯表 (Traceability Matrix)

| Req. No. | Test Case # | Verification |
| :---: | :---: | :---: |
| **FR-LG-01** | TC-001、TC-002 | PASS |
| **FR-LG-02** | TC-003 | PASS |
| **FR-LG-03** | TC-004 | FAIL |
| **FR-MP-01** | TC-005 | PASS |
| **FR-MP-02** | TC-006 | PASS |
| **FR-CR-01** | TC-008 | PASS |
| **FR-CR-02** | TC-007、TC-016 | PASS |
| **FR-CR-03** | TC-009 | PASS |
| **FR-CR-04** | TC-007 | PASS |
| **FR-CR-05** | TC-010 | PASS |
| **FR-CR-06** | TC-007 | PASS |
| **FR-MG-01** | TC-011 | PASS |
| **FR-MG-02** | TC-012、TC-018 | PASS |
| **FR-MG-03** | TC-013 | PASS |
| **FR-MG-04** | TC-014 | PASS |
| **FR-MG-05** | TC-015 | PASS |
| **Security** | TC-017 | PASS |

---
