Tải bản đầy đủ (.docx) (73 trang)

Luận văn thạc sĩ dự đoán lỗi phần mềm dựa trên độ đo mã nguồn sử dụng kỹ thuật học kết hợp

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 (5.27 MB, 73 trang )

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

NGUYỄN MẬU HẢI

DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN ĐỘ ĐO
MÃ NGUỒN SỬ DỤNG KỸ THUẬT HỌC KẾT
HỢP

Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 8480101

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN KHOA HỌC:
TS. Lê Thị Mỹ Hạnh

Đà nẵng, 08/2019


LỜI CAM ĐOAN
Tơi cam đoan đây là cơng trình nghiên cứu của riêng tôi. Các số liệu, kết
quả nêu trong luận văn là trung thực và chưa từng được ai cơng bố trong bất kỳ
cơng trình nào khác.

TÁC GIẢ LUẬN VĂN

Nguyễn Mậu Hải



1

MỤC LỤC

MỤC LỤC ............................................................................................................................
DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT VÀ CỤM TỪ .........................................
DANH MỤC CÁC BẢNG ...................................................................................................
DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ ...............................................................................
TỔNG QUAN.......................................................................................................................
1. Đặt vấn đề ......................................................................................................................
2. Mục tiêu và nội dung nghiên cứu ..................................................................................
3. Đối tượng và phạm vi nghiên cứu..................................................................................
4. Phương pháp nghiên cứu ...............................................................................................
5. Ý nghĩa khoa học và thực tiễn ........................................................................................
CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐOÁN LỖI .............................
1.1 Bài toán dự đoán lỗi ....................................................
1.2 Quản lý lỗi phần mềm .................................................
1.3 Hướng tiếp cận dự đoán lỗi phần mềm. ......................
1.4 Độ đo mã nguồn ..........................................................
CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY ....................................................................
2.1 Học có giám sát ...........................................................
2.1 Học khơng có giám sát ................................................
2.2 Các yếu tố cần xem xét khi lựa chọn và áp dụng thuật
2.3 Thuật toán Cây quyết định ..........................................
CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY ..........................
3.1 SDP dựa trên học máy .................................................
3.2 Tiền xử lý dữ liệu ........................................................
3.3 Kỹ thuật Ensemble learning ........................................
3.4 Các thuật toán Ensembles learning cho SDP ..............
3.5 Đánh giá phương pháp dự đoán (Prediction Method e

CHƯƠNG IV: ĐÁNH GIÁ THỰC NGHIỆM CÁC PHƯƠNG PHÁP HỌC KẾT HỢP. 43
4.1 Tập dữ liệu dự đoán lỗi phần mềm .............................
4.2 Xây dựng mơ hình........................................................
4.3 Tiêu chí đánh giá hiệu suất số liệu phần mềm ............
4.4 Kết quả thực nghiệm ...................................................
4.5 Xây dựng website hỗ trợ dự đoán lỗi ..........................
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .........................................................................
TÀI LIỆU THAM KHẢO ..................................................................................................


2

DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN ĐỘ ĐO MÃ NGUỒN
SỬ DỤNG KỸ THUẬT HỌC KẾT HỢP
Học viên: Nguyễn Mậu Hải, Chun ngành: Khoa học máy tính
Mã số: 8480101, Khóa: K35 – KHMT, Trường Đại học Bách khoa - ĐHĐN
Tóm tắt – Lỗi phần mềm gây ảnh hưởng đến thời gian, chất lượng, chi phí, cơng sức và sự
lãng phí các nguồn lực. Phát hiện lỗi trong giai đoạn đầu của quá trình phát triển phần mềm để
khắc phục và sữa chữa sớm là một trong những đòi hỏi để cải thiện chất lượng, làm tăng hiệu quả
phát triển phần mềm. Có nhiều nghiên cứu, áp dụng các kỹ thuật Học máy để xây dựng cơng cụ dự
đốn lỗi nhưng vẫn cịn nhiều vấn đề hạn chế hoặc có thể chỉ phát huy ở một khía cạnh nào đó
trong kỹ thuật phát triển phần mềm. Luận án này cũng nhìn nhận tổng quan trong lĩnh vực quản lý
lỗi phần mềm và dự đốn lỗi, tìm hiểu các thuật tốn Học máy, đồng thời áp dụng kỹ thuật học kết
hợp (ensemble learning) để dự đoán, phát hiện lỗi giúp khắc phục sớm nhằm cải thiện chất lượng
phần mềm. Các kỹ thuật học máy liên quan đến dự đoán lỗi được giới thiệu, đặc biệt là học có giám
sát. Các thuật tốn Dicision Tree, Random Forest, Boosting, Bagging, AdaBoost được nghiên cứu
để áp dụng. Các kỹ thuật học kết hợp được triển khai bằng các mơ hình. Kỹ thuật Stacking được
xây dựng dựa trên các mơ hình emsembles như bộ học cơ sở và sau đó sử dụng Meta-Classifier
tổng hợp kết quả và đưa ra kết quả cuối cùng. Việc đánh giá mơ hình và độ tin cậy của thuật tốn
được thực hiện dựa trên các phép đo F1, ROC, AUC và thời gian huấn luyện. Với những kết quả

trên, tác giả hướng thử nghiệm và tối ưu hóa, tiến đến xây dựng một cơng cụ dự đốn lỗi để áp
dụng trong thực tế sản xuất phần mềm của doanh nghiệp.
Từ khóa – Dự đoán lỗi phần mềm, học kết hợp, độ đo mã nguồn, số liệu phần mềm,
kiểm thử phần mềm.
SOFTWARE DEFECT PREDICTION BASED ON THE SOURCE CODE
MEASUREMENT METHOD USING THE ENSEMBLES LEARNING
Abstract - Software defect affect time, quality, cost, effort and waste of resources. Detecting
errors in the early stages of software development to repair and fix early is one of the requirements
to improve quality, increase efficiency software development. There are many studies, using
machine learning techniques to build software defect prediction tools, but there are still many
problems or can be only promote in a certain aspect in software development techniques. This thesis
also provides an overview in the fields of software error management and defects prediction,
understanding machine learning algorithms and applying techniques of ensemble learning to predict
and detect errors. fix early to improve software quality. Machine learning techniques related to
software defects prediction are introduced, especially supervised learning. Decision Tree, Random
Forest, Boosting, Bagging, AdaBoost algorithms are studied to apply. Ensemble learning techniques
are deployed by models. The Stacking technique is built upon the emsembles models as the base
learner and then uses the Meta-Classifier to summarize the results to produce the result final. The
evaluation of the model and the reliability of the algorithm is done based on F1, ROC, AUC and
training time measurements. With the above results, the author directs testing and optimization,
proceeding to build an error prediction tool to apply in actual software production of enterprises.
Key words – Software defect prediction; ensembles learning; source code measurement,
software metrics; software testing.


3

DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT VÀ CỤM TỪ
Tiếng Anh
Analysis of variance

Bar chart
Binomial distribution
Box plot
Categorical variable
Clock chart
Coefficient of correlation
Coefficient of determination
Coefficient of heterogeneity
Combination
Confidence interval
Continuous variable
Correlation
Covariance
Cross Project Defect Prediction - CPDP
Cross-over experiment
Cumulative probability distribution
Data mining
Decision Tree
Degree of freedom
Determinant
Discrete variable
Dot chart
DS
Ensembles Learning
Estimate
Estimator
Factorial analysis of variance
Feature



Fixed effects
Forcement Learning
Frequency
Function
Heterogeneity
Histogram
Homogeneity
Hypothesis test
Inverse matrix
K-NN
Latin square experiment
Least squares method
Linear Logistic regression analysis
Linear regression analysis
Machine Learning
Matrix
Maximum likelihood method
Mean
Median
Meta-analysis
Missing value
Model
Multiple linear regression analysis
NB
Normal distribution
Object
Parameter
Permutation
Pie chart
Poisson distribution

Polynomial regression


Probability
Probability density distribution
P-value
Quantile
Random effects
Random Forest
Random variable
Relative risk
Repeated measure experiment
Residual
Residual mean square
Residual sum of squares
Scalar matrix
Scatter plot
Semi-Supervised Learning
Significance
Simulation
Software Defect Prediction
Standard deviation
Standard error
Standardized normal distribution
Supervised Learing
Survival analysis
SVM
Traposed matrix
Unsupervised Learning
Variable

Variance
Weight
Weighted mean
With-in Project Defect Prediction - WPDP


6

DANH MỤC CÁC BẢNG

Bảng 1. Số liệu dùng để đo lường các đặc trưng lỗi phần mềm .........................................
Bảng 2.
Kết quả các thuật toán học kết hợp và Cây qu
Bảng 3.
Kết quả F1 của các thuật toán Stacking ..........
Bảng 4.
Kết quả AUC của các thuật toán Stacking ......
Bảng 5.
Kết quả thời gian huấn luyện của các thuật toá


7

DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ

Hình 1. Các nhóm tham số khác nhau về độ đo trong công nghệ phần mềm ....................
Hình 2. Thuật tốn học máy ...............................................................................................
Hình 3. Cây thể hiện sự sống trên tàu Titanic ....................................................................
Hình 4. Phân loại Bagging trên tập dữ liệu Iris với hai bộ ước tính cơ sở: DS và k-NN ...
Hình 5.

Các cây trong Rừng ngẫu nhiên ........................
Hình 6.
AdaBoost sử dụng sơ bộ ước tính cơ sở khác nh
Hình 7.
Stacking sử dụng nhiều loại bộ học khác nhau.
Hình 8. Mơ tả trực quan đường cong ROC ........................................................................
Hình 9.
Mơ hình Boosting cho thuật tốn AdaBoost và G
Hình 10. Mơ hình Bagging cho thuật tốn Random Forest và Bagging. ...........................
Hình 11.
Mơ hình stacking ..................................
Hình 12.
Đường cong ROC ứng với từng thuật t
Hình 13.
Giao diện ứng dụng web hỗ trợ dự đốn
Hình 14.
Báo cáo kết quả dự đoán lỗi phần mềm


8

TỔNG QUAN
1.

Đặt vấn đề

Dự đoán lỗi phần mềm (Software Defect Prediction – SDP) đóng một vai trị quan
trọng trong hoạt động nghiên cứu lĩnh vực kỹ thuật phần mềm. Lỗi phần mềm là một lỗi, lỗ
hổng, sai sót, sự cố hoặc sai lầm được tạo ra trong phần mềm gây ra một kết quả sai khác
ngoài mong đợi. Các yếu tố liên quan lỗi phần mềm không được phát hiện trong giai đoạn

đầu của việc phát triển phần mềm gây nguy cơ ảnh hưởng lớn đến thời gian, chất lượng, chi
phí, cơng sức và sự lãng phí các nguồn lực. Lỗi có thể xảy ra trong bất kỳ giai đoạn nào của
quá trình phát triển phần mềm. Các nhà sản xuất phần mềm luôn cố gắng tập trung vào chất
lượng phần mềm, đặc biệt là trong giai đoạn đầu của q trình phát triển. Mục tiêu chính là
để xác định và sửa chữa các lỗi trong giai đoạn đầu của vòng đời phát triển phần mềm
(SDLC). Để cải thiện chất lượng của phần mềm, các kỹ thuật Học máy đã được áp dụng để
xây dựng dự đoán về lỗi của các thành phần phần mềm bằng việc khai phá dữ liệu trong quá
khứ của phần mềm, các thành phần và các vấn đề liên quan đến lỗi của chúng.

Các dự án phát triển phần mềm đang ngày càng lớn, phức tạp, tốn kém và trở nên
khó dự đốn. Một trong nhiều vấn đề cần quan tâm là các dự án phần mềm khi gia tăng
quy mô và độ phức tạp, nó làm tăng khả năng rủi ro và do vậy ảnh hưởng đến chi phí hoặc
tiến độ của chính các dự án.
Việc phát hiện các lỗi tiềm ẩn trong phần mềm có ý nghĩa rất lớn, giúp cải thiện
thời gian, giảm chi phí và nâng cao năng lực cạnh tranh trong phát triển phần mềm.
Trường hợp khơng kiểm sốt tốt lỗi, doanh nghiệp buộc phải tăng cường các khả năng
khác, bao gồm: đánh giá mã tập trung, tăng cường kiểm tra đơn vị mã nguồn và tăng khả
năng giám sát nhân lực phát triển ở nhiều cấp độ.
Xuất phát từ việc nhìn nhận, các nhà phát triển phần mềm rất mong đợi và có nhu
cầu về cơng cụ dự đốn các lỗi tốt hơn. Bằng việc xác định xu hướng, tơi mong muốn đi
sâu tìm hiểu các vấn đề này thơng qua phân tích, đánh giá thuật tốn và các mơ hình.
Theo hiểu biết của tơi, cho đến nay vẫn chưa có nghiên cứu nào đáp ứng tốt mục tiêu dự
đốn chính xác số lượng lỗi phần mềm với thời gian phù hợp.
Mặc dù nhiều nghiên cứu gần đây đã chứng minh kết quả đầy hứa hẹn của Học
máy khi sử dụng để dự đoán tỷ lệ lỗi phần mềm dựa trên các phép đo phân tích tình trạng
như độ phức tạp của mã nguồn và kích thước mã,… Tuy nhiên về tiêu chuẩn áp dụng cho
ngành vẫn còn chậm. Hầu hết các dự án phát triển phần mềm vẫn sử dụng các phương
pháp dự đoán lỗi truyền thống, phần lớn tập trung vào mối quan hệ giữa số dòng mã với
số lượng lỗi trong một ứng dụng. Trong khi mối tương quan giữa hai phép đo này đã được
chứng minh có độ lệch đáng kể và dẫn đến kết quả chưa được đánh giá cao.



9

Rõ ràng, rất cần có một giải pháp mới, hiệu quả hơn nhằm hỗ trợ các nhóm phát
triển phần mềm đo lường hiệu quả về chất lượng, điều đó đề cập đến việc cần thiết phải
có cơng cụ dự đốn lỗi phần mềm.
2. Mục tiêu và nội dung nghiên cứu
Nghiên cứu, đánh giá các thuật toán học máy và các thuật toán ứng dụng trong dự
đoán lỗi phần mềm, tiến tới xây dựng cơng cụ dự đốn lỗi dựa trên học máy.
Để làm được điều đó, tác giả cần có sự hiểu biết sâu về vấn đề này thông qua tìm
hiểu một cách thấu đáo lý thuyết và kết hợp 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 bản chất của lỗi phần mềm, các phương pháp dự đoán lỗi
phần mềm hiện tại, kỹ thuật phân tích và xử lý số liệu phần mềm, Nền tảng học máy, các
thuật toán học máy và kỹ thuật ensemble learning dùng để dự đoán lỗi phần mềm.
3. Đối tượng và phạm vi nghiên cứu
Phạm vi dự đốm lỗi phần mềm khá rộng địi hỏi sự đầu tư nhiều về nguồn lực và thời
gian. Luận văn này đi sâu vào tìm hiểu lý thyết về phân tích dự đoán và lựa chọn dự đoán lỗi
trên các file phần mềm được phát triển bằng ngôn ngữ Java. Điều này được thực hiện trong
phạm vi nghiên cứu các thuật tốn phân tích dự đốn, các mơ hình áp dụng, các phương pháp
đánh giá các mơ hình và nghiên cứu kỹ thuật ensemble dùng để dự đoán lỗi.
4.

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

Dựa trên lý thuyết về phân tích và thống kê, tác giả tìm hiểu cơ sở lý thuyết về các
học máy đối với bài tốn dự đốn và tìm hiểu các thuật tốn ứng dụng tương ứng dựa trên
quy trình kỹ thuật dự đoán lỗi phần mềm.
Từ cơ sở lý thuyết đó, tác giả tiến hành lựa chọn xây dựng mơ hình dựa trên thuật
tốn dự đốn lỗi (dựa trên thư viện sklearn) và lập trình ứng dụng bằng ngơn ngữ Python.

Kết quả được đánh giá thông qua các phép hiệu suất đo mơ hình và độ chính xác
dự đốn, đồng thời cũng xét đến thời gian huấn luyện đối với từng mơ hình sử dụng kỹ
thuật ensembles learning cụ thể.
5.

Ý nghĩa khoa học và thực tiễn

-

Áp dụng lý thuyết phân tích và dự đốn trong các lĩnh vực của đời sống.

-

Áp dụng kỹ thuật học máy và các thuật tốn để dự đốn lỗi phần mềm.

Đóng góp bổ sung kết quả nghiên cứu và thực nghiệm, đóng góp cơng cụ phân
tích sử dụng kỹ thuật học máy và các mơ hình thuật tốn ứng dụng.
-

Tạo ra cơng cụ để giúp các nhà phát triển cải thiện chất lượng phần mềm, kiểm
sốt tiến trình, giảm thiểu rủi ro và tăng tính khả thi cho các dự án.
-


10

Giúp cho các Cơng ty phần mền kiểm số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.
-


6. Cấu trúc luận văn
Luận văn được trình bày bao gồm 04 chương, với nội dung cụ thể như sau:
Chương 1 trình bày lý thuyết về độ đo mã nguồn và bài toán dự đoán lỗi. Phần này
nêu bài toán dự đoán lỗi và phương thức quản lý lỗi phần mềm xuất phát từ hướng tiếp
cận dựa trên các tiêu chí độ đo mã nguồn.
Chương II trình bày tổng quan về các kỹ thuật học máy, trong đó tập trung vào các
kỹ thuật học có giám sát. Từ cơ sở lý thuyết, phần này cũng nêu rõ các yếu tố cần xem xét
khi lựa chọn và áp dụng thuật toán học máy để đáp ứng giải quyết vấn đề cụ thể. Thuật
toán Cây quyết định là một trong những thuật toán cơ bản cũng được làm rõ để nghiên
cứu ứng dụng cho bài toán dự đoán lỗi.
Chương III trình bày tổng quan phương pháp dự đốn lỗi phần mềm dựa trên học máy
với các vấn đề liên quan đến việc thu thập và xử lý dữ liệu. Dữ liệu dùng trong Luận văn này
được lấy từ kho PROMISE (địa chỉ: trước khi
đưa vào mơ hình, tác giả thực hiện cơng việc tiền xử lý để chuẩn hóa dữ liệu. Các kỹ thuật
ensembles learning cũng được xem xét, đặt biệt là các biến thể của cây quyết định được thể
hiện thông qua Random Forest, Boosting, Bagging, AdaBoost, Gadient Descent Tree và
Stacking dùng cho dự đoán lỗi phần mềm. Bên cạnh đó việc đánh giá mơ hình cũng được
trình bày để xác định hiệu suất, độ chính xác và độ tin cậy của mơ hình.

Chương IV trình bày việc thực hiện bài toán dự đoán lỗi phần mềm trong đó lựa
chọn phương pháp dự đốn lỗi trên các tập tin được viết bằng ngôn ngữ Java. Tập dữ liệu
được lấy trên kho dữ liệu PROMISE dùng để huấn luyện mơ hình và sử dụng thư viện
sklearn để cài đặt thuật tốn. Các mơ hình học máy được xây dựng từ các biến thể Cây
quyết định bằng kỹ thuật học kết hợp với các tham số được để mặc định (quy định bởi thư
viện sklearn).
Kết quả đánh giá dựa trên các phép đo F1, ROC, AUC và thời gian huấn luyện để
đánh giá các mơ hình. Một website được xây dựng để người dùng chọn file (ngôn ngữ
Java) và cho phép chọn kỹ thuật ensembles learning phù hợp để dự đoán.
Phần cuối là kết luận về các kết quả đã đạt được và hướng phát triển của luận văn.



11

CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐỐN
LỖI 1.1 Bài tốn dự đốn lỗi
Lỗi phần mềm là lỗi, sai sót, nhầm lẫn, sự cố hoặc sự thiếu chính xác trong phần
mềm khiến nó tạo ra một kết quả sai hoặc sự cố không lường trước được. Lỗi là thuộc
tính cố hữu của một hệ thống, chúng xuất hiện từ khâu thiết kế hoặc khâu sản xuất hoặc
môi trường bên ngồi. Lỗi phần mềm là lỗi lập trình gây ra hiệu năng khác so với dự tính.
Phần lớn các lỗi là từ mã nguồn hoặc thiết kế, một số trong số đó là từ mã khơng chính
xác được tạo từ trình biên dịch.
Đối với các nhà phát triển phần mềm và khách hàng, lỗi phần mềm là một vấn đề
nguy hiểm. Các lỗi phần mềm không chỉ làm giảm chất lượng phần mềm, tăng chi phí mà
cịn làm trì hỗn tiến độ phát triển, thậm chí có thể hủy bỏ cả dự án.
Dự đoán lỗi phần mềm được đề xuất nhằm để giải quyết rắc rối này. Để dự đoán
lỗi phần mềm (Software Defect Prediction – SDP) hiệu quả có thể phải từ q trình kiểm
thử hiệu năng của phần mềm và trực tiếp phân bổ tài nguyên. Để phần mềm phát triển đạt
chất lượng, các lỗi phần mềm phải được phát hiện và sửa lỗi ở giai đoạn đầu của chu kỳ
phát triển phần mềm (Software Development Life Cycle – SDLC).
1.2 Quản lý lỗi phần mềm
Mục đích chính của việc quản lý lỗi phần mềm là để kiểm soát, làm tăng chất
lượng của phần mềm bằng cách xác định và sửa chữa các lỗi trong giai đoạn sớm của
SDLC. Các giai đoạn khác nhau của SDLC bao gồm thu thập các yêu cầu, phân tích, thiết
kế, viết mã, thử nghiệm, triển khai và giai đoạn cuối cùng là cơng việc bảo trì. SDP đóng
vai trị quan trọng trong việc phát triển phần mềm chất lượng cao. Xác định các lỗi trong
giai đoạn đầu của SDLC là một cơng việc rất phức tạp, do đó cần được áp dụng các
phương pháp hiệu quả để thực hiện.
Các giai đoạn chính trong việc kiểm sốt lỗi bao gồm:
Xác định các lỗi;








Phân loại các lỗi;
Phân tích các lỗi;
Dự đốn các lỗi;
Loại bỏ các lỗi.

Có thể hiểu rằng, đầu tiên là xác định sự xuất hiện của các lỗi trong phần mềm.
Kiểm tra mã, xây dựng một mơ hình mẫu và thử nghiệm để xác định lỗi bên trong phần
mềm. Sau khi xác định được các lỗi, ta cần tiến hành phân loại, phân tích, dự đốn và
phát hiện để sửa chữa nó.


12

1.3 Hướng tiếp cận dự đoán lỗi phần mềm.
Qua việc nghiên cứu các kỹ thuật dự đoán đã được áp dụng và thử nghiệm, chúng
ta nhận thấy có ba phương pháp chủ yếu thường được sử dụng để thực hiện đánh giá các
mơ hình dự đốn.
Dự đốn lỗi bên trong dự án (With-in Project Defect Prediction - WPDP)
Dự đoán lỗi liên dự án (Cross Project Defect Prediction - CPDP), liên quan đến 2
trường hợp:
✓ CPDP đối với các tập dữ liệu đồng nhất (Homogeneity).


CPDP đối với tập dữ liệu không đồng nhất, phức tạp (Hetrogeneous)


1.3.1 Dự đoán lỗi bên trong dự án
Mơ hình dự đốn có thể được xây dựng bằng cách thu thập dữ liệu lịch sử từ một dự
án phần mềm và dùng nó để dự đốn các lỗi trong cùng dự án được gọi là WPDP. WPDP hoạt
động tốt nếu có đủ thơng tin về lịch sử dữ liệu nhằm giúp đào tạo cho mơ hình.

Turhan, Burak và cộng sự đề xuất mơ hình dự đốn lỗi dự đoán lỗi phần mềm đối
với các vùng trọng điểm của phần mềm phát triển với tồn tại dữ liệu nội bộ (dự đoán lỗi
bên trong dự án). Để áp dụng mơ hình này, họ khuyến nghị các cơng ty phát triển phần
mềm nên tạo một kho dữ liệu và lưu trữ các dữ liệu dự án và các thông tin liên quan đến
lỗi từ dự án trong suốt quá trình phát triển [19].
Nhược điểm của WPDP là:
Khơng phải lúc nào tất cả các dự án đều có thể thu thập dữ liệu lịch sử đó;




Khơng thể đạt được độ chính xác 100% khi sử dụng WPDP.

Zimmerman và cộng sự nhận định rằng, dự đoán lỗi thực hiện tốt hơn trong các dự
án là khi có đủ dữ liệu để đào tạo cho mơ hình [3]. Nghĩa là, để xây dựng mơ hình dự
đốn lỗi, chúng ta cần truy cập dữ liệu lịch sử. Trường hợp dữ liệu bị thiếu thì ta có thể áp
dụng Dự đốn lỗi liên dự án (CCDP).
Mặt khác, dữ liệu lịch sử thường không thể có đối với các dự án mới và áp dụng
đối với nhiều công ty phát triển phần mềm. Trong trường hợp này, dự đốn lỗi sẽ rất khó
để có được thành công. Để giải quyết vấn đề này, chúng ta cũng phải cần áp dụng CCDP.
1.3.2 CPDP đối với các tập dữ liệu đồng nhất (Homogeneity)
CPDP đối với tập dữ liệu đồng nhất được sử dụng theo phương pháp tương tự như một
dự án khơng có đủ dữ liệu lịch sử để đào tạo mơ hình. Do vậy, mơ hình dự đốn được phát
triển cho một dự án và nó được áp dụng cho một số dự án khác hoặc trên tồn dự án. Nghĩa

là, nó thực hiện cùng một mơ hình dự đốn từ dự án này áp dụng sang dự án khác. Hạn chế
của việc áp dụng CPDP là nó mong muốn các dự án có tập số liệu tương đồng (tập


13

số liệu phải bằng nhau giữa các dự án). Kết quả là, kỹ thuật áp dụng cho CPDP rất phức
tạp khi liên quan đến các dự án với bộ dữ liệu không giống nhau [20].
1.3.3 CPDP đối với tập dữ liệu khơng đồng nhất (Hetrogeneous)
Để đối phó với sự khơng phù hợp nêu trên khi chỉ sử dụng bộ dữ liệu tương tự cho
CPDP, kỹ thuật dự đốn lỗi khơng đồng nhất (Hetrogeneous Defect Prediction – HDP) đã
được đề xuất để dự đoán các lỗi trên các dự án phần mềm với các bộ số liệu không cân
bằng.
1.4 Độ đo mã nguồn
Độ đo phần mềm là thành phần thuộc tính có thể định lượng hoặc đếm được mà
chúng có thể được dùng để đo lường và dự đoán chất lượng của phần mềm. Một độ đo là
một chỉ số mô tả một tính năng cụ thể của phần mềm. Xác định và đo lường số liệu phần
mềm rất quan trọng vì nhiều lý do, bao gồm để ước thời gian thực thi, đo lường hiệu quả
của quy trình phần mềm, ước tính các nỗ lực cần thiết cho quy trình, giảm bớt lỗi trong
quá trình phát triển phần mềm, giám sát và kiểm sốt q trình thực thi dự án. Ba nhóm
tham số được dùng để đo lường như mơ tả trong Hình 1.

Hình 1. Các nhóm tham số khác nhau về độ đo trong công nghệ phần mềm
Độ đo quy trình nhằm đánh giá hiệu quả các số liệu và giá trị của quy trình phần
mềm, xác định sự hình thành của quy trình, nỗ lực cần có trong quy trình, hiệu quả của
việc giảm thiểu lỗi trong quá trình phát triển, v.v.
Độ đo sản phẩm dùng để xác định số liệu sản phẩm trong các giai đoạn khác nhau
từ giai đoạn lập yêu cầu đến triển khai phát triển phần mềm hoặc bản thân nội tại phần
mềm. Độ đo dự án là các phép đo của dự án phần mềm, chúng được dùng để theo dõi và
kiểm soát việc thực hiện dự án qua các phiên bản. Mục đích dùng độ đo phần mềm là:

• Đo lường kích thước, chất lượng phần mềm.
• Đánh giá mức độ phức tạp.
• Xác định ngày phiên bản.


14
• Ước lượng về tài ngun, chi phí và tiến độ.

Như vậy, có thể nói rằng để xây dựng một phần mềm dự đoán lỗi phải được thực
hiện với một phạm vi rộng, đồng thời việc thu thập thông tin và xử lý các số liệu phục vụ
cho việc xây dựng mơ hình dự đốn cần có sự đầu tư rất lớn. Trong phạm vi luận văn này,
tôi chỉ tập trung vào việc nghiên cứu về độ đo sản phẩm phần mềm và dùng nó để dự
đốn lỗi, bao gồm tập các số liệu hướng lớp được xác định từ mã nguồn.

Độ đo mã tĩnh
Độ đo mã tĩnh là số liệu có thể được trích xuất trực tiếp từ mã nguồn, chẳng hạn
như số dòng mã (LOC) và độ phức tạp theo chu kỳ. Source Lines of Code (SLOC) là một
nhóm các số liệu tập trung vào số lượng dịng mã trong các tệp mã nguồn. SLOC chứa
các số liệu khác nhau: LOC vật lý (SLOCP), tổng số dòng mã LOC, dịng trống (BLOC),
các dịng comment (CLOC), các dịng có chứa comment (SLOC-L) và các dòng lệnh thực
thi [6]. Lượng phức tạp của chu trình (Cyclomatic Complexity Number - CCN) hay còn
được gọi là số liệu McCabe là phép đo độ phức tạp của cấu trúc module quyết định được
Thomas McCabe đề xuất [15]. CCN xác định số lượng rẽ nhánh độc lập và được tính như
sau: bắt đầu từ 0, CCN tăng thêm sau một lần gọi phương thức tách luồng điều khiển.
Trường hợp này được dùng đối với các câu lệnh If, Then, While, Case, Catch, &&, | |,
Or, ? được phát hiện trong mã nguồn. Các số liệu mã tĩnh khác bao gồm số các lệnh của
trình biên dịch và số lượng khai báo dữ liệu.
Độ đo hướng đối tượng:
Số liệu hướng đối tượng là một danh mục con của số liệu mã tĩnh, vì số liệu này
cũng được trích xuất từ chính mã nguồn.

Bộ số liệu hướng đối tượng (OO) được Chidamber-Kemerer (C&K) sử dụng gồm
có 8 số liệu khác nhau: sáu số liệu được định nghĩa từ bộ số liệu C&K ban đầu và hai số
liệu bổ sung là Weighted Methods per Class (WMC), Depth of Inheritance Tree (DIT),
Number of Children (NOC). Coupling Between Objects (CBO), Response for Class
(RFC), Lack of Cohesion in Methods (LCOM) [6].
Các số liệu OO bổ sung gồm Afferent couplings (Ca), Number of Public Methods
(NPM). Ngoài ra, QMOOD cũng là một trong những mơ hình đánh giá chất lượng của
phần mềm hướng đối tượng. Các số liệu được dùng để đánh giá sự tác động đến các thuộc
tính chất lượng của phần mềm như SIZE, NOC, DIT, DAM, CBO, CAM, MOA, MFA,
NOP, RFC, WMPC. Do vậy, các số liệu QMOOD cũng được áp dụng trong phạm vi
nghiên cứu này để hỗ trợ việc dự đoán chất lượng phần mềm.


15

Sau đây là bảng tổng hợp các số liệu dùng để đo lường phần mềm hướng lớp được
dùng trong luận văn này:
Bảng 1. Số liệu dùng để đo lường các đặc trưng lỗi phần mềm
Tên số liệu
Weighted
methods per class
(WMC)
Depth of
Inheritance Tree
(DIT)
Number of
Children (NOC)
Coupling
between object
classes (CBO)

Response for a
Class (RFC)

Lack of cohesion
in methods
(LCOM)


16

Lack of cohesion
in methods
(LCOM3)

Afferent
couplings (Ca)
Efferent
couplings (Ce)
Number of Public
Methods (NPM)

Data Access
Metric (DAM)
Measure of
Aggregation
(MOA)
Measure of
Functional
Abstraction
(MFA)

Cohesion Among
Methods of Class
(CAM)


Inheritance
Coupling (IC)

Coupling
Between Methods
(CBM)
Average Method
Complexity
(AMC)
McCabe's
cyclomatic
complexity (CC)

Lines of Code
(LOC)


18

CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY
Để nâng cao hiệu quả và chất lượng phát triển phần mềm và dự đoán lỗi, các kỹ thuật khai
phá dữ liệu khác nhau có thể được áp dụng các thuật tốn khác nhau để giải quyết vấn đề.

Các kỹ thuật SDP sử dụng kỹ thuật học phổ biến và các thuật toán học máy được
mơ tả trong Hình 2.


Hình 2. Thuật tốn học máy
Các kỹ thuật khai phá dữ liệu khác nhau được áp dụng để dự đoán lỗi phần mềm.
Trong khai phá dữ liệu, học máy có thể chia làm 2 loại:
• Học có giám sát (Supervised Learning).
• Học khơng giám sát (Unsupervised Learning).

Ngồi ra, cịn có kỹ thuật học tăng cường (Reinforce Learning) và học bán giám
sát (Semi-Supervised Learning). Tuy nhiên, tôi chỉ quan tâm đến 2 kỹ thuật nêu trên để đi
sâu nghiên cứu nhằm nắm bắt kỹ thuật, áp dụng trong luận văn của mình.


19

2.1 Học có giám sát
Học có giám sát là hoạt động học máy để suy luận một đặc trưng từ dữ liệu huấn
luyện được dán nhãn. Các dữ liệu huấn luyện bao gồm một tập hợp các mẫu huấn luyện.
Trong học có giám sát, mỗi mẫu là một cặp đơi, gồm một đối tượng đầu vào (thường là
vectơ) và giá trị đầu ra mong muốn (được gọi là tín hiệu giám sát). Thuật tốn học có
giám sát sẽ phân tích dữ liệu huấn luyện và tạo ra một hàm suy luận, có thể được sử dụng
để ánh xạ các mẫu mới. Một kịch bản tối ưu sẽ cho phép thuật tốn xác định chính xác
các nhãn lớp cho các trường hợp khơng cụ thể. Điều này địi hỏi thuật tốn học máy phải
khái quát hóa từ dữ liệu huấn luyện đến các tình huống khơng cụ thể theo một cách "hợp
lý" (xu hướng quy nạp). Hoạt động xảy ra tương tự suy luận của con người và động vật và
thường được xem là khái niệm nhận thức từ việc học.
Để áp dụng Học có giám sát giúp giải quyết một vấn đề nhất định, chúng ta phải
thực hiện các bước sau:
Bước 1. Xác định loại hình các mẫu huấn luyện: trước khi làm bất cứ điều gì,
người dùng nên quyết định loại hình dữ liệu nào sẽ được sử dụng làm tập huấn luyện. Ví
dụ trường hợp phân tích chữ viết tay, chúng ta có thể phải xác định dữ liệu là tồn bộ các

ký tự, từ hoặc dịng chữ viết tay.
Bước 2. Thu thập bộ dữ liệu huấn luyện: tập huấn luyện cần phải đại diện, là đặc
trưng trong thế giới thực. Do đó, một tập hợp các đối tượng đầu vào được thu thập và các
đầu ra tương ứng cũng được thu thập từ người dùng, các chuyên gia hoặc từ các phép đo.
Bước 3. Xác định biểu diễn đầu vào đặc trưng của chức năng đã được huấn luyện.
Độ chính xác của đặc trưng được huấn luyện có sự phụ thuộc chặt chẽ vào cách thể hiện
đối tượng đầu vào. Thông thường, đối tượng đầu vào được chuyển đổi thành một vectơ
đặc trưng, trong đó có một số đặc trưng mô tả về đối tượng. Số lượng các đặc trưng
khơng nên q lớn vì sẽ làm tăng số chiều của dữ liệu nhưng cũng nên chứa đủ thơng tin
để đảm bảo dự đốn đầu ra chính xác.
Bước 4. Xác định cấu trúc của chức năng được huấn luyện và thuật tốn học máy
tương ứng. Ví dụ, các nhà kỹ thuật có thể chọn sử dụng thuật tốn Máy vectơ hỗ trợ
(SVM) hoặc Cây quyết định (DS).
Bước 5. Hồn thành thiết kế: chạy các thuật tốn học máy trên tập huấn luyện được
thu thập. Một số thuật toán học có giám sát yêu cầu người dùng xác định các tham số nhất
định để kiểm sốt. Các thơng số này có thể tùy chọn hoặc điều chỉnh được nhằm giúp tối
ưu hóa hiệu suất trên một tập hợp con (còn gọi là tập xác nhận) của tập huấn luyện hoặc
thông qua xác thực chéo.


20

Bước 6. Đánh giá tính chính xác của chức năng đã được huấn luyện: sau khi điều
chỉnh tham số và huấn luyện, hiệu suất của hàm kết quả phải được đo trên tập kiểm tra
độc lập, tách biệt với tập huấn luyện.
Một số lượng lớn các thuật tốn học có giám sát được đề xuất, mỗi thuật tốn đều
có điểm mạnh và điểm yếu và khơng có thuật tốn học máy duy nhất nào hoạt động tốt
nhất trên mọi vấn đề trong học máy có giám sát. Có bốn vấn đề chính cần lưu ý trong học
máy có giám sát:


Sự đánh đổi giữa độ lệch và phương sai (Bias-variance tradeoff)
Vấn đề đầu tiên là sự đánh đổi giữa độ lệch (bias) và phương sai (variance). Giả sử
rằng chúng ta có sẵn một số bộ dữ liệu dùng để huấn luyện khác nhau và đều được đánh
giá tốt. Một thuật toán học máy đưa ra kết quả lệch theo một đầu vào cụ thể x nếu khi
huấn luyện trên mỗi bộ dữ liệu này về mặt hệ thống là nó khơng chính xác khi dự đốn
đầu ra cho x. Một thuật tốn học máy có phương sai cao cho một đầu vào cụ thể x nếu nó
dự đốn các giá trị đầu ra khác nhau khi được đào tạo trên các tập huấn luyện khác nhau.
Lỗi dự đốn của trình phân loại đã huấn luyện có liên quan đến độ lệch và phương sai của
thuật toán học. Như vậy, ta đã thấy ở đây đã có sự đánh đổi giữa độ lệch và phương sai.
Một thuật tốn học máy có độ lệch thấp cần phải linh hoạt để có thể phù hợp với dữ liệu.
Nhưng nếu thuật toán học máy linh hoạt q thì nó chỉ sẽ phù hợp với từng bộ dữ liệu
huấn luyện khác nhau và do đó có thể làm phương sai cao. Một khía cạnh quan trọng của
nhiều phương pháp dùng trong học máy có giám sát là chúng có thể điều chỉnh sự đánh
đổi giữa độ lệch và phương sai này (tự động điều chỉnh hoặc cung cấp một tham số độ
lệch/phương sai do người dùng định nghĩa).

Độ phức tạp của hàm và số lượng dữ liệu huấn luyện
Vấn đề thứ hai là lượng dữ liệu huấn luyện có liên quan đến độ phức tạp của hàm
(hàm phân loại hoặc hàm hồi quy). Nếu hàm đơn giản thì khơng địi hỏi sự linh hoạt của
thuật tốn học máy với độ lệch cao và phương sai thấp sẽ có khả năng chỉ đào tạo với một
lượng dữ liệu nhỏ. Trường hợp hàm phức tạp (chẳng hạn do sự liên quan, tương tác phức
tạp giữa nhiều đặc trưng đầu vào khác nhau và hoạt động khác giữa các thành phần khác
nhau của khơng gian đầu vào) thì chức năng sẽ có thể phải được huấn luyện với một
lượng dữ liệu rất lớn và sử dụng một thuật toán học máy linh hoạt với độ lệch thấp và
phương sai cao. Tuy nhiên, các thuật toán học máy được xem là tốt sẽ tự động điều chỉnh
sự đánh đổi độ lệch/phương sai dựa trên lượng dữ liệu có sẵn và độ phức tạp cụ thể của
hàm để huấn luyện.

Kích thước của không gian đầu vào



21

Vấn đề thứ ba là chiều (dimensionality) của không gian đầu vào. Nếu các vectơ
đặc trưng đầu vào có kích thước rất cao, vấn đề học máy có thể khó khăn ngay cả khi hàm
(phân loại hoặc hồi quy) chỉ phụ thuộc vào một số lượng nhỏ các đặc trưng đó.
Điều này là do kích thước q lớn của chiều có thể gây nhầm lẫn cho thuật tốn
học máy và khiến nó có phương sai cao. Do đó, chiều đầu vào cao thường yêu cầu điều
chỉnh bộ phân loại để có phương sai thấp và độ lệch cao.
Trong thực tế, chúng ta có thể loại bỏ bằng thủ cơng các đặc trưng không liên quan ra
khỏi tập dữ liệu đầu vào thì mới có khả năng cải thiện độ chính xác của chức năng được huấn
luyện. Ngồi ra, có nhiều thuật tốn có khả năng lựa chọn đặc trưng bằng cách xác định các
đặc trưng có liên quan và loại bỏ các đặc trưng không liên quan. Đây là một ví dụ về mang
tính tổng quát hơn về giảm kích thước chiều với việc tìm cách ánh xạ dữ liệu đầu vào trên
không gian chiều thấp hơn trước khi thực hiện chạy thuật tốn học máy có giám sát.

Nhiễu trong các giá trị đầu ra
Vấn đề thứ tư là mức độ nhiễu trong các giá trị đầu ra không mong muốn (các biến
mục tiêu giám sát). Nếu các giá trị đầu ra mong muốn thường khơng chính xác (do lỗi con
người hoặc cảm biến) thì thuật tốn học máy khơng nên cố gắng tìm một chức năng khớp
chính xác với các mẫu huấn luyện. Việc cố gắng để phù hợp với dữ liệu quá thận trọng dẫn
đến over-fitting. Ta có thể điều chỉnh over-fitting ngay cả khi phép đo không có lỗi (nhiễu
ngẫu nhiên) nếu chức năng của chúng ta đang cố học q phức tạp đối với mơ hình học máy.
Trong tình huống như vậy, một phần của chức năng đích khơng thể được mơ hình hóa sẽ làm
hỏng dữ liệu huấn luyện (hiện tượng này gọi là nhiễu xác định). Khi một trong hai loại nhiễu
xuất hiện, tốt nhất là ta xem xét ước lượng độ lệch cao hơn, phương sai thấp hơn.

Trong thực tế, có một số cách tiếp cận để giảm nhiễu trong các giá trị đầu ra như
dừng sớm để ngăn over-fitting cũng như phát hiện và loại bỏ nhiễu trong các mẫu huấn
luyện trước khi đào tạo thuật tốn học có giám sát. Một số thuật toán xác định để loại bỏ

các mẫu đào tạo bị nhiễu và các mẫu đào tạo nghi ngờ có nhiễu trước khi huấn luyện đã
giảm lỗi bằng việc tổng qt hóa theo phương pháp thống kê.
2.1 Học khơng có giám sát
Trong học máy, vấn đề của học khơng giám sát là việc cố gắng tìm cấu trúc ẩn trong
dữ liệu không được gắn nhãn do bởi các mẫu cung cấp cho bộ học khơng có nhãn, khơng có
tín hiệu lỗi hoặc phản hồi (reward) để đánh giá một giải pháp tiềm ẩn. Điều này chính là sự
khác biệt giữa học khơng giám sát so với học có giám sát và học tập tăng cường.

Học tập không giám sát có liên quan mật thiết đến vấn đề ước tính mật độ trong
thống kê. Tuy nhiên, học không giám sát cũng như nhiều kỹ thuật học khác đều nhằm tìm


22

cách khái qt hóa và mơ tả các đặc trưng chính của dữ liệu. Nhiều phương pháp được sử
dụng trong học không giám sát dựa trên khai phá dữ liệu được dùng để xử lý dữ liệu.
Phương pháp tiếp cận học khơng giám sát gồm:
• Phân cụm (như k-mean, mơ hình hỗn hợp, phân cụm theo phân cấp);
• Phương pháp học các mơ hình như biến tiềm ẩn;
• Thuật tốn tối đa hóa kỳ vọng (EM);
• Phương pháp các khoảnh khắc;
• Kỹ thuật tách tín hiệu mờ;
• Phân tích thành phần chính;
• Phân tích thành phần độc lập;
• Hệ số ma trận khơng âm;
• Phân rã giá trị số ít.

Trong số các mơ hình mạng nơ-ron, ánh xạ tự hình thành (SOM) và lý thuyết cộng
hưởng thích ứng (ART) là các thuật tốn học khơng giám sát thường được sử dụng. SOM
là một tổ hợp topographic trong đó các vị trí lân cận trong đồ thị đại diện cho các đầu vào

có thuộc tính tương tự. Mơ hình ART cho phép số lượng cụm thay đổi theo kích thước
biến cố và cho phép người dùng kiểm soát mức độ tương tự giữa các thành viên của cùng
một cụm bằng hằng số do người dùng xác định được gọi là tham số cảnh báo. Mạng ART
cũng được dùng cho nhiều công việc nhận diện mẫu như tự động nhận diện mục tiêu và
xử lý tín hiệu địa chấn.
Phương pháp các khoảnh khắc là một trong những cách tiếp cận trong học không giám
sát theo ý tưởng các khoảnh khắc. Trong phương pháp các khoảnh khắc, các tham số chưa
biết (quan tâm) trong mơ hình có liên quan đến các khoảnh khắc của một hoặc nhiều biến
ngẫu nhiên và do đó, các tham số chưa biết này có thể được ước tính trong các khoảnh khắc.
Các khoảnh khắc thường được ước tính từ các mẫu theo cách thực nghiệm. Những khoảnh
khắc cơ bản là khoảnh khắc thứ nhất và thứ hai. Đối với một vectơ ngẫu nhiên, khoảnh khắc
thứ tự đầu tiên là vectơ trung bình và khoảnh khắc thứ tự thứ hai là ma trận hiệp phương sai
(khi giá trị trung bình bằng 0). Các khoảnh khắc bậc cao hơn thường được biểu diễn bằng các
tensor là sự khái quát hóa các ma trận thành các bậc cao hơn như các mảng đa chiều. Cụ thể,
phương pháp các khoảnh khắc được chứng minh là có hiệu quả trong việc tìm hiểu các tham
số của các mơ hình biến tiềm ẩn. Các mơ hình biến tiềm ẩn là các mơ hình thống kê trong đó
ngồi các biến quan sát tồn tại cịn một tập hợp các biến tiềm ẩn không tồn tại. Một ví dụ
thực tế về các mơ hình biến tiềm ẩn trong học máy là mơ hình chủ đề, đây là mơ hình thống
kê để tạo ra các từ (biến quan sát) trong tài liệu dựa trên


23

chủ đề (biến tiềm ẩn) của tài liệu. Trong mô hình chủ đề, các từ trong tài liệu được tạo
theo các tham số thống kê khác nhau khi chủ đề của tài liệu được thay đổi. Nó được chỉ ra
rằng phương pháp mô men (kỹ thuật phân rã tensor) luôn phục hồi các tham số của một
lớp lớn các mô hình biến tiềm ẩn theo một số giả định.
Thuật tốn tối đa hóa kỳ vọng (EM) cũng là một trong những phương pháp thiết
thực nhất để học các mơ hình biến tiềm ẩn. Nhưng, nó có thể bị kẹt trong tối ưu cục bộ và
sự hội tụ toàn cục của thuật toán với các tham số chưa biết đúng của mơ hình khơng được

đảm bảo. Trong khi với phương pháp các khoảnh khắc, sự hội tụ toàn cục được đảm bảo
trong một số điều kiện.
Tóm lại: Trong học khơng có giám sát, chúng ta khơng có thơng tin trước đó và
mọi vấn đề được thực hiện một cách linh hoạt. Nếu việc học máy chỉ được huấn luyện với
một bộ đầu vào, nó được gọi là học khơng giám sát và bản thân nó sẽ có thể tìm thấy cấu
trúc hoặc mối quan hệ giữa các đầu vào khác nhau. Quan trọng nhất của học không giám
sát là phân cụm, điều này sẽ tạo ra các cụm đầu vào khác nhau và sẽ có thể áp đặt đầu vào
mới trong một cụm thích hợp. Tất cả các thuật tốn phân cụm đều thuộc các thuật tốn
học khơng giám sát. Điển hình là:
• K – Means clustering
• Hierarchical clustering
• Make Density Based Clustering.

Phạm vi luận văn này, tôi không đi sâu nghiên cứu về phương pháp học không
giám sát mà chỉ tìm hiểu cơ bản để nắm những vấn đề liên quan giúp cho việc lựa chọn
kỹ thuật học máy phù hợp để ứng dụng trong bài toán dự đoán lỗi phần mềm.
2.2 Các yếu tố cần xem xét khi lựa chọn và áp dụng thuật tốn học máy
Tính khơng đồng nhất của dữ liệu: nếu các vectơ đặc trưng bao gồm các đặc trưng
có kiểu khác nhau (rời rạc, thứ tự rời rạc, giá trị liên tục) thì có một số thuật toán dễ áp dụng
hơn các thuật toán khác gồm SVM, hồi quy tuyến tính, hồi quy logistic, mạng nơ ron và kNN yêu cầu các đặc trưng đầu vào phải là số và được chia tỷ lệ thành các phạm vi tương tự
(ví dụ: trong khoảng [-1, 1]). Các phương pháp sử dụng hàm khoảng cách, chẳng hạn như KNN và SVM với Gaussian kernels đặc biệt nhạy cảm với điều này. Riêng đối với cây quyết
định có lợi thế rất lớn là nó dễ dàng xử lý dữ liệu khơng đồng nhất.
b) Dự phịng dữ liệu: nếu các đặc trưng đầu vào chứa thông tin dư thừa (ví dụ: các
đặc trưng tương quan cao) thì một số thuật tốn học máy (như hồi quy tuyến tính, hồi quy
logistic và phương pháp dựa trên khoảng cách) sẽ hoạt động kém do tính khơng ổn định
khi làm việc với dữ liệu số. Vấn đề này thường có thể được giải quyết bằng cách áp đặt
một biểu thức chính quy.
a)



×