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

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

28 74 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 1,06 MB

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

Nội dung

Để cả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.. Mục tiêu và nội dung nghiên cứu Nội dung nghiên cứu b

Trang 1

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

Trang 2

TRƯỜNG ĐẠI HỌC BÁCH KHOA

Người hướng dẫn khoa học: TS Lê Thị Mỹ Hạnh

Phản biện 1: TS Huỳnh Hữu Hưng

Phản biện 2: TS Hoàng Văn Dũng

Luận văn được bảo vệ trước Hội đồng chấm Luận văn tốt nghiệp thạc sĩ ngành khoa học máy tính họp tại Trường Đại học Bách khoa vào ngày

25 tháng 08 năm 2019

Có thể tìm hiểu luận văn tại:

- Trung tâm Học liệu, Đại học Đà Nẵng tại Trường Đại học Bách khoa

- Thư viện Khoa Công nghệ thông tin, Trường Đại học Bách khoa - ĐHĐN

Trang 3

MỤC LỤC

TỔNG QUAN 3

CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐOÁN LỖI 5

1.1 Quản lý lỗi phần mềm 5

1.2 Hướng tiếp cận dự đoán lỗi phần mềm 6

1.3 Độ đo mã nguồn 6

CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY 8

2.1 Học có giám sát 9

2.2 Học không có giám sát 9

2.3 Các yếu tố cần xem xét khi chọn và áp dụng thuật toán học máy 10

2.4 Thuật toán Cây quyết định 10

CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY 11 3.1 SDP dựa trên học máy 11

3.2 Tiền xử lý dữ liệu 11

3.3 Kỹ thuật Ensemble learning 11

3.4 Các thuật toán Ensembles learning cho SDP 11

3.5 Đánh giá phương pháp dự đoán 13

CHƯƠNG IV: ĐÁNH GIÁ THỰC NGHIỆM CÁC PHƯƠNG PHÁP ENSEMBLE LEARNING 15

4.1 Tập dữ liệu dự đoán lỗi phần mềm 15

4.2 Xây dựng mô hình 15

4.3 Tiêu chí đánh giá hiệu suất số liệu phần mềm 17

4.4 Kết quả thực nghiệm 17

4.5 Xây dựng website hỗ trợ dự đoán lỗi 21

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23

Trang 5

TỔNG QUAN

1 Đặt vấn đề

Dự đoán lỗi phần mềm (Software Defect Prediction) đóng 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 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

Phát hiện 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, chi phí nguồn lực

2 Mục tiêu và nội dung nghiên cứu

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 lỗi, 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 và tiến tới xây dựng công cụ dự đoán lỗi dựa trên học máy

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 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 Java

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

Trang 6

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 đó, 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 và lập trình ứng dụng bằng ngôn ngữ Python, thư viện sklearn

Kết quả được đánh giá thông qua các phép đo hiệu suất mô hình, thời gian huấn luyện từng mô hình cụ thể

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

- Áp dụng phân tích và dự đoán trong đời sống

- Áp dụng kỹ thuật học máy và các thuật toán

- Đóng góp kết quả nghiên cứu và thực nghiệm

- Tạo công cụ để giúp các nhà phát triển

- Giúp các Công ty phần mền kiểm soát sản phẩm

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

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

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

Chương IV trình bày kết quả bài toán dự đoán lỗi phần mềm bằng kỹ thuật học kết hợp; 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; tạo ứng dụng website chọn file Java và kỹ thuật ensembles để 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

Trang 7

CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ 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ự đoán 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

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.1 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à để 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ì

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;

Trang 8

✓ Dự đoán các lỗi;

✓ Loại bỏ các lỗi

1.2 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:

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

✓ CPDP đối với tập dữ liệu không đồng nhất

1.3 Độ đ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à chỉ số mô tả một tính năng cụ thể của phần mềm Ba tham số được dùng để đo lường như mô tả trong Hình 1

Hình 1 Các thông số khác nhau về độ đo trong công nghệ phần mềm

Trang 9

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

Bộ số liệu hướng đối tượng (OO) gồm có 8 số liệu 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)

Các số liệu OO bổ sung gồm Afferent couplings (Ca), Number of Public Methods (NPM) 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

Trang 10

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 phần mềm, 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 được 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 Học máy có thể chia làm 2 loại:

Trang 11

• 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)

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 Đ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) Phương pháp:

Bước 1 Xác định loại hình các mẫu huấn luyện

Bước 2 Thu thập bộ dữ liệu huấn luyện

Bước 3 Xác định biểu diễn đầu vào đặc trưng của chức năng huấn luyện Bước 4 Xác định cấu trúc của chức năng huấn luyện và thuật toán Bước 5 Hoàn thành thiết kế

Bước 6 Đánh giá tính chính xác của chức năng đã được huấn luyện Bốn vấn đề chính cần lưu ý trong học máy có giám sát:

Trang 12

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

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 toán tối đa hóa kỳ vọng (EM);

2.3 Các yếu tố cần xem xét khi chọn và áp dụng thuật toán học máy

- Tính không đồng nhất của dữ liệu

- Dự phòng dữ liệu

- Biểu diễn các tương tác và phi tuyến

2.4 Thuật toán Cây quyết định

Cây quyết định là thuật toán thuộc kỹ thuật học có giám sát Việc huấn

luyện cây quyết định và sử dụng nó như một mô hình dự đoán, ánh xạ các

quan sát của một mẫu để đưa ra kết luận về giá trị mục tiêu của mẫu

Cây quyết định dùng trong khai phá dữ liệu có hai loại chính:

• Cây phân loại: khi phân tích kết quả dự đoán thuộc về phân lớp dữ liệu

• Cây hồi quy: khi phân tích, kết quả dự đoán có thể được coi là một số

thực (ví dụ: giá của một ngôi nhà, hoặc thời gian nằm viện của bệnh nhân)

Trang 13

CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY

Với những đòi hỏi chất lượng các sản phẩm phần mềm ngày càng được cải thiện, nguồn lực đầu tư cho phát triển phần mềm được quản lý tốt và chặt chẽ hợn, đồng thời giúp cho các nhà phát triển chủ động trong việc phân bổ nguồn lực hợp lý thì cần thiết phải quản lý tốt lỗi phần mềm

3.1 SDP dựa trên học máy

Dữ liệu thu được trong dự đoán lỗi phần mềm thường là các tập dữ liệu không cân bằng [1], nghĩa là số lượng mẫu của một lớp cụ thể cao hơn rất nhiều so với lớp khác

Phương pháp học kết hợp đã thể hiện thành công, tác dụng tích cực nhằm cải thiện kết quả trong dự đoán các module phần mềm dễ bị lỗi

3.2 Tiền xử lý dữ liệu

Để đảm bảo chất lượng của các bộ dữ liệu này, đồng thời phù hợp với yêu cầu của các thuật toán dùng để dự đoán, cần thực hiện:

- Xóa các trường hợp trùng lặp

- Thay thế các giá trị thiếu:

- Chuẩn hóa dữ liệu

3.3 Kỹ thuật Ensemble learning

Trong thống kê và học máy, phương pháp Ensemble là phương pháp sử dụng nhiều thuật toán học máy để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học nào cấu thành

3.4 Các thuật toán Ensembles learning cho SDP

Một thuật toán đưa ra kết quả tổng hợp là một thuật toán học có giám sát

vì nó có thể được huấn luyện trước và sau đó được sử dụng để đưa ra dự đoán Ensembles được huấn luyện đại diện cho một giả thuyết duy nhất Các phương pháp của Ensemble có thể được chia thành hai nhóm:

Trang 14

▪ Các phương pháp tuần tự: lcác bộ học cơ sở xếp tuần tự

▪ Các phương pháp song song: Các bộ học cơ sở xếp song song

Bagging

Bagging (viết tắt của tập hợp bootstrap) là một cách để giảm phương sai

là tính trung bình kết hợp nhiều bộ ước tính trở thành một ước tính Bagging sử dụng lấy mẫu bootstrap để lấy các tập dữ liệu cho việc huấn luyện bộ học cơ sở Tập hợp các đầu ra của bộ học cơ sở của Bagging sử dụng bỏ phiếu cho kỹ thuật phân loại và trung bình cho kỹ thuật hồi quy

Boosting

Boosting đề cập đến một họ các thuật toán có khả năng chuyển đổi những

bộ học yếu thành những bộ học mạnh Nguyên tắc chính của việc thúc đẩy (boosting) là để khớp với một chuỗi các mô hình các bộ học yếu, chỉ tốt hơn một chút so với đoán ngẫu nhiên

Gradient Boosting Tree

Gradient Boosting Tree là một dạng tổng quát của Boosting, được áp dụng trên cơ sở phương pháp tùy chỉnh hàm mất mát Nó có thể dùng cho cả hai vấn đề hồi quy và phân loại Gradient Boosting xây dựng mô hình theo một cách tuần tự

𝐹𝑚(𝑥) = 𝐹𝑚−1(𝑥) + 𝛾𝑚ℎ𝑚(𝑥) (5)

Tại mỗi giai đoạn, cây quyết định h m (x) được chọn để tối thiểu hóa hàm

mất mát L cho mô hình hiện tại Fm-1(x):

Các thuật toán hồi quy và phân loại khác nhau thì sử dụng kiểu hàm mất mát tương ứng

𝐹𝑚(𝑥) = 𝐹𝑚−1(𝑥) + 𝑎𝑟𝑔𝑢𝑚𝑖𝑛ℎ∑𝑛 𝐿(𝑦𝑖, 𝐹𝑚−1(𝑥𝑖) +

Trang 15

3.4.1 Stacking

Xếp chồng (Stacking) là một kỹ thuật học máy bằng cách kết hợp đa mô hình phân loại hoặc hồi quy thông qua một bộ phân loại tổng hợp (meta-classifier) hoặc (meta-regressor) Các mô hình cấp cơ sở được huấn luyện dựa trên một bộ đào tạo hoàn chỉnh, sau đó mô hình Meta được đào tạo trên các đầu ra của mô hình cấp cơ sở giống như các đặc trưng

3.5 Đánh giá phương pháp dự đoán

Dựa vào kết quả xác thực chéo, chúng ta trích xuất các phép đo để sử dụng trong đánh giá các phương pháp dự đoán và việc lựa chọn các phép đo đánh giá này dựa trên các nghiên cứu trước đó về phương pháp xếp hạng tốt nhất phục vụ cho việc đánh giá mô hình dự đoán lỗi

3.5.1 Xác thực chéo k-folds (K-folds cross-validation)

Xác thực chéo là một phương pháp dùng để đánh giá các thuật toán học máy Quy trình đánh giá, bộ dữ liệu được chia thành hai phân đoạn chính: một phân đoạn được dùng để đào tạo mô hình và phân đoạn khác được dùng để kiểm tra phân loại mô hình Xác thực chéo phổ biến là k-Fold

𝑂𝑣𝑒𝑟𝑎𝑙𝑙_𝑁𝑜𝑛−𝐹𝑎𝑢𝑙𝑡𝑦_𝐶𝑙𝑎𝑠𝑠𝑖𝑓𝑖𝑒𝑑_𝐼𝑛𝑠𝑡𝑎𝑛𝑐𝑒𝑠 (8)

Trang 16

𝑂𝑣𝑒𝑟𝑎𝑙𝑙_𝑁𝑜𝑛−𝐹𝑎𝑢𝑙𝑡𝑦_𝐼𝑛𝑠𝑡𝑎𝑛𝑐𝑒𝑠 (10)

3.5.5 F-measure

F-measure là kết hợp giữa hai phép đo Recall và Precision (công thức11), bên cạnh đó nó cũng bao gồm yếu tố β dùng để điều chỉnh trọng số cho Recall

Trang 17

CHƯƠNG IV: ĐÁNH GIÁ THỰC NGHIỆM CÁC PHƯƠNG PHÁP

ENSEMBLE LEARNING

Xây dựng mô hình dự đóan và lựa chọn các thuật toán được viết bằng ngôn ngữ Python, sử dụng thư viện Sklearn

4.1 Tập dữ liệu dự đoán lỗi phần mềm

Phạm vi luận văn này, tôi sử dụng tập dữ liệu dự đoán lỗi Promise trên cấp

độ tập tin theo các tiêu chí hướng lớp và sử dụng công cụ CKJM để trích xuất các số liệu trên các file mã nguồn java và dự đoán lỗi thông qua các

độ đo bằng kỹ thuật ensemble learning

4.2 Xây dựng mô hình

Để thực nghiệm đối với các thuật toán sử dụng kỹ thuật ensemble learning, tôi tiến hành cài đặt và thử nghiệm dựa trên kỹ thuật Bagging như trình bày hình sau (đối với các thuật toán Random Forest và Bagging)

Hình 3 Mô hình Bagging cho thuật toán Random Forest và Bagging

Ngày đăng: 15/06/2020, 21:05

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

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

w