Hiểu được các vấn đề trên nhóm em quyết định phát triển một ứng dụng bán khóa học trực tuyến, nền tảng này cung cấp một môi trường tiện lợi cho người dùng dễ dàng tìm khóa học mong muốn,
Mục tiêu của đề tài
Trong đề tài này, nhóm em đề ra những mục tiêu sau:
+ Xây dựng một website mà ở đó ban quản trị và quản lý có thể đăng tải lên các khóa học, người dùng có thể truy cập để xem và mua khóa học đó trực tuyến
+ Phát triển một hệ thống học online và cho phép quản lý tạo ra các bài giảng với video, tài liệu và các dạng bài tập trắc nghiệm, tự luận, coding
+ Xây dựng trang học trực tuyến của khóa học bao gồm các bài giảng khóa học + Xây dựng một trang quản trị website dành cho admin.
KHẢO SÁT HIỆN TRẠNG
Phân tích và đánh giá các website
Nhóm chúng em đã thực hiện tiến hành khảo sát trên một vài Website tiêu biểu và có lược người sử dụng và truy cập nhiều như:
+ Udemy (https://www.udemy.com)
+ Fullstack Edu (https://fullstack.edu.vn)
1.1.1 Website Udemy Đối với những trang bán khóa học trực tuyến ta không thể không nhắc đến Udemy Đây là một nền tảng bán khóa học hàng đầu đã tồn tại hơn 13 năm chuyên cung cấp các khóa học trực tuyến với nhiều chủ đề khác nhau Tại Udemy cung cấp hàng ngàn khóa học với đội ngũ giảng viên đa dạng Các giảng viên có thể tự do tạo và quản lý khóa học của mình trên nền tảng này
Trang tìm kiếm là một trong số trang ấn tượng nhất đối với trang web này Trong trang này cung cấp các công cụ để người dùng có thể tìm kiếm các khóa học mong muốn một cách nhanh chóng Có nhiều bộ lọc như: đánh giá, chủ đề, trình độ, ngôn ngữ,
Hình 1: Hình ảnh trang tìm kiếm (trang Udemy)
13 Đối với trang thông tin khóa học cung cấp tất cả thông tin cần thiết của khóa học giúp người dùng nằm bắt được tất cả thông tin về khóa học và các nội dung chưa trong khóa học Từ đó xem có phù hợp với mình hay không trước khi đưa ra quyết định mua
Hình 2: Hình ảnh trang chi tiết khóa học (trang Udemy) Đối với giảng viên có thể đăng tải lên nội dung của khóa học do bản thân họ tạo ra Trong trang này giảng viên có thể đăng tải các khóa học bao gồm các thông tin mô tả về khóa học, danh sách các bài giảng và bài tập Bất kỳ ai miễn có tài khoản có thể đăng nội dung khóa học của mình để kinh doanh Điều kiện để một khóa học được phê duyệt thì phải đầy đủ nội dung, đảm bảo nội dung phù hợp Sau khi đăng tải đội ngũ phê duyệt của Udemy sẽ review để đảm bảo rằng nội dung khóa học là phù hợp
Hình 3: Hình ảnh trang thêm khóa học (trang Udemy) Nhìn chung, sau khi khảo sát, Website Udemy có những ưu điểm và nhược điểm như sau: Ưu điểm:
+ Có nhiều bộ lọc tìm kiếm khóa học giúp người dùng có thể tìm kiếm một khóa học một cách nhanh chóng
+ Hệ thống quản lý học trực tuyến được thiết kế giúp cho người dạy có thể đăng tải bài giảng, tài liệu và bài tập trực tuyến giúp cho người học có thể học tập trực tuyến hiệu quả Phần thống kê quá trình học tập giúp người học có thể theo dõi được tiến độ
+ Có phần đánh giá khóa học của các học viên sau khi học tập Giúp cho người dùng có thể xem đánh giá trước khi quyết định mua khóa học
+ Giảng viên có thể dễ dàng đăng tải nội dung khóa học và chỉnh sửa nó dễ dàng
+ Tốc độ phản hồi của hệ thống nhanh
+ Thiếu tương tác trực tiếp: Khi học trên Udemy người học phải chủ động tự học, chủ yếu sự tương tác đến từ việc đặt câu hỏi trên cộng đồng của khóa học đó và giảng viên hoặc mọi người có thể xem và trả lời
+ Chất lượng khóa học: Vì lượng giảng viên trên nền tảng là đa dạng bên cạnh
15 những giảng việc chất lượng thì còn nhiều giảng viên ít có kinh nghiệm nên nhiều khóa học không đủ chất lượng và phù hợp với nhiều học viên Do đó học viên nên tham khảo và chọn lọc khóa học phù hợp trước khi mua
Fullstack Edu là một nền tảng học tập trực tuyến được xây dựng được xây dựng bởi người Việt Đây là trang web cung cấp những khóa học với tính thực tiễn cao với các bài giảng đi đôi với thực hành Các bài giảng tích hợp các bài tập trắc nghiệm, bài tập lập trình giúp học viên có thể thực hành ngay sau mỗi bài giảng Sau khi hoàn thành khóa học học viên được cấp chứng chỉ của khóa học đó
Trang web được thiết kế ấn tượng với giao diện người dùng hiện đại, trắc quan làm nổi bật lên các khóa học và nền tảng này muốn giới thiệu Trang web sử dụng màu sắc tươi sáng, dễ nhìn tạo cảm giác năng động
Hình 4: Hình ảnh trang chủ (trang Fullstack edu) Ấn tượng nhất trong website là là phần thiết kế lộ trình học cho từng lĩnh vực lập trình khác nhau giúp người dùng có cái nhìn tổng quan về quá trình học Mỗi lộ trình đều chia nhỏ ra theo từng giai đoạn
Hình 5: Hình ảnh trang lộ trình học (trang Fullstack edu)
Popup đăng nhập của trang web được thiết kế với màu sắc hài hòa, giúp người dùng dễ dàng nhận diện các trường thông tin cần điền Ngoài ra việc đăng nhập bằng tài khoản Email và Facebook giúp người dùng tiết kiệm được thời gian và tạo ra trải nghiệm đăng nhập thuận tiện hơn
Hình 6: Hình ảnh popup đăng nhập (trang Fullstack edu)
Phần thiết kế nội dung bài giảng khóa học là một phần đặc sắc trong trang web này Với mỗi khóa học được thiết kế gồm nhiều chương, với mỗi chương sẽ bao gồm nhiều bài giảng có thể là video, tài liệu hoặc các dạng bài tập trắc nghiệm, tự luận và coding
Hình 7: Hình ảnh trang học trực tuyến (trang Fullstack edu) Ngoài ra với mỗi khóa học sẽ có phần hỏi đáp, nơi mà người học sẽ lên trao đổi về nội dung bài học và sẽ có người hướng dẫn và giảng viên tham gia để hổ trợ học viên
Từ đó giúp học viên có thể học tập được tốt hơn
Hình 8: Hình ảnh trang diễn đàn học tập (trang Fullstack edu) Ưu điểm:
+ Hệ thống học tập trực tuyến được xây dựng với nhiều nội dung như video, tài liệu và bài tập giúp cho học viên có thể học tập được một cách hiệu quả
+ Có diễn đàn hỏi đáp cho từng bài giảng
+ Quá trình xem video trong nhiều thời điểm khá mượt mà
+ Chức năng đăng nhập được hổ trợ với nhiều hình thức
XÁC ĐỊNH VÀ MÔ HÌNH HÓA YÊU CẦU
Xác định yêu cầu
Qua việc khảo sát các trang web bán khóa học, ta có các yêu cầu chức năng cho hệ thống bao gồm:
+ Đăng ký, đăng nhập và lấy lại mật khẩu
+ Quản lý khóa học cho người quản lý
+ Tạo các bài giảng với video hoặc tài liệu
+ Tạo các dạng bài tập trắc nghiệm và tự luận
+ Phần thảo luận cho từng bài giảng trong khóa học
+ Quản lý giỏ hàng và thanh toán online
+ Chuông thông báo cho người dùng
+ Quản lý khóa học cho quản trị viên
2.1.2 Yêu cầu phi chức năng
Các yêu cầu phi chức năng bao gồm:
+ Giao diện người dùng thân thiện, dễ sử dụng
+ Tốc độ xử lý các thao tác nhanh chóng và chính xác
+ Hệ thống có tính bảo mật, phần quyền rõ ràng
+ Việc bảo trì, nâng cấp và phát triển dễ dàng
THIẾT KẾ HỆ THỐNG
Thiết kế cơ sở dữ liệu
3.1.1 Lược đồ cơ sở dữ liệu
Hình 41: Hình ảnh lược đồ cơ sở dữ liệu của user service
Hình 42: Hình ảnh lược đồ cơ sở dữ liệu của course service
3.2.2 Mô tả các bảng trong cơ sở dữ liệu
Danh sách các bảng trong cơ sở dữ liệu
STT Tên bảng Diễn giải
1 user Chứa các thông tin của người dùng
2 role Chứa thông tin về tất cả quyền chung của người dùng có mối quan hệ nhiều – nhiều với bảng user
3 users_roles Là bảng trung giữa của bảng user và bảng role giúp liên kết được
4 address Chứa thông tin địa chỉ của người dùng có mối quan hệ nhiều – một với bảng user
5 orders Chứa thông tin hóa của người dùng
6 order_items Chứa danh sách các item của một hóa đơn của người dùng, có mối quan hệ nhiều – một với bảng order
7 module Chứa tất cả thông tin các tính năng trong hệ thống, được sử dụng để phần quyền theo tính năng
8 role_details Chứa thông tin chi tiết của một quyền được liên kết với bảng module và role để phân quyền theo tính năng trong hệ thống
9 user_logs Chứa thông tin về lịch sử hoạt động của người dùng
10 recent_search_history Chứa thông tin về lịch sử tìm kiếm của người dùng trên từng tính năng trong hệ thống Sử dụng trong tất cả tính năng tìm kiếm
11 category Chứa thông tin các danh mục của khóa học
13 topic Chứa thông tin các chủ đề của khóa học
14 course Chứa tất cả các thông tin cơ bản của các khóa học
15 content Chứa nội dung của một khóa học có mối quan hệ một – một với bảng khóa học
16 description Chứa mô tả chi tiết về của khóa học có quan hệ một – một với bảng content
17 section Chứa nội dung các chương của khóa học
18 lecture Chứa thông tin các bài giảng trong khóa học, có mối quan hệ nhiều – một với bảng section Bài giảng có thể là video, tài liệu hoặc bài tập
19 level Chứa thông tin về các cấp độ của khóa học
20 language Chứa thông tin về các ngôn ngữ của khóa học
21 course_progress Chứa thông tin về tiến trình học của người dùng đối với một khóa học
22 course_issue _report Ghi nhận thông tin lỗi khi từ chối một khóa học
23 assignment Chứa thông tin các bài tập tự luận của một khóa học
24 assignment_history Chứa lịch sử làm bài tập tự luận
25 forum_lecture Chứa các bình luận của người dùng trên diễn dàn bài giảng của một khóa học
26 comment_reply Chứa bình luận phản hội một nội dung trên diễn đàn bài giảng
27 course_review Chứa các của người dùng về các khóa học
28 ex_quiz Chứa các thông tin cơ bản về bài tập trắc nghiệm
29 question Chứa danh sách các câu hỏi của bài tập trắc nghiệm
30 user_ex_quiz Chứa lịch sử làm bài của người dùng về các bài tập trắc nghiệm
31 user_answer Chứa thông tin đáp án của người dùng về các câu hỏi trong bài tập trắc nghiệm
Bảng 1: Bảng mô tả các bảng trong cơ sở dữ liệu
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 email Địa chỉ email String
4 first_name Tên người dùng String
5 last_name Họ của người dùng String
8 telephone Số điện thoại String
9 username Tên đăng nhập String
10 created Thời gian tạo Long
11 updated Thời gian cập nhật Long
Bảng 2: Bảng mô tả bảng user
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
3 description Mô tả role String
4 created Thời gian tạo Long
5 updated Thời gian cập nhật Long
6 role_user Thuộc quyền nào trong ba quyền user, manager, admin
Bảng 3: Bảng mô tả bảng role
3.2.2.3 Mô tả bảng user_role
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 user_id Khóa của bảng user String
2 role_id Khóa của bảng role String
Bảng 4: Bảng mô tả bảng user_role
3.2.2.4 Mô tả bảng role_details
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 can_create Đánh dấu có quyền tạo Boolean
3 create_view Đánh dấu có quyền xem Boolean
4 can_update Đánh dầu có quyền sửa Boolean
5 can_delete Đánh dầu có quyền xóa Boolean
6 module_id Khóa của một module trong hệ thống để phân quyền cho module đó
7 role_id Khóa của bảng role String
8 updated Thời gian cập nhật Long
9 created Thời gian tạo Long
Bảng 5: Bảng mô tả bảng role_details
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 shipping_method Phương thức thanh toán
3 user_id Khóa của bảng User String
4 total_price Tổng đơn hàng Double
5 created Thời gian tạo Long
7 updated Thời gian cập nhật Long
Bảng 6: Bảng mô tả bảng order
3.2.2.6 Mô tả bảng order_items
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 course_id Khóa của khóa học Integer
3 price Giá tiền của khóa học String
4 order_id Khóa của bảng order String
5 created Thời gian tạo Long
6 updated Thời gian cập nhật Long
Bảng 7: Bảng mô tả bảng order_items
3.2.2.7 Mô tả bảng user_logs
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 action_key Khóa chính của record được thao tác
3 action_name Tên hành động thao tác trên dữ liệu
4 action_object Thực thể của tác động Enum
5 description Mô tả chi tiết String
6 user_name Tên người dùng String
Bảng 8: Bảng mô tả bảng user_logs
3.2.2.8 Mô tả bảng recent_search_history
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 keyword Từ khóa tìm kiếm String
3 keyword_type Loại từ khóa Enum
4 module_type Loại module thực hiện tìm kiếm
5 username Tên người dùng String
6 created Ngày thực hiện String
7 count_history Đếm số lần thực hiện tìm kiếm
Bảng 9: Bảng mô tả bảng recent_search_history
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 name Tên khóa học String
3 sub_title Mô tả khóa học String
4 price Giá của khóa học Double
5 url_courses_images Đường dẫn hình ảnh khóa học
6 url_promotion_videos Đường dẫn video giới thiệu
7 authorName Tên tác giả String
8 is_approved Khóa học đã phê duyệt
9 is_awaiting_approval Khóa học đang Boolean
10 ís_completed_content Khóa học đã hoàn thành nội dung
11 language_id Khóa bảng ngôn ngữ
12 level_id Khóa bảng cấp độ
13 topic_id Khóa bảng chủ đề
14 created Thời gian tạo Long
16 updated Thời gian cập nhật
17 modifier Người cập nhật String
Bảng 10: Bảng mô tả bảng course
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 name Tên chủ đề String
3 description Mô tả chủ đề String
4 category_id Khóa bảng danh mục String
5 created Thời gian tạo Long
6 updated Thời gian cập nhật Long
Bảng 11: Bảng mô tả bảng topic
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 course_id ID khóa học String
3 description_id ID mô tả khóa học String
4 created Thời gian tạo Long
6 updated Thời gian cập nhật Long
7 modifier Người cập nhật String
Bảng 12: Bảng mô tả bảng content
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 detail Mô khóa học học, nội dung đạt được
3 target_consumers Mô tả đối tượng phù hợp của khóa học
4 requirements Mô tả yêu cầu cho khóa học
6 updated Thời gian cập nhật Long
7 modifier Người cập nhật String
8 created Thời gian tạo Long
Bảng 13: Bảng mô tả bảng description
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 ordinal_number Số thứ tự của chương Integer
4 total_duration_video_lectures Tổng độ dài của tất cả video chương
5 content_id ID nội dung khóa học String
6 updated Thời gian cập nhật Long
7 modifier Người cập nhật String
8 created Thời gian tạo Long
Bảng 14: Bảng mô tả bảng section
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 name Tên bài giảng String
3 ordinal_number Thứ tự bài giảng Integer
4 url Đường dẫn bài giảng String
5 file_name Tên file String
6 section_id Khóa chính của chương
7 video_duration Độ dài video String
8 updated Thời gian cập nhật Long
9 modifier Người cập nhật String
10 created Thời gian tạo Long
Bảng 15: Bảng mô tả bảng lecture
3.2.2.15 Mô tả bảng course_progress
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 current_progress Tiến độ học hiện tại Integer
3 rate_progress Tỉ lệ hoàn thành Double
4 total_amount_lecture Tổng bài giảng trong khóa học Integer
5 user_id ID của User String
6 course_id ID của khóa học String
7 modifier Người cập nhật String
8 created Thời gian tạo Long
10 removed Đánh dấu xóa Boolean
11 updated Thời gian cập nhật Long
Bảng 16: Bảng mô tả bảng course_progress
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 estimated_duration Thời gian phải hoàn thành Long
4 question Thông tin câu hỏi String
5 text_instructions Hướng dẫn bằng văn bản String
6 url_file_resource Đường dẫn file tài liệu câu hỏi String
7 url_file_solution Đường dẫn chứa đáp án bằng file tài liệu
8 url_video_instructions Đường dẫn video hướng dẫn câu hỏi
9 url_video_solution Đường dẫn chứa đáp án bằng video
10 lecture_id Khóa của bài giảng String
11 text_solution Đáp án bằng văn bảng Long
Bảng 17: Bảng mô tả bảng assignment
3.2.2.17 Mô tả bảng assignment_history
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
4 evalution Đánh giá bài String
5 score Điểm của bài Float
6 text_answer Câu trả lời của bài String
7 username Tên người dùng String
8 assignment_id Khóa chính bài tự luận String
9 original_number Số thứ tự Int
10 time_submit Thời gian submit bài Long
Bảng 18: Bảng mô tả bảng assignment_history
3.2.2.18 Mô tả bảng ex_quiz
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 category Loại bài trắc nghiệm String
5 limit_time Thời gian làm bài Long
6 max_attempt_number Số lần làm tối đa Int
7 Required_score Điểm tối thiếu để pass String
Bảng 19: Bảng mô tả bảng ex_quiz
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 answer_explantion Giải thích đáp án String
4 options Các lựa chọn String
5 orginal_number Số thứ tự Int
6 quiz_type Loại câu hỏi trắc nghiệm Int
7 right_answer Đáp án đúng String
Bảng 20: Bảng mô tả bảng question
3.2.2.20 Mô tả bảng user_ex_quiz
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 attempt_number Thứ tự lần làm Int
4 count_answer_corrent Số đáp án đúng Int
5 ex_quiz_id Khóa chính của bảng ex_quiz String
6 is_completed Đánh dấu đã pass Boolean
7 limit_time Thời gian làm tối đa Long
9 start_time Thời gian bắt đầu làm Long
10 user_id Khóa của user String
Bảng 21: Bảng mô tả bảng user_ex_quiz
3.2.2.21 Mô tả bảng user_answer
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 current_answer Đáp án của người dùng String
4 is_correct Đánh dấu câu trả lời đúng Boolean
5 question_id Khóa của bảng question String
6 user_quiz_id Khóa của bảng user_quiz_id String
Bảng 22: Bảng mô tả bảng user_answer
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 content Nội dung thông báo String
4 is_viewed Đánh dấu đã xem Boolean
5 link Link dẫn tới đường dẫn liên quan String
Bảng 23: Bảng mô tả bảng notifications
3.2.2.23 Mô tả bảng forum_lecture
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 avatar_url Đường dẫn avatar của người dùng String
4 comment Nội dung bình luận String
5 lecture_id Khóa của bài giảng String
6 user_id Khóa của user String
7 username Tên người dùng String
Bảng 24: Bảng mô tả bảng forum_lecture
3.2.2.24 Mô tả bảng ảng comment_reply
STT Tên thuộc tính Mô tả Kiểu dữ liệu
1 id Mã phân biệt String
2 created Thời gian tạo Long
3 avatar_url Đường dẫn avatar của người dùng String
4 comment Nội dung bình luận String
5 forum_lecture_id Khóa của bảng forum_lecture String
6 user_id Khóa của user String
7 username Tên người dùng String
Bảng 25: Bảng mô tả bảng comment_reply
KIẾN TRÚC HỆ THỐNG VÀ CÁC CÔNG NGHỆ SỬ DỤNG
Sơ đồ kiến trúc hệ thống
Hình 78: Hình ảnh Sơ đồ kiến trúc của hệ thống.
CÀI ĐẶT VÀ KIỂM THỬ PHẦN MỀM
Thiết lập môi trường
- Để có thể chạy được ứng dụng, máy tính phải đảm bảo các yêu cầu sau:
+ Cài đặt Java (phiên bản tối thiểu là 17)
+ Cài đặt Apache Maven (phiên bản tối thiểu là 3.8.3)
+ Cài đặt Docker Desktop (phiên bản tối thiểu là 4.12.0)
+ Cài đặt IntelliJ IDEA và WebStorm (hoặc Visual Code).
Triển khai dự án
Bước 1: Tải source code bằng lệnh sau:
Git clone https://github.com/course-ecommerce/course-ecommerce-app
Bước 2: Truy cập folder BackEnd, mở bằng IntelliJ IDEA và tiến hành khởi chạy
Hình 96: Hình ảnh khởi chạy backend server
Bước 3: Truy cập FrontEnd và mở bằng VSCode và tiến hành chạy lệnh sau để cài đặt các thư viện cần thiết:
Sau khi cài đặt xong tiến hành khởi chạy FrontEnd bằng lệnh: npm run dev
Hình 97: Hình ảnh khởi Frontend thành công.
Triển khai dự án bằng Docker
Dự án đã được config docker-compose.yml Ta có thể triển khai bằng các bước sau:
Bước 2: Tải source code bằng lệnh sau: git clone https://github.com/course-ecommerce/course-ecommerce-app
Bước 3: Truy cập vào folder build và chạy lệnh:
Hình 98: Hình ảnh chạy docker compose
Hình 99: Hình ảnh triển khai dự án với các container docker.
Deploy dự án
Dịch vụ sử dụng cho deploy dự án
Bảng 48: Bảng mô tả deploy dự án
Với FrontEnd: Sử dụng nền tảng Vercel, hỗ trợ CI/CD khi có commit mới được đẩy lên
Bước 1: Cấu hình github action để nhận biết commit mới Khi nhận thấy có commit mới trên nhánh deploy ta sẽ thực hiện ssh vào server của Digital Ocean Cloud và thực hiện CD thông qua file build.sh
Hình 100: Hình ảnh cấu hình github action cho việc sử dụng CI/CD
Bước 2: File build.sh sẽ tiến hành build các service trong dự án
Hình 101: Hình ảnh build các service trong dự án bằng file build.sh
Bước 3: Sau khi build xong các service, github action sẽ chạy docker compose với source code mới được build
Hình 102: Hình ảnh cấu hình github action thành công
Sản phẩm đã deploy lên host
Hình 103: Hình ảnh deploy dự án lên host thành công
Kiểm thử
Trong dự án này sẽ áp dụng các phương pháp kiểm thử sau đây:
+ Kiểm thử tích hợp (Integration test): Tích hợp các module của ứng dụng và tiến hành kiểm thử để đảm bảo chúng hoạt động tốt cùng nhau
+ Kiểm thử hệ thống (System test): Kiểm thử toàn bộ hệ thống sau khi tích hợp để đảm bảo nó đáp ứng các yêu cầu đã đặt ra
+ Kiểm thử tính khả dụng (Usability test): Đánh giá tính dễ sử dụng của ứng dụng, đảm bảo rằng giao diện người dùng trực quan và thân thiện
5.5.1.2 Mục tiêu kiểm thử Đảm bảo các chức năng của ứng dụng (được xác định trong đặc tả dự án) hoạt động chính xác trong điều kiện thực tế
Các tiêu chí đánh giá trong quá trình kiểm thử bao gồm:
+ Tiêu chí tạm ngừng: Nếu có ít nhất 40% số test case gặp lỗi, quá trình kiểm thử sẽ tạm ngừng cho đến khi các lỗi hiện tại được khắc phục
+ Tiêu chí hoàn thành: Các tiêu chí xác định khi nào quá trình kiểm thử được xem là hoàn tất
+ Tỷ lệ thực hiện test case: Phải đạt 100% test case trừ khi có lý do cụ thể để không đạt được
+ Tỷ lệ thành công của test case: Phải đạt ít nhất 80% số test case thành công
Quy trình kiểm thử gồm 6 bước như sau:
1 Requirement Analysis (phân tích yêu cầu): nghiên cứu, phân tích yêu cầu dự án
2 Test Planning (lập kế hoạch kiểm thử):
– Xác định phạm vi dự án
– Xác định phương pháp tiếp cận
– Lên kế hoạch thiết kế công việc kiểm thử
3 Test Case Development (thiết kế test case):
– Chuẩn bị dữ liệu kiểm thử
4 Test Environment Setup (thiết lập môi trường kiểm thử): thiết lập và kiểm tra môi trường kiểm thử
5 Test Execution (tiến hành kiểm thử):
– Thực hiện kiểm thử phần mềm
– So sánh với kết quả mong đợi và báo cáo các lỗi xảy ra lên công cụ quản lý lỗi – Thực hiện re–test để xác định các lỗi đã được sửa và regression test khi có sự thay đổi liên quan
– Điều chỉnh, sửa chữa tài liệu tiến độ dự án theo tình hình thực tế
6 Test Cycle Closure (đóng chu trình kiểm thử):
– Tổng kết, báo cáo kết quả về việc thực thi test case
– Thảo luận và rút ra bài học kinh nghiệm
STT Mô tả Các bước thực hiện Kết quả mong đợi Kết quả thực tế Trạng thái
- Nhập đầy đủ thông tin đăng ký
Thông báo đăng ký thành công và
Thông báo đăng ký thành công và chuyển sang trang Đạt
- Nhập mã OTP được nhận từ email
- Nhấn nút Submit chuyển sang trang thông tin tài khoản thông tin tài khoản
- Nhấn nút LOGIN Đăng nhập thành công và điều hướng về trang home Đăng nhập thành công và điều hướng về trang home Đạt
- Chọn Forgot password ở trang đăng nhập
- Nhập địa chỉ email của tài khoản
- Nhập OTP đã nhận qua email
Hiện thị thông báo mật khẩu mới và điều hướng đến trang đăng nhập
Hiện thị thông báo mật khẩu mới và điều hướng đến trang đăng nhập Đạt
Thay đổi thông tin cá nhân
- Nhập các thông tin cần thay đổi
Thay đổi thông tin thành công
Thay đổi thông tin thành công Đạt
- Nhấn vào Change my password trong mục Profile
- Nhập mật khẩu cũ, mật khẩu mới và Đổi mật khẩu thành công Đổi mật khẩu thành công Đạt
124 xác nhận mật khẩu mới
Xem thông tin cá nhân
- Nhận vào thông tin cá nhân
Hiển thị đúng thông tin cá nhân của người dùng
Hiển thị đúng thông tin cá nhân của người dùng Đạt
Xem thông tin khóa học
- Nhấn vào một khóa học bất kỳ
Hiển thị thông tin chi tiết của một khóa học
Hiển thị thông tin chi tiết của một khóa học Đạt
- Trong trang thông tin chi tiết khóa học nhấn thêm vào giỏ hàng
Thêm khóa học vào giỏ hàng thành công
Thêm khóa học vào giỏ hàng thành công Đạt
- Nhấn vào icon giỏ hàng trên thanh Header Đi đến trang quản lý giỏ hàng và hiển thị giỏ hàng Đi đến trang quản lý giỏ hàng và hiển thị giỏ hàng Đạt
- Trong trang quản lý giỏ hàng chọn nút xóa ở một sản phẩm
Xóa sản phẩm ra khỏi giỏ hàng thành công
Xóa sản phẩm ra khỏi giỏ hàng thành công Đạt
Xem các khóa học đã mua
- Chọn lựa chọn khóa học của tôi trên thanh Header
Hiển thị danh sách khóa học đã mua thành công
Hiển thị danh sách khóa học đã mua thành công Đạt
- Chọn một bài giảng là video trong trang
Hệ thống hiển thị video
Hệ thống hiển thị video Đạt
Làm bài tập trắc nghiệm
- Chọn một bài tập trắc nghiệm trong khóa học
- Bài làm đã được hoàn thành
- Bài làm đã được hoàn thành Đạt
Làm bài tập tự luận
- Chọn một bài tập tự luận trong khóa học
- Bài làm đã được hoàn thành
- Bài làm đã được hoàn thành Đạt
- Click rating vào một khóa học đã mua
- Điền đánh giá và số sao Đánh giá khóa học thành công Đánh giá khóa học thành công Đạt
Xem thảo luận bài giảng
- Truy cập vào một bài học bất kỳ
Hiển thị các thảo luận
Hiển thị các thảo luận Đạt
Thêm thảo luận bài giảng
- Truy cập vào một một bài học bất kỳ
Thảo luận mới được thêm thành công
Thảo luận mới được thêm thành công Đạt
- Truy cập vào trang Manage Course với quyền Manager
- Khóa học mới được thêm thành công
- Khóa học mới được thêm thành công Đạt
- Nhập tên khóa học và tiến hành submit
Xem danh sách nộp bài tập tự luận
- Truy cập vào trang Manage Course với quyền Manager
Hiển thị danh sách bài tập tự luận thành công
Hiển thị danh sách bài tập tự luận thành công Đạt
Chấm bài tập tự luận
- Truy cập vào trang Manage Course với quyền Manager
- Click vào bài tập cần chấm
- Click add feedback và điền thông tin vào
Feedback được thêm thành công
Feedback được thêm thành công Đạt
- Truy cập trang admin/overview
- Chọn năm và tháng muốn xem thống kê
Hiển thị biểu đồ thống kê theo năm, tháng đã chọn
Hiển thị biểu đồ thống kê theo năm, tháng đã chọn Đạt
- Truy cập vào trang admin/user-history
Hiển thị danh sách theo điều kiện đã chọn
Hiển thị danh sách theo điều kiện đã chọn Đạt
127 nhập các điều kiện muốn tìm kiếm
- Truy cập vào trang admin/user
- Tại input search, nhập các điều kiện muốn tìm kiếm
Hiển thị danh sách theo điều kiện đã chọn
Hiển thị danh sách theo điều kiện đã chọn Đạt
- Truy cập vào trang admin/bill
- Tại input search, nhập các điều kiện muốn tìm kiếm
Hiển thị danh sách theo điều kiện đã chọn
Hiển thị danh sách theo điều kiện đã chọn Đạt
- Truy cập vào trang admin/bill
- Tại input search, nhập các điều kiện muốn tìm kiếm
Hiển thị danh sách theo điều kiện đã chọn
Hiển thị danh sách theo điều kiện đã chọn Đạt
- Truy cập vào trang nội dung khóa được cần được xét duyệt
- Nhấn vào Preview để xem nội dung với giao diện user
Hiển thị các bài học theo giao diện user
Hiển thị các bài học theo giao diện user Đạt
- Truy cập vào trang nội dung khóa được cần được xét duyệt
- Nhấn vào Xét Duyệt, và Chấp
Khóa học đã được duyệt thành công
Khóa học đã được duyệt thành công Đạt
- Truy cập vào trang nội dung khóa được cần được xét duyệt
- Click Xét Duyệt, và Không Chấp nhận, chọn lý do
Khóa học không được duyệt và chuyển trạng thái Chờ Xét Duyệt của khóa học thành false
Khóa học không được duyệt và chuyển trạng thái Chờ Xét Duyệt của khóa học thành false Đạt
- Click vào Icon Chuông để xem thông báo
Các thông báo của user sẽ được hiện ra
Các thông báo của user sẽ được hiện ra Đạt
- Truy cập vào trang admin/role
- Nhập thông tin tên, mô tả cho role mới và roleDetail
Role mới được tạo thành công
Role mới được tạo thành công Đạt
- Truy cập vào trang admin/role
- Click vào role cần chỉnh sửa
- Thay đổi các thông tin tên, mô tả và roleDetail
Role được cập nhật thành công
Role được cập nhật thành công Đạt
Bảng 49: Bảng mô tả kết quả kiểm thử
Đánh giá kết quả đã thực hiện được
Sau một thời gian nghiên cứu và hoàn thiện đề tài, nhóm đã thực hiện và đạt những mục tiêu đã đề ra sau:
1.1.1 Về lý thuyết và kỹ năng:
+ Nắm bắt được các công nghệ mới hiện nay như: Spring Boot, Docker, MySQL Typescript, ReactJS, NextJS, JWT
+ Rèn được kỹ năng làm việc nhóm cũng như giải quyết vấn đề
Xây dựng ứng dụng với các tính năng cơ bản:
Về mặt người dùng là người học:
+ Hệ thống học trực tuyến đa dạng gồm các video bài giảng, tài liệu file, các dạng bài tập tự luận, trắc nghiệm, diễn đàn học tập
+ Chức năng tìm kiếm, lọc sản phẩm
+ Quản lý giỏ hàng và các hình thức thanh toán online
+ Trang thông tin khóa học gồm đầy đủ thông tin cùng đánh giá của khách hàng + Chuông thông báo cho người dùng
+ Có các chức năng cơ bản liên quan đến đăng nhập, đăng ký, quên mật khẩu và quản lý thông tin người dùng
Về mặt sử dụng của người quản lý:
+ Quản lý khóa học mà mình đã tạo
Về mặt sử dụng của người quản trị:
+ Xem lịch sử người dùng
+ Quản lý khóa học và phê duyệt các khóa học
Phân tích kết quả
Nhìn chung nhóm đã phát triển dự án web bán khóa học với các chức năng cần thiết và đạt được mục tiêu đề ra ban đầu Thông qua đánh giá đề tài thì nhóm em thấy có những ưu điểm là:
+ Xây dựng một hê thống bán khóa học bao gồm các chức năng cần thiết để khách hàng có thể đăng tải sản phẩm là khóa học lên cho người dùng mua
+ Xây dựng một hệ thống học trực tuyến bao gồm nhiều dạng như video, tài liệu và các dạng bài tập
+ Tốc độ phản hồi video bài giảng nhìn chung khá ổn để đáp ứng nhu cầu khách hàng
+ Đã đóng gói chương trình bằng docker và triển khai được ứng dụng lên host
Tuy nhiên do giới hạn thời gian và nhân lực, ứng dụng vẫn còn những nhược điểm sau:
+ Giao diện chưa tối ưu, chưa responsive nhiều phần
+ Chưa có các dạng bài tập luyện tập lập trình.
Hướng phát triển
Trong tương lai, nhóm sẽ phát triển theo những hướng sau:
+ Xử lý những bug còn tồn động trong hệ thống
+ Thêm một số dạng bài tập rèn luyện code và bài tập sql
DANH MỤC TÀI LIỆU THAM KHẢO
[1] Spring Boot là gì? Những kiến thức cần chuẩn bị khi học Spring Boot, https://vietnix.vn/spring-boot-la-gi/, truy cập vào 21/12/2023
[2] Spring boot là gì? giải mã các thông tin về framework spring boot, https://t3h.com.vn/tin- tuc/spring-boot-la-gi, truy cập vào 21/12/2023
[3] Nâng cao bảo mật hệ thống với Spring Security, https://rabiloo.com/vi/blog/nang-cao-bao- mat-voi-spring-security, truy cập vào 21/12/2023
[4] Giới thiệu về Java, https://viblo.asia/p/gioi-thieu-ve-java-63vKjD8Vl2R, truy cập vào 21/12/2023
[5] Security with Spring Baeldung, https://www.baeldung.com/security-spring, truy cập vào 30/12/2023
[6] Docker là gì?, https://aws.amazon.com/vi/docker/, truy cập vào 21/12/2023
[7] Spring là gì? Lợi ích mà Spring mang lại cho người dùng, https://itnavi.com.vn/blog/spring-la-gi-spring-framework-cua-java, truy cập vào 21/12/2023
[8] React Js là gì? Đặc điểm và tính năng của framework ReactJs, https://bkhost.vn/blog/react-js/#reactjs_co_nhung_tinh_nang_nao, truy cập vào 12/01/2024
[9] ReactJS là gì? Những điều bạn chưa biết về ReactJS, https://aptech.fpt.edu.vn/reactjs-la- gi.html, truy cập vào 12/01/2024
[10] NEXTJS là gì? 1 vài ưu, nhược điểm của NEXTJS, https://kb.pavietnam.vn/nextjs-la-gi- 1-vai-uu-nhuoc-diem-cua-nextjs.html#I_NEXTJS_la_gi, truy cập vào 12/02/2024
[11] Tìm hiểu về Next.js (Phần 1), link truy cập, https://viblo.asia/p/tim-hieu-ve-nextjs-phan- 1-V3m5WQkwZO7 , truy cập vào 15/02/2024
[12] 5 mẫu kiến trúc phần mềm, hệ thống phổ biến hiện nay, https://blogchiasekienthuc.com/lap-trinh/mau-kien-truc-phan-mem-he-thong-pho-bien.html, truy cập vào 19/06