Phát hiện sao chép mã nguồn chương trình dựa trên phân rã cấu trúc (ngôn ngữ c++)

81 24 0
Phát hiện sao chép mã nguồn chương trình dựa trên phân rã cấu trúc (ngôn ngữ c++)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH Vũ Thị Phương PHÁT HIỆN SAO CHÉP MÃ NGUỒN CHƯƠNG TRÌNH DỰA TRÊN PHÂN RÃ CẤU TRÚC (NGÔN NGỮ C++) LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thành phố Hồ Chí Minh - 2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHỐ HỒ CHÍ MINH Vũ Thị Phương PHÁT HIỆN SAO CHÉP MÃ NGUỒN CHƯƠNG TRÌNH DỰA TRÊN PHÂN RÃ CẤU TRÚC (NGÔN NGỮ C++) Chuyên ngành: Khoa học máy tính Mã số: 8480101 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS PHẠM THẾ BẢO Thành phố Hồ Chí Minh - 2018 LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu riêng tơi hướng dẫn khoa học PGS.TS Phạm Thế Bảo Các số liệu sử dụng phân tích luận văn có nguồn gốc rõ ràng, công bố theo quy định Các kết nghiên cứu luận văn tự tìm hiểu, phân tích cách trung thực, khách quan chưa công bố nghiên cứu khác Tất tham khảo kế thừa trích dẫn tham chiếu đầy đủ Học viên thực Vũ Thị Phương LỜI CẢM ƠN Lời đầu tiên, tơi xin tỏ lịng biết ơn sâu sắc đến PGS.TS Phạm Thế Bảo tận tình hướng dẫn, động viên tơi suốt q trình thực luận văn Tôi xin chân thành cảm ơn quý Thầy môn lớp Cao học Khoa học Máy tính – K27 tận tình truyền đạt kiến thức năm học tập Với vốn kiến thức tiếp thu q trình học khơng tảng cho trình nghiên cứu luận văn mà cịn hành trang q báu để tơi áp dụng vào cơng tác giảng dạy Tơi chân thành cảm ơn trường THPT chuyên Lương Thế Vinh, Phòng Sau đại học Trường Đại học Sư Phạm Tp HCM tạo điều kiện thuận lợi để thực luận văn Tôi xin chân thành cảm ơn đại gia đình ln u thương, chia sẻ ủng hộ suốt thời gian học tập thực luận văn Cuối tơi xin kính chúc quý Thầy dồi sức khỏe đạt nhiều thành cơng nghiệp Tp Hồ Chí Minh, tháng năm 2018 Học viên thực Vũ Thị Phương MỤC LỤC Trang phụ bìa Lời cam đoan Lời cảm ơn Mục lục Danh mục bảng Danh mục hình vẽ Danh mục thuật ngữ viết tắt Chương TỔNG QUAN 1.1 Đặt vấn đề 1.2 Các hướng tiếp cận 1.3 Đề xuất hướng giải 1.4 Mục tiêu luận văn 1.5 Nội dung thực 1.6 Bố cục luận văn Chương CƠ SỞ LÝ THUYẾT 2.1 Sao chép mã nguồn 2.1.1 Đoạn mã nguồn 2.1.2 Bản đoạn mã nguồn 2.1.3 Sao chép đoạn mã nguồn 2.2 Các kỹ thuật chép mã nguồn chương trình thường gặp 10 2.2.1 Thay đổi thuộc tính tập tin 10 2.2.2 Thay đổi thích 10 2.2.3 Thay đổi khoảng trắng 11 2.2.4 Thay đổi tên biến 11 2.2.5 Sắp xếp lại mã nguồn 12 2.2.6 Thêm đoạn mã nguồn 12 2.2.7 Thay đổi biểu thức đại số 13 2.2.8 Thay đổi cú pháp mã nguồn 14 2.3 Phân loại chép mã nguồn 14 2.4 Các phương pháp phát chép mã nguồn 16 2.4.1 Phương pháp sử dụng mô hình khơng gian vector 17 2.4.2 Thuật toán so khớp chuỗi 17 2.4.3 Phương pháp phát dựa vào cấu trúc 18 2.4.4 Phương pháp lai 20 2.4.5 Giới hạn phương pháp 20 2.5 Một số công cụ phát chép mã nguồn 21 2.6 Thuật toán k-gram 24 2.7 Thuật toán Winnowing 24 Chương XÂY DỰNG THUẬT GIẢI 27 3.1 Phân rã chương trình 28 3.2 Tiền xử lý 30 3.3 Đánh giá mức độ tương đồng hai đoạn chương trình 33 3.4 Tìm hai đoạn chương trình có mức độ tương đồng cao 35 3.5 Đánh giá mức độ tương đồng hai chương trình 36 3.6 Gom nhóm chép 37 Chương THỰC NGHIỆM 39 4.1 Phạm vi 39 4.2 Môi trường thực nghiệm 39 4.2.1 Ngơn ngữ lập trình 39 4.2.2 Thiết lập môi trường thực nghiệm 39 4.3 Tổ chức liệu 40 4.4 Độ đo 42 4.5 Kết 43 4.5.1 Sao chép mã nguồn không chỉnh sửa 43 4.5.2 Sao chép mã nguồn loại 46 4.5.3 Sao chép mã nguồn loại 50 4.5.4 Sao chép mã nguồn loại 53 4.5.5 Sao chép mã nguồn loại 57 Chương TỔNG KẾT 61 5.1 Đánh giá kết 61 5.1.1 Thời gian thực chương trình 61 5.1.2 Độ xác chương trình 62 5.1.3 So sánh độ xác chương trình với cơng cụ khác 64 5.1.4 Ưu khuyết điểm chương trình 64 5.2 Kết luận 65 5.3 Hướng phát triển 65 TÀI LIỆU THAM KHẢO 67 DANH MỤC CÁC BẢNG Bảng 2.1 Ví dụ kỹ thuật thay đổi thích 10 Bảng 2.2 Ví dụ kỹ thuật thay đổi khoảng trắng 11 Bảng 2.3 Ví dụ kỹ thuật thay đổi tên biến 12 Bảng 2.4 Ví dụ kỹ thuật xếp lại mã nguồn 12 Bảng 2.5 Ví dụ kỹ thuật thêm đoạn mã nguồn 13 Bảng 2.6 Ví dụ kỹ thuật thay đổi biểu thức đại số 14 Bảng 2.7 Ví dụ kỹ thuật thay đổi cú pháp mã nguồn 14 Bảng 2.8 Ví dụ loại chép mã nguồn 16 Bảng 2.9 So sánh công cụ phát chép 23 Bảng 4.1 Thiết lập môi trường thực nghiệm 39 Bảng 4.2 Bảng chi tiết tổ chức liệu 41 Bảng 4.3 Kết chép liệu nhân 44 Bảng 4.4 Bảng phân tích kết chép chương trình nhân 45 Bảng 4.5 Kết chép kỹ thuật thay đổi thích 46 Bảng 4.6 Bảng phân tích kết chép thay đổi thích 47 Bảng 4.7 Kết chép kỹ thuật thay đổi khoảng trắng 48 Bảng 4.8 Bảng phân tích kết chép thay đổi khoảng trắng 50 Bảng 4.9 Kết chép có thay đổi tên biến 51 Bảng 4.10 Bảng phân tích kết chép đổi tên biến 52 Bảng 4.11 Kết chép có thay đổi vị trí đoạn mã nguồn 53 Bảng 4.12 Bảng phân tích kết chép thay đổi vị trí đoạn mã nguồn 54 Bảng 4.13 Kết chép có thêm đoạn mã nguồn 55 Bảng 4.14 Bảng phân tích kết chép thêm đoạn mã nguồn 57 Bảng 4.15 Kết chép thay đổi cú pháp câu lệnh IF 58 Bảng 4.16 Bảng phân tích kết chép thay đổi hàm IF 59 Bảng 5.1 So sánh thời gian thực phân tích chép theo loại chép 61 Bảng 5.2 So sánh độ xác chương trình theo loại chép 62 DANH MỤC CÁC HÌNH VẼ Hình 1.1 Minh họa đề xuất hướng giải Hình 2.1 Ví dụ đoạn mã nguồn Hình 2.2 Ví dụ đoạn mã nguồn Hình 2.3 Một số chép Hình 2.4 Phân loại chép mã nguồn [27] 15 Hình 2.5 Minh họa số phương pháp phát chép mã nguồn 20 Hình 2.6 Một số cơng cụ phát chép [47] 21 Hình 2.7 Sơ đồ khối minh họa thuật toán Winnowing 26 Hình 3.1 Sơ đồ bước thực tìm độ tương đồng hai chương trình 27 Hình 3.2 Minh họa cách phân rã mã nguồn chương trình 28 Hình 3.3 Minh họa cách tìm hai đoạn mã nguồn chương trình có mức độ tương đồng cao 35 Hình 4.1 Sơ đồ tổ chức liệu 41 Hình 4.2 Thời gian phân tích chép mã nguồn liệu nhân 45 Hình 4.3 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi thích 47 Hình 4.4 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi khoảng trắng 49 Hình 4.5 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi tên biến 52 Hình 4.6 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi vị trí đoạn mã nguồn 54 Hình 4.7 Thời gian phân tích chép với kỹ thuật thêm đoạn mã nguồn 56 Hình 4.8 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi hàm IF 59 Hình 5.1 Thời gian phân tích chép mã nguồn theo loại chép 62 Hình 5.2 Độ xác phân tích chép mã nguồn theo loại chép 63 Hình 5.3 So sánh độ xác công cụ 64 DANH MỤC THUẬT NGỮ VIẾT TẮT TỪ VIẾT TẮT Ý NGHĨA LSA Latent Semantic Analysis ICA Independent Component Analysis SVD Singular Value Decomposition LCS Longest Common Subsequence KR Karp-Rabin RKR Running Karp-Rabin GST Greedy String Tiling AST Abstract Syntax Tree PDT Program Description Tree PDG Program Dependence Graph LSH Locating Sesitive Hasing SIM Software Similarity Tester MOSS Measure of Software Similarity CT Chương trình 57 Bảng 4.14 Bảng phân tích kết chép thêm đoạn mã nguồn Lần thực Precision Recall Accuracy Error_rate F1 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 75.0% 100% 76.0% 24.0% 85.7% 10 75.0% 100% 76.0% 24.0% 85.7% Trung bình 75.0% 100% 76.0% 24.0% 85.7% 4.5.5 Sao chép mã nguồn loại ❖ Thay đổi cú pháp câu lệnh IF Kỹ thuật thay đổi cú pháp câu lệnh IF thực nghiệm liệu gồm 50 chương trình, đó: chương trình gốc giữ nguyên nội dung, 46 chương trình chép từ chương trình gốc thay đổi cú pháp từ câu lệnh if … else sang câu lệnh switch … case Kết thực nghiệm liệu gốc thể bảng 4.15, thời gian thực phân tích biểu diễn hình 4.8 58 Bảng 4.15 Kết chép thay đổi cú pháp câu lệnh IF Tổng số CT Lần Thời gian phát thực thực hiện có (s) chép lẫn Tổng số CT Tổng số CT Tổng số phát phát CT không sao phát chép chép sai 0.0000068431 50 29 21 0.0000063543 50 29 21 0.0000053767 50 29 21 0.0000087983 50 29 21 0.0000063543 50 29 21 0.0000063543 50 29 21 0.0000063543 50 29 21 0.0000053767 50 29 21 0.0000053767 50 29 21 10 0.0000063543 50 29 21 0.0000063543 50 29 21 Trung bình 59 Thời gian KỸ THUẬT SAO CHÉP THAY ĐỔI HÀM IF 0.0000100000 0.0000090000 0.0000080000 0.0000070000 0.0000060000 0.0000050000 0.0000040000 0.0000030000 0.0000020000 0.0000010000 0.0000000000 10 Trung bình Lần thực Hình 4.8 Thời gian phân tích chép mã nguồn với kỹ thuật thay đổi hàm IF Kết phân tích cụ thể chương trình bảng 4.16 Bảng 4.16 Bảng phân tích kết chép thay đổi hàm IF Lần thực Precision Recall Accuracy Error_rate F1 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 69.05% 87.88% 66.00% 34.00% 77.33% 60 10 69.05% 87.88% 66.00% 34.00% 77.33% Trung bình 69.05% 87.88% 66.00% 34.00% 77.33% 61 CHƯƠNG TỔNG KẾT Chương phân tích đánh giá kết luận văn hướng phát triển chương trình tương lai 5.1 Đánh giá kết 5.1.1 Thời gian thực chương trình Từ kết thực nghiệm với kỹ thuật chép phân tích phần 4.5 ta có kết so sánh thời gian thực chương trình kỹ thuật chép khác bảng 5.1 hình 5.1 Bảng 5.1 So sánh thời gian thực phân tích chép theo loại chép Loại chép Tên kỹ thuật chép Sao chép thay đổi thích Thời gian trung Thời gian trung bình bình theo loại kỹ thuật sao chép chép (s) (s) 0.0000064032 Sao chép loại 0.0000060855 Sao chép thay đổi khoảng trắng Sao chép loại Sao chép thay đổi tên biến Sao chép thay đổi vị trí đoạn mã nguồn 0.0000057677 0.0000064521 0.0000064521 0.0000062565 Sao chép loại 0.0000063054 Sao chép có chèn thêm đoạn mã nguồn 0.0000063543 62 Sao chép loại Sao chép thay đổi hàm 0.0000063543 IF 0.0000063543 SO SÁNH THỜI GIAN THEO LOẠI SAO CHÉP 0.0000070000 0.0000060855 0.0000064521 0.0000063054 0.0000063543 Sao chép loại Sao chép loại Sao chép loại Thời gian 0.0000060000 0.0000050000 0.0000040000 0.0000030000 0.0000020000 0.0000010000 0.0000000000 Sao chép loại Loại chép Hình 5.1 Thời gian phân tích chép mã nguồn theo loại chép 5.1.2 Độ xác chương trình Từ kết thực nghiệm với kỹ thuật chép phân tích phần 4.5 ta có kết so sánh thời gian thực chương trình kỹ thuật chép khác bảng 5.2 hình 5.2 Bảng 5.2 So sánh độ xác chương trình theo loại chép Loại chép Tên kỹ thuật chép Sao chép thay đổi thích Thời gian trung Thời gian trung bình bình theo loại kỹ thuật sao chép chép (s) (s) 100% Sao chép loại 100% Sao chép thay đổi khoảng trắng 100% 63 Sao chép Sao chép loại 100% thay đổi tên biến Sao chép thay đổi vị trí 100% đoạn mã nguồn Sao chép loại 88% Sao chép có chèn thêm 76% đoạn mã nguồn Sao chép loại 100% Sao chép thay đổi hàm 66% IF 66% SO SÁNH ĐỘ CHÍNH XÁC THEO LOẠI SAO CHÉP 100% 100% 100% 88% 90% 80% 66% Độ xác 70% 60% 50% 40% 30% 20% 10% 0% Sao chép loại Sao chép loại Sao chép loại Sao chép loại Loại chép Hình 5.2 Độ xác phân tích chép mã nguồn theo loại chép Chương trình phát chép mã nguồn tốt chép loại chép loại Đối với chép loại 3, chương trình phát chép có thay đổi vị trí đoạn mã nguồn tốt so với chép có chèn thêm đoạn mã nguồn Ngồi ra, chương trình chưa có khả phát chép loại 64 5.1.3 So sánh độ xác chương trình với cơng cụ khác Hình 5.3 thể kết so sánh độ xác chương trình chúng tơi (OurProgram) với cơng cụ khác Độ xác SO SÁNH ĐỘ CHÍNH XÁC GIỮA CÁC CÔNG CỤ 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% CCFinder Deckard OurProgram Sao chép loại 100% 100% 100% Sao chép loại 94.80% 96.80% 100% Sao chép loại 89.70% 87.40% 88% Sao chép loại 64.20% 42.50% 66% Loại chép CCFinder Deckard OurProgram Hình 5.3 So sánh độ xác cơng cụ 5.1.4 Ưu khuyết điểm chương trình ▪ Ưu điểm: - Phát xác chép mã nguồn loại 1, loại chép có thay đổi vị trí đoạn mã nguồn chép loại - Thời gian thực chương trình nhanh - Có khả mở rộng chương trình để phát chép mã nguồn ngôn ngữ lập trình khác ▪ Khuyết điểm: - Chương trình phát chép mã nguồn có chèn thêm đoạn mã (sao chép loại 3) chép loại cịn chưa xác - Bài tốn đụng độ xảy hai đoạn chương trình A, B có độ tương đồng với đoạn chương trình thứ C chương trình 65 chúng tơi chọn ngẫu nhiên hai đoạn chương trình A, B 5.2 Kết luận Kết phân tích luận văn cho ta thấy chép mã nguồn vấn đề quan trọng xảy phổ biến Vấn đề chép mã nguồn phải giải cấp độ khác nhau: cách sử dụng công cụ phát chép, quy định thích hợp, giáo dục sinh viên chép mã nguồn với tập thích hợp Nhằm mục tiêu hạn chế vấn đề chép mã nguồn sinh viên, giáo viên học sinh phải giáo dục tầm quan trọng quyền tác giả, quyền sở hữu trí tuệ quy tắc tham chiếu trích dẫn tài ngun Tại khóa học lập trình, sinh viên, tốt nên trích dẫn từ mã nguồn lập trình Ngồi ra, giáo viên phải lựa chọn tập cho sinh viên có hội chép mã nguồn Hơn nữa, giáo viên sử dụng số công cụ để phát chép mã nguồn mô tả phần 2.5 Tuy nhiên, cơng cụ khơng thể sử dụng hiệu quy định thích hợp với cơng cụ khơng tồn tại, ví dụ như: chúng kiểm tra chép đoạn (hoặc tập tin) mã nguồn Luận văn thực nhằm mục đích cải thiện hạn chế q trình phân tích chép mã nguồn cơng cụ có, chương trình phân tích chép tập (hay gọi dự án – project) với ngơn ngữ lập trình C++ sinh viên 5.3 Hướng phát triển Chúng cải tiến chương trình cách kết hợp với đồ thị phụ thuộc chương trình cú pháp trừu tượng để phát chương trình chép có thêm đoạn mã nguồn có thay đổi cú pháp cách viết câu lệnh (hoặc hàm) xác hơn, đồng thời cần xử lý tình trạng đụng độ nêu mục 5.1.4 Ngồi ra, chúng tơi phát triển chương trình chép mã nguồn thành chương trình chấm tự động có phát tập chép, sử dụng chức phân tích 66 chép để so sánh kết đầu chương trình sinh viên với kết sẵn có chương trình chấm, từ phân tích, đánh giá kết làm sinh viên 67 TÀI LIỆU THAM KHẢO [1] Muhammad Kashif Siddique Randhawa, Dr Imran Mumtaz: Reorganization of physical similarities in source code using clustering International Journal of Scientific & Engineering Research Vol 7, Issue 11, 2016 [2] Toshihiro Kamiya, Shinji Kusumoto, Katsuro Inoue: CCFinder: A Multilinguistic Token-Based Code Clone Detection System for Large Scale Source Code IEEE transactions on Software engineering, Vol 28, No 7, 2002 [3] Whale, G.: Plague: Plagiarism Detection Using Program Structure TR 8805, Dept of CS, University of NSW, Kensington, Australia, 1988 [4] Wise, M.J.: Detection of Similarities in Student Programs: YAP’ing may be preferable to Plague’ing Twenty-Third SIGCSE Technical Symposium, Kansas City, USA, 1992 [5] Gitchell, D & Tran, N: Sim: A Utility for Detecting Similarity in Computer Programs Proc SIGCSE ’99, 31(1), pp 266-270, 1999 [6] Prechelt, L., Malpohl, G., & Philippsen, M.: Finding Plagiarisms Among a Set of Programs With JPlag Journal of Universal Computer Science, 2002 [7] Schleimer, S., Wilkerson, D.S., & Aiken, A.: Winnowing: Local Algorithms for Document Fingerprinting Proc SIGMOD, pp 76-85, 2003 [8] Moussiades, L & Vakali, A.: PDetect: A Clustering Approach for Detecting Plagiarism in Source Code Datasets The Computer Journal, 48(6) 2005 [9] Toshihiro Kamiya, Shinji Kusumoto, and Katsuro Inoue Ccfinder: A multilinguistic tokenbased code clone detection system for large scale source code IEEE Transactions on Software Engineering, 28(7):654–670, 2002 [10] Hitesh Sajnani, Vaibhav Saini, Jeffrey Svajlenko, Chanchal K Roy, and Cristina V Lopes: Sourcerercc: scaling code clone detection to big-code Proceedings of the 38th International Conference on Software Engineering, pages 1157–1168, Austin, TX, USA, 2016 [11] Chanchal Kumar Roy and James R Cordy: NICAD: accurate detection of nearmiss intentional clones using flexible pretty-printing and code normalization 68 Proceedings of the 16th IEEE International Conference on Program Comprehension, pages 172–181, 2008 [12] Pieterse, V.: Decoding code plagiarism Proceedings of the 43rd annual conference of the Southern African Computer Lecturers Association (SACLA), pp.36-42, 2014 [13] Masek W.J., Paterson M.S.: A faster algorithm computing string edit distances Journal of Computer and System Sciences 20(1), pp.18-31, 1980 [14] Wagner R.A., Fischer M.J.: The string-to-string correction problem Journal of the Association of Computer Machinery 21(1), pp.168-173, 1974 [15] Haskins B., Botha R.: A mixed-method approach to normalising Dr Math microtext Proceedings of the International Conference on Computational Science and Technology (ICCST) Malaysia, pp.1-6, 2014 [16] I D Baxter, A Yahin, L Moura, M Sant’Anna, L Bier: Clone detection using abstract syntax trees Proceedings of the International Conference on Software Maintenance (ICSM), pp 368–379, 1998 [17] R Koschke, R Falke, P Frenzel: Clone detection using abstract syntax suffix trees Proceedings of the 13th Working Conference on Reverse Engineering, pp 253–262, 2006 [18] Marcus A, Maletic JI.: Identification of high-level concept clones in source code Proceedings of the 16th annual international conference on automated software engineering (ASE 2001), pp 107–114, 2001 [19] Krinke J.: Identifying similar code with program dependence graphs Proceedings of the eighth working conference on reverse engineering (WCRE), pp 301–309, 2001 [20] Komondoor R, Horwitz S.: Using slicing to identify duplication in source code Proceedings of the 8th international symposium on static analysis (SAS’01), pp 40–56, 2001 [21] Gabel M, Jiang L, Su Z.: Scalable detection of semantic clones Proceedings of the 30th international conference on software engineering (ICSE ’08), pp 321– 330, 2008 69 [22] Deissenboeck F, Heinemann L, Hummel B, Wagner S.: Challenges of the dynamic detection of functionally similar code fragments Proceedings of the 16th European conference on software maintenance and reengineering (CSMR), 299–308, 2012 [23] Jiang L, Su Z 2009 Automatic mining of functionally equivalent code fragments via random testing Proceedings of the eighteenth international symposium on software testing and analysis (ISSTA’09), pp 81–92, 2009 [24] C K Roy, J R Cordy, and R Koschke: Comparison and Evaluation of Code Clone Detection Techniques and Tools: A Qualitative Approach, Science of Computer Programming, vol 74, no 7, pp 470–495, May 2009 [25] https://www.britannica.com/topic/plagiarism, truy cập ngày 10/9/2018 [26] Parker A, Hamblen J: Computer algorithms for plagiarism detection IEEE Transactions on Education, pp 94-99, 1989 [27] Pratiksha Gautam & Hemraj Saini: Various Code Clone Detection Techniques and Tools: A Comprehensive Survey DOI: 10.1007/978-981-10-3433-6_79, 2016 [28] Landauer, T.K., Foltz, P.W., & Laham, D.: An Introduction to Latent Semantic Analysis Discourse Processes, pp 259-284, 1998 [29] Maletic, J.I & Marcus, A.: Using Latent Semantic Analysis to Identify Similarities in Source Code to Support Program Understanding In 12th IEEE International Conference on Tools with Artificial Intelligence (ICTAI’00), pp 46–53, 2000 [30] Marcus, A., & Maletic, J.I.: Recovering Documentation-to-source-code Traceability Links Using Latent Semantic Indexing Proceedings of the 25th International Conference on Software Engineering (ICSE2003), Portland, pp 125–135, 2003 [31] Grant, S & Cordy, J.R.: Vector Space Analysis of Software Clones IEEE 17th ICPC, pp 233-237, 2009 [32] Karp, R.M & Rabin, M.O.: Efficient Randomized Pattern-Matching Algorithms IBM Journal of Research and Development, pp 249−260 1987 70 [33] Wise, M.J.: YAP3: Improved Detection of Similarities in Computer Program and Other Texts SIGCSE ‘96, pp 130-134, 1996 [34] Wise, M.J.: String Similarity via Greedy String Tiling and Running KarpRabin Matching TR, Dept of CS, University of Sydney, pp 1-17, 1993 [35] Baxter, I.D., Yahin, A., Moura, L., Sant'Anna, M., & Bier, L.: Clone Detection Using Abstract Syntax Trees IEEE ICSM 1998, pp 368-377, 1998 [36] Wagner, T & Graham, S.: Incremental Analysis of Real Programming Languages, Proceedings SIGPLAN Conference on Programming Language Design and Implementation, ACM, 1997 [37] Koschke, R., Falke, R., & Frenzel, P.: Clone Detection Using Abstract Syntax Suffix Trees 13th WCRE 2006, pp 253-262, 2006 [38] Li, X & Xiao jing Zhong: The Source Code Plagiarism Detection Using AST International Symposium on Intelligence Information Processing and Trusted Computing, pp 406-408, 2010 [39] Kontogiannis, K.: Program Representation and Behavioural Matching for Localizing Similar Code Fragments CASCON ’93: Proceedings of the 1993 Conference of the Centre for Advanced Studies on Collaborative Research, pp 194–205, 1993 [40] Komondoor, R & Horwitz, S.: Using Slicing to Identify Duplication in Source Code Static Analysis Symposium, 2001 [41] Koschke, R., Falke, R., Frenzel, P.: Clone detection using abstract syntax suffix trees Proceedings of the 13th IEEE Working Conference on Reverse Engineering, Italy, pp 253– 262, 2006 [42] Jiang, L., Misherghi, G., Su, Z., Glondu, S.: Scalable and accurate tree-based detection of code clones Proceedings of the 29th IEEE International Conference on Software Engineering (ICSE 2007), USA, pp 96–105, 2007 [43] Datar, M., Immorlica, N., Indyk, P., Mirrokni, V.S.: Locality-sensitive hashing scheme based on p-stable distributions Proceedings of the 20th ACM Annual Symposium on Computational Geometry, New York, pp 253–262, 2004 71 [44] Patil, R.V., Joshi, S., Shinde, S.V., Ajagekar, D.A., Bankar, S.D.: Code clone detection using decentralized architecture and code reduction Proceedings of IEEE International Conference on Pervasive Computing, Pune, India, pp 1–6, 2015 [45] Keivanloo, I., Zhang, F., Zou, Y.: Threshold-free code clone detection for a large-scale heterogeneous Java repository Proceedings of 22nd IEEE International Conference on Software Analysis, Evolution and Reengineering, Montreal, QC (SANER 2015), pp 201–210, 2015 [46] Singh, M., Sharma, V.: Detection of file level clone for high level cloning Proceedings of 3rd Elsevier International Conference on Recent Trends in Computing (ICRTC 2015), India, pp 915–922, 2015 [47] Hussain A Chowdhury & Dhruba K Bhattacharyya: Plagiarism: Taxonomy, Tools and Detection Techniques Knowledge, Library and Information Networking, NACLIN 2016, ISBN: 978-93-82735-08-3, pp 13, 2016 [48] Lancaster, T., Culwin, F.: Classifications of Plagiarism detection engines Innovations in Teaching and Learning in Information and Computer Sciences, DOI: 10.11120/ital.2005.04020006, 2005 [49] K Rinartha, “Simple Query Suggestion untuk Pencarian Artikel menggunakan Jaccard Similarity” J Ilm Rekayasa dan Manaj Sist Inf., vol 3, no 1, pp 30–34, 2017 [50] Kohavi, R., & Provost, F.: On Applied Research in Machine Learning Editorial for the Special Issue on Applications of Machine Learning and the Knowledge Discovery Process, Columbia University, New York, volume 30., 1998 ... việc phát dạng đặc biệt chép nội dung, chép mã nguồn chương trình Sao chép mã nguồn phần mã nguồn tập tin nguồn giống hệt tương tự với tập tin khác [2] Sao chép mã nguồn thường xuyên xảy trình phát. .. quan đến chép mã nguồn, kỹ thuật thực chép mã nguồn, cách phân loại chép mã nguồn Ngồi chúng tơi cịn giới thiệu phương pháp pháp chép số cơng cụ phát chép mã nguồn có 2.1 Sao chép mã nguồn 2.1.1... hiểu phát triển cơng cụ Trong q trình tìm hiểu tốn phát chép mã nguồn nhằm phục vụ cho cơng việc giảng dạy lập trình Chúng tơi định chọn đề tài ? ?Phát chép mã nguồn chương trình dựa phân rã cấu trúc

Ngày đăng: 31/12/2020, 15:08

Mục lục

    1.2. Các hướng tiếp cận

    1.3. Đề xuất hướng giải quyết

    1.4. Mục tiêu của luận văn

    1.5. Nội dung thực hiện

    1.6. Bố cục của luận văn

    Chương 2. CƠ SỞ LÝ THUYẾT

    2.1. Sao chép mã nguồn

    2.1.2. Bản sao của đoạn mã nguồn

    2.1.3. Sao chép đoạn mã nguồn

    2.2. Các kỹ thuật sao chép mã nguồn chương trình thường gặp

Tài liệu cùng người dùng

Tài liệu liên quan