Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 91 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
91
Dung lượng
1,16 MB
Nội dung
Luận văn tốt nghiệp cao học 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 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 Phan Thị Thu Thảo Luận văn tốt nghiệp cao học 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 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.Cao Hồng Trụ lịng biết ơn chân thành Cám ơn Thầy nhiệt tình hướng dẫn từ phương pháp nghiên cứu đến việc xây dựng mơ hình; thực hệ thống 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 cao học ngành CNTT, TS Dương Tuấn Anh Cám ơn Guido Malpohl cung cấp account sử dụng JPlag để tơi thử nghiệm so sánh kết với hệ thống Vơ cảm ơn lời khuyên anh việc chọn tập liệu để thử nghiệm 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 Luận văn tốt nghiệp cao học 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 TĨM TẮT Việc cắp trường Đại Học ngày phổ biến vấn đề nghiêm trọng cần giải ([1],[2]) Sinh viên cắp từ viết mã nguồn chương trình Do đọc mã nguồn người khác công việc khó khăn phức tạp thân mã nguồn nên việc cắp mã nguồn chương trình khó phát mắt thường so với việc cắp viết Vì trường Đại Học cần có chương trình phát cắp mã nguồn, cụ thể thi viết ngơn ngữ lập trình sinh viên Những hệ thống phát cắp trước sử dụng kỹ thuật attributecounting ([4],[5]) hầu hết hệ thống phát cắp thành công YAP3 ([8]), Plague ([6]), Sim ([7]) xây dựng dựa phương pháp comparing structure ([9]) Các hệ thống sử dụng giải thuật GST ([10]) so sánh chuỗi token đại diện cho cấu trúc chương trình Những hệ thống khơng địi hỏi so trùng tuyệt đối mà tìm kiếm độ tương tự chuỗi token Phương pháp có hiệu suất độ xác cao so với phương pháp trước attribute-counting Tuy nhiên chiều dài chuỗi token tăng thời gian tìm kiếm tăng lên đáng kể, đồng thời chuỗi token khơng thích hợp để đại diện cho cấu trúc chương trình Để tăng hiệu suất độ xác, chúng tơi đề xuất phương pháp top-down việc tìm kiếm chương trình có khả cắp Phương pháp so sánh chương trình theo ba cấp: cấp module, cấp lưu đồ cấp mệnh đề; tương tự cách tự nhiên người ta dùng để pháp cắp chương trình Việc thực phương pháp dựa phần luận văn tốt nghiệp ([11]) thư viện ANTLR ([18]), VFLIB ([19]) Hệ thống thử nghiệm so sánh với hai hệ thống Sim ([7]) JPlag ([20]) số trường hợp đạt độ xác cao Luận văn tốt nghiệp cao học 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 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 GIỚI THIỆU 1.1 1.2 1.3 Phạm vi, động thúc đẩy mục tiêu Những đóng góp luận văn Sơ lược cấu trúc luận văn TỔNG KẾT CÁC CÔNG TRÌNH LIÊN QUAN 11 2.1 2.2 2.3 2.4 Giới thiệu 11 Phương pháp Attribute-counting 11 Phương pháp Structure-metric 15 So sánh phương pháp Structure-metric Attribute-counting 16 PHƯƠNG PHÁP TOP-DOWN VÀ HỆ THỐNG NGÔN NGỮ MỞ 19 3.1 3.2 3.3 3.4 3.5 3.6 Tổng quát phương pháp Top-Down 19 Phát cắp cấp module 20 Phát cắp cấp lưu đồ 26 Phát cắp cấp phát biểu 33 Hệ thống ngôn ngữ mở 35 Kết luận 37 THIẾT KẾ VÀ HIỆN THỰC 39 4.1 4.2 4.3 4.4 4.5 Cấu trúc hệ thống: 39 Bộ đặc tả 42 Bộ phân tích cú pháp 43 Bộ so sánh, tìm cắp 46 Một số giải thuật sử dụng: 48 Luận văn tốt nghiệp cao học 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 THỬ NGHIỆM, ĐÁNH GIÁ VÀ KẾT LUẬN 59 5.1 5.2 Thử nghiệm đánh giá kết đạt 59 Tổng kết đề nghị 63 TÀI LIỆU THAM KHẢO 65 PHỤ LỤC 67 Phụ lục A 67 Phụ lục B 69 Phụ lục C 83 Luận văn tốt nghiệp cao học 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 DANH MỤC HÌNH Hình 2.1: So sánh Whale độ xác phương pháp Attribute-counting Structure-metric 16 Hình 2.2: So sánh Whale hiệu suất phương pháp Attribute-counting Structure-metric 17 Hình 2.3: So sánh Wise hiệu suất độ xác phương pháp Attribute-counting Structure-metric 17 Hình 3.1: Đồ thị triệu gọi 21 Hình 3.2: Cấu trúc tĩnh chuyển thành đồ thị lồng khối 21 Hình 3.3: So sánh cấu trúc động chương trình cắp chương trình gốc 23 Hình 3.4: Lưu đồ chuyển thành chuỗi lưu đồ 26 Hình 3.5: Vịng lặp khác lưu đồ đẳng cấu 27 Hình 3.6: Phát biểu điều kiện khác lưu đồ đẳng cấu 28 Hình 3.7: 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 29 Hình 3.8: Chèn thêm khối phát biểu S vào hai phát biều điều khiển 30 Hình 4.1: Sơ đồ DFD ngữ cảnh hệ thống 39 Hình 4.2: Sơ đồ DFD mức hệ thống .40 Hình 4.3: Sơ đồ DFD mức hệ thống .41 Hình 4.4: Cấu trúc thư mục sinh từ phân tích cú pháp 43 Hình 4.5: Giao diện chương trình 54 Hình 4.6: Cửa sổ hội thoại để chọn thư mục chứa làm cần kiểm tra 55 Hình 4.7: Hiển thị cặp đồ thị triệu gọi với node tơ màu tương ứng 56 Hình 4.8: Hiển thị cặp đồ thị lồng khối với node tô màu tương ứng 57 Hình 4.9: Hiển thị cặp lưu đồ với node tô màu tương ứng 58 Luận văn tốt nghiệp cao học 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 GIỚI THIỆU 1.1 Phạm vi, động thúc đẩy mục tiêu Sao cắp việc sử dụng lại phần toàn tác phẩm người khác mà không đồng ý tác giả không cho biết nguồn tài liệu sử dụng Với phát triển mạnh mẽ Internet, công cụ tìm kiếm WWW cơng cụ xử lý văn mạnh ngân hàng luận văn, “term paper mills” ([3]) việc cắp trường Đại Học ngày phổ biến vấn đề nghiêm trọng cần giải Theo thống kê ([1]) , 35% sinh viên thừa nhận họ thường xuyên cắp, 40% làm 19% sinh viên trả lời “ít khi” Điều có nghĩa 94% sinh viên lần sử dụng biện pháp gian lận Tình trạng cắp trường Đại Học không dừng lại Hơn 50% sinh viên vấn cho tỉ lệ cắp gia tăng mạnh mẽ năm gần Vấn đề cắp không giới hạn văn viết mà xuất thường xuyên mã nguồn; sinh viên copy tồn phần mã nguồn bàn bè, sinh viên khóa trước từ chương trình tài liệu, sách… Khơng may việc đọc mã nguồn người khác viết việc khó khăn phức tạp thân mã nguồn nên việc cắp ngơn ngữ lập trình khó phát so với ngơn ngữ tự nhiên Vì cần phải có phần mềm phát cắp để hổ trợ giảng viên việc phát làm có khả gian lận Một hệ thống giúp cho giáo viên chấm xác hơn, đánh giá lực sinh viên mà cịn góp phần làm giảm tỉ lệ cắp trường Đại Học, nâng cao ý thức tôn trọng tác quyền, làm đạo đức làm sở để thực biện pháp trừng phạt hành vi gian lận thi cử Luận văn tốt nghiệp cao học 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 Mục tiêu luận văn nghiên cứu phương pháp top-down hệ thống ngôn ngữ mở áp dụng cho hệ thống hỗ trợ phát cắp mã nguồn sinh viên Phương pháp top-down phân tích so sánh mã nguồn chương trình từ cấp độ tổng quát cấp module, sau đến cấp lưu đồ cuối cấp phát biểu Bằng cách sử dụng cấu trúc đặc trưng mã nguồn, việc so sánh đạt kết xác Ở cấp, số lượng cặp chương trình có khả cắp bị giảm xuống, đồng thời hệ thống tập trung phân tích so sánh phần mã nguồn có khả cắp nhiều nhất, điều làm tăng hiệu xuất việc so sánh Mục đích việc xây dựng hệ thống ngôn ngữ mở để sử dụng hệ thống cho ngôn ngữ khác phát triển lại hệ thống từ đầu Bằng cách chi phi thời gian mở rộng hệ thống giảm đáng kể Bên cạnh việc nghiên cứu phương pháp, chúng tơi cịn phát triển giải thuật để giải toán phương pháp trên, đồng thời xây dựng chương trình cho phần nghiên cứu lý thuyết 1.2 Những đóng góp luận văn Luận văn đạt mục tiêu đề xây dựng phương pháp top-down hệ thống ngôn ngữ mở đồng thời xây dựng hệ thống hỗ trợ phát cắp mã nguồn sinh viên Bước đầu hệ thống hỗ trợ phát cắp thi viết ngôn ngữ Pascal Do trình thử nghiệm nên tập luật sinh không thật đầy đủ, hỗ trợ cho kiểu liệu chuỗi, số nguyên, số thực Hệ thống thử nghiệm với tập liệu chương trình nhiều lập trình khác điều chỉnh, giả lập cắp so với nhiều chương trình gốc, đạt kết tương đối thành công phát cắp xếp hạng theo độ tương tự Luận văn tốt nghiệp cao học 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 Hệ thống thử nghiệm so sánh với hai hệ thống JPlag Sim Kết độ xác hệ thống top-down cao hẳn so với Sim Với JPlag hệ thống cho kết phân biệt cắp phân cấp độ tương tự tốt chứng tỏ ưu điểm việc sử dụng lưu đồ Chương trình bày thí nghiệm kết so sánh cụ thể Tuy tập liệu khơng hồn chỉnh kết đạt ban đầu khả quan, có khả đầu tư để trở thành hệ thống phát cắp thực trường Đại Học 1.3 Sơ lược cấu trúc luận văn Luận văn chia làm chương Chương đầu chương giới thiệu tổng quan luận văn, cho biết động thúc đẩy, mục tiêu phạm vi giải vấn đề luận văn; đồng thời phần tổng kết đóng góp luận văn lãnh vực phát cắp, cho biết cấu trúc tổng quát luận văn Chương tóm tắt cơng trình liên quan lĩnh vực phát cắp Các cơng trình sử dụng kỹ thuật hai phước pháp attributecounting structure-metric Hai phương pháp giới thiệu mục 2.2 2.3 Mục cuối 2.4 so sánh hiệu suất hai phương pháp rút kết luận Chương trình bày phương pháp top-down hệ thống ngôn ngữ mở sử dụng làm tảng để xây dựng hệ thống phát cắp đề nghị luận văn Mục 3.1 giới thiệu tổng quát phương pháp top-down Các mục 3.2, 3.3, 3.4 trình bày chi tiết ba bước phương pháp top-down; mục 3.5 trình bày hệ thống ngôn ngữ mở Mục cuối tổng kết lại đưa kết luận phương phát topdown Chương trình bày việc thiết kế thực hệ thống phát cắp sử dụng phương pháp top-down Trong phần cấu trúc tổng quát hệ thống miêu Luận văn tốt nghiệp cao học 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 tả mục 4.1 Lần lược mục 4.2, 4.3, 4.4 trình bày chi tiết module hệ thống Mục 4.5 giải thuật sử dụng Giao diện sử dụng hệ thống trình bày mục 4.6 Cuối chương kết luận văn, đánh giá lại luận văn đưa đề nghị hướng nghiên cứu phát triển tương lai hệ thống pháp cắp sử dụng phương pháp top-down 10 Luận văn tốt nghiệp cao học 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 0: writeln ("REACHED THE SOLUTION X=",x," AFTER ", n, " ITERATIONS"); END; END; PROCEDURE NR(e:real; VAR n:integer; VAR x:real; VAR errocode:integer); VAR i:integer; x1:real; PROCEDURE INIT(VAR i: real; VAR errocode: integer); BEGIN i := 0; errorcode := 0; END; FUNCTION NRf (x:real):real; BEGIN NRf:=x*x+2*x-3; END; FUNCTION NRfd (x:real):real; BEGIN NRfd:=2*x+2; END; FUNCTION NRfGia (x:real):real; BEGIN NRf:=x*x; END; BEGIN INIT(i, errorcode); REPEAT d:=NRfd(x); IF d=0 THEN errorcode:=1; x1:=x-NRf(x)/d; IF abs(x-x1)n)); errorcode:=2; END; BEGIN (*main*) writeln ("SOLUTION OF THEEQUATION x^2+2*x-3"); writeln ("PLEASE INPUT INITIAL VALUE, THRESHOLD, MAX ITERATIONS (x e n)"); read (x,e,n); 77 Luận văn tốt nghiệp cao học 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 NR(e,n,x,errorcode); NRonexit(errorcode); END (*main*) Kết First paper abc8.txt Second paper def8.txt Module mark 0.857143 Flowchart mark Statement mark 0.909091 Ví dụ 4: Đổi vế phát biểu if def2.txt so sánh với abc2.txt def2.txt program GiaiPhuongTrinhBac2 ; var PTB2a: integer; PTB2b: integer; PTB2c : integer; PTB2x1: float; PTB2x2: float; PTB2delta: float; begin write("Nhap vao he so a, b, c: "); readln(PTB2a, PTB2b, PTB2c); 78 Luận văn tốt nghiệp cao học 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 if PTB2a then begin PTB2delta := PTB2b*PTB2b - 4*PTB2a*PTB2c; PTB2x1 := (-PTB2b-sqrt(PTB2delta))/2/PTB2a; PTB2x2 := ( PTB2b-sqrt(PTB2delta))/2/PTB2a; write("a0 phuong trinh co hai nghiem x1:", PTB2x1, " va x2:", PTB2x2); end else begin if PTB2b then begin PTB2x1 := -PTB2c/PTB2b; write("a=0, b0 phuong trinh bac co mot nghiem nhat", PTB2x1); end else begin if PTB2c then begin write("a=0, b=0, c 0 phuong trinh bac vo nghiem"); end else write("a=0, b=0, c= phuong trinh bac co vo so nghiem"); end; end; end Kết First paper abc2.txt Second paper def2.txt Module mark Flowchart mark Statement mark Ví dụ 5: Đổi vế phát biểu if def3.txt, thêm vào phát biểu gán giả so sánh với abc3.txt def3.txt program GiaiPhuongTrinhBac2 ; var PTB2a: integer; PTB2b: integer; PTB2c : integer; PTB2x1: float; PTB2x2: float; PTB2delta: float; PTB2SQRTdelta: float; begin write("Nhap vao he so a: "); readln(PTB2a); write("Nhap vao he so b: "); readln(PTB2b); write("Nhap vao he so c: "); 79 Luận văn tốt nghiệp cao học 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 readln(PTB2c); if PTB2a then begin PTB2delta := PTB2b*PTB2b - 4*PTB2a*PTB2c; PTB2SQRTdelta := sqrt(PTB2delta); PTB2x1 := (-PTB2b-PTB2SQRTdelta)/2/PTB2a; PTB2x2 := ( PTB2b-PTB2SQRTdelta)/2/PTB2a; write("a0 phuong trinh co hai nghiem x1:", PTB2x1, " va x2:", PTB2x2); end else begin if PTB2b then begin PTB2x1 := PTB2c/PTB2b; write("a=0, b0 phuong trinh bac co mot nghiem nhat", PTB2x1); end else begin if PTB2c = then begin write("a=0, b=0, c 0 phuong trinh bac vo nghiem"); end else write("a=0, b=0, c= phuong trinh bac co vo so nghiem"); end; end; end Kết First paper abc3.txt Second paper def3.txt Module mark Flowchart mark Statement mark 0.9 Ví dụ 6: Thay phát biểu case thành if def4.txt so sánh với abc4.txt def4.txt program IFDemo; var n, i, menu: integer; sum: integer; accum: integer; inverseSum: real; inverse : real; begin writeln("Nhap mot so nguyen duong n bat ky"); readln(n); writeln("Nhan phim 3, 2, hoac de chon menu: "); writeln("Menu 3: tinh tong nghich dao n so dau tien"); writeln("Menu 2: tinh tich n "); writeln("Menu 1: tinh tong n so dau tien"); 80 Luận văn tốt nghiệp cao học 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 readln(menu); i := 1; if (menu=3) then begin inverseSum := 0; while (i