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

Xây dựng bộ dữ liệu và dự đoán mã xấu sử dụng học máy (tt)

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 (950.56 KB, 26 trang )

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

PHAN DUY HÙNG

XÂY DỰNG BỘ DỮ LIỆU VÀ DỰ ĐOÁN MÃ XẤU
SỬ DỤNG HỌC MÁY

Chun ngành : Khoa học máy tính
Mã số
: 8480101

TĨM TẮT LUẬN VĂN THẠC SĨ
KHOA HỌC MÁY TÍNH

ĐÀ NẴNG - NĂM 2022

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI
TRƯỜNG ĐẠI HỌC BÁCH KHOA

Người hướng dẫn khoa học: TS. LÊ THỊ MỸ HẠNH

Phản biện 1: TS. Lê Trần Đức
Phản biện 2: TS. Lâm Tùng Giang

Luận văn đã được bảo vệ trước Hội đồng chấm Luận văn tốt


nghiệp thạc sĩ ngành Khoa học máy tính họp tại Trường Đại học
Bách khoa vào ngày 22 tháng 7 năm 2021

Có thể tìm hiểu luận văn tại:
- Trung tâm học liệu và TT tại trường Đại Học Bách khoa
- Thư viện Khoa Công Nghệ Thông Tin, Trường ĐH Bách khoa –
ĐHĐN

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


1

MỞ ĐẦU
1. Tính cấp thiết và lý do chọn đề tài
Với sự phát triển công nghệ thông tin ngày một mạnh mẽ, số
lượng phần mềm ngày càng nhiều. Các dự án phát triển phần mềm
đang ngày càng trở nên lớn, phức tạp, tốn kém và ngày càng khó dự
đốn. Các nhà phát triển phải làm việc năng suất hơn để đáp ứng cho
nhu cầu cao về số lượng cũng như chất lượng phần mềm. Một vấn đề
mà các nhà phát triển cần quan tâm là khả năng rủi ro gia tăng khi độ
phức tạp của phần mềm gia tăng. Điều này ảnh hưởng đến chi phí
hoặc tiến độ của các dự án phát triển phần mềm.
Việc dự đoán được các khiếm khuyết trong phần mềm mang
lại một ý nghĩa rất lớn. Điều đó có thể làm giảm chi phí và cải thiện
thời gian và nâng cao chất lượng của các dự án, làm giảm nguy cơ
phá vỡ kế hoạch, chiến lượng của doanh nghiệp. Một trong những
khiếm khuyết của phần mềm mà chúng ta có thể dự đốn được là các

mã xấu.
Trước đây, việc dự đốn mã xấu dựa hồn toàn vào kiến thức,
kinh nghiệm của các nhà phát triển phần mềm. Sau đó họ đưa ra các
tập quy tắc để xác định mã xấu. Cách làm này khá chủ quan và tốn
nhiều thời gian để thực hiện. Hiện nay, các nhà nghiên cứu trên thế
giới đang tiến đến việc sử dụng các kỹ thuật học máy để dự đoán và
dự đoán các mã xấu. Nhiều nghiên cứu gần đây đã chứng mình kết
quả đầy hứa hẹn của phương pháp sử dụng học máy để dự đoán mã
xấu dựa trên các độ đo của phần mềm. Một khó khăn trong việc sử
dụng phương pháp học máy là cần phải có bộ dữ liệu đủ lớn để thực
hiện huấn luyện các mơ hình. Tuy nhiên, theo hiểu biết và sự tìm
hiểu của tơi, cho đến nay vẫn chưa có nghiên cứu nào đáp ứng tốt bộ
dữ liệu về mã xấu.

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


2

Vì những lý do như trên, tơi đã chọn đề tài luận văn cao học:
Xây dựng bộ dữ liệu và dữ đoán mã xấu sử dụng học máy
2. Giới thiệu tổng quan đề tài
Code smell (mã xấu) có thể được định nghĩa theo nguyên tắc
sau: mã xấu là một số cấu trúc nhất định trong mã cho thấy sự vi
phạm các nguyên tắc thiết kế cơ bản và ảnh hưởng tiêu cực đến chất
lượng thiết kế. Các mã xấu thường không phải là lỗi hoặc lỗi. Chúng
không đúng về mặt kỹ thuật và khơng ngăn cản chương trình hoạt
động. Mã xấu đã được Fowler và cộng sự (1999) xác định một cách

khơng chính thức như các triệu chứng của các vấn đề có thể xảy ra
với mã hoặc thiết kế. Thay vào đó, đây là những vi phạm tuyệt đối
các nguyên tắc cơ bản của phần mềm làm giảm chất lượng của mã.
Chúng chỉ ra những điểm yếu trong thiết kế có thể làm chậm q
trình phát triển hoặc tăng nguy cơ lỗi hoặc hỏng hóc trong tương lai.
Hiện tại, có rất nhiều thuật tốn học máy có thể được sử dụng
để xác định mã xấu trong phần mềm. Năm 2009, Khomh và cộng sự
đã đề xuất sử dụng phương pháp Bayesian Belief Networks để dự
đoán mã xấu. Năm 2010, Hassaine và cộng sự đã thực nghiệm dự
đoán mã xấu dựa trên bộ dữ liệu của Khomh và cộng sự. Năm 2012,
Maiga và cộng sự đã giới thiệu phương pháp sử dụng Support Vector
Machine để dự đoán mã xấu. Năm 2013, Fontana và cộng sự đã trình
bày về việc dự đoán mã xấu bằng nhiều thuật toán học máy khác
nhau. Năm 2015, Amorim và cộng sự đã giới thiệu các thực nghiệm
sử dụng thuật toán Decision Tree để dự đoán mã xấu. Năm 2018,
Hadj-Kacem và Bouassida đã đề xuất một phương pháp kết hợp sử
dụng cả thuật tốn khơng giám sát và không giám sát để phát hiện
mã xấu. Dựa trên các kết quả của các nghiên cứu trên, tôi thực
nghiệm các thuật toán học máy khác để so sánh kết quả. Trong nội

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


3

dung nghiên cứu này, tôi tập trung vào các thuật toán học máy được
bao gồm như Linear Discriminant Analysis (LDA), k-NearestNeighbours (kNN), Multilayer Perceptron (MLP), Decision Tree
(DT), Support Vector Machine (SVM), Random Forest (RF).

Sau khi đã xây dựng được bộ dữ liệu với đúng kỳ vọng, tôi sẽ
nghiên cứu áp dụng và thử nghiệm một số các thuật toán học máy
trên bộ dữ liệu mới.
3. Mục tiêu và nội dung nghiên cứu
3.1. Mục tiêu
Mục tiêu chính của luận văn nghiên cứu về dự đoán mã xấu sử
dụng các thuật toán học máy. Mục tiêu cụ thể của luận văn là xây
dựng bộ dữ liệu cho bài toán dự đoán mã xấu và nghiên cứu các
thuật toán học máy áp dụng cho dự đốn mã xấu.
3.2. Nội dung nghiên cứu
Để hồn thành các mục tiêu của phân tích này, cần phải có sự
hiểu biết thấu đáo về vấn đề này. Điều này được thực hiện thơng qua
tìm hiểu một cách thấu đáo giữa lý thuyết và thực nghiệm. Nội dung
nghiên cứu bao gồm tất cả các vấn đề có liên quan, cụ thể:

-

Lý thuyết về mã xấu.
Phương pháp dự đoán mã xấu hiện tại.
Áp dụng học máy vào dự đoán mã xấu.

Bộ dữ liệu về mã xấu được sử dụng cho phương pháp máy
học.
4. Đối tượng và phạm vi nghiên cứu
4.1. Đối tượng nghiên cứu
Với mục tiêu đặt ra, luận văn sẽ tập trung nghiên cứu các nội
dung chính sau:

- Nghiên cứu về dự đoán mã xấu trong quá khứ và hiện tại


THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


4

- Dự đoán mã xấu dựa trên độ đo mã nguồn sử dụng các thuật
toán học máy
- Nghiên cứu các thuật toán học máy ứng dụng trong dự đoán
mã xấu
4.2. Phạm vi nghiên cứu
Với mục tiêu và đối tượng nghiên cứu đặt ra, phạm vi nghiên
cứu của luận văn như sau:
- Nghiên cứu các thuật toán học máy Linear Discriminant
Analysis, K-Nearest-Neighbours, Multilayer Perceptron,
Decision Tree, Support Vector Machine, Random Forest.
- Nghiên cứu các kỹ thuật tiền xử lý dữ liệu Balancing,
Normalization, Feature selection.
- Nghiên cứu các bộ dữ liệu mã xấu từ năm 2009 đến nay.
- Nghiên cứu công cụ đo PMD, iPlasma, inFusion.
- Nghiên cứu hai loại mã xấu là Class và Method.
5. Phương pháp nghiên cứu
5.1. Phương pháp lý thuyết
Nghiên cứu và tổng hợp các tài liệu liên quan về mã xấu và dự
đoán mã xấu sử dụng các kỹ thuật học máy, cũng như nghiên cứu,
phân tích các bộ dữ liệu về mã xấu và các công cụ phát hiện mã xấu
hiện nay.
5.2. Phương pháp thực nghiệm
Sử dụng một số công cụ như iPlasma, PMD, … để xây dựng

bộ dữ liệu về mã xấu dựa trên các dự án mã nguồn mở
Cài đặt và thử nghiệm hiệu quả của một số thuật toán học máy
trên bộ dữ liệu mới và bộ dữ liệu của Fontana.
6. Kết quả đạt được
6.1.
Về lý thuyết

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


5

Hiểu được khái niệm và tính chất cơ bản việc sử dụng các
thuật toán phục vụ chẩn đoán bằng phương pháp học máy.
Hiểu được phương pháp dự đoán mã xấu.
Đánh giá được chất lượng dự đốn mã xấu thơng qua các độ
đo.
6.2. Về thực nghiệm
Nghiên cứu và cải thiện được thuật toán dự đoán mã xấu.
Xây dựng một bộ dữ liệu mới lớn hơn, phù hợp cho việc áp
dụng các thuật toán học máy để dự đoán mã xấu.
Đo lường và đánh giá chất lượng của các thuật toán trên bộ dữ
liệu mới.
7. Ý nghĩa khoa học và thực tiễn
7.1. Ý nghĩa khoa học
- Áp dụng lý thuyết phân tích và dự đoán trong các lĩnh vực
của đời sống.
- Áp dụng phương pháp học máy để dự đoán mã xấu.

7.2. Ý nghĩa thực tiễn
- Đề xuất giải pháp nhằm cải thiện chất lượng chẩn đốn mã
xấu, góp phần giúp cho các nhà quản lý phát triển phần mềm giảm
thiểu nguồn lực, kiểm sốt tốt tiến trình, giảm thiểu rủi ro và tăng
tính khả thi cho các dự án.
- Giúp cho các chủ doanh nghiệp CNTT kiểm soát tốt nguồn
lực, giảm thiểu chỉ phí đầu tư, rút ngắn thời gian, đảm bảo tính cạnh
tranh và nâng cao hiệu quả kinh doanh nhằm đảm bảo phát triển bền
vững.
- Đóng góp kết quả nghiên cứu và thực nghiệm, giúp cải thiện
góc nhìn về khoa học phục vụ cho các nghiên cứu và phát triển các
ứng dụng trên nhiều lĩnh vực khác của đời sống – xã hội trong thời

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


6

gian tiếp theo.
8. Bố cục của luận văn
Ngoài phần mở đầu và kết luận, đề tài gồm có 4 chương:


Chương 1: Tổng quan về dự đoán mã xấu dựa trên học
máy




Chương 2: Xây dựng bộ dữ liệu mã xấu



Chương 3: Đánh giá các phương pháp học máy trong
dự đoán mã xấu



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

CHƯƠNG 1: TỔNG QUAN VỀ DỰ ĐOÁN MÃ XẤU DỰA
TRÊN HỌC MÁY
1.1 Tổng quan
1.1.1 Phát triền phần mềm
Hiện nay, phần mềm đã có những bước chuyển đổi hết sức
mạnh mẽ và hỗ trợ hầu hết cho tất cả các loại ngành nghề từ cơng
nghiệp, giải trí đến dịch vụ. Hầu như tất cả những cơng việc thực
hiện trên máy tính ngày nay đều thông qua các phần mềm chuyên
dụng.
1.1.2 Mã xấu
Một trong những cách để ngăn chặn lỗi phần mềm xảy ra là
phát hiện ra các mã xấu và loại bỏ nó trước khi nó gây ra các lỗi
phần mềm. Mã xấu là một phép ẩn dụ để mô tả các mẫu, đoạn mã
thường liên quan đến thiết kế tồi và lập trình tồi. Năm 1999, Martin
Fowler và Kent Beck đã định nghĩa về mã xấu trong các nghiên cứu
của họ. Martin Fowler cho rằng: "Mã xấu là dấu hiệu bề mặt thường
tương ứng với vấn đề sâu hơn trong hệ thống". Kent Beck định nghĩa
mã xấu như sau: "Mã xấu là một gợi ý rằng đã xảy ra lỗi ở đâu đó


THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


7

trong mã của bạn. Sử dụng mã xấu để theo dõi vấn đề". Trong nghiên
cứu của mình, cả hai ơng đều thống nhất mã xấu khơng phải là lỗi,
nó chỉ là một dấu hiệu cảnh báo lỗi có thể xảy ra. Nghiên cứu của
các ơng đã đặt nền móng cho sự phát triển trong việc xác định và
phát hiện ra mã xấu sau đó.
1.1.3 Các thuật tốn học máy
Hiện tại, có rất nhiều thuật tốn học máy có thể giải quyết các
vấn đề khác nhau. Một số trong số chúng có thể được sử dụng để xác
định mã xấu trong phần mềm. Trong bài báo này, tôi tập trung vào
các thuật toán học máy được bao gồm như Linear Discriminant
Analysis (LDA), k-Nearest-Neighbours (kNN), Multilayer
Perceptron (MLP), Decision Tree (DT), Support Vector Machine
(SVM), Random Forest (RF).
1.1.4 Mã xấu và học máy
Trong quá khứ và những năm gần đây, vấn đề phát hiện mã
xấu rất tích cực. Cộng đồng nghiên cứu đã đề xuất các kỹ thuật phát
hiện mã xấu khác nhau, có thể được chia thành hai loại chính.
Phương pháp đầu tiên bao gồm các kỹ thuật dựa trên quy tắc xác
định một số quy tắc phát hiện bằng cách sử dụng số liệu mã và một
số ngưỡng được áp dụng trên các số liệu đó để phân biệt giữa mã xấu
và mã tốt. Phương pháp thứ hai bao gồm các kỹ thuật dựa trên máy
học, áp dụng phương pháp học có giám sát để phát hiện mã xấu.
1.1.5 Mơ hình triển khai và phương pháp đo lường

1.1.5.1 Mơ hình triển khai
Hình 1.1 cho thấy các bước này cho giai đoạn đào tạo và giai
đoạn thử nghiệm. Đầu tiên, tập dữ liệu thô được tách thành hai tập
dữ liệu với tỷ lệ 75% cho đào tạo (1), 25% cho thử nghiệm (4). Sau
khi tách, tập dữ liệu này vẫn là dữ liệu thô, tập dữ liệu thô được

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


8

chuyển thành tập dữ liệu nhị phân (2) (5).

Hình 1. 1 Mơ hình triển khai
1.1.5.2 Phương pháp đo lường
Trong phạm vi của bài luận, độ đo accuracy, f1-score và ROC
(Receiver Operating Characteristic) được sử dụng để đo lường sự
hiệu quả của các thuật toán học máy cho từng kịch bản kiểm thử. Tất
cả các thử nghiệm đều được thực hiện với bộ dữ liệu nhị phân, vì thế
ma trận 2x2 Confusion Matrix. Đây là một trong những kỹ thuật đo
lường hiệu suất phổ biến nhất và được sử dụng rộng rãi cho các mơ
hình phân loại.
1.2 Phương pháp thực hiện
1.1.6 Lý thuyết tập hợp dữ liệu
1.1.7 Lý thuyết kỹ thuật tiền xử lý dữ liệu
1.1.8 Lý thuyết lựa chọn đặc trưng
1.3 Kết luận
Trong phần này, tơi đã trình bày tổng quan về đề tài. Khái

niệm về mã xấu đã được trình bày cụ thể, thơng qua đó, ta hiểu được
tầm quan trọng của việc phát hiện mã xấu. Đó là một trong những
mục tiêu của bài viết. Ngoài ra, trong phần này, tơi cũng đã trình bày

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


9

khái quát về các thuật toán học máy mà các nhà nghiên cứu khác đã
áp dụng vào bài toán phát hiện mã xấu. Trong phạm vi của bài viết,
tôi chỉ nêu ngắn gọn về định nghĩa của các thuật toán học máy, tuy
nhiên chúng khá quan trọng và cần thiết trong phần áp dụng để phát
hiện mã xấu ở phần sau của bài viết. Lý thuyết về các phương pháp
thực hiện cũng đã được trình bày cụ thể bao gồm lý thuyết về các tập
hợp dữ liệu, các phương pháp, kỹ thuật tiền xử lý dữ liệu và trích
chọn đặc trưng của bộ dữ liệu. Đây là những kiến thức cốt lõi được
tôi sử dụng xuyên suốt trong việc phát hiện mã xấu. Tơi sẽ trình bày
cụ thể hơn việc áp dụng các phương pháp này như thế nào trong
phần sau của bài viết.
CHƯƠNG 2: XÂY DỰNG BỘ DỮ LIỆU MÃ XẤU
2.1 Giới thiệu các bộ dữ liệu hiện tại
Các bộ dữ liệu về mã xấu từ năm 2009 đến nay được tổng hợp
trong Bảng 1.1 .
Tác giả

Mã xấu


Bộ dữ liệu

Khomh và
cộng sự [48]

God Class, Functional
Decomposition, Spaghetti Code

2 opensources

Arcelli
Fontana và
cộng sự [54]

Long Method, Feature Envy,
God Class, and Data Class

74 projects

Pecorelli và
cộng sự [58]

God Class, Spaghetti Code, Class
Data Should be Private, Long
Method, Complex Class

13 opensources

Madeyski và
cộng sự [59]


God Class, Long Method, Data
Class, Feature Envy

792 projects

Bảng 1. 1 Confusion matrix

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


10

Mỗi nghiên cứu có tập dữ liệu riêng nên đẫn đến một số nhược
điểm sau:
1. Số lượng mẫu thử của từng bộ dữ liệu nhỏ.
2. Số lượng loại mã xấu cịn hạn chế.
3. Dữ liệu khơng nhất qn giữa các tập dữ liệu mà phụ thuộc
vào các công cụ hoặc đánh giá chủ quan của con người.
4. Khó có thể so sánh hai mơ hình với nhau vì sự khác biệt
trong tập dữ liệu.
Do đó, cần sử dụng một tập dữ liệu chung cho các nghiên cứu
khác nhau
và tập dữ liệu cần có một số đặc điểm sau. Đầu tiên, nó phải có một
số lượng lớn các phiên bản, đã được trích xuất từ một số lượng lớn
các kho lưu trữ bằng cách sử dụng một công cụ đáng tin cậy. Thứ
hai, nó phải có đủ thuộc tính (số liệu nguồn, mã xấu,. Vv.) để phục
vụ các mục đích khác nhau. Cuối cùng, nó phải được cơng bố rộng

rãi để cộng đồng nghiên cứu xác nhận độ tin cậy của nó.
2.2 Các cơng cụ đo
Hiện nay, có rất nhiều cơng cụ được ra đời để đánh giá chất
lượng của bản mã, đo lường mức độ của bản mã. Trong phần này, tôi
sẽ giới thiệu ba công cụ mà tôi thử nghiệm sâu như inFusion, PMD,
iPlasma.
2.3 Hạn chế các công cụ thử nghiệm
Một số hạn chế đã được xác định trong q trình nghiên cứu
và sử dụng các cơng cụ trên. Các công cụ được đề cập ở trên được
tạo ra để phân tích chất lượng của phần mềm, có nghĩa là phát hiện
mã xấu khơng phải là mục tiêu chính của các công cụ. Các công cụ
chủ yếu được sử dụng cho một số ngơn ngữ lập trình, chẳng hạn như
Java, C++. Đối với PMD, giới hạn của các chỉ số được lập trình sẵn

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


11

khiến người dùng mất nhiều thời gian để thêm các chỉ số khác. Tuy
nhiên, việc thêm các thước đo khác không hề đơn giản nếu người
dùng không thể sử dụng ngơn ngữ
Java để lập trình. iPlasma đã khắc phục được hạn chế này của PMD
nhưng lại để lại một hạn chế mới. iPlasma sử dụng một giao diện
trông rất tiện lợi cho người dùng nhưng nó khá cồng kềnh.
2.4 Đặc tả bộ dữ liệu
Bảng 2.1 dưới đây thống kê tổng quát số lượng mã xấu từng loại kèm
với danh sách các độ đo của chúng.

Loại
Class

Mã xấu

Độ đo

Brain Class

DIT, NOPA, PNAS, WOC, NSPECM,
CC, NOAM, CM, NAS, NTempF,
NProtM, NOA, FDP, ATFD, NOM,
CBO, AMW, FANOUT, WMC

Data Class

WMC, CM, BUR, PNAS, CC, NOM,
NOA, NTempF, NOPA, NOAM

Futile Abstract
Pipeline

CC, AMW, NOA, CM, FANOUT,
NOAM, CBO, WOC, WMC, NAbsM,
NSPECM, NOM, DIT, NProtM, NAS,
HIT, PNAS

Futile
Hierarchy


NOPA, NAS, WOC, BUR, CC, CM,
NAbsM, NOA, NOAM, NTempF,
AMW, FDP, ATFD, NOM, FANOUT,
CBO, WMC, HIT,NProtM

God Class

HIT, NOPA, NSPECM, CM, NAS, CC,
NAbsM, NOA, NProtM,ATFD, WMC,
NOAM, NTempF, FANOUT, FDP,
CBO, NOM, DIT, PNAS, AMW, TCC,
WOC

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


12

Method

Schizofrenic
Class

NSPECM, NAbsM, NOPA, NAS,
CC,NOAM, CM, WOC, AMW,NProtM,
NOA, NTempF, ATFD, FANOUT,
FDP, WMC, NOM, CBO


Brain Method

CC, CM, FANIN, NOP, CDISP, FDP,
CINT, ATFD, FANOUT, NOAV,
MAXNESTING, NOLV, LOC, CYCLO

Extensive
Coupling

FANIN, NOP, CDISP, MAXNESTING,
FANOUT,
NOAV, LOC, CYCLO, ATFD, NOLV,
FDP, CINT

Feature Envy

NOP,
CYCLO,
CDISP,
MAXNESTING,NOLV,
LOC, NOAV, FANOUT, CINT,
FDP,ATFD

Intensive
Coupling

CC, CM, FANIN, NOP, CDISP, NOLV,
NOAV,
FDP,
CYCLO,

MAXNESTING, LOC, FANOUT,
ATFD, CINT

Shortcircuiting NOLV, ATFD, FDP, FANOUT, LOC,
Method
CINT, NOAV, CDISP, CYCLO,
MAXNESTING, FANIN, CM, CC
Shotgun
Surgery

LAA, FANIN, CM, CC

Bảng 2. 1 Bảng tổng hợp các bộ dữ liệu về mã xấu từ năm 2009

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


13

2.5 Định nghĩa các loại mã xấu trong bộ dữ liệu
Trong phần này, các loại mã xấu của cả hai nhóm Class và
Method đã được định nghĩa khái quát.
2.6 Định nghĩa các độ đo
Với sự hỗ trợ của các công cụ đo hiện nay, tôi thu thập được
rất nhiều các giá trị đo đối với mỗi bộ mã nguồn. Tuy nhiên, như tôi
đã đề cập ở phần trên, việc thu thập quá nhiều các độ đo không hẳn
đem lại hiệu quả cao hơn. Thực tế, theo như kết quả nghiên cứu và
thực nghiệm của tôi, việc sử dụng tất cả các độ đo đem lại kết quả

kém hơn. Nguyên nhân là vì một vài độ đo khơng liên quan đến các
độ đo khác hay không ảnh hưởng đến việc gán nhãn. Chúng được gọi
là nhiễu. Các phương pháp khử nhiễu đã được tôi đề cập ở phần trên.
Đây là một bước rất quan trọng trong việc nâng cao chất lượng của
mơ hình. Phần đính kèm Metrics là danh sách các chỉ số và định
nghĩa của chúng sau quá trình khử nhiễu.
2.7 Công khai bộ dữ liệu
Tệp Dataset-Method và tệp Dataset-Class là tập dữ liệu mã
xấu mà tôi đã xuất bản. Sự phân bố tập dữ liệu mã xấu được biểu
diễn thơng qua Hình 2.2 và Hình 2.3 bên dưới.

Hình 2. 1 Phân bố mã xấu loại method

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


14

Hình 2. 2 Phân bố mã xấu loại class
2.8 Đánh giá kết quả của bộ dữ liệu bằng các phương pháp học
máy
Việc áp dụng các thuật toán học máy vào bài tốn phát hiện
mã xấu là hồn tồn khả thi. Hơn nữa, kết quả của tất cả các thuật
toán đều mang lại tỷ lệ chính xác khả quan. Qua đó cho thấy bộ dữ
liệu đã được tạo ra một cách hợp lý, đầy đủ tạo điều kiện lý tưởng để
áp dụng các thuật toán học máy.
2.9 Kết luận
Trong phần này, tôi đã nêu rõ các công cụ đo được sử để tạo ra

bộ dữ liệu về mã xấu. Ngoài ra, các đặc tả chi tiết của bộ dữ liệu
cũng đã được trình bày cụ thể, bao gồm các định nghĩa về từng loại
mã xấu, từng độ đo được sử dụng. Bộ dữ liệu đã cung cấp tổng cộng
13 loại mã xấu (6 đối với nhóm method và 7 đối với nhóm class), đối
với từng loại mã xấu, số lượng các mẫu là nhiều hơn so với hầu hết
các bộ dữ liệu mã xấu hiện tại). Điều này khá quan trọng và hữu ích
cho các nhà phát triển khi phân tích, giải quyết các bài toán phát hiện
mã xấu trong tương lai. Các kỹ thuật nhằm nâng cao hiệu quả của bộ
dữ liệu cũng đã được giới thiệu. Việc áp dụng các kỹ thuật này mang
lại kết quả khả quan trong việc áp dụng các thuật toán học

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


15

máy. Thơng qua đó, có thể khẳng định lại một lần nữa bộ dữ liệu về
mã xấu mới này hoàn tồn có khả năng áp dụng các thuật tốn học
máy.
CHƯƠNG 3: ĐÁNH GIÁ CÁC PHƯƠNG PHÁP HỌC MÁY
TRONG DỰ ĐOÁN MÃ XẤU
3.1 Áp dụng học máy trong dự đoán mã xấu
3.1.1 Các bước tiền xử lí dữ liệu
Xử lý trước dữ liệu trước khi áp dụng các thuật toán ML là
cực kỳ quan trọng. Đó là một kỹ thuật khai thác và chuyển đổi dữ
liệu thô thành dữ liệu dễ hiểu và sạch hơn. Dữ liệu thô luôn không
đầy đủ, nhiều nhiễu và rất khó hiểu với máy tính, do đó dữ liệu
khơng thể được gửi qua một mơ hình. Đó là lý do tại sao chúng ta

cần tiền xử lý dữ liệu trước khi gửi nó qua một mơ hình.
3.1.1.1 Cân bằng bộ dữ liệu
Quá trình cân bằng rất quan trọng, đặc biệt là trong trường hợp
có sự mất cân bằng lớn của tập dữ liệu. Trên thực tế, tôi đã kiểm tra
kết quả dựa trên các bộ dữ liệu cân bằng và không cân bằng, sẽ được
thảo luận ở phần sau. Việc xây dựng một mơ hình phân loại với tập
dữ liệu không cân bằng sẽ khiến cho lớp đại diện ít bị bỏ qua hoặc
thậm chí bị bỏ qua.
3.1.1.2 Chuẩn hóa dữ liệu
Đối với hầu hết các vấn đề được giải quyết bằng các thuật
toán học máy, các kỹ thuật chuẩn hóa thường được sử dụng. Chuẩn
hóa là một phần của quá trình chuẩn bị dữ liệu cho học máy. Việc
chuẩn hóa này khá quan trọng, nó giúp thay đổi giá trị của các cột số
trong tập dữ liệu thành tỷ lệ chung mà không làm sai lệch sự khác
biệt trong phạm vi giá trị. Nếu dữ liệu có cùng dải giá trị giữa các cột

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


16

thì khơng cần chuẩn hóa. Trong trường hợp giá trị giữa các cột trong
tập dữ liệu khác nhau khá nhiều thì q trình chuẩn hóa là cần thiết
và quan trọng.
3.1.1.3 Lựa chọn đặc trưng dữ liệu
Mỗi loại mã xấu có một số đặc trưng khác nhau. Số lượng các
đặc trưng thường rất nhiều, chúng là các số liệu được tính tốn dựa
trên mã nguồn. Chúng ta hồn tồn có thể sử dụng tất cả các đặc

trưng này để luyện tập. Tuy nhiên, điều đó tiêu tốn nhiều tài nguyên
và thời gian hơn. Đơi khi nó ảnh hưởng đến kết quả của q trình thử
nghiệm.
3.1.2 Áp dụng các thuật tốn học máy
Trong phần này, tơi trình bày các bước áp dụng các kỹ thuật
được trình bày ở trên để phát hiện mã xấu. Hình 1.1 cho thấy các
bước này cho giai đoạn đào tạo và giai đoạn thử nghiệm. Đầu tiên,
tập dữ liệu thô được chia thành hai tập dữ liệu với tỷ lệ 75% cho đào
tạo, 25% cho thử nghiệm. Sau khi tách, tập dữ liệu này vẫn là dữ
liệu thô, tập dữ liệu thô được chuyển thành tập dữ liệu nhị phân.
Điều này có nghĩa là mỗi loại mã xấu sẽ được chia thành một tập dữ
liệu nhị phân. Mỗi phiên bản trong tập dữ liệu được gắn một nhãn.
Nhãn này có hai giá trị đúng hoặc sai tương ứng với trường hợp này
là có mùi hoặc khơng có mùi. Các kỹ thuật tiền xử lý dữ liệu được
áp dụng tương tự, đồng bộ với tập dữ liệu huấn luyện và tập dữ liệu
kiểm tra. Các thuật toán này đã được giới thiệu ở phần trước. Các
mơ hình phân loại được xây dựng dựa trên từng thuật toán học máy
dựa trên tập dữ liệu đào tạo. Các mơ hình này được sử dụng lại để
kiểm tra dữ liệu. Kết quả của quá trình kiểm tra là danh sách các
nhãn tương ứng cho từng dòng máy và từng loại mã xấu. Độ chính
xác của q trình này được tính tốn dựa trên các nhãn danh sách

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


17

trong dữ liệu thử nghiệm và các nhãn danh sách được dự đốn thơng

qua các mơ hình. Điều này sẽ được thảo luận trong phần sau.
3.2 Đo lường, đánh giá, so sánh kết quả của các thuật toán
3.2.1 Tổng quát
Bốn kịch bản thử nghiệm đã được thực hiện trong phần này.
Tất cả các tình huống này đều dựa trên dữ liệu thử nghiệm (25% dữ
liệu thô). Đối với mỗi kịch bản, có sáu thuật tốn được triển khai bao
gồm (Linear Discriminant Analysis (LDA), k-Nearest-Neighbors
(kNN), Multilayer Perceptron (MLP), Decision Tree (DT), Support
Vector Machine (SVM), Random Forest (RF)). Kết quả thử nghiệm
trong mỗi kịch bản được thể hiện thông qua các bảng và biểu đồ
Receiver Operating Characteristic curve (ROC curve) để minh họa
hiệu quả của các thuật toán khác nhau. Chúng cung cấp cái nhìn trực
quan, rõ ràng và đầy đủ nhất về kết quả tổng thể của các kịch bản.
3.2.2 Kịch bản thử nghiệm
Có tổng cộng 4 kịch bản được xây dựng bên dưới. Bảng 3.1
hiển thị tổng quan về các kỹ thuật tiền xử lý dữ liệu được áp dụng
trong tất cả các tình huống.
P.P Tiền xử lý

Kịch
bản 1

Kịch
bản 2

Kịch
bản 3

Kịch
bản 4


Normalization

X

X

X

Feature Selection

X

X

X

Balancing with Oversampling strategy

X

Balancing with
Under-sampling
strategy

X

Bảng 3. 1 Các phương pháp tiền xử lý dữ liệu cho từng kịch bản

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.


Lưu hành nội bộ


18

3.2.3 Phân tích và đánh giá kết quả
Kết quả của tất cả các kịch bản được hiển thị trong Hình3.5.
Dựa trên những kết quả này, một số đánh giá và phân tích đã được
tóm tắt như sau:
• Kịch bản 1: kết quả của tất cả các thuật tốn khơng ấn tượng
với phạm vi [0,6 - 0,75]. Các thuật toán cây cho kết quả cao
hơn các thuật tốn cịn lại, tuy nhiên, sự khác biệt không quá
lớn. Trong biểu đồ ROC Hình3.1, các đường cong nằm ở
phần trên của đường chéo. Tuy nhiên, AUC không quá quan
trọng. Điều này cho thấy hiệu quả của các phương pháp này
khơng cao.
• Kịch bản 2: kết quả của kịch bản 2 với phạm vi [0,75 - 0,9]
cao hơn kết quả của kịch bản 1. Trong Hình3.2, tất cả các
đường cong đều nằm trên đường chéo, và AUC cũng lớn
hơn các đường cong của Hình3.2. Điều này một lần nữa
khẳng định kết quả của kịch bản 2 tốt hơn kết quả của kịch
bản 1.


Kịch bản 3: Kết quả của kịch bản 3 với phạm vi [0,85 0,98] cao hơn nhiều so với kết quả của kịch bản 1 và kịch
bản 2. Tất cả các thuật tốn đều cho kết quả tốt và chúng ta
có thể tập trung vào thuật toán Random Forest. Thuật toán
này cho thấy sự ổn định của kết quả trong cả bốn loại mã
xấu. Trong Hình 3.3, các đường cong đều nằm trên đường

chéo và AUC cũng lớn hơn nhiều so với các đường cong
của Hình3.1 và Hình3.2. Điều này có nghĩa là việc áp dụng
thuật toán cân bằng sẽ cho kết quả tốt hơn so với việc khơng
sử dụng nó.

• Kịch bản 4: kết quả của kịch bản 4 với phạm vi [0,84 - 0,98]

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


19

khá giống với kết quả của kịch bản 3. Như trong kịch bản 3,
thuật toán Random Forest trong kịch bản 4 cho kết quả khá
một kết quả cao trong bốn loại mã xấu. Kết quả của thuật
toán này là cao nhất đối với 3 loại Mã xấu Long Method,
Data Class, God Class. Trong Hình 3.4, các đường cong
cũng khá giống với các đường cong trong kịch bản 3. Tất cả
các đường cong đều nằm trên đường chéo và AUC cũng lớn
hơn nhiều so với các đường cong trong kịch bản 1 và kịch
bản 2. Đó cho thấy hiệu suất của việc áp dụng các thuật toán
cân bằng, cả chiến lược lấy mẫu dưới và lấy mẫu quá mức.

Hình 3 1 Kịch bản kiểm thử 1

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ



20

Hình 3 2 Kịch bản kiểm thử 2

Hình 3 3 Kịch bản kiểm thử 3

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


21

Hình 3 4 Kịch bản kiểm thử 4

Hình 3 5 Kết quả tổng hợp các kịch bản thử nghiệm
Cuối cùng, thơng qua Hình3.5, các câu trả lời cho ba câu hỏi

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


22

nghiên cứu trong phần này được trả lời như sau:



Câu hỏi 1: Kỹ thuật tiền xử lý nào hoạt động tốt nhất để
phát hiện mã xấu? Theo kết quả trong Hình3.5, việc sử
dụng kỹ thuật tiền xử lý dữ liệu cho kết quả ấn tượng.
Việc áp dụng đầy đủ các kỹ thuật tiền xử lý đã cải thiện
độ chính xác từ 60% lên 95%. Do đó, sự kết hợp của các
kỹ thuật như chuẩn hóa, lựa chọn đặc trưng và cân bằng
tập dữ liệu sẽ hiệu quả hơn khi áp dụng các kỹ thuật này
một cách riêng biệt.



Câu hỏi 2: Thuật tốn học máy nào cho kết quả chính
xác nhất? Thuật toán Random Forest cho kết quả cao
nhất (95% - 99%) trong cả bốn loại Mã xấu. Một số
thuật toán có độ chính xác thấp hơn một chút so với
thuật toán Random Forest, chẳng hạn như: SVM (90% 97%), Decision Tree (85% - 95%).



Câu hỏi 3 Thuật tốn học máy nào cho kết quả ổn định
nhất cho tất cả các loại mã xấu? Thuật tốn Random
Forest cho thấy độ chính xác ổn định trong cả bốn loại
mã xấu và trong cả bốn tình huống. Kết quả của thuật
tốn này ln nằm trong top những thuật tốn có hiệu
suất cao nhất.
3.3 Kết luận
Trong phần này, tôi đã giới thiệu các thuật toán học máy, các
kỹ thuật tiền xử lý dữ liệu dành cho bài toán phát hiện mã xấu và các
phân tích kết quả thử nghiệm. Các bước tiến hành áp dụng các kỹ
thuật tiền xử lý dữ liệu, cân bằng bộ dữ liệu và các bốn kịch bản

kiểm thử đã được trình bày cụ thể, rõ ràng. Kết quả của các kịch bản
được đánh giá dựa trên các độ đo như ROC Curve, F1-score đã được

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


23

tôi đề cập ở phần trên. Thông qua kết quả và sự so sánh giữa bốn
kịch bản, mục tiêu chính của phần này đã được trả lời. Hầu hết các
thuật tốn đều mang lại kết quả khả quan. Trong đó, ba thuật tốn
Random Forest, Support Vector Machine, Decision Tree có kết quả
cao nhất. Hơn nữa, việc áp dụng các kỹ thuật tiền xử lý dữ liệu đã cãi
thiện kết quả rõ rệt, chúng đã nâng cao độ chính xác từ khoảng 60%
lên khoảng 95%.
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Trong bài viết này, tơi dã trình bày về khái niệm của mã xấu.
Mã xấu không phải là lỗi phần mềm, mã xấu chỉ là những dấu hiệu
hay nguy cơ dẫn đến lỗi phần mềm. Đó là lí do và tầm quan trọng
của việc phát hiện mã xấu trong các mã nguồn. Nó giúp các nhà phát
triển phần mềm ngăn ngừa được các lỗi có thể xảy ra trong tương lai.
Bên cạnh đó, kết quả này cũng khẳng định rằng việc phát hiện mã
xấu bằng các thuật toán học máy là khả thi và đầy hứa hẹn. Tôi đã
công bố bài báo về các thực nghiệm trong việc dự đoán mã xấu sử
dụng học máy. Bài báo được đăng trên Hội thảo khoa học quốc gia –
CITA 2021. Tên của bài báo là “Experimentations of Machine
Learning for Predicting Code Smells” với ID 27.
Trong tương lai tôi sẽ hướng đến việc mở rộng bộ dữ liệu.

Như đã đề cập, 13 loại mã xấu được xây dựng không phải là tất cả,
hiện nay cịn rất nhiều loại mã xấu khác. Vì vậy việc mở rộng bộ dữ
liệu với quy mô lớn hơn là một mục tiêu rất quan trọng và cần thiết.
Mặc khác, với độ rộng lớn của bộ dữ liệu, việc sử dụng các thuật
toán học máy để phát hiện mã xấu theo phương pháp gán nhãn nhị
phân (binary-labels) như hiện tại gây tốn thời gian. Vì lí do này, việc
xây dựng và sử dụng các thuật toán học máy theo phương pháp gán

THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.

Lưu hành nội bộ


×