Kỹ thuật định vị lỗi dựa trên khai phá dữ liệu

Một phần của tài liệu Xây dựng công cụ định vị lỗi cho ứng dụng CC++ (Trang 26 - 28)

2.5 Các kỹ thuật định vị lỗi

2.5.7 Kỹ thuật định vị lỗi dựa trên khai phá dữ liệu

Cùng với kỹ thuật dựa trên học máy máy học, khai phá dữ liệu cũng tìm cách tạo ra một mơ hình sử dụng thơng tin thích hợp được trích xuất từ dữ liệu. Khai phá dữ liệu có thể phát hiện ra các mẫu ẩn trong các mẫu dữ liệu có thể khơng được phát hiện bằng phân tích thủ cơng riêng lẻ, đặc biệt khi khối lượng thông tin lớn. Ví dụ như có thể áp dụng khai phá dữ liệu trong định vị lỗi để xác định kiểu thực thi câu lệnh dẫn đến lỗi. Ngoài ra, mặc dù dấu vết thực thi (execution traces) hoàn chỉnh của một chương trình là một tài ngun có giá trị để định vị lỗi, nhưng khối lượng dữ liệu khổng lồ khiến nó khó sử dụng trong thực tế. Do đó, một số nghiên cứu đã áp dụng một cách sáng tạo các kỹ thuật khai phá dữ liệu vào các dấu vết thực thi.

Nessa và cộng sự [28] đã đề xuất thuật toán định vị lỗi sử dụng phân tích N- gram. Hình 2-6 [28] thể hiện thuật tốn được đề xuất. Các chuỗi con của câu lệnh N-gram có độ dài N được tạo ra từ dữ liệu dấu vết. Các dấu vết thực hiện thất bại sau đó được kiểm tra để tìm ra các N-gram có tỷ lệ xuất hiện cao hơn một ngưỡng nhất định. Một phân tích thống kê được tiến hành để xác định xác suất có điều kiện mà một N-gam nhất định xuất hiện trong một dấu vết thực hiện không thành công đã cho, xác suất này được gọi là độ tin cậy cho N-gam đó. N-gam được sắp xếp theo thứ tự tin cậy giảm dần và các câu lệnh tương ứng trong chương trình được hiển thị dựa trên lần xuất hiện đầu tiên của chúng trong danh sách. Các nghiên cứu điển hình về bộ thử nghiệm Siemens cũng như chương trình space và grep đã chỉ ra rằng kỹ thuật này có hiệu quả hơn trong việc xác định lỗi so với Tarantula.

1: procedure LocalizeFaults(Y,YF,K,MINSUP) 2: for all Yi ∈Y do

3: Convert Yi to block trace

4: end for 5: NG← 6: for N=1 to NMAX do 7: NG←NG ∪ GenerateNGrams(Y,N) 8: end for 9: Lrel←{n|n∈NG and |n| =1} 10: for all n ∈ Lrel do

11: if Support(n) ≠ |YF| then

12: Remove n from NG and Lrel

13: end if

14: end for

15: NG1←{n|n∈NG and for all s ∈ Lrel, sn} 16: NG←NG−NG1

17: for all n ∈ NG do

18: if Support(n) < MINSUP then

19: Remove n from NG

20: end if

21: end for

22: for all n ∈ NG do

23: NF←|{Yk|Yk∈YF and n∈Yk}|

24: NT←|{Yk|Yk∈Y and n∈Yk}|

25: n.confidence←NF÷NT

26: end for

27: SortNGin descending order of confidence

28: Convert the block numbers in the N-grams in NG to line numbers 29: Report the line numbers in the order of their first appearance in NG 30: end procedure

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

Chương này trình bày phương pháp định được luận văn đề xuất để định vị lỗi cho các ứng dụng C/C++. Luận văn cung cấp kiến trúc tổng quan của công cụ HiFa đã phát triển. Các kiến thức cơ bản về framework LLVM và các phương pháp tạo phổ của chương trình cũng được mơ tả chi tiết.

Một phần của tài liệu Xây dựng công cụ định vị lỗi cho ứng dụng CC++ (Trang 26 - 28)

Tải bản đầy đủ (PDF)

(59 trang)