Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh phương thức làm việc và hợp tác dự án ngày càng phát triển, nhu cầu kết nối nguồn nhân lực đa dạng kỹ năng và chuyên môn trở thành một vấn đề thực tiễn quan trọng đối với các cá nhân, nhóm nghiên cứu cũng như các tổ chức, doanh nghiệp. Tuy nhiên, việc tìm kiếm và thành lập đội nhóm phù hợp hiện gặp nhiều rào cản do thông tin dự án và hồ sơ nhân sự bị phân tán trên nhiều kênh khác nhau. Nhu cầu số hóa quy trình kết nối này kết hợp với sự tăng trưởng của thị trường phát triển website tại Việt Nam là lý do nhóm tác giả thực hiện đồ án "Xây dựng hệ thống hỗ trợ tìm kiếm đội nhóm, dự án" trong khuôn khổ học phần Đồ án 1 (mã lớp: SE121.O11) tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia Thành phố Hồ Chí Minh, dưới sự hướng dẫn của ThS. Nguyễn Tấn Toàn.
Mục tiêu của đề tài được tác giả xác định cụ thể như sau:
- Xây dựng website hỗ trợ tìm kiếm đội nhóm, dự án; cho phép các tổ chức tạo và đăng tải các dự án cũng như các vị trí tuyển dụng (vacancy) nhằm thu hút người dùng đăng ký tham gia.
- Xây dựng giao diện thân thiện, trực quan, dễ sử dụng nhằm tối ưu hóa trải nghiệm người dùng.
- Đảm bảo độ tin cậy và bảo mật cho toàn bộ hệ thống.
- Cung cấp chức năng báo cáo, thống kê và cập nhật dữ liệu nhanh chóng, chính xác.
Đối tượng và phạm vi nghiên cứu của đề tài bao gồm:
- Đối tượng người dùng trực tiếp:
- Người tìm kiếm dự án, đội nhóm (Seeker): Freelancer, nhà phân tích, chuyên gia trong các lĩnh vực cần tìm kiếm và ứng tuyển vào các dự án phù hợp với năng lực cá nhân.
- Các tổ chức cần tìm thành viên (Organizer): Đơn vị, đội nhóm có nhu cầu đăng tuyển thành viên, quản lý danh sách ứng viên và vận hành dự án.
- Quản trị viên hệ thống (Admin): Kiểm duyệt nội dung dự án, vị trí tuyển dụng, xử lý vi phạm và quản lý vận hành chung.
- Phạm vi nghiên cứu: Đồ án tập trung vào phân tích, thiết kế và cài đặt hệ thống phần mềm nền tảng web ứng dụng kiến trúc Microservices, quản lý dữ liệu tuyển dụng và thông tin hồ sơ người dùng, hoàn thành vào tháng 12 năm 2023.
Cơ sở lý thuyết và công nghệ phát triển
Hệ thống được xây dựng dựa trên việc tích hợp các công nghệ phần mềm hiện đại từ giao diện người dùng, dịch vụ phía máy chủ đến cơ sở dữ liệu hướng tài liệu:
| Thành phần |
Công nghệ / Công cụ |
Đặc tính kỹ thuật chính được sử dụng |
| Giao diện (Front-end) |
ReactJS |
Thư viện mã nguồn mở JavaScript; cơ chế Virtual DOM giúp tối ưu hiệu năng kết xuất; cú pháp JSX kết hợp mã HTML và JavaScript; hỗ trợ kiểm thử giao diện qua Virtual DOM. |
| Định kiểu (Styling) |
Tailwind CSS |
Utility-first CSS framework; chế độ biên dịch Just-in-Time (JIT); các tiền tố pseudo-class (hover:, focus:, dark:); 5 breakpoint mặc định phục vụ thiết kế đáp ứng (sm, md, lg, xl, 2xl). |
| Phía máy chủ (Back-end) |
Spring Boot |
Nền tảng phát triển ứng dụng Java dựa trên Dependency Injection và AOP; máy chủ nhúng (Tomcat, Jetty); cơ chế Spring Application làm điểm khởi chạy; quản lý cấu hình phân tách qua Profile và Externalized Configuration; hệ thống ghi log qua Common Logging. |
| Cơ sở dữ liệu |
MongoDB |
Hệ quản trị cơ sở dữ liệu NoSQL định hướng tài liệu (Document-Oriented); lưu trữ dưới định dạng BSON; cơ chế lập chỉ mục (Indexing); hỗ trợ mở rộng ngang qua Sharding; cơ chế sao lưu dự phòng (Replication and High Availability); các thao tác tổng hợp dữ liệu (Aggregation). |
| Công cụ thiết kế & quản lý |
Figma, draw.io, Git, GitHub |
Thiết kế giao diện UI trên Figma; thiết kế sơ đồ Use-case và kiến trúc trên draw.io; quản lý phiên bản mã nguồn bằng Git và GitHub. |
Thiết kế và triển khai hệ thống
1. Kiến trúc phần mềm
Nhóm tác giả lựa chọn mô hình kiến trúc Microservices (một biến thể của kiến trúc hướng dịch vụ SOA) để phát triển hệ thống. Các dịch vụ trong hệ thống được cấu trúc ghép lỏng lẻo (loosely coupled) và phân tán thông qua container. Việc lựa chọn kiến trúc này đáp ứng các mục tiêu kỹ thuật:
- Tính độc lập và chuyên biệt: Từng dịch vụ nhỏ có thể vận hành và lựa chọn nền tảng công nghệ riêng biệt.
- Xử lý lỗi cục bộ: Lỗi phát sinh ở một dịch vụ không gây gián đoạn toàn bộ hệ thống.
- Thuận tiện nâng cấp và mở rộng: Nâng cấp, bảo trì độc lập từng thành phần mà không làm ngắt quãng ứng dụng.
- Đơn giản hóa công tác kiểm thử và quản lý mã nguồn.
2. Phân quyền và chức năng hệ thống
Hệ thống thiết lập 3 vai trò người dùng chính với danh sách nhiệm vụ chức năng cụ thể:
- Seeker: Đăng ký, đăng nhập, khôi phục mật khẩu, xác thực tài khoản; quản lý hồ sơ cá nhân, cập nhật resume và quản lý file CV tải lên; xem số lượt xem hồ sơ, theo dõi trạng thái ứng tuyển; tra cứu thông tin tổ chức, dự án, vacancy; nộp hồ sơ ứng tuyển vào vacancy; báo cáo vi phạm vacancy; lưu trữ danh mục tổ chức, dự án và vacancy yêu thích.
- Organizer: Đăng ký, đăng nhập, quản lý thông tin tổ chức; xem thống kê số lượng dự án, vacancy, ứng viên gần đây và lượt xem profile; tạo mới vacancy; quản lý vòng đời vacancy (cập nhật, tra cứu, xóa, thanh toán phí đăng bài); quản lý ứng viên (chấp nhận, từ chối, mời tham gia lại, khóa hoặc xóa thành viên khỏi vacancy); tìm kiếm ứng viên và gửi email gợi ý dự án.
- Admin: Đăng nhập, đổi mật khẩu; quản trị danh mục ngành nghề (thêm, sửa, xóa, tra cứu); thống kê doanh thu theo tháng, theo dõi dự án, vacancy và tổ chức đăng ký mới; phê duyệt dự án và vacancy mới đăng tải; quản lý và khóa tài khoản tổ chức vi phạm; xử lý danh sách các báo cáo vi phạm đối với vacancy; theo dõi lịch sử giao dịch thanh toán.
3. Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu MongoDB của hệ thống được mô hình hóa chi tiết với 25 bảng/tập hợp tài liệu (collection), phản ánh đầy đủ các liên kết logic:
| Tên bảng dữ liệu |
Mục đích và nội dung lưu trữ |
Các trường dữ liệu chính |
PROJECT |
Thông tin tổng quan của dự án |
projectId, projectName, description, maxParticipants, socialNetworkLink, startDate, duration, Period, Status, budget |
VACANCY |
Vị trí tuyển dụng thành viên của dự án |
vacancyId, projetcId, vacancName, maxRequired, Location, expectedTime, expectedSalary, salaryUnit, description |
USER |
Thông tin tài khoản người dùng chung |
userId, fullName, userName, Password, userType, isVerify, phoneNumber, Email, dayOfBirth, website, description, address, isActive |
SEEKER |
Thông tin bổ sung của người tìm việc (kế thừa USER) |
userId, expectSalary |
ORGANIZER |
Thông tin tổ chức tuyển dụng (kế thừa USER) |
userId, teamSize |
CV |
Dữ liệu tệp sơ yếu lý lịch tải lên |
cvId, userId, cvLink |
USERSKILL & SKILL |
Kỹ năng và quan hệ kỹ năng của người dùng |
userId, skillId, skillName |
BACKGROUND & UNIVERSITY |
Học vấn và thông tin trường đại học |
backgroundId, userId, universityId, description, universityName |
EXPERIENCE |
Kinh nghiệm làm việc cá nhân |
experienceId, userId, occupationId, startYear, endYear, description, organizerName |
OCCUPATION, MAJOR, MAJORDETAIL, FIELD |
Phân loại ngành nghề, chuyên ngành và lĩnh vực |
occupationId, occupationName, majorId, majorName, userId |
SOCIALNETWORK |
Liên kết mạng xã hội của người dùng |
socialId, userId, link, socialName |
FAVOURITEUSER, SHORTLISTEDUSER |
Quan hệ theo dõi, lưu trữ yêu thích người dùng |
favouritedId, favouriteId, shortedListId, shortListId |
NOTIFICATION |
Nhật ký thông báo người dùng nhận được |
notificationId, userId, notificationTime, notificationContent |
PARTICIPANTS & APPLICANT |
Quản lý người tham gia và ứng viên nộp hồ sơ |
userId, vacancyId, Status |
FAVOURITEVACANCY |
Danh sách vacancy được Seeker lưu yêu thích |
userId, vacancyId |
REPORT |
Thông tin phản ánh, khiếu nại vi phạm vacancy |
reportId, userId, vacancyId, Content, reportType |
PROJECTPAYMENT & PAYMENTDETAIL |
Dữ liệu thanh toán phí đăng bài dự án và vacancy |
payId, userId, projectId, basePrice, createDate, transactionFee, Total, paymentDetailId, numberParticipant |
4. Thiết kế giao diện (UI/UX)
Hệ thống thiết kế chi tiết 60 màn hình tương tác được phân chia theo từng vai trò:
- Màn hình dùng chung (6 màn hình): Đăng nhập (
Login), Đăng ký (Sign up), Quên mật khẩu (Reset Password), Thay đổi mật khẩu (Change Password), Thông báo gửi email thành công (Notify Send Email Successfully), Thông báo không có quyền truy cập (Unauthorized).
- Màn hình Quản trị viên (12 màn hình): Bảng điều khiển quản trị (
Dashboard Admin), Quản lý tổ chức (Manage Organizer, Organizer Detail), Quản lý dự án (Manage Project, Project Detail), Quản lý vị trí tuyển dụng (Manage Vacancy, Vacancy Detail), Quản lý báo cáo (Manage Report), Quản lý ngành nghề (Occupations, Create Occupation, Update Occupation), Lịch sử giao dịch (History Transactions).
- Màn hình Seeker (19 màn hình): Trang chủ (
Seeker Home), Liên hệ (Contact), Giới thiệu (About us), Tra cứu tổ chức (Find Organizer, Organizer Detail), Tra cứu dự án (Find Project, Project Detail), Tra cứu và ứng tuyển vị trí tuyển dụng (Find Vacancy, Vacancy Detail, Apply Vacancy, Report Vacancy), Quản lý cá nhân (Dashboard Seeker, Edit Profile, Edit Resume, CV Manage), Danh mục lưu trữ (ShortListed Organizer, Favourite Projects, Favourite Vacancies, Applied Vacancies).
- Màn hình Organizer (20 màn hình): Bảng điều khiển (
Dashboard Organizer), Hồ sơ (Edit Profile), Quản trị ứng viên (ShortListed Seeker, Find Seeker, Seeker Detail, Send Recommend Project, Interviews), Quản lý dự án (Manage Project, Project Detail, Create Project, Update Project), Quản lý vacancy (Manage Vacancy, Update Vacancy, Vacancy Detail), và luồng 6 bước đăng bài tuyển dụng tuần tự (Post a Vacancy – 1 đến Post a Vacancy – 6).
Nội dung chính theo từng chương
Chương 1: Giới thiệu tổng quan
Chương 1 giới thiệu lý do lựa chọn đề tài xuất phát từ nhu cầu thực tiễn trong việc tìm kiếm đồng đội dự án và sự phân tán thông tin tuyển dụng. Tác giả xác định 4 mục tiêu cốt lõi của website, xác định 2 nhóm đối tượng sử dụng chính là Seeker và Organizer, đồng thời liệt kê tổng quan công nghệ sử dụng bao gồm ReactJS, Tailwind CSS, Spring Boot, MongoDB, Figma, draw.io và Git/GitHub.
Chương 2: Cơ sở lý thuyết
Chương 2 trình bày chi tiết nền tảng công nghệ nền móng:
- ReactJS: Giới thiệu lịch sử do Facebook phát triển (2013), cơ chế Document Object Model (DOM), phân tích cú pháp JSX và hoạt động của Virtual DOM. Tác giả chỉ rõ ưu điểm về hiệu năng, việc kết hợp mã giao diện qua JSX và khả năng render đa tầng, bên cạnh nhược điểm chỉ đóng vai trò tầng View, thiếu mô hình MVC hoàn chỉnh và dung lượng thư viện tương đối lớn.
- Spring Boot: Khái niệm framework RAD dựa trên nền tảng Java; cơ chế hoạt động của
Spring Application thông qua hàm main; tính năng quản lý hồ sơ cấu hình (Profiles) và cấu hình mở rộng (Externalized Configurations); cơ chế log mặc định Common Logging. Tác giả phân tích ưu thế tự động cấu hình, tích hợp máy chủ nhúng và nhược điểm khó kiểm soát kích thước gói triển khai do nhiều dependency mặc định.
- Tailwind CSS: Nguyên lý utility-first; kỹ thuật pseudo-class; cơ chế Just-in-Time (JIT) biên dịch theo nhu cầu; hệ thống 5 điểm ngắt đáp ứng (
sm, md, lg, xl, 2xl) và quy trình tùy biến qua tệp cấu hình tailwind.config.
- MongoDB: Phân tích mô hình cơ sở dữ liệu NoSQL hướng tài liệu lưu trữ dạng BSON; so sánh với cơ sở dữ liệu quan hệ (RDBMS) về khả năng mở rộng ngang; làm rõ 5 tính năng cốt lõi: Document Oriented, Indexing, Scalability (Sharding), Replication & High Availability, và kỹ thuật Aggregation.
Chương 3: Thiết kế kiến trúc
Chương 3 trình bày việc lựa chọn và xây dựng kiến trúc Microservices cho hệ thống. Nội dung tập trung giải thích cơ chế phân rã phần mềm thành các dịch vụ độc lập chạy trên nền tảng container hóa, đồng thời luận giải 4 mục đích chính: đảm bảo tính độc lập trong lựa chọn công nghệ cho từng dịch vụ, khoanh vùng và nâng cao năng lực xử lý lỗi, tạo thuận lợi cho việc bảo trì/mở rộng hệ thống mà không làm gián đoạn vận hành, và giảm độ phức tạp trong kiểm thử phần mềm.
Chương 4: Thiết kế hệ thống
Chương 4 cung cấp đặc tả hệ thống thông qua sơ đồ ca sử dụng (Use-case diagram) cho từng tác nhân (Seeker, Organizer, Admin). Nội dung bao gồm 2 bảng đặc tả chính:
- Bảng 4.1 xác định chi tiết vai trò và trách nhiệm của Seeker, Organizer, Admin.
- Bảng 4.2 phân rã toàn bộ tính năng của từng vai trò (8 nhóm tính năng cho Seeker, 9 nhóm tính năng cho Organizer, 7 nhóm tính năng cho Admin).
Chương 5: Thiết kế dữ liệu
Chương 5 hiện thực hóa thiết kế cấu trúc dữ liệu của ứng dụng thông qua sơ đồ mô hình quan hệ tổng thể và mô tả chi tiết 25 bảng/tập hợp dữ liệu. Từng bảng được định nghĩa rõ ràng về tên trường, kiểu dữ liệu (string, int, long, float, boolean, Date) và ý nghĩa nghiệp vụ cụ thể, bao gồm từ thông tin dự án (PROJECT), vị trí tuyển dụng (VACANCY), người dùng (USER, SEEKER, ORGANIZER), hồ sơ năng lực (CV, SKILL, EXPERIENCE, BACKGROUND), đến các bảng quản lý tương tác và thanh toán (APPLICANT, PARTICIPANTS, REPORT, PROJECTPAYMENT, PAYMENTDETAIL).
Chương 6: Thiết kế giao diện
Chương 6 xây dựng sơ đồ liên kết luồng chuyển đổi màn hình cho từng tác nhân (Seeker, Organizer, Admin) và lập danh mục tổng cộng 60 màn hình giao diện. Chương này mô tả chức năng chi tiết của các màn hình quan trọng như Bảng điều khiển quản trị, Quản trị tổ chức/dự án/vị trí, luồng đăng tuyển vị trí 6 bước (Post a Vacancy 1-6), và các màn hình tra cứu, nộp hồ sơ, quản lý CV của người tìm việc.
Chương 7: Cài đặt và thử nghiệm
Chương 7 tổng kết môi trường triển khai và phát triển ứng dụng (IDE Visual Studio Code cho ReactJS, IntelliJ IDEA CE cho Spring Boot, hệ thống cơ sở dữ liệu MongoDB và kho chứa Git/GitHub). Đồng thời, chương đưa ra các nhận xét, đánh giá kết quả thực hiện đồ án, nêu hướng phát triển tiếp theo của hệ thống, danh mục tài liệu tham khảo và bảng phân công công việc cụ thể giữa hai thành viên thực hiện.
Kết quả và đóng góp
Hạn chế và hướng nghiên cứu tiếp
Giá trị tham khảo
Báo cáo đồ án có giá trị tham khảo thiết thực cho các đối tượng sau:
- Sinh viên ngành Công nghệ phần mềm, Hệ thống thông tin và Khoa học máy tính: Tài liệu cung cấp mẫu báo cáo chuẩn mực cho các học phần Đồ án môn học/Đồ án tốt nghiệp về quy trình phát triển phần mềm từ khâu khảo sát, lựa chọn công nghệ, thiết kế kiến trúc đến chi tiết hóa cơ sở dữ liệu.
- Lập trình viên và người nghiên cứu phát triển web portal:
- Phần thiết kế cơ sở dữ liệu (Chương 5) là tài liệu tham khảo chi tiết cho bài toán quản lý hồ sơ ứng viên, phân cấp ngành nghề (
OCCUPATION - MAJOR - MAJORDETAIL), và quản lý trạng thái tuyển dụng/ứng tuyển.
- Phần thiết kế chức năng và giao diện (Chương 4 và Chương 6) cung cấp luồng nghiệp vụ thực tế cho các hệ thống kết nối việc làm hoặc tuyển dụng cộng tác viên.
Câu hỏi thường gặp
1. Đồ án lựa chọn kiến trúc phần mềm nào và vì sao?
Tác giả lựa chọn kiến trúc Microservices (biến thể từ SOA). Kiến trúc này được chọn nhằm giúp các dịch vụ chạy độc lập trong container, cho phép tự do chọn công nghệ cho từng dịch vụ nhỏ, cô lập lỗi cục bộ để không ảnh hưởng toàn hệ thống, tạo thuận lợi cho việc bảo trì, mở rộng và đơn giản hóa kiểm thử.
2. Hệ thống phân chia người dùng thành bao nhiêu vai trò và nhiệm vụ cốt lõi của từng vai trò là gì?
Hệ thống gồm 3 vai trò:
- Seeker: Tìm kiếm dự án, tổ chức, vacancy; quản lý hồ sơ/CV cá nhân; nộp đơn ứng tuyển và lưu danh mục yêu thích.
- Organizer: Quản lý thông tin tổ chức; tạo, đăng tải và quản lý vòng đời dự án/vacancy; tìm kiếm và duyệt hồ sơ ứng viên.
- Admin: Quản lý danh mục ngành nghề; kiểm duyệt dự án và vacancy; xử lý báo cáo vi phạm; theo dõi doanh thu và lịch sử giao dịch.
3. Cơ sở dữ liệu của hệ thống được xây dựng trên hệ quản trị nào và bao gồm bao nhiêu bảng dữ liệu?
Hệ thống sử dụng cơ sở dữ liệu NoSQL MongoDB (lưu trữ định dạng BSON). Cấu trúc dữ liệu được thiết kế gồm 25 bảng/tập hợp dữ liệu bao gồm các thông tin về dự án, vị trí tuyển dụng, tài khoản người dùng, kinh nghiệm, học vấn, kỹ năng, quan hệ tương tác và hóa đơn thanh toán.
4. Những công nghệ chính nào được triển khai cho tầng Front-end và Back-end?
- Tầng Front-end: Thư viện ReactJS (sử dụng JSX, Virtual DOM) kết hợp với framework tạo kiểu Tailwind CSS (chế độ JIT, thiết kế đáp ứng qua các breakpoint
sm, md, lg, xl, 2xl).
- Tầng Back-end: Nền tảng Spring Boot trên ngôn ngữ Java, tận dụng cơ chế Dependency Injection, cấu hình đa môi trường qua Profile/Externalized Configuration và máy chủ nhúng sẵn.
5. Nghiệp vụ đăng tin tuyển dụng vị trí (Post a Vacancy) của Organizer được thiết kế qua bao nhiêu bước trên giao diện?
Theo danh mục màn hình ở Chương 6, nghiệp vụ đăng tuyển vị trí của Organizer được chia thành quy trình tuần tự gồm 6 màn hình: từ Màn hình Post a Vacancy – 1 đến Màn hình Post a Vacancy – 6.
Kết luận
Báo cáo đồ án môn học "Xây dựng hệ thống hỗ trợ tìm kiếm đội nhóm, dự án" của sinh viên Nguyễn Văn Phát và Lê Quang Nhân đã trình bày một quy trình kỹ thuật phần mềm hoàn chỉnh nhằm giải quyết bài toán kết nối nguồn lực trong quản lý dự án hiện đại. Đề tài kết hợp nền tảng công nghệ phổ biến bao gồm ReactJS, Tailwind CSS, Spring Boot và MongoDB trên mô hình kiến trúc Microservices phân tán. Với thiết kế chi tiết gồm 24 nhóm chức năng, 25 thực thể dữ liệu và 60 màn hình tương tác, công trình cung cấp nguồn tài liệu tham khảo học thuật hữu ích cho sinh viên và các nhà phát triển phần mềm trong lĩnh vực xây dựng nền tảng tuyển dụng và làm việc nhóm.