Bối cảnh và vấn đề nghiên cứu

Trong bối cảnh cuộc Cách mạng Công nghiệp 4.0 và xu hướng số hóa toàn cầu, việc ứng dụng các hệ thống kiểm tra, đánh giá trực tuyến đã trở thành một phần thiết yếu trong môi trường giáo dục hiện đại. Sự chuyển dịch này xuất phát từ nhu cầu thực tiễn nhằm tối ưu hóa nguồn lực và thích ứng với các yêu cầu mới trong công tác đào tạo.

Theo tác giả Đỗ Cao Nguyên (sinh viên ngành Kỹ thuật Tin học và Máy tính, Trường Quốc tế – Đại học Quốc gia Hà Nội), việc xây dựng hệ thống kiểm tra trực tuyến giải quyết các bài toán thực tiễn sau:

  1. Khả năng tiếp cận linh hoạt: Người học và người quản lý có thể truy cập dữ liệu và thực hiện kỳ thi từ bất kỳ địa điểm nào có kết nối Internet, phản ánh xu thế số hóa và toàn cầu hóa trong giáo dục.
  2. Tiết kiệm thời gian và chi phí: Giảm thiểu nhu cầu di chuyển đến các trung tâm khảo thí tập trung, từ đó tiết kiệm chi phí đi lại và cho phép thí sinh phân bổ thời gian học tập, nghỉ ngơi hiệu quả hơn.
  3. Thích ứng với tình huống khẩn cấp: Đảm bảo quá trình học tập và đánh giá không bị gián đoạn trước các biến cố y tế, dịch bệnh hoặc các tình huống khẩn cấp yêu cầu hạn chế tiếp xúc trực tiếp.
  4. Tự động hóa và giảm thiểu sai sót: Quy trình chấm điểm và tổng hợp kết quả tự động giúp nâng cao độ chính xác, hạn chế lỗi chủ quan từ con người và tiết kiệm thời gian cho giảng viên.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài:

  • Xây dựng hệ thống website kiểm tra trực tuyến toàn diện phục vụ hai nhóm đối tượng người dùng: Quản trị viên (Administrator) và Thí sinh (Examinee/Candidate).
  • Xây dựng hệ thống máy chủ cung cấp dịch vụ giao diện lập trình ứng dụng (API Service) để xử lý toàn bộ logic nghiệp vụ, quản lý ngân hàng câu hỏi, tạo đề thi, phân quyền và chấm điểm.
  • Đảm bảo các tiêu chuẩn phi chức năng về khả năng phản hồi giao diện đa thiết bị (Responsive Design), tính bảo mật dữ liệu và hiệu năng vận hành hệ thống.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Hệ thống phần mềm website kiểm tra trực tuyến, bao gồm kiến trúc giao diện người dùng (Frontend), kiến trúc dịch vụ xử lý nghiệp vụ (Backend API), và cơ sở dữ liệu quan hệ (Database).
  • Phạm vi nghiên cứu: Đồ án tốt nghiệp đại học chuyên ngành Kỹ thuật Tin học và Máy tính (Informatics and Computer Engineering), mã sinh viên 19071620, lớp ICE2019A, thực hiện tại Trường Quốc tế – Đại học Quốc gia Hà Nội (VNU-IS) năm 2024 dưới sự hướng dẫn của TS. Phạm Đình Tân.

Cơ sở lý thuyết và phương pháp

Đồ án ứng dụng các mô hình kỹ thuật phần mềm hiện đại và các nguyên lý kiến trúc hướng đối tượng nhằm đảm bảo tính module hóa, khả năng bảo trì và khả năng mở rộng.

1. Khung lý thuyết và mô hình kiến trúc

  • Mô hình Kiến trúc Sạch (Clean Architecture): Dựa trên tư tưởng thiết kế của Robert C. Martin, phân chia hệ thống thành các tầng độc lập với quy tắc dòng phụ thuộc nghiêm ngặt hướng vào tâm (Dependencies Flow Inward), cô lập hoàn toàn logic nghiệp vụ cốt lõi khỏi các framework, cơ sở dữ liệu và giao diện người dùng.
  • Nguyên lý Đảo ngược phụ thuộc (Dependency Inversion Principle - DIP): Thành phần thuộc bộ nguyên lý SOLID, quy định các module cấp cao không phụ thuộc vào module cấp thấp mà cả hai phải phụ thuộc vào các giao diện trừu tượng (Interfaces/Abstractions).
  • Kỹ thuật Tiêm phụ thuộc (Dependency Injection - DI): Được sử dụng trên nền tảng .NET Core để cấu hình và tiêm các phụ thuộc tại thời điểm chạy (runtime), giảm độ kết dính (loose coupling) giữa các thành phần.
  • Cơ chế xác thực JWT Bearer (JSON Web Tokens): Áp dụng phương thức xác thực không lưu trạng thái (stateless authentication) qua HTTP Authorization Header, sử dụng mã hóa chữ ký số để bảo vệ các tài nguyên API.
  • Mô hình Cơ sở dữ liệu quan hệ tuân thủ ACID: Khai thác các thuộc tính Nguyên tử (Atomicity), Nhất quán (Consistency), Cô lập (Isolation), và Bền vững (Durability) của hệ quản trị cơ sở dữ liệu quan hệ MySQL.

2. Phương pháp nghiên cứu và phát triển

  • Phương pháp khảo sát hiện trạng và phân tích yêu cầu: Xác định rõ ràng các yêu cầu chức năng (Functional Requirements) cho từng tác nhân và các yêu cầu phi chức năng (Non-functional Requirements) về bảo mật, tốc độ và giao diện.
  • Phương pháp mô hình hóa hệ thống bằng UML: Xây dựng sơ đồ ca sử dụng tổng quan (Overview Use Case Diagram), các sơ đồ phân rã ca sử dụng chi tiết (Decay Use Case Diagrams) với các quan hệ phụ thuộc <<include>> và mở rộng <<extend>>.
  • Phương pháp thiết kế kiến trúc phân tầng: Phân rã hệ thống thành các dự án chuyên biệt (Api, Core, Infrastructure) và thiết kế chi tiết các gói cấu trúc (Package Detail Design).

3. Nguồn dữ liệu

  • Tài liệu kiến trúc phần mềm từ Microsoft (.NET Core Application Architecture Guide), các hướng dẫn chuẩn về Clean Architecture, tài liệu kỹ thuật MySQL, ReactJS và các nghiên cứu về hệ thống khảo thí trực tuyến.

Thiết kế và triển khai hệ thống

Hệ thống được thiết kế theo mô hình tách biệt hoàn toàn giữa Frontend và Backend, liên lạc qua giao thức HTTP/RESTful API.

Thành phần Công nghệ / Thư viện Vai trò và đặc tính kỹ thuật
Frontend ReactJS, HTML5, CSS3, JavaScript Ứng dụng Single-Page Application (SPA), kiến trúc dựa trên component, Virtual DOM tối ưu tốc độ render, thiết kế Responsive thích ứng trên máy tính, máy tính bảng và điện thoại
Backend .NET Core, C# Dịch vụ API xử lý nghiệp vụ, tổ chức theo Clean Architecture và Dependency Injection
Database MySQL Lưu trữ dữ liệu quan hệ; 100% nghiệp vụ tương tác qua Stored Procedures
Xác thực JWT Bearer Token Cấp phát token sau đăng nhập, kiểm soát quyền truy cập API của Administrator và Thí sinh
Tạo tài liệu Gembox Thư viện xử lý và xuất dữ liệu ra tệp tin tài liệu (Word/Excel)
Email Service MailKit Gửi email thông báo tự động qua giao thức SMTP (hỗ trợ SSL/TLS, multipart messages)

Tổ chức phân tầng Backend theo Clean Architecture:

  1. Api Project: Đóng vai trò là cổng vào tiếp nhận yêu cầu từ client. Chứa gói Controllers để định tuyến và xử lý các HTTP requests, cùng gói Authentication phụ trách kiểm tra đăng nhập, tạo và xác thực token JWT.
  2. Core Project: Tầng trung tâm chứa toàn bộ logic nghiệp vụ, hoàn toàn độc lập và không phụ thuộc vào bất kỳ dự án nào khác. Bao gồm:
    • Entities: Các thực thể mô hình dữ liệu miền và Data Transfer Objects (DTOs).
    • Shared: Các kiểu liệt kê (Enums), tiện ích chung (Utilities), tài nguyên dùng chung.
    • Interfaces: Các giao diện trừu tượng định nghĩa hợp đồng làm việc cho Repositories và Services.
    • Services: Các lớp xử lý logic nghiệp vụ cụ thể, tương tác qua các Interfaces.
  3. Infrastructure Project: Đảm nhận việc giao tiếp với các hệ thống và dịch vụ bên ngoài, hiện thực hóa các Interfaces đã định nghĩa ở tầng Core. Bao gồm:
    • Database: Quản lý kết nối, giao dịch và thực thi Stored Procedures.
    • Mail: Triển khai dịch vụ gửi email bằng MailKit.
    • Message Broker & Caches: Hỗ trợ hàng đợi thông điệp và cơ chế bộ nhớ đệm nâng cao hiệu năng.

Nội dung chính theo từng chương

Chapter I: Introduction

Chương I làm rõ tầm quan trọng và tính cấp thiết của việc xây dựng website kiểm tra trực tuyến trong thời đại Chuyển đổi số. Tác giả phân tích lợi ích của việc kiểm tra trực tuyến: giảm thiểu rủi ro gián đoạn đào tạo, tiết kiệm thời gian, tối ưu hóa chi phí và nâng cao tính chính xác trong công tác chấm thi.

Chương này xác định giải pháp tổng thể là xây dựng hệ thống gồm 2 cổng web độc lập phục vụ 2 tác nhân (Admin và Candidate), kết nối với Backend API xây dựng trên .NET Core và cơ sở dữ liệu MySQL. Đồng thời, chương I cũng trình bày tổng quan về các công nghệ cơ sở: cấu trúc HTML/CSS/JS, thư viện ReactJS với cơ chế Virtual DOM, nền tảng .NET Core, thư viện Gembox, MailKit, cơ chế xác thực JWT Bearer, và hệ quản trị cơ sở dữ liệu quan hệ MySQL.

Chapter II: System Analysis and Design

Chương II tập trung vào phân tích hiện trạng, xác định yêu cầu hệ thống và mô hình hóa chức năng:

  • Khảo sát yêu cầu chức năng:
    • Administrator: Quản lý tài khoản (tạo, sửa, xóa, cấp lại mật khẩu, phân quyền); Quản lý câu hỏi (tạo, sửa, xóa, phân loại theo chủ đề và độ khó); Quản lý bài thi (tạo đề từ ngân hàng câu hỏi, cấu hình thời gian, số lượng câu, hình thức trắc nghiệm/tự luận, thêm section, chọn câu hỏi); Phân công bài thi (gán bài cho cá nhân/nhóm, lên lịch, gửi thông báo); Chấm điểm (tự động chấm trắc nghiệm, hỗ trợ chấm tay bài tự luận); Quản lý kết quả thi (xem bảng điểm, xuất báo cáo PDF/Excel).
    • Examinee: Xem thông báo; Xem danh sách bài thi được chỉ định (thời gian làm bài, hướng dẫn); Làm bài thi trực tuyến (giao diện làm bài, đồng hồ đếm ngược, lưu tiến trình làm bài); Nộp bài thi (nộp chủ động hoặc tự động khi hết giờ, nhận thông báo xác nhận); Tra cứu kết quả và xem phản hồi chi tiết.
  • Phân tích sơ đồ Use Case: Trình bày sơ đồ tổng quan và 4 sơ đồ phân rã ca sử dụng chi tiết:
    • Quản lý tài khoản: Ca sử dụng "Xem danh sách tài khoản" bao hàm (<<include>>) ca sử dụng "Tìm kiếm tài khoản"; các ca sử dụng "Tạo mới", "Cập nhật", "Xóa tài khoản" là các nhánh mở rộng (<<extend>>) sau khi đã xem danh sách.
    • Quản lý câu hỏi: Ca sử dụng "Tìm kiếm câu hỏi" thuộc quan hệ <<include>> với "Xem danh sách câu hỏi"; các thao tác tạo mới, cập nhật, xóa mở rộng (<<extend>>) từ màn hình danh sách.
    • Quản lý bài thi: "Tìm kiếm bài thi" nằm trong (<<include>>) "Xem danh sách bài thi"; "Thêm phần thi (Add section)" và "Chọn câu hỏi (Select question)" nằm trong (<<include>>) "Tạo bài thi"; các thao tác tạo/sửa/xóa bài thi mở rộng (<<extend>>) từ danh sách bài thi.
    • Quản lý kết quả thi và Làm bài: Ca sử dụng "Xem chi tiết bài làm" mở rộng từ "Xem danh sách bài làm", và "Chấm điểm" mở rộng từ "Xem chi tiết bài làm". Đối với thí sinh, các thao tác "Bắt đầu làm bài", "Trả lời câu hỏi", "Nộp bài" đều mở rộng (<<extend>>) từ ca sử dụng "Xem danh sách bài thi được phân công".
  • Quy trình nghiệp vụ 25 bước (Business Process): Mô tả chi tiết luồng tương tác tuần tự giữa Admin, Hệ thống và Thí sinh từ khâu tạo bài thi, lưu cơ sở dữ liệu, gán thí sinh, thí sinh nhận bài, làm bài, nộp bài, hệ thống lưu bài làm, admin chấm điểm, hệ thống tính toán điểm số và thí sinh tra cứu kết quả.
  • Yêu cầu phi chức năng:
    • Sử dụng Stored Procedures toàn diện: Hệ thống thiết lập toàn bộ các thao tác nghiệp vụ thông qua Stored Procedures trong MySQL nhằm ngăn chặn triệt để lỗ hổng SQL Injection và tối ưu hóa tốc độ thực thi truy vấn so với các thư viện dựng câu lệnh SQL thông thường.
    • Kiến trúc hướng bảo trì: Áp dụng Clean Architecture và Dependency Injection giúp rút ngắn chu kỳ nâng cấp, kiểm thử và mở rộng hệ thống.

Chapter III: Application development and deployment

Chương III trình bày chi tiết về việc triển khai kiến trúc phần mềm và cấu trúc mã nguồn:

  • Lựa chọn kiến trúc phần mềm: Đặt lên bàn cân so sánh giữa Clean Architecture và kiến trúc N-layer truyền thống:
Tiêu chí so sánh Kiến trúc Clean Architecture Kiến trúc N-layer truyền thống
Phân tách mối quan tâm Mức độ phân tách cao, chia nhỏ thành Presentation, Application, Domain, Infrastructure Thường gộp thành 3 tầng: Presentation, Business Logic, Data Access; độ kết dính cao
Chiều phụ thuộc Nghiêm ngặt theo hướng vào trong; tầng ngoài phụ thuộc tầng trong, Domain là trung tâm Presentation phụ thuộc Business Logic, Business Logic phụ thuộc Data Access
Khả năng kiểm thử Dễ dàng viết Unit Test độc lập cho nghiệp vụ do không dính líu đến UI hay Database Khó kiểm thử độc lập; việc tạo Mock cho Data Access Layer phức tạp
Tính linh hoạt & bảo trì Thay đổi công nghệ ở Infrastructure (như đổi loại CSDL) không ảnh hưởng tới Core Thay đổi ở tầng dữ liệu dễ dẫn đến tác động dây chuyền lên tầng nghiệp vụ
  • Triển khai nguyên lý Đảo ngược phụ thuộc (DIP): Tầng Core đứng ở vị trí trung tâm, định nghĩa các interfaces; tầng Infrastructure triển khai chi tiết các interfaces này. Cơ chế Runtime DI của .NET Core kết nối hai tầng mà không làm đảo lộn dòng phụ thuộc mã nguồn.
  • Thiết kế chi tiết các gói (Package Detail Design) và phân chia cấu trúc thư mục Frontend ReactJS, cấu trúc Backend .NET Core API.

Kết quả và đóng góp

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

  • Hoàn thiện bản thiết kế phân tích hệ thống chi tiết gồm sơ đồ Use Case tổng quan, các sơ đồ phân rã Use Case kèm giải thích quan hệ <<include>>, <<extend>> và bảng đặc tả quy trình nghiệp vụ 25 bước.
  • Xây dựng thành công hệ thống website kiểm tra trực tuyến với 2 cổng giao diện người dùng chuyên biệt cho Quản trị viên và Thí sinh trên nền ReactJS.
  • Xây dựng Backend API hoàn chỉnh trên nền .NET Core tuân thủ mô hình Clean Architecture, chia tách thành 3 dự án độc lập: Api, Core và Infrastructure.
  • Hiện thực hóa quy trình bảo mật hai lớp: Xác thực phiên người dùng qua JSON Web Tokens (JWT Bearer) và phòng chống tấn công SQL Injection bằng cách sử dụng 100% Stored Procedures trong cơ sở dữ liệu MySQL.
  • Tích hợp thành công các thư viện hỗ trợ: MailKit phục vụ gửi email thông báo qua SMTP và Gembox phục vụ trích xuất dữ liệu tài liệu.

2. Đóng góp của đề tài

  • Đồ án đã minh chứng việc áp dụng thành công các chuẩn thiết kế phần mềm doanh nghiệp (Clean Architecture, SOLID - DIP, Dependency Injection) vào bài toán số hóa giáo dục trong nhà trường.
  • Cung cấp một giải pháp khả thi giúp tự động hóa quá trình tổ chức thi, phân bổ đề thi, đếm ngược thời gian làm bài, tự động chấm điểm bài thi trắc nghiệm và quản lý kết quả thi tập trung, minh bạch.

Hạn chế và hướng nghiên cứu tiếp

1. Hạn chế

  • Hệ thống tập trung phần lớn vào việc xử lý các luồng nghiệp vụ cốt lõi và kiến trúc nền tảng; các chức năng tương tác thời gian thực hai chiều giữa thí sinh và giám thị trong lúc làm bài chưa được hoàn thiện sâu.
  • Việc áp dụng Clean Architecture và viết thủ tục lưu trữ (Stored Procedures) thủ công cho toàn bộ nghiệp vụ đòi hỏi chi phí thiết lập ban đầu lớn và thời gian cấu hình phức tạp hơn so với các mô hình đơn giản.

2. Hướng phát triển tiếp

  • Phát triển thêm kênh giao tiếp trực tuyến thời gian thực giữa thí sinh và quản trị viên/giám thị nhằm tiếp nhận thông báo khẩn cấp và giải đáp thắc mắc trong quá trình diễn ra kỳ thi.
  • Bổ sung và nâng cấp các công cụ phân tích và báo cáo nâng cao (Analytics and Reporting Tools) giúp quản trị viên theo dõi các chỉ số hiệu suất thi cử và nhận diện xu hướng học tập của thí sinh.
  • Nghiên cứu tối ưu hóa hiệu năng và mở rộng năng lực xử lý đồng thời để đáp ứng các kỳ thi quy mô lớn với lượng thí sinh truy cập đồng thời cao.

Giá trị tham khảo

Tài liệu đồ án mang lại giá trị tham khảo hữu ích cho:

  1. Sinh viên ngành Kỹ thuật phần mềm, Công nghệ thông tin, Kỹ thuật Máy tính: Tham khảo mô hình phân lớp chuẩn của .NET Core kết hợp Clean Architecture, cách tổ chức thư mục mã nguồn và cách áp dụng nguyên lý Đảo ngược phụ thuộc (DIP) kết hợp Dependency Injection.
  2. Các nhà phát triển hệ thống quản lý học tập và khảo thí (LMS / Online Examination): Tham khảo phương pháp mô hình hóa phân rã Use Case (<<include>>, <<extend>>), đặc tả quy trình nghiệp vụ kiểm tra trực tuyến và giải pháp tối ưu bảo mật truy vấn dữ liệu thông qua Stored Procedures.

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

1. Hệ thống phân quyền cho những tác nhân nào và chức năng của từng tác nhân là gì?

Hệ thống phân chia thành hai tác nhân chính:

  • Administrator (Quản trị viên): Quản lý tài khoản, quản lý ngân hàng câu hỏi (theo chủ đề và độ khó), tạo và quản lý bài thi, gán bài thi cho thí sinh/nhóm, chấm điểm (tự động trắc nghiệm, thủ công tự luận), quản lý kết quả và xuất báo cáo.
  • Candidate/Examinee (Thí sinh): Nhận thông báo, xem danh sách bài thi được gán, làm bài thi trực tuyến với đồng hồ đếm ngược và lưu tiến trình, nộp bài thi, xem điểm số và nhận phản hồi chi tiết.

2. Backend của hệ thống được tổ chức theo mô hình kiến trúc nào và gồm những phân hệ (packages) nào?

Backend được xây dựng trên nền tảng .NET Core áp dụng mô hình Clean Architecture kết hợp nguyên lý Đảo ngược phụ thuộc (DIP), chia thành 3 dự án chính:

  • Api: Điểm tiếp nhận request từ client, chứa Controllers và gói Authentication.
  • Core: Tầng trung tâm chứa logic nghiệp vụ và các mô hình, gồm Entities, Shared, Interfaces và Services.
  • Infrastructure: Triển khai các dịch vụ giao tiếp bên ngoài, gồm Database, Mail, Message Broker và Caches.

3. Tác giả áp dụng giải pháp kỹ thuật nào trong cơ sở dữ liệu để phòng chống tấn công SQL Injection và nâng cao hiệu năng?

Hệ thống sử dụng toàn diện các Stored Procedures (thủ tục lưu trữ) trong cơ sở dữ liệu MySQL cho mọi thao tác nghiệp vụ. Giải pháp này ngăn chặn việc chèn mã độc vào câu truy vấn (SQL Injection) và mang lại tốc độ thực thi truy vấn nhanh hơn so với việc dựng câu lệnh SQL động qua các thư viện thông thường.

4. Nguyên lý Đảo ngược phụ thuộc (DIP) được thể hiện như thế nào giữa tầng Core và Infrastructure?

Trong hệ thống, tầng Core là tầng độc lập nằm ở vị trí thấp nhất (không phụ thuộc vào tầng nào) và định nghĩa các Interfaces cho việc truy xuất dữ liệu cũng như dịch vụ. Tầng Infrastructure phụ thuộc vào Core bằng cách triển khai thực tế (implement) các Interfaces này. Nhờ đó, logic nghiệp vụ không bị phụ thuộc vào các công nghệ hạ tầng cụ thể.

5. Các thư viện Gembox và MailKit đảm nhiệm vai trò gì trong đồ án?

  • Gembox: Được sử dụng để xử lý và tạo các tệp tin tài liệu (như xuất dữ liệu ra file Word/Excel) phục vụ việc quản lý và trích xuất báo cáo kết quả thi.
  • MailKit: Được tích hợp để gửi email tự động qua giao thức SMTP (hỗ trợ xác thực bảo mật SSL/TLS và thư đa phần) nhằm thông báo lịch thi và kết quả cho thí sinh.

Kết luận

Đồ án tốt nghiệp "Building a Website for Online Testing" của tác giả Đỗ Cao Nguyên đã hoàn thành việc phân tích, thiết kế và phát triển thành công một hệ thống khảo thí trực tuyến hoàn chỉnh. Bằng việc ứng dụng mô hình Clean Architecture trên nền tảng .NET Core kết hợp với ReactJS và cơ sở dữ liệu MySQL được bảo vệ bởi Stored Procedures, đồ án đã đưa ra giải pháp kỹ thuật bài bản, đảm bảo tính phân tách mối quan tâm, tính bảo mật và khả năng bảo trì lâu dài. Đây là một tài liệu học thuật tiêu biểu về phương pháp xây dựng ứng dụng web hiện đại phục vụ chuyển đổi số trong giáo dục.