intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đánh giá hiệu quả của kỹ thuật học máy trong việc dự đoán lỗi cho phần mềm Java

Chia sẻ: Anhnangchieuta | Ngày: | Loại File: PDF | Số trang:8

32
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nghiên cứu này đánh giá việc áp dụng các thuật toán học có giám sát phổ biến hiện nay vào dự đoán lỗi các phần mềm Java. Tiến hành thử nghiệm với 07 thuật toán phổ biến trên tập dữ liệu tera-Promise, kết quả cho thấy, có hai thuật toán hiệu quả nhất là mạng neuron nhân tạo nhiều lớp (đối với bài toán dự đoán lỗi hướng đối tượng) và Naïve Bayes (đối với bài toán dự đoán lỗi hướng phương thức).

Chủ đề:
Lưu

Nội dung Text: Đánh giá hiệu quả của kỹ thuật học máy trong việc dự đoán lỗi cho phần mềm Java

  1. 204 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” Đánh giá hiệu quả của kỹ thuật học máy trong việc dự đoán lỗi cho phần mềm Java Trần Duy Hùng1, Lê Thị Mỹ Hạnh1 1 Trường Đại học Bách Khoa, Đại học Đà Nẵng Tóm tắt. Dự đoán lỗi phần mềm là một hoạt động vô cùng quan trọng, giúp cho nhà phát triển phát hiện kịp thời những lỗi bị bỏ sót trong quá trình kiểm thử phần mềm, làm tăng chất lượng phần mềm, đồng thời giảm rủi ro khi phát triển sản phẩm. Ở nghiên cứu này, chúng tôi đánh giá việc áp dụng các thuật toán học có giám sát phổ biến hiện nay vào dự đoán lỗi các phần mềm Java. Chúng tôi tiến hành thử nghiệm với 07 thuật toán phổ biến trên tập dữ liệu tera-Promise, kết quả cho thấy, có hai thuật toán hiệu quả nhất là mạng neuron nhân tạo nhiều lớp (đối với bài toán dự đoán lỗi hướng đối tượng) và Naïve Bayes (đối với bài toán dự đoán lỗi hướng phương thức). Những kết quả này là bước đầu cho các nghiên cứu ứng dụng các phương pháp học máy mới vào bài toán dự đoán lỗi phần mềm Java. Từ khóa: Học có giám sát, dự đoán lỗi phần mềm, độ đo phần mềm, Java. 1 Giới thiệu Phầm mềm đã và đang là một thành phần không thể thiếu trong mọi lĩnh vực của cuộc sống: từ giáo dục cho đến y tế, từ kinh tế cho đến quốc phòng,… đâu đâu cũng có sự góp mặt của phần mềm. Nhu cầu sử dụng ngày càng tăng khiến cho các dự án phần mềm ngày càng trở nên phức tạp. Dự án càng lớn thì việc kiểm thử phần mềm càng tốn kém và phức tạp, nguy cơ bỏ sót những lỗi nghiêm trọng trong quá trình kiểm thử ngày càng cao và tổn thất gây ra do lỗi phần mềm ngày càng trở nên nghiêm trọng. Đảm bảo chất lượng sản phẩm chính là đảm bảo các sản phẩm phần mềm đến tay khách hàng không còn lỗi, các yêu cầu của khách hàng được thỏa mãn, tối ưu nguồn lực thực hiện dự án. Do đó việc kiểm tra để phát hiện lỗi nên được thực hiện xuyên suốt quá trình thực hiện dự án phần mềm. Phát hiện lỗi càng sớm nguồn lực và rủi ro của dự án phần mềm càng giảm. Trên thực tế các công ty phần mềm thường chờ đến khi kết thúc giai đoạn lập trình mới tiến hành kiểm tra lỗi của chương trinh, do đó các lỗi nghiêm trọng của dự án sẽ được phát hiện muộn, tốn rất nhiều nguồn lực để quay lại thực hiện lập trình từ đầu. Việc kiểm tra chương trình ngay trong giai đoạn lập trình sẽ giúp phát hiện ra các sai sót kịp thời: các vấn đề tiềm ẩn, các lỗi thời gian thực hoặc có thể sửa lỗi ngay từ ý tưởng thiết kế trước khi đóng gói bàn giao toàn bộ chương trình cho nhóm kiểm thử thực hiện. Để giúp quá trình sửa lỗi được thực hiện hiệu quả, người quản lý dự án cần có thông tin càng chính xác càng tốt về khả năng có lỗi của từng thành phần cụ thể trong hệ thống. Mặc dù biết chính xác thành phần nào có lỗi là vấn đề khó, một số nghiên cứu gần đây (1), (2), (3), (4) cho thấy, dựa trên những thông tin về hệ thống cũng như quá trình phát triển phần mềm, ta có thể dự đoán với một độ chính xác nhất định khả năng có lỗi hay số lượng lỗi trong các thành phần của hệ thống phần mềm được xây dựng.
  2. Trần Duy Hùng, Lê Thị Mỹ Hạnh 205 Có khá nhiều phương pháp và cách tiếp cận khác nhau trong việc dự đoán lỗi phần mềm, như Naïve Bayes (1), rừng ngẫu nhiên (Random Forest) (2), máy véc-tơ hỗ trợ SVM (3) và mạng nơ-ron nhân tạo ANN (4),... Hầu hết tất cả các nghiên cứu dự đoán lỗi phần mềm sử dụng các độ đo và dữ liệu lỗi của các phiên bản phần mềm trước để xây dựng các mô hình dự đoán lỗi, gọi là các cách tiếp cận học có giám sát. Để xây dựng mô hình dự đoán lỗi phần mềm các nghiên cứu sử dụng kỹ thuật học máy để dự đoán bằng cách sử dụng các phép đo cấu trúc mã nguồn trong các lớp, phương thức, gọi là các đặc trưng phần mềm. Những đặc trưng này được trích xuất bằng việc phân tích mã nguồn của chương trình và cũng chính là cơ sở để đánh giá độ phức tạp của phần mềm. Các phân lớp học máy có giám sát bao gồm 02 giai đọan: giai đoạn huấn luyện và giai đoạn kiểm tra; kết quả của giai đoạn huấn luyện là một mô hình được áp dụng cho các dữ liệu kiểm tra để thực hiện một vài dự đoán (5). Có một vài cách tiếp cận khác như phân cụm, được dùng khi không có sẵn các dữ liệu trước; các phương pháp này gọi là các cách tiếp cận học không giám sát. Trong nghiên cứu này, chúng tôi bước đầu phân tích về dự đoán lỗi cho phần mềm Java sử dụng các kỹ thuật học máy có giám sát và đánh giá hiệu quả của các kỹ thuật này trên bài toán dự đoán lỗi dựa vào các đặc trưng mã nguồn phần mềm. Thực nghiệm được tiến hành trên 02 tập dữ liệu NASA với kích thước và tập đặc trưng khác nhau. Phần tiếp theo của nghiên cứu sẽ trình bày những nội dung chính như sau: Phần 2 trình bày tổng quan dự đoán lỗi dựa vào đặc trưng mã nguồn phần mềm. Phần 3 trình bày về quy trình huấn luyện mô hình dự đoán lỗi phần mềm và việc áp dụng các thuật toán học máy vào bài toán cũng như các độ đo đánh giá hiệu quả của các thuật toán. Phần 4 là kết quả thực nghiệm và phần cuối cùng là kết luận. 2 Dự đoán lỗi dựa vào đặc trưng mã nguồn phần mềm Dự đoán lỗi phần mềm là phương pháp đánh giá các thành phần trong hệ thống phần mềm và xác định những thành phần có khả năng có lỗi. Việc dự đoán lỗi có thể chỉ ra vị trí của lỗi, lỗi như thế nào trong một thành phần phần mềm hoặc đơn giản là chỉ ra những thành phần nào có khả năng có lỗi, thành phần nào chứa nhiều lỗi, thành phần nào chưa ít lỗi hơn. Các đặc trưng mã nguồn đóng một vai trò quan trọng để xây dựng các mô hình dự đoán lỗi và được trích xuất trực tiếp từ mã nguồn chương trình. Mã nguồn càng phức tạp thì phần mềm càng có khả năng tồn tại nhiều lỗi. Để đo độ phức tạp của mã nguồn, các nhà nghiên cứu đã đề xuất nhiều phép đo các đặc trưng mã nguồn. LOC (Line of Code) - phép đo số dòng mã, là phép đo về kích thước mã nguồn nhằm xác định chiều dài, số lượng, độ lớn tổng thể của sản phẩm. Akiyama (6) cho rằng độ dài mã nguồn càng lớn thì chương trình càng phức tạp và nguy cơ lỗi càng cao. Vì vậy Akiyama đã sử dụng độ đo này để dự đoán lỗi phần mềm. Độ đo của Akiyama cũng được sử dụng trong nhiều nghiên cứu xây dựng các mô hình dự đoán khác (7). Tuy nhiên, độ đo của Akiyama còn khá đơn giản, không mô tả đươc chính xác độ phức tạp của phần mềm. Vì vậy, sau Akiyma, Halstead cũng đề xuất một số phép đo độ phức tạp sử dụng các toán tử, toán hạng (8). Theo Halstead, phần mềm càng phức tạp thì số toán tử, toán hạng càng lớn. Các phép đo được đề xuất bao gồm từ vựng chương trình, chiều dài, kích thước, nỗ lực và thời gian (8) và các phép đo này đều liên quan đến kích thước và số dòng mã. McCabe (9) cũng đã đề xuất các phép đo chu trình để biểu diễn độ phức tạp của phần mềm. Các phép đo của McCabe được tính bằng số nút, cung và các thành phần liên kết trong đồ thị luồng điều khiển của mã nguồn. Độ đo của Halstead và McCabe cũng
  3. 206 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” được sử dụng trong các mô hình dự đoán trong (7). Các độ đo của Halstead và McCabe và độ đo LOC của Akiyama được xếp vào nhóm các độ đo hướng phương thức. Từ khi các ngôn ngữ lập trình hướng đối tượng trở nên phổ biến, các độ đo hướng đối tượng cũng đã được đề xuất và tiêu biểu nhất là các phép đo của Chidamber-Kemerer (CK) (10). Các phép đo này được thiết kế từ các đặc trưng hướng đối tượng như tính ghép nối (coupling), tính kết dính (cohension), tính kế thừa (inheritance), tính che dấu dữ liệu. Các phép đo CK bao gồm 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ên cạnh phép đo CK, các phép đo đặc trưng hướng đối tượng khác cũng được đề xuất dựa trên số biến đối tượng, phương thức trong lớp, số thuộc tính, số các thuộc tính với các quyền truy xuất khác nhau (public, private, protected), số dòng mã trong lớp, số phương thức, số phương thức với các quyền truy xuất khác nhau (public, private, protected), số phương thức được thừa kế, số lớp sử dụng lớp hiện tại hay lớp hiện tại đang sử dụng bao nhiêu lớp (11). 3 Dự đoán lỗi phần mềm sử dụng các kỹ thuật học máy Các nghiên cứu về dự đoán lỗi phần mềm hiện nay tập trung vào hai vấn đề chính để xây dựng các mô hình dự đoán lỗi hiệu quả: (1) đề xuất và chọn lựa các đặc trưng mã nguồn phù hợp, (2) phát triển và ứng dụng các thuật toán học máy mới. Các nghiên cứu về xây dựng mô hình để dự đoán lỗi trong phần mềm hiện nay yêu cầu phải có một kho dữ liệu đầy đủ về các lỗi phần mềm của các dự án đã phát triển trước đây để xây dựng một mối tương quan giữa các đặc trưng và lỗi. Những nghiên cứu về các mô hình dự đoán chủ yếu tập trung vào các thuật toán học máy để phân lớp các thành phần phần mềm thành có lỗi hoặc không có lỗi. Như đã trình bày ở phần 2, hầu hết các nghiên cứu đều áp dụng kỹ thuật học máy vào dự đoán lỗi phần mềm. Trong nghiên cứu này, bảy thuật toán phổ biến nhất sẽ được áp dụng vào dự đoán lỗi phần mềm: Logistic Regression (12), Support Vector Machine (3), K-Nearest Neighbors (13), Naive Bayes (1), Random Forest (2), Decision Tree (14), Multilayer Perceptron (4) . Quy trình dự đoán lỗi phần mềm sử dụng các kỹ thuật học máy được chia làm hai giai đoạn chính: Giai đoạn huấn luyện và giai đoạn dự đoán lỗi, được trình bày ở Hình 1. Hình. 1. Quy trình dự đoán lỗi phần mềm
  4. Trần Duy Hùng, Lê Thị Mỹ Hạnh 207 3.1 Tập dữ liệu huấn luyện Công đoạn đầu tiên và quan trọng nhất trong việc dự đoán lỗi phần mềm là chuẩn bị dữ liệu. Lĩnh vực dự đoán lỗi phần mềm có tập dữ liệu rất hạn chế vì các nhà phát triển thường không cung cấp thông tin và mã nguồn về sản phẩm của mình. Tập dữ liệu được sử dụng trong nghiên cứu này được thu thập từ kho dữ liệu tera-Promise - đây là kho dữ liệu miễn phí dành cho các nhà nghiên cứu phát triển phần mềm (15). Dữ liệu huấn luyện được tổ chức gồm hai phần: dữ liệu dự đoán lỗi hướng đối tượng và dữ liệu dự đoán lỗi hướng phương thức: - Tập dữ liệu huấn luyện cho mô hình dự đoán lỗi hướng đối tượng là một tập khá lớn, gồm hơn 10.000 hàng, và 24 thuộc tính. Mỗi hàng của tập dữ liệu ứng với một lớp trong các chương trình Java nổi tiếng (như Ant, Log4j,…), được thu thập bằng công cụ CKJM (16). Trong đó tỉ lệ dữ liệu có lỗi so với dữ liệu không lỗi là 3:5. - Đối với mô hình dự đoán lỗi hướng phương thức, NASA cung cấp một tập dữ liệu dành cho Java là KC3 (17) gồm 40 thuộc tính. Tuy nhiên KC3 là một tập khá nhỏ (chỉ hơn 400 hàng). Ở nghiên cứu này, chúng tôi chỉ chọn ra 22 thuộc tính phổ biến để huấn luyện, các thuộc tính này được mô tả ở trong (18). Tỉ lệ dữ liệu có lỗi so với dữ liệu không lỗi trong tập KC3 là 1:5. 3.2 Tiền xử lý Dữ liệu huấn luyện thu thập được là những dữ liệu thô, có được từ việc phân tích mã nguồn các phần mềm sẵn có. Dữ liệu này tồn tại nhiều giá trị thiếu và nhiễu, gây ảnh hưởng đến quá trình huấn luyện mô hình dự đoán lỗi. Để tăng độ chính xác của việc dự đoán lỗi, dữ liệu thô cần được tiền xử lý trước khi đưa vào huấn luyện. Quá trình tiền xử lý dữ liệu gồm các bước sau: - Xử lý các giá trị thiếu: Các vấn đề phát sinh xảy ra trong quá trình thu thập có thể dẫn đến các thiếu giá trị của một số thuộc tính trong tập dữ liệu. Các giá trị này thường được biểu diễn bằng “?” hoặc “N/A”, sẽ được thay thế bởi giá trị trung bình của cột chứa giá trị thiếu đó. - Chuẩn hóa dữ liệu: Mỗi cột trong tập dữ liệu đều có một miền giá trị khác nhau. Cột có miền giá trị lớn sẽ gây nhiều ảnh hưởng đến quá trình huấn luyện hơn cột có miền giá trị nhỏ. Việc chuẩn hóa nhằm đưa các cột về một miền giá trị thống nhất, đảm bảo tính công bằng cho các cột trong tập dữ liệu. - Giảm số chiều: Như đã trình bày ở Phần 3.1, dữ liệu được sử dụng trong bài báo này có số chiều khá lớn (tập dữ liệu hướng phương thức có 22 thuộc tính và tập dữ liệu hướng đối tượng có 24 thuộc tính), dễ dẫn đến tình trạng overfitting hoặc underfitting trong quá trình huấn luyện, giảm tính chính xác của mô hình dự đoán. Vì vậy, kĩ thuật trích chọn đặc trưng (PCA) đã được sử dụng để giảm số chiều của dữ liệu. 3.3 Đánh giá thuật toán Để đánh giá hiệu quả của một thuật toán phân lớp, người ta thường so khớp kết quả dự đoán được với kết quả thực tế. Tuy nhiên, ở bài toán phân lớp lỗi, số lượng dữ liệu có lỗi nhỏ hơn rất nhiều so với số lượng dữ liệu không lỗi khiến cho việc so khớp kết quả không phản ánh đúng hiệu quả của thuật toán. Thay vào đó, các độ đo Precision, Recall, F1 được sử dụng. Những độ đo này có được bằng việc phân tích ma trận nhầm lẫn: - Preicsion: Trong số các lớp/ hàm được phân loại có lỗi, bao nhiêu lớp / hàm thực sự có lỗi. TP TP Precision = = TP + FP #dự đoán có lỗi
  5. 208 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” - Recall: Thuật toán đã dự đoán đúng có lỗi bao nhiêu lớp/ hàm trong tổng số lớp/ hàm thực tế có lỗi. TP TP Recall = = TP + FN #thực tế có lỗi - Precision tượng trưng cho độ chính xác của thuật toán, còn Recall tượng trưng cho độ nhạy. Đối với những bài toán yêu cầu độ chính xác cao (như phân loại phim nào dành cho trẻ em), Precision được ưu tiên hơn, ngược lại đối với những bài yêu cầu độ nhạy cao (như phần mềm chống trộm không được phép bỏ sót trộm), người ta quan tâm nhiều hơn đến Recall. - F1 là sự kết hợp của 2 độ đo Precision và Recall. Độ đo F1 chỉ lớn khi cả hai độ đo precision và recall cùng lớn. Ở bài toán dự đoán lỗi, bên cạnh việc quan tâm đến độ nhạy với lỗi (recall) , chúng ta còn cần phải chú ý đến độ chính xác của việc dự đoán để hạn chế những báo động giả (precision). Vì thế trong nghiên cứu này, độ đo F1 sẽ được sử dụng để đánh giá độ hiệu quả của thuật toán. Bên cạnh Precision và Recall, đường cong ROC cũng là một tiêu chí được sử dụng rộng rãi trong việc đánh giá độ hiệu quả của các thuật toán phân lớp nhị phân (Binary Classifiers). Phần diện thích phía dưới đường cong ROC (gọi là AUC - area under the curve) cũng có thể được sử dụng để đánh giá thuật toán. Thuật toán phân lớp hoàn hảo có AUC bằng 1, ngược lại thuật toán tồi tệ nhất sẽ có AUC bằng 0,5. 4 Kết quả thử nghiệm Trong nghiên cứu này, các thuật toán học máy được cài đặt bằng thư viện sklearn của Python. Kết quả thử nghiệm được tính bằng phương pháp 10-fold cross validation. Theo đó thì tập dữ liệu được chia làm 10 phần xấp xỉ nhau sao cho tỉ lệ có lỗi/ không lỗi trong mỗi phần đều như nhau. Việc huấn luyện mô hình dự đoán lỗi sẽ được lặp 10 lần, ở mỗi vòng lặp, một tập con sẽ được dùng làm tập kiểm tra và 9 tập con còn lại sẽ được dùng làm tập huấn luyện. Kết quả thử nghiệm là kết quả trung bình của 10 vòng lặp. 4.1 Kết quả dự đoán lỗi hướng đối tượng Dựa vào thử nghiệm, chúng tôi chọn các tham số cho các thuật toán như sau: LogisticRegression: c = 0,2, max_iter = 1.000; K-nearest Neighbor: n_neighbors = 1, weight = 'uniform'; Decision Tree: min_samples_leaf = 3, min_samples_split = 4; Random Forest: min_samples_leaf = 1, min_samples_leaf = 2, n_estimators = 10; SVM: c = 0,9, kernel=’sigmoid’; Multilayer Perceptron: activation=’relu’, alpha=0,0002. Bảng 1. Kết quả dự đoán lỗi hướng đối tượng Độ đo STT Precision Recall F1 AUC Accuracy Thuật toán 1 Logistic Regression 0,59 0,25 0,36 0,57 0,66 2 K-nearest Neighbors 0,43 0,44 0,44 0,55 0,58 3 Decision Tree 0,43 0,40 0,41 0,54 0,57 4 Random Forest 0.,46 0,39 0,42 0,56 0,6 5 Naïve Bayes 0,58 0,23 0,33 0,57 0,65 6 SVM 0,60 0,30 0,43 0,6004 0,67 7 Multilayer Perceptron 0,56 0,41 0,47 0,6030 0,66
  6. Trần Duy Hùng, Lê Thị Mỹ Hạnh 209 Hình 2. Đường cong ROC của các thuật toán trong việc dự đoán lỗi hướng lớp Ở bài toán dự đoán lỗi hướng đối tượng, thuật toán SVM dự đoán chính xác nhiều lỗi nhất (Precision 0,6), còn thuật toán K-nearest Neighbor nhạy với lỗi nhất (Recall 0,44). Tuy nhiên, thuật toán có sự cân bằng giữa độ nhạy và độ chính xác nhất là mạng neuron nhân tạo nhiều lớp (F1 0,47). Thuật toán này cũng có diện tích dưới đường cong ROC lớn nhất (AUC 0,604). 4.2 Kết quả dự đoán lỗi hướng phương thức Cũng bằng thử nghiệm, các tham số sau cho kết quả tốt nhất ở mỗi thuật toán: LogisticRegression: c = 1,0, max_iter = 1.000; K-nearest Neighbor: n_neighbors = 5, weight = 'uniform'; Decision Tree: min_samples_leaf = 1, min_samples_split = 2; Random Forest: min_samples_leaf = 1, min_samples_leaf = 2, n_estimators = 10; SVM: c = 0,9, kernel = 'sigmoid'; Multilayer Perceptron: activation = 'tanh', alpha = 0,0002. Bảng 2. Kết quả dự đoán lỗi hướng phương thức Độ đo STT Precision Recall F1 AUC Accuracy Thuật toán 1 Logistic Regression 0,67 0,18 0,29 0,58 0,91 2 K-nearest Neighbors 0,70 0,27 0,38 0,63 0,82 3 Decision Tree 0,38 0,35 0,36 0,64 0,88 4 Random Forest 0,65 0,26 0,37 0,62 0,92 5 Naïve Bayes 0,41 0,37 0,39 0,66 0,89 6 SVM 0,00 0,00 0,00 0,50 0,90 7 Multilayer Perceptron 0,64 0,21 0,32 0,60 0,91 Hình 3. Đường cong ROC của các thuật toán trong việc dự đoán lỗi hướng phương thức
  7. 210 KỶ YẾU HỘI THẢO KHOA HỌC QUỐC GIA CITA 2017 “CNTT VÀ ỨNG DỤNG TRONG CÁC LĨNH VỰC” Ở bài toán dự đoán lỗi hướng phương thức, vì tập dữ liệu KC3 của Nasa khá nhỏ nên các thuật toán không đạt được độ chính xác như mong muốn. Trong tất cả các thuật toán trên, Naïve Bayes dự đoán lỗi với kết quả tốt nhất (F1 0,39, AUC 0,66). 5 Kết luận Trong nghiên cứu này, chúng tôi đã cài đặt và sử dụng các thuật toán học máy phổ biến để dự đoán lỗi cho các phần mềm Java. Kết quả thử nghiệm cho thấy thuật toán mạng nơ-ron nhân tạo nhiều lớp đạt kết quả tốt nhất ở bài toán dự đoán lỗi hướng đối tượng và thuật toán Naïve Bayes đạt kết quả tốt nhất ở bài toán dự đoán lỗi hướng phương thức. Trong tập dữ liệu huấn luyện, số mẫu có lỗi ít hơn số mẫu không lỗi rất nhiều. Điều này đã làm ảnh hưởng kết quả thử nghiệm vì các mô hình phân lớp có xu hướng nghiêng về lớp có số mẫu nhiều hơn. Trong tương lai, chúng tôi sẽ thu thập thêm các dữ liệu có lỗi của phần mềm để giảm sự chênh lệch này, tăng độ chính xác cho thuật toán. Ngoài ra, các phương pháp học máy mới như mạng nơ-ron tích chập (CNNs) (19) cũng sẽ được nghiên cứu áp dụng trong những hướng đi tiếp theo. Tài liệu tham khảo 1. Pai, Ganesh J., Dugan, Bechta Joanne. Empirical Analysis of Software Fault Content and Fault Proneness Using Bayesian Methods. 10, IEEE Transactions on Software Engineering, Vol. 33, pp. 675-686, 2007. 2. Ma, Y., Guo, L., Cukic, B.,. A Statistical framework for the prediction of fault-proneness. Advances in Machine Learning Applications in Software Engineering. s.l. : Idea Group, 2007. 3. Elish, Karim O.; Elish, Mahmoud O.;. Predicting defect-prone software modules using support vector machines. Journal of Systems and Software, Vol. 81, pp. 649-660, 2008. 4. Kanmani, S.; Rhymend Uthariaraj, V.; Sankaranarayanan, V.; Thambidurai, P.;. Object- oriented software fault prediction using neural networks. Information and Software Technology, Vol. 49, pp. 483-492, 2007. 5. Xie, X., Ho, J.W.K., Murphy, C., Kaiser, G., Xu, B., Chen, T.Y. Testing and validating machine learning classifiers by metamorphic testing, Journal of System and Software, Vol. 84, pp. 544-558, 2011. 6. Akiyama, F. An Example of Software System Debugging. Proceedings of the International Federation of Information Processing Societies Congress. 1971. 7. Song, Q., Jia, Z., Shepperd, M., Ying, S. Liu, J. A general software defect-proneness prediction framework3, IEEE Transactions on Software Engineering, Vol. 37, pp. 356-370. 2011. 8. Halstead, M. H. Elements of Software Science. USA : Elsevier Science, 1977. 9. McCabe, T. J. A Complexity Measure. 4, IEEE Transactions on Software Engineering, Vol. 2, pp. 308-320. 1976. 10. A Metrics Suite for Object Oriented Design. Chidamber, S. R.; Kemerer, C. F. IEEE Transactions on Software Engineering, Vol. 20, pp. 476-493. 1994. 11. Are popular classes more defect prone? Bacchelli, A.; D'Ambros, M.; Lanza, M. Berlin : s.n., FASE'10 Proceedings of the 13th international conference on Fundamental Approaches to Software Engineering. 2010. 12. Peng, C. Y. J.; Lee, K. L. Ingersoll, G. M. An Introduction to Logistic Regression Analysis and Reporting. 1, The Journal of Educational Research, Vol. 96, pp. 3-14. 2002.
  8. Trần Duy Hùng, Lê Thị Mỹ Hạnh 211 13. Govil, S. Chugh, N. Prediction of Defects in Software Using K-Nearest Neighbour Algorithm for Cost Reduction. International Journal of Advanced Research in Computer Science & Technology, Vol. 3. 2015. 14. . Quinlan, J. R. Induction of Decision Trees 1, Machine Learning, Vol. 1, pp. 81-106. 1986. 15. Menzies, T., Krishna, R., Pryor, D. The Promise Repository of Empirical Software Engineering Data. 2015. 16. Jureczko, M.; Spinellis, D.;. Using Object-Oriented Design Metrics to Predict Software Defects. Models and Methodology of System Dependability. Poland : Oficyna Wydawnicza Politechniki Wroclawskiej, pp. 69-81, 2010. 17. Shepperd, M.; Song, Q.; Sun, Z. Data Quality: Some Comments on the NASA Software Defect Datasets. 9, IEEE Transactions on Software Engineering, Vol. 39, pp. 1208 - 1215, 2013. 18. Sandhu, P. S., Singh, S., Budhija, N.. Prediction of Level of Severity of Faults in Software Systems using Density Based Clustering. Singapore: s.n., International Conference on Software and Computer Applications. 2011. 19. Li, J.; He, P.; Zhu, J.; Lyu, M. R.;. Software Defect Prediction via Convolutional Neural Network. Prague : s.n., 2017. IEEE International Conference on Software Quality, Reliability and Security. pp. 318 - 328. 2017.
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
6=>0