Mỗi hệ thống còn cần bao nhiêu automation test case, vì sao vẫn nhiều bug, và danh sách use case dễ sinh bug để team viết test trước khi người dùng gặp phải.
| Hệ thống | Đang có | Cần thêm | Mục tiêu | Vùng trống lớn nhất |
|---|---|---|---|---|
| exam.flyer.us | 212 | ≈ 165 | ≈ 380 | Ma trận dạng câu hỏi (kéo-thả, gap fill, MCQ) trên mobile viewport; Gói Premium & kim cương; Bài tập lớp; Gamification; Thách đấu |
| teacher.flyer.us | 200 | ≈ 220 | ≈ 420 | 10/20 tính năng chưa có case nào: Điểm danh, Tài chính, Tạo đề, Khen thưởng, Quà tặng, Thiết lập, Thư viện, Chương trình, Thách đấu, Dạy trực tuyến; Chấm AI chỉ 6 case |
Vì sao vẫn nhiều bug dù automation pass 94%: automation hiện chạy sau khi code đã lên production (02:02 mỗi đêm, trên chính production), chỉ trên Chrome desktop, và phủ đúng những vùng ít bug nhất. Các bug người dùng gặp (kéo-thả, gap fill, MCQ ẩn đáp án, responsive, phiên đăng nhập, múi giờ) nằm trong phần chưa có test hoặc test đã bị skip. Chi tiết và bằng chứng ở mục 4.
Việc nên làm ngay: mục 5 và 6 liệt kê 27 use case theo thứ tự rủi ro, kèm số test case cần viết cho từng use case; mục 7 xếp thành 3 sprint.
212 test case trong 17 spec file (lần chạy 06/09), đối chiếu với 12 tính năng học sinh đã có PRD. Cột "Cần" ước lượng theo số acceptance criteria + edge case + rule trong PRD, nhân đôi cho luồng phủ định, hiệu chỉnh theo mật độ các suite đã ổn định (mục 8).
| Tính năng (PRD) | Spec đang có | Có | Cần | Thiếu | Ưu tiên |
|---|---|---|---|---|---|
| Làm bài thi & luyện tập | PracticeTests 21 · StarterTests (4 file) 28 | 49 | 90 | 41 | Cao nhất |
| Gói Premium & thanh toán | — | 0 | 20 | 20 | Cao nhất |
| Lớp học & bài tập được giao | — | 0 | 18 | 18 | Cao |
| Gamification & phần thưởng | — | 0 | 16 | 16 | Trung bình |
| Thách đấu | — | 0 | 14 | 14 | Trung bình |
| Kết quả, khiên & tiến độ | — (khiên đã có ở Shields, còn thiếu ẩn đáp án/lịch sử) | 0 | 14 | 14 | Cao |
| Luyện Nói & Viết (chấm AI) | chấm điểm đã có ở Shields; luồng mic / hết kim cương / chuyển GV chấm chưa có | 0 | 12 | 12 | Cao |
| Tài khoản & hồ sơ | Login 9 · SignUp 11 · ForgotPassword 12 | 32 | 42 | 10 | Trung bình |
| Học tập Study | StudyProfile 22 · StudyLogin 7 · StudyNav 7 | 36 | 45 | 9 | Trung bình |
| Bingo AI | BingoTalk 5 | 5 | 12 | 7 | Trung bình |
| Trang chủ | HomeTest 1 | 1 | 6 | 5 | Thấp |
| Kết quả chấm Speaking & Writing (Khiên) | Shields RW 34 · Listening 33 · Speaking 21 · Writing P7 1 | 89 | 89 | 0 | Đủ |
| Tổng | 212 | ≈ 378 | ≈ 166 |
200 test case trong 25 spec file, đối chiếu với 20 tính năng giáo viên đã có PRD. Số case gần như đứng yên từ 24/08 (201 → 200) trong khi exam tăng 93 → 212.
| Tính năng (PRD) | Spec đang có | Có | Cần | Thiếu | Ưu tiên |
|---|---|---|---|---|---|
| Giao bài tập + Giao bài tự động | AssignedHomework (8 file) — 17 case đang skip | 68 | 78 | 10 | Cao (bật lại skip) |
| Chấm điểm AI | StudentDetailGrading 3 · Speaking 1 · Writing 2 | 6 | 24 | 18 | Cao |
| Học sinh (chi tiết) | Filter 14 · CsvSort 9 · Dynamic 5 | 28 | 32 | 4 | Thấp |
| Kiểm tra đầu vào | PlacementTests 27 | 27 | 27 | 0 | Đủ |
| Quản lý lớp | ClassTests 20 | 20 | 26 | 6 | Trung bình |
| Quản lý kỳ thi | ExamFlow 17 | 17 | 22 | 5 | Trung bình |
| Báo cáo | ReportTests 15 | 15 | 20 | 5 | Trung bình |
| Trợ giảng AI (Call Bingo) | CallBingoTests 4 | 4 | 10 | 6 | Trung bình |
| Onboarding & đăng nhập | Onboarding 7 · Login 3 · Logout 1 · ForgotPw 2 · SignUp 1 · Landing 1 | 15 | 15 | 0 | Đủ (sửa 1 broken) |
| Tính năng (PRD) | Cơ sở ước lượng (AC · edge · rule trong PRD) | Cần | Ưu tiên |
|---|---|---|---|
| Điểm danh | 10 AC · 7 edge · 6 rule — PRD chi tiết nhất, vừa launch | 22 | Cao nhất |
| Tạo đề (Builder) | 3 AC · 5 edge · 4 rule + preview phải khớp bản chạy trên exam | 20 | Cao |
| Tài chính & Học phí | 4 AC · 5 edge · 3 rule — tiền, VAT, ZNS trừ phí | 18 | Cao |
| Khám phá đề | 4 AC · 5 edge · 4 rule — quyền in, premium, URL filter | 16 | Trung bình |
| Khen thưởng (Đá Tri Thức) | 4 AC · 5 edge · 3 rule — số dư, double-grant | 14 | Cao |
| Quà tặng | 4 AC · 5 edge · 4 rule — quota, tồn kho | 14 | Trung bình |
| Thiết lập trường học | 4 AC · 5 edge · 4 rule — phân quyền Owner/Admin/Teacher | 14 | Cao |
| Thư viện của tôi | 3 AC · 5 edge · 3 rule — quota, thu hồi đề | 14 | Trung bình |
| Chương trình | 4 AC · 5 edge · 3 rule — kiểm duyệt, nhân bản | 14 | Trung bình |
| Thách đấu | 3 AC · 5 edge · 3 rule | 12 | Trung bình |
| Dạy trực tuyến | 3 AC · 5 edge · 3 rule | 10 | Thấp |
| Tổng cần thêm | 54 (tính năng đã có) + 168 (chưa có) | ≈ 222 |
Pass rate 94% và 0 failed ở lần 06/09 là số thật, nhưng nó đo phần đã được test, không đo trải nghiệm người dùng. Sáu nguyên nhân dưới đây đều có bằng chứng từ dữ liệu đang có.
chrome - * - prod lúc 02:02 mỗi đêm — tức là code đã lên production cả ngày rồi test mới chạy. Bug đến người dùng trước khi automation kịp thấy. Không có executor/CI metadata trong report, nên không có dấu hiệu automation chạy trên staging hay trên pull request.AssignedHomework.pending-approval-approved cũng skip trọn bộ. Vùng "đã có test" trên giấy nhưng thực tế không chạy.test chỉ có 4 mục, không mục nào là bug). Vì vậy không đo được MTTR, escaped defect, và không có danh sách để chuyển thành test.Xếp theo rủi ro: bằng chứng bug đã xảy ra trước, sau đó là tiền/quyền truy cập, rồi đến trạng thái phiên. Cột "Test" là số case đề xuất, đã tính vào bảng mục 2.
| # | Use case | Vì sao dễ bug (bằng chứng) | Test nên build trước | Test |
|---|---|---|---|---|
| 1 | Kéo-thả (drag & drop) trên mobile viewport và desktop | Bug S108 "mất ô để thả, mất ô để kéo, kéo được nhưng không thả được", lặp lại S109. Case tự động duy nhất từng fail 24/08. | Kéo đúng / kéo sai / kéo lại / bỏ giữa chừng / đổi 2 đáp án / nộp khi còn trống — mỗi case × viewport 375px và 1280px. | 12 |
| 2 | Gap fill và MCQ hiển thị đủ câu hỏi và đáp án | S108: kết quả gap fill quá nhỏ không nhìn hết câu; MCQ phải cuộn mới thấy đáp án (đang xử lý). S107: ô lựa chọn khuất khi thu nhỏ tỷ lệ. | Assert đáp án nằm trong viewport khi vào câu; thu nhỏ 80%/67%; xoay ngang; câu hỏi dài + ảnh. | 10 |
| 3 | Ẩn đáp án theo cài đặt của giáo viên | PRD: chặn cả trang review lẫn lịch sử; bug S107 "IELTS ẩn đáp án". Có 3 lối vào (kết quả, lịch sử, link trực tiếp). | GV bật ẩn → HS vào 3 lối đều bị chặn/redirect; GV tắt → hiện lại; bài làm lại sau hạn. | 8 |
| 4 | Hết kim cương khi chấm AI | S110: "khi hết KC cũng chưa báo nạp"; giá 2 KC mini / 25 KC full; hai nguồn kim cương (tặng vs mua). | Đủ KC trừ đúng giá; thiếu KC chặn + điều hướng nạp; retry không trừ 2 lần; trừ đúng nguồn. | 8 |
| 5 | Gói Premium: gating, mua, hết hạn | Chưa có case nào; ảnh hưởng doanh thu. PRD: mở khoá tức thì không re-login, coupon giữ sau reload, thanh toán thất bại không mất coupon. | Free vào đề premium → nhắc nâng cấp (không lỗi); mua xong mở ngay; hết hạn giữ tiến trình; mã kích hoạt sai/hết hạn; thanh toán fail rồi thử lại. | 14 |
| 6 | Hết giờ / mất mạng / nộp trùng giữa bài thi | PRD: TimeoutPopup tự nộp phần đã làm; resume đúng câu. Nhấn nộp 2 lần khi mạng chậm là lỗi kinh điển. | Hết giờ ở câu giữa; tắt mạng 30s rồi quay lại; double-click nộp; đóng tab rồi mở lại. | 8 |
| 7 | Chống gian lận: chuyển tab, thoát fullscreen, copy-paste | Rule "quá 3 lần tự động nộp bài" dễ đếm sai (mở devtools, notification hệ thống, cuộc gọi trên mobile). | Đếm đúng 1-2-3; lần 3 tự nộp; không đếm khi popup hệ thống; ghi nhận cảnh báo vào kết quả. | 6 |
| 8 | Phiên đăng nhập nhiều thiết bị | S109: "đăng nhập nhiều thiết bị cùng 1 IP thì không bị log out"; S108: popup đăng nhập lại + message lỗi. | 2 thiết bị cùng IP; 2 thiết bị khác IP; token hết hạn giữa bài → popup, không mất bài. | 6 |
| 9 | Múi giờ: hạn nộp, streak, quest reset 23:59 | S110 "Fix time local → server"; PRD điểm danh ghi nhận đã dính bug lệch ngày. | Hạn nộp 23:59 giờ VN trên máy UTC; streak qua nửa đêm; quest claim trễ không cộng bù. | 6 |
| 10 | Mic, quyền ghi âm, giới hạn file khi luyện Nói/Viết | PRD: bước kiểm tra mic chặn trước khi vào bài; audio ≤10MB, video ≤2 phút. Lỗi quyền trên iOS Safari rất hay gặp. | Từ chối quyền mic → chặn rõ; audio 11MB; video 2:05; mất mạng khi upload → job nền hiện "Đang chấm". | 8 |
| 11 | Bài tập lớp: join lớp, khoá hạn, REDO | Chưa có case nào; nhiều message lỗi riêng (đủ chỗ / đang rời lớp / đã ở trong lớp); link mời kèm checkpoint. | Join đúng mã; mỗi lỗi join có message riêng; GV khoá hạn → không bắt đầu được; REDO hiện đúng; rời lớp. | 12 |
| 12 | Khách chưa đăng nhập làm thử rồi đăng nhập | PRD: toast + modal nhắc đăng nhập để lưu; giữ redirect qua toàn luồng đăng ký (link mời có sẵn lớp/đề). | Làm thử → đăng nhập → kết quả được lưu; link mời → đăng ký → về đúng đề. | 6 |
| 13 | Nhiều hồ sơ (profile) trên 1 tài khoản | PRD: dữ liệu học tách theo profile, không lẫn; hồ sơ ẩn danh có giới hạn. | Đổi profile giữa chừng; lịch sử/khiên/kim cương đúng profile; chạm trần hồ sơ ẩn danh. | 6 |
| 14 | Gamification: streak, quà ngày, xếp hạng | Chưa có case; rule reset 23:59, quà ngày 1 lần, xếp hạng đổi kỳ Ngày/Tuần/Tháng/Năm. | Quà ngày nhận 2 lần bị chặn; xếp hạng đổi kỳ đúng số; toast Đá Tri Thức realtime. | 8 |
| # | Use case | Vì sao dễ bug (bằng chứng) | Test nên build trước | Test |
|---|---|---|---|---|
| 1 | Điểm danh: lưu, sửa buổi cũ, học sinh đã rời lớp | Vừa launch, 0 test. PRD: merge-save không xoá record HS đã rời lớp; lưu ngày rỗng = xoá buổi; date key theo giờ địa phương (đã dính bug lệch ngày). | Tất cả có mặt → sửa 1 em → reload đúng; HS rời lớp → sửa buổi cũ vẫn giữ record; đổi ngày khi chưa lưu → modal; múi giờ; role gate báo cáo; xuất Excel đúng cột/ngôn ngữ. | 22 |
| 2 | Giao bài: ẩn đáp án, khoá hạn, REDO lan sang học sinh | Cài đặt phía GV quyết định hành vi phía HS (mục 5 #3, #11); 16 case pending-approval đang skip. | Bật ẩn đáp án → kiểm tra phía exam; khoá hạn → HS không bắt đầu; yêu cầu làm lại → HS thấy REDO; giao playlist tạo đủ số bài. | 10 |
| 3 | Tạo đề: preview khớp bản chạy thật | 0 test. Đề GV tạo chạy trên exam, nơi các bug dạng câu hỏi (kéo-thả, gap fill) xuất hiện. PRD: đổi thứ tự câu không mất đáp án; scan mờ báo lỗi thay vì sinh sai im lặng. | Tạo mỗi dạng câu → preview → HS làm được; kéo đổi thứ tự giữ đáp án; PDF mờ; file >10MB; thiếu ảnh bìa chặn lưu. | 20 |
| 4 | Tài chính: phiếu học phí, VAT, ZNS, chuyển xu | 0 test; liên quan tiền. PRD: ZNS lỗi không trừ 500đ; chuyển xu confirm 2 bước và trừ/cộng đúng 2 đầu. | Chiết khấu + VAT từng HS; ZNS gửi lỗi không trừ phí; chuyển xu 2 đầu + lịch sử; phiếu quá hạn; Lite ẩn cụm. | 18 |
| 5 | Khen thưởng & Quà: số dư, double-grant, quota | 0 test. PRD: đổi vượt số dư → 409; grant khi đang animation không được cộng 2 lần; quota 30 quà/GV/tháng; tồn kho theo số HS. | Đổi vượt số dư; bấm thưởng 2 lần nhanh; thưởng nhóm cộng đủ mọi thành viên; gửi vượt quota/tồn kho; thu hồi. | 14 |
| 6 | Phân quyền Owner / Admin / Teacher, đổi trường | 0 test. PRD: tự tắt quyền chính mình phải forceSync; đổi trường refresh đúng dữ liệu; nhiều gate theo gói Lite. Sai phân quyền = lộ dữ liệu. | Teacher không thấy menu Admin; tắt quyền chính mình không kẹt UI; đổi trường → đúng lớp/HS; duyệt tham gia. | 14 |
| 7 | Chấm điểm AI: giới hạn file, hết xu, chấm tay ghi đè | Chỉ 6 case; 81k lượt chấm/30 ngày trên production. PRD: ảnh ≤3MB, audio ≤10MB, video ≤250MB và ≤2 phút; hết xu chặn; kết quả GV ghi đè AI. | Mỗi giới hạn file; ảnh mờ báo lỗi; hết xu; GV sửa điểm sau AI; mất mạng giữa chừng job vẫn chạy. | 18 |
| 8 | Thu hồi đề / gỡ duyệt chương trình đang được lớp dùng | 0 test. PRD: bài đã giao không gãy khi đề rời kho; lớp đang dùng không gãy khi chương trình bị gỡ duyệt. | Thu hồi đề đã giao → HS vẫn làm được; gỡ duyệt → lớp vẫn chạy; hết quota 100MB chặn upload. | 10 |
| 9 | Thách đấu: kết thúc phòng, mật khẩu, phòng đã đóng | 0 test. PRD: kết thúc 2 lần báo "đã kết thúc"; không có quyền báo lỗi riêng. | Kết thúc phòng khoá nộp ngay; kết thúc 2 lần; HS vào phòng đóng; sai mật khẩu. | 8 |
| 10 | Báo cáo: số liệu khớp nguồn | 15 case hiện kiểm tra hiển thị, chưa kiểm tra số. Board S110 có nhiều thay đổi báo cáo (tuần, tháng, migrate). | Giao N bài, M em nộp → báo cáo đúng N/M; khoảng ngày; múi giờ; xuất Excel khớp màn hình. | 8 |
| 11 | Tạo học sinh: trùng username khác trường | Bug S108: "không highlight báo trùng username không thuộc trường đang tạo". | Trùng trong trường; trùng khác trường; import CSV có trùng. | 4 |
| 12 | Onboarding Quick Start | Case ONBOARDING_138 đang broken (timeout 300s); S110 mở lại 100% onboarding có bật/tắt theo domain. | Hoàn tất onboarding không lặp lại; domain tắt onboarding → bỏ qua được; sửa timeout case hiện có. | 4 |
| 13 | Dạy trực tuyến: sửa cả chuỗi, trùng giờ | 0 test. PRD: sửa "cả chuỗi" áp dụng từ buổi chọn; 2 lớp trùng giờ 1 GV phải hiện chồng lấn. | Sửa 1 buổi vs cả chuỗi; trùng giờ; link mở đúng nền tảng. | 6 |
test chỉ có 4 mục, không mục nào là bug; các bug exam được liệt kê ở đây lấy từ mục gắn nhãn teacher nhưng nội dung nói về app/exam học sinh. Danh sách Jira (nếu có) sẽ đầy đủ hơn — cần export để đối chiếu.