#10 – Chiến lược kiểm thử & UAT
Giai đoạn: Kiểm thử & đảm bảo chất lượng · Phiên bản 0.1 – 29/10/2026
#1. Mục tiêu chất lượng
Ba loại lỗi gây hại lớn nhất cho sản phẩm này, xếp theo mức độ:
- ID in trên sách không mở được / mở sai nội dung – không sửa được trên giấy, ảnh hưởng toàn bộ sách đã phát hành.
- Đáp án hoặc cách chấm sai – mất uy tín với học sinh, giáo viên.
- Mất bài làm khi đang làm đề dài trên điện thoại.
Chiến lược kiểm thử ưu tiên chống ba loại lỗi này trước mọi thứ khác.
#2. Các tầng kiểm thử
flowchart TB
E2E["E2E – Playwright<br/>10–20 luồng chính, trên mobile viewport"] --> INT["Tích hợp / API<br/>mọi endpoint, phân quyền, entitlement"]
INT --> UNIT["Đơn vị<br/>chấm điểm, đề xuất, chuẩn hoá ID/mã, import"]
CONTENT["Kiểm thử nội dung<br/>BTV + kiểm tra liên kết tự động"] -.-> E2E
NFRT["Phi chức năng<br/>tải, bảo mật, thiết bị, khả dụng"] -.-> E2E
| Tầng | Phạm vi | Công cụ | Người thực hiện | Khi nào |
|---|---|---|---|---|
| Đơn vị | Chấm điểm (§1.6 của 09), đề xuất, chuẩn hoá ID, sinh mã, phân tích file import | Vitest/Jest | Dev | Mỗi commit |
| Tích hợp / API | Endpoint, phân quyền, entitlement, không lộ đáp án, idempotency | Supertest + CSDL thật trong container | Dev | Mỗi PR |
| Hợp đồng | Tích hợp SSO, LMS, cổng thanh toán, dịch vụ video (môi trường sandbox) | Mock server + sandbox đối tác | Dev, QA | Khi có API đối tác |
| E2E | Luồng chính (§5) | Playwright, viewport 375×812 và 1366×768 | QA | Hằng đêm trên staging |
| Nội dung | Đáp án, lời giải, video, tag, ID | Báo cáo kiểm tra liên kết (FR-10.14) + rà soát chéo của BTV | BTV, QA | Trước mỗi lần xuất bản; trước khi gửi file in |
| Thiết bị | Ma trận §4 | Thiết bị thật + BrowserStack | QA | Mỗi release |
| Hiệu năng | Kịch bản §6 | k6 | QA, DevOps | Trước MVP1, trước R1, trước mùa thi |
| Bảo mật | OWASP Top 10, dò mã kích hoạt, IDOR lượt làm bài | ZAP, kiểm thử thủ công, pentest độc lập | QA, bên thứ ba | Trước R1 |
| Khả dụng | 5–8 học sinh lớp 12 làm nhiệm vụ trên prototype và bản MVP1 | Phỏng vấn, quan sát | UX, PO | Sau M1, sau MVP1 |
| Tiếp cận | WCAG 2.1 AA cơ bản | axe, kiểm tra thủ công | QA | Mỗi release |
| UAT | Kịch bản §5 với dữ liệu thật | – | HEID/NV06, BTV | Cuối MVP1, cuối R1 |
#3. Kiểm thử liên kết giấy – số (đặc thù dự án)
| Bước | Nội dung | Tiêu chí đạt |
|---|---|---|
| 1 | Sau khi khoá ID: chạy báo cáo kiểm tra liên kết | 100 % ID đã khoá có tài nguyên đích hợp lệ |
| 2 | Đối chiếu danh sách ID trong file PDF dàn trang với danh sách ID trên hệ thống (trích xuất tự động văn bản từ PDF) | Không có ID in mà hệ thống không có; không có ID trùng |
| 3 | Quét thử toàn bộ QR từ bản PDF in thử (script giải mã QR từ ảnh trang) | 100 % QR giải mã đúng URL, đúng phiên bản |
| 4 | Kiểm tra trên bản in thử giấy: quét ngẫu nhiên ≥ 10 % QR bằng 3 điện thoại khác nhau, trong điều kiện ánh sáng thường | 100 % quét được trong ≤ 3 giây |
| 5 | Trước phát hành: tất cả tài nguyên đích ở trạng thái Đã xuất bản, câu hỏi có đáp án và lời giải, video READY |
Báo cáo FR-10.14 không còn lỗi |
| 6 | Sau phát hành: giám sát code_not_found theo ngày |
Cảnh báo khi một ID hợp lệ trên sách bị báo không tìm thấy |
#4. Ma trận thiết bị và trình duyệt
| Nhóm | Thiết bị / môi trường | Ưu tiên |
|---|---|---|
| Android tầm trung | Samsung A-series, Oppo, Xiaomi (Android 11–14), Chrome | Cao |
| Android cũ | Android 9–10, RAM 3 GB | Trung bình |
| iPhone | iOS 16–18, Safari | Cao |
| Trình duyệt trong ứng dụng | Quét QR bằng Zalo, mở link trong Facebook/Messenger (Android, iOS) | Cao |
| Camera hệ thống | Quét QR bằng camera iOS, Google Lens | Cao |
| Máy tính | Chrome, Edge, Safari, Firefox bản mới | Trung bình (GV, CMS: Cao) |
| Mạng | 4G thật, mô phỏng 3G chậm, mất mạng giữa chừng | Cao |
#5. Kịch bản kiểm thử chấp nhận (UAT)
| TC | Kịch bản | Story | Release |
|---|---|---|---|
| TC-01 | Quét QR kích hoạt khi chưa đăng nhập → đăng ký → kích hoạt thành công → sách hiện trong "Sách của tôi" | US-001, 002, 005 | MVP1 |
| TC-02 | Kích hoạt mã đã dùng bởi tài khoản khác → báo lỗi, không cấp quyền | US-002 | MVP1 |
| TC-03 | Nhập sai mã 5 lần → captcha; 10 lần → khoá 15 phút | US-004 | MVP1 |
| TC-04 | Nhập ID hợp lệ (chữ thường, có khoảng trắng, ký tự O thay 0) → mở đúng tài nguyên ≤ 1 giây | US-010 | MVP1 |
| TC-05 | Quét QR nội dung từ Zalo trên Android và iOS → mở thẳng tài nguyên sau đăng nhập | US-011 | MVP1 |
| TC-06 | Nhập ID thuộc sách chưa kích hoạt → màn hình yêu cầu kích hoạt; ID xem thử → xem được | US-012 | MVP1 |
| TC-07 | Xem lý thuyết Toán có công thức và video trên điện thoại 360 px | US-020, 022 | MVP1 |
| TC-08 | Làm đề Toán bằng giao diện đề thi, đủ 3 phần → điểm khớp bảng chấm tay của BTV | US-030, 031, 040 | MVP1 |
| TC-09 | Làm đề Toán bằng phiếu trả lời → điểm khớp TC-08 với cùng câu trả lời | US-032, 040 | MVP1 |
| TC-10 | Placement test Tiếng Anh: một câu/màn hình, không quay lại, thời gian từng câu được ghi → đề xuất chuyên đề có câu sai | US-033, 050 | MVP1 |
| TC-11 | Đang làm đề → bật chế độ máy bay → trả lời 3 câu → tắt chế độ máy bay → câu trả lời được đồng bộ | US-035 | MVP1 |
| TC-12 | Đang làm trên điện thoại → mở trên máy tính → tiếp tục lượt với câu trả lời đã có | US-035 | MVP1 |
| TC-13 | Hết giờ → tự nộp, lượt đánh dấu "Nộp tự động" | US-034 | MVP1 |
| TC-14 | Đã làm đề trên giấy → "Xem đáp án & lời giải" → bảng đáp án hiển thị đầy đủ | US-043 | MVP1 |
| TC-15 | Ngữ văn: viết bài trên máy → nộp → xem hướng dẫn giải cạnh bài làm | US-037, 042 | MVP1 |
| TC-16 | Gọi API lấy đề khi chưa nộp → không có trường đáp án/lời giải trong phản hồi | NFR-SEC-02 | MVP1 |
| TC-17 | BTV import 40 câu có 1 câu lỗi → xem trước báo lỗi đúng dòng → sửa → lưu | US-092 | MVP1 |
| TC-18 | BTV sinh ID, Trưởng ban khoá → không sửa/xoá được ID; xuất Excel + QR | US-094 | MVP1 |
| TC-19 | Admin sinh lô 1.000 mã kích hoạt → xuất file → mã kích hoạt được, không trùng | US-097 | MVP1 |
| TC-20 | Báo cáo kiểm tra liên kết phát hiện ID trỏ tới tài nguyên chưa xuất bản | US-100 | MVP1 |
| TC-21 | Sự kiện code_resolved, attempt_submitted, video_progress có trong kho sự kiện với đủ thuộc tính |
US-110 | MVP1 |
| TC-22 | Đề xuất sau đề Toán khớp tính tay theo ví dụ §2.6 của 09 | US-051 | R1 |
| TC-23 | Ngữ văn: tự chấm theo rubric → điểm "Tự đánh giá" → đề xuất kỹ năng | US-044, 053 | R1 |
| TC-24 | Lịch sử & biểu đồ hiển thị đúng các lượt đã nộp, không có lượt bỏ dở | US-060, 061 | R1 |
| TC-25 | Giáo viên giao đề → học sinh nhận → nộp → báo cáo tiến độ và phổ điểm đúng | US-081, 082 | R1 |
| TC-26 | Báo cáo câu/chuyên đề sai nhiều của lớp | US-083 | R1 |
| TC-27 | Dashboard Admin: số kích hoạt, DAU, top ID khớp truy vấn kiểm chứng | US-111, 112 | R1 |
| TC-28 | Thanh toán sandbox thành công → có quyền gói; IPN gửi lặp → không cấp trùng; thanh toán thất bại → không cấp quyền | US-071 | P3 |
| TC-29 | URL video ký số hết hạn → không phát được; sao chép URL sang tên miền khác → bị chặn | US-022 | MVP1 |
#6. Kiểm thử hiệu năng
| Kịch bản | Tải | Tiêu chí đạt |
|---|---|---|
| Phân giải ID | 1.000 yêu cầu/giây trong 10 phút | p95 ≤ 300 ms, lỗi < 0,1 % |
| Thi đồng loạt | 5.000 người cùng bắt đầu một đề, tự lưu mỗi 10 giây, nộp trong cùng 5 phút cuối | Tự lưu p95 ≤ 500 ms; nộp p95 ≤ 2 s; không mất câu trả lời |
| Đọc học liệu | 3.000 người dùng đồng thời mở lý thuyết/ví dụ | Trang p95 ≤ 2,5 s (LCP trên 4G mô phỏng) |
| Ngâm tải | 50 % tải đỉnh trong 4 giờ | Không rò rỉ bộ nhớ, không suy giảm thời gian phản hồi |
#7. Quản lý lỗi
| Mức | Định nghĩa | Ví dụ | Thời hạn xử lý (production) |
|---|---|---|---|
| S1 – Nghiêm trọng | Mất dữ liệu, lộ đáp án/dữ liệu cá nhân, không đăng nhập/không mở được ID | Tự lưu không hoạt động | Khắc phục tạm ≤ 4 giờ |
| S2 – Cao | Sai điểm, sai đề xuất, chức năng chính lỗi trên một nền tảng phổ biến | Chấm đúng/sai sai quy tắc | ≤ 1 ngày làm việc |
| S3 – Trung bình | Lỗi chức năng phụ, có cách khắc phục | Biểu đồ hiển thị sai nhãn | Sprint kế tiếp |
| S4 – Thấp | Giao diện, chính tả | Lệch căn lề | Theo backlog |
| Lỗi nội dung | Sai đáp án/lời giải | – | BTV sửa và xuất bản lại ≤ 1 ngày; lượt đã chấm theo đáp án sai được chấm lại và thông báo |
#8. Tiêu chí vào/ra
Điều kiện bắt đầu UAT: không còn lỗi S1, S2 mở; toàn bộ TC của release đã chạy ở staging; nội dung UAT đã xuất bản trên staging.
Điều kiện phát hành: UAT được HEID/NV06 ký nghiệm thu; không còn lỗi S1, S2; lỗi S3 có kế hoạch; kiểm thử tải đạt; sao lưu và khôi phục đã diễn tập; tài liệu hướng dẫn sử dụng sẵn sàng.