Đá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

pdf 8 trang Gia Huy 17/05/2022 2940
Bạn đang xem tài liệu "Đá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", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfdanh_gia_hieu_qua_cua_ky_thuat_hoc_may_trong_viec_du_doan_lo.pdf

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ự đố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ự đố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 tốn học cĩ giám sát phổ biến hiện nay vào dự đố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 tốn phổ biến trên tập dữ liệu tera-Promise, kết quả cho thấy, cĩ hai thuật tốn hiệu quả nhất là mạng neuron nhân tạo nhiều lớp (đối với bài tốn dự đốn lỗi hướng đối tượng) và Nạve Bayes (đối với bài tốn dự đố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 tốn dự đốn lỗi phần mềm Java. Từ khĩa: Học cĩ giám sát, dự đố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 tồ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ự đố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ự đốn lỗi phần mềm, như Nạ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ự đố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ự đố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ự đốn lỗi phần mềm các nghiên cứu sử dụng kỹ thuật học máy để dự đố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ự đố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ự đố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 tốn dự đố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ự đố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ự đốn lỗi phần mềm và việc áp dụng các thuật tốn học máy vào bài tốn cũng như các độ đo đánh giá hiệu quả của các thuật tố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ự đốn lỗi dựa vào đặc trưng mã nguồn phần mềm Dự đố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ự đố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ự đố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ự đố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ự đố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 tốn tử, tốn hạng (8). Theo Halstead, phần mềm càng phức tạp thì số tốn tử, tố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ự đố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ự đố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ự đố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ự đố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 tốn học máy mới. Các nghiên cứu về xây dựng mơ hình để dự đố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ự đốn chủ yếu tập trung vào các thuật tố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ự đốn lỗi phần mềm. Trong nghiên cứu này, bảy thuật tốn phổ biến nhất sẽ được áp dụng vào dự đố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ự đố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ự đốn lỗi, được trình bày ở Hình 1. Hình. 1. Quy trình dự đố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ự đốn lỗi phần mềm là chuẩn bị dữ liệu. Lĩnh vực dự đố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ự đốn lỗi hướng đối tượng và dữ liệu dự đốn lỗi hướng phương thức: - Tập dữ liệu huấn luyện cho mơ hình dự đố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ự đố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ự đốn lỗi. Để tăng độ chính xác của việc dự đố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ự đố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 tốn Để đánh giá hiệu quả của một thuật tốn phân lớp, người ta thường so khớp kết quả dự đốn được với kết quả thực tế. Tuy nhiên, ở bài tố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 tố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ự đố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 tốn đã dự đố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 tốn, cịn Recall tượng trưng cho độ nhạy. Đối với những bài tố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 tốn dự đố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ự đố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 tố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 tố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 tốn. Thuật tốn phân lớp hồn hảo cĩ AUC bằng 1, ngược lại thuật tố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 tố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ự đố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ự đố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 tố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ự đốn lỗi hướng đối tượng Độ đo STT Precision Recall F1 AUC Accuracy Thuật tố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 Nạ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 tốn trong việc dự đốn lỗi hướng lớp Ở bài tốn dự đốn lỗi hướng đối tượng, thuật tốn SVM dự đốn chính xác nhiều lỗi nhất (Precision 0,6), cịn thuật tốn K-nearest Neighbor nhạy với lỗi nhất (Recall 0,44). Tuy nhiên, thuật tố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 tố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ự đố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 tố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ự đốn lỗi hướng phương thức Độ đo STT Precision Recall F1 AUC Accuracy Thuật tố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 Nạ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 tốn trong việc dự đố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 tốn dự đố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 tốn khơng đạt được độ chính xác như mong muốn. Trong tất cả các thuật tốn trên, Nạve Bayes dự đố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 tốn học máy phổ biến để dự đốn lỗi cho các phần mềm Java. Kết quả thử nghiệm cho thấy thuật tốn mạng nơ-ron nhân tạo nhiều lớp đạt kết quả tốt nhất ở bài tốn dự đốn lỗi hướng đối tượng và thuật tốn Nạve Bayes đạt kết quả tốt nhất ở bài tốn dự đố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 tốn. Ngồ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.