FLYER Product · QA & Chất lượng

Kiểm tra từng hệ thống: exam.flyer.us & teacher.flyer.us

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.

Phiên bản
1.0
Ngày
08/09/2026
Owner
Tùng (Product)
Trạng thái
Đề xuất — Automation Lead ước lượng lại effort
Nguồn số liệu
report.flyer.vn (06/09) · roadmap board · 32 PRD sprint 110
Liên quanDashboard automation sống ↗report.flyer.vn ↗32 PRD tính năng ↗

1Ba câu trả lời ngắn

Hệ thốngĐang cóCần thêmMục tiêuVùng trống lớn nhất
exam.flyer.us212≈ 165≈ 380Ma 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.us200≈ 220≈ 42010/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.

2exam.flyer.us — còn cần bao nhiêu

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ầnThiếuƯu tiên
Làm bài thi & luyện tậpPracticeTests 21 · StarterTests (4 file) 28499041Cao nhất
Gói Premium & thanh toán02020Cao nhất
Lớp học & bài tập được giao01818Cao
Gamification & phần thưởng01616Trung bình
Thách đấu01414Trung bình
Kết quả, khiên & tiến độ— (khiên đã có ở Shields, còn thiếu ẩn đáp án/lịch sử)01414Cao
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ó01212Cao
Tài khoản & hồ sơLogin 9 · SignUp 11 · ForgotPassword 12324210Trung bình
Học tập StudyStudyProfile 22 · StudyLogin 7 · StudyNav 736459Trung bình
Bingo AIBingoTalk 55127Trung bình
Trang chủHomeTest 1165Thấp
Kết quả chấm Speaking & Writing (Khiên)Shields RW 34 · Listening 33 · Speaking 21 · Writing P7 189890Đủ
Tổng212≈ 378≈ 166
Điểm mất cân đối 89/212 case (42%) dồn vào một tính năng là Khiên, trong khi luồng làm bài — nơi tập trung gần như toàn bộ bug người dùng báo (kéo-thả, gap fill, MCQ) — chỉ có 49 case và toàn bộ chạy trên Chrome desktop, không có mobile viewport.

3teacher.flyer.us — còn cần bao nhiêu

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 đã có test

Tính năng (PRD)Spec đang cóCầnThiếuƯu tiên
Giao bài tập + Giao bài tự độngAssignedHomework (8 file) — 17 case đang skip687810Cao (bật lại skip)
Chấm điểm AIStudentDetailGrading 3 · Speaking 1 · Writing 262418Cao
Học sinh (chi tiết)Filter 14 · CsvSort 9 · Dynamic 528324Thấp
Kiểm tra đầu vàoPlacementTests 2727270Đủ
Quản lý lớpClassTests 2020266Trung bình
Quản lý kỳ thiExamFlow 1717225Trung bình
Báo cáoReportTests 1515205Trung bình
Trợ giảng AI (Call Bingo)CallBingoTests 44106Trung bình
Onboarding & đăng nhậpOnboarding 7 · Login 3 · Logout 1 · ForgotPw 2 · SignUp 1 · Landing 115150Đủ (sửa 1 broken)

Tính năng chưa có test nào

Tính năng (PRD)Cơ sở ước lượng (AC · edge · rule trong PRD)CầnƯu tiên
Điểm danh10 AC · 7 edge · 6 rule — PRD chi tiết nhất, vừa launch22Cao nhất
Tạo đề (Builder)3 AC · 5 edge · 4 rule + preview phải khớp bản chạy trên exam20Cao
Tài chính & Học phí4 AC · 5 edge · 3 rule — tiền, VAT, ZNS trừ phí18Cao
Khám phá đề4 AC · 5 edge · 4 rule — quyền in, premium, URL filter16Trung bình
Khen thưởng (Đá Tri Thức)4 AC · 5 edge · 3 rule — số dư, double-grant14Cao
Quà tặng4 AC · 5 edge · 4 rule — quota, tồn kho14Trung bình
Thiết lập trường học4 AC · 5 edge · 4 rule — phân quyền Owner/Admin/Teacher14Cao
Thư viện của tôi3 AC · 5 edge · 3 rule — quota, thu hồi đề14Trung bình
Chương trình4 AC · 5 edge · 3 rule — kiểm duyệt, nhân bản14Trung bình
Thách đấu3 AC · 5 edge · 3 rule12Trung bình
Dạy trực tuyến3 AC · 5 edge · 3 rule10Thấp
Tổng cần thêm54 (tính năng đã có) + 168 (chưa có)≈ 222

4Vì sao vẫn nhiều bug

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

  1. Automation là báo động sau, không phải cổng chặn. Cả 3 suite chạy trên 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.
  2. Test phủ đúng chỗ ít bug, bỏ trống chỗ nhiều bug. Trên roadmap board, các mục bug có mô tả rõ đều là tương tác câu hỏi phía học sinh: kéo-thả mất ô thả (S108, lặp lại S109), gap fill kết quả quá nhỏ (S108), MCQ phải cuộn mới thấy đáp án (S108, đang làm), IELTS ẩn đáp án (S107), ô lựa chọn khuất khi thu nhỏ màn hình (S107), bàn phím che câu hỏi (S109). Automation cho luồng làm bài chỉ có 49 case, và toàn bộ trên Chrome desktop — không có mobile viewport, không có App.
  3. Bug lặp lại vì không có test khoá regression. Kéo-thả xuất hiện ở S108 rồi S109; case duy nhất về kéo-thả trong automation (TEST CASE 26) từng fail ở lần 24/08. Không có quy tắc "mỗi bug production = 1 test case regression", nên sửa xong vẫn có thể vỡ lại ở sprint sau.
  4. Skip thay vì sửa. 4 case IELTS fail 100% ở 24/08 → 06/09 chuyển sang skip. 16 case 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.
  5. Bug không được ghi nhận đủ để học. Board có 57 mục "Fix Bug" nhưng khoảng 2/3 là ý tưởng hoặc cải tiến gắn nhầm nhãn; nhiều mục chỉ ghi "Fix bug exam app", "Bug Teacher App", "Fix bug IELTS" không có mô tả. Bug của exam gần như không lên board (sản phẩm 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.
  6. Sản phẩm đổi nhanh hơn test. Sprint 110 có 28 mục thay đổi; nhiều mục là giao diện mới (theme cướp biển cho Exam/Practice/Study, MCQ practice mới, map Writing mới, gộp chủ đề nói & practice). Mỗi thay đổi giao diện là một cơ hội regression, trong khi số case teacher không tăng suốt 2 tuần.
Kết luận Vấn đề không phải "automation kém" — 94% pass là tốt. Vấn đề là automation đang trả lời câu hỏi "những gì đã test có còn chạy không", trong khi người dùng gặp bug ở những gì chưa test, trên thiết bị chưa test, trước khi test chạy. Ba việc thay đổi cục diện: chạy trước deploy (staging/PR), thêm mobile viewport cho luồng làm bài, và mỗi bug production sinh một test.

5Use case dễ sinh bug — exam.flyer.us

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 caseVì sao dễ bug (bằng chứng)Test nên build trướcTest
1Kéo-thả (drag & drop) trên mobile viewport và desktopBug 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
2Gap fillMCQ hiển thị đủ câu hỏi và đáp ánS108: 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ênPRD: 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
4Hết kim cương khi chấm AIS110: "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
5Gói Premium: gating, mua, hết hạnChư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
6Hết giờ / mất mạng / nộp trùng giữa bài thiPRD: 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
7Chống gian lận: chuyển tab, thoát fullscreen, copy-pasteRule "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
8Phiê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
9Múi giờ: hạn nộp, streak, quest reset 23:59S110 "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
10Mic, quyền ghi âm, giới hạn file khi luyện Nói/ViếtPRD: 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
11Bài tập lớp: join lớp, khoá hạn, REDOChư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
12Khách chưa đăng nhập làm thử rồi đăng nhậpPRD: 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
13Nhiều hồ sơ (profile) trên 1 tài khoảnPRD: 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
14Gamification: streak, quà ngày, xếp hạngChư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

6Use case dễ sinh bug — teacher.flyer.us

#Use caseVì sao dễ bug (bằng chứng)Test nên build trướcTest
1Điểm danh: lưu, sửa buổi cũ, học sinh đã rời lớpVừ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
2Giao bài: ẩn đáp án, khoá hạn, REDO lan sang học sinhCà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
3Tạo đề: preview khớp bản chạy thật0 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
4Tài chính: phiếu học phí, VAT, ZNS, chuyển xu0 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
5Khen thưởng & Quà: số dư, double-grant, quota0 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
6Phân quyền Owner / Admin / Teacher, đổi trường0 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
7Chấ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
8Thu hồi đề / gỡ duyệt chương trình đang được lớp dùng0 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
9Thách đấu: kết thúc phòng, mật khẩu, phòng đã đóng0 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
10Báo cáo: số liệu khớp nguồn15 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
11Tạo học sinh: trùng username khác trườngBug 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
12Onboarding Quick StartCase 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
13Dạ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

7Lộ trình 3 sprint

  1. Sprint 116 — đổi cách chạy trước, viết test sau (≈ 60 case). Chạy automation trên staging trước mỗi deploy, chặn deploy khi có failed (không chỉ chạy prod 02:02). Bật lại 20 case đang skip (4 IELTS + 16 pending-approval), sửa 1 broken. Thêm mobile viewport 375px cho luồng làm bài: use case exam #1, #2, #3 (30 case). Đặt quy tắc: mỗi bug production đóng = 1 case regression, ghi ID bug vào tên test.
  2. Sprint 117 — tiền và quyền (≈ 90 case). Exam: Premium/kim cương/gating (#4, #5) 22 case; phiên, múi giờ, mất mạng (#6, #7, #8, #9) 26 case. Teacher: Điểm danh (#1) 22 case; Giao bài ẩn đáp án/REDO (#2) 10 case; Phân quyền (#6) 14 case — 5 case đầu chạy chung với exam vì cài đặt GV quyết định hành vi HS.
  3. Sprint 118 — phủ nốt tính năng trống (≈ 110 case). Teacher: Tạo đề (#3) 20, Tài chính (#4) 18, Khen thưởng & Quà (#5) 14, Chấm AI (#7) 18. Exam: Bài tập lớp (#11) 12, Gamification (#14) 8, mic/file (#10) 8, profile (#13) 6, khách (#12) 6.
  4. Sau đó — phần còn lại của bảng mục 2 và 3 (Thư viện, Chương trình, Thách đấu, Dạy trực tuyến, Bingo AI, Study, Trang chủ) theo nhịp 30–40 case/sprint; song song chuyển bug tracking về một nơi có mô tả đủ để đo MTTR và escaped defect.
Nhịp đạt mục tiêu Tổng cần thêm ≈ 390 case cho cả hai hệ thống. Với nhịp 60–110 case/sprint như trên, mục tiêu đạt được sau 4–5 sprint (khoảng 10 tuần). Số 06/09 cho thấy team đã làm được 119 case trong 2 tuần cho exam, nên nhịp này khả thi nếu ưu tiên đúng.

8Cách ước lượng & giới hạn của số liệu

Cách tính "Cần"

Giới hạn của số liệu