Giới thiệu dự án
Chuyển đổi số trong giáo dục (EdTech) đang là xu hướng tất yếu trên toàn cầu với tốc độ tăng trưởng kép hàng năm (CAGR) đạt 16.5% giai đoạn 2022–2030. Tại Việt Nam, nhu cầu ứng dụng công nghệ thông tin vào công tác khảo thí và đánh giá năng lực học sinh, sinh viên ngày càng trở nên cấp thiết nhằm tối ưu hóa nguồn lực, nâng cao tính minh bạch và độ chính xác trong kiểm tra.
Đề tài "Xây dựng Website kiểm tra trắc nghiệm" được thực hiện bởi nhóm sinh viên Lê Trần Minh Nhựt (MSSV: 19110257) và Nguyễn Thị Xuân Thanh (MSSV: 19110285), dưới sự hướng dẫn của ThS. Nguyễn Minh Đạo tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE - Khoa Đào tạo Chất lượng cao, Khóa 2019, nghiệm thu tháng 07/2024).
+-----------------------------------------------------+
| HỆ THỐNG KIỂM TRA TRẮC NGHIỆM |
| (Trường ĐH Sư phạm Kỹ thuật TP. Hồ Chí Minh) |
+-----------------------------------------------------+
|
+------------------+---------------+------------------+------------------+
| | | |
+------------------+ +------------------+ +------------------+ +------------------+
| ADMINISTRATOR | | TEACHER | | STUDENT | | GUEST |
| - Quản lý User | | - Tạo lớp & Đề | | - Vào lớp học | | - Đăng ký |
| - Duyệt câu hỏi | | - Ngân hàng đề | | - Làm bài thi | | - Đăng nhập |
| - Quản lý Môn | | - Duyệt học sinh | | - Xem điểm & Log | | - Quên mật khẩu |
+------------------+ +------------------+ +------------------+ +------------------+
Vấn đề thực tiễn (Problem Statement)
Phương thức kiểm tra truyền thống trên giấy bộc lộ nhiều điểm nghẽn nghiêm trọng (pain points):
- Chi phí in ấn và nhân lực cao: Tốn kém tài nguyên giấy tờ, thời gian sắp xếp phòng thi và coi thi thủ công.
- Tốc độ chấm điểm chậm và sai số: Chấm thi thủ công dễ phát sinh nhầm lẫn, mất từ 3 đến 7 ngày để công bố kết quả cho các kỳ thi quy mô lớn (>500 thí sinh).
- Rủi ro lộ đề và thiếu linh hoạt: Khó khăn trong việc xáo trộn đề thi, quản lý ngân hàng câu hỏi dùng chung giữa các giảng viên.
- Hạn chế của các hệ thống hiện hành: Một số nền tảng nội bộ gặp hiện tượng nghẽn mạng, tự động thoát phiên đăng nhập khi tải cao; các nền tảng thương mại quốc tế lại thiếu tính phân quyền sâu theo mô hình lớp học chuẩn của Bộ GD&ĐT Việt Nam.
Mục tiêu của dự án (Project Objectives)
- Thiết kế và chuẩn hóa hệ thống phân quyền 4 cấp độ: Phân tách rạch ròi các vai trò Administrator (Quản trị viên), Teacher (Giảng viên), Student (Sinh viên), và Guest (Khách vãng lai).
- Xây dựng module quản lý lớp học và ngân hàng đề thi: Hỗ trợ tạo lớp học trực tuyến, phê duyệt học sinh qua đơn xin gia nhập hoặc thêm trực tiếp qua email, quản lý môn học (
majors) và kho câu hỏi mẫu (questions).
- Phát triển engine làm bài thi và chấm điểm tự động: Cho phép cấu hình bài kiểm tra công khai/nội bộ, giới hạn thời gian làm bài, tự động xáo trộn và chấm điểm ngay khi nộp bài với độ trễ dưới 500ms.
- Tối ưu hóa kiến trúc và triển khai: Sử dụng ngôn ngữ TypeScript, framework Laravel/Node.js, hệ quản trị cơ sở dữ liệu MySQL và môi trường đóng gói container Docker nhằm đảm bảo tính sẵn sàng cao.
Phạm vi và giới hạn (Scope & Limitations)
- Phạm vi: Ứng dụng Web phục vụ kiểm tra trắc nghiệm đơn đáp án và đa đáp án cho các trường phổ thông, đại học và trung tâm đào tạo.
- Giới hạn: Tập trung vào câu hỏi dạng trắc nghiệm khách quan (
is_multiple), chưa tích hợp chấm điểm tự luận tự động bằng xử lý ngôn ngữ tự nhiên (NLP) và chưa tích hợp giám thị AI qua camera (Proctoring).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế 3 hệ thống kiểm tra trực tuyến phổ biến hiện nay:
| Tiêu chí |
SHub Classroom (shub.vn) |
FHQX - HCMUTE (fhqx.vn) |
Quizizz (quizizz.com) |
Hệ thống đề xuất trong đồ án |
| Giao diện & Trải nghiệm |
Hiện đại, bố cục rõ ràng, tông màu tươi sáng |
Giao diện xanh - trắng tối giản, mượt mà |
Đồ họa gamified, nhiều hiệu ứng âm thanh |
Thiết kế Responsive, tối ưu hóa giao diện quản trị |
| Hỗ trợ hình thức thi |
Trắc nghiệm & tự luận (ôn tập, kỳ thi) |
Trắc nghiệm (1 hoặc nhiều đáp án), tự luận |
Trắc nghiệm giới hạn thời gian theo câu hỏi |
Trắc nghiệm đơn & đa lựa chọn, kiểm soát thời gian tổng |
| Phân quyền lớp học |
Giáo viên - Học sinh theo lớp học |
Tài khoản nội bộ sinh viên HCMUTE |
Phòng thi mã PIN công khai / bài tập về nhà |
Phân quyền 4 vai trò (Admin, Teacher, Student, Guest) |
| Độ ổn định & Ngôn ngữ |
Ổn định cao, hỗ trợ tiếng Việt tốt |
Thỉnh thoảng bị lỗi session văng ra đăng nhập |
Lỗi vỡ font chữ tiếng Việt, format chưa chuẩn |
Quản lý phiên ổn định, hỗ trợ tiếng Việt Unicode hoàn chỉnh |
| Chia sẻ ngân hàng câu hỏi |
Có thư viện đề chia sẻ |
Cố định theo ngân hàng đề của trường |
Cộng đồng chia sẻ mở, khó kiểm duyệt |
Quản lý ngân hàng câu hỏi theo môn học, Admin duyệt |
Phân loại yêu cầu theo mô hình MoSCoW
- Must have (Bắt buộc): Xác thực người dùng (JWT/Session Auth), phân quyền 4 vai trò, quản lý môn học/lớp học, làm bài trắc nghiệm tính giờ, chấm điểm tự động, quản lý ngân hàng câu hỏi.
- Should have (Nên có): Thống kê kết quả thi, xuất bảng điểm, duyệt học sinh vào lớp qua đơn đăng ký, xem 4 hoạt động gần nhất (
BM-ST-NK).
- Could have (Có thể có): Quên mật khẩu qua email token tự động, đính kèm hình ảnh đại diện người dùng (
image_url), thông báo lớp học (BM-TC-TB).
- Won't have (Chưa thực hiện đợt này): Giám sát thi bằng AI nhận diện khuôn mặt, tự động trích xuất đề từ file PDF/Word bằng OCR.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc 3 tầng (3-Tier Architecture) kết hợp RESTful API nhằm tách biệt giao diện hiển thị và logic xử lý dữ liệu.
graph TD
Client[Client Tier: TypeScript / Single Page App / Blade] -->|RESTful API Calls / JSON| Gateway[Web Server Nginx / Docker Engine]
Gateway -->|HTTP Request Routing| Backend[Application Tier: Laravel PHP / Node.js Engine]
Backend -->|Data Logic & Business Rules| AuthModule[Authentication & RBAC Manager]
Backend -->|Question & Test Processing| ExamEngine[Exam Engine & Auto Grading]
Backend -->|ORM Queries / Prepared Statements| Database[(Database Tier: MySQL 8.0 Database)]
Ngăn xếp công nghệ (Technology Stack)
- Frontend / Scripting: TypeScript 5.x, JavaScript ES6+, HTML5/CSS3 UI Component.
- Backend Service: Laravel Framework 10.x / Node.js Runtime (hỗ trợ RESTful API Architecture).
- Hệ quản trị CSDL: MySQL 8.0 với InnoDB Engine, mã hóa chuẩn
utf8mb4_unicode_ci.
- Containerization & Deployment: Docker Engine 24.x, Docker Compose, Nginx Web Server.
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống chuẩn hóa dữ liệu đạt chuẩn 3NF, bao gồm các bảng cốt lõi trích xuất từ tài liệu thiết kế:
-- 1. Bảng quản lý người dùng (users)
CREATE TABLE `users` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`login_id` VARCHAR(50) NOT NULL UNIQUE,
`name` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL UNIQUE,
`phone` VARCHAR(15) NULL,
`password` VARCHAR(255) NOT NULL,
`role` ENUM('admin', 'teacher', 'student', 'guest') NOT NULL DEFAULT 'student',
`image_url` VARCHAR(255) NULL,
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. Bảng quản lý ngành/môn học (majors)
CREATE TABLE `majors` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(100) NOT NULL,
`description` TEXT NULL,
`percent_pass` DECIMAL(5,2) NOT NULL DEFAULT 50.00,
`is_active` TINYINT(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. Bảng quản lý lớp học (classes)
CREATE TABLE `classes` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(150) NOT NULL,
`description` TEXT NULL,
`host_id` BIGINT UNSIGNED NOT NULL,
`student_amount` INT UNSIGNED NOT NULL DEFAULT 0,
`is_public` TINYINT(1) NOT NULL DEFAULT 1,
`is_active` TINYINT(1) NOT NULL DEFAULT 1,
`start_time` DATETIME NULL,
`end_time` DATETIME NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`host_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 4. Bảng liên kết học sinh - lớp học (user_class)
CREATE TABLE `user_class` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`class_id` BIGINT UNSIGNED NOT NULL,
`participant_id` BIGINT UNSIGNED NOT NULL,
`status` ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'approved',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`participant_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 5. Bảng ngân hàng câu hỏi (questions)
CREATE TABLE `questions` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`content` TEXT NOT NULL,
`hash` VARCHAR(64) NOT NULL,
`point` DECIMAL(4,2) NOT NULL DEFAULT 1.00,
`is_multiple` TINYINT(1) NOT NULL DEFAULT 0,
`is_public` TINYINT(1) NOT NULL DEFAULT 1,
`active` TINYINT(1) NOT NULL DEFAULT 1,
`author_id` BIGINT UNSIGNED NOT NULL,
`major_id` BIGINT UNSIGNED NOT NULL,
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`major_id`) REFERENCES `majors`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế RESTful API
Các endpoint được thiết kế chuẩn hóa cho giao tiếp Frontend - Backend:
| Phương thức |
Endpoint URI |
Mô tả chức năng |
Quyền truy cập |
POST |
/api/v1/auth/login |
Xác thực đăng nhập, cấp Access Token |
Guest |
POST |
/api/v1/auth/register |
Đăng ký tài khoản mới (BM-GS-DK) |
Guest |
POST |
/api/v1/auth/forgot-password |
Gửi liên kết đặt lại mật khẩu (BM-GS-QM) |
Guest |
GET |
/api/v1/classes |
Lấy danh sách lớp học theo phân trang |
Student, Teacher, Admin |
POST |
/api/v1/classes/{id}/join |
Gửi đơn xin vào lớp học (BM-ST-XV) |
Student |
POST |
/api/v1/teacher/classes |
Tạo mới lớp học (BM-TC-LH) |
Teacher |
POST |
/api/v1/teacher/classes/approve |
Phê duyệt học sinh vào lớp (BM-TC-PD) |
Teacher |
GET |
/api/v1/questions/bank |
Tra cứu ngân hàng câu hỏi mẫu (BM-TC-CHM) |
Teacher, Admin |
POST |
/api/v1/exams/{id}/submit |
Nộp bài thi và kích hoạt tính điểm |
Student |
Phương pháp luận (Methodology)
Dự án áp dụng mô hình phát triển phần mềm lặp (Iterative Agile/Scrum) với thời lượng thực hiện 18 tuần (từ ngày 04/03/2024 đến 09/07/2024):
Tuần 1 - 3 [04/03 - 18/03]: Thiết kế UI/DB lớp học, bài kiểm tra, xác thực Guest.
Tuần 4 - 5 [19/03 - 31/03]: Xây dựng nghiệp vụ Admin, Teacher, bài kiểm tra.
Tuần 6 - 8 [01/04 - 22/04]: Thiết kế DB kết quả, màn hình thống kê điểm số.
Tuần 9 - 11 [23/04 - 13/05]: Hoàn thiện RESTful API toàn diện cho hệ thống.
Tuần 12 - 14 [14/05 - 04/06]: Kiểm thử chương trình, rà soát lỗi và tối ưu hóa.
Tuần 15 - 18 [04/06 - 09/07]: Hoàn thiện toàn bộ hệ thống, viết tài liệu và in ấn báo cáo.
Implementation và kết quả
Quy trình phát triển (Development Process)
Trong quá trình phát triển, việc xử lý thuật toán xáo trộn câu hỏi và chấm điểm bài kiểm tra tức thời là một trong những module kỹ thuật quan trọng nhất.
Thuật toán chấm điểm và xử lý kết quả bài thi
Dưới đây là mã nguồn minh họa thuật toán chấm điểm bài trắc nghiệm tự động viết bằng TypeScript / Node.js Engine:
interface UserAnswerPayload {
questionId: number;
selectedOptionIds: number[];
}
interface QuestionKey {
id: number;
point: number;
isMultiple: boolean;
correctOptionIds: number[];
}
interface ExamSubmissionResult {
totalScore: number;
maxScore: number;
correctCount: number;
passed: boolean;
}
export class ExamScoringService {
/**
* Tính toán điểm số bài kiểm tra trắc nghiệm
* Độ phức tạp thuật toán: O(N * M) với N là số câu hỏi, M là số đáp án chọn
*/
public static calculateExamScore(
userAnswers: UserAnswerPayload[],
examKeys: QuestionKey[],
passPercentage: number
): ExamSubmissionResult {
let totalScore = 0;
let maxScore = 0;
let correctCount = 0;
const keyMap = new Map<number, QuestionKey>(
examKeys.map((item) => [item.id, item])
);
for (const ans of userAnswers) {
const question = keyMap.get(ans.questionId);
if (!question) continue;
maxScore += question.point;
const sortedUserAns = [...ans.selectedOptionIds].sort().join(',');
const sortedCorrectAns = [...question.correctOptionIds].sort().join(',');
if (sortedUserAns === sortedCorrectAns && sortedCorrectAns !== '') {
totalScore += question.point;
correctCount++;
}
}
const calculatedPercentage = maxScore > 0 ? (totalScore / maxScore) * 100 : 0;
const passed = calculatedPercentage >= passPercentage;
return {
totalScore: Number(totalScore.toFixed(2)),
maxScore: Number(maxScore.toFixed(2)),
correctCount,
passed,
};
}
}
Kiểm thử và đánh giá (Testing & Validation)
Hệ thống được kiểm thử qua 5 ca kiểm thử chính trên toàn bộ các vai trò người dùng:
| ID Kiểm thử |
Chức năng kiểm tra |
Kịch bản thực hiện |
Kết quả mong đợi |
Trạng thái |
| TC-01 |
Đăng ký tài khoản (BM-GS-DK) |
Nhập tên, email, login_id và mật khẩu hợp lệ |
Tạo user mới, mã hóa mật khẩu, chuyển về login |
PASS |
| TC-02 |
Đăng nhập hệ thống (BM-GS-DN) |
Nhập đúng login_id/email và mật khẩu |
Chuyển hướng đúng dashboard theo role (Admin/Teacher/Student) |
PASS |
| TC-03 |
Quên mật khẩu (BM-GS-QM) |
Nhập email đã đăng ký trong hệ thống |
Hệ thống gửi email kèm link reset mật khẩu |
PASS |
| TC-04 |
Tạo mới lớp học (BM-TC-LH) |
Teacher nhập tên lớp, mô tả, môn học |
Lớp học được lưu vào DB, sinh mã lớp hiển thị trên giao diện |
PASS |
| TC-05 |
Nộp bài thi & Chấm điểm (BM-ST-TH) |
Student hoàn thành 20 câu hỏi trắc nghiệm |
Hệ thống ghi nhận kết quả, trả về điểm số ngay tức thì |
PASS |
Đánh giá hiệu năng hệ thống (Performance Benchmarks)
- Thời gian phản hồi trung bình API: 145ms trong điều kiện hoạt động bình thường.
- Thời gian chấm điểm tự động: < 80ms cho bài thi 50 câu hỏi.
- Tải đồng thời: Chịu tải tốt ở mức 250 người dùng làm bài thi đồng thời mà không suy giảm hiệu năng (CPU usage < 45% trên server 2 Core, 4GB RAM).
Đổi mới và đóng góp
- Chuẩn hóa cấu trúc ngân hàng câu hỏi mẫu theo môn học (
majors): Khác với các hệ thống phân tán, đề tài xây dựng module câu hỏi mẫu tập trung cho phép Admin và Teacher kiểm duyệt chất lượng nội dung, tái sử dụng câu hỏi cho nhiều kỳ kiểm tra khác nhau.
- Cơ chế quản lý phân quyền chặt chẽ theo lớp học: Kết hợp giữa duyệt đơn tự động và duyệt đơn thủ công (
BM-TC-PD), ngăn chặn triệt để tình trạng người lạ truy cập vào phòng thi nội bộ.
- Giải quyết triệt để vấn đề mất phiên đăng nhập: Ứng dụng công nghệ Token xác thực hiện đại, khắc phục nhược điểm gián đoạn phiên thi từng ghi nhận trên hệ thống nội bộ trường.
- Hiệu quả định lượng:
- Giảm 98% thời gian công bố kết quả thi so với hình thức chấm thi truyền thống trên giấy.
- Tiết kiệm 100% chi phí in ấn tài liệu kiểm tra định kỳ trong lớp học.
- Giảm thiểu 0% sai sót trong quá trình cộng điểm và vào sổ điểm.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Kiểm tra 15 phút và 1 tiết định kỳ: Giáo viên tạo đề nhanh từ ngân hàng câu hỏi, học sinh làm bài ngay trên điện thoại hoặc máy tính trong lớp học.
- Kỳ thi đánh giá năng lực nội bộ: Phục vụ các kỳ thi chuẩn đầu ra môn học của Khoa và Nhà trường với số lượng thí sinh tham gia cùng lúc lớn.
- Ôn luyện kiến thức độc lập: Học sinh tự tra cứu bài kiểm tra công khai (
BM-ST-KTC) để làm bài ôn tập nâng cao kỹ năng.
Hướng dẫn triển khai với Docker
Cấu hình triển khai ứng dụng bằng docker-compose.yml:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: exam_app_instance
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- exam_network
webserver:
image: nginx:alpine
container_name: exam_nginx_server
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- exam_network
database:
image: mysql:8.0
container_name: exam_mysql_db
restart: unless-stopped
environment:
MYSQL_DATABASE: exam_system_db
MYSQL_ROOT_PASSWORD: secret_root_password
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
networks:
- exam_network
networks:
exam_network:
driver: bridge
volumes:
dbdata:
driver: local
Hạn chế và hướng phát triển
Hạn chế hiện tại
- Hệ thống chưa hỗ trợ nhận diện khuôn mặt thí sinh tự động hoặc chống gian lận đa màn hình (Lockdown browser).
- Chưa có tính năng tự động sinh đề thi thông minh dựa trên độ khó (Ma trận đề thi chuẩn Bloom) bằng thuật toán di truyền (Genetic Algorithm).
- Thiếu module hỗ trợ câu hỏi trắc nghiệm điền khuyết động hoặc ghép đôi (Matching questions).
Hướng phát triển trong tương lai
- Tích hợp Trí tuệ nhân tạo (AI Proctoring): Phát hiện chuyển tab trình duyệt, giám sát camera để phát hiện gian lận thi cử thời gian thực.
- Hỗ trợ tự động trích xuất đề thi từ file Word/PDF: Ứng dụng OCR và AI để bóc tách câu hỏi và đáp án tự động từ tài liệu giảng viên tải lên.
- Phát triển ứng dụng di động đa nền tảng (Mobile App): Sử dụng React Native hoặc Flutter để tối ưu hóa trải nghiệm làm bài thi trên smartphone và tablet.
Đối tượng hưởng lợi
- Sinh viên & Học sinh: Tiếp cận nền tảng kiểm tra trực quan, biết điểm số tức thì, theo dõi được lịch sử hoạt động học tập (
BM-ST-NK).
- Giảng viên & Giáo viên: Giảm 90% áp lực soạn đề và chấm bài thủ công; quản lý danh sách học sinh và kết quả kiểm tra khoa học.
- Nhà trường & Tổ chức Giáo dục: Tiết kiệm hàng trăm triệu đồng chi phí in ấn giấy thi mỗi năm, nâng cao chỉ số chuyển đổi số trong quản trị đào tạo.
- Lập trình viên & Nhà nghiên cứu: Tham khảo mô hình phân tích thiết kế hệ thống chuẩn mực (Sơ đồ luồng DFD, CSDL quan hệ 3NF, API RESTful và Containerization).
Câu hỏi thường gặp
1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?
Hệ thống yêu cầu môi trường máy chủ chạy Linux (Ubuntu 20.04/22.04 LTS), cài đặt sẵn Docker Engine 24.x và Docker Compose. Cấu hình tối thiểu: 2 Core CPU, 4GB RAM và 20GB dung lượng ổ cứng SSD có thể phục vụ tốt cho 500 người dùng truy cập đồng thời.
2. Hệ thống xử lý thế nào khi thí sinh gặp sự cố rớt mạng trong lúc làm bài?
Hệ thống lưu trạng thái câu trả lời tạm thời vào bộ nhớ Local Storage / Cache trên máy trạm của thí sinh. Khi kết nối mạng được phục hồi, hệ thống sẽ tự động đồng bộ lại dữ liệu làm bài về máy chủ mà không làm mất bài thi.
3. Giáo viên có thể nhập ngân hàng câu hỏi hàng loạt được không?
Trong phiên bản hiện tại, giảng viên có thể tạo câu hỏi mẫu trực tiếp qua giao diện trực quan (BM-TC-CHM) hoặc sử dụng tính năng import cấu trúc dữ liệu JSON qua RESTful API.
4. Mức độ bảo mật của bài thi và mật khẩu người dùng như thế nào?
Toàn bộ mật khẩu được mã hóa một chiều an toàn bằng thuật toán Bcrypt trước khi lưu vào CSDL. Đề thi và đáp án chỉ được giải mã và gửi về máy khách tại thời điểm bắt đầu thi, đảm bảo học sinh không thể xem trước đáp án qua việc soi mã nguồn trình duyệt (Inspect Element).
5. Khả năng mở rộng (Scalability) của hệ thống khi số lượng thí sinh tăng vọt?
Nhờ thiết kế kiến trúc phân tầng không trạng thái (Stateless API) và đóng gói bằng Docker, hệ thống có thể dễ dàng scale ngang (Horizontal Scaling) bằng cách tăng số lượng container backend và đặt phía sau Nginx Load Balancer.
Kết luận
Đồ án tốt nghiệp "Xây dựng Website kiểm tra trắc nghiệm" của hai sinh viên Lê Trần Minh Nhựt và Nguyễn Thị Xuân Thanh đã hoàn thành xuất sắc các mục tiêu đề ra theo đúng lộ trình 18 tuần nghiên cứu và phát triển. Đề tài không chỉ giải quyết trọn vẹn bài toán nghiệp vụ khảo thí trực tuyến cho 4 nhóm đối tượng người dùng mà còn xây dựng được nền tảng kiến trúc phần mềm chuẩn mực, ổn định và có khả năng ứng dụng thực tiễn cao tại các trường học và cơ sở giáo dục hiện nay.