Tải bản đầy đủ (.pdf) (54 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.04 MB, 54 trang )

ĐẠ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 ẴNG  T RƯ ỜNG Đ ẠI HỌC BÁC H K HO 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:

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:

7. Họ và tên GVHD: ThS. Phan Chí Tùng
II. Phần dành cho Hội đồng
Nội dung đánh giá

STT

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

Cán bộ duyệt kiểm tra

(Ký và ghi họ tên)

(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ẵng, 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
tố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


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

Sinh viên thực hiện

Huỳnh Thị Diệu Trâm

i


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

ii


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
NGUỒN

XÂY DỰNG HỆ THỐNG PHÁT HIỆN SAO CHÉP MÃ
........................................................................................................ 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
iii



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

iv


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

v


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 tố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

vi


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

vii


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.
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:
SVTH: Huỳnh Thị Diệu Trâm

GVHD: ThS. Phan Chí Tùng

1



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.

SVTH: Huỳnh Thị Diệu Trâm

GVHD: ThS. Phan Chí Tùng

2


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

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 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 tồ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;

SVTH: Huỳnh Thị Diệu Trâm


GVHD: ThS. Phan Chí Tùng

3


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 tố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, tố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.
SVTH: Huỳnh Thị Diệu Trâm

GVHD: ThS. Phan Chí Tùng


4


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.
SVTH: Huỳnh Thị Diệu Trâm

GVHD: ThS. Phan Chí Tùng

5



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 tố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 hồ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, …


SVTH: Huỳnh Thị Diệu Trâm

GVHD: ThS. Phan Chí Tùng

6



×