# Phân Hệ Quản Lý Bài Làm Của Học Viên & Chấm Bài Thi (Web Exam Histories)
## 05. Kịch Bản Kiểm Thử & Ma Trận Nghiệm Thu (Test Cases & QA Acceptance)

> **Mục tiêu**: Cung cấp tài liệu kiểm thử chi tiết chức năng giao diện người dùng (UI/UX) và luồng xử lý bài làm sau thi (Post-Exam Workflow) dành cho Đội ngũ QA/QC, Cán bộ Vận hành và Giáo viên kiểm thử.

---

## 📋 1. Ma Trận Bao Phủ Kiểm Thử (Test Coverage Matrix)

| Nhóm Chức Năng | Số Lượng Test Cases | Mức Độ Ưu Tiên | Phạm Vi Kiểm Thử Giao Diện |
| :--- | :---: | :---: | :--- |
| **1. Tra cứu & Bộ lọc bài thi** | 5 | P0, P1 | Lọc Contest Type (19-36), Kỹ năng (L/R/W/S), Trạng thái điểm, Tìm học viên |
| **2. Modal xem chi tiết bài làm** | 5 | P0, P1 | Mở modal, Trình phát audio Speaking, Đọc bài viết Writing, Tab đáp án L/R |
| **3. Phân công giáo viên chấm** | 4 | P0, P1 | Modal gán GV, Chọn giáo viên theo kỹ năng, Đặt hạn chấm (`deadline`), Phân công hàng loạt |
| **4. Giao diện chấm điểm Rubric** | 5 | P0, P1 | Chấm 4 tiêu chí Writing & Speaking, Nhập nhận xét, Tự động tính điểm kỹ năng |
| **5. Cờ đánh dấu bất thường & Cheating**| 4 | P1, P2 | Đánh dấu bài thi cần chấm lại (`ExamNeedAssignment`), Gắn cờ gian lận, Hủy cờ |
| **6. Công thức Overall & Làm tròn** | 4 | P0, P1 | Kiểm thử làm tròn IELTS: .125 ➔ .0, .25 ➔ .5, .625 ➔ .5, .75 ➔ 1.0 |
| **7. Xuất báo cáo kết quả thi** | 3 | P1, P2 | Nút xuất CSV, Tiến độ background queue, Kiểm tra tính chính xác dữ liệu file tải |
| **8. Kịch bản Ranh giới & Ngoại lệ** | 5 | P0, P1 | Audio học viên lỗi định dạng, Mạng chập chờn khi submit điểm rubric, Nhập điểm quá thang 9.0 |

---

## 🧪 2. Chi Tiết Kịch Bản Kiểm Thử (Test Cases Specification)

### 2.1. Tra Cứu & Bộ Lọc Kết Quả Thi (Search & Filter)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_EH_001** | Tìm kiếm bài làm theo Tên hoặc Mã học viên | Đang ở trang Quản lý bài làm của HV | 1. Nhập Mã học viên hoặc Tên vào thanh tìm kiếm.<br>2. Nhấn nút **Tìm kiếm**. | Bảng danh sách tải lại và chỉ hiển thị đúng các bài thi của học viên tương ứng. | **P0** |
| **TC_EH_002** | Lọc theo Khung đề thi (Contest Type) | Hệ thống có nhiều dạng bài thi IELTS | 1. Mở dropdown **Contest Type**.<br>2. Chọn một loại đề (ví dụ: `IELTS Mocktest 4 Skills`).<br>3. Nhấn **Lọc**. | Danh sách chỉ hiển thị các bài thi thuộc đúng Contest Type đã chọn. Cột tên bài thi hiển thị đúng. | **P0** |
| **TC_EH_003** | Lọc theo Kỹ năng cần rà soát (W / S) | Có các bài thi tự luận | 1. Chọn bộ lọc **Kỹ năng** = `Writing`.<br>2. Chọn Trạng thái chấm = `Chờ chấm`.<br>3. Nhấn **Lọc**. | Danh sách trả về chính xác các bài thi Writing đang cần phân công giáo viên chấm hoặc chờ giáo viên hoàn thành. | **P1** |
| **TC_EH_004** | Lọc theo Trạng thái bài thi (`exam_status`) | Đang ở màn hình danh sách | 1. Lọc lần lượt theo: `Chờ xử lý`, `Đang chấm`, `Đã có điểm`, `Đã duyệt`. | Các dòng hiển thị màu badge tương ứng và trạng thái điểm hiển thị chính xác. | **P1** |
| **TC_EH_005** | Reset bộ lọc về mặc định | Đang áp dụng nhiều tiêu chí lọc | 1. Nhấn nút **Đặt lại bộ lọc** (icon Reset / Refresh). | Toàn bộ các dropdown và thanh tìm kiếm quay về trạng thái mặc định, danh sách tải lại toàn bộ bản ghi mới nhất. | **P2** |

---

### 2.2. Modal Xem Chi Tiết Bài Làm (Exam Detail Modal)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_EH_006** | Mở Modal xem chi tiết bài thi 4 kỹ năng | Có bài thi đã nộp đủ 4 kỹ năng | 1. Nhấp nút **Xem chi tiết** (icon Con mắt) tại dòng học viên.<br>2. Quan sát Modal bật lên. | Modal hiển thị đầy đủ thông tin: Họ tên HV, Tên bài thi, Điểm từng kỹ năng (L/R/W/S), Điểm Overall và 4 Tab kỹ năng riêng biệt. | **P0** |
| **TC_EH_007** | Nghe Audio bài thi Speaking của học viên | Trong Modal chi tiết, chuyển sang Tab Speaking | 1. Nhấp vào Tab **Speaking**.<br>2. Nhấn nút **Play ▶** trên thanh phát âm thanh (Audio Player) của Part 1/2/3. | Âm thanh phát mượt mà, thanh thời gian chạy đúng nhịp, có thể tua tới/lui và điều chỉnh âm lượng. | **P0** |
| **TC_EH_008** | Xem bài viết Writing và đề bài | Trong Modal chi tiết, chuyển sang Tab Writing | 1. Nhấp vào Tab **Writing**.<br>2. Kiểm tra Task 1 và Task 2. | Hiển thị đầy đủ đề bài, hình ảnh đề bài (nếu có Task 1 chart), nội dung bài làm của học viên và bộ đếm số từ (Word count). | **P0** |
| **TC_EH_009** | Đối soát bài làm trắc nghiệm Listening & Reading | Trong Modal chi tiết, chọn Tab Listening / Reading | 1. Nhấp Tab **Listening** hoặc **Reading**.<br>2. Xem danh sách câu hỏi 1-40. | Hiển thị rõ ràng câu nào học viên làm đúng (màu xanh), câu nào làm sai (màu đỏ kèm đáp án đúng của hệ thống). | **P1** |
| **TC_EH_010** | Đóng Modal chi tiết bài thi | Modal đang hiển thị | 1. Nhấn nút **Đóng** hoặc icon **(X)** ở góc phải. | Modal đóng mượt mà, không làm reload lại toàn bộ trang web. | **P2** |

---

### 2.3. Phân Công Giáo Viên Chấm Thi (Teacher Assignment)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_EH_011** | Phân công Giáo viên chấm đơn lẻ thành công | Bài thi Writing đang ở trạng thái Chờ chấm | 1. Nhấn nút **Gán GV** tại dòng bài thi.<br>2. Chọn Giáo viên từ dropdown danh sách GV đủ điều kiện.<br>3. Chọn Hạn chấm (`Deadline`: +24h hoặc ngày cụ thể).<br>4. Nhấn **Xác nhận gán**. | 1. Toast báo: *"Phân công giáo viên chấm thành công!"*.<br>2. Cột Giáo viên hiển thị tên GV vừa gán kèm badge trạng thái `Đã phân công`.<br>3. Bài thi lập tức xuất hiện bên màn hình Chấm thủ công của giáo viên đó. | **P0** |
| **TC_EH_012** | Phân công giáo viên chấm hàng loạt (Bulk Assign) | Chọn checkbox 5 bài thi cần chấm | 1. Tích chọn 5 bài thi Writing.<br>2. Nhấn nút **Phân công hàng loạt** trên thanh Action Bar.<br>3. Chọn Giáo viên nhận chấm và Hạn chót.<br>4. Nhấn **Lưu**. | Cả 5 bài thi đều được cập nhật tên giáo viên và hạn chót đồng bộ, thông báo thành công 5/5 bài. | **P1** |
| **TC_EH_013** | Thu hồi bài thi đã phân công (Reassign / Unassign) | Bài thi đã gán cho GV A nhưng GV A xin nghỉ | 1. Nhấn nút **Đổi GV** (icon Chuyển giao).<br>2. Chọn Giáo viên B thay thế.<br>3. Nhấn **Xác nhận**. | Bài thi được chuyển từ GV A sang GV B, hệ thống ghi nhận lịch sử thu hồi và bàn giao vào Audit log. | **P1** |
| **TC_EH_014** | Bỏ trống giáo viên khi thực hiện phân công | Modal phân công đang mở | 1. Không chọn giáo viên nào, bấm Lưu. | Báo lỗi đỏ dưới trường Giáo viên: *"Vui lòng chọn giáo viên chấm thi"*. | **P2** |

---

### 2.4. Giao Diện Chấm Điểm Rubric (Grading Rubric Interface)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_EH_015** | Chấm điểm Writing theo Rubric 4 tiêu chí | Đang mở màn hình/Modal chấm Writing | 1. Chọn điểm cho 4 tiêu chí Task 2 (TR, CC, LR, GRA) từ 0 đến 9.0 (bước nhảy 0.5).<br>2. Nhập nhận xét chi tiết vào ô Feedback.<br>3. Nhấn **Lưu & Hoàn tất**. | 1. Hệ thống tính trung bình cộng 4 tiêu chí chính xác.<br>2. Điểm kỹ năng Writing được ghi nhận.<br>3. Trạng thái bài thi chuyển sang `Đã chấm`. | **P0** |
| **TC_EH_016** | Chấm điểm Speaking theo Rubric 4 tiêu chí | Đang mở màn hình/Modal chấm Speaking | 1. Nghe audio và chọn điểm cho 4 tiêu chí: FC, PR, LR, GRA.<br>2. Nhập nhận xét từng Part.<br>3. Nhấn **Hoàn tất chấm**. | Điểm Speaking được tổng hợp và hiển thị đồng bộ trên thẻ điểm của học viên. | **P0** |
| **TC_EH_017** | Validate chặn nhập điểm ngoài thang chuẩn | Đang chấm Rubric | 1. Cố tình nhập điểm `9.5` hoặc `-1` hoặc ký tự chữ.<br>2. Bấm Lưu. | Hệ thống chặn và báo lỗi: *"Điểm tiêu chí phải nằm trong khoảng từ 0.0 đến 9.0 với bước nhảy 0.5"*. | **P0** |
| **TC_EH_018** | Lưu bản nháp khi đang chấm dở dang | Đang chấm nhưng chưa xong | 1. Chấm được 2/4 tiêu chí, đã nhập một đoạn nhận xét.<br>2. Nhấn nút **Lưu nháp** (Save Draft). | Toast thông báo *"Đã lưu bản nháp thành công!"*. Bài thi vẫn ở trạng thái `Đang chấm`. Mở lại bài thi, các điểm và nhận xét vừa nhập vẫn còn nguyên. | **P1** |

---

### 2.5. Công Thức Tính Điểm Overall IELTS & Làm Tròn Chuẩn Quốc Tế

| Mã TC | Tên Kịch Bản | Dữ Liệu Đầu Vào (L - R - W - S) | Điểm TB Thực Tế | Điểm Overall Mong Đợi | Quy Tắc Áp Dụng | Mức Độ |
| :--- | :--- | :--- | :---: | :---: | :--- | :---: |
| **TC_EH_019** | Làm tròn xuống cận dưới (.125 ➔ .0) | L: 6.5, R: 6.5, W: 6.0, S: 6.0 | 6.125 | **6.0** | Dưới .25 làm tròn xuống .0 | **P0** |
| **TC_EH_020** | Làm tròn lên mốc rưỡi (.25 ➔ .5) | L: 6.5, R: 6.5, W: 6.5, S: 6.0 | 6.250 | **6.5** | Từ .25 trở lên làm tròn lên .5 | **P0** |
| **TC_EH_021** | Làm tròn xuống mốc rưỡi (.625 ➔ .5) | L: 7.0, R: 6.5, W: 6.5, S: 6.5 | 6.625 | **6.5** | Dưới .75 làm tròn xuống .5 | **P0** |
| **TC_EH_022** | Làm tròn lên cận trên (.75 ➔ 1.0) | L: 7.0, R: 7.0, W: 6.5, S: 6.5 | 6.750 | **7.0** | Từ .75 trở lên làm tròn lên số nguyên kế tiếp | **P0** |

---

### 2.6. Cờ Bất Thường, Cheating & Đánh Dấu Cần Chấm Lại

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_EH_023** | Đánh dấu bài thi cần chấm lại (`ExamNeedAssignment`) | Phát hiện bài thi AI chấm lệch nhiều | 1. Nhấn nút **Cần chấm lại** tại menu thao tác.<br>2. Nhập lý do: *"Nghi vấn AI chấm nhầm bài Writing Task 2"*. Nhấn Xác nhận. | Bài thi được gắn badge cam `Cần chấm lại`, tự động kích hoạt lượt phân công chấm mới cho giáo viên. | **P1** |
| **TC_EH_024** | Hủy đánh dấu cần chấm lại (`RevertExamNeedAssignment`) | Đã kiểm tra lại và thấy bài thi đạt chuẩn | 1. Nhấn nút **Hủy cần chấm lại**.<br>2. Nhập lý do hủy và xác nhận. | Badge cảnh báo biến mất, bài thi trở lại trạng thái bình thường ban đầu. | **P1** |
| **TC_EH_025** | Xem Báo cáo gian lận (Cheating Report) | Học viên bị hệ thống cảnh báo chuyển tab 5 lần | 1. Nhấp vào icon **Cảnh báo gian lận** (Tam giác vàng).<br>2. Xem bảng chi tiết vi phạm trong modal. | Hiển thị số lần thoát toàn màn hình, số lần copy-paste, ảnh chụp webcam ngẫu nhiên nếu có. | **P1** |

---

## 🛑 3. Kịch Bản Kiểm Thử Ranh Giới & Ngoại Lệ (Edge Cases)

1. **File ghi âm Speaking của học viên bị hỏng hoặc dung lượng 0 byte**:
   - Khi mở Tab Speaking, trình duyệt hiển thị thông báo thân thiện: *"Không tìm thấy tệp ghi âm của phần thi này hoặc tệp bị hỏng lúc nộp bài"*, cung cấp nút gắn cờ báo lỗi âm thanh cho cán bộ kỹ thuật thay vì bị crash giao diện.
2. **Giáo viên đang chấm bài thì bị ngắt kết nối Internet đột ngột**:
   - Hệ thống tự động lưu tạm (Auto-save local storage) nội dung nhận xét bài viết. Khi có mạng trở lại, người dùng không bị mất toàn bộ nội dung nhận xét vừa gõ.
3. **Hai cán bộ vận hành cùng lúc phân công 2 giáo viên khác nhau cho cùng 1 bài thi**:
   - Hệ thống áp dụng cơ chế khóa lạc quan (Optimistic Lock) hoặc thông báo lỗi: *"Bài thi này vừa được phân công cho Giáo viên X bởi Quản trị viên khác, vui lòng tải lại trang"*.
