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

Xử lý dữ liệu không cân bằng trong bài toán dự đoán lỗi phần mềm

85 13 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

Định dạng
Số trang 85
Dung lượng 24,41 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Có thể thấy rằng, một trong những vấn đề ảnh hưởng đến tính hiệu quả của các mô hình học máy trong bài toán dự đoán lỗi phần mềm đó là sự không cân bằng giữa các loại mẫu trong tập dữ li

Trang 1

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC SƯ PHẠM

LÊ SONG TOÀN

XỬ LÝ DỮ LIỆU KHÔNG CÂN BẰNG TRONG BÀI TOÁN DỰ ĐOÁN LỖI PHẦN MỀM

LUẬN VĂN THẠC SĨ

HỆ THỐNG THÔNG TIN

Đà Nẵng - Năm 2020

Trang 2

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM

LÊ SONG TOÀN

XỬ LÝ DỮ LIỆU KHÔNG CÂN BẰNG TRONG BÀI TOÁN DỰ ĐOÁN LỖI PHẦN MỀM

Chuyên ngành : Hệ thống thông tin

Trang 6

MỤC LỤC

LỜI CAM ĐOAN i

TRANG THONG TIN LUẬN VĂN ii

MỤC LỤC iv

DANH MỤC CÁC TỪ VIẾT TẮT vi

DANH MỤC BẢNG vii

DANH MỤC HÌNH ẢNH viii

MỞ ĐẦU 1

1 Lý do chọn đề tài 1

2 Mục đích nghiên cứu 2

3 Đối tượng và phạm vi nghiên cứu 2

4 Phương pháp nghiên cứu 2

5 Ý nghĩa khoa học và thực tiễn của đề tài 3

6 Cấu trúc của luận văn 3

Chương 1 TỔNG QUAN VỀ DỰ ĐOÁN LỖI PHẦN MỀM 4

1.1 Lỗi phần mềm 4

1.2 Độ đo phần mềm 6

1.2.1 Độ đo mã nguồn 6

1.2.2 Độ đo quá trình 12

1.2.3 Đánh giá thuật toán 12

1.3 Dự đoán lỗi phần mềm 13

1.4 Mô hình dự đoán lỗi phần mềm 14

1.5 Dữ liệu không cân bằng trong bài toán dự đoán lỗi 16

1.6 Kết luận chương 1 18

Chương 2 KỸ THUẬT LẤY MẪU DỮ LIỆU 19

2.1 Khái niệm và sự cần thiết việc lấy mẫu dữ liệu 19

2.1.1 Khái niệm 19

2.1.2 Sự cần thiết việc lấy mẫu dữ liệu 20

2.1.3 Random Undersampling 21

2.2 Random Oversampling 26

2.3 SMOTE 29

2.4 Tóm tắt chương 2 32

Chương 3 KỸ THUẬT LẤY MẪU ĐỂ XỬ LÝ DỮ LIỆU KHÔNG CÂN BẰNG TRONG DỰ ĐOÁN LỖI PHẦN MỀM 33

3.1 Bài toán lấy mẫu dữ liệu trong dự đoán lỗi phần mềm 33

3.2 Các tiêu chuẩn đánh giá thực nghiệm 34

3.3 Dữ liệu thực nghiệm 35

3.4 Thiết lập thực nghiệm 35

Trang 7

3.5 Các kết quả thực nghiệm 38

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57 DANH MỤC TÀI LIỆU THAM KHẢO

QUYẾT ĐỊNH GIAO ĐỀ TÀI (BẢN SAO)

BẢN TƯỜNG TRÌNH CHỈNH SỬA LUẬN VĂN

BIÊN BẢN BẢO VỆ HỌP HỘI ĐỒNG

NHẬN XÉT CỦA HAI PHẢN BIỆN

Trang 8

DANH MỤC CÁC TỪ VIẾT TẮT

ANN Artificial neural networks Mạng Neural nhân tạo

Forest Random Forest

KNN K-nearest Neighbors

MLP Multilayer Perceptron

SDP Software Defect Prediction Dự đoán lỗi phần mềm SMOTE Synthetic Minority Over-sampling

Technique SVM Support Vector Machine

Trang 9

DANH MỤC BẢNG

Số hiệu

3.1 Tóm tắt 13 tập dữ liệu không cân bằng cao được sử

46

3.6

Giá trị F1-score trung bình của các tập dữ liệu MC1, MC2, MW1, PC1, PC2, PC3, PC4 không cân bằng sử dụng các kỹ thuật lấy mẫu và không lấy mẫu

473.7 Bảng đánh giá mức độ hiệu quả kỹ thuật lấy mẫu 56

Trang 10

DANH MỤC CÁC HÌNH

Số hiệu

2.3 Tỷ lệ lỗi/không lỗi của dữ liệu trong tập jm1.arff 232.4 Biểu đồ thể hiện tỷ lệ lỗi / không lỗi của tập dữ liệu 232.5 Tính toán số lượng mẫu trước và sau khi cân bằng 242.6 Thực hiện lấy mẫu và xuất file dữ liệu đã cân bằng 252.7 Biểu đồ thể hiện tỷ lệ mẫu lỗi / không lỗi sau khi cân bằng 25

2.9 Tính toán số lượng mẫu trước và sau khi cân bằng, thực thi kỹ

2.10 Biểu đồ thể hiện tỷ lệ mẫu lỗi / không lỗi sau khi cân bằng với

2.12 Biểu đồ thể hiện tỷ lệ cân bằng giữa mẫu lỗi và không lỗi 323.1 Biểu đồ phân lớp tập dữ liệu CLASS trước và sau khi lấy mẫu 393.2 Biểu đồ phân lớp tập dữ liệu CM1 trước và sau khi lấy mẫu 403.3 Biểu đồ phân lớp tập dữ liệu JM1 trước và sau khi lấy mẫu 403.4 Biểu đồ phân lớp tập dữ liệu KC1 trước và sau khi lấy mẫu 413.5 Biểu đồ phân lớp tập dữ liệu KC2 trước và sau khi lấy mẫu 413.6 Biểu đồ phân lớp tập dữ liệu KC3 trước và sau khi lấy mẫu 423.7 Biểu đồ phân lớp tập dữ liệu MC1 trước và sau khi lấy mẫu 423.8 Biểu đồ phân lớp tập dữ liệu MC2 trước và sau khi lấy mẫu 433.9 Biểu đồ phân lớp tập dữ liệu MW1 trước và sau khi lấy mẫu 433.10 Biểu đồ phân lớp tập dữ liệu PC1 trước và sau khi lấy mẫu 443.11 Biểu đồ phân lớp tập dữ liệu PC2 trước và sau khi lấy mẫu 443.12 Biểu đồ phân lớp tập dữ liệu PC3 trước và sau khi lấy mẫu 453.13 Biểu đồ phân lớp tập dữ liệu PC4 trước và sau khi lấy mẫu 45

3.14

Đường cong ROC sử dụng tập dữ liệu CLASS của các thuật

toán trong việc dự đoán lỗi hướng phương thức Mô hình dự

đoán sử dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái),

lấy mẫu qua Undersampling (trên bên phải), lấy mẫu qua

Oversampling (dưới bên trái), lấy mẫu qua SMOTE (dưới bên

phải)

48

Trang 11

Số hiệu

3.15

Đường cong ROC sử dụng tập dữ liệu CM1 của các thuật toán

trong việc dự đoán lỗihướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

49

3.16

Đường cong ROC sử dụng tập dữ liệu JM1 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

50

3.17

Đường cong ROC sử dụng tập dữ liệu KC1 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

50

3.18

Đường cong ROC sử dụng tập dữ liệu KC2 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

51

3.19

Đường cong ROC sử dụng tập dữ liệu KC3 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

51

3.20

Đường cong ROC sử dụng tập dữ liệu MC1 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

52

3.21

Đường cong ROC sử dụng tập dữ liệu MC2 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

52

3.22 Đường cong ROC sử dụng tập dữ liệu MW1 của các thuật toán 53

Trang 12

Số hiệu

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

3.23

Đường cong ROC sử dụng tập dữ liệu PC1 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

53

3.24

Đường cong ROC sử dụng tập dữ liệu PC2 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái), lấy mẫu qua SMOTE (dưới bên phải)

54

3.25

Đường cong ROC sử dụng tập dữ liệu PC3 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái) , lấy mẫu qua SMOTE (dưới bên phải)

54

3.26

Đường cong ROC sử dụng tập dữ liệu PC4 của các thuật toán

trong việc dự đoán lỗi hướng phương thức Mô hình dự đoán sử

dụng dữ liệu trước khi lấy mẫu dữ liệu (trên bên trái), lấy mẫu

qua Undersampling (trên bên phải), lấy mẫu qua Oversampling

(dưới bên trái) , lấy mẫu qua SMOTE (dưới bên phải)

55

Trang 13

MỞ ĐẦU

1 Lý do chọn đề tài

Phần mềm hiện đang được sử dụng để tự động hóa và vận hành hầu hết các quy trình nghiệp vụ mà chúng ta có hiện nay, bao gồm nhiều hệ thống quan trọng và an toàn, ví dụ: các hệ thống kiểm soát, các ứng dụng cá nhân và ứng dụng doanh nghiệp, Việc kiểm tra các hệ thống phần mềm như vậy rất khó khăn và tốn thời gian Chi tiêu phần mềm trên toàn thế giới lên tới 3.8 nghìn tỷ đô la trong năm 2014 [1, 2, 3], với các hoạt động kiểm tra và đảm bảo chất lượng khác chiếm 23% chi tiêu [1, 2, 3] Tỷ lệ phần trăm này phản ánh mức độ quan trọng và phức tạp của nhiệm vụ kiểm thử phần mềm như là một phần của vòng đời phát triển phần mềm [3]

Thách thức với công nghệ phần mềm hiện đại là các hệ thống trở nên phức tạp và tinh vi hơn với việc áp dụng rộng rãi các mô hình mới liên tục, các tính năng mới có thể được đưa vào ứng dụng một cách nhanh chóng Và lỗi là một trong những yếu tố được giải quyết nhiều nhất trong lĩnh vực chất lượng phần mềm Dự đoán xác suất của các lớp bị lỗi là thông tin cần thiết để giúp các nhà phát triển cải thiện chất lượng phần mềm và giảm chi phí kiểm tra, bảo trì Hiệu suất của các mô hình dự đoán lỗi chịu sự tác động của việc mất cân bằng lỗi, tức là phần lớn các mô-đun không bị lỗi trong khi lỗi chỉ xuất hiện ở số ít [4]

Dự đoán lỗi trong các dự án phần mềm đóng một vai trò quan trọng để giảm thiểu các rủi ro về chất lượng và nâng cao khả năng phát hiện các thành phần chương trình có tồn tại lỗi Do đó, các phương pháp phân loại lỗi để dự đoán khả năng có lỗi dựa trên các đặc trưng tĩnh về mã nguồn đã trở thành một chủ đề nhận được nhiều sự quan tâm của cộng đồng nghiên cứu trong những năm gần đây Một số nghiên cứu đã chỉ ra rằng việc áp dụng chỉ một bộ phân lớp mẫu duy nhất gây nên các vấn đề về tính hiệu quả, và sự kết hợp của nhiều bộ phân lớp có thể cải thiện đáng kể kết quả phân loại so với việc sử dụng chỉ một bộ phân lớp Tuy nhiên, tính chất không cân bằng về

số mẫu dữ liệu trong mỗi lớp đã gây cản trở lớn đến hiệu quả của các phương pháp học kết hợp nhiều thuật toán

Để giải quyết vấn đề này, các phương pháp lấy mẫu thường được sử dụng cùng với các mô hình dự đoán lỗi Lấy mẫu dữ liệu là một kỹ thuật phân tích thống kê được

sử dụng để chọn, thao tác và phân tích một tập hợp con đại diện của các điểm dữ liệu

để xác định các mẫu và xu hướng trong tập dữ liệu lớn hơn đang được kiểm tra Nó cho phép việc lập mô hình dự đoán và phân tích dữ liệu làm việc với một lượng dữ liệu nhỏ, có thể quản lý được, để xây dựng và chạy các mô hình phân tích nhanh hơn, trong khi vẫn tạo ra kết quả chính xác Lấy mẫu dữ liệu đặc biệt hữu ích với các tập dữ liệu quá lớn để phân tích đầy đủ một cách hiệu quả Xác định và phân tích một mẫu đại diện hiệu quả và tiết kiệm chi phí hơn so với khảo sát toàn bộ dữ liệu

Trang 14

2 Mục đích nghiên cứu

Vấn đề mất cân bằng dữ liệu xảy ra khi trong tập dữ liệu có lớp chứa số mẫu nhiều hơn các lớp khác, cụ thể là lớp chứa mẫu có lỗi ít hơn mẫu không bị lỗi Phân loại chính xác cho mẫu thuộc lớp thiểu số trong tập mất cân bằng là khó khăn Khi tỷ

lệ mất cân bằng của tập dữ liệu càng cao thì việc phát hiện được mẫu của lớp nhỏ càng khó

Dữ liệu thu được trong các bộ dữ liệu thực tế thường là các tập dữ liệu mất cân bằng Trong bài toán dự đoán lỗi thì số lượng mẫu có lỗi chỉ chiếm thiểu số so với số mẫu không lỗi, điều này dẫn đến việc các mô hình dự đoán lỗi có thể tính toán và phân tích hệ thống phần mềm sai lệch, có thể gây ra những lỗi ngoài ý muốn Thông thường trong bài toán này lớp cần quan tâm lại có rất ít mẫu so với các lớp không lỗi chiếm đa

số trong tập dữ liệu Việc đoán đúng nhãn của mẫu thuộc lớp nhỏ là cần thiết và quan trọng Nếu mẫu thuộc lớp nhỏ có nhãn sai thì phần mềm sẽ phát sinh lỗi bất kỳ lúc nào

và nhà phát triển phần mềm phải trả chi phí và nhân lực cho việc phân tích, chi phí vá lỗi cao hơn nhiều so với việc gán đúng nhãn

Có thể thấy rằng, một trong những vấn đề ảnh hưởng đến tính hiệu quả của các

mô hình học máy trong bài toán dự đoán lỗi phần mềm đó là sự không cân bằng giữa các loại mẫu trong tập dữ liệu Đề tài này hướng đến nghiên cứu các kỹ thuật lấy mẫu thông dụng để xử lý tập dữ liệu không cân bằng Đánh giá tính hiệu quả của các kỹ thuật lấy mẫu khi kết hợp với các mô hình học máy đối với tập dữ liệu huấn luyện không cân bằng

3 Đối tượng và phạm vi nghiên cứu

3.1 Đối tượng nghiên cứu

- Vấn đề dự đoán lỗi phần mềm và các thuật toán học máy

- Các phương pháp lấy mẫu để giải quyết vấn đề mất cân bằng các tập dữ liệu trong bài toán dự đoán lỗi phần mềm

- Các phép đo để đánh giá tính hiệu quả của của các mô hình học máy trên tập dữ liệu không cân bằng

- Cơ sở dữ liệu với các đặc trưng sẵn có để phân tích lấy mẫu dữ liệu

3.2 Phạm vi nghiên cứu

Đề tài tập trung nghiên cứu các vấn đề sau:

- Các mô hình học máy áp dụng cho bài toán dự đoán lỗi phần mềm

- Các phương pháp lấy mẫu để xử lý tập dữ liệu không cân bằng để nâng cao độ chính xác cho các mô hình học máy

4 Phương pháp nghiên cứu

Về phương pháp nghiên cứu, tôi sử dụng hai phương pháp chính là nghiên cứu lý thuyết và nghiên cứu thực nghiệm

Trang 15

4.1 Phương pháp lý thuyết

Thu thập, chọn lọc, phân loại, ghi chú và nghiên cứu các tài liệu (sách, bài báo, luận văn, website) có liên quan đến các kỹ thuật lấy mẫu, các thuật toán học máy, các

mô hình học máy cho dự đoán lỗi phần mềm, các tập dữ liệu

4.2 Phương pháp đánh giá những kỹ thuật lấy mẫu hiện có

Đánh giá tính hiệu quả của các kỹ thuật lấy mẫu đối với mô hình học máy cho dự đoán lỗi phần mềm

4.3 Phương pháp thực nghiệm

Dựa trên lý thuyết đã nghiên cứu, các thuật toán kỹ thuật lấy mẫu dữ liệu, các tập

dữ liệu từ các nguồn tin cậy, cài đặt các kỹ thuật lấy mẫu dữ liệu, đánh giá điểm mạnh yếu của mỗi kỹ thuật khi ứng dụng chúng vào các tập dữ liệu cho các thuật toán học máy trong mô hình dự đoán lỗi

5 Ý nghĩa khoa học và thực tiễn của đề tài

Đề tài này nghiên cứu và đánh giá thực nghiệm về tầm quan trọng của các phương pháp lấy mẫu trên tập dữ liệu không cân bằng trong bài toán dự đoán lỗi phần mềm Một thực nghiệm với sự tham gia của 7 thuật toán phân loại khác nhau, ba phương pháp lấy mẫu được thực hiện trên 13 tập dữ liệu không cân bằng Các kết quả thực nghiệm chỉ ra tính hiệu quả của các kỹ thuật lấy mẫu vào mô hình học máy trong việc dự đoán lỗi phần mềm sử dụng các tập dữ liệu có sự không cân bằng trong phân

bố số lượng mẫu của mỗi lớp

Đề tài này tập trung nghiên cứu các vấn đề:

- Nghiên cứu các mô hình học máy áp dụng cho bài toán dự đoán lỗi phần mềm

- Nghiên cứu một số phương pháp lấy mẫu để giải quyết vấn đề mất cân bằng các tập dữ liệu trong bài toán dự đoán lỗi phần mềm

- Cài đặt, thực nghiệm các phương pháp lấy mẫu đã nghiên cứu trên

- Đánh giá các kỹ thuật lấy mẫu dữ liệu này trên bài toán dự đoán lỗi

6 Cấu trúc của luận văn

Báo cáo này được chia thành các phần chính như sau:

Chương 1: trình bày về tổng quan dự đoán lỗi phần mềm dựa trên độ đo mã nguồn, vấn đề không cân bằng lớp trong tập dữ liệu

Chương 2: trình bày các khái niệm và chi tiết các kỹ thuật lấy mẫu dữ liệu được nghiên cứu

Chương 3: mô tả các kết quả của thực nghiệm và phân tích đánh giá hiệu quả của các kỹ thuật lấy mẫu trên các tập dữ liệu không cân bằng khi áp dụng với mô hình dự đoán lỗi

Trang 16

Chương 1 TỔNG QUAN VỀ DỰ ĐOÁN LỖI PHẦN MỀM

Quá trình xác định các mô-đun phần mềm dễ bị lỗi tại giai đoạn đầu được gọi là

dự đoán lỗi phần mềm Nhiều nghiên cứu đã được công bố trong tài liệu, hầu như các nhà nghiên cứu xây dựng mô hình dự đoán lỗi bằng cách sử dụng các độ đo phần mềm, dữ liệu lịch sử và thuật toán phân loại để khai thác dữ liệu Với sự phát triển không ngừng của máy tính và dữ liệu, các kĩ thuật học máy đang từng bước được áp dụng rộng rãi trong mọi lĩnh vực của cuộc sống, trong đó có lĩnh vực phát triển phần mềm Cho đến hiện nay, đã có một số công trình nghiên cứu áp dụng các kĩ thuật học máy vào dự đoán lỗi Một số nghiên cứu đã cài đặt và đánh giá hiệu quả của các kĩ thuật trên trong dự đoán lỗi cho các phần mềm, dựa trên các độ đo trích xuất từ mã nguồn phần mềm Dự đoán lỗi trong các dự án phần mềm đóng một vai trò quan trọng

để giảm thiểu các rủi ro về chất lượng và nâng cao khả năng phát hiện các thành phần chương trình có tồn tại lỗi Chương này sẽ trình bày tổng quan về dự đoán lỗi trong phần mềm, các độ đo trích xuất từ mã nguồn phần mềm, mô hình dự đoán lỗi dựa trên

độ đo phần mềm Cuối chương sẽ trình bày vấn đề mất cân bằng dữ liệu giữa các lớp, ảnh hưởng của các tập dữ liệu đó trong bài toán dự đoán lỗi phần mềm

1.1 Lỗi phần mềm

Trong lĩnh vực công nghệ phần mềm, các hệ thống phần mềm được sản xuất và bảo trì bởi con người vì vậy việc duy trì phần mềm rất phức tạp, lỗi luôn luôn xuất hiện tại các hệ thống này Hầu hết các công ty phần mềm chi tiêu rất nhiều tiền và nhân lực để phát hiện lỗi trong một hệ thống phần mềm trước khi được triển khai cho khách hàng Phần mềm càng phức tạp thì lỗi càng xuất hiện nhiều Lỗi tác động tới phần mềm hoặc hệ thống đang xây dựng hoặc vận hành theo nhiều cách khác nhau Do vậy, để giảm thiểu các hậu quả do lỗi gây ra tiết kiệm chi phí thì các nhà phát triển cố gắng phát hiện lỗi trong giai đoạn sớm Theo các thống kê, lỗi phần mềm tạo thành một gánh nặng rất lớn cho công ty phần mềm phát triển Để quản lý tốt hơn lỗi lập trình do con người tạo ra, nhân sự kiểm thử phần mềm được phát triển lên số lượng lớn Do đó, việc xác định các mô-đun bị lỗi sớm sẽ hỗ trợ sự phát triển của các hệ thống đáng tin cậy thông qua việc cải tiến lập lịch và kiểm soát chất lượng phần mềm

Từ những yếu tố trên các phương pháp dự đoán lỗi phần mềm được ra đời

Lỗi phần mềm là sự không khớp giữa chương trình và đặc tả của nó Dựa vào định nghĩa, ta có thể phân loại lỗi phần mềm thành 3 dạng:

▪ Lỗi sai: Sản phẩm phần mềm được xây dựng khác với đặc tả

▪ Lỗi thiếu: Các yêu cầu của sản phẩm phần mềm đã có trong đặc tả nhưng lại không có trong sản phẩm thực tế

▪ Lỗi thừa: Sản phẩm thực tế có những tính năng không có trong tài liệu đặc tả Lỗi phần mềm có thể đến từ nhiều nguyên nhân khác nhau, trong đó có cả các

Trang 17

nguyên nhân chủ quan và các nguyên nhân khách quan Dưới đây là chín nguyên nhân chủ yếu gây ra lỗi phần mềm:

- Định nghĩa các yêu cầu bị lỗi: Những lỗi trong việc xác định yêu cầu thường

nằm ở phía khách hàng Một số lỗi thường gặp là: định nghĩa sai yêu cầu, lỗi không hoàn chỉnh, thiếu các yêu cầu quan trọng hoặc là quá chú trọng các yêu cầu không thật

sự cần thiết

- Các lỗi trong giao tiếp giữa khách hàng và nhà phát triển: Hiểu lầm trong

giao tiếp giữa khách hàng và nhà phát triển cũng là nguyên nhân gây lỗi Những lỗi này thường xuất hiện trong giai đoạn đầu của dự án Một số lỗi hay gặp phải: hiểu sai chỉ dẫn trong tài liệu yêu cầu, hiểu sai thay đổi khi khách hàng trình bày bằng lời nói và tài

liệu, hiểu sai về phản hồi và thiếu quan tâm đến những đề cập của khách hàng

- Sai lệch có chủ ý với các yêu cầu phần mềm: Trong một số trường hợp các

nhà phát triển cố tình làm sai lệnh các yêu cầu trong tài liệu đặc tả Nguyên nhân của việc này đến từ các áp lực thời gian, ngân sách, hay cố tình sử dụng lại các mô-đun từ các dự án trước mà chưa phân tích đầy đủ những thay đổi để thích nghi với các yêu cầu

mới

- Các lỗi thiết kế logic: Lỗi phần mềm xảy ra trong quá trình các chuyên gia thiết

kế hệ thống, các kiến trúc sư hệ thống, kỹ sư phần mềm, các nhà phân tích xây dựng phần mềm theo yêu cầu Các lỗi điển hình bao gồm: Định nghĩa các yêu cầu phần mềm bằng các thuật toán sai; Quy trình định nghĩa có chứa trình tự lỗi; Sai sót trong các định

nghĩa biên như > 3 hay ≥ 3; Thiếu sót các trạng thái hệ thống phần mềm được yêu cầu

- Các lỗi lập trình: Có rất nhiều lý do dẫn đến việc các lập trình viên gây ra các

lỗi lập trình Những lý do này bao gồm: sự hiểu sai các tài liệu thiết kế, ngôn ngữ; sai sót trong ngôn ngữ lập trình; sai sót trong việc áp dụng các công cụ phát triển; sai sót

trong lựa chọn dữ liệu

- Không tuân thủ theo các tài liệu hướng dẫn và tiêu chuẩn lập trình: Các lỗi

phần mềm có thể đến từ việc không tuân thủ các tài liệu và tiêu chuẩn lập trình của các

tổ chức phát triển phần mềm

- Thiếu sót trong quá trình kiểm thử: Lỗi phần mềm có thể đến từ chính quá trình kiểm thử khi mà người kiểm thử để lọt lỗi

Những lỗi này đến từ các nguyên nhân sau đây:

o Kế hoạch kiểm thử chưa hoàn chỉnh, để sót yêu cầu cần kiểm thử

o Lỗi trong tài liệu và báo cáo kiểm thử

o Việc sửa chữa các lỗi được phát hiện không hoàn chỉnh do áp lực thời gian hay

do thiếu cẩn thận

- Các lỗi thủ tục: Các thủ tục hướng dẫn cho người sử dụng tại từng bước của

tiến trình Chúng có tầm quan trọng đặc biệt trong các hệ thống phần mềm phức tạp mà các tiến trình được thực hiện bằng nhiều bước, mỗi bước có thể có nhiều kiểu dữ liệu

và cho phép kiểm tra các kết quả trung gian Các lỗi có thể đến từ việc viết các thủ tục

Trang 18

- Các lỗi về tài liệu: Các lỗi về tài liệu là vấn đề của các đội phát triển và bảo trì

khi có những sai sót trong các tài liệu liên quan Những lỗi này có thể là nguyên nhân gây ra lỗi trong giai đoạn phát triển kế tiếp và giai đoạn bảo trì

Việc kiểm thử và sửa lỗi phần mềm có thể thực hiện trong bất cứ giai đoạn nào của vòng đời phần mềm Tuy nhiên công việc này nên được thực hiện càng sớm càng tốt vì càng về giai đoạn sau của vòng đời phần mềm, chi phí cho việc tìm và sửa lỗi càng tăng, đặc biệt là đến giai đoạn đã triển khai phần mềm thì chi phí cho sửa lỗi sẽ trở nên rất lớn và ảnh hưởng trực tiếp đến uy tín của tổ chức phát triển phần mềm

1.2 Độ đo phần mềm

Độ đo phần mềm có thể được coi là một độ đo định lượng gán các ký hiệu hoặc

số cho các đặc điểm của các trường hợp được dự đoán [5] Trên thực tế, chúng là các tính năng của các thuộc tính, mô tả nhiều thuộc tính như độ tin cậy, độ phức tạp và chất lượng của các sản phẩm phần mềm Những độ đo này đóng một vai trò quan trọng trong việc xây dựng một bộ dự báo lỗi phần mềm hiệu quả Chúng có thể được chia thành 2 loại chính: độ đo mã nguồn và độ đo quá trình [6]

Độ đo phần mềm được sử dụng để mô tả sự phức tạp của chương trình và để ước tính thời gian phát triển phần mềm Làm thế nào để dự đoán chất lượng phần mềm thông qua các độ đo phần mềm, trước khi nó được triển khai Đây là một câu hỏi hóc búa, kích thích những nỗ lực nghiên cứu để tìm ra câu trả lời cho câu hỏi này Thông thường, độ đo phần mềm làm sáng tỏ các phép đo định lượng của sản phẩm phần mềm hoặc thông số kỹ thuật của phần mềm Các lỗi phần mềm có thể được định nghĩa theo các cách khác nhau nhưng thường được định nghĩa là quang sai từ các thông số kỹ thuật hoặc các kỳ vọng có thể dẫn đến thất bại trong thủ tục Phân tích dữ liệu có hai loại; Phân loại và dự đoán có thể được sử dụng để trích xuất các mô hình mô tả các lớp

dữ liệu lỗi hoặc để dự đoán xu hướng lỗi trong tương lai

1.2.1 Độ đo mã nguồn

❖ Độ đo mã nguồn

Độ đo mã nguồn còn được gọi là độ đo sản phẩm, được thu thập trực tiếp từ mã nguồn hiện tại Những độ đo này đo độ phức tạp của mã nguồn dựa trên giả định rằng các thành phần phần mềm phức tạp có nhiều khả năng chứa lỗi hơn Nhiều độ đo mã nguồn khác nhau đã được sử dụng để dự đoán lỗi phần mềm

Kích thước (Size): độ đo đầu tiên là độ do kích thước được giới thiệu bởi Akiyama Để dự đoán số lỗi, tác giả sử dụng số dòng mã lệnh làm độ đo duy nhất Sau

đó, nhiều nghiên cứu dự đoán lỗi phần mềm đã áp dụng độ đo này để xây dựng các dự đoán Tuy nhiên, chỉ sử dụng độ đo này quá đơn giản để đo độ phức tạp của sản phẩm phần mềm

Halstead và McCabe: Vì lý do này, các độ đó hữu ích được sử dụng rộng rãi và

dễ sử dụng khác đã được áp dụng để tạo ra các mô hình dự đoán lỗi [7, 8] Các độ đo này được gọi là các thuộc tính mã tĩnh được giới thiệu bởi McCabe [9] và Halstead

Trang 19

[10] Các thuộc tính Halstead được chọn lựa trên độ phức tạp đọc của mã nguồn Chúng được xác định bởi cách sử dụng một số độ đo cơ bản được thu thập từ phần mềm bao gồm:

µ1∗ Số lượng toán tử tiềm năng

µ2∗ Số lượng toàn hạng tiềm năng Bốn độ đo đầu tiên tự giải thích trong khi Halstead đề cập đến µ1∗ và µ2∗ là số lượng toán tử và toán hạng tối thiểu có thể có cho một mô-đun và một chương trình tương ứng Độ đo Halstead được xác định bằng cách sử dụng các độ đo ở trên bao gồm:

Bảng 1.2 Mô tả độ đo Halstead

Length: N = N1+N2 Độ dài chương trình

Vocabulary: µ = µ1+ µ2 Kích thước

Volume V = N log2 µ Thông tin nội dung của chương trình

Measure D = (N1/2) * (N2/2) Độ khó của chương trình

Measure E = D*V Yêu cầu thực thi chương trình

Measure B = E^(2/3)/3000 Số lượng lỗi mong muốn trong chương trình

Measure T = E/18 Thời gian để thực thi chương trình

Các thuộc tính của McCabe là các độ đo chu trình thể thiện sự phức tạp của một sản phẩm phần mềm Khác với các thuộc tính Halstead, các thuộc tính của McCabe đo

độ phức tạp của cấu trúc mã nguồn Chúng thu được bằng cách tính số lượng các thành phần, vòng cung và nút được kết nối trong các biểu đồ luồng điều khiển của mã nguồn Mỗi nút của biểu đồ luồng biểu diễn một câu lệnh chương trình trong khi một cung là luồng của kiểm soát từ một câu lệnh khác

Các độ đo của McCabe, Halstead và của Akiyama là những độ đo tiêu biểu của

các độ đo hướng phương thức

Trang 20

số phương thức có trọng số trong lớp, độ sâu của cây thừa kế, số con, tính liên kêt giữa các lớp đối tượng, tính đáp ứng của một lớp, sự thiếu hụt tính gắn kết trong phương thức

Bảng 1.3 Độ đo Chidamber & Kemerer (CK)

DIT Depth of inheritance tree

CBO Coupling between object classes

LCOM Lack of cohesion of methods

Các độ do trong bảng 1-3 được mô tả như sau:

- Weighted methods per class (WMC): Độ đo này đo lường sự phức tạp của một lớp riêng lẻ Nó là một tổng trọng số của tất cả các phương thức trong một lớp

- Depth of inheritance tree(DIT): Độ đo này đo chiều dài của đường dẫn trong cây thừa kế dài nhất ở một lớp Nếu cây thừa kế cho lớp được đo sâu hơn thì sẽ khó ước lượng được hành vi của lóp

- Number of children (NOC): Độ đo này tính số lượng các lớp con kế thừa ngay

từ lớp hiện tại

- Coupling between object classes (CBO): Độ đo này đo lường sự phụ thuộc của một lớp đối với những lớp khác bằng cách đếm số lượng các lớp khác phụ thuộc với lớp được đo Một lớp phụ thuộc với các lớp khác nếu nó gọi các biến hoặc các hàm của các lớp khác [12]

- Rẹsponse for a class (RFC): độ đo đếm số phương thức có khả năng được thực thi để đáp ứng với một thông điệp nhận được bởi một đối tượng của một lớp [13]

- Lack of cohesion of methods (LCOM): Độ đo này là hiệu số cặp phương thức không chia sẻ biến từ số cặp phương thức chia sẻ ít nhất một biến

❖ Độ đo hướng đối tượng

Việc đo lường của các hệ thống hướng đối tượng được bắt nguồn từ các kỹ thuật thiết kế truyền thống, ví dụ, sự phụ thuộc (coupling) và sự gắn kết (cohesion) và sau

đó được thông dịch cho các phương pháp tiếp cận hướng đối tượng Chidamber và Kemerer đã đề xuất đo cho các hệ thống hướng đối tượng, còn được gọi là độ đo hướng đối tượng Chidamber và Kemerer (độ đo CK OO) Trong các nghiên cứu tiếp theo thì hướng đối tượng được dựa trên một lớp là một tập hợp các đối tượng có các thuộc tính chung và một phương thức là một hoạt động trên một đối tượng được xác định là một phần của khai báo của lớp

Độ đo OO được chia thành các loại khác nhau bao gồm kích thước (size), sự phụ thuộc (coupling), sự gắn kết (cohesion), tính kế thừa (inheritance), ẩn thông tin

Trang 21

(information hide), tính đa hình (polymorphism) và độ đo tái sử dụng (reuse)

Dưới đây là bảng các độ đo phần mềm hướng đối tượng [14]:

Bảng 1.4 Độ đo hướng đối tượng

2 Number of Attributes per Class

3 Number of Methods per Class

4 Weighted Methods per Class

5 Coupling between Objects (CBO) Coupling [Chidamber94]

6 Data Abstraction Coupling (DAC) Coupling [Henderson96]

7 Message Passing Coupling (MPC) Coupling [Henderson96]

10 Tight Class Cohesion (TCC) Cohesion [Braind99]

11 Loose Class Cohesion (LCC) Cohesion [Braind99]

12 Information based Cohesion

13 Method Hiding Factor (MHF) Information

14 Attribute Hiding Factor (AHF) Information

15 Number of Children (NOC) Inheritance [Chidamber94]

16 Depth of Inheritance (DIT) Inheritance [Chidamber94]

17 Method Inheritance Factor (MIF) Inheritance [Harrison98]

18 Attribute Inheritance Factor (AIF) Inheritance [Harrison98]

19 Number of Methods Overridden

20 Polymorphism Factor (PF) Polymorphism [Harrison98]

a Độ đo kích thước (Size)

Bốn độ đo kích thước được trình bày để đo kích thước của hệ thống và cho thấy mức độ phức tạp của lớp [14, 15] Độ đo kích thước dựa trên các thuộc tính và phương pháp

Trang 22

➢ Number of Attributes per Class (NOA) được tính theo số lượng thuộc tính

trong một lớp

➢ Number Of Methods per Class (NOM) là tổng số phương thức trong một

lớp

➢ Weighted Methods per Class (WMC) độ đo này nhằm liên quan đến khái

niệm về độ phức tạp Đối với một lớp C với các phương thức M1; M2; …; Mn; trọng

số tương ứng với độ phức tạp c1,c2,…, cn được tính như sau:

WMC = ∑𝑛 𝐶𝑖

➢ Response For a Class (RFC) được tạo bởi RFC = | RS | với RS là tập phản

hồi của một lớp Với số lượng phương thức trong một lớp, Ri = {Rij} là tập của các

phương thức được gọi bởi Mi

b Độ đo phụ thuộc (Coupling)

Coupling metrics là độ đo để tính toán khớp nối giữa các lớp Các yếu tố quyết định là các thực thể và quan hệ trong phạm vi và các loại của chúng, ví dụ: lớp, phương thức, hàm tạo, gọi, truy cập, v.v [16]

➢ Coupling Between Objects – CBO cho một sự đo lường lớp cho biết một lớp

phụ thuộc vào lớp khác [Chidamber & Kemerer] Coupling có nghĩa là một đối tượng của một lớp sử dụng các phương thức hoặc thuộc tính của một đối tượng trong một lớp khác

➢ Data Abstraction Coupling – DAC đo độ phức tạp của sự phụ thuộc gây ra

bởi các kiểu dữ liệu trừu tượng (ADT)

➢ Message passing Coupling – MPC đo số lượng cuộc gọi phương thức trong

các phương thức của một lớp với các phương thức trong các lớp khác

c Độ đo gắn kết (Cohesion)

Cohesion Metrics là độ đo để tính toán sự gắn kết nội bộ của các lớp Các yếu tố quyết định là các thực thể và quan hệ trong lớp và các loại của chúng, ví dụ: phương thức, hàm tạo, trường, lệnh gọi, truy cập, v.v [16]

➢ Lack of Cohesion in Methods - LCOM được đo bằng số lượng phương thức

trong một lớp truy cập vào một hoặc nhiều thuộc tính giống nhau LCOM của một lớp đạt giá trị cao có nghĩa rằng các lớp ít gắn kết hơn Do đó LCOM mong muốn một giá trị thấp

➢ Tight Class Cohesion – TCC được sử dụng để xác định tỷ lệ phần trăm của

các cặp phương thức là public có thuộc tính chung trong một lớp

➢ Loose Class Cohesion – LCC trình bày tỷ lệ phần trăm của các cặp phương

thức là public được kết nối trực tiếp hoặc gián tiếp trong một lớp

➢ Information flow based Cohesion – ICH xác định số lượng các phương thức

khác được gọi trong một phương thức của cùng một lớp

Trang 23

d Độ đo thừa kế (Inheritcance Metrics)

Inheritance Metrics là độ đo để định lượng hệ thống phân cấp thừa kế của các lớp Các yếu tố quyết định là các thực thể và các mối quan hệ trong phạm vi và loại của chúng, ví dụ: lớp, giao diện, triển khai, mở rộng, v.v [16]

➢ Depth of Inheritance Tree - DIT Trong một hướng đối tượng, miền ứng

dụng được mô hình hóa như là hệ thống phân cấp của các lớp Hệ thống phân cấp này

có thể được biểu diễn dưới dạng cây, được gọi là cây thừa kế Các nút trong cây, được gọi là cây thừa kế Các nút trong cây đại diện cho các lớp và đối với mỗi lớp như vậy,

độ đo DIT là độ dài lớn nhất của đường dẫn tối đa từ nút đến gốc của cây Biện pháp này liên quan đến khái niệm phạm vi của các thuộc tính DIT là thước đo xem có bao nhiêu lớp tổ tiên có khả năng ảnh hưởng đến lớp này

➢ Number of Children – NOC là tổng số nút con cho mỗi lớp

➢ Method Inheritance Factor - MIF đo lường số lượng phương thức được kế

thừa trên tỷ lệ của tổng số phương thức và được đưa ra như sau:

MIF = ∑ 𝑀𝑖(𝐶𝑖)

𝑇𝐶 𝑖=1

Trong đó Ma(Ci) = Mi(Ci) + Md(Ci)

TC = tổng số lớp

Md(Ci) = số lớp được khai báo

Mi(Ci) = số lượng lớp thừa kế trong một lớp

➢ Attribute Inheritance Facto - AIF số lượng các thuộc tính được kế thừa trên

tỷ lệ của tổng số thuộc tính và được tính như sau:

AIF = ∑ 𝐴𝑑(𝐶𝑖)

𝑇𝐶 𝑖=1

Trong đó Aa(Ci) = Ai (Ci) + Ad (Ci)

TC = tổng số lớp

Ad(Ci) = số thuộc tính được khai báo trong lớp

Ai(Ci) = số thuộc tính thừa kế trong lớp

e Độ đo đa hình (Polymorphism Metrics)

➢ Polymorphism Factor - PF đo lường mức độ một loại dẫn xuất ghi đè một phương thức từ lớp cơ sở PF được tính bằng:

PF = ∑ ∑𝑇𝐶𝑖=1𝑀𝑜(𝐶𝑗)

[𝑀𝑛(𝐶𝑖)∗𝐷𝐶(𝐶𝑖)]

𝑇𝐶 𝑖=1

Mn(Ci) = Số lượng phương thức mới

Mo(Ci) = Số lượng phương thức ghi đè

DC(Ci) = Descendent Count

f Độ đo tái sử dụng (Reuse metrics)

Hệ thống hướng đối tượng hỗ trợ các nhà phát triển thiết kế và sử dụng lại mã nguồn, Yap và Henderson-sell thảo luận về hai biện pháp tái sử dụng các độ đo

Trang 24

➢ Tỉ lệ Reuse Ratio (U) được định nghĩa như sau:

vì được tính trực tiếp từ mã nguồn hiện tại, các độ đo quy trình được tạo từ các kho phần mềm như hệ thống theo dõi lỗi và các hệ thống kiểm soát phiên bản Các độ đo này tập trung vào các thuộc tính liên quan đến quá trình phát triển phần mềm; ví dụ, thay đổi mã nguồn, chi phí hoặc hiệu quả của các phương pháp được sử dụng

1.2.3 Đánh giá thuật toán

Để đánh giá hiệu quả của các thuật toán phân lớp, người ta thường sử dụng độ đo Accuracy [18], được tính bằng tỉ lệ giữa số kết quả dự đoán đúng và số kết quả dự đoán được Mỗi bài toán phân lớp nhị phân có một ma trận nhầm lẫn:

Thực tế có lỗi Thực tế không lỗi

Gồm 4 khả năng dự đoán có thể xảy ra đó là:

- Dương tính thật (TP: True Positive)

- Âm tính thật (TN: True Negative)

- Dương tính giả (FP: False Positive)

- Âm tính giả (FN: False Negative)

Đối với bài toán dự đoán lỗi phần mềm, nếu một mẫu được phân lớp là có lỗi và thực sự nó là lỗi thì đó là dương tính thật, nếu một mẫu không lỗi bị phân loại nhầm thành có lỗi thì nó là dương tính giả Tương tự như vậy, âm tính thật chỉ ra trường hợp mẫu được dự đoán là không lỗi và thực sự nó cũng không có lỗi, trong khi âm tính giả chỉ ra một trường hợp dự đoán một mẫu có lỗi thành không lỗi Dương tính giả dẫn đến lãng phí nguồn lực dành cho việc giám sát một thành phần chương trình đã có chất lượng tốt, ngược lại âm tính giả gây ra lỗi nghiêm trọng hơn vì nó dẫn đến việc bỏ lỡ

cơ hội tìm thấy một thành phần bị lỗi thực sự

Độ chính xác Accuracy của một thuật toán phân lớp trên một tập dữ liệu đã cho được định nghĩa như công thức

Accuracy = 𝑇𝑃 + 𝐹𝑃

Ngoài ra, các phép đo đánh giá khác thường được sử dụng trong cộng đồng nghiên cứu để tạo ra các đánh giá toàn diện hơn cho bài toán học từ dữ liệu không cân bằng

Trang 25

Precision: Số đoạn mã có lỗi được phân loại đúng trên tổng số đoạn mã được

phân loại có lỗi Tiêu chí này tượng trưng cho độ chính xác phân loại lỗi của mô hình Precision càng lớn thì mô hình dự đoán lỗi càng chính xác [19]:

Recall: Số đoạn mã có lỗi được phân loại đúng trên tổng số đoạn mã có lỗi Tiêu

chí này tượng trưng cho độ nhạy với lỗi của thuật toán [20]

Hình 1.1 Đường cong ROC

1.3 Dự đoán lỗi phần mềm

Dự đoán lỗi trong phần mềm (SDP – Software Defect Prediction) [22] là quá trình xác định các bộ phận của hệ thống phần mềm có thể chứa lỗi hay không Việc áp dụng các mô hình SDP sớm trong vòng đời phần mềm được kiểm tra nghiêm ngặt hơn

so với các phần khác của hệ thống phần mềm Điều này dẫn đến việc giảm chi phí nhân lực trong quá trình phát triển và làm giảm công việc bảo trì Các mô hình SDP được xây dựng bằng ba cách tiếp cận:

- Bằng cách sử dụng các thuộc tính có thể đo được của hệ thống phần mềm được gọi là Độ đo mã nguồn [14]

- Bằng cách sử dụng dữ liệu lỗi từ một dự án phần mềm tương tự

- Bằng các phiên bản phát hành trước đó

Sau khi được xây dựng, mô hình SDP có thể được áp dụng cho các dự án phần mềm trong tương lai và do đó có thể xác định các phần dễ bị lỗi của hệ thống phần mềm

Trang 26

Ban đầu, các mô hình được sử dụng cho SDP được xây dựng bằng các kỹ thuật thống kê, nhưng để làm cho mô hình trở nên thông minh, tức là có khả năng thích ứng với việc thay đổi dữ liệu theo cách mà quá trình phát triển trưởng thành, mô hình SDP cũng trưởng thành; điều quan trọng là các kỹ thuật học máy được sử dụng trong khi xây dựng các mô hình SDP Trong quá khứ, một số lượng lớn các nghiên cứu mô hinh SDP đã sử dụng các kỹ thuật học máy

Chẳng hạn, một số tác giả đã sử dụng Cây quyết định và Mạng Neural nhân tạo (ANN) để xây dựng các mô hình SDP bằng cách sử dụng các số liệu hướng đối tượng (OO) [22]

1.4 Mô hình dự đoán lỗi phần mềm

Chất lượng của phần mềm là một trong những chỉ số hiệu suất quan trọng nhất trong công nghệ phần mềm Do đó, nghiên cứu trong lĩnh vực dự đoán lỗi phần mềm đang tăng lên từng ngày và độ tin cậy của phần mềm sẽ là một sự gia tăng nhất định với dự đoán chính xác về lỗi phần mềm Chìa khóa để dự đoán lỗi phần mềm là làm thế nào để cải thiện độ chính xác của nó, đó là cách xác định các mô-đun và phân loại chúng Nếu các mô-đun được chia thành các mô-đun bị lỗi và các mô-đun không có lỗi, thì làm thế nào để tìm ra chính xác sự tồn tại của các mô-đun dễ bị lỗi trong các sản phẩm phần mềm

Lỗi phần mềm là lỗi hoặc sai sót trong chương trình hoặc hệ thống máy tính có thể tạo ra kết quả không chính xác hoặc không mong muốn hoặc khiến phần mềm không hoạt động như dự định Một nhóm phát triển dự án phần mềm luôn khao khát tạo ra một sản phẩm phần mềm chất lượng với số lượng lỗi bằng không hoặc ít nhất có thể Các thành phần rủi ro cao trong dự án phần mềm nên được nắm bắt càng sớm càng tốt, để nâng cao chất lượng phần mềm Thực tế không thể loại bỏ từng lỗi nhưng việc giảm mức độ lỗi xuất hiện và ảnh hưởng xấu của chúng đối với các dự án là có thể đạt được

Các mô hình dự đoán lỗi phần mềm được xem là một trong những hoạt động hữu ích và tiết kiệm chi phí nhất Các học viên phần mềm coi đó là một giai đoạn quan trọng mà chất lượng sản phẩm được phát triển phụ thuộc vào Nó đã chiếm phần lớn trong việc đưa ra các cáo buộc về ngành công nghiệp phần mềm, không có khả năng cung cấp các yêu cầu trong ngân sách và đúng hạn Bên cạnh đó, phản hồi của khách hàng về chất lượng sản phẩm đã cho thấy sự thay đổi lớn từ không đạt yêu cầu sang đạt yêu cầu Do đó, dự đoán lỗi là vô cùng cần thiết trong lĩnh vực chất lượng phần mềm và độ tin cậy của phần mềm

Trong số các mô hình về dự đoán lỗi, phương pháp sử dụng các độ đo về kích thước và độ phức tạp khá nổi tiếng và phổ biến Mô hình này sử dụng mã nguồn chương trình làm cơ sở để dự đoán các lỗi có thể xảy ra Cụ thể hơn, các dòng mã được sử dụng để phân tích thành các số liệu độ đo mã nguồn dùng trong các mô hình Các mô hình sử dụng đồ đo về kích thước và độ phức tạp giả định rằng lỗi được xảy ra

Trang 27

do kích thước và độ phức tạp của chương trình gây ra Mơ hình này bỏ qua các hiệu ứng thơng thường cơ bản của các lập trình viên và nhà thiết kế Chúng là các yếu tố con người thực sự bắt đầu các khiếm khuyết, do đĩ, bất kỳ sự quy kết nào cho mã bị lỗi phụ thuộc vào (các) cá nhân ở một mức độ nhất định Khả năng thiết kế kém hoặc khĩ khăn vấn đề cĩ thể dẫn đến các chương trình rất phức tạp

Từ các nghiên cứu trước đây [23], các nhà nghiên cứu đã chứng minh rằng kỹ thuật học máy là cách tiếp cận tốt nhất để dự đốn mức độ lỗi Mơ hình dự đốn lỗi phần mềm sử dụng bộ dữ liệu lỗi của NASA cĩ sẵn từ kho lưu trữ của Promise và áp dụng phương pháp xác thực chéo Theo cách tiếp cận chéo k, tập dữ liệu ban đầu của được chia ngẫu nhiên thành k, D1, D2, Dk, Dk cĩ kích thước xấp xỉ bằng nhau Kỹ thuật được đào tạo và thực nghiệm với k lần Trong mỗi lần, một lần được sử dụng để kiểm tra và các phần cịn lại được sử dụng để huấn luyện mơ hình Quá trình được lặp lại cho đến khi mỗi lần k được sử dụng làm tập kiểm tra Độ chính xác tổng thể được ước tính bằng cách lấy trung bình các kết quả của mỗi vịng lặp

Nghiên cứu thực nghiệm được thực hiện theo các bước sau:

- Kiểm sốt các kỹ thuật học máy: Logistic Regression, K-nearest Neighbors, Decision Tree, Random Forest, Nạve Bayes, Support Vector Machine và Multilayer Perceptron; Chọn tập dữ liệu từ NASA MDP Promise và cân bằng các tập dữ liệu trong trường hợp các tập dữ liệu cĩ tỷ lệ bị mất cân bằng cao

- Sử dụng phương pháp xác nhận chéo để đánh giá hiệu quả của các kỹ thuật máy học trong việc dự đốn lỗi

- Xác định độ nhạy, độ chính xác, độ nhớ, độ đo F, AUC cho từng kỹ thuật và phân tích so sánh đường cong ROC giữa các kỹ thuật khác nhau ở cấp độ lớp và cấp

độ phương pháp

- Cuối cùng là phân tích kết quả và xác định kỹ thuật nào phù hợp để dự đốn lỗi

Mơ hình phụ thuộc vào chất lượng của các bộ dữ liệu được sử dụng, do đĩ việc chọn bộ dữ liệu đĩng vai trị quan trọng Theo Catal và Diri [24], bằng cách sử dụng kho lưu trữ Promise [25], kết quả dự đốn là đáng tin cậy hơn Trong dự đốn lỗi, các

số liệu cấp độ lớp và số liệu cấp độ đối tượng được sử dụng thường xuyên để phân tích hiệu suất của các kỹ thuật học máy

Bên cạnh đĩ, các thuật tốn học máy đã chứng minh ý nghĩa thực tiễn to lớn trong việc giải quyết một loạt các vấn đề kỹ thuật bao gồm dự đốn về các lỗi cĩ thể xảy ra hoặc đưa ra các khuyến nghị về lỗi sẽ xảy ra khi phần mềm hệ thống phát triển phức tạp hơn [26]

- Mơ hình dự đốn lỗi sử dụng Bayesian Belief Network

- Mơ hình dự đốn lỗi dựa trên thuật tốn di truyền

- Mơ hình dự đốn lỗi sử dụng Mạng Nơ-ron nhân tạo

Trang 28

1.5 Dữ liệu không cân bằng trong bài toán dự đoán lỗi

Vấn đề mất cân bằng dữ liệu xảy ra khi trong tập dữ liệu có lớp chứa số mẫu nhiều hơn các lớp khác, cụ thể là lớp chứa mẫu có lỗi ít hơn mẫu không bị lỗi Phân loại chính xác cho mẫu thuộc lớp thiểu số trong tập mất cân bằng là khó khăn Khi tỷ lệ mất cân bằng của tập dữ liệu càng cao thì việc phát hiện được mẫu của lớp nhỏ càng khó

Dữ liệu thu được trong các bộ dữ liệu thực tế thường là các tập dữ liệu mất cân bằng Tập mất cân bằng thường xuất hiện trong các lĩnh vực như chẩn đoán y tế, giám sát hệ thống mạng, phát hiện xâm nhập hệ thống… Trong bài toán dự đoán lỗi thì số lượng mẫu có lỗi chỉ chiếm thiểu số so với số mẫu không lỗi, điều này dẫn đến việc các mô hình dự đoán lỗi có thể tính toán và phân tích hệ thống phần mềm sai lệch, có thể gây ra những lỗi ngoài ý muốn Thông thường trong bài toán này lớp cần quan tâm lại có rất ít mẫu so với các lớp không lỗi chiếm đa số trong tập dữ liệu Việc đoán đúng nhãn của mẫu thuộc lớp nhỏ là cần thiết và quan trọng Nếu mẫu thuộc lớp nhỏ

có nhãn sai thì phần mềm sẽ phát sinh lỗi bất kỳ lúc nào và nhà phát triển phần mềm phải trả chi phí và nhân lực cho việc phân tích, chi phí vá lỗi cao hơn nhiều so với việc gán đúng nhãn

Khó khăn với các bộ dữ liệu không cân bằng là các thuật toán học phân loại tiêu chuẩn thường nghiêng về lớp đa số và do đó có tỷ lệ phân loại sai cao hơn cho các trường hợp của lớp thiểu số [27] Do đó, các thuật toán học máy và các kỹ thuật lấy mấu dữ liệu được cải thiện hoặc được nghiên cứu mới nhằm giải quyết vấn đề này Chúng có thể được phân loại thành ba nhóm chính:

- Lấy mẫu dữ liệu: Trong đó các số lượng và chất lượng của mẫu dữ liệu được

thay đổi sao cho mẫu ở các lớp được cân bằng hơn

- Sửa đổi thuật toán: Quy trình này được định hướng theo hướng thích ứng của

các phương pháp học máy để được hòa hợp hơn với các vấn đề mất cân bằng lớp

- Chấp nhận chi phí: Loại giải pháp này kết hợp các cách tiếp cận ở cấp dữ liệu,

ở cấp độ thuật toán hoặc ở cả hai cấp độ kết hợp, xem xét chi phí cho việc phân loại sai các ví dụ của lớp thiểu số đối với lớp đa số Do đó, người ta thường chấp nhận chi phí để giảm thiểu được lỗi tốt nhất có thể

Các bài toán phân loại trên thực tế thường phải xử lý dữ liệu không được “cân bằng” Trong những trường hợp này, một trong những lớp cần phân loại có thể có số mẫu dữ liệu vượt trội hơn hẳn những lớp khác (ví dụ >90%) Lúc này dù mô hình có cho ra độ chính xác >90% cũng chưa thể nói lên điều gì Để xứ lý vấn đề này chúng ta cần sử dụng một vài kỹ thuật cân bằng lại dữ liệu

Mặc dù một số mô hình đã cho thấy có hiệu quả trong các nghiên cứu thực nghiệm, các mô hình như vậy đáp ứng tốt trong việc dự đoán lớp đa số nhưng lại kém hơn trong dự đoán lớp thiểu số (các mô-đun bị lỗi) Vấn đề này làm nảy sinh yêu cầu cần phải xây dựng một tập dữ liệu huấn luyện có tính cân bằng giữa các loại mẫu Tuy nhiên, Menzies et al đã chứng minh rằng các bộ dữ liệu khác nhau dẫn đến

Trang 29

độ chính xác dự đoán khác nhau [28] và thường độ chính xác phụ thuộc vào độ đo hoặc tính năng khác nhau thay đổi từ bộ dữ liệu này sang bộ dữ liệu khác Ngoài ra, trong trường hợp xảy ra sự cố dự đoán lỗi, bộ dữ liệu thường có vấn đề mất cân bằng lớp, tức là, số lượng các trường hợp đại diện cho lớp “bị lỗi” ít hơn nhiều so với số lượng các trường hợp đại diện cho lớp “không bị lỗi”

Do đó, các kỹ thuật lấy mẫu khác nhau thường được sử dụng để giải quyết vấn đề này Lấy mẫu dữ liệu là một kỹ thuật phân tích thống kê được sử dụng để chọn, thao tác và phân tích một tập hợp con đại diện của các điểm dữ liệu để xác định các mẫu và

xu hướng trong tập dữ liệu lớn hơn đang được kiểm tra Nó cho phép việc lập mô hình

dự đoán và phân tích dữ liệu làm việc với một lượng dữ liệu nhỏ, có thể quản lý được,

để xây dựng và chạy các mô hình phân tích nhanh hơn, trong khi vẫn tạo ra kết quả chính xác

Lấy mẫu dữ liệu đặc biệt hữu ích với các tập dữ liệu quá lớn để phân tích đầy đủ một cách hiệu quả Xác định và phân tích một nhóm mẫu đại diện hiệu quả và tiết kiệm chi phí hơn so với khảo sát toàn bộ dữ liệu

Trong phạm vi luận văn này, những nghiên cứu sẽ tập trung vào các kỹ thuật lấy mẫu dữ liệu, cụ thể như sau:

- Random Oversampling: liên quan đến việc bổ sung dữ liệu đào tạo với nhiều

bản sao của một số lớp thiểu số Quá khổ có thể được thực hiện nhiều lần (2x, 3x, 5x, 10x, v.v.) Đây là một trong những phương pháp được đề xuất sớm nhất, cũng được chứng minh là mạnh mẽ [29, 30] Thay vì sao chép mọi mẫu trong lớp thiểu số, một số trong số chúng có thể được chọn ngẫu nhiên để sao chép và có mặt trong tập dữ liệu mới cân bằng hơn

- Random Undersampling: Loại bỏ ngẫu nhiên các mẫu từ lớp đa số Đây là

một trong những kỹ thuật sớm nhất được sử dụng để làm giảm sự mất cân bằng trong

bộ dữ liệu, tuy nhiên, nó có thể làm tăng phương sai của trình phân loại và có khả năng loại bỏ các mẫu hữu ích hoặc quan trọng [31, 32]

- SMOTE: Có một số phương pháp có sẵn để ghi đè lên một tập dữ liệu được sử

dụng trong một vấn đề phân loại điển hình (sử dụng thuật toán phân loại để phân loại một tập hợp các hình ảnh, được cung cấp một tập các hình ảnh được dán nhãn) Kỹ thuật phổ biến nhất được gọi là SMOTE: Synthetic Minority Over-sampling Technique [33] Ví dụ, xem xét một bộ dữ liệu của các loài chim để phân loại Không gian đặc trưng cho lớp thiểu số muốn chồng lên có thể là chiều dài mỏ, sải cánh và trọng lượng (tất cả liên tục) Để sau đó lấy mẫu, lấy một mẫu từ bộ dữ liệu và xem xét

k lân cận gần nhất của nó (trong không gian tính năng) Để tạo một điểm dữ liệu tổng hợp, lấy vectơ giữa một trong những k lân cận đó và điểm dữ liệu hiện tại Nhân vectơ này với một số ngẫu nhiên x nằm giữa 0 và 1 Thêm điểm này vào điểm dữ liệu hiện tại để tạo điểm dữ liệu tổng hợp mới [32]

Trang 30

1.6 Kết luận chương 1

Dự đoán lỗi là một phương pháp để xác định sớm các lỗi trong hệ thống phần

mềm Nó thực hiện trên các thành phần mã nguồn riêng rẽ để xác định các thành phần nào có nguy cơ xảy ra lỗi hoặc đự đoán được số lỗi trong từng đoạn mã nguồn

Các kỹ thuật tiền xử lý dữ liệu rất quan trọng và được sử dụng rộng rãi trong học máy, nền tảng của hầu hết các nghiên cứu dự đoán lỗi phần mềm Có nhiều yếu tố ảnh hưởng tiêu cực đến hiệu suất của thuật toán học máy như tập dữ liệu bị mất cân bằng Vấn đề này có thể được giải quyết bằng cách sử dụng các kỹ thuật lấy mẫu để tiền xử

lý dữ liệu, đưa dữ liệu đạt mức cân bằng giữa lớp thiểu số và đa số Vì sự khác biệt trong việc lựa chọn mô hình, đối tượng và độ đo giữa các nghiên cứu, kỹ thuật tiền xử

lý dữ liệu có thể hoặc không được sử dụng và chúng được áp dụng theo nhiều cách khác nhau tùy thuộc vào từng nghiên cứu

Trang 31

Chương 2

KỸ THUẬT LẤY MẪU DỮ LIỆU

Chương này trình bày các khái niệm về lẫy mẫu dữ liệu và các kỹ thuật lấy mẫu

dữ liệu: Random Undersampling, Random Oversampling và SMOTE Làm rõ sự cần thiết của việc lấy mẫu khi mà các công cụ học máy đang phải đối mặt với một vấn đề gọi là "mất cân bằng dữ liệu" Một tập dữ liệu bị mất cân bằng nếu số lượng mẫu được gắn nhãn lỗi chỉ chiếm thiểu số so với mẫu được gắn nhãn không lỗi Đi sâu phân tích các chiến lược và cách tiếp cận dữ liệu của từng kỹ thuật Đánh giá các ưu nhược điểm của từng kỹ thuật khi xử lý dữ liệu Dựa vào đó, xây dựng mã nguồn của mỗi kỹ thuật tham gia thực nghiệm

2.1 Khái niệm và sự cần thiết việc lấy mẫu dữ liệu

2.1.1 Khái niệm

Trong những năm trở lại đây, vấn đề dữ liệu mất cân bằng là một trong những vấn đề quan trọng và đã nhận được nhiều sự quan tâm của các nhà nghiên cứu trên thế giới Một tập dữ liệu được gọi là mất cân bằng khi số lượng phần tử thuộc về một nhãn lớp bé hơn nhiều so với các nhãn lớp khác Trong bài toán dự đoán lỗi phần mềm, lớp

có số mẫu bị lỗi ít hơn được gọi là lớp thiểu số và lớp có số mẫu không bị lỗi được gọi

là lớp đa số

Bài toán phân lớp dữ liệu mất cân bằng là một bài toán phổ biến trong thực tế, nhằm phát hiện các đối tượng hiếm nhưng quan trọng, chẳng hạn như trong bài toán

dự đoán lỗi phần mềm là một trong những bài toán điển hình của sự phân lớp nhị phân

dữ liệu lỗi / không lỗi … Trong một số trường hợp, tỷ lệ giữa các phần tử thuộc lớp thiểu số so với các phần tử thuộc lớp đa số có thể lên đến 1:100 hoặc 1:100,000 [34] Khi áp dụng các thuật toán phân lớp truyền thống lên các tập dữ liệu mất cân bằng, đa số các phần tử thuộc lớp đa số sẽ được phân lớp đúng và các phần tử thuộc lớp thiểu số cũng sẽ được gán nhãn lớp là nhãn lớp của lớp đa số Điều này dẫn đến kết quả là độ chính xác của việc phân lớp rất cao trong khi giá trị sensitivity (độ nhạy) lại rất thấp

Nhiều phương pháp đã được đề xuất để giải quyết vấn đề này và được phân thành hai nhóm cơ bản: tiếp cận ở mức giải thuật và tiếp cận ở mức dữ liệu Các phương pháp tiếp cận ở mức giải thuật hướng tới việc điều chỉnh các thuật toán phân lớp cơ bản để vẫn có hiệu quả cao trên các tập dữ liệu mất cân bằng Các phương pháp tiếp cận ở mức dữ liệu nhắm tới thay đổi sự phân bố các đối tượng bằng cách sinh thêm các phần tử cho lớp thiểu số như Oversampling, SMOTE, hay giảm bớt các phần tử thuộc lớp đa số để làm giảm sự mất cân bằng giữa các lớp đối tượng Nhiều nghiên cứu đã chỉ ra rằng các phương pháp tiếp cận ở mức dữ liệu hiệu quả hơn các phương pháp còn lại trong việc cải thiện độ chính xác sự phân lớp các tập dữ liệu mất cân bằng [35]

Trang 32

2.1.2 Sự cần thiết việc lấy mẫu dữ liệu

Nhiều bài toán thực tế liên quan đến việc mất cân bằng dữ liệu Các bài toán này thường khó hơn các bài toán phân lớp thông thường Giả sử tỉ lệ lỗi : không lỗi là 1:99, nếu bộ phân lớp dự đoán các mẫu dữ liệu thuộc lớp không có lỗi (lớp chiếm đa số) thì

độ chính xác là 99% Tuy nhiên, điều này không đồng nghĩa với việc ta có một bộ phân lớp tốt vì tất cả các mẫu dữ liệu ở lớp thiểu số (lớp có ít dữ liệu lỗi) đều bị phân loại sai Thường thì tập này quan trọng hơn (là tập không lỗi) và ta không muốn dự đoán sai, tức ta muốn tỉ lệ trên được cân bằng

Vấn đề phân loại các tập mẫu dữ liệu thành các tập lỗi hay không lỗi là phổ biến trong bài toán dự đoán lỗi phần mềm Các công cụ học máy như Support Vector Machine (SVM); Logistic Regression (LR),… được sử dụng rộng rãi trong các mô hình dự đoán và phân loại Mục tiêu chính của các chiến lược phân loại này là dự đoán một kết quả phân đôi (lỗi/không lỗi)

Các công cụ học máy đang phải đối mặt với một vấn đề gọi là "mất cân bằng dữ liệu" Một tập dữ liệu bị mất cân bằng nếu số lượng mẫu được gắn nhãn lỗi chỉ chiếm thiểu số so với mẫu được gắn nhãn không lỗi Khi học từ dữ liệu mất cân bằng cao, hầu hết các mô hình dự đoán lỗi bị ảnh hưởng bởi lớp đa số sẽ dẫn đến việc dự đoán lỗi phần mềm sai lệch

Hầu hết các tập dữ liệu được sử dụng trong bài toán dự báo lỗi phần mềm đều có

sự mất cân bằng giữa lỗi hay không lỗi Các phương pháp lấy mẫu có xu hướng điều chỉnh phân lớp giữa các nhóm thiểu số và đa số trong tập dữ liệu để không bị mất cân bằng Kỹ thuật lấy mẫu có thể được phân loại thành kỹ thuật lấy mẫu cơ bản và kỹ thuật lấy mẫu tiên tiến Các kỹ thuật lấy mẫu cơ bản bao gồm các phương pháp như Lấy mẫu ngẫu nhiên (RUS – Random Undersampling) của lớp đa số, Lấy mẫu quá mức ngẫu nhiên (ROS – Random Oversampling) của lớp thiểu số hoặc một số các kỹ thuật nâng cao hơn trong từng kỹ thuật Undersampling hay Oversampling Mặt khác, các kỹ thuật lấy mẫu tiên tiến về cơ bản dựa trên ý tưởng về phương pháp lấy mẫu có hướng dẫn đã được sử dụng bằng các phương pháp đặc biệt

Thông thường, việc sử dụng các phương pháp lấy mẫu trong các ứng dụng học tập mất cân bằng bao gồm sửa đổi dữ liệu mất cân bằng được thiết lập bởi một số cơ chế để cung cấp phân phối cân bằng Các nghiên cứu đã chỉ ra rằng, một bộ dữ liệu cân bằng cung cấp hiệu suất phân loại tổng thể được cải thiện so với một bộ dữ liệu không cân bằng [36, 37, 38] Những kết quả này chứng minh cho việc sử dụng các phương pháp lấy mẫu là cần thiết cho các mô hình học máy học khi học các tập dữ liệu cân bằng Tuy nhiên, trong một số trường hợp hiếm gặp, thì việc học từ các bộ dữ liệu mất cân bằng có thể cho kết quả có thể so sánh được với các tập dữ liệu cân bằng [39, 40] Tuy nhiên, đối với hầu hết các tập dữ liệu mất cân bằng, việc áp dụng các kỹ thuật lấy mẫu thực sự giúp cải thiện độ chính xác của phân loại

Trang 33

2.1.3 Random Undersampling

Random Undersampling là một cách tiếp cận lấy mẫu rất đơn giản, loại bỏ ngẫu nhiên một số mẫu ở lớp đa số để cân bằng tập dữ liệu Khái niệm về Undersampling rất đơn giản và nó thực thi nhanh hơn so với nhiều kỹ thuật khác [41, 42]

Chiến lược của Random Undersampling:

1 Tải dữ liệu và xác định lớp thiểu số và đa số;

2 Tính toán số lượng phiên bản cần loại bỏ dựa trên tỷ lệ phần trăm của mẫu;

3 Xác định một mẫu ngẫu nhiên từ lớp đa số và loại bỏ nó khỏi lớp đa số;

4 Lặp lại bước 3 cho đến khi số lượng phiên bản được loại bỏ theo tỷ lệ phần trăm nhất định

Dựa vào đó, chiến lược lấy mẫu của Random Undersampling được mô tả trong Thuật toán 2-1 Cách tiếp cận này mặc định là cân bằng số lượng mẫu lỗi và không lỗi bằng cách loại bỏ ngẫu nhiên các mẫu khỏi các tập dữ liệu Trong trường hợp này, số lượng mẫu được loại bỏ sẽ được tự động tính toán để đảm bảo rằng tổng số mẫu lỗi và không lỗi được cân bằng Thuật toán cũng cho phép đặc tả tỷ lệ phần của kỹ thuật thông qua tham số u Tỷ lệ phần trăm u <1 xác định số lượng mẫu được lấy trong mỗi tập

Thuật toán 2-1: Random Underampling [41]

1: function RandUnder(D; y; 𝜙(y); t R ; u)

// D - Một tập dữ liệu

// y - Biến mục tiêu

// 𝜙(y) - Hàm liên quan do người dùng chỉ định

// tR - Ngưỡng liên quan đến các giá trị y

// u - (tham số tùy chọn) Tỷ lệ phần trăm của undersampling

2: Bins ← BinsConstructor(D; y; t R)

3: BinsU ← {Binsi : ∀(x; y) ∈ Binsi𝜙(y) < tR} //Bins nơi kỹ thuật

được áp dụng

4: newData ← Bins \ BinsU

5: for each B ∈ BinsU do

12: newData ← c(newData; selNormCases) // thêm các

trường hợp vào tập dữ liệu mới

13: end for

14: return newData

15: end function

Trang 34

Kỹ thuật Undersampling thực hiện giữ tất cả các mẫu trong lớp thiểu số và chọn ngẫu nhiên một số lượng mẫu bằng với lớp thiểu số trong lớp đa số để tạo ra tập dữ liệu mới được cân bằng

Hình 2.1 Mô tả thuật toán Undersampling [43]

Trong phạm vi của luận văn này, tôi sử dụng 13 tập dữ liệu lỗi của NASA (chi tiết thông tin của mỗi tập dữ liệu được nêu ở Chương 3) có sẵn từ kho lưu trữ của Promise để thực hiện lấy mẫu dữ liệu phục vụ cho bài toán dự đoán lỗi phần mềm Những bộ dữ liệu này đều chứa các thông số của phần mềm Các tập dữ liệu này có cấu trúc (như hình 2-2)

Hình 2.2 Nội dung file mẫu jm1.arff

Đối với mỗi bộ dữ liệu này, ta có thể nhận biết thông tin như sau:

- @relation: tên của tập dữ liệu

- @attribute: các thuộc tính của tập dữ liệu liên quan đến phần mềm

Trang 35

- @data: dữ liệu của các thuộc tính trên

Ví dụ, trong tập dữ liệu jm1.arff, thuộc tính “label” có kiểu dữ liệu khác với các thuộc tính còn lại, nó dùng để phân lớp các mẫu dữ liệu theo 2 lớp: Y – có lỗi, N – không có lỗi Với những tập dữ liệu khác, thuộc tính này có thể có thể có tên gọi khác nhưng về kiểu dữ liệu và ý nghĩa là như nhau Tổng số lượng mẫu có trong tập dữ liệu này là 7782 mẫu

Hình 2.3 Tỷ lệ lỗi/không lỗi của dữ liệu trong tập jm1.arff

Tỷ lệ mẫu dữ liệu bị lỗi là 21.49% so với mẫu không lỗi là 78.51% Dễ dàng nhận ra rằng, tập dữ liệu này đang bị mất cân bằng

Hình 2.4 Biểu đồ thể hiện tỷ lệ lỗi / không lỗi của tập dữ liệu

Trang 36

Số lượng mẫu lỗi là 1672 mẫu so với 6110 mẫu không lỗi Việc mất cân bằng dữ liệu ảnh hưởng xấu đến những mô hình học máy trong vấn đề giải quyết bài toán dự đoán lỗi phần mềm Những mô hình này khi được học những tập dữ liệu mất cân bằng,

sẽ cho kết quả dự đoán không như mong muốn Những phần mềm, ứng dụng được mô hình dự đoán sẽ cho ra kết quả không tốt và nhà phát triển phần mềm sẽ tiêu tốn thêm thời gian và chi phí để giải quyết vấn đề do chính mô hình gây ra

Tập dữ liệu mất cân bằng sẽ được tính toán tỷ lệ % mất cân bằng giữa hai lớp Lỗi

và Không lỗi Dựa vào tỷ lệ đó, ta có thể tiến hành cân bằng dữ liệu theo thuật toán đã nêu trên Giữ nguyên 1672 mẫu bị lỗi (trong lớp thiểu số) và chọn ngẫu nhiên một số lượng mẫu bằng nhau trong số mẫu không lỗi (trong lớp đa số)

Hình 2.5 Tính toán số lượng mẫu trước và sau khi cân bằng

Tức là, số lượng mẫu không lỗi được lấy ngẫu nhiên sẽ tương ứng với mẫu bị lỗi

là 1672 mẫu Số lượng mẫu sau khi cân bằng sẽ bằng tổng số mẫu lỗi và mẫu được lấy ngẫu nhiên không lỗi là 3344 mẫu

Trang 37

Hình 2.6 Thực hiện lấy mẫu và xuất file dữ liệu đã cân bằng

Tỷ lệ giữa mẫu lỗi và không lỗi sau khi lấy mẫu được cân bằng là 1:1 so với ban đầu tỷ lệ xấp xỉ là 1:3 (21.49% : 78.51%) Biểu đồ thể hiện số lượng mẫu giữa 2 lớp được cân bằng

Hình 2.7 Biểu đồ thể hiện tỷ lệ mẫu lỗi / không lỗi sau khi cân bằng

Trang 38

Phương pháp này tuy tốn ít chi phí về thời gian cũng như bộ nhớ cho quá trình phân lớp nhưng lại dễ làm mất các mẫu quan trọng của lớp đa số Làm giảm khả năng

dự đoán của mô hình dự đoán lỗi phần mềm [42]

2.2 Random Oversampling

Kỹ thuật Oversampling là phương pháp sinh thêm mẫu ở lớp thiểu số (mẫu lỗi)

để cân bằng tỷ lệ Chiến thuật của Oversampling ngược lại với kỹ thuật Undersampling bằng cách [41]:

- Giữ nguyên số lượng mẫu không lỗi ở lớp đa số;

- Tăng số lượng mẫu được chọn ngẫu nhiên ở lớp thiểu số;

Hình 2.8 Mô tả dữ liệu với thuật toán Oversampling [43]

Cách tiếp cận Random Oversampling được mô tả trong Thuật toán 2-2: Random Oversampling [41] Trong chiến lược này, mục tiêu là cân bằng số lượng các mẫu lỗi

và không lỗi với việc chọn ngẫu nhiên một mẫu từ lớp thiểu số, sau đó tạo các bản sao của mẫu bằng cách nhân mẫu đó với một hệ số để gia tăng số lượng mẫu, tiếp tục thực hiện việc tạo bản sao của mẫu lỗi khác đến khi tập dữ liệu được cân bằng Tham số tùy

chọn o cho phép chọn một tỷ lệ phần trăm cụ thể để áp dụng trong tập dữ liệu với các

giá trị liên quan

Trang 39

Cũng với tập dữ liệu jm1, ta có 6110 mẫu không lỗi, tăng số lượng mẫu được chọn ngẫu nhiên trong tập thiểu số gồm 1672 mẫu lỗi Số lượng mẫu sau khi cân bằng

sẽ bằng tổng số mẫu lỗi đã được lấy và tăng lên và mẫu không lỗi là 12220 mẫu

Thuật toán Error! No text of specified style in document.-2: Random

Oversampling [41]

1: function RandOver (D; y; 𝜙(y); t R ; o)

// D - Một tập dữ liệu

// y - Biến mục tiêu

// 𝜙(y) - Hàm liên quan do người dùng chỉ định

// tR - Ngưỡng liên quan đến các giá trị y

// o - (tham số tùy chọn) Tỷ lệ phần trăm của oversampling

12: newData ← c(newData; selNormCases) // thêm các trường

hợp vào tập dữ liệu mới

13: end for

14: return newData

15: end function

Trang 40

Hình 2.9 Tính toán số lượng mẫu trước và sau khi cân bằng, thực thi kỹ thuật lấy mẫu

Tỷ lệ sau khi lấy mẫu cân bằng giữa lỗi và không lỗi là 1:1 Biểu đồ thể hiện tập

dữ liệu sau khi đã cân bằng, số lượng mẫu lỗi và không lỗi bằng nhau

Hình 2.10 Biểu đồ thể hiện tỷ lệ mẫu lỗi / không lỗi sau khi cân bằng với

Random Oversampling

Ngày đăng: 04/05/2021, 16:19

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm