• Tidak ada hasil yang ditemukan

Chương 3 Công cụ định vị lỗi HiFa cho các ứng dụng C/C++

4.2 Kết quả và đánh giá

Luận văn sử dụng chỉ số đánh giá Expense để đánh giá hiệu quả của các loại phổ trong định vị lỗi. Luận văn so sánh hiệu quả của phổ ESHS, DHS, DHS-def, DHS-use khi sử dụng 12 chỉ số xếp hạng được mô tả trong Bảng 2.2.

Các Hình 4-1, Hình 4-2, Hình 4-3, Hình 4-4, Hình 4-5, Hình 4-6 mô tả biểu đồ so sánh điểm Expense của các phổ tương ứng với kỹ thuật tương ứng barinel, drt, dstar, jaccard, kulczynski2, mccon, minus, ochiai, op, tarantula, wong3 và zoltar. Với mỗi biểu đồ, trục x thể hiện phần trăm mã được kiểm tra, trục y thể hiện phần trăm phiên bản lỗi được định vị bằng cách kiểm tra lượng mã nhỏ hơn hoặc bằng tương ứng với giá trị trục x.

(a) Barinel (b) DRT

Hình 4-1: Điểm Expense của Barinel và DRT

Các phổ DHS thể hiện hiệu quả tốt hơn phổ ESHS với hầu hết chỉ số xếp hạng. Với các chỉ số xếp hạng Mccon, Op và Wong3 sự chênh lệch này không nhiều. Đường đồ thị điểm Expense của các chỉ số xếp hạng này gần như tương đồng nhau. Ngược lại, Barinel, Dstar, Jaccard, Ochiai và Tarantula thể hiện chênh lệch rõ rệt, điều này tương đương khả năng định vị lỗi với các phổ DHS hiệu quả hơn nhiều. Như Hình 4-1, chúng ta có thể xác định được 83% lượng lỗi bằng cách kiểm tra 30% mã chương trình khi sử dụng kỹ thuật Barinel và phổ DHS-use. Số lượng mã cần kiểm tra nhiều khi dùng kỹ thuật Barinel và phổ ESHS, 40% số câu

lệnh của chương trình. Số lượng mã cần kiểm tra của phổ DHS và DHS-def khoảng 35%.

(a) Dstar (b) Jaccard

Hình 4-2: Điểm Expense của Dstar và Jaccard

Tương tự như Barinel, Dstar và Jaccard cũng thể hiện hiệu quả định vị lỗi với phổ DHS-use và DHS-def (như trong Hình 4-2). Khi kiểm tra 40% mã chương trình, phổ DHS-use có thể chỉ ra 81% lỗi với kỹ thuật Dstar, phổ DHS có thể chỉ ra 76% lỗi. Phổ ESHS và DHS có hiệu quả kém hơn khi chỉ có thể chỉ ra 73% lỗi.

Kỹ thuật Jaccard và phổ ESHS lại tìm được nhiều lỗi hơn khi kiểm tra 50% câu lệnh của chương trình. Phổ ESHS tìm được 91% số lỗi, nhiều hơn 5% so với các phổ DHS, DHS-def và DHS-use.

(a) Kulczynski2 (b) Mccon

Hình 4-3: Điểm Expense của Kulczynski2 và Mccon

(a) Minus (b) Ochiai

Hình 4-4: Điểm Expense của Minus và Ochiai

(a) Op (b) Tarantula

Hình 4-5: Điểm Expense của Op và Tarantula

Kỹ thuật Tarantula cho thấy hiệu quả khác biệt rõ rệt giữa các loại phổ được thể hiện trong Hình 4-5. Phổ DHS-use luôn thể hiện hiệu tốt hơn các phổ dựa trên cặp def-use còn lại như DHS và DHS-def. Đường điểm Expense của phổ DHS- use luôn nằm bên trên các đường điểm Expense của phổ DHS và DHS-def. Ở khoảng kiểm tra trước 50% mã chương trình, điểm Expense của phổ DHS-use cũng xác định được nhiều lỗi hơn các loại phổ còn lại.

(a) Wong3 (b) Zoltar

Hình 4-6: Điểm Expense của Wong3 và Zoltar

Các Hình 4-7, Hình 4-8, Hình 4-9, Hình 4-10 so sánh hiệu quả của tất cả các kỹ thuật định vị lỗi (hay chỉ số xếp hạng) với phổ ESHS, DHS, DHS-use và DHS- def. Với tất cả các phổ, các kỹ thuật tìm ra số lượng lỗi gần như tương đồng nhau.

Số lượng lỗi tìm ra giữ các kỹ thuật chênh lệch không quá 10% tổng lượng lỗi của thử nghiệm.

Với phổ ESHS, kỹ thuật Wong3 có hiệu quả thấp nhất và kỹ thuật Barinel và DRT có hiệu quả cao nhất. Với cách kiểm tra 60% mã chương trình, các kỹ thuật Barinel và DRT định vị lỗi hiệu quả hơn 10% so với kỹ thuật Wong3.

Hình 4-7: Hiệu quả định vị lỗi của các kỹ thuật với phổ ESHS

Chỉ số xếp hạng Ochiai có đường điểm Expense ổn định hơn với các kỹ thuật khác khi kết hợp với các phổ DHS, DHS-def và DHS-use.

Hình 4-8: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS

Hình 4-9: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS-def

Hình 4-10: Hiệu quả định vị lỗi của các kỹ thuật với phổ DHS-use Công cụ Zoltar không còn sử dụng được do không được duy trì cập nhật.

Nên luận văn không thể thực hiện thực nghiệm so sánh hiệu quả điều chỉnh mã nguồn giữa HiFa và Zoltar. Thay vào đó, luận văn đã thực hiện so sánh HiFa và GCC, một công cụ hỗ trợ điều chỉnh mã nguồn.

Bảng 4.2 thể hiện so sánh kích thước tệp thực thi của từng chương trình và kích thước dữ liệu phổ thu thập được sau khi thực thi bộ kiểm thử giữ công cụ

HiFa và GCC. Cột đầu tiên là danh sách các chương trình thử nghiệm. Các cột 2, 3, 4 thể hiện kích thước tệp thực thi tính theo byte tương ứng với biên dịch bởi GCC, biên dịch bởi HiFa cho phổ ESHS và biên dịch với HiFa cho phổ DHS. Các cột tiếp theo 4, 5 và 6 là kích thước phổ dữ liệu thu được sau khi thực hiện kiểm thử tương ứng với cách điều chỉnh mã nguồn bằng GCC, bằng HiFa cho phổ ESHS và HiFa cho phổ DHS. GCC là trình biên dịch cho ngôn ngữ C/C++, hỗ trợ điều chỉnh mã nguồn để lấy thông tin thực thi của từng câu lệnh. Kết quả so sánh cho thấy các tệp thực thi được biên dịch bằng công cụ HiFa có kích thước lên hơn nhiều so với tệp thực thi được biên dịch bằng GCC. Tệp thực thi được biên dịch bởi HiFa có kích thước lớn hơn 3 – 4 lần kích thước tệp thực thi được biên dịch bằng GCC. Tệp thực thi của phổ DHS cũng có kích thước lớn hơn của phổ ESHS.

Sự khác biệt này là do số lượng cặp def-use luôn nhiều hơn số câu lệnh của chương trình, nên cần bổ sung nhiều thông tin hơn để có thể lấy phổ DHS. Tuy có kích thước tệp thực thi cao hơn, nhưng các chương trình được điều chỉnh bởi HiFa tạo ra tệp dữ liệu phổ thấp hơn so với GCC. Kích thước dữ liệu phổ thu được sau thi kiểm thử chương trình điều chỉnh bằng GCC cao hơn 4-5 lần chương trình điều chỉnh bằng HiFa cho phổ ESHS. Chương trình có số lượng testcase càng lớn thì sự chênh lệch này càng cao, chương trình replace có 5542 testcase thì kích thước tệp dữ liệu phổ chênh lệch là 5.8 lần, chương trình tot_info có bộ kiểm thử nhỏ hơn (1052 testcase) thì chênh lệch chỉ là 3.3 lần. Từ kết quả này cho thấy phương pháp điều chỉnh mã nguồn để thu thập thông tin phổ của HiFa có hiệu quả tốt hơn GCC, đặc biệt với các chương trình có bộ kiểm thử lớn.

Bảng 4.2: Kích thước tệp thực thi của từng chương trình Chương trình Kích thước tệp thực thi Kích thước dữ liệu phổ

GCC ESHS DHS GCC ESHS DHS

print_tokens 47 163 167 7357 1440 2078

print_tokens2 43 156 164 7250 1507 2022

schedule 43 150 150 3354 619 867

schedule2 43 150 153 3409 580 790

replace 43 165 273 10803 2257 3903

tcas 34 144 144 1426 175 178

tot_info 41 159 166 573 171 373

Dokumen terkait