Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục và những thách thức từ các biến cố xã hội (tiêu biểu như đại dịch COVID-19), nhu cầu tổ chức dạy và học trực tuyến đã bùng nổ mạnh mẽ. Theo số liệu thống kê giáo dục, Việt Nam có hơn 24 triệu học sinh, sinh viên với hơn 1,5 triệu sinh viên đại học chính quy. Tuy nhiên, trong khi các giải pháp hội nghị truyền hình như Zoom, Google Meet đã giải quyết tốt bài toán truyền thụ kiến thức, khâu kiểm tra và đánh giá kết quả học tập vẫn tồn tại nhiều lỗ hổng lớn.

Các hình thức thi truyền thống như thi tự luận, thi vấn đáp hoặc nộp bài tập lớn trực tuyến bộc lộ nhiều hạn chế: thí sinh dễ dàng chuẩn bị tài liệu gian lận tại các "góc chết" của camera, việc nộp bài chung dễ dẫn đến nguy cơ ghi đè/xóa file, thời gian chấm thi kéo dài từ 10 đến 15 ngày gây chậm trễ công tác đào tạo, và điểm số chịu nhiều tác động từ tính chủ quan của người chấm.

Đề tài “Nghiên cứu, xây dựng hệ thống thi trực tuyến cho hình thức thi trắc nghiệm” do sinh viên Nguyễn Thị Huyền (Học viện Công nghệ Bưu chính Viễn thông - PTIT) thực hiện dưới sự hướng dẫn của TS. Ngô Quốc Dũng, tập trung giải quyết triệt để bài toán tổ chức thi trắc nghiệm khách quan (Objective Test), tự động hóa toàn diện từ khâu quản lý ngân hàng câu hỏi, tạo đề theo ma trận kiến thức, giám sát thi trực tuyến chống gian lận đến chấm điểm và kết xuất dữ liệu tự động.

Mục tiêu cụ thể của dự án:

  1. Xây dựng nền tảng thi trắc nghiệm trực tuyến tập trung trên nền tảng Web với kiến trúc hướng dịch vụ, phục vụ 3 tác nhân: Quản trị viên (Admin), Giảng viên và Sinh viên.
  2. Thiết kế module ngân hàng câu hỏi đa dạng (Single Choice, Multiple Choice, Short Answer, Essay, Fill-in-the-blank, Drag & Drop) phân loại theo khối kiến thức và độ khó.
  3. Phát triển thuật toán sinh đề thi tự động theo ma trận cấu trúc định sẵn cùng quy trình kiểm duyệt đề 2 cấp độ (Giảng viên biên soạn – Quản trị viên phê duyệt).
  4. Tích hợp cơ chế giám sát client-side tự động ghi nhận hành vi gian lận (rời màn hình, mở đa màn hình, chuyển tab, không phóng to cửa sổ) và trích xuất nhật ký (log) chi tiết.
  5. Rút ngắn thời gian trả kết quả thi từ 10-15 ngày xuống tức thì (<1 giây) với độ chính xác 100%.

Phạm vi và giới hạn đề tài: Hệ thống tập trung triển khai cho hình thức thi trắc nghiệm các học phần tín chỉ tại các cơ sở giáo dục đại học, tích hợp định danh tài khoản quản lý đào tạo (QLĐT PTIT S-Link), giới hạn ở mức giám sát thông qua trình duyệt Web (Browser Sandbox Environment).


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ế các phương pháp kiểm tra đánh giá hiện nay cho thấy sự chênh lệch rõ rệt về hiệu quả và mức độ bảo mật:

Tiêu chí Thi tự luận / Vấn đáp truyền thống Google Forms + Video Call (Zoom/Meet) Hệ thống thi trắc nghiệm chuyên biệt (Đề tài)
Thời gian chấm điểm 10 - 15 ngày (chấm thủ công) Ngay lập tức (với trắc nghiệm cơ bản) Tức thì theo thời gian thực (< 1s)
Tính khách quan Bị ảnh hưởng bởi yếu tố chủ quan Cao, nhưng khó phân hóa đề Tuyệt đối (100% tự động theo đáp án chuẩn)
Kiểm soát gian lận Cần nhiều giám thị trực tiếp Rất thấp (dễ chuyển tab, tra cứu) Tự động bắt sự kiện DOM, khóa đa màn hình, ghi log
Quản lý ngân hàng đề Khó tái sử dụng, rủi ro lộ đề Thủ công, không có ma trận chuẩn Quản lý theo khối kiến thức, ma trận độ khó
Quy trình phê duyệt Giấy tờ phức tạp Không hỗ trợ workflow Phân quyền 2 cấp: Giảng viên tạo – Admin duyệt

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Đăng nhập xác thực tài khoản; Quản lý ngân hàng câu hỏi & khối kiến thức; Tạo và sinh đề thi theo cấu trúc; Giao diện làm bài và nộp bài thi; Chấm điểm tự động; Bắt sự kiện thoát Fullscreen / Blur tab.
  • Should-have (Nên có): Workflow duyệt/từ chối đề thi của Admin; Export bảng điểm, bài làm và nhật ký vi phạm ra định dạng Excel (.xlsx); Hiển thị danh sách sinh viên đã thi / chưa thi theo thời gian thực.
  • Could-have (Có thể có): Hỗ trợ câu hỏi kéo thả, điền khuyết; Tích hợp API đồng bộ lớp học phần từ hệ thống đào tạo S-Link.
  • Won't-have (Chưa thực hiện): Nhận diện khuôn mặt bằng AI qua Camera (Face Recognition/Eye Tracking).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình kiến trúc 3 lớp (3-Tier Architecture) hiện đại, đảm bảo tính tách biệt giữa tầng giao diện, tầng nghiệp vụ và tầng dữ liệu.

graph TD
    Client[Client Layer: ReactJS SPA] -->|HTTPS / RESTful API| Gateway[API Gateway / Express Router]
    Gateway --> AuthModule[Auth & Role-Based Access Control]
    Gateway --> ExamModule[Exam & Question Bank Service]
    Gateway --> ProctorModule[Anti-Cheat & Logging Service]
    Gateway --> ExportModule[Reporting & Excel Export Service]
    AuthModule --> DB[(Database: MongoDB)]
    ExamModule --> DB
    ProctorModule --> DB
    ExportModule --> DB

Technology Stack chi tiết:

  • Frontend: ReactJS (v17.0.2), HTML5 Fullscreen API, Page Visibility API, Axios (v0.24.0), Ant Design / Bootstrap UI.
  • Backend: NodeJS (v16.14.0 LTS), ExpressJS (v4.17.2), kiến trúc RESTful Services.
  • Database: MongoDB (v5.0.6) kết hợp Mongoose ODM (v6.2.1) tối ưu hóa truy vấn NoSQL linh hoạt.
  • Libraries hỗ trợ: ExcelJS/SheetJS (xuất báo cáo), Bcrypt.js (mã hóa mật khẩu saltRounds=10), JSON Web Token (JWT).

Thiết kế mô hình dữ liệu (Database Schema) cốt lõi:

  • Users: { _id, username, password_hash, role: ['ADMIN', 'LECTURER', 'STUDENT'], full_name, class_id }
  • KnowledgeBlocks: { _id, name, subject_id, description }
  • Questions: { _id, block_id, difficulty: ['EASY', 'MEDIUM', 'HARD'], type: ['SINGLE', 'MULTIPLE', 'SHORT', 'ESSAY'], content, options: [{ text, is_correct }], is_mandatory }
  • ExamStructures: { _id, exam_id, block_id, number_of_questions, difficulty }
  • Exams: { _id, title, course_id, start_time, end_time, duration_minutes, status: ['DRAFT', 'PENDING', 'APPROVED', 'REJECTED'], created_by }
  • ExamSubmissions: { _id, exam_id, student_id, answers: [{ question_id, selected_options, text_answer }], score, submit_time }
  • ExamLogs: { _id, exam_id, student_id, event_type: ['TAB_SWITCH', 'EXIT_FULLSCREEN', 'MULTI_SCREEN_DETECTED'], timestamp, details }

Bảo mật & Hiệu năng: Hệ thống áp dụng Role-Based Access Control (RBAC), mã hóa dữ liệu nhạy cảm, cơ chế Rate Limiting chống tấn công DoS, cam kết thời gian phản hồi API < 300ms và tải trang < 3 giây.

Methodology

Dự án áp dụng phương pháp phát triển phần mềm linh hoạt (Agile Scrum) trong 16 tuần với 8 Sprint (2 tuần/sprint):

  • Milestone 1 (Sprint 1-2): Khảo sát nghiệp vụ đào tạo, thu thập yêu cầu từ giảng viên bộ môn, thiết kế Use Case và CSDL.
  • Milestone 2 (Sprint 3-5): Xây dựng Backend API (NodeJS/MongoDB), chức năng quản trị khối kiến thức, ngân hàng đề và xác thực RBAC.
  • Milestone 3 (Sprint 6-7): Xây dựng Client SPA (ReactJS), tích hợp module thi trực tuyến, module bắt sự kiện gian lận và xuất báo cáo.
  • Milestone 4 (Sprint 8): Kiểm thử hộp trắng/hộp đen, UAT (User Acceptance Testing) và đánh giá hiệu năng hệ thống.

Implementation và kết quả

Development process

Quá trình phát triển tập trung vào 2 thuật toán và giải pháp then chốt:

  1. Thuật toán sinh đề thi ngẫu nhiên dựa trên ma trận cấu trúc (Exam Matrix Algorithm): Sử dụng Aggregation Pipeline $sample của MongoDB để bốc ngẫu nhiên câu hỏi theo đúng tỷ lệ khối kiến thức và độ khó mà giảng viên thiết lập:
// examService.js - Sinh danh sách câu hỏi theo cấu trúc
async function generateExamQuestions(examStructures) {
  let finalQuestions = [];
  for (const structure of examStructures) {
    const questions = await Question.aggregate([
      { 
        $match: { 
          block_id: mongoose.Types.ObjectId(structure.block_id),
          difficulty: structure.difficulty 
        } 
      },
      { $sample: { size: structure.number_of_questions } }
    ]);
    finalQuestions.push(...questions);
  }
  return finalQuestions;
}
  1. Cơ chế Client-side Anti-Cheat Monitoring: Module React Hook theo dõi trạng thái tương tác người dùng, lắng nghe các sự kiện mất tiêu điểm (blur), thay đổi khả năng hiển thị (visibilitychange) và thoát chế độ toàn màn hình:
// useExamProctoring.js - Giám sát hành vi làm bài của thí sinh
import { useEffect } from 'react';
import axios from 'axios';

export const useExamProctoring = (examId, studentId) => {
  const logViolation = async (eventType, details) => {
    await axios.post('/api/exam-logs', {
      exam_id: examId,
      student_id: studentId,
      event_type: eventType,
      details: details,
      timestamp: new Date()
    });
  };

  useEffect(() => {
    const handleVisibilityChange = () => {
      if (document.hidden) {
        logViolation('TAB_SWITCH', 'Thí sinh đã chuyển sang tab hoặc ứng dụng khác');
      }
    };

    const handleFullscreenChange = () => {
      if (!document.fullscreenElement) {
        logViolation('EXIT_FULLSCREEN', 'Thí sinh đã thoát chế độ toàn màn hình');
      }
    };

    document.addEventListener('visibilitychange', handleVisibilityChange);
    document.addEventListener('fullscreenchange', handleFullscreenChange);

    return () => {
      document.removeEventListener('visibilitychange', handleVisibilityChange);
      document.removeEventListener('fullscreenchange', handleFullscreenChange);
    };
  }, [examId, studentId]);
};

Testing và validation

Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt bao gồm Unit Test, Integration Test và Load Testing:

  • Kiểm thử tải (Load Testing via Apache JMeter): Mô phỏng 500 sinh viên đồng thời truy cập làm bài và nộp bài tại cùng một thời điểm.
  • Độ sẵn sàng (Uptime): Đạt 99.8% trong suốt quá trình thử nghiệm.
  • Tốc độ xử lý: Thời gian phản hồi API trung bình đạt 180ms, độ trễ nộp bài đạt 240ms dưới tải 500 CCU.
  • Độ chính xác chấm điểm: Đạt 100% trên 10.000 lượt bài thi thử nghiệm với các cấu hình đáp án đơn và đa lựa chọn.
Kịch bản kiểm thử Số lượng mẫu Tỷ lệ thành công Thời gian phản hồi TB Ghi chú
Đăng nhập đồng thời 500 CCU 100% 120ms Xác thực JWT ổn định
Bốc đề ngẫu nhiên theo ma trận 1.000 đề 100% 210ms Đảm bảo đúng cấu trúc & tỷ lệ
Ghi nhận sự kiện gian lận (Log) 2.500 sự kiện 99.9% 85ms Không gây nghẽn UI
Tự động nộp bài khi hết giờ 500 bài 100% 195ms Không xảy ra tình trạng mất dữ liệu

Kết quả đạt được

Hệ thống đã hoàn thiện 100% các tính năng đề ra theo đề cương:

  • Giao diện Admin/Giảng viên trực quan: quản lý khối kiến thức, ngân hàng câu hỏi, duyệt đề thi và trích xuất dữ liệu bài thi linh hoạt.
  • Giao diện Sinh viên tối ưu: giao diện làm bài tập trung, hiển thị đồng hồ đếm ngược, danh sách câu hỏi trực quan và tự động lưu đáp án vào LocalStorage phòng chống sự cố ngắt kết nối mạng.
  • Mức độ hài lòng của người dùng thử nghiệm (khảo sát 120 sinh viên và 15 giảng viên): Đạt 92% đánh giá Rất tốt / Tốt về tính tiện dụng và độ mượt mà.

Đổi mới và đóng góp

  1. Chuẩn hóa quy trình tạo đề thi bằng ma trận tri thức: Thay vì chọn đề thủ công hoặc tạo đề tĩnh, hệ thống áp dụng cấu trúc đề đa chiều (Khối kiến thức $\times$ Mức độ khó). Điều này đảm bảo tính đồng đều về độ khó và khối lượng kiến thức giữa các thí sinh, loại bỏ hoàn toàn hiện tượng "học tủ, học vẹt".
  2. Quy trình kiểm duyệt đề 2 lớp linh hoạt: Giảng viên phụ trách chỉ có quyền gán đề cho lớp mình dạy ở trạng thái "Chờ duyệt" (Pending). Chỉ khi Quản trị viên (Admin/Trưởng bộ môn) phê duyệt, đề thi mới được kích hoạt, nâng cao tính bảo mật và kiểm soát chất lượng học thuật.
  3. Cơ chế chống gian lận phi xâm nhập (Non-intrusive Proctoring): Không cần cài đặt các phần mềm nặng nề can thiệp sâu vào kernel hệ điều hành, hệ thống tận dụng tối đa các API tiêu chuẩn của trình duyệt (HTML5 Fullscreen, Page Visibility API) để phát hiện và ghi nhận chính xác các hành vi bất thường, xuất log minh bạch làm bằng chứng xử lý kỷ luật.
  4. Hiệu quả kinh tế và vận hành vượt trội: Giảm 85% chi phí in ấn giấy thi và văn phòng phẩm; tiết kiệm 95% thời gian chấm thi và tổng hợp điểm số; nâng cao năng suất tổ chức thi của nhà trường lên 300%.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Tổ chức thi kết thúc học phần tập trung hoặc từ xa: Áp dụng cho các môn khoa học cơ bản và chuyên ngành có số lượng sinh viên đông (Triết học, Mạng máy tính, Cơ sở dữ liệu, Lập trình hướng đối tượng).
  • Kiểm tra định kỳ và đánh giá thường xuyên: Giảng viên chủ động tạo các bài Quiz 15 phút hoặc 45 phút ngay trên lớp để đánh giá mức độ tiếp thu bài của sinh viên.

Yêu cầu triển khai hạ tầng

  • Server Environment:
    • CPU: 4 vCPU, RAM: 8GB, SSD: 80GB.
    • Runtime: Node.js 16.x LTS, MongoDB Cluster / MongoDB Atlas (Replica Set).
    • Nginx làm Reverse Proxy và cấu hình SSL/TLS (HTTPS).
  • Client Environment:
    • Máy tính cá nhân (PC/Laptop) chạy hệ điều hành Windows/macOS/Linux.
    • Trình duyệt web hiện đại hỗ trợ chuẩn HTML5 (Google Chrome $\ge$ 90, Microsoft Edge $\ge$ 90, Mozilla Firefox $\ge$ 88).

Lộ trình triển khai

  • Giai đoạn 1 (1 tháng): Cài đặt hệ thống trên môi trường máy chủ nội bộ trường, nhập liệu ngân hàng câu hỏi chuẩn cho 5 học phần thử nghiệm.
  • Giai đoạn 2 (2 tháng): Tích hợp SSO/API tài khoản từ cổng đào tạo PTIT S-Link, tổ chức tập huấn cho 50 cán bộ giảng viên.
  • Giai đoạn 3 (Vận hành chính thức): Triển khai diện rộng cho toàn bộ các kỳ thi học phần trắc nghiệm quy mô 5.000+ sinh viên.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Hệ thống hoạt động trong môi trường sandbox của trình duyệt web nên chưa thể phát hiện các thiết bị ngoại vi gắn ngoài (màn hình phụ qua cổng chia phần cứng chuyên dụng) hoặc các phần mềm can thiệp nền nếu không kích hoạt sự kiện mất tiêu điểm.
  • Chưa có module tự động chấm điểm cho các dạng câu hỏi tự luận dài hoặc code chấm tự động (Online Judge).

Hướng phát triển trong tương lai

  1. Tích hợp AI Proctoring: Phát triển module nhận diện khuôn mặt thí sinh định kỳ qua Webcam (sử dụng WebAssembly và mô hình TensorFlow.js/MediaPipe), phát hiện quay cóp, nhận diện có nhiều người trong khung hình hoặc thí sinh rời khỏi vị trí thi.
  2. Nâng cấp công nghệ Lockdown: Xây dựng phiên bản Desktop Application bằng Electron.js cho phép khóa hoàn toàn tác vụ của hệ điều hành trong suốt thời gian thi (Safe Exam Browser mode).
  3. Mở rộng dạng bài thi tương tác cao: Bổ sung trình biên dịch mã nguồn trực tiếp (Online Compiler) phục vụ thi lập trình và tự động kiểm thử test cases.

Đối tượng hưởng lợi

  • Sinh viên: Được làm quen với môi trường thi hiện đại, minh bạch, biết điểm tức thì, giao diện trực quan giúp giảm áp lực phòng thi, tính năng tự động lưu bài bảo vệ quyền lợi khi gặp sự cố kỹ thuật.
  • Giảng viên: Tiết kiệm hàng trăm giờ lao động cho việc tạo đề và chấm bài thủ công; dễ dàng quản lý, phân loại ngân hàng câu hỏi; có công cụ trích xuất log minh bạch giải quyết các khiếu nại về điểm số.
  • Nhà trường & Cán bộ khảo thí: Tối ưu hóa chi phí tổ chức thi, quản lý dữ liệu điểm số tập trung, đảm bảo tính khách quan và chuẩn hóa chất lượng đào tạo theo học chế tín chỉ.
  • Lập trình viên & Nhà nghiên cứu: Tài liệu tham khảo toàn diện về kiến trúc ứng dụng MERN Stack (MongoDB, Express, React, Node), mô hình phân quyền RBAC và kỹ thuật xử lý sự kiện kiểm soát gian lận trên web.

Câu hỏi thường gặp

1. Hệ thống có yêu cầu cài đặt thêm phần mềm bổ trợ trên máy tính sinh viên không? Không. Thí sinh chỉ cần một trình duyệt web tiêu chuẩn (Chrome, Edge, Firefox) có kết nối Internet để tham gia thi mà không cần cài đặt thêm bất kỳ extension hay plugin nào.

2. Nếu thí sinh bị mất kết nối mạng đột ngột trong khi thi thì dữ liệu bài làm có bị mất không? Không. Giao diện client được tích hợp cơ chế tự động đồng bộ trạng thái bài làm vào localStorage. Khi kết nối mạng được khôi phục, hệ thống sẽ tự động đồng bộ các câu trả lời về server mà không làm gián đoạn thời gian làm bài của thí sinh.

3. Cơ chế nào ngăn chặn việc giảng viên tự ý phát đề chưa qua kiểm duyệt? Hệ thống thiết lập workflow chặt chẽ: Đề thi do giảng viên tạo sẽ mặc định ở trạng thái PENDING. Chỉ tài khoản có quyền ADMIN mới có quyền xem xét cấu trúc đề, phê duyệt (APPROVED) để đề hiển thị trên danh sách thi của sinh viên hoặc từ chối (REJECTED) kèm lý do chỉnh sửa.

4. Khả năng mở rộng (Scalability) của hệ thống khi có hàng nghìn sinh viên thi cùng lúc như thế nào? Hệ thống sử dụng NodeJS với mô hình bất đồng bộ (Non-blocking I/O) kết hợp cùng MongoDB NoSQL có khả năng mở rộng ngang (Horizontal Scaling) vượt trội. Bằng cách triển khai trên Docker Container và cân bằng tải qua Nginx, hệ thống dễ dàng đáp ứng quy mô từ 5.000 đến 10.000 thí sinh đồng thời.

5. Chi phí triển khai và thời gian hoàn vốn (ROI) ước tính ra sao? Hệ thống được phát triển hoàn toàn trên nền tảng mã nguồn mở (NodeJS, React, MongoDB), giúp loại bỏ chi phí bản quyền phần mềm đắt đỏ. Với việc tiết kiệm chi phí in ấn, giám thị và chấm thi, các trường đại học quy mô 10.000 sinh viên có thể hoàn vốn đầu tư hạ tầng máy chủ chỉ sau 1 đến 2 học kỳ vận hành.


Kết luận

Đồ án “Nghiên cứu, xây dựng hệ thống thi trực tuyến cho hình thức thi trắc nghiệm” của sinh viên Nguyễn Thị Huyền đã giải quyết thành công một bài toán mang tính cấp thiết cao trong công tác chuyển đổi số giáo dục. Bằng việc làm chủ và ứng dụng hiệu quả kiến trúc công nghệ web hiện đại (ReactJS, NodeJS, MongoDB), đề tài đã xây dựng nên một giải pháp hoàn chỉnh, có tính ứng dụng thực tiễn cao, đáp ứng đầy đủ các yêu cầu khắt khe về bảo mật, tính khách quan, tự động hóa và khả năng mở rộng.

Hệ thống không chỉ dừng lại ở phạm vi một đồ án tốt nghiệp đại học xuất sắc mà còn sẵn sàng để chuyển giao, tích hợp trực tiếp vào hệ sinh thái quản lý đào tạo của Học viện Công nghệ Bưu chính Viễn thông cũng như các trường đại học, cao đẳng trên cả nước.