Tài liệu dự án · Sách ôn thi Hybrid TNTHPT

#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 độ:

  1. 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.
  2. Đáp án hoặc cách chấm sai – mất uy tín với học sinh, giáo viên.
  3. 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.