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