Trường Số PRD/Kế hoạch kiểm thử
Trường Số · Yêu cầu sản phẩm · 09/2026
Kế hoạch kiểm thử
Nền tảng cho đội QA: theo từng PRD, các luồng người dùng cần kiểm thử đầu-cuối, các khu vực rủi ro cao cần kiểm thử âm và kiểm thử đồng thời, và các đối soát liên mô-đun để chứng minh số liệu khớp nhau. Mã kiểm thử tham chiếu đến user story trong từng PRD.
Xuất xứ / Prompt / Giới hạn
Tài liệu do trợ lý AI soạn cùng bộ PRD (ngày 10/09/2026, bổ sung các PRD 13 đến 19 ngày 16/09/2026), theo yêu cầu gốc được trích nguyên văn ở trang mục lục. Đây là bản đề xuất để đội thảo luận, chưa phải quyết định của đội sản phẩm.
Nguồn
- User story, quy tắc nghiệp vụ và trường hợp biên trong các PRD 00 đến 19.
Giới hạn
- Trạng thái Dự thảo v1, soạn trước khi có bản dựng để kiểm thử; bộ ca kiểm thử chi tiết nằm ở /qa/.
1Dữ liệu kiểm thử và môi trường
- Tenant mẫu "Big Center": 3 chi nhánh, 3.000 học viên, 300 lớp, 150 nhân sự, dữ liệu buổi học, điểm danh và hoá đơn trong một năm; cộng thêm tenant "Empty Center" cho luồng onboarding và các trạng thái rỗng.
- Đối tượng dùng làm fixture: owner, branch_manager (chỉ chi nhánh A), admissions (phạm vi own), academic_admin (chi nhánh A), accountant (phạm vi all), teacher (hai lớp tại A và B), phụ huynh có hai con (mỗi con một chi nhánh), viewer.
- Ngôn ngữ: mọi luồng đều chạy trên vi và en; ảnh chụp màn hình được so sánh.
- Thiết bị: desktop 1440 px; mobile 390 px cho luồng giáo viên và phụ huynh; user agent trình duyệt trong ứng dụng Zalo cho các đường link gửi phụ huynh.
- Các tích hợp được giả lập: Zalo ZNS và OA (ghi lại lời gọi, mô phỏng mẫu tin được duyệt/bị từ chối và webhook gửi tin), webhook SePay (mô phỏng chuyển khoản có và không có mã thanh toán, gửi trùng lặp), nhà cung cấp hoá đơn điện tử (thành công, lỗi kiểm tra dữ liệu, hết thời gian chờ).
2Luồng và khu vực rủi ro cao theo từng PRD
| PRD | Luồng đầu-cuối | Khu vực rủi ro cao (kiểm thử âm, đồng thời, phân quyền) |
|---|---|---|
| 00 / 10 Tenant và vai trò | Onboarding tạo center và owner đầu tiên; thêm chi nhánh; mời người dùng kèm vai trò và chi nhánh; chấp nhận lời mời; chuyển chi nhánh; nhân bản và sửa vai trò; ngừng hoạt động người dùng. | Truy cập id xuyên tenant trả về 404 cho mọi endpoint mới; phạm vi chi nhánh được áp dụng trên danh sách (người dùng chi nhánh A không bao giờ thấy dòng của B); không thể xoá owner cuối cùng; thay đổi quyền có hiệu lực mà không cần đăng nhập lại; đã bỏ stub PermissionGate (hành động trên kanban tuân theo quyền thật). |
| 01 Tuyển sinh | Tạo lead kèm học viên dự kiến; cảnh báo trùng số điện thoại; ghi nhận cuộc gọi kèm gọi lại; hàng đợi gọi lại; đánh dấu không gọi và gọi cưỡng chế; đặt lịch học thử; giáo viên điểm danh buổi học thử; tư vấn viên nhận thông báo; tạo và ghi nhận kết quả kiểm tra xếp lớp; wizard chuyển đổi 4 bước với học viên mới, đồng ý của phụ huynh, lớp học, gói học phí, hoá đơn; chuyển lead sang chi nhánh khác; trang cài đặt nguồn và kênh được lưu qua API. | Tính nguyên tử của chuyển đổi (lỗi ở bước 3 thì không lưu gì cả); chuyển đổi hai lần cho cùng một học viên dự kiến bị chặn; giảm giá vượt hạn mức tạo yêu cầu phê duyệt và không cấp buổi; hết chỗ học thử; nhãn trạng thái kiểm tra xếp lớp khớp với enum của API; các chiến lược khử trùng khi nhập liệu; di chuyển kanban với cursor đã cũ. |
| 02 Học viên | Tạo học viên vãng lai; thêm phụ huynh thứ hai dùng chung với anh chị em; xếp lớp; bảo lưu và tiếp tục học có gia hạn thời điểm hết hạn; nghỉ học kèm ước tính hoàn tiền; chuyển chi nhánh; tải lên tài liệu; ghi chú cần lưu ý hiển thị cho giáo viên; tab học tập có và không có dữ liệu FLYER; ẩn danh hoá. | Trạng thái suy ra tự động so với chuyển trạng thái thủ công (INVALID_TRANSITION); tính duy nhất và gộp số điện thoại phụ huynh; giáo viên chỉ thấy học viên trong lớp do giáo viên đó phụ trách; ẩn danh hoá vẫn giữ dòng dữ liệu tài chính; tìm kiếm bỏ dấu và theo số điện thoại phụ huynh. |
| 03 Lớp học | Khoá học kèm gói học phí; tạo lớp kèm lịch học và ngày nghỉ, xem trước các buổi học; hiển thị và có thể ghi đè xung đột phòng và giáo viên; sửa một buổi so với sửa cả các buổi sau; huỷ buổi trễ kèm thêm buổi bù; dạy thay; ghi danh đến hết sĩ số rồi vào danh sách chờ; chuyển lớp; đặt lịch học bù; các chế độ xem thời khoá biểu và in; kết thúc lớp. | Sinh lại lịch không bao giờ đụng vào các buổi đã học; kiểm tra xung đột giáo viên trên nhiều chi nhánh; STALE khi sửa buổi học đồng thời; sĩ số tính cả học thử và học bù; múi giờ tại ranh giới tháng; link iCal có ký số và có thể thu hồi. |
| 04 Điểm danh | Trên điện thoại của giáo viên: mở phiếu, đánh dấu các trường hợp ngoại lệ, lưu; hàng đợi offline rồi đồng bộ; có phép được đánh dấu sẵn; admin sửa kèm lý do; nhắc các buổi chưa điểm danh; công việc theo dõi vắng học; các dòng học thử và học bù; báo cáo và xuất dữ liệu; phụ huynh nhận ZNS khi vắng. | Xung đột phiên bản giữa giáo viên chính và dạy thay; quy tắc trừ gói buổi theo từng trạng thái và chính sách; giới hạn thời gian sửa theo vai trò; bỏ qua thông báo khi chưa có sự đồng ý, kèm lý do; hành vi giờ yên tĩnh với trường hợp vắng buổi tối; xoá phiếu bị chặn với người không phải admin; PUT có tính idempotent theo client_saved_at. |
| 05 Tài chính | Gói học phí; hoá đơn có nhiều dòng, giảm giá, voucher, trả góp; hiển thị QR; thanh toán tiền mặt kèm PDF phiếu thu; chuyển khoản SePay được khớp; thanh toán một phần; chuyển khoản chưa khớp được chia cho hai hoá đơn; lập hoá đơn tháng theo lô có xem trước phần tính theo tỷ lệ; danh sách công nợ, nhắc nợ, kế hoạch trả nợ; gói buổi sắp hết và đã hết; phiếu giảm và hoàn tiền kèm phê duyệt; chi phí và chốt quỹ có chênh lệch; huỷ thanh toán; hoá đơn điện tử thành công và thất bại; báo cáo tài chính khớp với sổ quỹ. | Làm tròn tiền và tổng cộng; từ chối thanh toán vượt số tiền cần thu; webhook SePay gửi trùng được khử trùng; đánh số phiếu thu tuần tự khi có nhiều thu ngân cùng lúc; huỷ thanh toán sau khi đã chốt quỹ; hạn mức giảm giá theo vai trò; giới hạn của phiếu giảm; VAT mặc định theo từng loại dòng; mọi thay đổi liên quan tiền đều có nhật ký; phụ huynh chỉ thấy hoá đơn của mình. |
| 06 Nhân sự | Tạo nhân sự kèm tài khoản; liên kết giáo viên đã có sẵn; hợp đồng kèm quy tắc lương; tạo bảng công; giáo viên gắn cờ một dòng; quản lý xử lý và duyệt; xuất bảng lương; chia sẻ kết quả đánh giá; cho nghỉ việc kèm phân công lại các buổi học trong tương lai. | Từ chối hợp đồng chồng lấp thời gian; mức lương được lưu lại (snapshot) không đổi khi quy tắc bị sửa sau đó; người dạy thay được trả lương, không phải giáo viên chính; từ chối tính lại bảng công sau khi đã duyệt; buổi huỷ trễ vẫn được trả theo quy tắc; phân quyền trên các trường liên quan đến chi phí; nhân sự đã nghỉ việc không xuất hiện trong các bộ chọn. |
| 07 Phụ huynh | Kết nối Zalo (giả lập); trạng thái mẫu tin; tin nhắn giao dịch khi điểm danh, hoá đơn, phiếu thu, huỷ buổi; thông báo chung cho lớp kèm xem trước và độ tiếp cận; ghi chú buổi học của giáo viên; đợt báo cáo học tập, nhận xét, xuất bản, PDF; đăng nhập OTP của phụ huynh; chuyển đổi giữa các con; thời khoá biểu; yêu cầu xin phép nghỉ và học bù; thu hồi sự đồng ý; thanh toán QR trên cổng phụ huynh được cập nhật qua webhook. | Thứ tự định tuyến và kênh dự phòng theo sự đồng ý; giờ yên tĩnh; tạm dừng ZNS khi vượt hạn mức; mẫu tin bị từ chối giữa luồng gửi; giới hạn số lần và khoá tài khoản khi nhập sai OTP; thu hồi phiên đăng nhập trên cổng; ẩn nội dung tin nhắn khi ghi log; danh sách phụ huynh không thể liên hệ được; đối tượng nhận được xác định tại thời điểm gửi. |
| 08 Kho | Mặt hàng trong danh mục; nhập kho; phát cho học viên có tính phí tạo dòng tài chính; phát cho lớp bị thiếu hàng; chuyển kho giữa các chi nhánh; điều chỉnh sau kiểm kê kèm phê duyệt; danh sách sắp hết hàng và thông báo hằng ngày; trả lại hàng còn mới và hàng hỏng; xuất dữ liệu. | Từ chối tồn kho âm khi có thao tác đồng thời; chứng từ đã ghi sổ không thể sửa; hiển thị giá vốn theo vai trò; mặt hàng ngừng hoạt động ở trạng thái dự thảo; chặn xoá dòng tài chính khi vẫn còn phát sinh kho liên quan. |
| 09 Báo cáo | Dashboard điều hành theo kỳ và chi nhánh; drill-down từ mỗi ô đều dẫn đến đúng danh sách đã lọc; trang chủ theo vai trò; từng báo cáo trong thư viện có bộ lọc, tổng cộng, tác vụ xuất dữ liệu; bản tin tuần. | Đối soát: các ô tiền trên dashboard bằng đúng tổng của sổ quỹ và danh sách hoá đơn; số lượng học viên bằng đúng số dòng trong danh sách; ranh giới kỳ theo múi giờ của tenant; huỷ thanh toán làm tính lại số tổng hợp; xuất trên 5.000 dòng chạy như một job; vai trò viewer chỉ được xem, không được sửa. |
| 11 Dữ liệu và nhập liệu | Mẫu file theo từng thực thể; ánh xạ cột; xem trước kiểm tra dữ liệu kèm lỗi và cảnh báo; thực thi dưới dạng job; trang chi tiết với các dòng lỗi; hoàn tác trong 24 giờ; chạy đủ thứ tự từ nhân sự đến điểm danh trên Empty Center; số dư đầu kỳ tạo ra gói buổi và học phí đầu kỳ. | Chuẩn hoá số điện thoại; ngày dạng serial của Excel; ngữ nghĩa gộp khi khử trùng cho học viên và phụ huynh; cảnh báo sĩ số không chặn việc nhập; từ chối hoàn tác sau khi dữ liệu đã bị sửa; thiếu mã chi nhánh chỉ cho phép owner tạo mới. |
| 12 Phi chức năng | Chạy kiểm thử hiệu năng trên Big Center cho danh sách, dashboard, lưu điểm danh, nhập 5.000 dòng, sinh thời khoá biểu; thử khôi phục dữ liệu; xuất dữ liệu toàn tenant; kiểm tra khớp key i18n; chạy axe trên các màn hình chính; đi qua toàn bộ luồng bằng bàn phím. | Giới hạn tốc độ (OTP, đăng nhập, ghi dữ liệu); thời hạn của signed URL; secret được ẩn sau khi lưu; header CSP; nhật ký chỉ được thêm, không được sửa (không có quyền UPDATE); log không chứa số điện thoại; luồng ẩn danh hoá; ghi nhận sự đồng ý tại mọi điểm phụ huynh cung cấp dữ liệu. |
| 13 Điểm thi | Tạo kỳ đánh giá theo lớp với cấu trúc điểm theo kỹ năng và trọng số; nhập điểm cả lớp bằng lưới (bàn phím, dán từ Excel); nhập từng học viên kèm nhận xét và tệp đính kèm; lấy điểm từ bài thi FLYER; gửi duyệt, giáo vụ trả lại rồi công bố; phụ huynh nhận thông báo và xem kết quả trên cổng; sửa điểm sau công bố có lý do; xuất bảng điểm xlsx và PDF. | Điểm ngoài thang bị chặn ở ô và ở API; trọng số không đủ 100 % không cho lưu; công bố hai lần không gửi thông báo trùng; sửa điểm sau công bố phải có lý do và ghi lịch sử; giáo viên chỉ nhập được lớp được phân công; phụ huynh không thấy bản nháp; kỳ đánh giá thuộc chi nhánh khác không hiện. |
| 14 Giáo trình | Tạo giáo trình, đơn vị, bài học với khối nội dung HTML, YouTube, tệp; phát hành phiên bản; gắn giáo trình vào khoá học; tạo lớp và kiểm tra ánh xạ buổi ↔ bài học; giáo viên ghi sổ đầu bài trên di động sau điểm danh (đã dạy, một phần, bài khác); dồn bài học xuống khi huỷ buổi; xem tiến độ theo lớp; tải tệp vào thư viện và phân quyền thư mục. | Phiên bản đang dùng không sửa được tại chỗ; xoá bài học đang được ánh xạ bị chặn; sổ đầu bài quá 7 ngày phải có lý do; tệp vượt 200 MB hoặc sai loại bị từ chối; hạn mức dung lượng 100 % chặn tải lên; thẻ script trong HTML bị loại bỏ; tài liệu đánh dấu chỉ giáo viên không lộ trên cổng phụ huynh. |
| 15 Chỉ tiêu | Tạo kỳ chỉ tiêu tháng; phân bổ trung tâm → chi nhánh → cá nhân; xuất bản; số thực tế cập nhật từ dashboard và học phí; bảng tiến độ với dự báo; cảnh báo chậm tiến độ; xếp hạng tư vấn viên; tư vấn viên xem chỉ tiêu của bản thân trên di động; sửa chỉ tiêu giữa kỳ có lý do; sao chép kỳ trước. | Tổng chi nhánh không khớp trung tâm bị chặn trừ khi ghi đè có lý do; không nhập tay số thực tế qua API; ảnh chụp 23:30 không chạy hai lần; cảnh báo không lặp trong 7 ngày; nhân sự chuyển chi nhánh giữa kỳ; xếp hạng ẩn khi cấu hình chỉ hiện trong chi nhánh; đóng kỳ sau 5 ngày ân hạn. |
| 16 Công việc | Giao việc gắn với khách hàng và học viên; việc lặp hằng ngày sinh đúng một lần; hệ thống sinh việc khi học viên vắng 3 buổi và khử trùng; nhắc trước hạn và bản tổng hợp 08:00; giáo viên gửi đơn xin nghỉ trên di động, quản lý duyệt, buổi bị ảnh hưởng chuyển sang cần dạy thay; báo cáo sự cố kèm ảnh, mức nghiêm trọng, định tuyến tới quản lý chi nhánh. | Việc trùng khoá dedupe trong 7 ngày không tạo lại; đơn xin nghỉ trùng thời gian bị chặn; leo thang lên chủ trung tâm sau 48 giờ; sự cố mức nghiêm trọng bỏ qua giờ yên lặng; người nhận rời trung tâm thì việc chuyển về quản lý; phân quyền: chỉ người giao, người nhận, quản lý chi nhánh xem được việc. |
| 17 Di động | Cài đặt PWA và mở qua biểu tượng; điểm danh ngoại tuyến rồi đồng bộ nền; thông báo đẩy mở đúng màn hình qua deep link; quản lý duyệt giảm giá trên di động; tư vấn viên gọi từ ứng dụng và ghi nhật ký; phụ huynh xem tài liệu và kết quả; xác thực sinh trắc khi mở lại; đăng ký và thu hồi thiết bị. | Xung đột đồng bộ khi hai người sửa cùng phiếu (409); hàng đợi ngoại tuyến không mất khi tắt ứng dụng; nội dung thông báo đẩy không chứa số tiền và họ tên đầy đủ; giờ yên lặng; vượt 5 thiết bị; thu hồi thiết bị đăng xuất phiên ngay; ngân sách hiệu năng trên 3G (khởi động nguội ≤ 4 s). |
| 18 Học trực tuyến | Liên kết học viên với hồ sơ FLYER khi chuyển đổi; ánh xạ lớp với lớp FLYER và đồng bộ danh sách; giao bài gắn bài học với hạn nộp; nhắc nộp bài; kết quả đồng bộ 15 phút vào tab học tập và kỳ đánh giá; bán gói luyện thi, cấp quyền khi thanh toán, thu hồi khi hết hạn; đăng nhập một lần từ cổng phụ huynh. | Lớp FLYER đã ánh xạ không gán được lớp thứ hai; học viên bảo lưu thì quyền tạm dừng; thanh toán một phần không cấp quyền; mã SSO dùng một lần và hết hạn sau 60 giây; webhook lặp không ghi kết quả trùng; thu hồi bài đã giao không xoá kết quả đã đồng bộ. |
| 19 Gói dịch vụ | Tenant mới vào dùng thử 30 ngày; cảnh báo 90 % giới hạn học viên; chặn tạo học viên thứ 101 với báo giá nâng cấp; nâng cấp có khấu trừ đúng công thức; hoá đơn thuê bao khớp SePay; quá hạn 14 ngày chuyển chỉ đọc; gia hạn dùng thử và cấp tín dụng từ bảng điều khiển nội bộ; hạ gói cuối kỳ. | Trạng thái chỉ đọc trả 423 cho mọi thao tác ghi; giới hạn tính theo học viên đang học, không tính đã nghỉ; hạ gói bị chặn khi dùng vượt giới hạn gói mới; tín dụng không âm; thao tác nội bộ có nhật ký; dữ liệu giữ 90 ngày sau chấm dứt rồi xoá (mâu thuẫn với PRD 12 cần chốt). |
3Tình huống liên mô-đun
- Từ lead đến lần thanh toán đầu tiên: lead được tạo qua nhập liệu; gọi điện; học thử; kiểm tra xếp lớp; chuyển đổi kèm hoá đơn; chuyển khoản QR được khớp; phiếu thu gửi phụ huynh; học viên chuyển sang Đang học; danh sách lớp hiển thị học viên; buổi điểm danh đầu tiên trừ một buổi trong gói; số dư và các ô trên dashboard được cập nhật.
- Bảo lưu và trở lại học: học viên bảo lưu 30 ngày; các buổi trong khoảng thời gian đó bị ẩn khỏi danh sách lớp; hạn của gói buổi được gia hạn; trở lại học ở một lớp mới; bảng công không bị ảnh hưởng.
- Nghỉ học kèm hoàn tiền: nghỉ học; ước tính hoàn tiền; phiếu giảm; hoàn tiền được chi từ quỹ tiền mặt; chốt quỹ hiển thị khoản này; báo cáo tỷ lệ nghỉ học ghi nhận lý do; cổng phụ huynh hiển thị khoản giảm trừ.
- Dạy thay: giáo viên chính nghỉ; giáo viên dạy thay được phân công; giáo viên dạy thay điểm danh; bảng công trả lương cho giáo viên dạy thay; bảng công của giáo viên chính không bao gồm buổi này.
- Chuyển chi nhánh: học viên chuyển từ A sang B kèm số dư gói buổi; báo cáo của A và B đều hiển thị dòng chuyển; cổng phụ huynh hiển thị lịch sử ở cả hai chi nhánh.
- Chốt tháng: lập hoá đơn theo lô; gửi nhắc nợ; ghi nhận thanh toán; chốt quỹ tại từng chi nhánh; bảng công được duyệt và xuất; dashboard điều hành bằng đúng tổng các dòng theo chi nhánh.
4Thứ tự ưu tiên tự động hoá
- Cách ly dữ liệu giữa các tenant và kiểm tra phân quyền trên mọi endpoint mới (kiểm thử API, sinh ra từ các phần bổ sung trong OpenAPI).
- Các luồng liên quan tiền: hoá đơn, thanh toán, đối soát, đánh số phiếu thu, huỷ, hoàn tiền, chốt quỹ, đối soát với báo cáo.
- Lưu điểm danh trên di động bao gồm cả trường hợp offline và xung đột phiên bản, cùng việc trừ gói buổi.
- Tính nguyên tử của wizard chuyển đổi.
- Sinh buổi học, xung đột và sinh lại lịch.
- Định tuyến tin nhắn và kênh dự phòng với các bản giả lập.
- Nhập liệu theo đúng thứ tự đầy đủ trên một tenant rỗng.
- Đối soát dashboard và báo cáo.
Trường Số (truongso.net) · Nội bộ FLYER