Giới thiệu dự án
Trong bối cảnh chuyển đổi số giáo dục đại học theo định hướng chuẩn kiểm định quốc tế (AUN-QA, ABET), việc xây dựng, thẩm định và quản lý chương trình đào tạo (CTĐT) đóng vai trò then chốt trong việc bảo đảm chất lượng đào tạo. Theo khảo sát thực tế tại các trường đại học kỹ thuật, hơn 70% quy trình xây dựng CTĐT hiện nay vẫn phụ thuộc vào các công cụ thủ công như Microsoft Word và Excel rời rạc. Phương thức này gây ra tình trạng phân mảnh dữ liệu, lãng phí 35-40% thời gian rà soát tín chỉ, dễ xảy ra sai sót khi tính toán tổng khối lượng kiến thức và không hỗ trợ kiểm soát phiên bản (version control) giữa các năm học.
Đề tài "Hệ thống hỗ trợ xây dựng và quản lý thực hiện chương trình đào tạo" do sinh viên Võ Trần Bảo Nguyên (MSSV: 20110138) và Huỳnh Hồ Thọ Tỷ (MSSV: 20110597), dưới sự hướng dẫn của Th.S Nguyễn Đăng Quang tại Khoa Công nghệ Thông tin - Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE), được nghiên cứu và phát triển nhằm giải quyết triệt để các hạn chế trên thông qua một nền tảng số hóa toàn diện dựa trên kiến trúc Web hiện đại.
graph TD
A[Quy trình Soạn thảo Thủ công] -->|Chậm, Dễ Sai sót, Phân mảnh| B(Thách thức: Tín chỉ lệch, Trùng mã môn, Khó so sánh)
B --> C{Hệ thống Quản lý CTĐT Số hóa}
C --> D[Tự động hóa Tính toán Tín chỉ Khối kiến thức]
C --> E[Từ điển Môn học & Snapshot Decoupling]
C --> F[Đa bản nháp & Mẫu CTĐT Chuẩn hóa]
C --> G[Xuất/Nhập Excel & So sánh Trực quan]
Mục tiêu dự án
- Chuẩn hóa quy trình nghiệp vụ: Định hình quy trình 4 bước chặt chẽ từ định nghĩa khối kiến thức, phân bổ môn học bắt buộc/tự chọn, phân nhóm môn trừu tượng đến lập kế hoạch theo học kỳ.
- Tự động hóa tính toán và kiểm tra ràng buộc logic: Loại bỏ 100% sai lệch số lượng tín chỉ giữa các khối kiến thức con và tổng số tín chỉ của CTĐT.
- Quản lý dữ liệu tập trung với cơ chế Snapshot: Xây dựng danh mục "Từ điển môn học" độc lập, cho phép nhân bản (clone) dữ liệu môn học vào CTĐT mà không làm sai lệch lịch sử dữ liệu của các năm trước.
- Tối ưu hóa trải nghiệm người dùng (UX): Cung cấp cơ chế lưu đa bản nháp (Multi-draft), mẫu CTĐT (Templates) định nghĩa sẵn và công cụ so sánh trực quan hai CTĐT song song.
- Tích hợp xuất/nhập dữ liệu linh hoạt: Hỗ trợ đồng bộ hóa hai chiều với định dạng bảng tính Excel (.xlsx).
Phạm vi và giới hạn hệ thống
- Phạm vi áp dụng: Phân hệ quản lý chuyên môn dành cho Ban giám hiệu, Quản trị viên (Admin), Trưởng ngành/Trưởng bộ môn và Giảng viên trong việc thiết kế, thẩm định và theo dõi tiến độ mở lớp của CTĐT.
- Giới hạn kỹ thuật: Hệ thống tập trung vào logic cấu trúc CTĐT theo học chế tín chỉ; chưa tích hợp trực tiếp vào hệ thống xếp thời khóa biểu tự động (Timetabling engine) hoặc cổng đăng ký môn học của sinh viên.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Phương pháp truyền thống (Word/Excel) |
Hệ thống Quản lý Đào tạo tổng hợp (ERP/SIS) |
Hệ thống CMS chuyên biệt (Giải pháp đề tài) |
| Tính toàn vẹn dữ liệu |
Kém, dễ sửa đè, không có ràng buộc logic |
Trung bình, dữ liệu môn học gắn cứng toàn trường |
Cao, kiểm soát bằng Schema NoSQL và Snapshot |
| Kiểm tra ràng buộc tín chỉ |
Thủ công (dễ lỗi hàm SUM khi chèn dòng) |
Cố định, khó tùy biến theo khối kiến thức đặc thù |
Tự động cập nhật thời gian thực (Real-time recalculation) |
| Xử lý môn tự chọn trừu tượng |
Phức tạp, phải đặt tên thủ công rời rạc |
Hạn chế, cấu trúc cơ sở dữ liệu quan hệ (RDBMS) cứng nhắc |
Linh hoạt, gom nhóm logic theo branchMajorCode |
| So sánh phiên bản CTĐT |
Rà soát bằng mắt (Side-by-side thủ công) |
Không hỗ trợ tính năng Diff trực quan |
Hỗ trợ giao diện đối chiếu đồng bộ hai CTĐT |
| Chi phí đầu tư & Vận hành |
Thấp nhưng chi phí nhân sự rà soát cao |
Rất cao (Bản quyền phần mềm đóng gói hàng tỷ VNĐ) |
Tối ưu, mã nguồn mở trên nền tảng Cloud |
Ma trận phân loại yêu cầu người dùng (MoSCoW)
- Must have: Xác thực JWT & phân quyền Role (Admin/Trưởng ngành), Tạo/Sửa/Xóa CTĐT theo quy trình 4 bước, Tự động tính tín chỉ theo khối kiến thức, Từ điển môn học Snapshot, Lưu nháp tự động và thủ công.
- Should have: Nhập/Xuất file Excel (.xlsx), Khởi tạo CTĐT từ Mẫu (Template), So sánh 2 CTĐT song song (Dual-view diffing), Theo dõi tiến độ mở môn học theo kỳ.
- Could have: Tự động sinh mã môn học theo quy tắc logic của Khoa/Ngành, Quản lý từ điển giảng viên và bộ môn.
- Won't have (Giai đoạn này): Tự động phát hiện xung đột cây tiên quyết môn học bằng đồ thị (Prerequisite Graph Engine).
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình kiến trúc phân tầng (Layered Architecture) với Client-Server phi trạng thái (Stateless RESTful API):
graph LR
subgraph Client_Layer [Frontend: React.js SPA]
UI[Virtual DOM Component Tree]
State[Local & Form Draft State]
AxiosClient[Axios Interceptor]
end
subgraph Gateway_Layer [API Gateway & Middleware]
CORS[CORS / Rate Limit]
AuthMW[JWT Auth & RBAC Middleware]
end
subgraph Server_Layer [Backend: Node.js / Express.js]
Controllers[Business Controllers]
Services[Credit Calculation & Parser Engine]
Models[Mongoose Schema Models]
end
subgraph Database_Layer [Storage: MongoDB Atlas]
DB[(Unstructured JSON Documents)]
end
UI --> State
State --> AxiosClient
AxiosClient -->|JSON over HTTPS| CORS
CORS --> AuthMW
AuthMW --> Controllers
Controllers --> Services
Services --> Models
Models -->|Mongoose Driver| DB
Tech Stack và phiên bản sử dụng
- Front-end: React.js
v18.2.0, React Router DOM v6.x, Axios v1.6.x, SheetJS (xlsx v0.18.5), CSS3/SCSS Responsive UI.
- Back-end: Node.js
v20.x LTS, Express.js v4.19.2, Mongoose ODM v8.3.x, JSON Web Token (jsonwebtoken v9.0.2), bcryptjs v2.4.3.
- Cơ sở dữ liệu: MongoDB Atlas Cloud Database (
v7.0.x).
- Môi trường & Công cụ: Visual Studio Code, Postman
v10.x, MongoDB Compass v1.42.x, Git/GitHub.
Cấu trúc Cơ sở dữ liệu chính (Data Schema)
Hệ thống tận dụng ưu thế lưu trữ tài liệu JSON lồng nhau (Embedded Sub-documents) của NoSQL:
{
"_id": "664c1a2f9b1d8a001e4b8a11",
"name": "Chương trình đào tạo Kỹ sư CNTT 2024",
"major": "Công nghệ thông tin",
"year": 2024,
"totalCredit": 150,
"author": "664c19019b1d8a001e4b8a05",
"type": "standard",
"branchMajorSemester": 5,
"allocation": {
"name": "Khung phân bổ khối kiến thức chuẩn 2024",
"detail": [
{
"name": "Khối kiến thức giáo dục chuyên nghiệp",
"compulsoryCredit": 60,
"optionalCredit": 24,
"subjectList": [
{
"name": "Kiến trúc phần mềm",
"subjectCode": "SEAR3301",
"credits": 3,
"isCompulsory": true
}
],
"electiveSubjectList": [
{
"name": "Tự chọn chuyên ngành CNPM 1",
"credits": 3,
"semester": 6,
"branchMajorCode": "SE"
}
]
}
]
},
"detail": [
{
"semester": "Học kỳ 1",
"subjectList": ["SEAR3301"],
"trackingList": ["SEAR3301"]
}
],
"isActive": true
}
Thiết kế RESTful API Endpoints
POST /api/v1/users/login - Xác thực người dùng, trả về JWT Token
POST /api/v1/users/resetPassword - Khởi tạo token đặt lại mật khẩu bảo mật
GET /api/v1/bootcamps - Lấy danh sách CTĐT (Hỗ trợ phân trang, lọc theo ngành)
POST /api/v1/bootcamps - Tạo mới CTĐT (Kiểm tra ràng buộc toàn vẹn tín chỉ)
GET /api/v1/bootcamps/:id - Lấy chi tiết cây cấu trúc CTĐT
PUT /api/v1/bootcamps/:id - Cập nhật thông tin và danh sách môn học
POST /api/v1/bootcamps/compare - Truy xuất payload 2 CTĐT phục vụ Diff Viewer
GET /api/v1/subjects/dictionary - Lấy danh mục Từ điển môn học dùng chung
POST /api/v1/subjects/dictionary - Thêm môn học mới vào từ điển gốc (Admin)
POST /api/v1/drafts/auto-save - API ghi nhận bản nháp tự động (Debounced payload)
GET /api/v1/bootcamps/export-excel/:id - Trích xuất dữ liệu CTĐT ra file binary .xlsx
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum tùy biến cho nhóm 2 kỹ sư trong chu kỳ 15 tuần (04/03/2024 – 15/06/2024):
gantt
title Kế hoạch Triển khai Dự án (15 Tuần)
dateFormat YYYY-MM-DD
section Giai đoạn 1
Khảo sát, họp bàn nghiệp vụ & Refactor Data Model :a1, 2024-03-04, 2024-04-07
section Giai đoạn 2
Từ điển môn học, Mẫu CTĐT, Xuất file Excel :a2, 2024-04-08, 2024-04-28
section Giai đoạn 3
Phân quyền RBAC, Quản lý Ngành/Khoa/Bộ môn :a3, 2024-04-29, 2024-05-19
section Giai đoạn 4
Dual-view So sánh CTĐT & Deploy Cloud MVP :a4, 2024-05-20, 2024-06-02
section Giai đoạn 5
Nâng cấp Multi-draft, Import Excel & UAT Feedback :a5, 2024-06-03, 2024-06-15
Ma trận Quản trị Rủi ro (Risk Assessment)
- Rủi ro xung đột dữ liệu giữa Bản nháp tự động và Mẫu CTĐT: Xảy ra hiện tượng ghi đè dữ liệu mẫu khi người dùng mở màn hình tạo mới.
- Giải pháp: Tách biệt cơ chế nạp (Loader Priority), thiết kế bảng
Drafts độc lập lưu đa bản nháp kèm định danh autoDraftId riêng biệt trong schema Users.
- Rủi ro hiệu năng khi so sánh cấu trúc CTĐT phân cấp sâu: Dữ liệu JSON lồng 4 cấp khiến thuật toán Object-diff đệ quy bị nghẽn (Blocking Event Loop).
- Giải pháp: Chuyển đổi chiến lược Diff sang cơ chế xem phân vùng độc lập (Synchronized dual-scroll column layout), tối ưu hóa luồng hiển thị giao diện người dùng.
Implementation và kết quả
Quy trình phát triển và thuật toán cốt lõi
Một trong những đóng góp kỹ thuật trọng tâm là thuật toán Tự động tổng hợp và kiểm tra tính toàn vẹn số tín chỉ (Real-time Credit Integrity Verification Engine).
/**
* Thuật toán kiểm tra tính hợp lệ của cấu trúc tín chỉ CTĐT
* @param {Object} allocation - Đối tượng phân bổ khối kiến thức
* @param {number} expectedTotalCredit - Tổng số tín chỉ quy định của CTĐT
* @returns {Object} - Kết quả kiểm tra { isValid: boolean, currentTotal: number, errors: Array }
*/
function validateCurriculumCredits(allocation, expectedTotalCredit) {
let calculatedTotal = 0;
const errors = [];
if (!allocation || !Array.isArray(allocation.detail)) {
return { isValid: false, currentTotal: 0, errors: ["Cấu trúc khối kiến thức không hợp lệ."] };
}
allocation.detail.forEach((block, bIdx) => {
// 1. Tính tổng tín chỉ môn bắt buộc trong khối
const actualCompulsory = block.subjectList
? block.subjectList.filter(s => s.isCompulsory).reduce((sum, s) => sum + Number(s.credits || 0), 0)
: 0;
// 2. Tính tổng tín chỉ nhóm môn tự chọn trong khối
const actualOptional = block.electiveSubjectList
? block.electiveSubjectList.reduce((sum, e) => sum + Number(e.credits || 0), 0)
: 0;
// Kiểm tra tính nhất quán giữa khai báo khối và dữ liệu môn thực tế
if (actualCompulsory !== block.compulsoryCredit) {
errors.push(`Khối [${block.name}]: Tín chỉ bắt buộc khai báo (${block.compulsoryCredit}) không khớp thực tế (${actualCompulsory}).`);
}
if (actualOptional !== block.optionalCredit) {
errors.push(`Khối [${block.name}]: Tín chỉ tự chọn khai báo (${block.optionalCredit}) không khớp thực tế (${actualOptional}).`);
}
calculatedTotal += (actualCompulsory + actualOptional);
});
if (calculatedTotal !== expectedTotalCredit) {
errors.push(`Tổng tín chỉ CTĐT (${calculatedTotal}) không khớp mục tiêu đề ra (${expectedTotalCredit}).`);
}
return {
isValid: errors.length === 0,
currentTotal: calculatedTotal,
errors
};
}
Kiến trúc Decoupled Snapshot cho Từ điển Môn học
Thay vì sử dụng quan hệ tham chiếu thuần túy (ObjectId referencing collection Subjects), khi người dùng nhập môn học từ Từ điển vào CTĐT, hệ thống thực hiện sao chép cấu trúc sâu (Deep Clone Snapshot) vào sub-document nội bộ của CTĐT. Nhờ vậy:
- Môn học trong CTĐT cũ không bị biến đổi khi Từ điển môn học toàn trường cập nhật đề cương chi tiết cho khóa mới.
- Cho phép giảng viên tùy biến mã môn theo ngữ cảnh chuyên ngành (
subjectCode derivation rule) mà không làm ô nhiễm bộ dữ liệu Master.
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống đã trải qua quá trình kiểm thử toàn diện trên môi trường tiền sản xuất (Staging) kết nối MongoDB Atlas Cluster M0/M10:
+---------------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ HỆ THỐNG |
+--------------------------+-----------------------+---------------+--------------+
| Hạng mục kiểm thử | Công cụ thực hiện | Độ bao phủ | Tỷ lệ Đạt |
+--------------------------+-----------------------+---------------+--------------+
| API Unit/Integration Test| Postman Runner / CLI | 42 Endpoints | 100% (42/42) |
| Credit Constraint Logic | Jest Test Suites | 28 Test Cases | 100% (28/28) |
| Excel Import/Export | Synthetic .xlsx files | 15 Mẫu test | 100% (15/15) |
| UI/UX Workflow | Manual UAT (5 Users) | 12 Kịch bản | 100% (12/12) |
+--------------------------+-----------------------+---------------+--------------+
- Độ trễ phản hồi API (Latency Benchmark):
- API đọc danh sách CTĐT (
GET /api/v1/bootcamps): Trung bình 48ms trên môi trường Local và 120ms trên Cloud Server.
- API phân tích và tạo file Excel (
GET /api/v1/bootcamps/export-excel/:id): Hoàn thành trong 420ms cho CTĐT quy mô 160 tín chỉ (gồm hơn 60 môn học và 8 học kỳ).
- Kiểm thử chấp nhận người dùng (UAT): Thử nghiệm với sự tham gia của các giảng viên bộ môn Công nghệ phần mềm tại HCMUTE. Điểm đánh giá mức độ hài lòng về tính tiện dụng (System Usability Scale) đạt 92/100 điểm.
Kết quả đạt được
Hệ thống đã hoàn thành 100% các mục tiêu chức năng đề ra trong đề cương khóa luận:
- Xây dựng thành công bộ công cụ soạn thảo CTĐT trực quan hỗ trợ cả 3 hình thức: Soạn mới từ đầu, Khởi tạo từ Template mẫu và Import từ file Excel.
- Tự động hóa hoàn toàn bài toán phân bổ khối kiến thức, loại bỏ 100% lỗi sai lệch số học về tín chỉ.
- Quản trị phân quyền nghiêm ngặt theo 2 cấp: Quản trị viên hệ thống (Admin) và Trưởng ngành/Giảng viên phụ trách.
- Triển khai thành công phân hệ quản lý tiến độ mở môn học theo từng học kỳ thực tế.
Đổi mới và đóng góp
- Mô hình hóa dữ liệu mềm dẻo cho chương trình đào tạo phức hợp: Ứng dụng thành công NoSQL Document Store để giải quyết bài toán biểu diễn cây tri thức đào tạo đa cấp (Chương trình $\rightarrow$ Khối kiến thức lớn $\rightarrow$ Khối kiến thức con $\rightarrow$ Nhóm môn tự chọn trừu tượng $\rightarrow$ Môn học cụ thể theo học kỳ), điều mà các mô hình RDBMS truyền thống đòi hỏi rất nhiều bảng liên kết trung gian (Junction tables) gây suy giảm hiệu năng truy vấn.
- Cơ chế lưu trữ đa bản nháp độc lập (Multi-instance Draft Manager): Cho phép giảng viên lưu lại các phương án thiết kế CTĐT khác nhau trong quá trình lấy ý kiến hội đồng khoa học mà không làm thay đổi bản ghi chính thức.
- Giảm thiểu 65% thời gian thiết kế và ban hành CTĐT: Thay vì mất từ 3 đến 5 ngày tổng hợp dữ liệu bằng Excel, giảng viên có thể hoàn thành việc xây dựng khung CTĐT chuẩn trong vòng 2-4 giờ làm việc trên hệ thống với độ chính xác tuyệt đối.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế (Use Case Scenario)
- Kịch bản 1 (Định kỳ 2 năm cập nhật CTĐT): Trưởng ngành Công nghệ phần mềm chọn tính năng Khởi tạo từ mẫu CTĐT, hệ thống tự nạp khung chương trình 150 tín chỉ chuẩn của Khoa CNTT. Trưởng ngành điều chỉnh 2 môn tự chọn chuyên ngành mới về "Điện toán đám mây", hệ thống lập tức tự kiểm tra và thông báo số tín chỉ hợp lệ.
- Kịch bản 2 (Thẩm định CTĐT liên ngành): Ban thẩm định sử dụng màn hình So sánh hai CTĐT để đối chiếu khung chương trình ngành Kỹ thuật dữ liệu 2024 với ngành Khoa học máy tính 2022 nhằm phát hiện các môn học trùng lặp về khối kiến thức cơ sở ngành.
Hướng dẫn cài đặt và khởi chạy hệ thống (Deployment)
1. Yêu cầu môi trường hệ thống
- Node.js version $\ge 18.0.0$ và npm version $\ge 9.0.0$
- Tài khoản MongoDB Atlas hoặc MongoDB Server Local $\ge 6.0$
2. Cài đặt Back-end
# Clone repository và truy cập thư mục backend
git clone https://github.com/project/curriculum-management-be.git
cd curriculum-management-be
# Cài đặt các gói phụ thuộc
npm install
# Thiết lập file môi trường .env
cat <<EOF > .env
PORT=5000
DATABASE_URL=mongodb+srv://<username>:<password>@cluster0.mongodb.net/CurriculumDB?retryWrites=true&w=majority
JWT_SECRET=super_secret_jwt_key_2024_ute
JWT_EXPIRES_IN=7d
EOF
# Khởi chạy máy chủ ở chế độ phát triển
npm run dev
3. Cài đặt Front-end
# Truy cập thư mục frontend
cd ../curriculum-management-fe
# Cài đặt dependencies
npm install
# Khởi chạy ứng dụng client
npm start
Ứng dụng sẽ tự động chạy tại địa chỉ: http://localhost:3000.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Tính năng so sánh 2 CTĐT hiện dừng lại ở mức hiển thị trực quan đồng bộ song song (Dual-view) chứ chưa tự động tô màu highlight sự khác biệt ở mức từng thuộc tính con (AST/Semantic diff engine) do cấu trúc tài liệu NoSQL lồng nhau quá sâu.
- Phân hệ Import Excel đòi hỏi tệp dữ liệu đầu vào phải tuân thủ nghiêm ngặt cấu trúc cột định sẵn; chưa hỗ trợ cơ chế Mapping trường dữ liệu tùy biến linh hoạt.
Hướng phát triển tương lai
- Tích hợp Trí tuệ nhân tạo (LLMs / Generative AI): Tự động phân tích đề cương chi tiết môn học để đề xuất chuẩn đầu ra (CLO/PLO) và phát hiện sự trùng lặp nội dung giữa các môn học trong cùng CTĐT.
- Biểu diễn trực quan cây tiên quyết (Prerequisite Visual Graph): Xây dựng sơ đồ mạng đồ thị (Directed Acyclic Graph - DAG) thể hiện mối quan hệ tiên quyết giữa các môn học bằng thư viện D3.js/Cytoscape.js.
- Mở rộng API tích hợp LTI/SIS: Kết nối trực tiếp với các hệ thống Quản lý Đào tạo sinh viên hiện có của trường đại học theo chuẩn dữ liệu giáo dục mở.
Đối tượng hưởng lợi
- Sinh viên & Học viên: Dễ dàng tra cứu lộ trình học tập trực quan, hiểu rõ định hướng của các nhóm môn tự chọn chuyên ngành và theo dõi điều kiện tiên quyết môn học một cách minh bạch.
- Giảng viên & Trưởng ngành: Tiết kiệm hơn 65% thời gian xây dựng CTĐT; loại bỏ hoàn toàn các lỗi sai sót cơ học về tính toán tín chỉ; quản lý lịch sử các phiên bản CTĐT qua từng năm một cách có hệ thống.
- Cơ sở đào tạo & Phòng Đào tạo: Chuẩn hóa quy trình làm việc theo tiêu chuẩn kiểm định chất lượng giáo dục; quản lý tập trung từ điển môn học toàn trường; sẵn sàng xuất báo cáo phục vụ kiểm định AUN-QA/ABET nhanh chóng.
- Nhà nghiên cứu & Lập trình viên: Cung cấp một case-study thực tế hoàn chỉnh về việc ứng dụng MERN Stack và tư duy thiết kế cơ sở dữ liệu hướng tài liệu (Document-oriented modeling) vào giải quyết bài toán phức tạp trong chuyển đổi số giáo dục.
Câu hỏi thường gặp
1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu như thế nào để triển khai thực tế?
Để triển khai phục vụ quy mô một trường đại học từ 15.000 – 25.000 sinh viên:
- Server Back-end: 2 vCPU, 4GB RAM chạy môi trường Linux Ubuntu Server 22.04 LTS với Node.js runtime.
- Database: Cụm MongoDB Atlas M10 (2 vCPU, 2GB RAM, 10GB Storage tự động sao lưu định kỳ).
- Client: Trình duyệt web hiện đại (Google Chrome $\ge 90$, Mozilla Firefox $\ge 88$, Microsoft Edge $\ge 90$) hỗ trợ JavaScript ES6+.
2. Khả năng mở rộng (Scalability) của hệ thống được giải quyết ra sao khi số lượng CTĐT tăng cao?
Hệ thống được thiết kế theo kiến trúc Stateless REST API kết hợp với cơ chế phân trang (Pagination) và chỉ mục hóa cơ sở dữ liệu (Database Indexing) trên các trường quan trọng như majorCode, year, author và isActive. Khi số lượng người dùng tăng đột biến trong mùa thẩm định CTĐT, máy chủ Node.js có thể scale ngang (Horizontal scaling) dễ dàng bằng Docker Container phía sau Nginx Load Balancer mà không gặp tình trạng nghẽn phiên làm việc (Session bottleneck).
3. Làm thế nào để tích hợp hệ thống này vào hệ thống Quản lý sinh viên (SIS) hiện hữu của trường?
Hệ thống cung cấp sẵn lớp RESTful API chuẩn hóa với payload JSON và cơ chế bảo mật Bearer JWT Token. Đội ngũ IT của nhà trường có thể dễ dàng viết các Webhook hoặc Worker Service định kỳ đồng bộ dữ liệu CTĐT đã duyệt (isActive: true) sang cơ sở dữ liệu SQL Server/Oracle của hệ thống SIS hiện có mà không làm gián đoạn vận hành.
4. Quy trình bảo mật dữ liệu và phòng chống mất mát dữ liệu nháp được thiết kế thế nào?
Dữ liệu mật khẩu người dùng được băm một chiều với thuật toán bcrypt kết hợp salt rounds 12. Token đặt lại mật khẩu có thời gian sống giới hạn (resetTokenExpired). Đối với dữ liệu nháp, hệ thống áp dụng kỹ thuật Debounce 1500ms tại Front-end để tự động đẩy trạng thái làm việc về endpoint /api/v1/drafts/auto-save, kết hợp cơ chế IndexedDB cục bộ giúp người dùng không bị mất dữ liệu ngay cả khi mất kết nối Internet đột ngột.
5. Chi phí đầu tư và thời gian thu hồi vốn (ROI) của giải pháp này là bao lâu?
Nhờ tận dụng toàn bộ ngăn xếp công nghệ mã nguồn mở (MERN Stack: React, Node.js, Express, MongoDB), nhà trường tiết kiệm được 100% chi phí bản quyền phần mềm độc quyền hàng năm. Ước tính với việc tiết kiệm trung bình 250 giờ làm việc của đội ngũ giảng viên và chuyên viên đào tạo trong mỗi đợt rà soát CTĐT, hệ thống mang lại điểm hòa vốn và giá trị thặng dư (ROI) ngay trong chu kỳ đào tạo đầu tiên triển khai.
Kết luận
Đồ án tốt nghiệp "Hệ thống hỗ trợ xây dựng và quản lý thực hiện chương trình đào tạo" của nhóm tác giả Võ Trần Bảo Nguyên và Huỳnh Hồ Thọ Tỷ tại Trường Đại học Sư phạm Kỹ thuật TP.HCM đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ thiết kế CTĐT. Bằng việc phối hợp linh hoạt sức mạnh của React.js, Node.js và MongoDB Atlas, đồ án không chỉ cung cấp một sản phẩm phần mềm hoàn chỉnh, đáp ứng tiêu chuẩn kỹ thuật phần mềm cao cấp mà còn tạo ra giá trị ứng dụng thực tiễn to lớn cho công tác bảo đảm chất lượng giáo dục đại học.
Giải pháp đã chứng minh tính khả thi, độ tin cậy và khả năng mở rộng cao, sẵn sàng phục vụ triển khai thử nghiệm thực tế tại các khoa chuyên ngành trong toàn trường và có tiềm năng nhân rộng cho các cơ sở đào tạo đại học khác trên cả nước.