Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 93 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
93
Dung lượng
2,08 MB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA LÊ CÔNG NGUYÊN KIỂM TRA SAO CẮP MÃ NGUỒN TRÊN TẬP CHƯƠNG TRÌNH LỚN CHUYÊN NGÀNH: KHOA HỌC MÁY TÍNH LUẬN VĂN THẠC SĨ THÀNH PHỐ HỒ CHÍ MINH – THÁNG 09 NĂM 2009 Kiểm tra cắp mã nguồn tập chương trình lớn LỜI CAM ĐOAN Tôi cam đoan rằng, ngoại trừ kết tham khảo từ cơng trình khác ghi rõ luận văn, công việc trình bày luận văn tơi thực chưa có phần nội dung luận văn nộp để lấy cấp trường hay trường khác Sinh viên thực Lê Công Nguyên 1 Kiểm tra cắp mã nguồn tập chương trình lớn LỜI CẢM ƠN Đầu tiên, xin bày tỏ lịng biết ơn vơ hạn đến Cha Mẹ Anh Chị ủng hộ, tạo điều kiện để học tập hồn thành tốt luận văn Tơi xin gửi đến TS.Nguyễn Hứa Phùng lòng biết ơn chân thành Cám ơn Thầy tận tình hướng dẫn từ việc xác định vấn đề yếu cần giải quyết, phương pháp giải vấn đề sở khoa học đến cách thức lập luận cách chặt chẽ Tôi xin bày tỏ lòng cảm ơn sâu sắc đến tất Thầy Cô khoa Công Nghệ Thông Tin giảng dạy giúp đỡ thời gian học tập trường, đặc biệt chủ nhiệm môn Hệ Thống Thông Minh, TS Quản Thành Thơ Cám ơn bạn Huỳnh Việt Linh cung cấp tập liệu kiểm tra để tơi thử nghiệm hệ thống Xin cảm ơn tất bạn bè tôi, người chia giúp đỡ sống học tập Cuối cùng, xin gửi đến tất người lời chúc tốt đẹp 2 Kiểm tra cắp mã nguồn tập chương trình lớn TÓM TẮT Trong lĩnh vực Khoa Học Máy Tính, cắp mã nguồn vấn đề thường xuyên xảy sinh viên có chuyên ngành máy tính mơn khác có địi hỏi sinh viên phải lập trình máy tính để thực tập lớn Mặc dù việc kiểm tra cắp mã nguồn hồn tồn thực tay, nhiên lại tốn nhiều thời gian thực tế có giảng viên có đủ kiên nhẫn để thực điều Vì vậy, ta cần phải xây dựng hệ thống kiểm tra cắp mã nguồn tự động Tại khoa Khoa Học & Kỹ Thuật Máy Tính, Đại Học Bách Khoa TP Hồ Chí Minh, năm 2003, tác giả Phan Thị Thu Thảo [2] đưa ý tưởng phát cắp mã nguồn dùng phương pháp top-down Cách tiếp cận phương pháp chia nhỏ việc so sánh mã nguồn thành ba cấp: cấp module, cấp lưu đồ cấp phát biểu Tuy nhiên, tác giả thực hệ thống để phát cắp mã nguồn viết VnPascal, ngôn ngữ lý thuyết phát triển từ ngôn ngữ Pascal Năm 2009, với mục đích hỗ trợ cho ngơn ngữ phổ biến tại, hai tác giả Võ Minh Tâm Nguyễn Thị Mỹ Dung [1] áp dụng phương pháp top-down để xây dựng hệ thống kiểm tra cắp cho mã nguồn viết Java Cụ thể, hai tác giả chuyển lưu đồ thành chuỗi kí tự gọi chuỗi lưu đồ Sau đó, hai chuỗi lưu đồ so sánh để đánh giá mức độ tương tự mã nguồn Tuy nhiên, tác giả thực hệ thống để kiểm tra cho dạng tập mà lời giải phương thức Luận văn bước phát triển hệ thống [1] Ở mức phương thức, để giảm tỉ lệ báo lỗi nhầm, luận văn mở rộng chuỗi lưu đồ thành chuỗi lưu đồ mở rộng Ở mức chương trình, luận văn xây dựng cơng thức tính độ tương tự hai chương trình Tuy nhiên, tập liệu thực có kích thước lớn nên hệ thống phải chạy thời gian lâu cho kết Vì vậy, luận văn đề xuất phương pháp để tính tốn cơng thức cách hiệu quả, qua rút ngắn thời gian chạy hệ thống 3 Kiểm tra cắp mã nguồn tập chương trình lớn MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN TÓM TẮT MỤC LỤC DANH MỤC HÌNH DANH MỤC BẢNG DANH MỤC CÁC TỪ VIẾT TẮT DANH MỤC CÁC THUẬT NGỮ 10 CHƯƠNG 1: GIỚI THIỆU 12 1.1 Phạm vi, động thúc đẩy mục tiêu luận văn 12 1.2 Những đóng góp luận văn 13 1.3 Cấu trúc luận văn 14 CHƯƠNG 2: TỔNG QUAN VỀ BÀI TOÁN KIỂM TRA SAO CẮP MÃ NGUỒN (SOURCE CODE PLAGIARISM DETECTION) 15 2.1 Các kiểu giả mạo 15 2.2 Các kỹ thuật kiểm tra cắp mã nguồn 16 2.2.1 Dựa vào thuộc tính 19 2.2.2 Dựa vào chuỗi kí tự 19 2.2.3 Dựa vào token 20 2.2.4 Dựa vào 22 2.2.5 Dựa vào đồ thị phụ thuộc 23 4 Kiểm tra cắp mã nguồn tập chương trình lớn 2.3 Phương pháp top-down 25 2.3.1 Phương pháp top-down 25 2.3.1.1 Phát cắp cấp module 25 2.3.1.2 Phát cắp cấp lưu đồ 28 2.3.1.3 Phát cắp cấp phát biểu 35 2.3.1.4 Các kết đạt 35 2.3.2 Ứng dụng phương pháp top-down hỗ trợ ngôn ngữ Java 36 2.3.2.1 Biểu diễn lưu đồ dạng chuỗi 36 2.3.2.2 Chuẩn hóa lưu đồ cách xếp lại chuỗi lưu đồ 38 2.3.2.3 Loại bỏ cấu trúc dư thừa 39 2.3.2.4 Giải thuật so sánh hai chuỗi lưu đồ 41 2.3.2.5 Các kết đạt 44 2.4 Đánh giá công cụ kiểm tra cắp mã nguồn 44 CHƯƠNG 3: PHÁT HIỆN SAO CẮP TRÊN TẬP DỮ LIỆU CĨ KÍCH THƯỚC LỚN 46 3.1 Phát biểu toán kiểm tra cắp mã nguồn 46 3.2 Chuỗi lưu đồ mở rộng EFS ưu điểm EFS việc phát giả mạo 47 3.2.1 Chuỗi lưu đồ mở rộng EFS 48 3.2.2 Ưu điểm EFS việc phát giả mạo 52 3.3 Xác định cơng thức tính độ tương tự hai chương trình tính tốn cơng thức cách hiệu 55 3.3.1 Động 55 3.3.2 Cách phát triển tự nhiên để tính độ tương tự hai chương trình nhược điểm 56 3.3.3 Xác định độ tương tự hai chương trình cách hiệu 58 3.3.3.1 Cơng thức tính độ tương tự hai chương trình 59 3.3.3.2 Tính tốn cơng thức cách hiệu 61 3.3.3.3 Giải thuật tính độ tương tự hai chương trình đánh giá độ phức tạp tính tốn 71 5 Kiểm tra cắp mã nguồn tập chương trình lớn CHƯƠNG 4: HIỆN THỰC, KIỂM THỬ VÀ ĐÁNH GIÁ 77 4.1 Hiện thực hệ thống 77 4.2 Kiểm thử 78 4.2.1 Tập liệu kiểm tra 78 4.2.2 Tính (effectiveness) 79 4.2.3 Tính hiệu (efficiency) 79 CHƯƠNG : KẾT LUẬN 85 5.1 Kết luận 85 5.2 Hướng phát triển 85 TÀI LIỆU THAM KHẢO 88 6 Kiểm tra cắp mã nguồn tập chương trình lớn DANH MỤC HÌNH Hình 2.1: Q trình kiểm tra cắp mã nguồn 17 Hình 2.2: Ví dụ mã nguồn Java chuỗi token sinh JPLAG 21 Hình 2.3: Ví dụ phân tích 23 Hình 2.4: Ví dụ PDG cho hàm sum 24 Hình 2.5: Đồ thị triệu gọi 26 Hình 2.6: Cấu trúc tĩnh chuyển thành đồ thị lồng khối 27 Hình 2.7: So sánh cấu trúc động chương trình cắp chương trình gốc 28 Hình 2.8: Ví dụ lưu đồ chương trình 29 Hình 2.9: Biểu diễn lưu đồ cấu trúc 30 Hình 2.10: Ví dụ lưu đồ chuyển thành chuỗi lưu đồ 31 Hình 2.11: Vịng lặp khác lưu đồ đồng dạng 32 Hình 2.12: Phát biểu điều kiện khác lưu đồ đồng dạng 32 Hình 2.13: Sử dụng cấu trúc điều khiển tương đương, chèn phát biểu gán, gọi hàm vào khối phát biểu S 33 Hình 2.14: Chèn thêm khối phát biểu S vào hai phát biều điều khiển 34 Hình 2.15: Ví dụ biến đổi lưu đồ thành chuỗi lưu đồ 37 Hình 2.16: Lưu đồ giống chuỗi lưu đồ khác 38 Hình 2.17: Ví dụ xếp lại chuỗi lưu đồ 39 Hình 2.18: Dùng cấu trúc điều khiển dư thừa câu lệnh lặp 41 Hình 2.19: Biểu diễn chuỗi lưu đồ SB(B(S,S),L(S)S) 43 Hình 3.1: Ví dụ EFS 50 Hình 3.2: Biểu diễn chương trình cấu trúc 56 Hình 3.3: Điều kiện để hai phương thức ghép cặp 60 Hình 3.4: Kiến trúc Lọc –Tinh chế 62 Hình 3.5: Cấu trúc EFS : AB(B(A,P),L(P)A) 65 Hình 3.6: Ví dụ M 68 Hình 3.7: Mô tả đẳng thức M i 69 Hình 3.8: Mơ tả tập S p 72 Hình 3.9: Mơ tả tập S' p 73 Hình 3.10: Mã giả giải thuật tính programSimilarity hai chương trình A,B 75 Hình 4.1: Hiện thực hệ thống 77 Hình 5.1: Biểu diễn chương trình 87 7 Kiểm tra cắp mã nguồn tập chương trình lớn DANH MỤC BẢNG Bảng 1: Thống kê tập lớn 78 Bảng 2: Số liệu cặp chương trình cắp 80 Bảng 3: Số liệu khả cắt giảm hai lọc 81 Bảng 4: Thời gian tính tốn 82 Bảng 5: Số liệu core-part plagiarism 83 8 Kiểm tra cắp mã nguồn tập chương trình lớn CHƯƠNG 4: HIỆN THỰC, KIỂM THỬ VÀ ĐÁNH GIÁ 4.1 Hiện thực hệ thống Hiện thực hệ thống dựa hệ thống [1] cho hình 4.1 Hình 4.1: Hiện thực hệ thống Hệ thống có input thư mục chứa file mã nguồn tập chương trình cần kiểm tra tiến hành so sánh cặp chương trình Nó gồm ba giai đoạn: Parsing, Loading, Comparing Parsing phân tích mã nguồn tập chương trình thành file flowchart.txt chứa EFS phương thức chương trình Các file lưu cấu trúc thư mục giống với cấu trúc chương trình gồm Program\ClassName\MethodName\flowchart.txt Parsing thực cách dùng công cụ ANTLR để sinh AST tiến hành duyệt AST Loading load file flowchart.txt vào nhớ Và Comparing so sánh cặp chương trình để tính tốn giá trị programSimilarity chúng Hệ thống viết Java chạy Windows XP Professional, Intel Core Duo 2.0GHz, 1GB RAM 77 Kiểm tra cắp mã nguồn tập chương trình lớn 4.2 Kiểm thử Phần trình bày kết thí nghiệm để chứng minh tính (effectiveness) hiệu (efficiency) hệ thống 4.2.1 Tập liệu kiểm tra Để kiểm thử hệ thống ta sử dụng tập liệu tập lớn (viết tắt BTL) mơn học Trình Biên Dịch khoa Khoa Học & Kỹ Thuật Máy Tính Yêu cầu chung tập sinh viên nhận cấu trúc mã nguồn gồm file java phải sửa đổi số file để thực yêu cầu tập lớn Sinh viên viết thêm số file java, nhiên thực tế khơng có trường hợp Cụ thể: Trong BTL1 sinh viên phải thay đổi file Scanner.java, SourcePosition.java để thực phân tích từ vựng (scanner) Trong BTL2 file parser.java để thực phân tích cú pháp (parser) Trong BTL3 file StaticChecker.java, Type.java, SymLinearTable.java để thực kiểm tra tĩnh (static checker) Trong BTL4 file CodeGenerator.java, Frame.java, Emiiter.java để thực bước sinh mã trình biên dịch (code genaration phase) Vì cần kiểm tra cắp file Ta lấy ngưỡng 0.9 trình bày phần 3.3.3.1 Bảng thống kê BTL BTL1 BTL2 BTL3 BTL4 NoP 392 352 361 325 ANM 10 42 119 129 Bảng 1: Thống kê tập lớn 78 Kiểm tra cắp mã nguồn tập chương trình lớn Trong Bảng 1: NoP số lượng làm nhận ANM số phương thức trung bình làm, ANM = Round ( S ) với S NoP tổng số phương thức tất làm 4.2.2 Tính (effectiveness) Để kiểm tra tính hệ thống, ta lấy làm điển hình A BTL1 tiến hành giả mạo phương thức nextToken để làm B sau: Sắp xếp lại case câu lệnh switch case, Sắp xếp lại cascading if elseif Sắp xếp lại cascading if elseif kết hợp với đảo điều kiện Đổi switch case thành cascading if elseif ngược lại Tất cấu trúc lặp nextToken while(true), ta đổi thành while(true) Thay đổi khai báo, tách biểu thức số học phức tạp Trong khối lệnh gán (hay khối lệnh gọi hàm) nhiều 1, chúng khơng phụ thuộc liệu ta xếp lại Thêm break dư thừa vào case switch case Chạy hệ thống với hai chương trình A, B thu methodSimilarity(nextTokenA , nextTokenB ) 1.0 programSim ilarity ( A, B ) Kết phù hợp với phân tích lý thuyết Các kiểu giả mạo từ đến kiểm tra cơng cụ MOSS, JPLAG, GPLAG 4.2.3 Tính hiệu (efficiency) Trong phần trình bày số liệu chạy hệ thống tập lớn để chứng minh tính hiệu 79 Kiểm tra cắp mã nguồn tập chương trình lớn Số lượng cặp chương trình cắp: Ta ghi nhận số lượng cặp chương trình có programSimilarity > 0.9, cặp chương trình có khả cắp Số liệu cho bảng BTL1 BTL2 BTL3 BTL4 NoPair 76636 61776 64980 52650 NoPair90 59 802 2491 1728 NoPair100 57 745 2083 1159 NoPair100NW 55 741 2080 1159 Bảng 2: Số liệu cặp chương trình cắp Trong bảng 2: NoPair số cặp chương trình cần kiểm tra NoPair90 số cặp chương trình có programSimilarity > 0.9 NoPair100 số cặp chương trình có programSimilarity = 1.0 methodSimilarity tất cặp phương thức 1.0 NoPair100NW số cặp chương trình giống hồn tồn sinh viên nộp lại file ban đầu mà sửa đổi Các cặp chương trình NoPair100 thực cắp Các cặp NoPair90 hướng dẫn tốt (best guidelines) cho giảng viên chấm bài, không nhiều thời gian công sức để kiểm tra cặp chương trình có phải cắp hay khơng Vì ta có danh sách cặp phương thức ghép với cặp chương trình Khả cắt giảm hai lọc: Số liệu cho bảng Trong bảng 3: NoC số phép tính (chạy giải thuật MLCS để tính methodSimilarity hai phương thức) khơng có hai lọc 80 Kiểm tra cắp mã nguồn tập chương trình lớn NoTC số phép tính có hai lọc Nm4 số phép tính cắt giảm việc so sánh m4 giải thuật MLCS Tương tự với Nm3, Nm2, % NoTC NoTC * 100% , NoC % Filter1 ( Nm Nm3 Nm ) * 100% , Noc % Filter % NoTC % Filter1 BTL1 BTL2 BTL3 BTL4 NoC 4926344 76403560 614227793 524342843 NoTC 614465 4395515 6878855 8326028 %NoTC 12.473% 5.753% 1.12% 1.588% Nm4 1806209 42665994 272444062 195325990 Nm3 87788 4256925 21646621 20761971 Nm2 19391 41152 5720 1645 %Filter1 38.84 % 61.468% 47.88% 41.212% %Filter2 48.687% 32.779% 51% 57.2% Bảng 3: Số liệu khả cắt giảm hai lọc Từ bảng số liệu ta có, trung bình: Bộ lọc cắt giảm 38.84% 61.468% 47.88% 41.212% 47.35% Bộ lọc cắt giảm 48.687% 32.779% 51% 57.2% 47.417% Cả hai lọc cắt giảm 47.35% 47.417% 94.767% Heuristic lọc cắt giảm số lượng tương đối lớn đặc thù liệu kiểm tra Trong cấu trúc mã nguồn ban đầu có cung cấp trước số phương thức, sinh viên thường thay đổi phương thức nên vịng lặp tính tốn lọc 2, từ bước lặp xác định cặp phương thức có methodSimilarity = Trong trường hợp làm khơng có cắp, tức phương thức khác xa nhau, lọc cho kết tốt lọc 81 Kiểm tra cắp mã nguồn tập chương trình lớn Thời gian tính tốn: Thời gian chạy hệ thống tập lớn cho bảng Số liệu tính giây BTL1 BTL2 BTL3 BTL4 Total 73 173 342 353 Parsing 59 95 207 216 Loading 28 65 64 Comparing 50 70 73 Bảng 4: Thời gian tính toán Ta thấy phần lớn thời gian chạy hệ thống tập trung vào hai phần Parsing Loading Và hệ thống chạy thời gian tương đối nhanh (trong ngữ cảnh toán cắp mã nguồn) Kiểm tra cắp phương thức quan trọng chương trình (core-part plagiarism): Trong BTL1, cấu trúc mã nguồn cung cấp ban đầu gồm phương thức, có phương thức khơng đổi sinh viên yêu cầu sửa đổi, hoàn chỉnh phương thức số (nextToken) để thực phân tích từ vựng Một số sinh viên có viết thêm phương thức phụ trợ cho phương thức nextToken Phương thức nextToken phương thức phức tạp, số dịng mã lên tới 1000, gồm nhiều cấu trúc rẽ nhánh switch case, cascading if Ta tiến hành loại bỏ phương thức không đổi trước so sánh chương trình với nhau, tức ta so sánh phương thức quan trọng chương trình Số liệu số lượng cặp chương trình cắp giống với số liệu bảng Thời gian phần so sánh (Comparing) giây Số liệu khả cắt giảm cho bảng Trong bảng : 82 Kiểm tra cắp mã nguồn tập chương trình lớn BTL1 NoC 253692 NoTC 2934 %NoTC 1.157% Nm4 213219 Nm3 15243 Nm2 19391 %Filter1 97.7% %Filter2 1.143% Bảng 5: Số liệu core-part plagiarism Từ bảng 5, ta thấy: lọc cắt giảm phần nhỏ số lượng phép tính tốn Ngun nhân ta loại bỏ phương thức không đổi nên heuristic lọc có tác dụng Tuy nhiên, lọc lại cắt giảm tốt (97.7%), nguyên nhân phương thức khác bất đẳng thức định lý chặt Ta giả sử NoTC gồm phép so sánh phương thức nextToken , tức số lần chạy giải thuật MLCS hai EFS đại diện cho hai phương thức nextToken tương ứng (thực tế số lượng có số sinh viên có viết thêm phương thức phụ trợ) Trong [1], tác giả dùng tên phương thức nextToken để xác định hai phương thức đưa vào công thức định nghĩa 1, số phép so sánh phương thức nextToken là: 392 * 391 76636 (392 số làm nhận được) Như vậy, ta cắt giảm 2934 96.172% số phép so sánh phương thức 76636 nextToken Ý nghĩa m Từ bảng 5, ta tính m (khơng tính m , m ), ta có thí nghiệm: m2 với 97.7% phép tính methodSimilarity Như vậy, giả sử tồn tập liệu lớn mà hai lọc khơng có tác dụng (tức hệ thống phải chạy thời gian 83 Kiểm tra cắp mã nguồn tập chương trình lớn lâu cho kết quả), ta thay methodSimilarity thành m để giảm độ phức tạp tính tốn mà kết sai sót khơng nhiều 84 Kiểm tra cắp mã nguồn tập chương trình lớn CHƯƠNG : KẾT LUẬN 5.1 Kết luận Luận văn trình bày kỹ thuật để xây dựng hệ thống kiểm tra cắp mã nguồn có tính hiệu Cụ thể gồm có kỹ thuật sau: Mở rộng chuỗi lưu đồ thành chuỗi lưu đồ mở rộng EFS ( kết hợp ý tưởng [2] vào chuỗi lưu đồ [1] ) nhằm làm giảm tỉ lệ báo lỗi nhầm Xây dựng cơng thức tính độ tương tự hai chương trình Xây dựng phương pháp để tính tốn cơng thức cách hiệu Tổng kết lại, hệ thống kiểm tra cắp mã nguồn làm việc sau : Các phương thức phân tích thành chuỗi lưu đồ mở rộng EFS dựa lưu đồ giải thuật phương thức kết hợp bước hệ thống top-down EFS chuẩn hóa để kiểm tra kiểu giả mạo phức tạp Độ tương tự hai phương thức tính chiều dài chuỗi chung lớn có sửa đổi MLCS Hệ thống tiến hành ghép cặp phương thức tương tự hai chương trình Độ tương tự hai chương trình tính dựa độ tương tự tất cặp phương thức ghép cặp Hai lọc thực để thu giảm số phép tính độ tương tự hai phương thức dựa vào kiến trúc Lọc – Tinh chế Kết thí nghiệm cho thấy hệ thống có độ xác cao hẳn công cụ phổ biến thực tính tốn cách hiệu quả, trung bình hai lọc cắt giảm 94.767% số lượng phép tính độ tương tự hai phương thức 5.2 Hướng phát triển Vấn đề sử dụng : Hiện tại, hệ thống sử dụng để kiểm tra cắp mã nguồn chương trình viết Java Mặc dù kết đạt tập liệu kiểm tra tương đối tốt, số lượng kiểu giả mạo phát chưa đủ Vì thế, ta cần tiến hành hoạt động để tập hợp thêm kiểu giả mạo, ví dụ “Call for plagiarisms”: Ta cung cấp làm điển hình cho người tham gia yêu 85 Kiểm tra cắp mã nguồn tập chương trình lớn cầu họ giả mạo với mục tiêu không dùng nhiều thời gian Từ đó, tiến hành phân tích số liệu để kiểm chứng tính hệ thống Đồng thời, ta phải tiến hành phân tích số liệu để tìm giá trị ngưỡng phù hợp cho tập Vấn đề kỹ thuật : Hệ thống phát triển theo hướng sau : Một điểm yếu hệ thống sinh viên tập trung công kiểu giả mạo số : tạo phương thức dư thừa, thay đoạn mã lời gọi phương thức hay thay lời gọi phương thức mã nó, số lượng hàm hai chương trình chênh lệch nhiều độ tương tự hai chương trình nhỏ nên khơng thể phát Đây điểm yếu cách phát triển tự nhiên Ta xây dựng đồ thị triệu gọi để loại bỏ phương thức dư thừa Đối với hai kiểu giả mạo lại, theo phân tích [2] phương thức thêm vào hay thường nút đồ thị triệu gọi nên ta làm sau : EFS phương thức, lời gọi phương thức nút ta thay EFS Điểm yếu thứ hai hệ thống khả phát giả mạo cấu trúc lặp chưa tốt, thay vịng lặp bình thường vịng lặp vơ tận break hai EFS có khác biệt lớn Ta cần xây dựng cách biểu diễn để kiểu giả mạo cấu trúc lặp bất biến với cách biểu diễn (có thể dựa đồ thị phụ thuộc PDG) Như nói phần 3.3.2, ta biểu diễn chương trình cấu trúc hình 5.1 Trong hình 5.1, P gốc đại diện cho chương trình, EFSi chuỗi lưu đồ mở rộng tương ứng phương thức chương trình 86 Kiểm tra cắp mã nguồn tập chương trình lớn Hình 5.1: Biểu diễn chương trình Mục đích phương pháp đề xuất luận văn ánh xạ nhánh hai chương trình cách hiệu Và kết thí nghiệm cho thấy phương pháp làm tốt điều Một cấu trúc rẽ nhánh biểu diễn thành cấu trúc chương trình (khơng thiết phải cascading if hay switch case) Nhưng cách ánh xạ nhánh hệ thống tiến hành xếp nhánh theo thứ tự định Nên với thay đổi nhỏ (hoặc nhiều) nhánh phá vỡ thứ tự dẫn đến hệ thống không phát Điều thấy tiến hành phân tích số liệu tập lớn Vì vậy, ta mở rộng kỹ thuật luận văn cho cấu trúc rẽ nhánh để nâng cao tính hệ thống Phát vị trí kiểu giả mạo file mã nguồn để từ xây dựng giao diện đồ họa cho hệ thống Gom nhóm (clustering) cặp chương trình cắp Hỗ trợ ngôn ngữ phổ biến khác C, C++, C# Việc khơng q khó khăn ta có ngữ pháp ngôn ngữ để xây dựng AST 87 Kiểm tra cắp mã nguồn tập chương trình lớn TÀI LIỆU THAM KHẢO [1] Nguyễn Thị Mỹ Dung, Võ Minh Tâm Dùng phương pháp tĩnh để phát chép mã nguồn Luận văn tốt nghiệp đại học, Trường Đại học Bách Khoa Thành Phố Hồ Chí Minh, 2009 [2] Phan Thị Thu Thảo Phát triển phương pháp top-down hệ thống ngôn ngữ mở cho việc phát cắp chương trình nguồn Luận văn Thạc Sỹ Khoa Học Máy Tính, Trường Đại học Bách Khoa Thành Phố Hồ Chí Minh, 2003 [3] B.S Baker On finding duplication and near duplication in large software systems In Proc of 2nd Working Conf on Reverse Engineering, 1995 [4] I.D Baxter, A.Yahin, L.Moura, M.Sant’Anna, and L.Bier Clone detection using abstract syntax trees In Proc of Int Conf on Software Maintenance, 1998 [5] H.L Berghel, D.L Sallach Measurements of Program Similarity in Identical Task Environments In SIGPLAN Notices, 19(8), pages 65-75, 1984 [6] P Clough Plagiarism in Natural and Programming Languages : An overview of current tools and technologies Internal report CS-00-05, Department of Computer Science, University of Sheffield, 2000 [7] J Ferrante, K.J Ottenstein, and J.D Warren The program dependence graph and its use in optimization ACM Trans Program Lang Syst., 9(3):319-349, 1987 [8] M Freire et al AC: An Integrated Source Code Plagiarism Detection Environment arXiv:cs.IT/0703136, 2007 [9] Sam Grier A Tool that Detects Plagiarism in Pascal Programs Twelfth SIGCSE Technical Symposium 13(1), pp 15-20 (1981) [10] Halstead, M Howard Element of Software Science Elsevier, 1977 [11] L Jiang, G Misherghi, Z Su, and S Glondu DECKARD : Scalable and Accurate Tree-Based Detection of Code Clones In Proc of 29th Int Conf on Software Engineering, pages 96-105, 2007 88 Kiểm tra cắp mã nguồn tập chương trình lớn [12] K Kailing, H.P Kriegel, S.Schnauer, and T.Seidl Efficient Similarity Search for Hierarchical Data in Large Databases In Proc of 9th Int Conf on Extending Database Technology, pages 676-693, 2004 [13] J Krinke Identifying similar code with program dependence graphs In Proc of 8th Working Conf on Reverse Engineering, 2001 [14] C Liu, C Chen, J.Han and Philip S Yu GPLAG : detection of software plagiarism by program dependence graph analysis In Proc of 12th ACM SIGKDD Int Conf on Knowledge discovery and data mining, pages 872-881, 2006 [15] K.J Ottenstein An Algorithm Approach to the Detection and Prevention of Plagiarism In SIGCSE Bulletin, 8(4), pages 30-41, 1977 [16] L.Prechelt, G.Malpohl, and M.Philippsen Finding plagiarisms among a set of programs with JPlag J.of Universal Computer Science, 8(11), 2002 [17] C.K Roy and J.R Cordy A Survey on Software Clone Detection Research Technical Report No 2007-541, School of Computing, Queen’s University at Kingston, Canada, 2007 [18] S Schleimer, D.S Wilkerson, and A Aiken Winnowing : local algorithm for document fingerprinting In Proc of ACM SIGMOD Int Conf on Management of Data, 2003 [19] P.T.T Thao and C.H Tru A Top-Down Method for Program Plagiarism Detecting Systems In Proc of 2nd Int Conf of Vietnam & Francophone Informatics Research, 2004 [20] G Whale Identification of program similarity in large populations The Computer Journal, 33(2), pages 140-146, 1990 [21] Michael J Wise String similarity via greedy string tiling and running KarpRabin matching Dept of CS, University of Sydney, 1993 89 Kiểm tra cắp mã nguồn tập chương trình lớn [22] Michael J.Wise YAP3 : improved detection of similarities in computer programs and other text In Proc of 27th SIGCSE’96 technical symposium on Computer Science education, pages 130-134, 1996 [23] ANTLR documentation http://www.antlr.org/doc/index.html 90 LÝ LỊCH TRÍCH NGANG Họ tên: Lê Cơng Nguyên Ngày, tháng, năm sinh: 14/11/1984 Nơi sinh: Gia Lai Địa liên lạc: 15A/23 Nguyễn Văn Sang, P Tân Sơn Nhì, Q Tân Phú, TP HCM QÚA TRÌNH ĐÀO TẠO 2002 – 2007 (Đại học): Khoa Công Nghệ Thông Tin, Đại Học Bách Khoa TP HCM 2007 – 2009 (Cao học): Khoa Khoa Học & Kỹ Thuật Máy Tính, Đại Học Bách Khoa TP HCM ... đề mã nguồn chương trình, hay hai chương trình sinh lỗi giống (một cách khác thường) liệu kiểm tra 12 Kiểm tra cắp mã nguồn tập chương trình lớn Vì vậy, cơng cụ kiểm tra cắp mã nguồn tự động... nhầm 18 Kiểm tra cắp mã nguồn tập chương trình lớn Kết Hợp: để tiện cho việc phân tích, cặp mã nguồn cắp kết hợp vào nhóm Ta thấy, trước tiến hành kiểm tra cắp mã nguồn, thường mã nguồn chuyển... 31 Kiểm tra cắp mã nguồn tập chương trình lớn Hình 2.11: Vịng lặp khác lưu đồ đồng dạng Hình 2.12: Phát biểu điều kiện khác lưu đồ đồng dạng 32 Kiểm tra cắp mã nguồn tập chương trình lớn