#03 – Đặc tả yêu cầu phần mềm (SRS)
Giai đoạn: Đặc tả (Requirements Specification) · Tham chiếu cấu trúc ISO/IEC/IEEE 29148 · Phiên bản 0.1 – 29/10/2026
Tài liệu này mô tả hệ thống phải làm gì. Cách hiện thực ở 06, 07, 08. Tiêu chí chấp nhận chi tiết theo từng story ở 04.
#1. Giới thiệu
#1.1 Mục đích
Đặc tả yêu cầu chức năng, quy tắc nghiệp vụ và yêu cầu phi chức năng của Nền tảng số sách ôn thi hybrid TNTHPT, làm căn cứ thống nhất giữa HEID/NV06 và SK cho thiết kế, phát triển, kiểm thử và nghiệm thu.
#1.2 Thuật ngữ
| Thuật ngữ |
Định nghĩa |
| Sách hybrid |
Sách giấy có in mã liên kết đến tài nguyên số tương ứng |
| Mã kích hoạt |
Mã duy nhất kèm mỗi cuốn sách (QR/tem cào), dùng để gắn quyền sử dụng học liệu số của sách vào tài khoản |
| ID nội dung (gọi tắt ID) |
Mã ngắn in cạnh từng mục trên sách (mind map, ví dụ, bài tập, đề), dùng để mở tài nguyên số tương ứng |
| QR nội dung |
Mã QR in cạnh ID, chứa đường dẫn trực tiếp đến tài nguyên (deep link) |
| Tài nguyên số |
Một đơn vị nội dung số mở được bằng ID: lý thuyết, ví dụ, bộ bài tập, đề |
| Bài làm (Assessment) |
Tài nguyên có câu hỏi để làm: bộ bài tập, placement test, đề thi thử, đề luyện tập, đề mở rộng |
| Lượt làm bài (Attempt) |
Một lần học sinh bắt đầu và nộp một bài làm |
| Chế độ "Giao diện đề thi" |
Hiển thị đầy đủ nội dung câu hỏi và ô trả lời trên máy |
| Chế độ "Phiếu trả lời" |
Chỉ hiển thị lưới số câu + ô chọn đáp án; học sinh đọc đề trên sách giấy |
| Chế độ "Một câu/màn hình" |
Mỗi câu một màn hình, ghi nhận thời gian từng câu (placement test) |
| Chế độ "Tra đáp án" |
Xem đáp án và lời giải mà không làm bài trên máy (học sinh đã làm trên giấy) |
| Ma trận kiến thức |
Hệ thống nhãn (tag): chuyên đề, kỹ năng, dạng bài, mức độ nhận thức, dùng để gắn cho câu hỏi và tính đề xuất |
| Quyền sử dụng (Entitlement) |
Quyền truy cập một sách hoặc một gói đề của một tài khoản, có nguồn (kích hoạt, mua, giao bài) và thời hạn |
| Rubric |
Hướng dẫn chấm theo tiêu chí và thang điểm cho câu tự luận |
| BTV |
Biên tập viên |
| LMS Hoclieu |
Hệ thống quản lý học tập của hoclieu.vn mà giáo viên đang dùng |
#1.3 Tài liệu tham chiếu
[MT], [UF], [YC] (xem README); 01 – Tầm nhìn; 02 – Phân tích đầu vào.
#2. Mô tả tổng quan
#2.1 Ngữ cảnh hệ thống
flowchart LR
HS(["Học sinh"]) -- "Kích hoạt, nhập ID,<br/>học, làm bài" --> SYS
GV(["Giáo viên"]) -- "Giao bài, xem báo cáo" --> SYS
BTV(["Biên tập viên"]) -- "Soạn nội dung, ID,<br/>ma trận kiến thức" --> SYS
ADM(["Admin HEID"]) -- "Báo cáo, vận hành" --> SYS
SACH[/"Sách giấy<br/>(ID, QR, mã kích hoạt)"/] -. "in từ dữ liệu xuất ra" .- SYS
SYS["Nền tảng số<br/>sách ôn thi hybrid"]
SYS <-- "SSO, lớp học, giao bài" --> LMS[["Hoclieu.vn<br/>tài khoản + LMS"]]
SYS <-- "Thanh toán, IPN" --> PAY[["Cổng thanh toán"]]
SYS <-- "Lưu trữ, phát video" --> VID[["Dịch vụ video/CDN"]]
SYS -- "OTP, thông báo" --> MSG[["SMS / Email / Zalo ZNS"]]
#2.2 Tác nhân (Actors)
| Tác nhân |
Mô tả |
Quyền chính |
| Khách |
Người chưa đăng nhập (vừa quét QR) |
Xem trang giới thiệu, nội dung xem thử, đăng ký/đăng nhập |
| Học sinh (HS) |
Người dùng đã đăng nhập |
Kích hoạt sách, dùng học liệu của sách đã kích hoạt, làm bài, xem kết quả, mua gói |
| Giáo viên (GV) |
Tài khoản có vai trò giáo viên |
Quản lý lớp, giao bài, xem báo cáo lớp |
| Biên tập viên (BTV) |
Người dùng CMS |
Soạn, nhập, gắn tag nội dung; sinh ID; gửi duyệt |
| Trưởng ban biên tập |
Người dùng CMS có quyền duyệt |
Duyệt, xuất bản nội dung; khoá ID |
| Admin HEID |
Quản trị |
Báo cáo, quản lý người dùng, lô mã kích hoạt, gói đề, cấu hình |
| Hệ thống ngoài |
LMS Hoclieu, cổng thanh toán, dịch vụ video, dịch vụ tin nhắn |
Tích hợp |
#2.3 Sơ đồ use case
flowchart LR
HS(["Học sinh"])
GV(["Giáo viên"])
BTV(["BTV"])
ADM(["Admin HEID"])
subgraph SYS["Nền tảng số sách hybrid"]
UC01(["UC-01 Kích hoạt sách"])
UC02(["UC-02 Mở tài nguyên bằng ID/QR"])
UC03(["UC-03 Học lý thuyết, ví dụ, video"])
UC04(["UC-04 Làm bài trên máy"])
UC05(["UC-05 Xem kết quả và lời giải"])
UC06(["UC-06 Tự chấm bài tự luận"])
UC07(["UC-07 Nhận đề xuất củng cố"])
UC08(["UC-08 Xem lịch sử và tiến bộ"])
UC09(["UC-09 Mua gói đề mở rộng"])
UC16(["UC-16 Tra đáp án khi làm trên giấy"])
UC17(["UC-17 Duyệt thư viện học liệu"])
UC10(["UC-10 Giao bài cho lớp"])
UC11(["UC-11 Xem báo cáo lớp"])
UC12(["UC-12 Quản lý nội dung, câu hỏi, video"])
UC13(["UC-13 Quản lý ID và mã kích hoạt"])
UC14(["UC-14 Thiết lập ma trận kiến thức"])
UC15(["UC-15 Xem báo cáo hành vi"])
end
HS --- UC01 & UC02 & UC03 & UC04 & UC05 & UC06 & UC07 & UC08 & UC09 & UC16 & UC17
GV --- UC10 & UC11
BTV --- UC12 & UC13 & UC14
ADM --- UC13 & UC15
#2.4 Môi trường vận hành
- Web responsive (ưu tiên mobile), hỗ trợ trình duyệt trong ứng dụng (Zalo, Facebook) khi quét QR.
- CMS và trang quản trị dùng trên máy tính.
- Hạ tầng đám mây, đặt tại Việt Nam hoặc đáp ứng quy định lưu trữ dữ liệu hiện hành.
#3. Đặc tả use case chính
#UC-01 – Kích hoạt sách
| Mục |
Nội dung |
| Tác nhân |
Học sinh (hoặc Khách) |
| Nguồn |
YC01, A1 |
| Tiền điều kiện |
Học sinh có sách và mã kích hoạt còn hiệu lực |
| Hậu điều kiện |
Tài khoản có quyền sử dụng (entitlement) học liệu số của sách; mã chuyển trạng thái đã dùng |
| Kích hoạt |
Học sinh quét QR kích hoạt trên sách, hoặc chọn "Kích hoạt sách" trong ứng dụng |
Luồng chính
- Học sinh quét QR kích hoạt → hệ thống mở trang kích hoạt với mã được điền sẵn.
- Nếu chưa đăng nhập, hệ thống yêu cầu đăng nhập/đăng ký và giữ lại mã.
- Hệ thống kiểm tra mã: tồn tại, chưa dùng, chưa bị thu hồi, còn hiệu lực.
- Hệ thống hiển thị thông tin sách (môn, tên sách, năm) để học sinh xác nhận.
- Học sinh xác nhận → hệ thống tạo quyền sử dụng, ghi sự kiện
book_activated.
- Hệ thống hiển thị "Kích hoạt thành công" và hướng dẫn cách dùng ID trên sách.
Luồng thay thế / ngoại lệ
- 1a. Nhập mã thủ công: học sinh gõ mã vào ô "Kích hoạt sách" → tiếp bước 3.
- 3a. Mã không tồn tại → thông báo lỗi, gợi ý kiểm tra lại các ký tự dễ nhầm; tăng bộ đếm sai.
- 3b. Mã đã được chính tài khoản này dùng → thông báo "Sách đã được kích hoạt", chuyển tới sách.
- 3c. Mã đã được tài khoản khác dùng → thông báo, hướng dẫn liên hệ hỗ trợ (kèm mã tham chiếu).
- 3d. Sai quá 5 lần trong 10 phút → yêu cầu captcha / tạm khoá 15 phút (BR-02).
#UC-02 – Mở tài nguyên bằng ID / QR
| Mục |
Nội dung |
| Tác nhân |
Học sinh, Khách |
| Nguồn |
YC02, [MT] cột "Liên kết giấy – số", [UF] các bước "Nhập ID" |
| Tiền điều kiện |
ID được in trên sách và đã được xuất bản trên hệ thống |
| Hậu điều kiện |
Học sinh đang xem đúng tài nguyên; sự kiện code_resolved được ghi |
Luồng chính
- Học sinh nhập ID vào ô "Nhập ID" (có trên trang chủ và thanh đầu trang) hoặc quét QR nội dung.
- Hệ thống chuẩn hoá ID (bỏ khoảng trắng, chuyển chữ hoa, đổi ký tự dễ nhầm theo BR-05).
- Hệ thống tra ID trong phạm vi các sách học sinh đã kích hoạt (BR-06) → xác định tài nguyên và loại.
- Hệ thống kiểm tra quyền sử dụng → mở trang tương ứng theo loại:
THEORY → trang lý thuyết; EXAMPLE → trang ví dụ;
EXERCISE_SET, MOCK_EXAM, PRACTICE_EXAM, PLACEMENT_TEST → trang giới thiệu bài làm (chọn Làm trên máy hoặc Tra đáp án).
Luồng thay thế / ngoại lệ
- 3a. Không tìm thấy ID → thông báo, gợi ý ID gần đúng (cùng tiền tố), hình minh hoạ vị trí ID trên sách.
- 3b. ID thuộc sách chưa kích hoạt → hiển thị thông tin sách + nút "Kích hoạt sách"; nếu ID thuộc danh sách xem thử thì cho xem.
- 3c. ID đã ngừng sử dụng (
RETIRED) → chuyển hướng tới tài nguyên thay thế nếu có.
- 4a. Chưa đăng nhập → đăng nhập rồi quay lại đúng tài nguyên (giữ nguyên deep link).
#UC-04 – Làm bài trên máy
| Mục |
Nội dung |
| Tác nhân |
Học sinh |
| Nguồn |
YC04, [MT] các phần bài tập/đề, N5, N6 |
| Tiền điều kiện |
Học sinh có quyền sử dụng bài làm |
| Hậu điều kiện |
Lượt làm bài được nộp, được chấm (câu khách quan), kết quả lưu vào lịch sử |
Luồng chính
- Tại trang giới thiệu bài làm, hệ thống hiển thị: tên bài, số câu, thời gian, cấu trúc phần, số lượt đã làm.
- Học sinh chọn chế độ hiển thị (nếu bài cho phép): Giao diện đề thi hoặc Phiếu trả lời; chọn Tính giờ hoặc Luyện tập tự do (với bài tập).
- Học sinh bấm "Bắt đầu" → hệ thống tạo lượt làm bài, bắt đầu tính giờ phía máy chủ.
- Học sinh trả lời; hệ thống tự lưu sau mỗi thay đổi (tối đa 5 giây trễ) và hiển thị trạng thái "Đã lưu".
- Học sinh có thể đánh dấu câu để xem lại, chuyển câu qua bảng điều hướng.
- Học sinh bấm "Nộp bài" → hệ thống cảnh báo số câu chưa làm → học sinh xác nhận.
- Hệ thống chấm câu khách quan (BR-08…BR-12), lưu kết quả, chuyển tới UC-05.
Luồng thay thế / ngoại lệ
- 2a. Placement test: luôn ở chế độ Một câu/màn hình, không quay lại câu trước (Q19), ghi thời gian từng câu.
- 4a. Mất kết nối → câu trả lời lưu tạm trên thiết bị, đồng bộ khi có mạng; cảnh báo "Đang ngoại tuyến".
- 4b. Đóng trình duyệt giữa chừng → khi mở lại bài, hệ thống đề nghị "Tiếp tục lượt đang làm".
- 4c. Hết giờ → hệ thống tự nộp phần đã làm (BR-14).
- 4d. Bài có câu tự luận → ô soạn văn bản có đếm từ; tuỳ chọn tải ảnh bài viết tay (P1).
#UC-05 – Xem kết quả và lời giải
Luồng chính: Sau khi nộp → hiển thị điểm (thang 10 với đề; số câu đúng/tổng với bài tập), điểm theo phần, thời gian làm bài → danh sách câu với trạng thái đúng/sai/bỏ trống → mở từng câu xem đáp án đúng, đáp án đã chọn, lời giải text, video (nếu có) → khối "Đề xuất củng cố" (UC-07) → nút "Làm lại", "Quay lại học tiếp trên sách".
Ngoại lệ: Bài tự luận → hiển thị bài làm cạnh hướng dẫn giải và rubric, mời tự chấm (UC-06).
#UC-06 – Tự chấm bài tự luận
Học sinh mở từng câu tự luận → xem hướng dẫn chấm theo tiêu chí → chọn mức đạt cho từng tiêu chí → hệ thống cộng điểm, gắn nhãn "Tự đánh giá" → lưu và dùng cho đề xuất kỹ năng (BR-13). Học sinh có thể bỏ qua tự chấm.
#UC-07 – Nhận đề xuất củng cố
Hệ thống tính tỷ lệ sai theo chuyên đề/kỹ năng/dạng bài của lượt vừa nộp (BR-16, BR-17) → hiển thị tối đa 5 mục, mỗi mục có liên kết: Lý thuyết · Ví dụ · Bài tập thực hành cùng chuyên đề, kèm ID trên sách để học sinh mở sách giấy → ghi sự kiện recommendation_shown, recommendation_clicked.
#UC-16 – Tra đáp án khi làm trên giấy
Tại trang giới thiệu bài làm, học sinh chọn "Tôi đã làm trên giấy – xem đáp án" → hệ thống hiển thị bảng đáp án và lời giải từng câu. Tuỳ chọn: học sinh nhập nhanh đáp án đã làm trên giấy vào Phiếu trả lời để được chấm và nhận đề xuất (khuyến khích bằng thông điệp "Nhập đáp án để biết chuyên đề cần ôn").
#Các use case còn lại (tóm tắt)
| UC |
Tên |
Tác nhân |
Mô tả ngắn |
FR |
| UC-03 |
Học lý thuyết, ví dụ, video |
HS |
Xem nội dung text (có công thức, hình), phát video, chuyển sang tài nguyên liên quan cùng chuyên đề |
FR-03.x |
| UC-08 |
Xem lịch sử và tiến bộ |
HS |
Danh sách lượt làm, xem lại chi tiết, biểu đồ điểm theo môn |
FR-07.x |
| UC-09 |
Mua gói đề mở rộng |
HS |
Xem gói → đặt mua → thanh toán → nhận quyền truy cập |
FR-08.x |
| UC-10 |
Giao bài cho lớp |
GV |
Chọn lớp (đồng bộ từ LMS), chọn đề, đặt thời hạn → học sinh nhận bài |
FR-09.01–03 |
| UC-11 |
Xem báo cáo lớp |
GV |
Tiến độ nộp, phổ điểm, điểm từng học sinh, câu/chủ đề sai nhiều |
FR-09.04–07 |
| UC-12 |
Quản lý nội dung, câu hỏi, video |
BTV |
Cây nội dung sách, ngân hàng câu hỏi, import, soạn đề, video, duyệt |
FR-10.01–04, 07, 08, 10, 11 |
| UC-13 |
Quản lý ID và mã kích hoạt |
BTV, Admin |
Sinh ID, khoá ID khi in, xuất ID + QR; sinh lô mã kích hoạt, xuất cho nhà in, thu hồi |
FR-10.05, 10.09 |
| UC-14 |
Thiết lập ma trận kiến thức |
BTV |
Định nghĩa chuyên đề, kỹ năng, dạng bài, mức độ; gắn tag câu hỏi; cấu hình ngưỡng đề xuất |
FR-10.06, 10.12 |
| UC-15 |
Xem báo cáo hành vi |
Admin |
Dashboard kích hoạt, sử dụng, hiệu quả học liệu, mua; xuất báo cáo |
FR-11.x |
| UC-17 |
Duyệt thư viện học liệu |
HS |
Duyệt theo sách → phần → chuyên đề → loại; trạng thái đã học |
FR-03.04–05 |
#4. Yêu cầu chức năng (Functional Requirements)
Ký hiệu nguồn: YCxx = user story gốc; MT = mô tả tổng quát; UF = user flow; Nx = yêu cầu ngầm định (02 §4.2).
#EP01 – Tài khoản & kích hoạt sách
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-01.01 |
Hệ thống cho phép đăng ký/đăng nhập bằng tài khoản Hoclieu (SSO) hoặc SĐT/email + mật khẩu/OTP (theo Q02) |
N1 |
P0 |
| FR-01.02 |
Quét QR kích hoạt mở trang kích hoạt với mã điền sẵn; giữ mã qua bước đăng nhập |
YC01 |
P0 |
| FR-01.03 |
Cho phép nhập mã kích hoạt thủ công; không phân biệt hoa/thường, bỏ qua dấu gạch, khoảng trắng |
YC01 |
P0 |
| FR-01.04 |
Xác thực mã và tạo quyền sử dụng sách cho tài khoản; hiển thị thông tin sách trước khi xác nhận |
YC01 |
P0 |
| FR-01.05 |
Trang "Sách của tôi" liệt kê các sách đã kích hoạt, thời hạn, lối tắt nhập ID |
YC01, YC03 |
P0 |
| FR-01.06 |
Chống dò mã: giới hạn số lần thử, captcha, khoá tạm thời; ghi nhật ký thử sai |
BR-02 |
P0 |
| FR-01.07 |
Hồ sơ cá nhân: họ tên, lớp, trường, tỉnh/thành, vai trò; chấp nhận điều khoản và chính sách dữ liệu |
N12 |
P0 (đồng ý), P1 (hồ sơ) |
| FR-01.08 |
Quên mật khẩu, đăng xuất khỏi mọi thiết bị |
N1 |
P0 |
#EP02 – Liên kết giấy – số (ID / QR)
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-02.01 |
Ô nhập ID hiển thị nổi bật ở trang chủ và thanh đầu trang mọi màn hình học sinh; bàn phím mobile mặc định chữ hoa |
YC02 |
P0 |
| FR-02.02 |
Chuẩn hoá ID trước khi tra cứu (BR-05) |
YC02 |
P0 |
| FR-02.03 |
Tra cứu ID và điều hướng tới trang theo loại tài nguyên (UC-02) trong ≤ 1 giây |
YC02, MT |
P0 |
| FR-02.04 |
QR nội dung là đường dẫn /{phiên bản sách}/{ID}, mở thẳng tài nguyên; hoạt động trong trình duyệt của Zalo/Facebook |
YC02 (ghi chú), ADR-002 |
P0 |
| FR-02.05 |
Xử lý chưa đăng nhập / chưa kích hoạt / ID xem thử theo UC-02 luồng 3b, 4a |
Q04 |
P0 |
| FR-02.06 |
ID không tồn tại: thông báo, gợi ý ID gần đúng, hình hướng dẫn vị trí ID |
UF |
P1 |
| FR-02.07 |
Danh sách ID đã mở gần đây (tối đa 10) |
– |
P2 |
| FR-02.08 |
Trên mỗi tài nguyên có điều hướng ngữ cảnh: lý thuyết ↔ ví dụ ↔ bài tập cùng chuyên đề, kèm số trang/ID trên sách giấy |
UF (F5) |
P1 |
#EP03 – Học liệu số & thư viện
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-03.01 |
Trang lý thuyết: nội dung rich text (công thức toán LaTeX, hình, bảng) và/hoặc video theo cấu hình từng môn |
MT P1.1/1.2, TA P2 |
P0 |
| FR-03.02 |
Trang ví dụ: đề ví dụ, đáp án, phân tích, bình luận (text) và video hướng dẫn |
MT P1.2/1.3 |
P0 |
| FR-03.03 |
Trình phát video: phát thích ứng băng thông, tua, đổi tốc độ 0,75–2×, toàn màn hình, liên kết phát có thời hạn |
MT, N8 |
P0 |
| FR-03.04 |
Ghi nhớ vị trí xem video và tiếp tục xem |
– |
P1 |
| FR-03.05 |
Thư viện học liệu: duyệt theo sách → phần → chuyên đề → loại tài nguyên; tìm theo tên/ID |
YC03 |
P2 |
| FR-03.06 |
Đánh dấu trạng thái: đã xem, đã làm, điểm gần nhất trên thư viện |
YC03 |
P2 |
| FR-03.07 |
Báo lỗi nội dung từ học sinh (sai đáp án, video lỗi) gửi về CMS |
R05 |
P1 |
#EP04 – Làm bài trực tuyến
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-04.01 |
Hỗ trợ loại câu: (a) trắc nghiệm 1 đáp án; (b) đúng/sai nhiều ý; (c) trả lời ngắn; (d) tự luận; (e) nhóm câu dùng chung ngữ liệu (bài đọc) |
YC04, A3 |
P0 |
| FR-04.02 |
Chế độ Giao diện đề thi |
YC04 |
P0 |
| FR-04.03 |
Chế độ Phiếu trả lời: lưới số câu theo phần, ô chọn A/B/C/D, Đ/S, ô số cho trả lời ngắn |
YC04 (ghi chú), ADR-006 |
P0 |
| FR-04.04 |
Chế độ Một câu/màn hình có ghi thời gian từng câu (ms) |
MT TA P1 |
P0 |
| FR-04.05 |
Đồng hồ đếm ngược theo thời lượng đề do BTV cấu hình; giờ tính phía máy chủ; chế độ luyện tập không tính giờ cho bài tập |
YC04 |
P0 |
| FR-04.06 |
Tự lưu câu trả lời, khôi phục lượt đang làm trên cùng hoặc khác thiết bị; hoạt động khi mất mạng tạm thời |
N6 |
P0 |
| FR-04.07 |
Bảng điều hướng câu: đã làm / chưa làm / đánh dấu xem lại |
YC04 |
P0 |
| FR-04.08 |
Nộp bài có xác nhận và cảnh báo câu bỏ trống |
YC04 |
P0 |
| FR-04.09 |
Làm lại không giới hạn số lần; mỗi lần là một lượt mới (BR-15) |
YC04 |
P0 |
| FR-04.10 |
Hiển thị đúng công thức toán, hình, bảng, phiên âm/ký tự tiếng Anh trên mobile |
N7 |
P0 |
| FR-04.11 |
Câu tự luận: ô soạn thảo đơn giản có đếm từ; tải lên tối đa 5 ảnh bài viết tay |
YC04 |
P0 (soạn thảo), P1 (ảnh) |
#EP05 – Kết quả, đáp án & lời giải
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-05.01 |
Chấm tự động câu khách quan ngay khi nộp theo BR-08…BR-12; hiển thị điểm thang 10 (đề) hoặc số câu đúng (bài tập) |
YC05 |
P0 |
| FR-05.02 |
Danh sách câu với trạng thái đúng/sai/bỏ trống; lọc "chỉ câu sai" |
YC05 |
P0 |
| FR-05.03 |
Từng câu: đáp án đúng, đáp án đã chọn, lời giải text, video (nếu có) |
YC05, MT |
P0 |
| FR-05.04 |
Câu tự luận: hiển thị bài làm cạnh hướng dẫn giải và rubric |
YC06 |
P0 |
| FR-05.05 |
Tự chấm theo rubric, tổng hợp điểm tự đánh giá (BR-13) |
YC06, Q09 |
P1 |
| FR-05.06 |
Chế độ tra đáp án (UC-16) |
N4 |
P0 |
| FR-05.07 |
Thống kê sau bài: điểm theo phần, theo chuyên đề, thời gian làm từng phần |
YC05 |
P1 |
#EP06 – Đề xuất kiến thức cần củng cố
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-06.01 |
Tính tỷ lệ sai theo tag (chuyên đề/kỹ năng/dạng bài) cho mỗi lượt đã nộp |
YC07 |
P1 |
| FR-06.02 |
Hiển thị danh sách chuyên đề cần củng cố (BR-16) với liên kết lý thuyết, ví dụ, bài tập và ID trên sách |
YC07, MT |
P1 |
| FR-06.03 |
Placement test Tiếng Anh: đề xuất chuyên đề dựa trên câu sai và câu đúng nhưng chậm (BR-17) |
MT TA P1 |
P0 (bản đơn giản – chỉ câu sai), P1 (thêm thời gian) |
| FR-06.04 |
Ngữ văn: đề xuất kỹ năng dựa trên điểm tự chấm theo tiêu chí |
MT Văn |
P1 |
| FR-06.05 |
Tổng hợp điểm yếu qua nhiều lượt (trang "Điểm yếu của tôi") |
YC07 |
P2 |
#EP07 – Lịch sử & tiến bộ
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-07.01 |
Lịch sử lượt làm: tên bài, môn, loại, ngày, điểm, thời gian; lọc theo môn/loại; phân trang |
YC08 |
P1 |
| FR-07.02 |
Xem lại chi tiết một lượt đã nộp (chỉ đọc) |
YC08 |
P1 |
| FR-07.03 |
Biểu đồ đường điểm theo thời gian, theo môn, cho đề thi thử/đề luyện tập; điểm tự đánh giá hiển thị khác kiểu |
YC09 |
P1 |
| FR-07.04 |
So sánh lượt gần nhất với trung bình các lượt trước và trung bình toàn hệ thống |
YC09 |
P2 |
#EP08 – Gói đề mở rộng & thanh toán
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-08.01 |
Trang gói đề mở rộng theo môn: số đề, giá, thời hạn, đề mẫu |
YC10, MT P3 |
P3 |
| FR-08.02 |
Đặt mua và thanh toán trực tuyến qua cổng thanh toán (QR ngân hàng, ví điện tử, thẻ) |
YC10 |
P3 |
| FR-08.03 |
Cấp quyền sử dụng gói ngay khi nhận xác nhận thanh toán thành công (IPN), xử lý trùng lặp an toàn |
YC10 |
P3 |
| FR-08.04 |
Lịch sử giao dịch; xuất hoá đơn điện tử nếu chính sách yêu cầu |
YC10, Q11 |
P3 |
| FR-08.05 |
Gợi ý gói đề mở rộng khi học sinh đã làm hết đề trong sách của môn |
MT |
P3 |
| FR-08.06 |
Admin quản lý gói: tạo, định giá, gán đề, bật/tắt bán |
YC10 |
P3 |
#EP09 – Giáo viên & LMS Hoclieu
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-09.01 |
Đồng bộ lớp và danh sách học sinh từ LMS Hoclieu (hoặc tạo lớp + mã mời nếu LMS chưa có API) |
YC11, Q12 |
P1 |
| FR-09.02 |
Giáo viên chọn đề/bài tập từ sách, giao cho lớp với thời điểm mở, hạn nộp, chế độ làm bài |
YC11 |
P1 |
| FR-09.03 |
Học sinh nhận thông báo bài được giao; lượt làm gắn với bài giao |
YC11 |
P1 |
| FR-09.04 |
Báo cáo tiến độ: đã nộp, chưa nộp, nộp trễ; nhắc học sinh chưa nộp |
YC12 |
P1 |
| FR-09.05 |
Phổ điểm của lớp và bảng điểm từng học sinh; xem bài làm của từng học sinh |
YC12 |
P1 |
| FR-09.06 |
Thống kê câu hỏi và chuyên đề có tỷ lệ sai cao nhất của lớp; giao nhanh bài tập củng cố cho chuyên đề đó |
YC13 |
P2 |
| FR-09.07 |
Xuất báo cáo lớp ra Excel |
YC12 |
P2 |
#EP10 – CMS quản trị nội dung
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-10.01 |
Quản lý cây nội dung: Sách (môn, năm, phiên bản) → Phần → Chuyên đề/Kỹ năng → Tài nguyên |
YC14 |
P0 |
| FR-10.02 |
Ngân hàng câu hỏi: tạo/sửa 5 loại câu (FR-04.01), soạn công thức LaTeX, chèn hình, lời giải, video, rubric |
YC14 |
P0 |
| FR-10.03 |
Import hàng loạt câu hỏi và lời giải từ file Word/Excel theo mẫu; báo cáo lỗi từng dòng; xem trước trước khi lưu |
YC14, R01 |
P0 |
| FR-10.04 |
Quản lý video: tải lên hoặc liên kết, chuyển mã, ảnh đại diện, thời lượng, trạng thái xử lý |
YC14 |
P0 |
| FR-10.05 |
Sinh ID theo quy tắc (BR-04), gán cho tài nguyên, khoá ID khi chốt in, xuất danh sách ID + ảnh QR (SVG/PNG) + trang sách |
N3 |
P0 |
| FR-10.06 |
Ma trận kiến thức: định nghĩa chuyên đề, kỹ năng, dạng bài, mức độ nhận thức (Nhận biết/Thông hiểu/Vận dụng/Vận dụng cao); gắn nhiều tag cho câu hỏi |
YC14 |
P0 |
| FR-10.07 |
Soạn bài làm: chọn câu, chia phần, thời lượng, thang điểm, chế độ hiển thị cho phép |
YC14 |
P0 |
| FR-10.08 |
Quy trình duyệt: Nháp → Chờ duyệt → Đã xuất bản; lịch sử phiên bản, so sánh thay đổi |
N9 |
P1 |
| FR-10.09 |
Lô mã kích hoạt: sinh lô theo sách và số lượng, xuất file cho nhà in, tra cứu trạng thái, thu hồi, gỡ gán (hỗ trợ) |
N2 |
P0 |
| FR-10.10 |
Rubric chấm tự luận: tiêu chí, mức, điểm tối đa, mô tả |
YC06 |
P0 |
| FR-10.11 |
Xem trước tài nguyên/bài làm như học sinh trên khung mobile |
– |
P1 |
| FR-10.12 |
Cấu hình quy tắc đề xuất: ngưỡng tỷ lệ sai, số câu tối thiểu, số mục tối đa, ngưỡng thời gian |
YC14, Q17 |
P1 |
| FR-10.13 |
Phân quyền: BTV theo môn, Trưởng ban, Admin; nhật ký thao tác |
– |
P0 |
| FR-10.14 |
Kiểm tra liên kết: báo cáo mọi ID đã khoá đều trỏ tới tài nguyên đã xuất bản, đủ nội dung (có đáp án, có lời giải, video sẵn sàng) |
N11 |
P0 |
#EP11 – Phân tích hành vi & báo cáo quản trị
| ID |
Yêu cầu |
Nguồn |
Ưu tiên |
| FR-11.01 |
Ghi nhận sự kiện hành vi theo danh mục chuẩn (09 §4) |
YC15 |
P0 |
| FR-11.02 |
Dashboard tổng quan: số kích hoạt theo sách/ngày/tỉnh; người dùng hoạt động ngày/tuần/tháng; tần suất sử dụng |
YC15 |
P1 |
| FR-11.03 |
Báo cáo hiệu quả học liệu: lượt mở theo ID, tỷ lệ xem hết video, tỷ lệ hoàn thành bài, điểm trung bình, câu sai nhiều |
YC15 |
P1 |
| FR-11.04 |
Báo cáo hành vi mua: phễu xem gói → đặt → thanh toán, doanh thu theo gói/thời gian |
YC15 |
P3 |
| FR-11.05 |
Lọc theo khoảng thời gian, môn, sách; xuất CSV/Excel |
YC15 |
P1 |
| FR-11.06 |
Hỗ trợ người dùng: tra cứu tài khoản, sách đã kích hoạt, khoá/mở tài khoản |
N10 |
P1 |
#5. Quy tắc nghiệp vụ (Business Rules)
| ID |
Quy tắc |
Trạng thái |
| BR-01 |
Mỗi mã kích hoạt gắn với đúng một sách (môn + phiên bản). Mỗi mã kích hoạt cho một tài khoản; quyền sử dụng có hiệu lực đến hết thời hạn cấu hình của sách |
Đề xuất – chờ Q03 |
| BR-02 |
Mã kích hoạt dài ≥ 10 ký tự ngẫu nhiên từ bảng 31 ký tự không dễ nhầm (bỏ 0, O, 1, I, L). Sai 5 lần/10 phút → captcha; sai 10 lần/giờ → khoá chức năng kích hoạt 15 phút |
Đề xuất |
| BR-03 |
Học liệu số của sách chỉ truy cập được khi tài khoản có quyền sử dụng sách đó, trừ các ID được đánh dấu xem thử |
Đề xuất – chờ Q04 |
| BR-04 |
Quy tắc ID: xem 06 §3. ID đã khoá (đã in) không được xoá, đổi hay tái sử dụng; chỉ được đổi tài nguyên đích (có lưu vết) |
Đề xuất – ADR-002 |
| BR-05 |
Chuẩn hoá ID khi nhập: bỏ khoảng trắng và dấu gạch, chuyển chữ hoa; ký tự O → 0, I/L → 1 ở vị trí số |
Đề xuất |
| BR-06 |
Một ID có thể tồn tại ở nhiều phiên bản sách. Tra cứu ưu tiên phiên bản sách học sinh đã kích hoạt; nếu nhiều hơn một → lấy phiên bản mới nhất và cho đổi |
Đề xuất |
| BR-07 |
Lời giải trong chế độ làm bài chỉ hiển thị sau khi nộp; chế độ tra đáp án hiển thị ngay |
Đề xuất |
| BR-08 |
Toán – trắc nghiệm nhiều lựa chọn: đúng 0,25 điểm/câu |
Theo định dạng thi 2025 – BTV xác nhận |
| BR-09 |
Toán – đúng/sai: mỗi câu 4 ý; đúng 1 ý: 0,1 điểm; 2 ý: 0,25; 3 ý: 0,5; 4 ý: 1,0 |
Theo định dạng thi 2025 – BTV xác nhận |
| BR-10 |
Toán – trả lời ngắn: đúng 0,5 điểm/câu; so khớp sau chuẩn hoá (dấu thập phân ,/., dấu -, khoảng trắng); BTV có thể khai báo nhiều đáp án chấp nhận |
Theo định dạng thi 2025 – BTV xác nhận |
| BR-11 |
Tiếng Anh: 40 câu × 0,25 điểm |
Theo định dạng thi 2025 – BTV xác nhận |
| BR-12 |
Bài tập thực hành và placement test: hiển thị số câu đúng/tổng số câu và tỷ lệ %; không quy đổi thang 10 trừ khi BTV cấu hình |
Đề xuất |
| BR-13 |
Ngữ văn: không chấm tự động. Học sinh tự chấm theo rubric (cấu trúc đề tham khảo: Đọc hiểu 4 điểm, Viết 6 điểm). Điểm tự chấm luôn gắn nhãn "Tự đánh giá", không đưa vào thống kê so sánh toàn hệ thống |
Đề xuất – chờ Q09 |
| BR-14 |
Hết giờ: hệ thống tự nộp; thời gian tính theo máy chủ, cho phép lệch tối đa 30 giây do mạng |
Đề xuất |
| BR-15 |
Mỗi lần "Bắt đầu" tạo lượt mới; chỉ lượt đã nộp được tính vào lịch sử, biểu đồ, đề xuất. Mỗi học sinh có tối đa 1 lượt đang làm dở cho mỗi bài |
Đề xuất |
| BR-16 |
Đề xuất củng cố: một chuyên đề được đề xuất khi có ≥ 2 câu thuộc chuyên đề trong lượt và tỷ lệ sai ≥ 50%; sắp xếp theo (số câu sai × trọng số điểm) giảm dần; hiển thị tối đa 5. Các tham số cấu hình được |
Đề xuất – chờ Q17 |
| BR-17 |
Placement test Tiếng Anh: câu đúng nhưng thời gian trả lời > 2 × trung vị thời gian của câu đó (hoặc > ngưỡng BTV đặt khi chưa đủ dữ liệu) được tính là "chưa vững" với trọng số 0,5 câu sai |
Đề xuất |
| BR-18 |
Bài giao bởi giáo viên: lượt nộp đầu tiên trước hạn được tính vào báo cáo lớp; lượt sau hạn được đánh dấu "trễ" |
Đề xuất |
| BR-19 |
Gói đề mở rộng: quyền truy cập theo thời hạn của gói; không hoàn tiền sau khi đã mở đề đầu tiên |
Chờ Q11 |
| BR-20 |
Nội dung chỉ hiển thị cho học sinh khi ở trạng thái Đã xuất bản; sửa nội dung đã xuất bản tạo phiên bản mới, lượt làm cũ giữ nguyên phiên bản cũ để xem lại |
Đề xuất |
Chi tiết thuật toán chấm và đề xuất: 09.
#6. Yêu cầu phi chức năng (NFR)
| ID |
Nhóm |
Yêu cầu |
Cách kiểm chứng |
| NFR-PERF-01 |
Hiệu năng |
Tra cứu ID: p95 ≤ 300 ms phía máy chủ; trang tài nguyên hiển thị nội dung đầu tiên ≤ 2,5 s trên 4G |
k6, Lighthouse (mobile) |
| NFR-PERF-02 |
Hiệu năng |
Nộp bài và trả kết quả: p95 ≤ 2 s; tự lưu: p95 ≤ 500 ms |
k6 |
| NFR-PERF-03 |
Hiệu năng |
Video bắt đầu phát ≤ 3 s trên 4G; tự động chọn chất lượng 360p–1080p |
Đo thực tế trên thiết bị mẫu |
| NFR-SCAL-01 |
Mở rộng |
Phục vụ 5.000 người dùng đồng thời (giả định, chờ Q08) và mở rộng ngang gấp 3 vào mùa thi mà không đổi kiến trúc |
Kiểm thử tải |
| NFR-AVAIL-01 |
Sẵn sàng |
≥ 99,5 %/tháng; bảo trì có kế hoạch ngoài khung 19h–23h |
Giám sát uptime |
| NFR-REC-01 |
Phục hồi |
RPO ≤ 1 giờ, RTO ≤ 4 giờ; sao lưu hằng ngày giữ 30 ngày; diễn tập khôi phục mỗi quý |
Biên bản diễn tập |
| NFR-USAB-01 |
Khả dụng |
Giao diện tối ưu từ chiều rộng 360 px; từ trang chủ đến tài nguyên ≤ 3 thao tác; vùng chạm ≥ 44 px |
Kiểm thử khả dụng với 5–8 học sinh |
| NFR-USAB-02 |
Khả dụng |
Hỗ trợ Chrome, Safari, Edge, Firefox (2 phiên bản gần nhất); iOS 15+, Android 9+; trình duyệt trong Zalo, Facebook |
Ma trận thiết bị (10) |
| NFR-A11Y-01 |
Tiếp cận |
Đạt các tiêu chí WCAG 2.1 mức AA về tương phản, cỡ chữ, nhãn trường nhập, điều khiển bằng bàn phím |
axe, kiểm tra thủ công |
| NFR-SEC-01 |
Bảo mật |
HTTPS toàn bộ; mật khẩu băm Argon2/bcrypt; phiên đăng nhập có hạn; đáp ứng OWASP ASVS mức 2 với các chức năng xác thực, phân quyền |
Pentest trước M3 |
| NFR-SEC-02 |
Bảo mật |
API không bao giờ trả đáp án/lời giải trước khi nộp (trừ chế độ tra đáp án có quyền) |
Kiểm thử API |
| NFR-SEC-03 |
Bảo vệ nội dung |
Video phát qua URL ký số có hạn ≤ 4 giờ, chặn hotlink; watermark mờ mã tài khoản (P1) |
Kiểm thử thủ công |
| NFR-SEC-04 |
Bảo mật |
Phân quyền theo vai trò ở tầng API; CMS bắt buộc 2FA cho Trưởng ban, Admin |
Kiểm thử phân quyền |
| NFR-PRIV-01 |
Dữ liệu cá nhân |
Thu thập tối thiểu; có chính sách quyền riêng tư và ghi nhận đồng ý; cho phép xem/xoá dữ liệu tài khoản; tuân thủ quy định bảo vệ dữ liệu cá nhân hiện hành |
Rà soát pháp lý |
| NFR-COMP-01 |
Tương thích nội dung |
Hiển thị công thức LaTeX (KaTeX/MathJax), font tiếng Việt đầy đủ dấu, ký hiệu phiên âm IPA |
Bộ nội dung mẫu |
| NFR-OBS-01 |
Quan sát |
Log tập trung, theo dõi lỗi phía trình duyệt, cảnh báo khi tỷ lệ lỗi > 1 % hoặc p95 vượt ngưỡng |
Dashboard giám sát |
| NFR-MAINT-01 |
Bảo trì |
CI/CD; độ phủ kiểm thử đơn vị ≥ 80 % cho mô-đun chấm điểm và đề xuất; tài liệu API sinh tự động (OpenAPI) |
Báo cáo CI |
| NFR-DATA-01 |
Dữ liệu |
Lưu dữ liệu sự kiện ≥ 24 tháng; dữ liệu lượt làm bài lưu suốt thời gian tài khoản tồn tại |
Cấu hình lưu trữ |
| NFR-L10N-01 |
Ngôn ngữ |
Giao diện tiếng Việt; nội dung Tiếng Anh hiển thị đúng; định dạng ngày dd/mm/yyyy, múi giờ GMT+7 |
Kiểm thử |
#7. Yêu cầu giao tiếp ngoài
| Hệ thống |
Mục đích |
Giao thức |
Ghi chú |
| Hoclieu.vn – Tài khoản |
Đăng nhập một lần |
OAuth 2.0 / OIDC (cần xác nhận) |
Q02 |
| Hoclieu.vn – LMS |
Lớp học, danh sách học sinh, giao bài, trả điểm |
REST API (cần xác nhận) |
Q12 |
| Cổng thanh toán |
Thanh toán gói đề |
Redirect + IPN có chữ ký |
Q11 |
| Dịch vụ video |
Chuyển mã, lưu trữ, phát HLS |
API + URL ký số |
Q13 |
| SMS/Email/Zalo ZNS |
OTP, thông báo bài giao |
API nhà cung cấp |
– |
| Nhà in / dàn trang |
Nhận danh sách ID, QR, mã kích hoạt |
File CSV/Excel + SVG/PNG |
Bàn giao thủ công có biên bản |