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

Trong bối cảnh công nghệ thông tin và mạng Internet phát triển, nhu cầu trao đổi, thảo luận trực tuyến về các vấn đề kỹ thuật ngày càng gia tăng. Việc tổ chức các diễn đàn trực tuyến cho phép các thành viên kết nối, học hỏi và giải quyết vướng mắc kỹ thuật từ xa mà không bị giới hạn bởi không gian địa lý. Đối với sinh viên và những người làm việc trong ngành công nghệ, việc hình thành một không gian hỏi đáp, chia sẻ kiến thức và thảo luận chuyên môn là một nhu cầu thực tế và cấp thiết. Xuất phát từ thực trạng đó, tác giả Nguyễn Hồng Cường đã thực hiện đồ án tốt nghiệp với đề tài "Xây dựng diễn đàn trao đổi công nghệ sử dụng Spring Framework".

Mục tiêu nghiên cứu và xây dựng ứng dụng được xác định cụ thể trong văn bản:

  1. Xây dựng một diễn đàn trên nền tảng Web nhằm tạo môi trường kết nối, trao đổi, hỏi đáp kiến thức công nghệ cho sinh viên và người làm việc trong lĩnh vực kỹ thuật;
  2. Cung cấp không gian chia sẻ thông tin đời sống, giải trí và thể hiện quan điểm cá nhân về các chủ đề được cộng đồng quan tâm;
  3. Hỗ trợ người dùng truy cập linh hoạt qua các thiết bị thông minh có kết nối Internet để xử lý nhanh các vấn đề kỹ thuật phát sinh.

Để đạt được mục tiêu trên, tác giả xác định 4 nhiệm vụ nghiên cứu chính:

  1. Tìm hiểu yêu cầu ứng dụng;
  2. Tìm hiểu hệ điều hành và công cụ phát triển;
  3. Phân tích và thiết kế ứng dụng;
  4. Cài đặt và kiểm thử hệ thống.
  • Đối tượng nghiên cứu: Quy trình nghiệp vụ, kiến trúc phần mềm và các luồng tương tác của hệ thống diễn đàn trực tuyến; công nghệ lập trình ứng dụng web trên nền tảng Java Enterprise.
  • Phạm vi nghiên cứu: Ứng dụng chạy trên nền tảng trình duyệt web, phục vụ người dùng sử dụng thiết bị kết nối mạng Internet. Đồ án được hoàn thành vào tháng 12 năm 2021 thuộc chương trình đào tạo đại học chính quy khóa 2017 - 2022, chuyên ngành Hệ thống thông tin, Khoa Công nghệ Thông tin 1, Học viện Công nghệ Bưu chính Viễn thông.

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

Khung công nghệ và công cụ phát triển

Đồ án dựa trên các công nghệ và nền tảng phần mềm mã nguồn mở dành cho ngôn ngữ Java:

  • Spring Framework: Framework phát triển ứng dụng phổ biến cho Java Enterprise, do Rod Johnson sáng lập và phát hành lần đầu theo giấy phép Apache 2.0 vào tháng 6 năm 2003. Bản cơ bản có dung lượng khoảng 2MB. Hai nguyên tắc thiết kế trọng tâm của Spring là Dependency Injection (DI - Tiêm phụ thuộc) và Aspect Oriented Programming (AOP - Lập trình hướng khía cạnh). Hệ sinh thái được văn bản liệt kê bao gồm nhiều module như Spring MVC, Spring Data, Spring Security, Spring Boot, Spring Batch, Spring Integration, Spring Session, Spring REST, v.v.
  • Spring MVC: Framework cung cấp kiến trúc Model-View-Controller phục vụ xây dựng ứng dụng web. Luồng xử lý request trong Spring MVC được tác giả tổng hợp gồm: tiếp nhận request qua Front Controller (DispatcherServlet), chuyển giao qua HandlerMapping để xác định controller xử lý, gọi tầng Service/DAO, nhận Model, truyền qua ViewResolver để render trang view (JSP, HTML, JavaScript) và gửi trả về trình duyệt.
  • Hệ quản trị cơ sở dữ liệu MySQL: Hệ quản trị CSDL quan hệ hoạt động theo mô hình Client-Server. Tác giả phân tích các ưu điểm (dễ sử dụng, bảo mật cao, hỗ trợ nhiều chuẩn SQL, tốc độ thực thi nhanh) và chỉ rõ các mặt hạn chế (giới hạn một số chức năng đặc thù, độ tin cậy trong xử lý giao dịch/kiểm toán thấp hơn một số hệ quản trị khác, truy xuất chậm khi dữ liệu lớn đòi hỏi giải pháp chia tải server hoặc lưu bộ nhớ đệm cache).
  • Môi trường phát triển IntelliJ IDEA: Phần mềm IDE của hãng JetBrains hỗ trợ viết mã, tái cấu trúc, gỡ lỗi và quản lý chất lượng mã nguồn Java.

Phương pháp nghiên cứu

  • Phương pháp thu thập và phân tích yêu cầu: Phân loại người dùng, xác định luồng dữ liệu cần hiển thị và phân định các nhóm chức năng nghiệp vụ.
  • Phương pháp mô hình hóa hướng đối tượng (UML): Sử dụng các biểu đồ ca sử dụng (Use Case Diagram), biểu đồ ca sử dụng phân rã, biểu đồ lớp phân tích (Analysis Class Diagram), biểu đồ lớp thiết kế (Design Class Diagram) và biểu đồ tuần tự (Sequence Diagram).
  • Kỹ thuật trích danh từ: Tác giả sử dụng kỹ thuật trích lọc danh từ từ kịch bản ca sử dụng để định danh các lớp thực thể trong hệ thống.
  • Nguồn dữ liệu: Dữ liệu thực nghiệm được tác giả tự nhập thử nghiệm thông qua các kịch bản kiểm thử chức năng trên hệ thống cục bộ.

Thiết kế và triển khai

Hệ thống diễn đàn được thiết kế theo mô hình 3 tầng trên kiến trúc Spring MVC. Tác giả xác định hệ thống có 2 tác nhân chính và 18 ca sử dụng nghiệp vụ được mô tả chi tiết qua bảng dưới đây:

Mã ca Tên ca sử dụng Tác nhân chính Mục đích thực hiện
U1 Đăng nhập Người dùng Xác thực tài khoản vào hệ thống để dùng các tính năng mở rộng
U2 Đăng ký Người dùng Khởi tạo tài khoản thành viên mới
U3 Đăng xuất Người dùng Thoát phiên làm việc của tài khoản
U4 Quên mật khẩu Người dùng Tiếp nhận đường dẫn đặt lại mật khẩu qua email
U5 Tìm kiếm bài viết theo tên Người dùng Tìm kiếm bài viết qua từ khóa trong tiêu đề
U6 Tìm kiếm bài viết theo topic Người dùng Xem danh sách bài viết thuộc chủ đề đã chọn
U7 Tìm kiếm bài viết theo tác giả Người dùng Xem danh sách bài viết của một tác giả cụ thể
U8 Xem nhật ký hoạt động Người dùng Tra cứu lịch sử bài viết, bình luận, tương tác cá nhân
U9 Bình luận Người dùng Đăng nội dung thảo luận bên dưới bài viết
U10 Phản hồi bình luận Người dùng Trả lời bình luận của thành viên khác
U11 Xóa bình luận Người dùng Loại bỏ bình luận đã đăng
U12 Sửa trang cá nhân Người dùng Cập nhật thông tin lý lịch và đổi mật khẩu tài khoản
U13 Theo dõi người dùng Người dùng Theo dõi hoặc hủy theo dõi tài khoản khác
U14 Tạo Topic Người dùng Đăng chủ đề thảo luận mới kèm ảnh đại diện
U15 Viết bài Người dùng Soạn và đăng bài viết mới theo các chủ đề có sẵn
U16 Sắp xếp bài viết Người dùng Lọc bài viết theo thứ tự: Mới nhất (Newest), Hot nhất (Hottest), Cũ nhất (Latest)
U17 Xem thống kê Admin Theo dõi lượng truy cập, thành viên mới, bài viết, bình luận theo tháng
U18 Duyệt bài Admin Phê duyệt (Accept) hoặc từ chối (Reject) bài viết mới

Mô hình dữ liệu của hệ thống được xây dựng từ các lớp thực thể với hệ thống thuộc tính cụ thể:

Tên lớp Danh sách thuộc tính được thiết kế
User userId, username, password, email, isActived, joinTime, description, headUrl, gender, address, fullName, school, job, likeCount, scanCount, postCount, followCount, followerCount, isAdmin, cover
Post postId, title, content, postTime, newestCommentTime, likeCount, createdBy, topicId, status
PostVisits postVisitedId, postId, visitedAt, content
Comment commentId, commentContent, postId, createdBy, isPublish
Reply replyId, commentId, replyContent, createdBy, replyTime, isPublish
ActivityLog logId, userId, replyId, comment, operation, displayedContent, createdTime
Topic topicId, topicName, topicContent, image
Các lớp mở rộng Thông tin tên: firstName, lastName, middleName; Thông tin địa chỉ: city, postalCode, streetAddress, regionId

Các tương tác động trong hệ thống được thể hiện qua các biểu đồ tuần tự, mô tả lời gọi hàm giữa các lớp giao diện (View), đối tượng điều khiển và đối tượng truy cập dữ liệu (DAO):

  • Ca sử dụng Đăng nhập: Home View -> Login View -> UserDAO.checkLogin() -> trả về User Profile View.
  • Ca sử dụng Đăng ký: Register View -> validate() -> UserDAO.saveUser() -> gọi getUserInformation() và hiển thị giao diện.
  • Ca sử dụng Đăng xuất: gọi phương thức deleteSection() để xóa phiên làm việc.

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

Chương I: Giới thiệu đề tài và lựa chọn công nghệ phát triển ứng dụng

Chương I tập trung vào bối cảnh ra đời của diễn đàn công nghệ, phân tích sự cần thiết của việc trao đổi học thuật trực tuyến và nêu rõ lý do lựa chọn Spring Framework nhờ tính chất mã nguồn mở, kiến trúc linh hoạt và cộng đồng hỗ trợ lớn. Tác giả trình bày chi tiết kiến trúc tầng của Spring Framework, nguyên lý hoạt động của DispatcherServlet trong Spring MVC và quy trình xử lý luồng HTTP request. Tiếp đó, tác giả so sánh ưu và nhược điểm của MySQL, phân tích vai trò của IntelliJ IDEA trong quy trình phát triển. Về mặt nghiệp vụ, chương này phân định người dùng thành 4 nhóm chức năng: nhóm xác thực (đăng ký, đăng nhập, quên mật khẩu); nhóm cơ bản không yêu cầu đăng nhập (đọc bài, xem bình luận, tìm kiếm, lọc); nhóm thành viên có đăng nhập (đăng/xóa bài, đăng/xóa bình luận, sửa hồ sơ, theo dõi, thích bài); và nhóm quản trị viên (phê duyệt bài viết, xem biểu đồ thống kê, tạo topic).

Chương II: Phân tích và thiết kế hệ thống diễn đàn online

Chương II là phần trọng tâm về kỹ thuật phân tích thiết kế phần mềm. Tác giả xây dựng biểu đồ use case tổng quát và 14 biểu đồ phân rã chi tiết. Đi kèm với đó là 18 bảng kịch bản sử dụng từng ca nghiệp vụ với các bước thực thi tuần tự, điều kiện tiên quyết, đảm bảo thành công và các nhánh ngoại lệ. Đáng chú ý, các kịch bản đưa ra các giá trị kiểm thử mẫu cụ thể:

  • Tài khoản thử nghiệm: nguyenhongcuong@gmail.com với mật khẩu Hongcuong@1, chuyển đổi mật khẩu thành Hongcuong@2.
  • Tài khoản quản trị: nguyenhongcuong3@gmail.com với mật khẩu Hongcuong@3.
  • Dữ liệu tìm kiếm và phân loại: từ khóa "basic", chủ đề "Java", tác giả "Vito".
  • Thao tác hồ sơ: cập nhật trường công việc (Job) thành "Full-time student".
  • Tạo chủ đề và bài viết: tạo Topic mới "SQLite" với nội dung "SQL basic"; soạn bài viết "SQLite Basic".
  • Nghiệp vụ duyệt bài: Admin phê duyệt bài viết của người dùng "Kante" và từ chối bài viết của người dùng "Kepa".

Trong phần phân tích lớp, tác giả định danh các thực thể bằng kỹ thuật tách danh từ. Tại mục 2.2.1 mô tả quan hệ giữa các lớp, văn bản xuất hiện một đoạn nội dung nhầm lẫn mô tả các thực thể phần mềm thi ngoại ngữ (Reading, Listening, Test, Question, Grammar Topic, Vocabulary Topic), tuy nhiên tại bảng đặc tả thuộc tính 2.21 và các biểu đồ phân tích/thiết kế, tác giả đã quay trở lại đúng các thực thể của hệ thống diễn đàn công nghệ (User, Post, Comment, Reply, ActivityLog, Topic). Cuối chương là hệ thống biểu đồ tuần tự cho các luồng xử lý chính.

Chương III: Cài đặt ứng dụng diễn đàn online với Spring Framework

Chương III trình bày cấu trúc triển khai và kết quả giao diện ứng dụng sau khi cài đặt hoàn thiện. Hệ thống giao diện được thể hiện qua 10 màn hình chức năng cụ thể:

  1. Giao diện trang chủ hiển thị danh sách bài viết và thanh điều hướng;
  2. Giao diện xem chi tiết nội dung bài viết;
  3. Giao diện bình luận, phản hồi bình luận và nút thích (like) bài viết;
  4. Giao diện danh mục các chủ đề (Topic) có sẵn;
  5. Giao diện đăng bài viết mới với các trường tiêu đề, chọn chủ đề và nội dung;
  6. Giao diện chỉnh sửa thông tin cá nhân và mật khẩu;
  7. Giao diện xem trang thông tin cá nhân của người dùng;
  8. Giao diện báo cáo thống kê dành cho quản trị viên;
  9. Giao diện hiển thị danh sách bài viết đang chờ duyệt;
  10. Giao diện đọc chi tiết nội dung bài viết đang trong trạng thái chờ duyệt.

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

Kết quả kỹ thuật đạt được

  • Xây dựng hoàn chỉnh tài liệu phân tích thiết kế hướng đối tượng cho hệ thống diễn đàn trao đổi công nghệ trực tuyến với 2 tác nhân và 18 ca sử dụng nghiệp vụ rõ ràng.
  • Thiết kế hệ thống dữ liệu quan hệ gồm 7 thực thể chính và các thực thể mở rộng, thể hiện đầy đủ các trường thông tin lưu trữ về người dùng, bài viết, lượt truy cập, thảo luận đa cấp và nhật ký tương tác.
  • Triển khai thành công ứng dụng trên nền tảng Spring MVC kết nối CSDL MySQL, hoàn thiện 10 phân hệ giao diện chức năng phục vụ đầy đủ hai vai trò người dùng thường và quản trị viên.
  • Vận hành được quy trình kiểm duyệt nội dung hai bước (người dùng đăng bài -> trạng thái chờ duyệt -> quản trị viên chấp thuận hoặc từ chối) nhằm quản lý chất lượng thông tin trên diễn đàn.

Đóng góp của đồ án

Đồ án đóng góp một mô hình mẫu về việc áp dụng Spring Framework và kiến trúc Spring MVC vào bài toán xây dựng cổng thông tin diễn đàn trực tuyến. Toàn bộ chu trình từ khảo sát yêu cầu, xây dựng kịch bản chi tiết, lập mô hình UML đến triển khai màn hình chức năng được tài liệu hóa cụ thể, phản ánh đúng các chuẩn mực của một đồ án tốt nghiệp đại học ngành Hệ thống thông tin.

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

  • Hạn chế:
    • Về mặt công nghệ lưu trữ, tác giả chỉ ra rằng khi số lượng bản ghi của CSDL MySQL tăng trưởng lớn, tốc độ truy xuất sẽ gặp khó khăn nếu không áp dụng các kỹ thuật chuyên sâu.
    • Về mặt xử lý giao dịch và kiểm toán, hệ quản trị cơ sở dữ liệu MySQL bộc lộ một số giới hạn về độ tin cậy so với các hệ RDBMS chuyên dụng quy mô lớn.
    • Về mặt học thuật và biên tập tài liệu, đồ án tồn tại lỗi sao chép nội dung tại mục 2.2.1 (nhầm lẫn quan hệ giữa các lớp của đề tài kiểm tra ngoại ngữ vào đề tài diễn đàn công nghệ).
  • Hướng nghiên cứu và phát triển tiếp:
    • Nghiên cứu áp dụng kỹ thuật chia tải cơ sở dữ liệu (database sharding/replication) ra nhiều máy chủ để giải quyết vấn đề hiệu năng khi dữ liệu mở rộng.
    • Thiết lập cơ chế tạo bộ nhớ đệm (cache) cho MySQL nhằm tăng tốc độ truy vấn cho các bài viết có lượt truy cập cao.

Giá trị tham khảo

Tài liệu đồ án này có giá trị tham khảo thiết thực cho:

  • Sinh viên chuyên ngành Công nghệ Thông tin, Hệ thống Thông tin, Kỹ thuật Phần mềm: Có thể sử dụng đồ án làm mẫu tham khảo về quy trình phân tích thiết kế phần mềm hướng đối tượng, đặc biệt là cách viết kịch bản ca sử dụng chi tiết (các trường dữ liệu đầu vào, các nhánh ngoại lệ) và chuyển đổi thành biểu đồ lớp.
  • Người học lập trình Java Web: Tham khảo việc tổ chức kiến trúc Spring MVC, luồng đi của dữ liệu qua DispatcherServlet, tầng DAO và cách liên kết thực thể quan hệ trên CSDL MySQL phục vụ bài toán diễn đàn cộng đồng.

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

1. Hệ thống phân chia bao nhiêu nhóm quyền và vai trò cụ thể là gì?

Hệ thống xác định 2 tác nhân chính:

  • Người dùng (User): Có thể đọc bài, tìm kiếm, lọc bài viết; sau khi đăng nhập có thêm quyền viết bài, đăng chủ đề, bình luận, phản hồi, xóa bình luận, theo dõi tài khoản khác và chỉnh sửa hồ sơ.
  • Quản trị viên (Admin): Tiếp cận các chức năng quản trị gồm xem biểu đồ thống kê hệ thống theo tháng và duyệt hoặc từ chối các bài viết mới do người dùng gửi lên.

2. Luồng kiểm duyệt bài viết mới được thiết kế như thế nào?

Khi người dùng soạn bài viết và bấm "Publish", bài viết chưa xuất hiện công khai ngay mà được chuyển sang trạng thái chờ duyệt. Quản trị viên truy cập vào giao diện quản lý, chọn chức năng duyệt bài, đọc nội dung và có hai lựa chọn: bấm "Accept" để công khai bài viết lên trang chủ cho cộng đồng đọc, hoặc bấm "Reject" để từ chối đăng bài.

3. Hệ thống hỗ trợ những tiêu chí sắp xếp bài viết nào?

Tại mục "Order by" trên giao diện chính, người dùng có thể sắp xếp danh sách bài viết theo 3 tiêu chí:

  • Newest: Sắp xếp các bài viết mới nhất giảm dần từ trên xuống;
  • Hottest: Sắp xếp các bài viết có độ tương tác hot nhất giảm dần;
  • Latest: Sắp xếp danh sách theo thứ tự bài viết cũ nhất giảm dần.

4. Thuộc tính của lớp bài viết (Post) quản lý những thông tin gì?

Theo thiết kế của đồ án, lớp Post chứa 9 thuộc tính cơ bản gồm: postId (mã bài viết), title (tiêu đề bài viết), content (nội dung), postTime (thời gian đăng), newestCommentTime (thời gian của bình luận mới nhất), likeCount (số lượt thích), createdBy (mã người tạo bài), topicId (mã chủ đề bài viết thuộc về), và status (trạng thái chờ duyệt hoặc đã từ chối).

Kết luận

Đồ án tốt nghiệp "Xây dựng diễn đàn trao đổi công nghệ sử dụng Spring Framework" của sinh viên Nguyễn Hồng Cường đã giải quyết trọn vẹn bài toán xây dựng cổng thảo luận kỹ thuật trực tuyến trên nền tảng Java Enterprise. Báo cáo thể hiện chi tiết phương pháp phân tích thiết kế hướng đối tượng qua 18 kịch bản ca sử dụng thực tế và mô hình thực thể quan hệ chặt chẽ. Hệ thống phần mềm được cài đặt hoàn chỉnh với các tính năng tương tác đa cấp và phê duyệt bài viết, đáp ứng tốt yêu cầu chuyên môn của chuyên ngành Hệ thống thông tin.