Tổng quan nghiên cứu
Sao chép mã nguồn trong các trường đại học đang trở thành một vấn đề nghiêm trọng với tỷ lệ sinh viên thừa nhận hành vi này lên đến khoảng 94%, trong đó 35% thường xuyên sao chép và 40% thỉnh thoảng thực hiện. Vấn đề không chỉ giới hạn ở văn bản mà còn phổ biến trong mã nguồn lập trình, gây khó khăn cho việc đánh giá năng lực thực sự của sinh viên. Việc phát hiện sao chép mã nguồn bằng mắt thường là không khả thi do tính phức tạp và khó đọc của mã nguồn. Do đó, các trường đại học cần có hệ thống phát hiện sao chép mã nguồn hiệu quả để hỗ trợ giảng viên trong việc chấm điểm và nâng cao đạo đức học thuật.
Mục tiêu của luận văn là phát triển phương pháp top-down kết hợp với hệ thống ngôn ngữ mở nhằm nâng cao hiệu suất và độ chính xác trong phát hiện sao chép mã nguồn sinh viên. Phương pháp này phân tích và so sánh mã nguồn ở ba cấp độ: module, lưu đồ và phát biểu, từ tổng quát đến chi tiết, giúp giảm số lượng cặp chương trình cần so sánh và tập trung vào những phần có khả năng sao chép cao nhất. Hệ thống được thử nghiệm trên ngôn ngữ Pascal với tập dữ liệu giả lập sao chép và so sánh với các hệ thống hiện có như JPlag và Sim, cho kết quả độ chính xác cao hơn trong nhiều trường hợp.
Phạm vi nghiên cứu tập trung vào mã nguồn sinh viên viết bằng Pascal trong môi trường đại học, với dữ liệu thử nghiệm từ các chương trình được điều chỉnh để mô phỏng hành vi sao chép. Ý nghĩa nghiên cứu thể hiện qua việc cung cấp công cụ hỗ trợ giảng viên phát hiện gian lận, góp phần nâng cao chất lượng đào tạo và ý thức tôn trọng bản quyền trong học thuật.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết áp dụng
Luận văn dựa trên hai phương pháp chính trong phát hiện sao chép mã nguồn: attribute-counting và structure-metric. Phương pháp attribute-counting sử dụng các chỉ số thống kê như số toán tử, số toán hạng, số dòng code, số biến khai báo để đánh giá mức độ tương tự giữa các chương trình. Tuy nhiên, phương pháp này có độ chính xác thấp và hiệu suất kém khi đối mặt với các kỹ thuật sao chép tinh vi.
Phương pháp structure-metric cải tiến bằng cách phân tích cấu trúc chương trình thành chuỗi token đại diện cho cấu trúc, sau đó so sánh các chuỗi này để tìm độ tương tự. Các hệ thống như YAP3, Plague và Sim sử dụng giải thuật GST (Greedy String Tiling) để so sánh chuỗi token, cho hiệu suất và độ chính xác cao hơn attribute-counting. Tuy nhiên, khi chuỗi token dài, thời gian xử lý tăng đáng kể và chuỗi token không hoàn toàn phản ánh cấu trúc chương trình.
Phương pháp top-down được đề xuất trong luận văn là sự kết hợp ưu điểm của structure-metric với phân tích đa cấp độ: từ module (đồ thị triệu gọi và đồ thị lồng khối), đến lưu đồ (chuỗi lưu đồ) và cuối cùng là phát biểu (chuỗi phát biểu). Mỗi cấp độ giúp giảm số lượng cặp chương trình cần so sánh, tập trung vào các phần có khả năng sao chép cao nhất, đồng thời tăng độ chính xác nhờ sử dụng các cấu trúc đặc trưng của mã nguồn.
Các khái niệm chính bao gồm:
- Đồ thị triệu gọi (Call Graph): đại diện cho cấu trúc gọi hàm giữa các chương trình con.
- Đồ thị lồng khối (Block Nesting Graph): biểu diễn cấu trúc khối lồng nhau trong chương trình.
- Chuỗi lưu đồ (Flowchart String): biểu diễn cấu trúc điều khiển của chương trình con dưới dạng chuỗi ký tự đại diện cho các phát biểu điều khiển và xử lý.
- Chuỗi phát biểu (Statement String): biểu diễn các phát biểu gán và gọi hàm trong khối xử lý.
Phương pháp nghiên cứu
Nguồn dữ liệu nghiên cứu là các mã nguồn chương trình Pascal của sinh viên, được giả lập sao chép bằng cách điều chỉnh các chương trình gốc theo các phương pháp phổ biến như thay đổi tên biến, chèn phát biểu không ảnh hưởng, thay thế cấu trúc điều khiển tương đương.
Phương pháp nghiên cứu bao gồm:
- Phân tích cú pháp: sử dụng công cụ ANTLR để phân tích mã nguồn thành các cấu trúc tĩnh (đồ thị lồng khối), cấu trúc động (đồ thị triệu gọi), lưu đồ và chuỗi phát biểu. ANTLR cho phép xây dựng hệ thống ngôn ngữ mở, dễ dàng mở rộng cho các ngôn ngữ lập trình khác bằng cách thay đổi tập tin đặc tả ngôn ngữ.
- Phân tích và so sánh đa cấp: thực hiện so sánh theo ba cấp độ:
- Cấp module: so sánh đồ thị triệu gọi và đồ thị lồng khối để lọc ra các cặp chương trình có khả năng sao chép cao nhất.
- Cấp lưu đồ: so sánh chuỗi lưu đồ của các chương trình con tương ứng để tiếp tục thu hẹp số cặp chương trình.
- Cấp phát biểu: so sánh chuỗi phát biểu trong các khối xử lý để xác định chính xác các đoạn mã sao chép.
- Phương pháp chọn mẫu: toàn bộ tập mã nguồn được phân tích, so sánh theo cặp với thuật toán ánh xạ đồ thị sử dụng thư viện VFLIB để tìm đồ thị con đẳng cấu, giúp xác định các phần tương đồng trong cấu trúc chương trình.
- Timeline nghiên cứu: quá trình thực hiện gồm xây dựng mô hình lý thuyết, phát triển hệ thống phần mềm, thử nghiệm trên tập dữ liệu Pascal, so sánh kết quả với các hệ thống hiện có, và đánh giá hiệu quả.
Kết quả nghiên cứu và thảo luận
Những phát hiện chính
Hiệu quả của phương pháp top-down trong phát hiện sao chép:
Hệ thống top-down đã phát hiện chính xác các cặp chương trình sao chép với độ chính xác cao hơn so với hệ thống Sim và tương đương hoặc vượt trội hơn JPlag trong việc phân cấp độ tương tự. Ví dụ, trong một số trường hợp, độ chính xác của hệ thống top-down vượt trội hơn Sim khoảng 15-20%.Giảm số lượng cặp chương trình cần so sánh qua từng cấp độ:
Qua cấp module, số cặp chương trình được lọc giảm xuống khoảng 30-40% so với tổng số ban đầu. Tiếp tục qua cấp lưu đồ, số cặp giảm thêm khoảng 50%, và cuối cùng qua cấp phát biểu chỉ còn khoảng 10-15% số cặp ban đầu. Điều này giúp tăng hiệu suất xử lý đáng kể.Khả năng phát hiện các kỹ thuật sao chép tinh vi:
Phương pháp top-down có thể phát hiện các trường hợp sao chép sử dụng cấu trúc điều khiển tương đương (ví dụ thay thế vòng for bằng while), chèn phát biểu không ảnh hưởng, hoặc thay đổi tên biến mà các phương pháp attribute-counting không thể phát hiện.Hệ thống ngôn ngữ mở giúp mở rộng dễ dàng:
Việc sử dụng ANTLR cho phép hệ thống dễ dàng chuyển đổi sang các ngôn ngữ lập trình khác bằng cách thay đổi tập tin đặc tả ngôn ngữ mà không cần xây dựng lại toàn bộ hệ thống, giảm chi phí và thời gian phát triển.
Thảo luận kết quả
Nguyên nhân chính giúp phương pháp top-down đạt hiệu quả cao là do việc phân tích đa cấp độ, từ tổng quát đến chi tiết, giúp loại bỏ nhanh các cặp chương trình không tương đồng ngay từ cấp module, giảm tải cho các bước so sánh chi tiết hơn. Việc sử dụng các cấu trúc đặc trưng như đồ thị triệu gọi, đồ thị lồng khối, lưu đồ và chuỗi phát biểu phản ánh chính xác cấu trúc logic của chương trình, giúp phát hiện các biến đổi tinh vi trong mã nguồn.
So với các nghiên cứu trước đây, phương pháp top-down khắc phục được hạn chế của giải thuật GST trong structure-metric khi chuỗi token dài làm tăng thời gian xử lý và giảm độ chính xác. Kết quả thử nghiệm cũng phù hợp với báo cáo của các nghiên cứu về hiệu quả vượt trội của phương pháp structure-metric so với attribute-counting.
Dữ liệu có thể được trình bày qua biểu đồ thể hiện tỷ lệ giảm số cặp chương trình qua từng cấp độ, biểu đồ so sánh độ chính xác giữa các hệ thống, và bảng thống kê các trường hợp sao chép được phát hiện theo từng kỹ thuật sao chép.
Đề xuất và khuyến nghị
Triển khai hệ thống top-down trong các trường đại học:
Khuyến nghị các trường đại học áp dụng hệ thống phát hiện sao chép mã nguồn dựa trên phương pháp top-down để nâng cao hiệu quả phát hiện gian lận, đặc biệt trong các môn học lập trình. Thời gian triển khai dự kiến trong vòng 6-12 tháng, do phòng công nghệ thông tin hoặc trung tâm kiểm định chất lượng chịu trách nhiệm.Mở rộng hỗ trợ đa ngôn ngữ:
Tận dụng tính năng ngôn ngữ mở của hệ thống, phát triển tập tin đặc tả cho các ngôn ngữ lập trình phổ biến khác như C, C++, Java để mở rộng phạm vi áp dụng. Quá trình này có thể thực hiện song song với việc triển khai hệ thống hiện tại, dự kiến hoàn thành trong 12-18 tháng.Tích hợp hệ thống với các nền tảng quản lý học tập:
Đề xuất tích hợp hệ thống phát hiện sao chép vào các hệ thống quản lý học tập (LMS) để tự động kiểm tra mã nguồn khi sinh viên nộp bài, giúp giảng viên tiết kiệm thời gian và nâng cao tính minh bạch. Chủ thể thực hiện là bộ phận phát triển phần mềm của trường, thời gian thực hiện khoảng 6 tháng.Đào tạo và nâng cao nhận thức về đạo đức học thuật:
Kết hợp sử dụng hệ thống với các chương trình đào tạo, tuyên truyền về tôn trọng bản quyền và đạo đức trong học tập để giảm thiểu hành vi sao chép. Phòng đào tạo và các khoa chuyên môn chịu trách nhiệm, triển khai liên tục hàng năm.
Đối tượng nên tham khảo luận văn
Giảng viên và cán bộ quản lý giáo dục:
Hỗ trợ trong việc phát hiện và xử lý các hành vi sao chép trong quá trình chấm bài, nâng cao chất lượng đào tạo và đảm bảo công bằng trong đánh giá.Nhà phát triển phần mềm giáo dục:
Cung cấp cơ sở lý thuyết và kỹ thuật để phát triển các hệ thống phát hiện sao chép mã nguồn hiệu quả, đặc biệt là các giải pháp đa ngôn ngữ và đa cấp độ.Sinh viên ngành Công nghệ Thông tin:
Giúp hiểu rõ các kỹ thuật phát hiện sao chép, từ đó nâng cao ý thức về đạo đức học thuật và tránh các hành vi gian lận.Các nhà nghiên cứu trong lĩnh vực xử lý ngôn ngữ lập trình và an ninh phần mềm:
Cung cấp phương pháp mới và dữ liệu thực nghiệm để phát triển các nghiên cứu tiếp theo về phát hiện sao chép và bảo vệ bản quyền phần mềm.
Câu hỏi thường gặp
Phương pháp top-down khác gì so với các phương pháp phát hiện sao chép hiện có?
Phương pháp top-down phân tích mã nguồn theo ba cấp độ từ tổng quát đến chi tiết (module, lưu đồ, phát biểu), giúp giảm số lượng cặp chương trình cần so sánh và tăng độ chính xác, trong khi các phương pháp trước chủ yếu dựa trên so sánh chuỗi token hoặc chỉ số thống kê.Hệ thống có thể áp dụng cho các ngôn ngữ lập trình khác ngoài Pascal không?
Có, nhờ hệ thống ngôn ngữ mở sử dụng ANTLR, chỉ cần thay đổi tập tin đặc tả ngôn ngữ là có thể phân tích và so sánh mã nguồn của các ngôn ngữ khác nhau mà không cần xây dựng lại toàn bộ hệ thống.Phương pháp này có phát hiện được các kỹ thuật sao chép tinh vi như thay đổi tên biến hay cấu trúc điều khiển không?
Có, phương pháp top-down sử dụng cấu trúc đặc trưng của chương trình như lưu đồ và chuỗi phát biểu nên có thể phát hiện các kỹ thuật sao chép tinh vi như thay đổi tên biến, thay thế cấu trúc điều khiển tương đương, hoặc chèn phát biểu không ảnh hưởng.Hiệu suất xử lý của hệ thống như thế nào khi số lượng bài thi lớn?
Nhờ việc lọc dần qua các cấp độ, số lượng cặp chương trình cần so sánh giảm đáng kể, giúp hệ thống xử lý hiệu quả hơn so với các phương pháp so sánh toàn bộ chuỗi token, phù hợp với môi trường có nhiều bài thi.Làm thế nào để tích hợp hệ thống vào quy trình chấm thi hiện tại?
Hệ thống có thể được tích hợp vào các nền tảng quản lý học tập hoặc phần mềm chấm thi hiện có, tự động phân tích và báo cáo các cặp bài có khả năng sao chép, hỗ trợ giảng viên trong việc đánh giá và xử lý.
Kết luận
- Luận văn đã phát triển thành công phương pháp top-down kết hợp hệ thống ngôn ngữ mở, nâng cao hiệu quả và độ chính xác trong phát hiện sao chép mã nguồn sinh viên.
- Hệ thống được thử nghiệm trên ngôn ngữ Pascal với kết quả vượt trội so với các hệ thống hiện có như Sim và tương đương hoặc tốt hơn JPlag.
- Phương pháp phân tích đa cấp độ giúp giảm đáng kể số lượng cặp chương trình cần so sánh, tăng hiệu suất xử lý.
- Hệ thống ngôn ngữ mở cho phép mở rộng dễ dàng sang các ngôn ngữ lập trình khác, giảm chi phí phát triển.
- Đề xuất triển khai hệ thống trong các trường đại học, mở rộng hỗ trợ đa ngôn ngữ và tích hợp vào quy trình chấm thi để nâng cao chất lượng đào tạo và đạo đức học thuật.
Tiếp theo, cần tiến hành mở rộng tập dữ liệu thử nghiệm, phát triển tập tin đặc tả cho các ngôn ngữ khác và xây dựng giao diện người dùng thân thiện để triển khai thực tế. Mời các nhà nghiên cứu và giảng viên quan tâm liên hệ để hợp tác phát triển và ứng dụng hệ thống.