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

Khóa luận tốt nghiệp "Tìm hiểu Flutter và xây dựng app quản lý lớp học" do sinh viên Lâm Hoàng An (MSSV: 18110073) và Đào Hồng Vinh (MSSV: 18110239), ngành Công nghệ thông tin, Khoa Đào tạo Chất lượng cao thuộc Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh thực hiện dưới sự hướng dẫn của TS. Huỳnh Xuân Phụng vào tháng 06 năm 2022.

Bối cảnh thực tiễn của đề tài xuất phát từ giai đoạn các cơ sở giáo dục phải nhiều lần tạm dừng việc đến trường trực tiếp để phòng chống dịch bệnh COVID-19. Thực tế này thúc đẩy học sinh, sinh viên, giáo viên và phụ huynh thích nghi với mô hình giáo dục trực tuyến, đưa phương thức dạy và học từ xa trở thành xu hướng tất yếu trong việc triển khai kế hoạch năm học. Nhóm tác giả nhận định việc ứng dụng công nghệ đóng vai trò quan trọng trong việc nâng cao hiệu quả giảng dạy và tạo trải nghiệm học tập mới, đặc biệt qua các nền tảng kiểm tra trực tuyến phổ biến như Kahoot! và Quizizz. Từ khảo sát hiện trạng:

  • Kahoot!: Nền tảng hoạt động trên nền web, hỗ trợ thiết kế trắc nghiệm và cho phép nhiều người tham gia cùng lúc, công bố kết quả trực tuyến theo thời gian thực và tương thích đa thiết bị kết nối mạng.
  • Quizizz: Ứng dụng kiểm tra kiến thức đa môn học, phân cấp độ câu hỏi, hỗ trợ việc học tại nhà cũng như trên lớp thông qua việc chia sẻ bộ câu hỏi giữa giáo viên và phụ huynh.

Từ khảo sát trên, đề tài xác định các mục tiêu và nhiệm vụ nghiên cứu cụ thể:

  1. Nghiên cứu lý thuyết chuyên môn về các công nghệ: Flutter, NodeJS, NestJS, MongoDB, Socket.IO và ReactJS.
  2. Tìm hiểu thư viện Mongoose nhằm tạo mô hình dữ liệu (Model) cho cơ sở dữ liệu MongoDB.
  3. Nghiên cứu NestJS để xây dựng giao diện lập trình ứng dụng (API) và xử lý kết nối thời gian thực qua giao thức WebSocket (Socket.IO).
  4. Nghiên cứu ReactJS để xây dựng giao diện ứng dụng đơn trang (Single Page Application - SPA) phục vụ trang quản trị.
  5. Tìm hiểu quy trình đóng gói và phát hành ứng dụng (build app) để chuẩn bị triển khai lên các kho ứng dụng di động Google Play (CH Play) và Apple App Store.
  6. Kết hợp các thành phần công nghệ trên để xây dựng sản phẩm phần mềm di động "App trắc nghiệm Flutter", hỗ trợ tạo lập lớp học, quản lý lộ trình, kiểm tra trắc nghiệm và trao đổi thảo luận.
  7. Soạn thảo tài liệu hướng dẫn cài đặt và thực hiện kiểm thử phần mềm.

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

  • Đối tượng nghiên cứu: Quy trình quản lý lớp học trực tuyến, cơ chế tổ chức kiểm tra trắc nghiệm tương tác thời gian thực và kiến trúc phát triển ứng dụng di động đa nền tảng kết hợp hệ thống dịch vụ backend.
  • Phạm vi không gian: Nghiên cứu và triển khai thử nghiệm tại Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh.
  • Phạm vi thời gian: Kế hoạch thực hiện đề tài diễn ra từ ngày 07/03/2022 đến ngày 22/06/2022, phân chia theo 7 mốc tiến độ chính:
    1. Từ 07/03/2022 đến 20/03/2022: Xây dựng tính năng nhắn tin (chat).
    2. Từ 21/03/2022 đến 10/04/2022: Phát triển tính năng bài viết blog, bình luận và bày tỏ cảm xúc.
    3. Từ 11/04/2022 đến 24/04/2022: Xây dựng tính năng điểm danh, nộp bài tập và tải bài nộp dành cho chủ lớp học.
    4. Từ 25/04/2022 đến 15/05/2022: Phát triển chức năng xem lịch, theo dõi hạn nộp (deadline) và lịch điểm danh.
    5. Từ 16/05/2022 đến 29/05/2022: Tích hợp 4 định dạng câu hỏi kiểm tra (chọn một đáp án, chọn nhiều đáp án, đúng/sai, kéo thả).
    6. Từ 30/05/2022 đến 12/06/2022: Bổ sung khả năng đính kèm tệp hình ảnh và âm thanh vào câu hỏi.
    7. Từ 13/06/2022 đến 22/06/2022: Soạn thảo báo cáo khóa luận và hoàn chỉnh sản phẩm.

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

Khóa luận thiết lập nền tảng kỹ thuật dựa trên các công nghệ phần mềm chuyên biệt:

  • Flutter và ngôn ngữ Dart: Framework mã nguồn mở do Google phát triển, cho phép xây dựng ứng dụng biên dịch nguyên bản (native) trên nhiều nền tảng (iOS, Android, Web, Desktop) từ một cơ sở mã nguồn duy nhất. Ưu điểm được nhóm tác giả lựa chọn gồm tính năng tải lại nóng (Hot Reload) giúp rút ngắn chu kỳ thử nghiệm và sửa lỗi giao diện; hệ thống thành phần giao diện tích hợp sẵn theo tiêu chuẩn Material Design và Cupertino; khả năng tích hợp trực tiếp với SDK nền tảng để sử dụng mã nguồn Java, Kotlin, Swift hoặc Objective-C.
  • NodeJS: Môi trường thực thi mã nguồn mở phía máy chủ chạy trên nền tảng V8 JavaScript Engine, được Ryan Dahl phát hành năm 2009. Cơ chế xử lý đơn luồng (single-thread) kết hợp I/O bất đồng bộ không chặn (non-blocking I/O) giúp tiết kiệm bộ nhớ RAM và tối ưu hóa tài nguyên phần cứng cho các ứng dụng nhiều kết nối đồng thời. Văn bản cũng nêu rõ giới hạn: NodeJS không thích hợp cho các tác vụ tính toán nặng ngốn tài nguyên CPU như mã hóa/giải mã video hoặc chuyển đổi định dạng tệp.
  • NestJS và Mongoose: Framework backend hướng đối tượng xây dựng trên nền NodeJS hỗ trợ viết API cấu trúc module hóa, kết hợp thư viện ánh xạ đối tượng Mongoose để quản lý sơ đồ thực thể trong MongoDB.
  • MongoDB: Hệ quản trị cơ sở dữ liệu NoSQL hướng tài liệu (document-oriented), lưu trữ dữ liệu dưới cấu trúc BSON/JSON thành các cặp khóa-giá trị (key-value) được đánh chỉ mục trực tiếp trên bộ nhớ RAM. Các đặc tính bao gồm khả năng mở rộng quy mô ngang qua kỹ thuật phân mảnh (Sharding) và cơ chế lược đồ động. Các hạn chế được ghi nhận bao gồm việc không đảm bảo đầy đủ tính chất ACID nghiêm ngặt như hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), tiêu tốn bộ nhớ do lặp lại các trường khóa và giới hạn dung lượng kích thước tối đa cho mỗi tài liệu (document) là 16MB.

Phương pháp nghiên cứu thực tế được triển khai:

  • Phương pháp nghiên cứu lý thuyết: Thu thập, phân tích tài liệu kỹ thuật trực tuyến và giáo trình chuyên sâu về Flutter, Dart, NestJS, Socket.IO và cơ sở dữ liệu NoSQL MongoDB.
  • Phương pháp phân tích nghiệp vụ và khảo sát hiện trạng: Nghiên cứu cơ chế vận hành, cấu trúc phòng thi và luồng tương tác thực tế từ các ứng dụng giáo dục Kahoot! và Quizizz để mô hình hóa quy trình tổ chức bài kiểm tra trắc nghiệm.
  • Phương pháp mô hình hóa hướng đối tượng và thiết kế hệ thống: Sử dụng ngôn ngữ mô hình hóa thống nhất (UML) để xây dựng biểu đồ trường hợp sử dụng (Use-case Diagram), biểu đồ trình tự (Sequence Diagram), ma trận phân quyền và thiết kế chi tiết các màn hình giao diện.
  • Phương pháp kiểm thử phần mềm: Thiết lập các bộ kịch bản kiểm thử hộp đen (Black-box Testcases) đánh giá tính đúng đắn của các luồng nghiệp vụ trên hệ thống.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình kiến trúc phân tầng kết nối client-server thông qua giao thức HTTP RESTful API và WebSocket phục vụ tính năng truyền thông thời gian thực. Giao diện ứng dụng di động phía người dùng được xây dựng hoàn toàn bằng Flutter, kết nối đến dịch vụ máy chủ NestJS và cơ sở dữ liệu MongoDB.

Ma trận phân quyền hệ thống

Hệ thống phân chia quyền hạn truy cập thành 4 nhóm tác nhân chính:

  1. Guest (Khách vãng lai): Người dùng chưa xác thực danh tính.
  2. User (Học viên/Người dùng): Người dùng đã đăng ký và xác thực tài khoản.
  3. Host-room (Chủ phòng/Giảng viên): Người dùng tạo lập lớp học, sở hữu toàn bộ quyền quản trị trong phạm vi lớp học đó.
  4. Admin (Quản trị viên hệ thống): Quản lý tổng thể danh mục lớp học trên toàn nền tảng.
STT Tên chức năng Phân loại Khách (Guest) Người dùng (User) Chủ phòng (Host-room) Quản trị viên (Admin)
1 Đăng nhập hệ thống Chức năng mới X X X X
2 Đăng ký tài khoản Chức năng mới X
3 Viết bài viết blog Chức năng mới X X
4 Tương tác blog (thích, bình luận) Chức năng mới X X
5 Nhắn tin trao đổi trong lớp Chức năng mới X X
6 Quản lý thông tin cá nhân Nâng cấp X X
7 Tham gia lớp học Chức năng mới X* X*
8 Rời khỏi lớp học Chức năng mới X* X*
9 Quản lý lớp học (học viên) Chức năng mới X* X*
10 Quản lý lớp học (chủ lớp) Chức năng mới X*
11 Quản lý bộ đề kiểm tra Chức năng mới X*
12 Tham gia làm bài kiểm tra Chức năng mới X* X*
13 Tạo bài kiểm tra trực tuyến Chức năng mới X*
14 Thanh toán phí tham gia lớp Chức năng mới X* X*
15 Phê duyệt danh sách lớp học Chức năng mới X
16 Điểm danh và nộp bài tập Chức năng mới X* X*
17 Nhập bộ đề từ tệp CSV Chức năng mới X*
18 Xuất dữ liệu bài kiểm tra Chức năng mới X X

Ghi chú ký hiệu: X là toàn quyền truy cập (Full access); X* là quyền hạn được phân bổ theo vai trò thực tế trong từng lớp học.

Yêu cầu phi chức năng và an toàn hệ thống

Các chỉ số kỹ thuật vận hành của hệ thống được quy định cụ thể:

  • Năng lực chịu tải hệ thống: Đáp ứng định mức xử lý 1.000 lượt yêu cầu (requests) trong một ngày.
  • Số lượng người dùng đồng thời (CCU): Mức tải đỉnh (Peak CCU) đạt 50 người dùng đồng thời trong khung thời gian từ 8:00 đến 8:30 sáng hàng ngày; mức tải trung bình (Average CCU) đạt khoảng 20 người dùng đồng thời.
  • Yêu cầu bảo mật: Phân quyền người dùng theo vai trò; mã hóa chuỗi ký tự mật khẩu lưu trữ trong cơ sở dữ liệu; sử dụng mã định danh xác thực (token) để kiểm soát phiên truy cập của người dùng đối với các lệnh gọi API.

Thiết kế kịch bản kiểm thử (Testcase)

Hệ thống được thiết kế danh mục 24 bảng kịch bản kiểm thử chức năng (từ Bảng 76 đến Bảng 99) kiểm soát toàn diện các trường hợp xử lý ngoại lệ và luồng thao tác chuẩn:

  • Xác thực tài khoản: Kiểm thử đăng ký thành công, đăng ký thất bại do nhập sai định dạng thư điện tử (email), đăng ký thất bại do địa chỉ email đã tồn tại; kiểm thử đăng nhập thành công, đăng nhập thất bại do sai thông tin xác thực, để trống mật khẩu hoặc để trống email.
  • Quản lý lớp học: Tạo lớp học thành công khi điền đủ dữ liệu; kiểm thử xác thực dữ liệu đầu vào khi để trống tên lớp học, để trống chủ đề, để trống phần giới thiệu hoặc để trống học phí; kiểm thử tham gia lớp học thành công và thất bại.
  • Hoạt động kiểm tra trắc nghiệm: Kiểm thử tham gia phòng thi qua đường dẫn thông báo hệ thống (thành công và thất bại); kiểm thử tham gia kiểm tra khi người dùng nhập sai mã định danh phòng thi (PIN code).
  • Quản lý thông tin và nghiệp vụ lớp học: Xem và cập nhật hồ sơ cá nhân (thay đổi họ tên, số điện thoại, mô tả bản thân, cập nhật ảnh đại diện); thực hiện điểm danh trực tuyến theo yêu cầu của chủ phòng và nộp bài tập đính kèm tệp.

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

Chương 1: Giới thiệu

Chương mở đầu trình bày tính cấp thiết của đề tài trong bối cảnh giáo dục thời kỳ bình thường mới hậu COVID-19. Nội dung tập trung phân tích hiện trạng hai ứng dụng trắc nghiệm phổ biến là Kahoot! và Quizizz nhằm định vị mục tiêu xây dựng một ứng dụng di động tích hợp toàn diện hơn giữa quản lý lớp học và thi trắc nghiệm. Chương này xác định rõ mục đích nghiên cứu, kết quả dự kiến đạt được cho từng tác nhân (Guest, User, Host-room, Admin), giới hạn phạm vi nghiên cứu xoay quanh công nghệ NestJS và Flutter, đồng thời thiết lập phương pháp tiếp cận dự án.

Chương 2: Cơ sở lý thuyết

Chương 2 tổng hợp kiến trúc và đặc điểm kỹ thuật của các nền tảng công nghệ nền tảng:

  • Giới thiệu môi trường NodeJS, cơ chế đơn luồng, kiến trúc xử lý sự kiện I/O bất đồng bộ và các trường hợp không nên áp dụng NodeJS (ứng dụng tính toán ngốn CPU).
  • Trình bày định nghĩa framework Flutter, phân tích lý do lựa chọn Flutter thay vì các giải pháp như React Native hoặc Native thuần túy (tính năng Hot Reload, giao diện xây dựng từ hệ thống widget Material và Cupertino, khả năng tương tác trực tiếp với API nền tảng).
  • Khái quát hệ quản trị cơ sở dữ liệu MongoDB, cấu trúc lưu trữ dữ liệu dạng tài liệu JSON/BSON, cơ chế mở rộng Sharding, cùng các nhược điểm liên quan đến việc tiêu tốn bộ nhớ, không hỗ trợ phép nối (join) dẫn đến dư thừa dữ liệu và giới hạn dung lượng tài liệu 16MB.

Chương 3: Tổng quan

Chương 3 thiết lập khung kiến trúc tổng thể cho toàn bộ phần mềm:

  • Cung cấp sơ đồ hệ thống và hệ thống biểu đồ trường hợp sử dụng (Use-case Diagram) chi tiết cho từng tác nhân: Khách vãng lai, Người dùng, Chủ phòng học và Quản trị viên.
  • Liệt kê danh mục 16 nhóm chức năng phần mềm kèm trạng thái phiên bản (chức năng phát triển mới hoặc nâng cấp).
  • Xây dựng ma trận phân quyền chi tiết (Permission matrix) phân định rõ các tác vụ truy cập tự do, truy cập theo vai trò và quyền hạn quản trị.
  • Xác định hệ thống chỉ số phi chức năng (1.000 request/ngày, 50 Peak CCU, 20 Average CCU, cơ chế token xác thực và mã hóa mật khẩu) cùng các giả thiết, ràng buộc pháp lý, chi phí và phân tích rủi ro trong quá trình phát triển dự án.

Chương 4: Mô tả yêu cầu

Chương 4 chiếm dung lượng lớn nhất trong khóa luận, mô tả chi tiết quy trình nghiệp vụ và các ca sử dụng thành phần:

  • Khái quát sơ đồ quy trình nghiệp vụ tổng thể của hệ thống.
  • Phân tích chi tiết từng trường hợp sử dụng thông qua các bảng đặc tả yêu cầu, tiền điều kiện, tác nhân kích hoạt, các bước thực hiện tuần tự, biểu đồ tuần tự (Sequence Diagram) và biểu đồ hoạt động (Activity Diagram).
  • Đặc tả màn hình giao diện người dùng tương ứng với từng chức năng thông qua các bảng liệt kê thành phần điều khiển (Control, Button, Label, Image, Icon): chức năng xem thông tin lớp học, tham gia lớp học, báo xấu lớp học vi phạm, rời lớp học, xem lộ trình học tập, tham gia phòng thi trực tuyến, xem thống kê tỷ lệ chọn đáp án, tạo bài tập, tạo điểm danh, xem lịch sử kiểm tra.
  • Quy định chi tiết cấu trúc quản lý đề kiểm tra với 4 định dạng câu hỏi chuyên biệt: câu hỏi một lựa chọn, câu hỏi nhiều lựa chọn, câu hỏi dạng đúng/sai và câu hỏi dạng kéo thả đáp án; hỗ trợ tích hợp tệp tin đa phương tiện (hình ảnh, âm thanh) vào nội dung câu hỏi.
  • Đặc tả quy trình xác thực (đăng ký, đăng nhập), chức năng viết và tương tác bài viết blog trên bảng tin chung, cùng nghiệp vụ duyệt mở hoặc khóa lớp học của Quản trị viên.

Chương 5: Testcase

Chương 5 hệ thống hóa toàn bộ công tác bảo đảm chất lượng thông qua bảng dữ liệu kiểm thử từ Bảng 76 đến Bảng 99. Mỗi ca kiểm thử được chuẩn hóa với các trường thông tin: Mã kiểm thử, Tên chức năng, Tiền điều kiện, Các bước thực hiện, Dữ liệu đầu vào, Kết quả mong đợi và Kết quả thực tế. Nội dung bao phủ các tình huống thao tác chuẩn (Positive Test) và các kịch bản phát sinh lỗi ngoại lệ (Negative Test) đối với tất cả module chức năng chính của ứng dụng.

Chương 6: Kết luận

Chương cuối cùng tổng kết các hạng mục đã hoàn thành của đồ án tốt nghiệp, chỉ ra các ưu điểm về mặt giao diện và tính năng tương tác thời gian thực, đồng thời thẳng thắn thừa nhận các hạn chế kỹ thuật chưa thể khắc phục. Chương này cũng trình bày bảng thống kê khó khăn và giải pháp xử lý trong quá trình xây dựng phần mềm, từ đó vạch ra các định hướng nâng cấp trong tương lai.

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

Khóa luận đã hoàn thành các mục tiêu đề ra về mặt nghiên cứu lý thuyết và hiện thực hóa sản phẩm phần mềm:

  • Xây dựng thành công ứng dụng di động đa nền tảng: Triển khai ứng dụng "App trắc nghiệm Flutter" với giao diện người dùng hoàn chỉnh, hỗ trợ các quy trình quản trị lớp học, trao đổi học thuật và thi trắc nghiệm trực tuyến.
  • Hiện thực hóa hệ thống câu hỏi trắc nghiệm đa dạng: Xây dựng thành công 4 định dạng câu hỏi tương tác gồm câu hỏi một lựa chọn, nhiều lựa chọn, đúng/sai và câu hỏi tương tác kéo thả đáp án; cho phép đính kèm hình ảnh và âm thanh minh họa trực tiếp vào đề thi.
  • Thiết lập hạ tầng kết nối thời gian thực: Ứng dụng NestJS và Socket.IO phục vụ việc điều phối phòng kiểm tra trực tuyến, đồng bộ hóa thời gian làm bài, nhận thông báo đẩy tức thời và thống kê biểu đồ tỷ lệ lựa chọn phương án của người học sau khi nộp bài.
  • Tích hợp các tiện ích quản lý lớp học: Cung cấp tính năng điểm danh học viên, tạo hạn nộp bài tập, nộp tệp bài làm trực tiếp trên ứng dụng, theo dõi tiến độ lộ trình học tập và kênh nhắn tin nội bộ cho từng lớp học.
  • Tích hợp kênh trao đổi và thanh toán: Xây dựng bảng tin blog hỗ trợ người dùng đăng bài thảo luận, thả biểu cảm và bình luận; bước đầu thiết lập phương thức thanh toán học phí tham gia lớp học qua cổng thanh toán MoMo.

Về mặt đóng góp so với các nghiên cứu và ứng dụng khảo sát: Khóa luận không dừng lại ở mô hình thi trắc nghiệm đơn thuần như Kahoot! hay Quizizz mà đã kết hợp giữa mô hình phòng thi tương tác với các nghiệp vụ quản trị lớp học truyền thống (lộ trình, bài tập, điểm danh, bảng tin học tập và phân quyền chi tiết giữa học viên, chủ phòng và quản trị viên).

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

Các hạn chế được văn bản đề tài ghi nhận:

  • Giới hạn về mặt công nghệ lưu trữ NoSQL MongoDB: Việc không tuân thủ hoàn toàn mô hình ACID khiến hệ thống tiềm ẩn nguy cơ thiếu nhất quán dữ liệu ở các giao dịch phức tạp; việc thiếu vắng các phép nối (join) quan hệ dẫn đến hiện tượng trùng lặp và dư thừa dữ liệu; ràng buộc kích thước bản ghi không được vượt quá 16MB cho mỗi tài liệu.
  • Giới hạn hạ tầng xử lý: Môi trường NodeJS không tối ưu cho các tác vụ xử lý tệp tin hoặc giải mã tính toán nặng, đòi hỏi các dịch vụ xử lý nền chuyên biệt nếu mở rộng khối lượng dữ liệu lớn.
  • Khả năng thương mại hóa thực tế: Quy trình kết nối thanh toán học phí qua cổng MoMo và quy trình đóng gói phát hành ứng dụng lên các kho ứng dụng trực tuyến Google Play và App Store mới dừng lại ở mức độ nghiên cứu quy trình và thử nghiệm giới hạn, chưa triển khai rộng rãi cho người dùng cuối.

Hướng phát triển tiếp theo của đề tài:

  • Nâng cấp và tối ưu hóa hệ thống máy chủ, cải thiện hiệu năng xử lý của các kết nối Socket.IO nhằm nâng cao ngưỡng chịu tải số người dùng truy cập đồng thời (vượt mức 50 CCU).
  • Mở rộng thêm các dạng câu hỏi kiểm tra chuyên sâu khác và hoàn thiện công cụ phân tích kết quả học tập chi tiết.
  • Hoàn tất các thủ tục kỹ thuật để đóng gói và phát hành chính thức phiên bản ứng dụng lên hệ thống CH Play (Android) và App Store (iOS).
  • Hoàn thiện giao diện web đơn trang (SPA) bằng ReactJS dành riêng cho công tác quản trị cấp cao của Admin và chủ phòng học.

Giá trị tham khảo

Tài liệu khóa luận tốt nghiệp này cung cấp nguồn tư liệu học thuật và thực tiễn hữu ích cho:

  • Sinh viên chuyên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Đặc biệt là những sinh viên đang bắt đầu tìm hiểu quy trình xây dựng ứng dụng di động đa nền tảng bằng Flutter kết hợp với dịch vụ máy chủ NestJS và cơ sở dữ liệu MongoDB.
  • Người thực hiện các đề tài phần mềm quản lý giáo dục trực tuyến: Cung cấp tài liệu tham khảo chi tiết về cách thức phân tích yêu cầu nghiệp vụ, xây dựng biểu đồ trường hợp sử dụng (Use-case), thiết kế biểu đồ trình tự (Sequence Diagram) và ma trận phân quyền người dùng.
  • Phần đáng tham khảo nhất trong văn bản: Chương 4 (Mô tả yêu cầu) với các bảng đặc tả chi tiết thuộc tính màn hình và luồng dữ liệu; cùng Chương 5 (Testcase) cung cấp khung kịch bản kiểm thử hộp đen chi tiết gồm 24 bảng mẫu chuẩn hóa cho các chức năng xác thực, kiểm tra trắc nghiệm và quản lý dữ liệu người dùng.

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

1. Khóa luận hỗ trợ những định dạng câu hỏi trắc nghiệm nào trong ứng dụng?
Hệ thống cho phép người tạo lớp học (Host-room) thiết kế 4 định dạng câu hỏi trắc nghiệm riêng biệt: câu hỏi một lựa chọn, câu hỏi nhiều lựa chọn, câu hỏi dạng đúng/sai và câu hỏi dạng kéo thả đáp án. Cả 4 loại câu hỏi này đều hỗ trợ gắn kèm hình ảnh và âm thanh trực tiếp vào nội dung.

2. Các chỉ số về yêu cầu phi chức năng và năng lực chịu tải của hệ thống được quy định như thế nào?
Theo bảng đặc tả yêu cầu phi chức năng tại Chương 3, hệ thống được thiết kế với định mức xử lý 1.000 request/ngày. Mức độ truy cập đồng thời tại thời điểm tải đỉnh (Peak CCU) là 50 CCU trong khung giờ từ 8:00 đến 8:30 sáng, và mức độ truy cập đồng thời trung bình (Average CCU) là khoảng 20 CCU.

3. Kiến trúc kỹ thuật và ngăn xếp công nghệ (tech stack) được sử dụng để xây dựng hệ thống gồm những gì?
Ứng dụng phía người dùng di động được phát triển bằng framework Flutter (ngôn ngữ Dart). Hệ thống dịch vụ phía máy chủ (backend) sử dụng môi trường NodeJS kết hợp framework NestJS để viết API RESTful và Socket.IO xử lý thời gian thực. Cơ sở dữ liệu sử dụng hệ quản trị NoSQL MongoDB thông qua thư viện mô hình hóa dữ liệu Mongoose. Phía giao diện quản trị web sử dụng ReactJS để xây dựng ứng dụng đơn trang (SPA).

4. Ứng dụng phân quyền cho những nhóm tác nhân nào và có những cơ chế bảo mật gì?
Hệ thống phân quyền chi tiết cho 4 nhóm tác nhân gồm: Khách (Guest), Người dùng (User), Người tạo lớp học (Host-room) và Người quản lý (Admin). Về bảo mật, hệ thống áp dụng cơ chế xác thực phiên làm việc bằng chuỗi mã xác thực (token), phân quyền kiểm soát truy cập theo vai trò trong từng lớp học và thực hiện mã hóa bảo vệ mật khẩu của người dùng.

5. Khóa luận đã khảo sát những ứng dụng thực tế nào và rút ra nhược điểm công nghệ gì của NodeJS và MongoDB?
Đề tài tiến hành khảo sát chức năng của hai ứng dụng kiểm tra trực tuyến phổ biến là Kahoot! và Quizizz. Về mặt công nghệ, nhóm tác giả chỉ ra NodeJS có nhược điểm lớn khi xử lý các tác vụ tốn tài nguyên vi xử lý (CPU) như mã hóa/chuyển đổi tệp tin video; trong khi MongoDB bị hạn chế do không tuân thủ hoàn toàn mô hình giao dịch ACID, không hỗ trợ phép nối dữ liệu quan hệ (join) gây dư thừa thông tin và giới hạn dung lượng bản ghi ở mức tối đa 16MB cho mỗi tài liệu.

Kết luận

Khóa luận tốt nghiệp "Tìm hiểu Flutter và xây dựng app quản lý lớp học" của sinh viên Lâm Hoàng An và Đào Hồng Vinh đã hoàn thành đầy đủ mục tiêu kết hợp công nghệ di động Flutter với hệ thống phụ trợ NestJS và MongoDB để giải quyết bài toán quản lý lớp học và thi trắc nghiệm trực tuyến. Báo cáo thể hiện quy trình phân tích và thiết kế phần mềm bài bản từ mô hình hóa trường hợp sử dụng, thiết lập ma trận phân quyền đến xây dựng hệ thống kịch bản kiểm thử chi tiết. Mặc dù còn một số giới hạn về mặt hạ tầng chịu tải và khả năng hoàn thiện cổng thanh toán thực tế, đề tài đã mang lại một sản phẩm ứng dụng hoàn chỉnh cùng cấu trúc tài liệu kỹ thuật có giá trị tham khảo rõ ràng cho sinh viên ngành Công nghệ thông tin.