Chương 1 TỔNG QUAN 1.1 Lý do chọn đề tài 1.3 mhhcđ là gì Trong bối cảnh công cuộc chuyển đổi số ở nước ta hiện nay đang được đẩy mạnh dẫn đến nhu cầu cấp thiết cần phải ứng dụng công nghệ thông tin vào mọi lĩnh vực của đời sống xã hội đã tạo ra nhiều cơ hội việc làm hấp dẫn đồng thời thúc đẩy quá trình học và tự học lập trình trở nên phổ biến hơn bao giờ hết. Nhờ sự bùng nổ của Internet, việc học lập trình đã không còn bị giới hạn, cho phép người học tiếp cận kiến thức ở bất kỳ đâu, bất kỳ lúc nào. Cùng với đó, những ngành học và công việc liên quan tới lập trình không chỉ trở nên hấp dẫn mà cũng ngày càng cạnh tranh hơn, thu hút rất đông người tham gia. Khi bắt đầu học lập trình cơ bản, đặc biết là trong trường học, người học thường được tiếp cận với các môn học như Nhập môn lập trình, Kỹ thuật lập trình, Cấu trúc dữ liệu và giải thuật, v.
Để đánh giá mức độ hiểu biết và hoàn thành chuẩn đầu ra của môn học, người học sẽ phải hoàn thành các bài tập lớn xuyên suốt môn học, vốn khá phức tạp và đòi hỏi khả năng tự kiểm tra, sửa lỗi bài làm hiệu quả. Mặc dù giảng viên cung cấp các bộ testcase để chấm bài và một số bộ testcase mẫu để kiểm thử, sinh viên mới học thường vẫn gặp nhiều khó khăn trong việc tự tạo những testcase đủ chất lượng để kiểm thử bài làm của mình. Trong những năm gần đây, sự phát triển của các hệ thống quản lý học tập (LMS) tại các trường Đại học ở Việt Nam đã mang lại nhiều tiện ích, giúp giảng viên quản lý khóa học và bài tập một cách hiệu quả. Đồng thời, các hệ thống này cũng giúp cho học sinh có khả năng tiếp cận với các tài nguyên học thuật một cách dễ dàng hơn.
Các hệ thống LMS cũng hỗ trợ sinh viên nộp bài và chấm bài tự động, tuy nhiên, tính năng trao đổi qua diễn đàn trên các hệ thống này chủ yếu chỉ để phục vụ hỏi đáp giữa sinh viên và giảng viên. Sự tương tác giữa sinh viên 1 Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM Khoa Khoa Học & Kỹ Thuật Máy Tính với nhau vẫn chưa thực sự hiệu quả và còn nhiều hạn chế. Đây là một thách thức lớn cần được giải quyết để thúc đẩy việc hợp tác, kết nối và chia sẻ kiến thức giữa người học với nhau nhằm đạt được kết quả tốt nhất. Trên cơ sở lấy testcase và sự tương tác giữa người học làm nền tảng và động lực, nhóm chúng em hướng đến việc phát triển một hệ thống hỗ trợ sinh viên học các môn lập trình cơ bản thông qua việc trao đổi, chia sẻ testcase, từ đó nâng cao chất lượng bài làm.
Nhóm đã nghiên cứu và nhận thấy rằng có ba lý do chính khiến cho một hệ thống như trên là cần thiết và hợp lý trong bối cảnh hiện nay: Thứ nhất, vấn đề tương tác giữa sinh viên với nhau cần được khuyến khích thông qua việc chia sẻ và trao đổi testcase. Trong quá trình học lập trình, việc một sinh viên có thể tự kiểm thử chương trình của mình cũng quan trọng như quá trình sinh viên có thể viết ra một chương trình có thể thực thi được. Testcase giúp sinh viên có thể kiểm tra mức độ chính xác của chương trình khi hoạt động với những đầu vào khác nhau. Cách sinh viên viết ra các bộ testcase và kiểm thử chương trình có thể phản ánh mức độ thông hiểu của sinh viên về bài tập [cite], và khi việc viết testcase được thực hiện đúng, kết quả làm bài của sinh viên sẽ được cải thiện [cite].
Hơn thế, khi sinh viên sử dụng những testcase này để thảo luận với nhau, họ có thể giúp nhau tìm ra những lỗi mà bản thân chưa thể tìm thấy khi làm việc cá nhân, và từ đó hoàn thiện được cả kỹ năng kiểm thử và viết chương trình của mình. Ngoài ra, việc trao đổi thông qua một diễn đàn chung cũng tạo nên một môi trường tập trung hơn cho sinh viên khi tiếp cận với các testcase, và ở trong không gian chung này, sinh viên có thể tăng cường khả năng giao tiếp, tư duy phản biện, giải quyết vấn đề, và có thể cùng nhau hoàn thiện kỹ năng lập trình và kiểm thử, tạo nên một cộng đồng học tập chủ động, gắn kết. Thứ hai, một hệ thống có thể tự động phân loại độ khó của testcase không chỉ giúp tối ưu tiến trình thực hiện bài tập của sinh viên mà còn cải thiện sự tương tác giữa sinh viên với nhau trong hệ thống. Một số nền tảng phổ biến để tự luyện tập lập trình như Leetcode hay HackerRank đều có sẵn một hệ thống phân loại độ khó của từng bài toán theo mức độ từ dễ, trung bình đến khó.
Hệ thống phân loại độ khó này là một công cụ hữu ích đối với người học lập trình bởi nhiều lý do. Người học có thể dễ dàng tìm kiếm những bài tập phù hợp với nhu cầu của mình, tập trung vào những bài tập nằm trong phạm vi khả năng của họ, và theo dõi tiến độ học tập của bản thân. Nhóm chúng em nhận thấy rằng, ứng dụng ý tưởng phân loại độ khó của các hệ thống khác để xây dựng một hệ thống có thể tự động phân loại độ khó của testcase - cơ sở của những luồng thảo luận trong hệ thống - không chỉ giúp hệ thống thực hiện được những điểm mạnh như các hệ thống khác, mà còn là một tiền đề tốt để thực hiện một tính năng quan trọng của hệ thống, đó là tự động gợi ý các bài post có chứa testcase phù hợp cho sinh viên. Thứ ba, khả năng gợi ý những bài đăng có nội dung bao gồm các testcase phù hợp với năng lực và nhu cầu của sinh viên vào từng thời điểm là rất cần thiết cho một hệ thống khuyến khích sự chủ động tham gia của sinh viên vào khóa học.
Như đã đề cập ở trên, các nền tảng tự học lập trình khác tuy đã có một hệ thống phân loại các bài tập đủ tốt, nhưng các nền tảng này không chủ động giới thiệu những bài tập có liên quan cho người học. Trong khi đó, hiện nay Báo cáo Đồ án chuyên ngành (CO4029) - HK1 2023 - 2024 Trang 2/34 Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM Khoa Khoa Học & Kỹ Thuật Máy Tính các nền tảng mạng xã hội đang ngày càng phát triển mạnh hơn, mà trung tâm của sự phát triển này nằm ở khả năng phán đoán, nắm bắt được mong muốn của người dùng và không ngừng giới thiệu đến họ những nội dung phù hợp, bằng cách sử dụng các thuật toán gợi ý. Ứng dụng cơ chế gợi ý tương tự cho các bài post có đính kèm testcase trong hệ thống mà nhóm chúng em hướng tới phát triển sẽ mang vai trò định hướng quan trọng đối với sinh viên trong quá trình thực hiện bài tập của mình. Sinh viên, đặc biệt là sinh viên vừa bắt đầu với những môn học nhập môn và chưa có nhiều kinh nghiệm với việc kiểm thử chương trình, có thể tận dụng những gợi ý của hệ thống để cải thiện khả năng lập trình và kiểm thử của bản thân.
Từ những lý do trên, nhóm chúng em đã quyết định lựa chọn đề tài “Xây dựng hệ thống chia sẻ testcase hỗ trợ sinh viên học các môn học lập trình” làm đề tài nghiên cứu trong Đồ án chuyên ngành.4 Mục tiêu đề tài Dựa trên các lý do cùng với mục đích chung là cải thiện hiệu quả làm bài tập lập trình của sinh viên, khuyến khích sự tương tác giữa sinh viên với nhau trong quá trình học thông qua việc trao đổi, chia sẻ, chạy thử testcase, nhóm chúng em đã đề ra các mục tiêu riêng biệt cụ thể cho đề tài: • Khảo sát hệ thống gợi ý và các phương pháp trích xuất chủ đề cho các bài đăng trên forum. • Xây dựng các mô hình chủ đề như LDA, LSA để trích xuất chủ đề từ các bài đăng trên forum. • So sánh và đánh giá hiệu quả trích xuất chủ đề trên tập dữ liệu thu thập từ các diễn đàn khóa học trên Coursera, bao gồm việc so sánh các mô hình chủ đề khác nhau và so sánh chúng với kỹ thuật TF-IDF. • Đề xuất hệ thống chia sẻ testcase dựa trên việc trích xuất chủ đề từ các mô hình và quy trình gợi ý bài đăng testcase phù hợp với sự quan tâm của sinh viên.
• Triển khai hệ thống chia sẻ testcase vào học kì 2 năm học 2024 - 2025. • So sánh và đánh giá hiệu quả trích xuất chủ đề trên tập dữ liệu thu thập từ hệ thống chia sẻ testcase được nhóm đề xuất, bao gồm việc so sánh các mô hình chủ đề khác nhau và so sánh chúng với kỹ thuật TF-IDF. Báo cáo Đồ án chuyên ngành (CO4029) - HK1 2023 - 2024 Trang 3/34 Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM Khoa Khoa Học & Kỹ Thuật Máy Tính 1.5 Phạm vi đề tài Với các mục tiêu của đề tài mà nhóm đề ra, nhóm đã quyết định phạm vi hoạt động tốt nhất của đề tài về mặt đối tượng và thời gian như sau: • Về đối tượng: Áp dụng cho sinh viên và giảng viên của Khoa Khoa học và Kỹ thuật Máy Tính tại Trường Đại học Bách khoa - ĐHQG HCM đang học tập và giảng dạy các môn học lập trình cơ bản gồm: Kỹ thuật lập trình, Cấu trúc dữ liệu và Giải thuật. • Về thời gian: Hệ thống sẽ được phát triển và triển khai trong khoảng thời gian từ tháng 09 năm 2024 đến tháng 06 năm 2025, tương ứng với hai học kì 241 và 242.6 Cấu trúc đề tài Báo cáo Đồ án chuyên ngành (CO4029) - HK1 2023 - 2024 Trang 4/34 Chương 2 KIẾN THỨC NỀN TẢNG 2.1 Hệ thống gợi ý 2.1 Giới thiệu Hệ thống gợi ý (recommendation system) là một loại hệ thống lọc thông tin (informa- tion filtering system) cung cấp các gợi ý về những mục phù hợp nhất với một người dùng cụ thể.[21][20] Hệ thống gợi ý đặc biệt hữu ích khi một cá nhân cần chọn một mục từ số lượng khổng lồ các mục mà một dịch vụ có thể cung cấp.[20] Cụ thể hơn, theo nhóm tác giả [1], hệ thống gợi ý là hệ thống hỗ trợ ra quyết định nhằm gợi ý các thông tin liên quan đến người dùng một cách dễ dàng và nhanh chóng, phù hợp với từng người dùng.