Đăng ký Đăng nhập
Trang chủ 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...

Tài liệu 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

.PDF
69
3
116

Mô tả:

1 MỤC LỤC MỤC LỤC ............................................................................................................................ 1 DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT VÀ CỤM TỪ ......................................... 3 DANH MỤC CÁC BẢNG ................................................................................................... 6 DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ ............................................................................... 7 TỔNG QUAN....................................................................................................................... 8 1. Đặt vấn đề ...................................................................................................................... 8 2. Mục tiêu và nội dung nghiên cứu .................................................................................. 9 3. Đối tượng và phạm vi nghiên cứu.................................................................................. 9 4. Phương pháp nghiên cứu ............................................................................................... 9 5. Ý nghĩa khoa học và thực tiễn........................................................................................ 9 CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐOÁN LỖI ............................. 11 1.1 Bài toán dự đoán lỗi .............................................................................................. 11 1.2 Quản lý lỗi phần mềm ........................................................................................... 11 1.3 Hướng tiếp cận dự đoán lỗi phần mềm. ................................................................ 12 1.4 Độ đo mã nguồn .................................................................................................... 13 CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY .................................................................... 18 2.1 Học có giám sát .................................................................................................... 19 2.1 Học không có giám sát .......................................................................................... 21 2.2 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 .................. 23 2.3 Thuật toán Cây quyết định .................................................................................... 24 CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY .......................... 29 3.1 SDP dựa trên học máy .......................................................................................... 29 3.2 Tiền xử lý dữ liệu .................................................................................................. 29 3.3 Kỹ thuật Ensemble learning .................................................................................. 30 3.4 Các thuật toán Ensembles learning cho SDP ........................................................ 31 3.5 Đánh giá phương pháp dự đoán (Prediction Method evaluation) ......................... 39 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 ....................................................................... 43 4.2 Xây dựng mô hình................................................................................................. 43 4.3 Tiêu chí đánh giá hiệu suất số liệu phần mềm ...................................................... 45 4.4 Kết quả thực nghiệm ............................................................................................. 45 4.5 Xây dựng website hỗ trợ dự đoán lỗi .................................................................... 51 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ......................................................................... 53 TÀI LIỆU THAM KHẢO .................................................................................................. 56 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, Chuyên 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ự đoá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ự đoán lỗi, tìm hiểu các thuật toá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 toá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 toá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ự đoá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 Tiếng Việt Analysis of variance Phân tích phương sai Bar chart Biểu đồ thanh Binomial distribution Phân phối nhị phân Box plot Biểu đồ hình hộp Categorical variable Biến thứ bậc Clock chart Biểu đồ đồng hồ Coefficient of correlation Hệ số tương quan Coefficient of determination Hệ số xác định bội Coefficient of heterogeneity Hệ số bất đồng nhất Combination Tổ hợp Confidence interval Khoảng tin cậy Continuous variable Biến liên tục Correlation Tương quan Covariance Hợp biến Cross Project Defect Prediction - CPDP Dự đoán lỗi liên dự án Cross-over experiment Thí nghiệm giao chéo Cumulative probability distribution Hàm phân phối tích lũy Data mining Khai phá dữ liệu Decision Tree Cây quyết định Degree of freedom Bậc tự do Determinant Định thức Discrete variable Biến rời rạc Dot chart Biểu đồ điểm DS Cây quyết định Ensembles Learning Học kết hợp Estimate Ước số Estimator Bộ ước tính Factorial analysis of variance Phân tích phương sai cho thí nghiệm giai Feature Đặc trưng 4 Fixed effects Ảnh hưởng bất biến Forcement Learning Học tăng cường Frequency Tần số Function Hàm Heterogeneity Không đồng nhất Histogram Biểu đồ tần số Homogeneity Đồng nhất Hypothesis test Kiểm định giả thiết Inverse matrix Ma trận nghịch đảo K-NN K - Hàng xóm gần nhất Latin square experiment Thí nghiệm hình vuông Latin Least squares method Phương pháp bình phương nhỏ nhất Linear Logistic regression analysis Phân tích hồi qui tuyến tính logistic Linear regression analysis Phân tích hồi qui tuyến tính Machine Learning Học máy Matrix Ma trận Maximum likelihood method Phương pháp hợp lí cực đại Mean Số trung bình Median Số trung vị Meta-analysis Phân tích tổng hợp Missing value Giá trị không Model Mô hình Multiple linear regression analysis Phân tích hồi qui tuyến tính đa biến NB Naïve Bayer Normal distribution Phân phối chuẩn Object Đối tượng Parameter Thông số Permutation Hoán vị Pie chart Biểu đồ hình tròn Poisson distribution Phân phối Poisson Polynomial regression Hồi qui đa thức 5 Probability Xác suất Probability density distribution Hàm mật độ xác suất P-value Trị số P Quantile Hàm định bậc Random effects Ảnh hưởng ngẫu nhiên Random Forest Rừng ngẫu nhiên Random variable Biến ngẫu nhiên Relative risk Tỉ số nguy cơ tương đối Repeated measure experiment Thí nghiệm tái đo lường Residual Phần dư Residual mean square Trung bình bình phương phần dư Residual sum of squares Tổng bình phương phần dư Scalar matrix Ma trận vô hướng Scatter plot Biểu đồ tán xạ Semi-Supervised Learning Học bán giám sát Significance Có ý nghĩa thống kê Simulation Mô phỏng Software Defect Prediction Dự đoán lỗi phần mềm Standard deviation Độ lệch chuẩn Standard error Sai số chuẩn Standardized normal distribution Phân phối chuẩn chuẩn hóa Supervised Learing Học có giám sát Survival analysis Phân tích biến cố SVM Máy véc tơ hỗ trợ Traposed matrix Ma trận chuyển vị Unsupervised Learning Học không có giám sát Variable Biến (biến số) Variance Phương sai Weight Trọng số Weighted mean Trung bình trọng số With-in Project Defect Prediction - WPDP Dự đoán lỗi bên trong dự án 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......................................... 15 Bảng 2. Kết quả các thuật toán học kết hợp và Cây quyết định. ........................................ 46 Bảng 3. Kết quả F1 của các thuật toán Stacking ................................................................ 47 Bảng 4. Kết quả AUC của các thuật toán Stacking ............................................................ 48 Bảng 5. Kết quả thời gian huấn luyện của các thuật toán Stacking ................................... 49 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 .................... 13 Hình 2. Thuật toán học máy ............................................................................................... 18 Hình 3. Cây thể hiện sự sống trên tàu Titanic .................................................................... 25 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... 33 Hình 5. Các cây trong Rừng ngẫu nhiên ............................................................................ 34 Hình 6. AdaBoost sử dụng sô bộ ước tính cơ sở khác nhau. ............................................. 36 Hình 7. Stacking sử dụng nhiều loại bộ học khác nhau. .................................................... 38 Hình 8. Mô tả trực quan đường cong ROC ........................................................................ 41 Hình 9. Mô hình Boosting cho thuật toán AdaBoost và Gradient Boosting. ..................... 44 Hình 10. Mô hình Bagging cho thuật toán Random Forest và Bagging. ........................... 44 Hình 11. Mô hình stacking ................................................................................................. 45 Hình 12. Đường cong ROC ứng với từng thuật toán học kết hợp. .................................... 50 Hình 13. Giao diện ứng dụng web hỗ trợ dự đoán lỗi ........................................................ 51 Hình 14. Báo cáo kết quả dự đoán lỗi phần mềm .............................................................. 52 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 quá 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ự đoá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 soá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ự đoá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 toá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ự đoá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ự đoá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ự đoá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ự đoá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 toán phân tích dự đoá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 toán dự đoán và tìm hiểu các thuật toá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 toán dự đoá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ự đoá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ự đoá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 toán để dự đoá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 toá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 soá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 soát tốt nguồn lực, giảm thiểu chỉ phí đầu tư, rút ngắn thời gian, đảm bảo tính cạnh tranh và nâng cao hiệu quả kinh doanh. 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ự đoá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ỉ: http://promise.site.uottawa.ca/SERepository), 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ự đoá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 toá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Ự ĐOÁN LỖI 1.1 Bài toán dự đoá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 ngoà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ì hoã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ừ quá 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 soá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ự đoá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ự đoá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ự đoán. Dự đoá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ự đoá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ự đoá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ự đoá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ự đoá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ự đoá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ự đoá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ự đoá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 toàn dự án. Nghĩa là, nó thực hiện cùng một mô hình dự đoá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ự đoá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 soát quá 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 nguyên, 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ự đoá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ự đoá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 Định nghĩa Weighted Giá trị của WMC bằng với số lượng các phương thức trong lớp (mặc methods per class định trọng số bằng nhau cho tất cả các phương thức) (WMC) Depth of Inheritance Tree (DIT) Các số liệu DIT cung cấp cho mỗi lớp một phép đo của các mức thừa kế từ các đối tượng phân cấp cao nhất. Number of Children (NOC) Chỉ số NOC đơn giản là các phép đo lớp con trực tiếp của lớp. Coupling between object classes (CBO) Số liệu CBO đại diện cho số lượng các lớp được liên kết với một lớp nhất định (khớp nối và khớp nối hướng tâm). Khớp nối này có thể xảy ra thông qua gọi phương thức, truy nhập trường, thừa kế, phương thức đối số, kiểu trả về và ngoại lệ. Response for a Class (RFC) Số liệu RFC dùng để đo số phương thức khác nhau có thể được thực hiện khi một đối tượng của lớp đó nhận được yêu cầu. Xuất phát ý tưởng ta muốn tìm mỗi phương thức của lớp, các phương thức mà lớp sẽ gọi và số lần lặp cho mỗi phương thức được gọi, tính toán khả năng phương thức tiếp tục được gọi của đồ thị gọi phương thức. Tuy nhiên, quá trình này có thể khó thỏa mãn độ chính xác không cao. Ckjm tính toán một xấp xỉ để giải quyết bằng cách đơn giản thiết lập với việc kiểm tra các lần gọi phương thức trong quan hệ phương thức lớp. Giá trị của RFC là tổng số phương thức được gọi trong phạm vi phương thức lớp và số lượng các phương thức lớp. Đây là cách đơn giản hóa được sử dụng trong mô tả của Chidamber và Kemerer. Lack of cohesion in methods (LCOM) Số liệu LCOM đếm tập hợp phương thức có trong một lớp mà nó không liên quan đến việc chia sẻ một số trường trong lớp. Định nghĩa của số liệu này (sử dụng trong ckjm) xem xét tất cả các cặp phương thức lớp. Một trong số các cặp có phương thức truy nhập ít nhất một trường chung của lớp, trong khi các cặp khác hai phương 16 thức không chia sẻ bất kỳ truy cập trường chung nào. Việc thiếu sự gắn kết trong các phương thức sau đó được tính bằng cách trừ số lượng các cặp phương thức không chia sẻ một trường truy cập vào số lượng các cặp phương thức mà chúng được thực hiện. Lack of cohesion in methods (LCOM3) m - số phương thức trong một lớp. a - số thuộc tính trong một lớp µ(A)- số phương thức truy cập vào thuộc tính A Afferent couplings (Ca) Số liệu Ca thể hiện cho số lượng các lớp phụ thuộc vào lớp được đo Efferent couplings (Ce) Số liệu Ce thể hiện cho số lớp học mà lớp đo được phụ thuộc vào. Number of Public Số liệu NPM chỉ đơn giản là đếm tất cả các phương thức trong một Methods (NPM) lớp được chỉ định là công khai. Số liệu này còn được gọi là kích thước giao diện lớp (CIS) Data Access Metric (DAM) Số liệu này là tỷ lệ các thuộc tính riêng (protected) trên tổng số thuộc tính được chỉ định trong lớp. Measure of Aggregation (MOA) Số liệu này đo lường một phần trong toàn bộ quan hệ, thực hiện bằng cách sử dụng các thuộc tính. Số liệu này là số lượng các trường của lớp mà kiểu được định nghĩa bởi người dùng. Measure of Functional Abstraction (MFA) Số liệu này là tỷ lệ của số phương thức được thừa kế bởi một lớp trên tổng số phương thức có thể truy cập bởi các phương thức thành viên của lớp. Các Constructor như Java.lang.Object (như mức cha) được bỏ qua. Cohesion Among Số liệu này tính các quan hệ giữa các phương thức của một lớp dựa Methods of Class trên danh sách các tham số của các phương thức. Số liệu này được (CAM) tính toán bằng cách sử dụng tổng hợp các loại tham số phương thức khác nhau trong mỗi phương thức chia cho số các kiểu tham số phương thức khác nhau trong toàn bộ lớp nhân với số lượng các phương thức. 17 Inheritance Coupling (IC) Số liệu này cung cấp số lớp cha mà một lớp nhất định được kết hợp. Một lớp được kết hợp với lớp cha nếu một trong những phương thức thừa kế của nó phụ thuộc vào các phương thức mới hoặc được xác định lại trong lớp. Lớp được kết hợp với lớp cha nếu thỏa mãn một trong các điều kiện sau: • Một trong các phương thức thừa kế của nó sử dụng một thuộc tính mà nó được định nghĩa lại trong Phương thức mới. • Một trong những phương thức được thừa kế gọi một phương thức được định nghĩa lại. • Một trong những phương thức được thừa kế được gọi bởi một phương thức được định nghĩa lại và sử dụng tham số mà nó được định nghĩa trong Phương thức được định nghĩa lại. Coupling Số liệu đo lường tổng số các phương pháp mới hoặc định nghĩa lại Between Methods mà tất cả các phương thức thừa kế được kết hợp. Có một liên kết khi (CBM) ít nhất một trong các điều kiện mà định nghĩa số liệu IC được đưa ra. Average Method Complexity (AMC) Số liệu này đo trung bình kích thước phương thức cho mỗi lớp. Kích thước của một phương thức bằng số mã nhị phân Java trong phương thức. McCabe's cyclomatic complexity (CC) CC bằng số lượng đường dẫn khác nhau trong một phương thức (hàm) cộng với 1. Độ phức tạp chu kỳ được định nghĩa là: CC = E – N + P E - số cạnh của đồ thị N - số lượng các nút của đồ thị P - số lượng thành phần kết nối CC chỉ là số liệu kích thước phương thức. Các mô hình xây dựng để dự đoán kích thước lớp. Do đó, số liệu phải được chuyển đổi thành một số liệu kích thước lớp. Hai số liệu được bắt nguồn: • Max (CC) - giá trị lớn nhất của CC trong số các phương pháp của lớp được xét. • Avg (CC) – trung bình số học của giá trị CC trong lớp được xét. Lines of Code (LOC) Số liệu LOC dựa trên mã nhị phân Java. Nó là tổng số trường, số phương thức và số lệnh trong tất cả các phương thức của lớp được xét. 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 toá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 toá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). Ngoà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 toá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 toá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 toá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à toà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 quá 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ự đoá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 toá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 toán Máy vectơ hỗ trợ (SVM) hoặc Cây quyết định (DS). Bước 5. Hoàn thành thiết kế: chạy các thuật toá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 soá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 toán học có giám sát được đề xuất, mỗi thuật toán đều có điểm mạnh và điểm yếu và không có thuật toá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ự đoán đầu ra cho x. Một thuật toán học máy có phương sai cao cho một đầu vào cụ thể x nếu nó dự đoá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ự đoá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 toá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 quá 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 toá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
- Xem thêm -

Tài liệu liên quan