1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng hệ thống phát hiện sao chép mã nguồn

54 0 0

Đ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

Thông tin cơ bản

Tiêu đề Xây Dựng Hệ Thống Phát Hiện Sao Chép Mã Nguồn
Tác giả Huỳnh Thị Diệu Trâm
Người hướng dẫn ThS. Phan Chí Tùng
Trường học Đại Học Đà Nẵng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2019
Thành phố Đà Nẵng
Định dạng
Số trang 54
Dung lượng 2,04 MB

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN TỐT NGHIỆP NGÀNH: CÔNG NGHỆ THÔNG TIN CHUYÊN NGÀNH: CÔNG NGHỆ PHẦN MỀM ĐỀ TÀI: XÂY DỰNG HỆ THỐNG PHÁT HIỆN SAO CHÉP MÃ NGUỒN Người hướng dẫn: ThS. PHAN CHÍ TÙNG Sinh viên thực hiện: HU Ỳ NH TH Ị DI Ệ U TRÂM Số thẻ sinh viên: 102150138 Lớp : 15T2 Đà Nẵng, 12 / 2019 NH Ậ N XÉT C Ủ A NGƯ Ờ I HƯ Ớ NG D Ẫ N ................................................................................................... ........................................ ................................................................................................... .................. ...................... ................................................................................................... ........................................ ............................................................................................... ........................................... . ................................................................................................... ........................................ ......................................................................... ........................................................ .......... ................................................................................................... ........................................ ................................................... ..................................................................... ................... ................................................................................................... ........................................ ............................. ................................................................................. ............................. ................................................................................................... ........................................ ....... .............................................................................................. ...................................... ................................................................................................... ......................... ............... ................................................................................................... ........................................ ................................................................................................... .. ...................................... ................................................................................................... ........................................ ............................................................................... .................................................... ........ ................................................................................................... ........................................ ......................................................... .................................................................. ................ ................................................................................................... ........................................ ................................... .............................................................................. .......................... ................................................................................................... ........................................ ............. .......................................................................................... .................................... ................................................................................................... ............................... ......... ................................................................................................... ........................................ ................................................................................................... ......... .............................. ................................................................................................... ........................................ ...................................................................................... ................................................. .... ................................................................................................... ........................................ ................................................................ ............................................................. .............. ................................................................................................... ........................................ .......................................... ........................................................................... ...................... ................................................................................................... ........................................ .................... ....................................................................................... ................................ NH Ậ N XÉT C Ủ A NGƯ Ờ I PH Ả N BI Ệ N ............................................................................ ............................................................... ............................................................................................................................. .............. ...................................................... ..................................................................................... ............................................................................................................................. .............. ................................ ........................................................................................................... ............................................................................................................................. .............. .......... ............................................................................................................................. .... ............................................................................................................................. .. ............ ............................................................................................................................. .............. ......................................................................................................... .................................. ............................................................................................................................. .............. ................................................................................... ........................................................ ............................................................................................................................. .............. ............................................................ ............................................................................... ............................................................................................................................. .............. ...................................... ..................................................................................................... ............................................................................................................................. .............. ................ ........................................................................................................................... ............................................................................................................................. ........ ...... ............................................................................................................................. .............. ............................................................................................................... ............................ ............................................................................................................................. .............. ......................................................................................... .................................................. ............................................................................................................................. .............. ................................................................... ........................................................................ ............................................................................................................................. ............. ............................................. .............................................................................................. ............................................................................................................................. .............. ....................... .................................................................................................................... ............................................................................................................................. .............. . ............................................................................................................................. ............. ...................................................................................................................... ..................... ............................................................................................................................. .............. ................................................................................................ ........... ................... ........ Đ Ạ I H Ọ C Đ À N Ẵ N G  T R Ư Ờ N G Đ Ạ I H Ọ C B Á C H K H O A KHOA CÔNG NGHỆ THÔNG TIN 54, Nguyễn Lương Bằng, Hoà Khánh, Liên Chiểu, TP. Đà Nẵng Tel. 84.511.3.736.949, Fax. 84.511.842.771 - Website: itf.dut.edu.vn - E - mail: cntt@dut.udn.vn PHIẾU DUYỆT ĐỒ ÁN TỐT NGHIỆP I. Phần dành cho Sinh viên 1. Họ và tên: Huỳnh Thị Diệu Trâm 2. Mã Sinh viên: 102150138 3. Lớp: 15 T2 4. Tên đề tài: Xây dựng hệ thống phát hiện sao chép mã nguồn 5. Điện thoại: 0961213356 6. E - mail: htdtram97 @gmail.com 7. Họ và tên GVHD: ThS. Phan Chí Tùng II. Phần dành cho Hội đồng STT Nội dung đánh giá Kết luận 1. Trình bày báo cáo theo đúng mẫu qui định của Khoa 2. Không có sự sao chép nội dung báo cáo và chương trình đã có 3. Biên dịch mã nguồn và chạy được chương trình 4. Có kịch bản thực hiện với dữ liệu thử nghiệm 5. Kết quả thực hiện chương trình đúng theo báo cáo 6. Có sự đóng góp, phát triển của tác giả trong đồ án Ý kiến khác: ......................................................................................... .................................. ....................................................................................................... ............................. .............. Kết luận:  Đạt yêu cầu  Phải sửa chữa lại  Không đạt yêu cầu Đà Nẵng, ngày tháng 12 năm 2019 Chủ tịch Hội đồng (Ký và ghi họ tên) Cán bộ duyệt kiểm tra (Ký và ghi họ tên) ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP 1. Thông tin chung: 1. Họ và tên sinh viên: Huỳnh Thị Diệu Trâm 2. Lớp: 15T2 Số thẻ SV: 102150138 3. Tên đề tài: Xây dựng hệ thống phát hiện sao chép mã nguồn 4. Người hướng dẫn: ThS. Phan Chí Tùng Học hàm/ học vị: Thạc Sĩ II. Nhận xét, đánh giá đồ án tốt nghiệp: 1. Về tính cấp thiết, tính mới, khả năng ứng dụng của đề tài: (điểm tối đa là 2đ) ……………………………………………………………………………………….. …………………………………………… ………………………………………….. 2. Về kết quả giải quyết các nội dung nhiệm vụ yêu cầu của đồ án: (điểm tối đa là 4đ) ……………………………………………………………………………………….. ……………………………………………………………………………………….. 3. Về hình thức, cấu trúc, bố cục của đồ án tốt nghiệp: (điểm tối đa là 2đ) ……… ……………………………………………………………………………….. ……………………………………………………………………………………….. 4. Đề tài có giá trị khoa học/ có bài báo/ giải quyết vấn đề đặt ra của doanh nghiệp hoặc nhà trường: (điểm tối đa là 1đ) ……………………………………………………………………………………….. …………………………………………………………………………… ………….. 5. Các tồn tại, thiếu sót cần bổ sung, chỉnh sửa: ……………………………………………………………………………………….. ……………………………………………………………………………………….. III. Tinh thần, thái độ làm việc của sinh viên: (điểm tối đa 1đ) ……………………………………………………………………………………….. IV. Đánh giá: 1. Điểm đánh giá: ……../10 (lấy đến 1 số lẻ thập phân) 2. Đề nghị: ☐ Được bảo vệ đồ án ☐ Bổ sung để bảo vệ ☐ Không được bảo vệ Đà Nẵn g, ngày tháng 12 năm 2019 Người hướng dẫn TÓM T Ắ T Tên đ ề tài: Xây d ự ng h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n Sinh viên th ự c hi ệ n: Hu ỳ nh Th ị Di ệ u Trâm S ố th ẻ SV: 102150138 L ớ p: 15T2 Hi ệ n nay, vi ệ c sinh viên n ộ p bài t ậ p ở các l ớ p h ọ c ph ầ n thư ờ ng xuyên sao chép mã ngu ồ n v ớ i nhau, đ ề u này khi ế n cho vi ệ c đánh giá năng l ự c c ủ a sinh viên không chính xác. Đ ể gi ả i quy ế t v ấ n đ ề đó, em đã phát tri ể n đ ề tài “Xây d ự ng h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n” giúp gi ả m thi ể u s ự gian l ậ n sao chép mã ngu ồ n trong h ọ c t ậ p đ ể đánh giá đúng năng l ự c c ủ a m ỗ i sinh viên . H ệ th ố ng giúp tìm ra nh ữ ng bài t ậ p c ủ a sinh viên khác có đo ạ n mã ngu ồ n gi ố ng v ớ i sinh viên mu ố n so sánh, cho bi ế t đư ợ c t ỉ l ệ ph ầ n trăm s ự gi ố ng nhau và ch ỉ ra đo ạ n mã ngu ồ n trùng nhau gi ữ a hai bài t ậ p c ủ a sinh viên , giúp gi ả ng viên d ễ so sánh và đ ố i chi ế u các bài t ậ p v ề nhà c ủ a sinh viên đã th ự c hi ệ n . ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN CỘNG HÒA XÃ HÔI CHỦ NGHĨ A VIỆT NAM Độc lập - Tự do - Hạnh phúc NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Huỳnh Thị Diệu Trâm Số thẻ sinh viên: 102150138 Lớp: 15T2 Khoa: Công nghệ thông tin Ngành: Công nghệ thông tin 1. Tên đề tài đồ án: Xây dựng hệ thống phát hiện sao chép mã nguồn 2. Đề tài thuộc diện: ☐ Có ký kết thỏa thuận sở hữu trí tuệ đối với kết quả thực hiện 3. Các số liệu và dữ liệu ban đầu: ……………………………………………………………………………………………… 4. Nội dung các phần thuyết minh và tính toán: Nội dung thuyết minh gồm: Mở đầu: Phần mở đầu của luận văn giới thiệu tổng quan về đề tài, lý do chọn đề tài, đồng thời nêu lên mục đích và phương pháp thực hiện đề tài . Chương 1: Tổng quan về sao chép mã nguồn: Giới thiệu về sao chép mã nguồn, các phương pháp sử dụng và các hệ thống phát hiện sao ch ép mã nguồn. Chương 2: Xây dựng mô hình phát hiện sao chép mã nguồn: Trình bày các thuật toán, cơ sở lý thuyết để áp dụng xây dựng mô hình. Chương 3: Xây dựng hệ thống phát hiện sao chép mã nguồn: Trình bày công nghệ được sử dụng trong hệ thống, hồ sơ phâ n tích và hồ sơ thiết kế trong xây dựng hệ thống và luồng hoạt động của hệ thống. Chương 4: Triển khai và đánh giá: Mô tả cài đặt, vận hành hệ thống và đánh giá kết quả đạt được. Kết luận và hướng phát triển : Phần kết luận của luận văn, nhấn mạnh vấn đề đ ã được giải quyết, cũng như vấn đề chưa được giải quyết và hướng phát triển. 5. Các bản vẽ, đồ thị ( ghi rõ các loại và kích thước bản vẽ ): ……………………………………………………………………………………………….. 6. Họ tên người hướng dẫn: ThS. Phan Chí Tùng 7. Ngày giao nhiệm vụ đồ án: ……../ ……./20 19 8. Ngày ho àn thành đồ án: ……../……./2019 Đà Nẵng, ngày tháng 12 năm 201 9 Trưởng Bộ môn Công nghệ phần mềm Người hướng dẫn i L Ờ I NÓI Đ Ầ U Trước hết, em xin bày tỏ tình cảm và lòng biết ơn của em tới thầy giáo T hs. Phan Chí Tùng . Người đã từng bước hướng dẫn, giúp đỡ em trong quá trình thực hiện đồ án tốt nghiệp của mình. Em xin chân thành cảm ơn các thầy cô giáo Khoa Công nghệ thông tin của Trường Đại học Bách khoa – Đại học Đà Nẵng đã dìu dắt, dạy dỗ em cả về kiến thức chuyên môn và tinh thần học tập để em có được những kiến thức thực hiện đồ án tốt nghiệp của mình. Em xin chân thành cảm ơn ban giám hiệu nhà trường, các phòng ban đã giúp đỡ tạo điều kiện tốt nhất cho em trong suốt thời gian học tập tại trường. Tuy có nh iều cố gắng trong quá trình học tập, cũng như trong quá trình làm đồ án tốt nghiệp không thể tránh khỏi những thiếu sót, em rất mong được sự góp ý quý báu của tất cả các thầy cô giáo cũng như tất cả các bạn để kết quả của em được hoàn thiện hơn. Một lần nữ a em xin chân thành cảm ơn tất cảm mọi người đã giúp em hoàn thiện đồ án này . Đà Nẵng, ngày 20 tháng 12 năm 2019 Sinh viên thực hiện Huỳnh Thị Diệu Trâm ii CAM ĐOAN Tôi xin cam đoan: 1. N ộ i dung trong đ ồ án này là do em th ự c hi ệ n dư ớ i s ự hư ớ ng d ẫ n tr ự c ti ế p c ủ a Ths. Phan Chí Tùng . 2. Các tham kh ả o dùng trong đ ồ án đ ề u đư ợ c trích d ẫ n rõ ràng tên tác gi ả , tên công trình, th ờ i gian, đ ị a đi ể m công b ố . 3. N ế u có nh ữ ng sao chép không h ợ p l ệ , vi ph ạ m, em xin ch ị u hoàn toàn trách nhi ệ m . Sinh viên th ự c hi ệ n Hu ỳ nh Th ị Di ệ u Trâm iii M Ụ C L Ụ C TÓM T Ắ T NHI Ệ M V Ụ Đ Ồ ÁN L Ờ I NÓI Đ Ầ U ................................ ................................ ................................ ............. i CAM ĐOAN ................................ ................................ ................................ ............... ii M Ụ C L Ụ C ................................ ................................ ................................ ................ iii DANH SÁCH B Ả NG ................................ ................................ ................................ . v DANH SÁCH HÌNH Ả NH ................................ ................................ ....................... vi DANH SÁCH T Ừ VI Ế T T Ắ T ................................ ................................ ................. vii M Ở Đ Ầ U ................................ ................................ ................................ .................... 1 CHƯƠNG 1 T Ổ NG QUAN V Ề SAO CHÉP MÃ NGU Ồ N ................................ . 3 1.1. Khái ni ệ m ................................ ................................ ................................ ......... 3 1.2. Các phương pháp và h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n ........................ 3 1.2.1. Phương pháp phát hi ệ n sao chép mã ngu ồ n ................................ ........... 3 1.2.2. H ệ th ố ng phát hi ệ n sao chép mã ngu ồ n ................................ ................. 4 1.3. K ế t chương ................................ ................................ ................................ ....... 7 CHƯƠNG 2 XÂY D Ự NG MÔ HÌNH PHÁT HI Ệ N SAO CHÉP MÃ NGU Ồ N 8 2.1. Mô hình phát hi ệ n sao chép mã ngu ồ n ................................ ........................... 8 2.2. Các giai đo ạ n c ủ a mô hình ................................ ................................ ............ 10 2.2.1. Tokenization ................................ ................................ ....................... 10 2.2.2. KGram và Hashing ................................ ................................ ............. 11 2.2.3. Build Windows và Select Fingerprints ................................ ................ 13 2.3. K ế t chương ................................ ................................ ................................ ..... 15 CHƯƠNG 3 XÂY D Ự NG H Ệ TH Ố NG PHÁT HI Ệ N SAO CHÉP MÃ NGU Ồ N ................................ ................................ ................................ ........ 16 3.1. Công ngh ệ s ử d ụ ng ................................ ................................ ......................... 16 3.1.1. T ổ ng quan v ề .NET ................................ ................................ ............. 16 3.1.2. M ô hình MVC (Mode – View - Controller) ................................ ........ 19 3.1.3. T ổ ng quan v ề ASP .NET MVC ................................ ........................... 20 iv 3.1.4. T ổ ng quan v ề Entity Framework ................................ ......................... 21 3.2. Phân tích thi ế t k ế h ệ th ố ng ................................ ................................ ............ 23 3.2.1. Phân tích nghi ệ p v ụ h ệ th ố ng ................................ .............................. 23 3.2.2. Sơ đ ồ phân rã ch ứ c năng ................................ ................................ ..... 23 3.2.3. Bi ể u đ ồ ca s ử d ụ ng ................................ ................................ .............. 24 3.2.4. Bi ể u đ ồ ho ạ t đ ộ ng ................................ ................................ ............... 28 3.3. Thi ế t k ế h ệ th ố ng ................................ ................................ ........................... 29 3.3.1. Bi ể u đ ồ l ớ p ................................ ................................ ......................... 29 3.3.2. Bi ể u đ ồ tu ầ n t ự ................................ ................................ ................... 30 3.3.3. Thi ế t k ế cơ s ở d ữ li ệ u ................................ ................................ .......... 31 3.4. K ế t chương ................................ ................................ ................................ ..... 34 CHƯƠNG 4 TRI Ể N KHA I VÀ ĐÁNH GIÁ ................................ ..................... 35 4.1. Yêu c ầ u c ấ u hình máy ch ủ ................................ ................................ ............. 35 4.2. Tri ể n khai h ệ th ố ng ................................ ................................ ........................ 35 4.3. K ế t chương ................................ ................................ ................................ ..... 37 K Ế T LU Ậ N VÀ HƯ Ớ NG PHÁT TRI Ể N ................................ ............................... 38 1. K ế t qu ả đ ạ t đư ợ c ................................ ................................ ............................ 38 2. Hư ớ ng phát tri ể n ................................ ................................ ........................... 38 TÀI LI Ệ U THAM KH Ả O ................................ ................................ ....................... 39 v DANH SÁCH B Ả NG B ả ng 1.1. B ả ng so sánh m ộ t s ố h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n hi ệ n nay .......... 7 B ả ng 3.1. Ca s ử d ụ ng đăng nh ậ p ................................ ................................ ................ 25 B ả ng 3.2. Ca s ử d ụ ng xem d anh sách bài t ậ p c ủ a sinh viên ................................ ........ 25 B ả ng 3.3. Ca s ử d ụ ng tìm ki ế m bài t ậ p c ủ a sinh viên ................................ ................. 26 B ả ng 3.4. Ca s ử d ụ ng xem danh sách bài t ậ p c ủ a sinh viên có đo ạ n mã trùng ............ 26 B ả ng 3.5. Ca s ử d ụ ng xem chi ti ế t t ừ ng c ặ p bài t ậ p gi ố ng nhau ................................ .. 27 B ả ng 3.6. Mô t ả b ả ng HocPhan ................................ ................................ .................. 31 B ả ng 3.7. Mô t ả b ả ng LopHocP han ................................ ................................ ........... 32 B ả ng 3.8. Mô t ả b ả ng ThongTin ................................ ................................ ................ 32 B ả ng 3.9. Mô t ả b ả ng SinhVien ................................ ................................ ................. 33 B ả ng 3.10. Mô t ả b ả ng SinhVienTrongLop ................................ ................................ 33 B ả ng 3.11. Mô t ả b ả ng BaiTap ................................ ................................ .................. 33 B ả ng 3.12. Mô t ả b ả ng BaiTapCuaSinhVien ................................ .............................. 33 vi DANH SÁCH HÌNH Ả NH Hình 1.1. Sơ đ ồ kh ố i c ủ a h ệ th ố ng SIM ................................ ................................ ....... 5 Hình 2.1. Mô hình t ổ ng quan c ủ a phương pháp phát hi ệ n sao chép mã ngu ồ n .............. 9 Hình 2.2. So sánh d ấ u vân tay ................................ ................................ ...................... 9 Hình 2.3. Ví d ụ v ề d ữ li ệ u đ ầ u vào ................................ ................................ ............. 10 Hình 2.4. D ữ li ệ u sau khi đã ti ề n x ử lý ................................ ................................ ....... 11 Hình 2.5.Các bư ớ c c ủ a thu ậ t toán Winnowing ................................ ........................... 14 Hình 3.1. Ki ế n trúc .NET Framework ................................ ................................ ........ 17 Hình 3.2. Thành ph ầ n cơ b ả n c ủ a IDE ................................ ................................ ....... 19 Hình 3.3. Mô hình MVC ................................ ................................ ............................ 20 Hình 3.4. Mô hình Entity Framework ................................ ................................ ........ 22 Hình 3.5. Sơ đ ồ phân r ã ch ứ c năng ................................ ................................ ............ 24 Hình 3.6. Bi ể u đ ồ ca s ử d ụ ng các ch ứ c năng c ủ a h ệ th ố ng ................................ ......... 24 Hình 3.7. Bi ể u đ ồ ho ạ t đ ộ ng ch ứ c năng qu ả n lý bài t ậ p c ủ a sinh viên ........................ 28 Hình 3.8. Bi ể u đ ồ các l ớ p ph ụ c v ụ ch ứ c năng qu ả n lý bài t ậ p c ủ a sinh viên ............... 29 Hình 3.9. Bi ể u đ ồ tu ầ n t ự c ủ a ch ứ c năng ki ể m tra gi ố ng nhau c ủ a bài t ậ p sinh viên ... 30 Hình 3.10. Thi ế t k ế cơ s ở d ữ li ệ u. ................................ ................................ .............. 31 Hình 4.1. Giao di ệ n c ủ a ch ứ c năng qu ả n lý bài t ậ p c ủ a sinh viên ............................... 35 Hình 4.2. Giao di ệ n ch ứ c năng hi ể n th ị danh sách các bài t ậ p sinh viên có đo ạ n mã trùng ................................ ................................ ................................ .......................... 36 Hình 4.3. Giao di ệ n ch ứ c năng hi ể n th ị chi ti ế t s ự gi ố ng nhau c ủ a hai đo ạ n mã ngu ồ n ................................ ................................ ................................ ................................ .. 36 Hình 4.4. Giao di ệ n ch ứ c năng hi ể n th ị chi ti ế t s ự gi ố ng nhau c ủ a hai đo ạ n mã ngu ồ n ................................ ................................ ................................ ................................ .. 37 Hình 4.5. Giao di ệ n ch ứ c năng hi ể n th ị chi ti ế t s ự gi ố ng nhau c ủ a hai mã ngu ồ n ....... 37 vii DANH SÁCH T Ừ VI Ế T T Ắ T T ừ vi ế t t ắ t Di ễ n gi ả i MS Microsoft COM Component Object Model LINQ Language - Integrated Query MSIL Microsoft Intermediate Language ASP Active Server Page MVC Mode View Controller URL Uniform Resource Locator IIS Internet Information Server Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 1 M Ở Đ Ầ U 1. T ổ ng quan v ề đ ề tài Vi ệ c tái s ử d ụ ng l ạ i các đo ạ n mã ngu ồ n b ằ ng cách sao chép nguyên v ẹ n ho ặ c có s ự thay đ ổ i nh ỏ trong mã ngu ồ n là m ộ t ho ạ t đ ộ ng ph ổ bi ế n trong ngành công nghi ệ p ph ầ n m ề m hi ệ n này. K ế t qu ả là các h ệ th ố ng ph ầ n m ề m thư ờ ng ch ứ a các đo ạ n mã ngu ồ n gi ố ng nhau g ọ i l à sao chép mã ngu ồ n. Sao chép mã ngu ồ n có th ể h ữ u ích trong m ộ t s ố trư ờ ng h ợ p, tuy nhiên nó l ạ i có th ể kéo theo h ậ u qu ả l ớ n trong quá trình b ả o trì và nâng c ấ p h ệ th ố ng ph ầ n m ề m. Trong lĩnh v ự c h ọ c t ậ p, tái s ử d ụ ng mã ngu ồ n là hình th ứ c ph ổ bi ế n, tuy nhiê n trong trư ờ ng h ợ p c ầ n ki ể m tra, đánh giá thì vi ệ c tái s ử d ụ ng mã ngu ồ n l ạ i gây ra tác h ạ i không nh ỏ . S inh viên có th ể sao chép mã ngu ồ n t ừ m ộ t ho ặ c nhi ề u sinh viên khác và c ố ý thay đ ổ i ho ặ c thêm vào nh ữ ng y ế u t ố không c ầ n thi ế t vào mã ngu ồ n làm m ặ c dù c ấ u trúc hoàn toàn gi ố ng nhau nh ằ m che d ấ u hành vi sao chép mã ngu ồ n c ủ a mình. Do đó em đ ề xu ấ t đ ề tài “ Xây d ự ng h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n ” . 2. M ụ c tiêu và ý nghĩa c ủ a đ ề tài 2.1. M ụ c đích - Nghiên c ứ u, áp d ụ ng thu ậ t toán Rabin - Karp , thu ậ t toán Winnowing đ ể x ây d ự ng mô hình phát hi ệ n sao chép mã ngu ồ n ; - Phát tri ể n h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n trên cơ s ở mô hình đ ề xu ấ t s ử d ụ ng Model - View - Controller (MVC) cho phép tìm ra các đo ạ n mã ngu ồ n gi ố ng nhau và chi ti ế t t ỷ l ệ ph ầ n trăm sao chép c ủ a các đo ạ n mã ngu ồ n. 2.2. Ý nghĩa - Giúp gi ả m thi ể u s ự gian l ậ n sao chép mã ngu ồ n trong h ọ c t ậ p đ ể đánh giá đúng năng l ự c c ủ a m ỗ i sinh viên. 3. Phương pháp th ự c hi ệ n - Phương pháp lý thuy ế t: nghiên c ứ u tài li ệ u, xây d ự ng mô hình, phương pháp pháp hi ệ n sao chép mã ngu ồ n. - Phương pháp th ự c nghi ệ m: xây d ự ng h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n và tri ể n khai trong th ự c t ế . 4. B ố c ụ c c ủ a đ ồ án Đồ án bao gồm các nội dung sau: Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 2 Mở đầu Chương 1: TỔNG QUAN VỀ SAO CHÉP MÃ NGUỒN Chương 2: XÂY DỰNG MÔ HÌNH PHÁT HIỆN SAO CHÉP MÃ NGUỒN Chương 3: XÂY DỰNG HỆ THỐNG PHÁT HIỆN SAO CHÉP MÃ NGUỒN Chương 4: TRIỂN KHAI VÀ ĐÁNH GIÁ Kết luận và hướng phát triển. Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 3 CHƯƠNG 1 T Ổ NG QUAN V Ề SAO CHÉP MÃ NGU Ồ N 1.1. Khái ni ệ m Sao chép mã ngu ồ n đư ợ c hi ể u là s ự sao chép mà không có m ộ t s ự thay đ ổ i nào ho ặ c có s ự thay đ ổ i nhưng r ấ t nh ỏ và không ả nh hư ở ng gì đ ế n c ấ u trúc mã ngu ồ n [1]. Theo [2 - 6 ], s ử a đ ổ i mã ngu ồ n có th ể đư ợ c phân thành hai lo ạ i chính: s ử a đ ổ i t ừ v ự ng và s ử a đ ổ i c ấ u trúc. S ử a đ ổ i t ừ v ự ng thư ờ ng không yêu c ầ u b ấ t k ỳ ki ế n th ứ c và k ỹ năng l ậ p trình. Ở h ầ u h ế t các trư ờ ng h ợ p, lo ạ i s ử a đ ổ i này có th ể d ễ dàng đư ợ c phát hi ệ n và b ỏ qua. Ví d ụ đi ể n hình c ủ a s ử a đ ổ i t ừ v ự ng là: S ử a đ ổ i đ ị nh d ạ ng c ủ a mã ngu ồ n: các trư ờ ng h ợ p như chèn ho ặ c xóa các dòng tr ố ng, các ng ắ t dòng b ổ sung, các kho ả ng tr ắ ng hay các ta b ; b ổ sung, s ử a đ ổ i ho ặ c xóa các comment; đ ổ i tên đ ị nh danh: bao g ồ m thay đ ổ i tên c ủ a các l ớ p, phương th ứ c và bi ế n ; t ách ho ặ c h ợ p nh ấ t các khai báo bi ế n: m ộ t s ố đ ị nh danh có th ể đư ợ c k ế t h ợ p trong cùng m ộ t khai báo bi ế n n ế u các bi ế n gi ố ng nhau ki ể u d ữ li ệ u ; b ổ sung, s ử a đ ổ i ho ặ c xóa các access modifiers ; s ử a đ ổ i các giá tr ị h ằ ng s ố . Không gi ố ng như s ử a đ ổ i t ừ v ự ng , s ử a đ ổ i c ấ u trúc đòi h ỏ i m ứ c đ ộ cao hơn ki ế n th ứ c và k ỹ năng l ậ p trình. Lo ạ i s ử a đ ổ i này làm cho phát hi ệ n r ấ t khó khăn. Ví d ụ đi ể n hình c ủ a s ử a đ ổ i c ấ u trúc là: Thay đ ổ i th ứ t ự các bi ế n trong các câu l ệ nh; t hay đ ổ i th ứ t ự c ủ a các câu l ệ nh trong các hàm; s ắ p x ế p l ạ i các hàm; b ổ sung ho ặ c lo ạ i b ỏ các câu l ệ nh, các phương th ứ c không bao gi ờ đư ợ c g ọ i ho ặ c các bi ế n th ừ a không bao gi ờ đư ợ c s ử d ụ ng; s ử a đ ổ i c ấ u trúc đi ề u ki ệ n ; t hay đ ổ i ki ể u d ữ li ệ u ; s ử a đ ổ i, thêm các bi ế n t ạ m th ờ i và các bi ể u th ứ c con . 1.2. Các phương pháp và h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n 1.2.1. Phương pháp phát hi ệ n sao chép mã ngu ồ n Hi ệ n nay, các phương pháp phát hi ệ n sao chép mã ngu ồ n đang đư ợ c s ử d ụ ng ph ổ bi ế n [6, 13 ] là: Text - based , Token - based , Tree - based , PDG - based (PDG – Program Dependency Graph) , Metrics - based , Hybrid - based : - Text - based: Là cách ti ế p c ậ n d ự a trên vi ệ c so kh ớ p m ộ t cách chính xác các chu ỗ i trong mã ngu ồ n, v ớ i phương pháp này thì ch ỉ hi ệ u qu ả trong vi ệ c phát hi ệ n hai mã ngu ồ n có gi ố ng nhau toàn b ộ hay không, n ế u ngư ờ i sao chép ch ỉ c ầ n s ử a đ ổ i m ộ t chút trong đo ạ n chương trình mình v ừ a sao chép thì s ẽ không b ị h ệ th ố ng phát hi ệ n ra; Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 4 - Token - based: Trong phương pháp này mã ngu ồ n đư ợ c chu ẩ n hóa và bi ể u di ễ n thành m ộ t chu ỗ i token, và s ử d ụ ng thu ậ t toán so sánh chu ỗ i đ ể tìm đo ạ n mã trùng l ặ p. Đi ề u này lo ạ i b ỏ đư ợ c các trư ờ ng h ợ p như thêm, s ử a, xóa kho ả ng tr ắ ng, comment, tên đ ị nh danh, …làm cho h ệ th ố ng chính xác hơn so v ớ i phương p háp text - based; - Tree - based: Toàn b ộ cơ s ở mã ngu ồ n đư ợ c phân tích cú pháp đ ể xây d ự ng thành cây phân tích cú pháp (AST). Các đo ạ n mã đư ợ c bi ể u di ễ n dư ớ i d ạ ng cây con c ủ a cây phân tích ho ặ c AST, s ử d ụ ng thu ậ t toán đ ể so sánh các cây con này. Phương pháp này cho phép phát hi ệ n s ự tương đ ồ ng ở m ứ c cao hơn. Ví d ụ như so sánh cây cú pháp có th ể bình thư ờ ng hóa các câu l ệ nh đi ề u ki ệ n ho ặ c là phát hi ệ n các c ấ u trúc tương đương gi ố ng nhau; - PDG - based: T ạ o ra các bi ể u đ ồ ph ụ thu ộ c chương trình(PDGs) t ừ mã ngu ồ n. Các đo ạ n mã là các sơ đ ồ con c ủ a các PDG này, s ử d ụ ng thu ậ t toán đ ể so sánh các sơ đ ồ con này. PDG n ắ m b ắ t lu ồ ng đi ề u khi ể n th ự c t ế trong m ộ t chương trình và cho phép xác đ ị nh v ị trí tương đương ở m ứ c cao hơn nhi ề u, v ớ i chi phí l ớ n hơn v ề đ ộ ph ứ c t ạ p và th ờ i g ian tính toán; - Metrics - based: Phương pháp này dùng đ ể đánh giá các s ố li ệ u mã ngu ồ n đã s ử d ụ ng, ví d ụ : s ố lư ợ ng bi ế n đã s ử d ụ ng, vòng l ặ p, đi ề u ki ệ n, toán t ử , …và sau đó so sánh d ự a trên các s ố li ệ u đó; - Hybrid - based: là s ự k ế t h ợ p m ộ t s ố phương pháp đã nêu trên. Ví d ụ : có th ể k ế t h ợ p kh ả năng phát hi ệ n c ủ a cây phân tích v ớ i t ố c đ ộ đư ợ c cung c ấ p b ở i cây h ậ u t ố (suffix trees) m ộ t lo ạ i c ấ u trúc d ữ li ệ u kh ớ p chu ỗ i. 1.2.2. H ệ th ố ng phát hi ệ n sao chép mã ngu ồ n Trong th ự c t ế , các h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n ph ổ bi ế n hi ệ n nay đ ề u ứ ng d ụ ng nh ữ ng phương pháp đã nêu trên, có th ể li ệ t kê: S IM , Marble, Plaggie , …. SIM SIM [7, 15] là h ệ th ố ng ki ể m tra s ự tương t ự t ừ v ự ng trong các văn b ả n ngôn ng ữ t ự nhiên và trong các chương trình đư ợ c vi ế t b ằ ng C, C ++, Java, Pascal, Modula - 2, Miranda, Lisp và mã trình biên d ị ch mã 8086 . Nó đư ợ c phát tri ể n vào năm 1989 b ở i Dick Grune t ạ i Đ ạ i h ọ c VU Amsterdam. Nó đư ợ c s ử d ụ ng đ ể phát hi ệ n mã trùng l ặ p trong các d ự án ph ầ n m ề m l ớ n, trong văn b ả n chương trình, trong các t ậ p l ệ nh shell và trong tài li ệ u; phát hi ệ n đ ạ o văn trong các d ự án (ph ầ n m ề m), giáo d ụ c . SIM là h ệ th ố ng có giao di ệ n b ằ ng c ommand line . Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 5 Hình 1 . 1 . Sơ đ ồ kh ố i c ủ a h ệ th ố ng SIM Quá trình S im s ử d ụ ng đ ể phát hi ệ n s ự tương đ ồ ng là mã hóa mã ngu ồ n trư ớ c, sau đó đ ể xây d ự ng b ả ng tham chi ế u có th ể đư ợ c s ử d ụ ng đ ể phát hi ệ n các k ế t qu ả kh ớ p t ố t nh ấ t gi ữ a các t ệ p đư ợ c g ử i và văn b ả n mà c ầ n đư ợ c so sánh. H ệ th ố ng SIM s ử d ụ ng thu ậ t toán String alignment đ ể so sánh hai chương trình. Marble Marble [8, 16] là m ộ t công c ụ phát hi ệ n sao chép mã ngu ồ n hư ớ ng c ấ u trúc đơn gi ả n, d ễ b ả o trì cho chương trình đư ợ c vi ế t b ằ ng Java, C# , Perl, PHP and XSLT , đư ợ c phát tri ể n vào năm 2002 t ạ i Đ ạ i h ọ c Utrecht . H ệ th ố ng s ử d ụ ng cách ti ế p c ậ n structure - based đ ể so sánh các bài n ộ p. Marble chu ẩ n hóa mã đ ể t ạ o mã token đ ộ c l ậ p v ớ i ngôn ng ữ , đ ể lo ạ i b ỏ các chi ti ế t kh ỏ i các t ệ p mà sinh viên d ễ dàng thay đ ổ i: phân tích t ừ v ự ng đư ợ c th ự c hi ệ n (đư ợ c th ự c hi ệ n trong Perl b ằ ng cách s ử d ụ ng các bi ể u th ứ c chính quy) gi ữ l ạ i các t ừ khóa (như class , for ) và tên class và tên phương th ứ c đư ợ c thay th ế thành t ừ đơn gi ả n hơn (như String, System, toString). Comments , kho ả ng tr ắ ng th ừ a , bi ế n h ằ ng và khai báo inport đư ợ c lo ạ i b ỏ m ộ t cách đơn gi ả n, các mã token khác đư ợ c tr ừ u tư ợ ng hóa v ớ i mã token “type” c ủ a nó . Ví d ụ : m ọ i s ố th ậ p l ụ c phân đư ợ c thay th ế b ằ ng H và m ọ i ký t ự b ằ ng ch ữ L. Vi ệ c so sánh th ự c t ế các t ệ p sau khi đc mã hóa đư ợ c th ự c hi ệ n b ằ ng cách s ử d ụ ng ti ệ n ích Unix / Linux diff. Đi ể m s ố đư ợ c tính t ừ t ỷ l ệ gi ữ a s ố dòng mà chúng khác nhau và t ổ ng s ố dòng trong hai t ệ p đư ợ c so sánh sau khi mã hóa. Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 6 Các k ế t qu ả đư ợ c trình bày thông qua t ệ p suspects.nf có m ộ t s ố dòng theo c ấ u trúc sau đây: “echo M1 S1 S2 M2 U/S && edit File 1 && edit File 2 ” . Trong đó, M1 và M2 các giá tr ị bi ể u th ị t ỷ l ệ ph ầ n trăm trùng kh ớ p, S1 và S2 cho chúng ta kích thư ớ c c ủ a các k ế t qu ả trùng nhau . Plaggie Plagg ie [9, 17] l à m ộ t h ệ th ố ng phát hi ệ n sao chép cho các chương trình đư ợ c vi ế t b ằ ng Java. Nó đư ợ c phát tri ể n vào năm 2002 b ở i Ahtiainen et al. t ạ i Đ ạ i h ọ c Công ngh ệ Helsinki . Nó là m ộ t ứ ng d ụ ng command line Java , không ph ả i là web - app. H ệ th ố ng chu ẩ n hóa mã ngu ồ n thành chu ỗ i token, đ ể so sánh hai mã ngu ồ n thì h ệ th ố ng s ẽ so sánh 2 token đư ợ c chu ẩ n hóa t ừ 2 mã ngu ồ n đó s ử d ụ ng thu ậ t toán Greedy String Tiling đư ợ c gi ớ i thi ệ u b ở i Michael Wise . Khi so sánh hai chu ỗ i token A và B, m ụ c đích là tìm m ộ t t ậ p h ợ p các chu ỗ i con gi ố ng nhau và tho ả i mãn các quy t ắ c: B ấ t k ỳ mã token nào c ủ a A ch ỉ có th ể đư ợ c k h ớ p v ớ i chính xác m ộ t mã token t ừ B. Quy t ắ c này nghĩa là không th ể kh ớ p hoàn toàn các ph ầ n c ủ a văn b ả n ngu ồ n đã đư ợ c sao chép trong chương trình đ ạ o văn. ; C ác chu ỗ i con đư ợ c tìm th ấ y đ ộ c l ậ p v ớ i v ị trí c ủ a chúng trong chu ỗ i. Quy t ắ c này có nghĩa r ằ ng s ắ p x ế p l ạ i các ph ầ n c ủ a mã ngu ồ n là không có hi ệ u qu ả , v ẫ n phát hi ệ n ra s ự sao chép; Các k ế t h ợ p chu ỗ i con dài đư ợ c ưa tiên hơn các chu ỗ i ng ắ n, vì chúng đáng tin c ậ y hơn. Chu ỗ i ng ắ n gi ố ng nhau là nhi ề u kh ả năng là gi ả . Theo m ặ c đ ị nh, k ế t qu ả đư ợ c hi ể n th ị b ằ n g văn b ả n thu ầ n và đư ợ c lưu tr ữ ở đ ị nh d ạ ng HTML. K ế t qu ả bao g ồ m m ộ t b ả ng hi ể n th ị các s ố li ệ u th ố ng kê như phân ph ố i các giá tr ị tương t ự khác nhau, s ố lư ợ ng t ệ p đư ợ c g ử i, v.v. K ế t qu ả bao g ồ m m ộ t b ả ng có th ể s ắ p x ế p ch ứ a các k ế t qu ả hàng đ ầ u và 8 giá tr ị tương t ự khác nhau c ủ a chúng. T ừ vi ệ c phân tích m ộ t s ố h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n nêu trên em đưa ra k ế t qu ả so sánh như B ả ng 1.1. Các h ệ th ố ng nêu trên đ ề u còn t ồ n t ạ i m ộ t s ố h ạ n ch ế như: giao di ệ n h ệ th ố ng ti ệ n l ợ i, k ế t qu ả hi ể n th ị chưa đư ợ c rõ ràng, s ố lư ợ ng ngôn ng ữ l ậ p trình đư ợ c h ỗ tr ợ chưa nhi ề u, … Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 7 B ả ng 1 . 1 . B ả ng so sánh m ộ t s ố h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n hi ệ n nay SIM Marble Plaggie 1 - Supported languages 5 1 1 2 - Extendability + - - 3 - Presentation of results (1 - 5) 2 3 4 4.Usability 2 2 3 5 - Exclusion of template code - - + 6 - Exclusion of small files - + - 7 - Historical comparisons + + - Trong đó, “+”: có, “ - ”: không, và đ ố i v ớ i các tiêu chí 3 và 4 s ẽ đánh giá theo thang đi ể m t ừ 1 đ ế n 5, 1 nghĩa là “x ấ u” và 5 nghĩa là “r ấ t t ố t”. Do đó em đ ề xu ấ t đ ề tài “ Xây d ự ng h ệ th ố ng phát hi ệ n sao chép mã ngu ồ n ” cho phép phát hi ệ n sao chép mã ngu ồ n trên cơ s ở áp d ụ ng các thu ậ t toán như thu ậ t toán Rabin - Karp, thu ậ t toán Winnowing giúp ngư ờ i dùng thu ậ n ti ệ n, d ễ dàng và rõ ràng hơn. 1.3. K ế t chương Chương này cung cấp cho người đọc cái nhìn tổng quan về vấn đề sao chép mã nguồn, các phương pháp phát hiện sao chép mã nguồn và các hệ thống phát hiện sao chép mã nguồn hiện nay. Xây d ự ng h ệ th ố n g phát hi ệ n sao chép mã ngu ồ n SVTH : Hu ỳ nh Th ị Di ệ u Trâm GVHD : ThS. Phan Chí Tùng 8 CHƯƠNG 2 XÂY D Ự NG MÔ HÌNH PH Á T HI Ệ N SAO CHÉP MÃ NGU Ồ N 2.1. Mô hình phát hi ệ n sao chép mã ngu ồ n Mô hình phát hi ệ n sao chép mã ngu ồ n g ồ m 10 giai đo ạ n đư ợ c mô t ả như hình 2.1. Trong đó: - Input là các file mã ngu ồ n mu ố n so sánh; - Pre - processing là quá trình ti ề n x ử lý, lo ạ i b ỏ các thành ph ầ n không quan tr ọ ng mà không ả nh hư ở ng đ ế n c ấ u trúc mã ngu ồ n: các kho ả ng tr ắ ng, t ấ t c ả comment, import, using, … - Tokenization là quá trình chu ẩ n hóa mã ngu ồ n sau khi đã đư ợ c ti ề n x ử lý thành chu ỗ i token; - KGram là quá trình t ạ o ra các k - gram t ừ chu ỗ i token; - Hashing là quá trình tính các giá tr ị hash t ừ các k - gram t ạ o ra; - B uild Windows là quá trình xây d ự ng c ử a s ổ t ừ hash c ủ a k - gram đã có; - Select Fingerprints là quá trình ch ọ n ra b ộ d ấ u vân tay t ừ c ác c ử a s ổ đã xây d ự ng trư ớ c đó; - Compare Fingerprints là quá trình so sánh các b ộ d ấ u vân tay c ủ a các t ệ p, so sánh t ừ ng c ặ p b ộ d ấ u vân tay v ớ i nhau, m ỗ i hash c ủ a b ộ này đư ợ c so sánh v ớ i t ấ t c ả hash c ủ a b ộ kia, quá trình đư ợ c mô t ả như hình 2.2; - Tính t ỉ l ệ p h ầ n trăm gi ố ng nhau: Sau khi tìm ra đư ợ c t ậ p h ợ p các hash gi ố ng nhau, ti ế n hành tính t ỉ l ệ ph ầ n trăm gi ố ng nhau theo công th ứ c như sau:

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

NHẬN XÉT CỦA NGƯỜI HƯỚNG DẪN

Trang 3

NHẬN XÉT CỦA NGƯỜI PHẢN BIỆN

Trang 4

Đ Ạ I HỌ C Đ À N Ẵ N G  T R Ư Ờ N G Đ Ạ I H Ọ C B Á C H K H O A

KHOA CÔNG NGHỆ THÔNG TIN

54, Nguyễn Lương Bằng, Hoà Khánh, Liên Chiểu, TP Đà Nẵng

Tel 84.511.3.736.949, Fax 84.511.842.771 - Website: itf.dut.edu.vn - E-mail: cntt@dut.udn.vn

PHIẾU DUYỆT ĐỒ ÁN TỐT NGHIỆP

I Phần dành cho Sinh viên

1 Họ và tên: Huỳnh Thị Diệu Trâm 2 Mã Sinh viên: 102150138 3 Lớp: 15T2

4 Tên đề tài: Xây dựng hệ thống phát hiện sao chép mã nguồn

5 Điện thoại: 0961213356 6 E-mail: htdtram97@gmail.com

7 Họ và tên GVHD: ThS Phan Chí Tùng

II Phần dành cho Hội đồng

1 Trình bày báo cáo theo đúng mẫu qui định của Khoa

2 Không có sự sao chép nội dung báo cáo và chương

trình đã có

3 Biên dịch mã nguồn và chạy được chương trình

4 Có kịch bản thực hiện với dữ liệu thử nghiệm

5 Kết quả thực hiện chương trình đúng theo báo cáo

6 Có sự đóng góp, phát triển của tác giả trong đồ án

Trang 5

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do - Hạnh phúc

NHẬN XÉT ĐỒ ÁN TỐT NGHIỆP

1 Thông tin chung:

1 Họ và tên sinh viên: Huỳnh Thị Diệu Trâm

3 Tên đề tài: Xây dựng hệ thống phát hiện sao chép mã nguồn

4 Người hướng dẫn: ThS Phan Chí Tùng Học hàm/ học vị: Thạc Sĩ

II Nhận xét, đánh giá đồ án tốt nghiệp:

1 Về tính cấp thiết, tính mới, khả năng ứng dụng của đề tài: (điểm tối đa là 2đ)

1 Điểm đánh giá: …… /10 (lấy đến 1 số lẻ thập phân)

2 Đề nghị: ☐ Được bảo vệ đồ án ☐ Bổ sung để bảo vệ ☐ Không được bảo vệ

Đà Nẵng, ngày tháng 12 năm 2019

Người hướng dẫn

Trang 6

TÓM TẮT

Tên đề tài: Xây dựng hệ thống phát hiện sao chép mã nguồn

Sinh viên thực hiện: Huỳnh Thị Diệu Trâm

Hiện nay, việc sinh viên nộp bài tập ở các lớp học phần thường xuyên sao chép mã nguồn với nhau, đều này khiến cho việc đánh giá năng lực của sinh viên không chính xác Để giải quyết vấn đề đó, em đã phát triển đề tài “Xây dựng hệ thống phát hiện sao chép mã nguồn” giúp giảm thiểu sự gian lận sao chép mã nguồn trong học tập để đánh giá đúng năng lực của mỗi sinh viên Hệ thống giúp tìm ra những bài tập của sinh viên khác có đoạn mã nguồn giống với sinh viên muốn so sánh, cho biết được tỉ lệ phần trăm

sự giống nhau và chỉ ra đoạn mã nguồn trùng nhau giữa hai bài tập của sinh viên, giúp giảng viên dễ so sánh và đối chiếu các bài tập về nhà của sinh viên đã thực hiện

Trang 7

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN

CỘNG HÒA XÃ HÔI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do - Hạnh phúc

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Họ tên sinh viên: Huỳnh Thị Diệu Trâm Số thẻ sinh viên: 102150138

Lớp:15T2 Khoa: Công nghệ thông tin Ngành: Công nghệ thông tin

1 Tên đề tài đồ án:

Xây dựng hệ thống phát hiện sao chép mã nguồn

2 Đề tài thuộc diện: ☐ Có ký kết thỏa thuận sở hữu trí tuệ đối với kết quả thực hiện

3 Các số liệu và dữ liệu ban đầu:

………

4 Nội dung các phần thuyết minh và tính toán:

Nội dung thuyết minh gồm:

Mở đầu: Phần mở đầu của luận văn giới thiệu tổng quan về đề tài, lý do chọn đề tài, đồng thời nêu lên mục đích và phương pháp thực hiện đề tài

Chương 1: Tổng quan về sao chép mã nguồn: Giới thiệu về sao chép mã nguồn, các phương pháp sử dụng và các hệ thống phát hiện sao chép mã nguồn

Chương 2: Xây dựng mô hình phát hiện sao chép mã nguồn: Trình bày các thuật toán, cơ sở lý thuyết để áp dụng xây dựng mô hình

Chương 3: Xây dựng hệ thống phát hiện sao chép mã nguồn: Trình bày công nghệ được sử dụng trong hệ thống, hồ sơ phân tích và hồ sơ thiết kế trong xây dựng hệ thống

và luồng hoạt động của hệ thống

Chương 4: Triển khai và đánh giá: Mô tả cài đặt, vận hành hệ thống và đánh giá kết quả đạt được

Kết luận và hướng phát triển : Phần kết luận của luận văn, nhấn mạnh vấn đề đã được giải quyết, cũng như vấn đề chưa được giải quyết và hướng phát triển

5 Các bản vẽ, đồ thị ( ghi rõ các loại và kích thước bản vẽ ):

………

6 Họ tên người hướng dẫn: ThS Phan Chí Tùng

7 Ngày giao nhiệm vụ đồ án: …… /……./2019

8 Ngày hoàn thành đồ án: …… /……./2019

Đà Nẵng, ngày tháng 12 năm 2019

Trưởng Bộ môn Công nghệ phần mềm Người hướng dẫn

Trang 8

i

LỜI NÓI ĐẦU

Trước hết, em xin bày tỏ tình cảm và lòng biết ơn của em tới thầy giáo Ths Phan Chí Tùng Người đã từng bước hướng dẫn, giúp đỡ em trong quá trình thực hiện đồ án tốt nghiệp của mình

Em xin chân thành cảm ơn các thầy cô giáo Khoa Công nghệ thông tin của Trường Đại học Bách khoa – Đại học Đà Nẵng đã dìu dắt, dạy dỗ em cả về kiến thức chuyên môn và tinh thần học tập để em có được những kiến thức thực hiện đồ án tốt nghiệp của mình

Em xin chân thành cảm ơn ban giám hiệu nhà trường, các phòng ban đã giúp

đỡ tạo điều kiện tốt nhất cho em trong suốt thời gian học tập tại trường

Tuy có nhiều cố gắng trong quá trình học tập, cũng như trong quá trình làm

đồ án tốt nghiệp không thể tránh khỏi những thiếu sót, em rất mong được sự góp ý quý báu của tất cả các thầy cô giáo cũng như tất cả các bạn để kết quả của em được hoàn thiện hơn

Một lần nữa em xin chân thành cảm ơn tất cảm mọi người đã giúp em hoàn thiện đồ án này

Đà Nẵng, ngày 20 tháng 12 năm 2019

Huỳnh Thị Diệu Trâm

Trang 9

ii

CAM ĐOAN

Tôi xin cam đoan:

1 Nội dung trong đồ án này là do em thực hiện dưới sự hướng dẫn trực tiếp của Ths Phan Chí Tùng

2 Các tham khảo dùng trong đồ án đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố

3 Nếu có những sao chép không hợp lệ, vi phạm, em xin chịu hoàn toàn trách nhiệm

Sinh viên thực hiện

Huỳnh Thị Diệu Trâm

Trang 10

iii

MỤC LỤC TÓM TẮT

NHIỆM VỤ ĐỒ ÁN

LỜI NÓI ĐẦU i

CAM ĐOAN ii

MỤC LỤC iii

DANH SÁCH BẢNG v

DANH SÁCH HÌNH ẢNH vi

DANH SÁCH TỪ VIẾT TẮT vii

MỞ ĐẦU 1

CHƯƠNG 1 TỔNG QUAN VỀ SAO CHÉP MÃ NGUỒN 3

1.1 Khái niệm 3

1.2 Các phương pháp và hệ thống phát hiện sao chép mã nguồn 3

1.2.1 Phương pháp phát hiện sao chép mã nguồn 3

1.2.2 Hệ thống phát hiện sao chép mã nguồn 4

1.3 Kết chương 7

CHƯƠNG 2 XÂY DỰNG MÔ HÌNH PHÁT HIỆN SAO CHÉP MÃ NGUỒN 8 2.1 Mô hình phát hiện sao chép mã nguồn 8

2.2 Các giai đoạn của mô hình 10

2.2.1 Tokenization 10

2.2.2 KGram và Hashing 11

2.2.3 Build Windows và Select Fingerprints 13

2.3 Kết chương 15

CHƯƠNG 3 XÂY DỰNG HỆ THỐNG PHÁT HIỆN SAO CHÉP MÃ NGUỒN 16

3.1 Công nghệ sử dụng 16

3.1.1 Tổng quan về NET 16

3.1.2 Mô hình MVC (Mode – View - Controller) 19

3.1.3 Tổng quan về ASP NET MVC 20

Trang 11

iv

3.1.4 Tổng quan về Entity Framework 21

3.2 Phân tích thiết kế hệ thống 23

3.2.1 Phân tích nghiệp vụ hệ thống 23

3.2.2 Sơ đồ phân rã chức năng 23

3.2.3 Biểu đồ ca sử dụng 24

3.2.4 Biểu đồ hoạt động 28

3.3 Thiết kế hệ thống 29

3.3.1 Biểu đồ lớp 29

3.3.2 Biểu đồ tuần tự 30

3.3.3 Thiết kế cơ sở dữ liệu 31

3.4 Kết chương 34

CHƯƠNG 4 TRIỂN KHAI VÀ ĐÁNH GIÁ 35

4.1 Yêu cầu cấu hình máy chủ 35

4.2 Triển khai hệ thống 35

4.3 Kết chương 37

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 38

1 Kết quả đạt được 38

2 Hướng phát triển 38

TÀI LIỆU THAM KHẢO 39

Trang 12

v

DANH SÁCH BẢNG

Bảng 1.1 Bảng so sánh một số hệ thống phát hiện sao chép mã nguồn hiện nay 7

Bảng 3.1 Ca sử dụng đăng nhập 25

Bảng 3.2 Ca sử dụng xem danh sách bài tập của sinh viên 25

Bảng 3.3 Ca sử dụng tìm kiếm bài tập của sinh viên 26

Bảng 3.4 Ca sử dụng xem danh sách bài tập của sinh viên có đoạn mã trùng 26

Bảng 3.5 Ca sử dụng xem chi tiết từng cặp bài tập giống nhau 27

Bảng 3.6 Mô tả bảng HocPhan 31

Bảng 3.7 Mô tả bảng LopHocPhan 32

Bảng 3.8 Mô tả bảng ThongTin 32

Bảng 3.9 Mô tả bảng SinhVien 33

Bảng 3.10 Mô tả bảng SinhVienTrongLop 33

Bảng 3.11 Mô tả bảng BaiTap 33

Bảng 3.12 Mô tả bảng BaiTapCuaSinhVien 33

Trang 13

vi

DANH SÁCH HÌNH ẢNH

Hình 1.1 Sơ đồ khối của hệ thống SIM 5

Hình 2.1 Mô hình tổng quan của phương pháp phát hiện sao chép mã nguồn 9

Hình 2.2 So sánh dấu vân tay 9

Hình 2.3 Ví dụ về dữ liệu đầu vào 10

Hình 2.4 Dữ liệu sau khi đã tiền xử lý 11

Hình 2.5.Các bước của thuật toán Winnowing 14

Hình 3.1 Kiến trúc NET Framework 17

Hình 3.2 Thành phần cơ bản của IDE 19

Hình 3.3 Mô hình MVC 20

Hình 3.4 Mô hình Entity Framework 22

Hình 3.5 Sơ đồ phân rã chức năng 24

Hình 3.6 Biểu đồ ca sử dụng các chức năng của hệ thống 24

Hình 3.7 Biểu đồ hoạt động chức năng quản lý bài tập của sinh viên 28

Hình 3.8 Biểu đồ các lớp phục vụ chức năng quản lý bài tập của sinh viên 29

Hình 3.9 Biểu đồ tuần tự của chức năng kiểm tra giống nhau của bài tập sinh viên 30

Hình 3.10 Thiết kế cơ sở dữ liệu 31

Hình 4.1 Giao diện của chức năng quản lý bài tập của sinh viên 35

Hình 4.2 Giao diện chức năng hiển thị danh sách các bài tập sinh viên có đoạn mã trùng 36

Hình 4.3 Giao diện chức năng hiển thị chi tiết sự giống nhau của hai đoạn mã nguồn 36

Hình 4.4 Giao diện chức năng hiển thị chi tiết sự giống nhau của hai đoạn mã nguồn 37

Hình 4.5 Giao diện chức năng hiển thị chi tiết sự giống nhau của hai mã nguồn 37

Trang 14

vii

DANH SÁCH TỪ VIẾT TẮT

Trang 15

Xây dựng hệ thống phát hiện sao chép mã nguồn

MỞ ĐẦU

1 Tổng quan về đề tài

Việc tái sử dụng lại các đoạn mã nguồn bằng cách sao chép nguyên vẹn hoặc có

sự thay đổi nhỏ trong mã nguồn là một hoạt động phổ biến trong ngành công nghiệp phần mềm hiện này Kết quả là các hệ thống phần mềm thường chứa các đoạn mã nguồn giống nhau gọi là sao chép mã nguồn Sao chép mã nguồn có thể hữu ích trong một số trường hợp, tuy nhiên nó lại có thể kéo theo hậu quả lớn trong quá trình bảo trì và nâng cấp hệ thống phần mềm

Trong lĩnh vực học tập, tái sử dụng mã nguồn là hình thức phổ biến, tuy nhiên trong trường hợp cần kiểm tra, đánh giá thì việc tái sử dụng mã nguồn lại gây ra tác hại không nhỏ Sinh viên có thể sao chép mã nguồn từ một hoặc nhiều sinh viên khác và cố

ý thay đổi hoặc thêm vào những yếu tố không cần thiết vào mã nguồn làm mặc dù cấu trúc hoàn toàn giống nhau nhằm che dấu hành vi sao chép mã nguồn của mình Do đó

em đề xuất đề tài “Xây dựng hệ thống phát hiện sao chép mã nguồn”

2 Mục tiêu và ý nghĩa của đề tài

2.1 Mục đích

- Nghiên cứu, áp dụng thuật toán Rabin-Karp, thuật toán Winnowing để xây dựng

mô hình phát hiện sao chép mã nguồn;

- Phát triển hệ thống phát hiện sao chép mã nguồn trên cơ sở mô hình đề xuất sử dụng Model-View-Controller (MVC) cho phép tìm ra các đoạn mã nguồn giống nhau và chi tiết tỷ lệ phần trăm sao chép của các đoạn mã nguồn

2.2 Ý nghĩa

- Giúp giảm thiểu sự gian lận sao chép mã nguồn trong học tập để đánh giá đúng

năng lực của mỗi sinh viên

Trang 16

Xây dựng hệ thống phát hiện sao chép mã nguồn

Mở đầu

Chương 1: TỔNG QUAN VỀ SAO CHÉP MÃ NGUỒN

Chương 2: XÂY DỰNG MÔ HÌNH PHÁT HIỆN SAO CHÉP MÃ NGUỒN

Chương 3: XÂY DỰNG HỆ THỐNG PHÁT HIỆN SAO CHÉP MÃ NGUỒN

Chương 4: TRIỂN KHAI VÀ ĐÁNH GIÁ

Kết luận và hướng phát triển

Trang 17

Xây dựng hệ thống phát hiện sao chép mã nguồn

1.1 Khái niệm

Sao chép mã nguồn được hiểu là sự sao chép mà không có một sự thay đổi nào hoặc có sự thay đổi nhưng rất nhỏ và không ảnh hưởng gì đến cấu trúc mã nguồn [1] Theo [2-6], sửa đổi mã nguồn có thể được phân thành hai loại chính: sửa đổi từ vựng và sửa đổi cấu trúc

Sửa đổi từ vựng thường không yêu cầu bất kỳ kiến thức và kỹ năng lập trình Ở hầu hết các trường hợp, loại sửa đổi này có thể dễ dàng được phát hiện và bỏ qua Ví dụ điển hình của sửa đổi từ vựng là: Sửa đổi định dạng của mã nguồn: các trường hợp như chèn hoặc xóa các dòng trống, các ngắt dòng bổ sung, các khoảng trắng hay các tab; bổ sung, sửa đổi hoặc xóa các comment; đổi tên định danh: bao gồm thay đổi tên của các lớp, phương thức và biến; tách hoặc hợp nhất các khai báo biến: một số định danh có thể được kết hợp trong cùng một khai báo biến nếu các biến giống nhau kiểu dữ liệu; bổ sung, sửa đổi hoặc xóa các access modifiers; sửa đổi các giá trị hằng số

Không giống như sửa đổi từ vựng, sửa đổi cấu trúc đòi hỏi mức độ cao hơn kiến thức và kỹ năng lập trình Loại sửa đổi này làm cho phát hiện rất khó khăn Ví dụ điển hình của sửa đổi cấu trúc là: Thay đổi thứ tự các biến trong các câu lệnh; thay đổi thứ tự của các câu lệnh trong các hàm; sắp xếp lại các hàm; bổ sung hoặc loại bỏ các câu lệnh, các phương thức không bao giờ được gọi hoặc các biến thừa không bao giờ được sử dụng; sửa đổi cấu trúc điều kiện; thay đổi kiểu dữ liệu; sửa đổi, thêm các biến tạm thời

và các biểu thức con

1.2 Các phương pháp và hệ thống phát hiện sao chép mã nguồn

1.2.1 Phương pháp phát hiện sao chép mã nguồn

Hiện nay, các phương pháp phát hiện sao chép mã nguồn đang được sử dụng phổ biến [6, 13] là: Text-based, Token-based, Tree-based, PDG-based (PDG – Program Dependency Graph), Metrics-based, Hybrid-based:

- Text-based: Là cách tiếp cận dựa trên việc so khớp một cách chính xác các chuỗi trong mã nguồn, với phương pháp này thì chỉ hiệu quả trong việc phát hiện hai mã nguồn có giống nhau toàn bộ hay không, nếu người sao chép chỉ cần sửa đổi một chút trong đoạn chương trình mình vừa sao chép thì sẽ không

bị hệ thống phát hiện ra;

Trang 18

Xây dựng hệ thống phát hiện sao chép mã nguồn

- Token-based: Trong phương pháp này mã nguồn được chuẩn hóa và biểu diễn thành một chuỗi token, và sử dụng thuật toán so sánh chuỗi để tìm đoạn mã trùng lặp Điều này loại bỏ được các trường hợp như thêm, sửa, xóa khoảng trắng, comment, tên định danh, …làm cho hệ thống chính xác hơn so với phương pháp text-based;

- Tree-based: Toàn bộ cơ sở mã nguồn được phân tích cú pháp để xây dựng thành cây phân tích cú pháp (AST) Các đoạn mã được biểu diễn dưới dạng cây con của cây phân tích hoặc AST, sử dụng thuật toán để so sánh các cây con này Phương pháp này cho phép phát hiện sự tương đồng ở mức cao hơn

Ví dụ như so sánh cây cú pháp có thể bình thường hóa các câu lệnh điều kiện hoặc là phát hiện các cấu trúc tương đương giống nhau;

- PDG-based: Tạo ra các biểu đồ phụ thuộc chương trình(PDGs) từ mã nguồn Các đoạn mã là các sơ đồ con của các PDG này, sử dụng thuật toán để so sánh các sơ đồ con này PDG nắm bắt luồng điều khiển thực tế trong một chương trình và cho phép xác định vị trí tương đương ở mức cao hơn nhiều, với chi phí lớn hơn về độ phức tạp và thời gian tính toán;

- Metrics-based: Phương pháp này dùng để đánh giá các số liệu mã nguồn đã

sử dụng, ví dụ: số lượng biến đã sử dụng, vòng lặp, điều kiện, toán tử, …và sau đó so sánh dựa trên các số liệu đó;

- Hybrid-based: là sự kết hợp một số phương pháp đã nêu trên Ví dụ: có thể kết hợp khả năng phát hiện của cây phân tích với tốc độ được cung cấp bởi cây hậu tố (suffix trees) một loại cấu trúc dữ liệu khớp chuỗi

1.2.2 Hệ thống phát hiện sao chép mã nguồn

Trong thực tế, các hệ thống phát hiện sao chép mã nguồn phổ biến hiện nay đều ứng dụng những phương pháp đã nêu trên, có thể liệt kê: SIM, Marble, Plaggie, …

SIM

SIM [7, 15] là hệ thống kiểm tra sự tương tự từ vựng trong các văn bản ngôn ngữ

tự nhiên và trong các chương trình được viết bằng C, C ++, Java, Pascal, Modula-2, Miranda, Lisp và mã trình biên dịch mã 8086 Nó được phát triển vào năm 1989 bởi Dick Grune tại Đại học VU Amsterdam

Nó được sử dụng để phát hiện mã trùng lặp trong các dự án phần mềm lớn, trong văn bản chương trình, trong các tập lệnh shell và trong tài liệu; phát hiện đạo văn trong các dự án (phần mềm), giáo dục

SIM là hệ thống có giao diện bằng command line

Trang 19

Xây dựng hệ thống phát hiện sao chép mã nguồn

Hình 1.1 Sơ đồ khối của hệ thống SIM Quá trình Sim sử dụng để phát hiện sự tương đồng là mã hóa mã nguồn trước, sau đó để xây dựng bảng tham chiếu có thể được sử dụng để phát hiện các kết quả khớp tốt nhất giữa các tệp được gửi và văn bản mà cần được so sánh

Hệ thống SIM sử dụng thuật toán String alignment để so sánh hai chương trình

Marble

Marble [8, 16] là một công cụ phát hiện sao chép mã nguồn hướng cấu trúc đơn giản, dễ bảo trì cho chương trình được viết bằng Java, C#, Perl, PHP and XSLT, được phát triển vào năm 2002 tại Đại học Utrecht

Hệ thống sử dụng cách tiếp cận structure-based để so sánh các bài nộp Marble chuẩn hóa mã để tạo mã token độc lập với ngôn ngữ, để loại bỏ các chi tiết khỏi các tệp

mà sinh viên dễ dàng thay đổi: phân tích từ vựng được thực hiện (được thực hiện trong Perl bằng cách sử dụng các biểu thức chính quy) giữ lại các từ khóa (như class, for) và tên class và tên phương thức được thay thế thành từ đơn giản hơn(như String, System, toString).Comments, khoảng trắng thừa, biến hằng và khai báo inport được loại bỏ một cách đơn giản, các mã token khác được trừu tượng hóa với mã token “type” của nó Ví dụ: mọi số thập lục phân được thay thế bằng H và mọi ký tự bằng chữ L Việc so sánh thực tế các tệp sau khi đc mã hóa được thực hiện bằng cách sử dụng tiện ích Unix / Linux diff Điểm số được tính từ tỷ lệ giữa số dòng mà chúng khác nhau và tổng số dòng trong hai tệp được so sánh sau khi mã hóa

Trang 20

Xây dựng hệ thống phát hiện sao chép mã nguồn

Các kết quả được trình bày thông qua tệp suspects.nf có một số dòng theo cấu trúc sau đây: “echo M1 S1 S2 M2 U/S && edit File 1 && edit File 2 ” Trong đó, M1

và M2 các giá trị biểu thị tỷ lệ phần trăm trùng khớp, S1 và S2 cho chúng ta kích thước của các kết quả trùng nhau

Plaggie

Plaggie [9, 17] là một hệ thống phát hiện sao chép cho các chương trình được viết bằng Java Nó được phát triển vào năm 2002 bởi Ahtiainen et al tại Đại học Công nghệ Helsinki Nó là một ứng dụng command line Java, không phải là web-app

Hệ thống chuẩn hóa mã nguồn thành chuỗi token, để so sánh hai mã nguồn thì hệ thống sẽ so sánh 2 token được chuẩn hóa từ 2 mã nguồn đó sử dụng thuật toán Greedy String Tiling được giới thiệu bởi Michael Wise Khi so sánh hai chuỗi token A và B, mục đích là tìm một tập hợp các chuỗi con giống nhau và thoải mãn các quy tắc: Bất

kỳ mã token nào của A chỉ có thể được khớp với chính xác một mã token từ B Quy tắc này nghĩa là không thể khớp hoàn toàn các phần của văn bản nguồn đã được sao chép trong chương trình đạo văn.; Các chuỗi con được tìm thấy độc lập với vị trí của chúng trong chuỗi Quy tắc này có nghĩa rằng sắp xếp lại các phần của mã nguồn là không có hiệu quả, vẫn phát hiện ra sự sao chép; Các kết hợp chuỗi con dài được ưa tiên hơn các chuỗi ngắn, vì chúng đáng tin cậy hơn Chuỗi ngắn giống nhau là nhiều khả năng là giả

Theo mặc định, kết quả được hiển thị bằng văn bản thuần và được lưu trữ ở định dạng HTML Kết quả bao gồm một bảng hiển thị các số liệu thống kê như phân phối các giá trị tương tự khác nhau, số lượng tệp được gửi, v.v Kết quả bao gồm một bảng

có thể sắp xếp chứa các kết quả hàng đầu và 8 giá trị tương tự khác nhau của chúng

Từ việc phân tích một số hệ thống phát hiện sao chép mã nguồn nêu trên em đưa

ra kết quả so sánh như Bảng 1.1 Các hệ thống nêu trên đều còn tồn tại một số hạn chế như: giao diện hệ thống tiện lợi, kết quả hiển thị chưa được rõ ràng, số lượng ngôn ngữ lập trình được hỗ trợ chưa nhiều, …

Trang 21

Xây dựng hệ thống phát hiện sao chép mã nguồn

Bảng 1.1 Bảng so sánh một số hệ thống phát hiện sao chép mã nguồn hiện nay

1.3 Kết chương

Chương này cung cấp cho người đọc cái nhìn tổng quan về vấn đề sao chép mã nguồn, các phương pháp phát hiện sao chép mã nguồn và các hệ thống phát hiện sao chép mã nguồn hiện nay

Trang 22

Xây dựng hệ thống phát hiện sao chép mã nguồn

MÃ NGUỒN

2.1 Mô hình phát hiện sao chép mã nguồn

Mô hình phát hiện sao chép mã nguồn gồm 10 giai đoạn được mô tả như hình 2.1 Trong đó:

- Input là các file mã nguồn muốn so sánh;

- Pre-processing là quá trình tiền xử lý, loại bỏ các thành phần không quan trọng mà không ảnh hưởng đến cấu trúc mã nguồn: các khoảng trắng, tất cả comment, import, using, …

- Tokenization là quá trình chuẩn hóa mã nguồn sau khi đã được tiền xử lý thành chuỗi token;

- KGram là quá trình tạo ra các k-gram từ chuỗi token;

- Hashing là quá trình tính các giá trị hash từ các k-gram tạo ra;

- Build Windows là quá trình xây dựng cửa sổ từ hash của k-gram đã có;

- Select Fingerprints là quá trình chọn ra bộ dấu vân tay từ các cửa sổ đã xây dựng trước đó;

- Compare Fingerprints là quá trình so sánh các bộ dấu vân tay của các tệp, so sánh từng cặp bộ dấu vân tay với nhau, mỗi hash của bộ này được so sánh với tất cả hash của bộ kia, quá trình được mô tả như hình 2.2;

- Tính tỉ lệ phần trăm giống nhau: Sau khi tìm ra được tập hợp các hash giống nhau, tiến hành tính tỉ lệ phần trăm giống nhau theo công thức như sau:

𝑆𝑖𝑚(𝑎) =Set (c)

Set (a)Trong đó:

Sim(a) : tỉ lệ phần trăm giống nhau của tài liệu a khi so sánh tài liệu của a và b

Set (c) : Tập hợp các giá trị hash trùng nhau phát hiện được

Set (a) : Tập hợp các giá trị hash của tài liệu a

- Output: Kết quả trả về sau khi xử lý xong

Trang 23

Xây dựng hệ thống phát hiện sao chép mã nguồn

Hình 2.1 Mô hình tổng quan của phương pháp phát hiện sao chép mã nguồn

Hình 2.2 So sánh dấu vân tay

Trang 24

Xây dựng hệ thống phát hiện sao chép mã nguồn

2.2 Các giai đoạn của mô hình

2.2.1 Tokenization

Tokenization: là quá trình biểu diễn mã nguồn thành một chuỗi token Mỗi token tương ứng với một đơn vị nhỏ nhất của ngôn ngữ lập trình và có ý nghĩa độc lập Các token được chọn theo cách mà chúng đặc trưng cho bản chất của một chương trình, rất khó thay đổi bởi một người sao chép mã nguồn Kỹ thuật này rất phổ biến và được nhiều người sử dụng trong các hệ thống phát hiện sao chép mã nguồn

Thuật toán Tokenization thay thế các thành phần khác nhau của ngôn ngữ lập trình thành các mã token tương ứng Ví dụ: Tất các kiểu dữ liệu số (byte, short, int, unsigned int, signed int, long, float, double,… ) được thay thế bằng <NUMERICTYPE> token, ngoài ra các giá trị của chúng được thay thế bằng <NUMERICVALUE> token; Tên định danh được thay thế bằng <IDENTIFIER> token; Tất cả kiểu dữ liệu kí tự được thay thế bằng <STRINGTYPE> token và các giá trị của chúng được thay thế bằng

<STRINGVALUE > token; Tương tự, các toán tử được thay thế bằng < OPERATOR>, vòng lặp thay thế bằng < CYCLE >,…

Ví dụ:

Hình 2.3 Ví dụ về dữ liệu đầu vào

Trang 25

Xây dựng hệ thống phát hiện sao chép mã nguồn

Hình 2.4 Dữ liệu sau khi đã tiền xử lý

Dữ liệu được mã hóa thành chuỗi tokenization:

NUMERICTYPEFUNCTIONNUMERICTYPEIDENTIFIERNUMERICVALUENUMERICTYPEIDENTIFIERNUMERICVALUENUMERICTYPEIDENTIFIERNUMERICVALUENUMERICTYPEIDENTIFIEROPERATORCOUTRETURN

Ví dụ cho một chuỗi có độ dài như sau:

Sử dụng phương pháp k-gram với k = 5, ta có các 5-gram của chuỗi trên bao gồm:

Số k-gram của một chuỗi được tính như sau: N= l-k+1

Trong đó:

- N là số k-gram của một chuỗi cho trước;

- l là độ dài của chuỗi ban đầu;

- k là độ dài của một chuỗi –gram (k<l)

Như ví dụ trên, số k-gram của chuỗi Helloworld là 6 (=10-5+1)

Trang 26

Xây dựng hệ thống phát hiện sao chép mã nguồn

Để xử lý nhiễu có thể thực hiện bằng cách sử dụng k-gram, được sử dụng cho các thuật toán phát hiện sao chép dựa trên dấu vân tay Bởi vì, k-gram tồn tại một ngưỡng

k Trong đó, độ dài của tất cả chuỗi trùng nhau không nhỏ hơn k và tất cả chuỗi trùng nhau nhỏ hơn k thường được bỏ qua vì các chuỗi này có thể là từ khóa, tên biến, định danh, …

Thuật toán Karp-Rabin

Mục đích của thuật toán Rabin-Karp để so khớp chuỗi con nhanh, được tạo bởi Michael O Rabin và Richard M Karp năm 1987, là một trong những thuật toán lấy dấu vân tay đầu tiên sử dụng kgrams Thuật toán cố gắng tìm ra các lần xuất hiện của chuỗi str1 với độ dài k trong chuỗi str2 (độ dài của chuỗi str2 phải lớn hơn k) Do đó, thuật toán lấy được tất cả các k-gram, sau đó tính các giá trị hash từ chuỗi str1 và str2 Tiếp theo, so sánh tất các các giá trị hash của chuỗi str1 với chuỗi str2 Thuật toán Rabin-Karp sử dụng các hàm hash và kĩ thuật rolling hash

Hàm hash thực chất là một hàm ánh xạ từ một thứ tới một giá trị cụ thể Mục đích của hàm hash là lấy một phần dữ liệu lớn và có thể được biểu diễn bằng một hình thức nhỏ hơn Mục đích của hash là xác định duy nhất một chuỗi với một số Sau đó, có thể

so sánh số thay vì so sánh chuỗi

Rolling hash cho phép thuật toán tính toán giá trị hash mà không phải kiểm tra lại toàn bộ chuỗi Bởi vì, tính tất cả giá trị hash của chuỗi với độ dài k sẽ rất lớn nếu giá trị k lớn vì tất cả các chuỗi con có kích thước k của chuỗi str1 cần phải được tính giá trị hash, nên kĩ thuật Rolling hash được đề xuất Cụ thể, thuật toán cho phép tính hash thứ i+1 của k-gram được tính toán nhanh chóng từ hash thứ i của k-gram

Công thức tính hash H (c1…ck) của một k-gram c1…ck là:

Trong đó:

- b là hằng số;

- c1…ck là các kí tự đầu vào;

- k là số lượng kí tự có trong chuỗi (độ dài của chuỗi)

Công thức tính hash của k-gram c2…ck+1 là:

Trang 27

Xây dựng hệ thống phát hiện sao chép mã nguồn

Vì bk-1 là hằng số, H(c2 ck + 1) chỉ có thể được tính từ H (c1 ck) chỉ với

hai phép cộng và hai phép nhân Một điểm yếu của thuật toán này là các giá trị của ci

thường là các số nguyên nhỏ và do đó, phép cộng chỉ ảnh hưởng đến thứ tự thấp bit của hàm hash Hàm hash tốt hơn sẽ có ci ảnh hưởng đến tất cả các bit của hàm hash Vấn đề này có thể được khắc phục bằng hai bước Đầu tiên, nhân toàn bộ hash với b và thứ hai,sau đó, hoán đổi thứ tự phép nhân với phép cộng Công thức sẽ là:

Ví dụ: Sử dụng kĩ thuật rolling hash của thuật toán Rabin-Karp để tính hash của bảng chữ cái Do đó, b = 26, chọn k = 3, c là vị trí đại diện thứ tự của kí tự trong bảng chữ cái, ví dụ: đối với “a”: c = 1 và với “z” thì c = 26

Tính hash của “abc” và sử dụng kết quả để tìm giá trị hash của “bcd”:

2.2.3 Build Windows và Select Fingerprints

Xây dựng cửa sổ và chọn dấu vân tay từ các cửa sổ bằng cách áp dụng thuật toán Winnowing [18] để kiểm tra sự giống nhau của từ trong các tài liệu bằng cách sử dụng dấu vân tay và kỹ thuật hash, chọn dấu vân tay cho mỗi tài liệu và so sánh chúng Thuật toán giảm thiểu ảnh hưởng của việc loại bỏ, thêm, đảo các bộ phận

Thuật toán sử dụng một kích thước cửa sổ nhất định và mỗi cửa sổ có một dấu vân tay sẽ được sử dụng để kiểm tra sự giống nhau của các từ trên các tài liệu

Mục đích của thuật toán là đưa ra một tập hợp các tài liệu và tìm ra các chuỗi con trùng khớp thỏa mãn:

- Nếu có một chuỗi con phù hợp với ít nhất với ngưỡng đảm bảo t thì kết quả này được phát hiện;

- Không phát hiện bất kì chuỗi trùng khớp nào ngắn hơn ngưỡng tiếng ồn k (t,

k do người dùng chọn, k ≤ t)

Ngày đăng: 25/02/2024, 13:01

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN