Sau khi áp dụng phương pháp CCA để đồng nhất hai bộ dữ liệu, chúng ta cần một thuật toán học máy để dự đoán lỗi phần mềm, trong luận văn, thuật toán được sử dụng là k hàng xóm gần nhất.
KNN là một thuật toán học trễ không tham số. Khi nói một kỹ thuật là không tham số, có nghĩa là nó không thực hiện bất kỳ giả định về việc phân phối dữ liệu cơ bản. Điều này là khá hữu ích, như trong thế giới thực, hầu hết các dữ liệu thực tế không tuân theo các giả định điển hình lý thuyết (ví dụ như các hỗn hợp gaussian, tách tuyến tính vv...).
KNN cũng là một thuật toán lười biếng. Điều này có nghĩa là nó không sử dụng các điểm dữ liệu huấn luyện để làm bất cứ sự tổng quát hóa nào. Nói cách khác, không có giai đoạn huấn luyện rõ ràng hoặc nếu có thì giai đoạn ấy rất nhỏ. Điều này có nghĩa là giai đoạn huấn luyện khá nhanh. Thiếu khái quát nghĩa là KNN giữ tất cả các dữ liệu huấn luyện hay chính xác hơn, tất cả các dữ liệu huấn luyện là cần thiết trong giai đoạn thử nghiệm. Điều này trái ngược với các kỹ thuật khác như SVM, nơi mà chúng ta có thể loại bỏ tất cả các vector không hỗ trợ mà không xảy ra vấn đề gì. Hầu hết các thuật toán lười biếng - đặc biệt là KNN - đưa ra quyết định dựa trên toàn bộ tập dữ liệu huấn luyện (trong trường hợp tốt nhất là một tập hợp con của chúng).
KNN giả định rằng các dữ liệu cần thiết đều nằm trong cùng một không gian đặc trưng. Chính xác hơn, các điểm dữ liệu đang ở trong một không gian metric. Các dữ liệu có thể vô hướng hoặc vectơ đa chiều. Do các điểm nằm trong cùng không gian đặc trưng nên giữa chúng sẽ tồn tại khái niệm về khoảng cách.
Mỗi dữ liệu huấn luyện bao gồm một tập các vectơ và nhãn lớp liên kết với mỗi vector. Trong trường hợp đơn giản, nó sẽ hoặc là + hoặc - (cho các lớp học tích cực hay tiêu cực). Nhưng KNN chỉ có thể làm việc tốt như nhau với số lượng tùy ý các lớp. Số k biểu thị số các hàng xóm (các hàng xóm này được xác định dựa trên khoảng cách) ảnh hưởng đến việc phân loại. Đây thường là một số lẻ, nếu số lượng các lớp học là 2. Với k = 1, thuật toán được gọi đơn giản là thuật toán láng giềng gần nhất ( nn classifier).
Từ những điều đã trình bày bên trên có thể thấy mô hình cho KNN là toàn bộ tập huấn luyện. Khi cần dự đoán cho một trường hợp dữ liệu không nhìn thấy, các thuật toán KNN sẽ tìm kiếm hết trong tập huấn luyện để tìm k trường hợp giống nhất. Các thuộc tính dự đoán của các trường hợp tương tự hầu hết được tổng hợp và trả lại như là dự đoán cho các trường hợp không nhìn thấy.
Đối với dữ liệu giá trị thực, khoảng cách Euclide có thể được sử dụng, các loại khác của dữ liệu như dữ liệu nhị phân thì có thể dùng khoảng cách Hamming.
KNN là thuật toán học cạnh tranh vì nó sử dụng trong cạnh tranh cục bộ giữa các mô hình thành phần (trường dữ liệu) để đưa ra dự đoán. Độ tương tự giữa các thực thể dữ liệu là thước đo để tìm ra thực thể gần giống nhất với thực thể cần dự đoán.
Ví dụ: Nếu bước đi như vịt, kêu như vịt thì có thể thứ đó cũng là một con vịt.
Hình 11. Ví dụ về bài toán k-nn [32]
Cụ thể thì việc phân loại sẽ diễn ra như sau:
Đầu vào là một tập các thực thể, khoảng cách sẽ sử dụng giữa các thực thể đó, giá trị của k, trong trường hợp này k = 1 và một thực thể chưa biết.
Hình 12. Minh họa cho bài toán phân loại k-nn [32]
Đầu ra là: phân loại cho thực thể chưa biết đó Các bước tiến hành:
Bước 1: Tính toán khoảng cách từ thực thể chưa biết tới các thực thể đã biết
khác trong tập.
Bước 2: Xác định một hàng xóm gần nhất với thực thể chưa biết.
Bước 3: Dùng nhãn của thực thể đã biết hàng xóm đó để xác định cho thực thể chưa biết.
Hình 13.Minh họa với các giá trị của k [32]
Khoảng cách được sử dụng trong phân loại là khoảng cách Euclidean, đó là khoảng cách giữa hai điểm được định nghĩa qua công thức sau:
d ( p, q ) = (N: − é:)4
: (2.28)
Tóm lại, thuật toán dự đoán lỗi liên dự án được cài đặt theo các bước sau:
Input: Dữ liệu nguồn 2", dữ liệu đích 2$, và các nhãn lớp của 2".
Output: Các nhãn lớp cho 2$. Các bước tiến hành:
Bước 1. Sử dụng chuẩn hóa z-score để tiền xử lý dữ liệu 2" và 2$.
Bước 2. Tìm các thông số chung giữa các thông số không đồng nhất của 2" và
Bước 3. Xây dựng các ma trận hiệp phương sai: h"", h$$, h"$.
Bước 4. Sử dụng các công thức đã trình bày ở trên để tính được các ma trận chuyển đổi å" và å$.
Bước 5. Dựa trên å"$2" và å$$2$, sử dụng phân loại NN với khoảng cách Euclidean để dự đoán lỗi.
2.6. Kết luận chương
Tổng kết lại, trong chương hai luận văn đã trình bày những vấn đề cơ bản về trích xuất các đặc trưng của mã nguồn, tiếp theo là tổng quan về CCA cùng ứng dụng vào giải quyết các bài toán cụ thể. Ngoài ra luận văn cũng tập trung vào vấn đề đồng nhất dữ liệu giữa hai dự án với giải pháp xây dựng cách biểu diễn thống nhất và áp dụng CCA trên mô hình này để tạo ra một không gian chung. Và cuối cùng luận văn trình bày tổng quan về phân loại nn và các bước để áp dụng các kĩ thuật trên vào xây dựng mô hình dự đoán lỗi. Chương ba sẽ là những đánh giá cụ thể hơn cho việc áp dụng CCA vào thực tế.
CHƯƠNG 3: THỬ NGHIỆM VÀ ĐÁNH GIÁ 3.1. Thu thập dữ liệu từ các dự án khác nhau
Thử nghiệm được tiến hành dựa trên 14 bộ dữ liệu đã được công bố công khai và thường được sử dụng từ bốn công ty khác nhau bao gồm : NASA, SOFTLAB, ReLink và AEEEM làm dữ liệu thử nghiệm. Dưới đây là chi tiết về bộ dữ liệu được sử dụng trong luận văn.
Công ti Dự án Mô tả Strốưđặng c module Số Số module lỗi
NASA CM1 Dự án tàu vũ trụ 37 327 42 MW1 Thkhông trử nghiọệng m lượng 37 253 27 PC1 Phầtrn mợ bay ềm hỗ 37 705 61 SOFTLAB AR3 Đinhúng ểu khiển 29 63 8 AR4 Đinhúng ểu khiển 29 107 20 AR5 Đinhúng ểu khiển 29 36 8 ReLink ApacheHTTP Server (Apache) Web server 26 194 98
OpenIntents
Safe (Safe) Bảo mật 26 56 22
ZXing Thư viện đọc
BarCode 26 399 118
AEEEM
Equinox (EQ) framework OSGi 61 324 129
Eclipse JDT Core (JDT) Dự án phục vụ cho phát triển phần mềm 61 977 206 Apache Lucene (LC) Thư viện tìm kiếm văn bản 61 691 64 Mylyn (ML) Quản lý task 61 1862 245 Eclipse PDE UI (PDE) Dự án phục vụ cho phát triển phần mềm 61 1497 209
Bảng 1. Bảng tổng quan dữ liệu các dự án được sử dụng trong kiểm thử
Mỗi bộ dữ liệu trong NASA [24] [25] là một hệ thống phần mềm NASA hoặc hệ thống phụ trợ, trong đó có chứa các dữ liệu lỗi tương ứng và mã số liệu tĩnh khác nhau. Các dữ liệu của NASA đã được thu thập từ khắp nơi trên Hoa Kỳ trong năm năm từ nhiều nhà thầu NASA làm việc tại các trung tâm địa lý khác nhau. Các số liệu mã nguồn tĩnh của bộ dữ liệu NASA bao gồm kích thước, khả năng đọc, độ phức tạp vv..., mà có liên quan chặt chẽ đến chất lượng phần mềm.
Công ty phần mềm Thổ Nhĩ Kỳ (SOFTLAB) [24] có ba bộ dữ liệu là, AR3, AR4 và AR5, mà là phần mềm điều khiển cho máy giặt, máy rửa chén và tủ lạnh, tương ứng. Các bộ dữ liệu được sử dụng từ SOFTLAB và NASA thu được từ kho PROMISE. Có tồn tại 28 số liệu chung giữa hai công ty này. Mặc dù các dữ liệu lỗi
của hai công ty này xuất phát từ cùng một kho lưu trữ nhưng các công ty về bản chất vẫn khác nhau.
Dữ liệu ReLink [24] [26] được thu thập bởi Wu et al. và các thông tin lỗi trong ReLink đã được xác minh bằng tay và sửa chữa. ReLink có tổng cộng 26 số liệu phức tạp, được sử dụng rộng rãi trong dự đoán lỗi. Trong số ba bộ dữ liệu sẽ được dùng, kích thước của mỗi bộ (số module) khoảng 56-399, trong khi số lượng các thuộc tính được cố định 26.
Các bộ dữ liệu AEEEM [24] [27] được thu thập bởi D'Ambros et al. AEEEM gồm 61 số liệu: 17 số liệu mã nguồn, 5 số liệu về các lỗi trước đó, 5 số liệu entropy về các thay đổi, 17 số liệu entropy mã nguồn, và 17 số liệu về các churn của mã nguồn. Đặc biệt, AEEEM bao gồm entropy tuyến tính phân rã (LDHH) và weighted churn (WCHU). Cả hai LDHH và WCHU đã được xác minh là các bộ dự đoán lỗi thông tin.
Sau khi thu thập, chúng ta sẽ xác định các đặc trưng được coi là tương đương nhau giữa các cặp dữ liệu dùng trong dự đoán, ví dụ những thuộc tính sau của SOFTLAB và ReLink được coi là tương đương:
SOFTLAB ReLink
total_loc CountLine
blank_loc CountLineBlank
comment_loc CountLineComment
các công ty.
Công ti A ∩ Công ti B
NASA ∩
SOFTLAB
NASA ∩ ReLink NASA ∩ AEEEM
Số đặc trưng 28 3 0 Công ti A ∩ Công ti B SOFTLAB ∩ ReLink SOFTLAB ∩ AEEEM ReLink ∩ AEEEM Số đặc trưng 3 0 0
Bảng 2. Số các đặc trưng tương đương nhau giữa các công ti
Áp dụng những vấn đề đã được trình bày trong chương hai để xây dựng mô hình dự đoán với đầu vào bao gồm những dữ liệu đã thu thập ở trên. Môi trường thực nghiệm bao gồm:
Phần cứng:
CPU: Intel Core i5 2.4 GHz
Ram: 8GB OS: Mac OS
Bộ nhớ ngoài: 500GB HDD
Các công cụ phần mềm được sử dụng:
Phần dưới sẽ là những phép đánh giá sử dụng để đánh giá độ hiệu quả của phương pháp trong thực nghiệm.
3.2. Các phép đánh giá
Trong thực nghiệm, có ba phương pháp đánh giá thường được sử dụng để đánh giá hiệu quả hoạt động của các mô hình dự báo lỗi bao gồm: recall rate, false positive rate và F-measure. Những phương pháp này có thể được xác định bằng cách sử dụng A, B, C và D trong bảng dưới.
Dự đoán là lỗi Dự đoán là không lỗi
Số module lỗi A B
Sỗ module không lỗi C D
Ở đây, A, B, C và D lần lượt là - A: số module lỗi được dự đoán là lỗi.
- B: số lượng module lỗi được dự đoán là không lỗi. - C: số lượng module không lỗi mà được dự đoán là lỗi.
- D: số lượng module không lỗi mà được dự đoán là đúng không lỗi.
Recall rate được xác định là A/ (A + B), biểu thị tỉ số của số module lỗi được
phân loại một cách chính xác là lỗi với tổng số module lỗi. Đây là phương pháp rất quan trọng tỏng dự đoán lỗi, bởi vì tỉ lệ này càng lớn nghĩa là mô hình dự đoán càng tìm được nhiều module lỗi.
False positive rate được xác định là C / (C + D), biểu thị tỷ lệ số module không
lỗi nhưng bị phân loại sai trên tổng số module không lỗi.
Đối với dự đoán lỗi, độ chính xác dự đoán của một mô hình biểu thị tỷ lệ của số module lỗi được phân loại một cách chính xác trên số module được phân loại là lỗi. Độ chính xác của việc dự đoán đánh giá mức độ chính xác của mô hình dự đoán và được định nghĩa là A / (A + C). Rõ ràng, một mô hình dự đoán tốt là mô hình đạt được giá trị cao về recall rate và độ chính xác. Tuy nhiên, tồn tại sự đánh đổi giữa recall rate và độ chính xác. Do đó, một biện pháp toàn diện về tỷ lệ thu hồi và độ chính xác là cần thiết. F-measure là phương pháp dung hòa recall rate và độ chính xác, được định nghĩa là:
F -measure = 4 × ëíì íồï × ñííòí ôáñ
ëíì íồï õ ñííòí ôáñ (3.1)
Tất cả các phương pháp đánh giá trên đều nằm trong khoảng từ 0 đến 1. Rõ ràng, một mô hình dự đoán lỗi lý tưởng nên giữ recall rate và F-measure ở mức cao, và false positive rate ở mức thấp. Mỗi thử nghiệm sẽ được đánh giá dựa trên ba phương pháp recall (Pd), false positive (Pf) và các giá trị F-measure. Do mức độ chính xác đã được bao gồm trong F-measure nên luận văn sẽ không đề cập tới khía cạnh này.
Cụ thể các bước tiến hành thử nghiệm bao gồm:
Bước 1: Xử lý dữ liệu:
Dữ liệu thu thập được có định dạng arff với format như sau: @relation tên file arff
@attribute tên metric 1 ...
@attribute tên metric n @ attribute class { các nhãn } @data
mỗi dòng tiếp theo tương ứng với một module và được gán nhãn lỗi hoặc không lỗi
Các dữ liệu sẽ được xử lý theo các bước: - Bỏ các dòng chứa kí tự @.
- Chèn kí tự % vào đầu file để phục vụ việc đọc dữ liệu.
- Thay toàn bộ các nhãn lỗi và không lỗi tại các dòng biểu thị module thành 1 và 0 tương ứng.
File sau khi xử lý sẽ có định dạng như sau:
% sau kí tự này và vẫn trên cùng một dòng có thể là comment Sau dòng đầu bên trên, mỗi dòng tiếp theo đại diện cho một module
Bước 2: Thực thi các bước đã trình bày ở cuối chương 2:
- Tiến hành xây dựng cách biểu diễn thống nhất cho các dự án nguồn và đích. - Áp dụng phân tích tương quan chính tắc trên cách biểu diễn thống nhất đã xây
dựng để lấy được các vector chuyển đổi, từ đó xây dựng nên ma trận chuyển đổi.
- Áp dụng phân loại nn để xác định nhãn cho các module của dự án đích, so sánh với nhãn gốc để tính ra được các thông số: recall, false positive, F-measure. Bên dưới là minh họa kết quả chạy cho một trường hợp Apache -> ar3:
Hình 14. Minh họa một kết quả chạy thực nghiệm
Dưới đây là chi tiết các thực nghiệm và các kết quả thu được:
Bảng 3 bên dưới cho thấy các giá trị Recall, F-Measure và False positive của
trường hợp dự đoán lỗi liên dự án kiểu một - một với 28 số liệu thông thường tồn tại trong dữ liệu nguồn và đích.
SOURCE=>TA RGET RECALL F- MEASURE FALSE POSITIVE Apache -> ar3 0.88 0.48 0.25
ar3 -> Apache 0.40 0.53 0.10 CM1 -> Apache 0.54 0.68 0.06 Apache -> CM1 0.76 0.42 0.26 AR3 -> CM1 0.33 0.33 0.10 CM1 -> AR3 0.38 0.43 0.05 EQ -> AR3 0.25 0.40 0.10 AR3 -> EQ 0.58 0.53 0.41 Bảng 3. Kết quả chạy cho trường hợp 1-1
Bảng tiếp theo là các thực nghiệm về dự đoán lỗi liên dự án trong trường hợp một - nhiều. SOURCE=>TARG ET RECALL F- MEASURE FALSE POSITIVE AR3 -> {CM1,PC1,MW1} 0.38 0.36 0.08 {CM1,PC1,MW1} - > AR3 0.50 0.62 0.02
AR4 -> {CM1,PC1,MW1} 0.52 0.31 0.19 {CM1,PC1,MW1} - > AR4 0.35 0.39 0.10 AR5 -> {CM1,PC1,MW1} 0.60 0.30 0.26 {CM1,PC1,MW1} - > AR5 0.50 0.67 0.01
{AR3, AR4, AR5} -> CM1
0.38 0.36 0.10
CM1 -> {AR3, AR4, AR5}
0.42 0.53 0.04
{AR3, AR4, AR5} -> MW1
0.33 0.38 0.05
MW1 -> {AR3, AR4, AR5}
0.33 0.42 0.05
{AR3, AR4, AR5} -> PC1 0.46 0.39 0.08 PC1 -> {AR3, AR4, AR5} 0.33 0.48 0.01 Bảng 4. Kết quả chạy cho trường hợp 1-n
Từ hai bảng trên, có thể thấy được khi lượng dữ liệu đầu vào tăng thì F-Measure cũng sẽ tăng theo, một ví dụ lấy từ trên là:
ar3 => cm1: 0.33 nhưng xuống dưới thì ar3 => {cm1, pc1, mw1} đã tăng lên 0.36
cm1 => ar3: 0.43 nhưng xuống dưới thì {cm1, pc1, mw1} => ar3 đã tăng lên