Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
2,34 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Văn Hiệp Xây dựng công cụ định vị lỗi cho ứng dụng C/C++ LUẬN VĂN THẠC SĨ Ngành: Kỹ thuật phần mềm HÀ NỘI – 2022 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Văn Hiệp Xây dựng công cụ định vị lỗi cho ứng dụng C/C++ Ngành: Kỹ thuật phần mềm Chuyên ngành: Kỹ thuật phần mềm Mã số: 8480103.01 LUẬN VĂN THẠC SĨ Ngành: Kỹ thuật phần mềm NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Võ Đình Hiếu HÀ NỘI – 2022 LỜI CAM ĐOAN Tôi xin cam đoan luận văn chưa nộp báo cáo luận văn trường Đại học Công nghệ - ĐHQGHN trường đại học khác Những tơi viết không chép từ tài liệu, không sử dụng kết nghiên cứu người khác mà khơng trích dẫn cụ thể Nếu sai tơi hồn tồn chịu trách nhiệm theo quy định trường Đại học Công nghệ - ĐHQGHN Hà Nội, ngày tháng năm 2022 Học viên cao học Nguyễn Văn Hiệp LỜI CẢM ƠN Đầu tiên, xin gửi lời cảm ơn trân trọng sâu sắc tới TS Võ Đình Hiếu, người thầy trực tiếp hướng dẫn tận tình đưa lời khuyên trình học tập nghiên cứu tơi q trình học tập làm luận văn Tôi xin gửi lời cảm ơn thầy cô trường Đại học Công nghệ - ĐHQGHN tận tâm truyền đạt kiến thức bổ ích giúp phát triển Cuối xin cảm ơn gia đình, người thân bạn bè hỗ trợ, tạo động lực giúp tơi hồn thiện thân Luận văn hỗ trợ từ đề tài KHCN cấp ĐHQGHN, Mã số: QG.20.59 Mục lục Chương Giới thiệu Chương Kiến thức tảng 2.1 Khái niệm lỗi: Fault, Error, Failure 2.2 Kiểm thử phần mềm 2.3 Gỡ lỗi 2.4 Các nghiên cứu định vị lỗi 2.5 Các kỹ thuật định vị lỗi 2.5.1 Các kỹ thuật định vị truyền thống 2.5.2 Kỹ thuật định vị lỗi dựa lát cắt 2.5.3 Kỹ thuật định vị lỗi dựa phổ 10 2.5.4 Kỹ thuật định vị lỗi dựa xác suất 13 2.5.5 Kỹ thuật định vị lỗi dựa trạng thái 15 2.5.6 Kỹ thuật định vị lỗi dựa học máy 16 2.5.7 Kỹ thuật định vị lỗi dựa khai phá liệu 17 Chương Công cụ định vị lỗi HiFa cho ứng dụng C/C++ 19 3.1 Kỹ thuật định vị lỗi cho ứng dụng C/C++ 19 3.1.1 Tổng quan kỹ thuật 19 3.1.2 Ví dụ minh họa 21 3.2 Kiến trúc tổng quan công cụ HiFa 25 3.3 Quá trình điều chỉnh mã nguồn 26 3.3.1 Tổng quan LLVM 27 3.3.2 Quá trình điều chỉnh mã công cụ HiFa 30 3.4 Quá trình xử lý liệu phổ 33 Chương Thử nghiệm đánh giá 36 4.1 Thử nghiệm 36 4.1.1 Dữ liệu thử nghiệm 36 4.1.2 Chỉ số đánh giá 37 4.2 Kết đánh giá 38 Chương Kết luận 45 Danh sách hình vẽ Hình 2-1: Mã nguồn hàm mid Hình 2-2: Đồ thị dịng điều khiển tương ứng độ đo C2 hàm mid Hình 2-3: Đồ thị dịng liệu chương trình mid Hình 2-4: Số lượng nghiên cứu định vị lỗi từ 2003 - 2021 Hình 2-5: Tổng quan thuật toán predicate switching 16 Hình 2-6: Thuật tốn Định vị lỗi sử dụng phân tích N-gram 18 Hình 3-1: Tổng quan kỹ thuật sửa lỗi dựa phổ 19 Hình 3-2: Mã nguồn hàm mid 21 Hình 3-3: Kiến trúc cơng cụ HiFa 26 Hình 3-4: LLVM Framework 28 Hình 3-5: Kiến trúc trình biên dịch LLVM 29 Hình 3-6: Các LLVM pass 30 Hình 3-7: Quá trình điều chỉnh mã nguồn 31 Hình 3-8: Bảng xếp hạng nghi ngờ tạo sử dụng HiFa giao diện dòng lệnh 34 Hình 3-9: Giao diện đồ hoạ người dùng công cụ HiFa 34 Hình 4-1: Điểm Expense Barinel DRT 38 Hình 4-2: Điểm Expense Dstar Jaccard 39 Hình 4-3: Điểm Expense Kulczynski2 Mccon 39 Hình 4-4: Điểm Expense Minus Ochiai 40 Hình 4-5: Điểm Expense Op Tarantula 40 Hình 4-6: Điểm Expense Wong3 Zoltar 41 Hình 4-7: Hiệu định vị lỗi kỹ thuật với phổ ESHS 42 Hình 4-8: Hiệu định vị lỗi kỹ thuật với phổ DHS 42 Hình 4-9: Hiệu định vị lỗi kỹ thuật với phổ DHS-def 43 Hình 4-10: Hiệu định vị lỗi kỹ thuật với phổ DHS-use 43 Danh sách bảng Bảng 2.1 Ví dụ phương pháp dựa lát cắt chương trình 10 Bảng 2.2: Các số xếp hạng kỹ thuật SFL 12 Bảng 3.1: Bộ kiểm thử hàm mid 22 Bảng 3.2: Phổ ESHS hàm mid 22 Bảng 3.3: Phổ DHS hàm mid 23 Bảng 3.4: Độ nghi ngờ thứ hạng câu lệnh phiên lỗi 24 Bảng 3.5: Độ nghi ngờ thứ hạng câu lệnh phiên lỗi 25 Bảng 3.6: Dữ liệu câu lệnh điều chỉnh 33 Bảng 4.1: Chi tiết chương trình liệu thử nghiệm 36 Bảng 4.2: Kích thước tệp thực thi chương trình 44 Danh sách từ viết tắt thuật ngữ BHS BiS BP BwS CFG CPS DFG DHS ESHS FwS IR IVMP SFL Branch Hit Spectrum Bidirectional Dynamic Slice Back Propagation Backward Dynamic Slice Data Flow Graph Complete Path Spectrum Control Flow Graph Data-dependence Hit Spectrum Executable Statement Hit Spectrum Forward Dynamic Slice Intermediate Representation Interesting Value Mapping Pairs Spectrum-based Fault localization Chương Giới thiệu Trong trình phát triển phần mềm, việc gỡ lỗi phần mềm trình tốn thủ cơng Chương trình phần mềm chạy kiểm thử với kiểm thử định Nếu có xuất lỗi kiểm thử, lập trình viên phải thực kiểm tra lại chương trình để xác định câu lệnh gây lỗi Sau đó, họ sửa lỗi Trong hoạt động gỡ lỗi phần mềm này, hoạt động định vị lỗi hay xác định vị trí lỗi hoạt động tốn Quá trình xác định lỗi thực tế thường thực cách thủ cơng Sau hồn thành q trình phát triển, lập trình viên thực chạy kiểm thử với chương trình quan sát kết chương trình Nếu có ca kiểm thử có lỗi, lập trình viên thực đặt điểm ngắt vị trí mà họ nghi ngờ có khả gây lỗi Sau đó, họ chạy lại chương trình với ca kiểm thử gây lỗi trước quan sát trạng thái chương trình để xác định lỗi Lập trình viên thực lặp lặp lại trình ca kiểm thử khơng cho lỗi Q trình trình gây tốn thời gian cơng sức Do đó, việc áp dụng kỹ thuật cơng cụ định vị lỗi giảm đáng kể chi phí gỡ lỗi Kỹ thuật định vị lỗi tự động đưa đề xuất, gợi ý vị trí gây lỗi cho lập trình viên Từ đó, họ cần tập trung vào vị trí đề xuất để kiểm tra, giúp giảm thời gian công sức để sửa lỗi Các nhà nghiên cứu đưa nhiều kỹ thuật để thực định vị lỗi Các kỹ thuật định vị lỗi truyền thống như: hệ thống nhật ký (logging), lệnh khẳng định (assertions), điểm ngắt (breakpoints) phân tích hồ sơ (profiling) Các kỹ thuật định vị lỗi nâng cao như: dựa lát cắt (slide-based), dựa phổ (spectrum-based), dựa xác suất (statistics-based), dựa trạng thái (state-based), dựa học máy 36 Chương Thử nghiệm đánh giá Chương trình bày chi tiết thử nghiệm thực tế công cụ định vị lỗi HiFa với liệu phổ biến Sau đó, kết thử nghiệm trình bày, đánh giá phân tích 4.1 Thử nghiệm 4.1.1 Dữ liệu thử nghiệm Để đánh giá hiệu công cụ HiFa, luận văn thực thử nghiệm công cụ với liệu thử nghiệm với 10 chương trình gồm chương trình Siemens chương trình grep, sed space Bảng 4.1 thể thơng tin chi tiết chương trình sử dụng thử nghiệm Cột 2-5 số phiên lỗi, số dòng lệnh, số dòng lệnh thực thi số ca kiểm thử chương trình thử nghiệm Bảng 4.1: Chi tiết chương trình liệu thử nghiệm Bộ Siemens Chương trình print_tockens print_tockens2 schedule schedule2 replace tcas tot_info grep sed space Số phiên lỗi 10 10 32 41 23 18 15 38 Số dòng lệnh 565 510 412 307 563 173 406 13229 11990 9123 Số dòng lệnh thực thi 195 200 152 128 244 65 122 3361 3727 3656 Số ca kiểm thử 4130 4115 2650 2710 5542 1608 1052 810 370 13585 Bộ Siemens [34] sử dụng thử nghiệm nhiều nghiên cứu liên quan đến định vị lỗi Bộ Siemens bao gồm chương trình với 132 phiên chương trình bị lỗi tất ca kiểm thử tải xuống từ Siemens Suite Trong số 132 phiên bị lỗi này, ba phiên bị loại khỏi thử nghiệm: phiên tất kiểm tra vượt qua phiên khơng 37 có kiểm tra bị lỗi; phiên ‘‘print_tokens” lỗi nằm tệp header thay tệp C Chương trình grep [34] với phiên 2.2 có 810 ca kiểm thử 18 lỗi Chương trình sed [34] với phiên 4.1.5 có 370 ca kiểm thử 15 lỗi Chương trình Space [34] có 9123 dịng mã lệnh Tuy nhiên, ta kết hợp câu lệnh nhiều dòng làm dòng mã nguồn, ta có 3656 câu lệnh thực thi Chương trình Space có 38 phiên bị lỗi 13585 ca kiểm thử sử dụng nghiên cứu Ba phiên bị lỗi không sử dụng thử nghiệm luận văn khơng có ca kiểm thử không thành công phiên bị lỗi này, tám phiên bị lỗi bị loại trừ nhiều lý khác Bộ chương trình liệu luận văn bao gồm chương trình số lượng dịng lệnh chương trình tcas (173 dòng lệnh), schedule2 (307 dòng lệnh) chương trình có số lượng dịng lệnh lớn grep với 13 nghìn dịng lệnh Số lượng ca kiểm thử có số lượng trải dài từ 370 ca kiểm thử tới số lượng ca kiểm thử lớn 13585 ca kiểm thử Ngoài lỗi chế tác siemens, chương trình grep, chương trình sed, luận văn thử nghiệm với lỗi thực tế chương trình space 4.1.2 Chỉ số đánh giá Kỹ thuật định vị lỗi T lấy đầu vào chương trình P thử nghiệm có lần thử nghiệm khơng đạt tạo dạng danh sách xếp vị trí chương trình đáng ngờ, chẳng hạn dòng, câu lệnh khai báo Để so sánh kỹ thuật định vị lỗi T có hiệu kỹ thuật định vị lỗi T’, ta cần có số đánh giá phù hợp Có nhiều số để đánh giá kỹ thuật định vị lỗi để xuất như: LIL, T-score, EXAM, Expense, … LIL (Locality Information Loss) [35] đo lường hiệu kỹ thuật định vị lỗi để sửa lỗi chương trình tự động Chỉ số LIL Seokhyeon Moon cộng đề xuất để đo lường mát thơng tin vị trí thực tế lỗi vị trí dự đốn từ kỹ thuật định vị lỗi EXAM [23] tính tồn tỷ lệ phần trăm thành phần mà nhà phát triển phải kiểm tra tìm thành phần bị lỗi tổng câu lệnh chương trình 38 Expense [3] tính tồn tỷ lệ phần trăm thành phần mà nhà phát triển phải kiểm tra tìm thành phần bị lỗi tổng câu lệnh thực thi chương trình 4.2 Kết đánh giá Luận văn sử dụng số đánh giá Expense để đánh giá hiệu loại phổ định vị lỗi Luận văn so sánh hiệu phổ ESHS, DHS, DHS-def, DHS-use sử dụng 12 số xếp hạng mơ tả 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 phổ tương ứng với kỹ thuật tương ứng barinel, drt, dstar, jaccard, kulczynski2, mccon, minus, ochiai, op, tarantula, wong3 zoltar Với biểu đồ, trục x thể phần trăm mã kiểm tra, trục y thể phần trăm phiên lỗi định vị cách kiểm tra lượng mã nhỏ tương ứng với giá trị trục x (a) Barinel (b) DRT Hình 4-1: Điểm Expense Barinel DRT Các phổ DHS thể hiệu tốt phổ ESHS với hầu hết số xếp hạng Với số xếp hạng Mccon, Op Wong3 chênh lệch không nhiều Đường đồ thị điểm Expense số xếp hạng gần tương đồng Ngược lại, Barinel, Dstar, Jaccard, Ochiai Tarantula thể chênh lệch rõ rệt, điều tương đương khả định vị lỗi với phổ DHS hiệu nhiều Như Hình 4-1, xác định 83% lượng lỗi cách kiểm tra 30% mã chương trình sử dụng kỹ thuật Barinel phổ DHS-use Số lượng mã cần kiểm tra nhiều dùng kỹ thuật Barinel phổ ESHS, 40% số câu 39 lệnh chương trình Số lượng mã cần kiểm tra phổ DHS DHS-def khoảng 35% (a) Dstar (b) Jaccard Hình 4-2: Điểm Expense Dstar Jaccard Tương tự Barinel, Dstar Jaccard thể hiệu định vị lỗi với phổ DHS-use DHS-def (như Hình 4-2) Khi kiểm tra 40% mã chương trình, phổ DHS-use 81% lỗi với kỹ thuật Dstar, phổ DHS 76% lỗi Phổ ESHS DHS có hiệu 73% lỗi Kỹ thuật Jaccard phổ ESHS lại tìm nhiều lỗi kiểm tra 50% câu lệnh chương trình Phổ ESHS tìm 91% số lỗi, nhiều 5% so với phổ DHS, DHS-def DHS-use (a) Kulczynski2 (b) Mccon Hình 4-3: Điểm Expense Kulczynski2 Mccon 40 (a) Minus (b) Ochiai Hình 4-4: Điểm Expense Minus Ochiai (a) Op (b) Tarantula Hình 4-5: Điểm Expense Op Tarantula Kỹ thuật Tarantula cho thấy hiệu khác biệt rõ rệt loại phổ thể Hình 4-5 Phổ DHS-use ln thể hiệu tốt phổ dựa cặp def-use lại DHS DHS-def Đường điểm Expense phổ DHSuse nằm bên đường điểm Expense phổ DHS DHS-def Ở khoảng kiểm tra trước 50% mã chương trình, điểm Expense phổ DHS-use xác định nhiều lỗi loại phổ lại 41 (a) Wong3 (b) Zoltar Hình 4-6: Điểm Expense Wong3 Zoltar Các Hình 4-7, Hình 4-8, Hình 4-9, Hình 4-10 so sánh hiệu tất kỹ thuật định vị lỗi (hay số xếp hạng) với phổ ESHS, DHS, DHS-use DHSdef Với tất phổ, kỹ thuật tìm số lượng lỗi gần tương đồng Số lượng lỗi tìm giữ kỹ thuật chênh lệch không 10% tổng lượng lỗi thử nghiệm Với phổ ESHS, kỹ thuật Wong3 có hiệu thấp kỹ thuật Barinel DRT có hiệu cao Với cách kiểm tra 60% mã chương trình, kỹ thuật Barinel DRT định vị lỗi hiệu 10% so với kỹ thuật Wong3 42 Hình 4-7: Hiệu định vị lỗi kỹ thuật với phổ ESHS Chỉ số xếp hạng Ochiai có đường điểm Expense ổn định với kỹ thuật khác kết hợp với phổ DHS, DHS-def DHS-use Hình 4-8: Hiệu định vị lỗi kỹ thuật với phổ DHS 43 Hình 4-9: Hiệu định vị lỗi kỹ thuật với phổ DHS-def Hình 4-10: Hiệu định vị lỗi kỹ thuật với phổ DHS-use Công cụ Zoltar khơng cịn sử dụng khơng trì cập nhật Nên luận văn thực thực nghiệm so sánh hiệu điều chỉnh mã nguồn HiFa Zoltar Thay vào đó, luận văn thực so sánh HiFa GCC, công cụ hỗ trợ điều chỉnh mã nguồn Bảng 4.2 thể so sánh kích thước tệp thực thi chương trình kích thước liệu phổ thu thập sau thực thi kiểm thử giữ công cụ 44 HiFa GCC Cột danh sách chương trình thử nghiệm Các cột 2, 3, thể kích thước tệp thực thi tính theo byte tương ứng với biên dịch GCC, biên dịch HiFa cho phổ ESHS biên dịch với HiFa cho phổ DHS Các cột 4, kích thước phổ liệu thu sau thực kiểm thử tương ứng với cách điều chỉnh mã nguồn GCC, HiFa cho phổ ESHS HiFa cho phổ DHS GCC 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âu lệnh Kết so sánh cho thấy tệp thực thi biên dịch cơng cụ HiFa có kích thước lên nhiều so với tệp thực thi biên dịch GCC Tệp thực thi biên dịch HiFa có kích thước lớn – lần kích thước tệp thực thi biên dịch GCC Tệp thực thi phổ DHS có kích thước lớn phổ ESHS Sự khác biệt số lượng cặp def-use nhiều số câu lệnh chương trình, nên cần bổ sung nhiều thơng tin để lấy phổ DHS Tuy có kích thước tệp thực thi cao hơn, chương trình điều chỉnh HiFa tạo tệp liệu phổ thấp so với GCC Kích thước liệu phổ thu sau thi kiểm thử chương trình điều chỉnh GCC cao 4-5 lần chương trình điều chỉnh HiFa cho phổ ESHS Chương trình có số lượng testcase lớn chênh lệch cao, chương trình replace có 5542 testcase kích thước tệp liệu phổ chênh lệch 5.8 lần, chương trình tot_info có kiểm thử nhỏ (1052 testcase) chênh lệch 3.3 lần Từ kết cho thấy phương pháp điều chỉnh mã nguồn để thu thập thơng tin phổ HiFa có hiệu tốt GCC, đặc biệt với chương trình có kiểm thử lớn Bảng 4.2: Kích thước tệp thực thi chương trình Chương trình print_tokens print_tokens2 schedule schedule2 replace tcas tot_info Kích thước tệp thực thi GCC ESHS DHS 47 163 167 43 156 164 43 150 150 43 150 153 43 165 273 34 144 144 41 159 166 Kích thước liệu phổ GCC ESHS DHS 7357 1440 2078 7250 1507 2022 3354 619 867 3409 580 790 10803 2257 3903 1426 175 178 573 171 373 45 Chương Kết luận Luận văn nghiên cứu kỹ thuật định vị lỗi như: kỹ thuật truyền thống (Logging, Assertions, BreakPoints, Profiling); kỹ thuật nâng cao (dựa phổ chương trình, dựa lát cắt, dựa trạng thái, dựa mơ hình, dựa xác suất, dựa học máy, dựa khai phá liệu) Luận văn sâu vào tìm hiểu kỹ thuật định vị lỗi dựa phổ chương trình kỹ thuật sử dụng phổ biến dễ dàng tiếp cận Luận văn bổ sung phổ DHS cho kỹ thuật định vị lỗi dựa phổ phát triển công cụ định vị lỗi dựa phổ chương trình HiFa cho chương trình C/C++ Hiện tại, cơng cụ HiFa tích hợp sẵn 13 kỹ thuật định vị lỗi dựa phổ chương trình: ochiai, tarantula, jaccard, op, barinel, dstar, kulczynski2, mccon, zoltar, wong3, drt, minus ochiai2 Bên cạnh phổ ESHS (câu lệnh) sử dụng nguyên cứu kỹ thuật định vị lỗi dựa phổ chương trình trước đây, cơng cụ bổ sung thêm phổ DHS Luận văn đưa thử nghiệm thực tế công cụ với liệu lỗi chuẩn Siemens, chương trình grep, sed, space Các thử nghiệm liệu lỗi thực để đánh giá khả định vị lỗi kỹ thuật sử dụng phổ DHS phổ ESHS Kết cho thấy kỹ thuật sử dụng phổ DHS, DHS-def, DHS-use có khả định vị lỗi hiệu kỹ thuật sử dụng phổ ESHS Với liệu thử nghiệm, kỹ thuật Barinel, Dstar, Jaccard, Ochiai Tarantula sử dụng phổ DHS nhiều 10% lỗi so với phổ ESHS thực kiểm tra 30% mã chương trình Từ kết này, ta thấy cơng cụ định vị lỗi có tiềm khả ứng dụng cao trình phát triển phần mềm C/C++ Cơng cụ giúp nhà phát triển giảm thiểu chi phí, thời gian cho trình gỡ lỗi hệ thống Với kết đạt được, thời gian luận văn mở rộng khả hỗ trợ ngơn ngữ lập trình khác cho công cụ HiFa Objective-C, Python, Scala, … Cùng với cơng cụ HiFa áp dụng kỹ thuật định vị nhiều lỗi Trong thực tế, chương trình phần mềm khơng có lỗi đơn lẻ mà có nhiều lỗi đồng thời gây kết kiểm thử không thành công Quá trình gỡ lỗi chương trình thường thực gỡ lỗi đơn lẻ Nhà phát triển kiểm tra trường hợp kiểm thử không thành cơng để cố gắng tìm câu lệnh lỗi kỹ thuật gỡ lỗi có sử dụng tất ca kiểm thử không thành công kỹ thuật định vị lỗi Sau lỗi 46 tìm thấy sửa lỗi, chương trình phải kiểm thử lại với kiểm thử để xác định ca kiểm thử không thành công trước có thành cơng hay khơng Nếu lỗi cịn q trình gỡ lỗi lặp lại Để giảm tổng thời gian chi phí cho trình gỡ lỗi, có nhiều nhà phát triển tham gia trình gỡ lỗi song song Để thực điều cần có kỹ thuật định vị lỗi phát diện nhiều lỗi ánh xạ chúng thành tập hợp thử nghiệm không thành công để định cho nhà phát triển khác 47 Tài liệu tham khảo Tài liệu tiếng Việt [2] Phạm Ngọc Hùng, Trương Anh Hồng, Đặng Văn Hưng, Giáo trình kiểm thử phần mềm, Nhà xuất Đại học Quốc gia Hà Nội, 2014 [33] “Tìm hiểu chung LLVM,” viblo, [Trực tuyến] Available: https://viblo.asia/p/tim-hieu-chung-ve-llvm-1VgZv6zMZAw Tài liệu tiếng Anh [1] IEEE, Ieee standard glossary of software engineering terminology (ieee std 610.12-1990), 1990 [3] James A Jones, Mary Jean Harrold, "Empirical Evaluation of the Tarantula Automatic Fault-Localization Technique," in Proc Int Conf Autom Softw Eng., CA, USA, 2005 [4] "dblp computer science bibliography," [Online] Available: https://dblp.unitrier.de/ [5] W Eric Wong, Ruizhi Gao, Yihao Li, Rui Abreu, and Franz Wotawa, "A Survey on Software Fault Localization," IEEE Transactions on Software Engineering, 2016 [6] M Weiser, "Program slicing: formal, psychological, and practical investigations of an automatic program abstraction method," Ph.D dissertation, Univ Michigan, Ann Arbor, MI, USA, 1979 [7] J R L a M Weiser, "Automatic program bug location by program slicing," in Proc Int Conf Comput Appl., 1987 [8] H Agrawal, J R Horgan, "Dynamic program slicing," in Proc ACM SIGPLAN Conf Program Language Des Implementation, NY, USA, 1990 48 [9] X Zhang, N Gupta, R Gupta, Locating faulty code by multiple points slicing, Softw Practice Experience, 2007 [10] H Agrawal, J R Horgan, S London, W E Wong, "Fault localization using execution slices and dataflow tests," in Proc 6th Int Symp Softw Rel Eng., Toulouse, France, 1995 [11] H Agrawal, J R Horgan, J J Li, S London, W E Wong, S.Ghosh, N Wilde, "Mining system tests to aid software maintenance," IEEE Comput., vol 31, no 7, 1998 [12] W E Wong, J J Li, "An integrated solution for testing and analyzing java applications in an industrial setting," in Proc AsiaPacific Softw Eng Conf., Taipei, Taiwan, 2005 [13] Rui Abreu, Peter Zoeteweij, Arjan J C van Gemund, "On the accuracy of spectrum-based fault localization," in Proc Testing: Academic Ind Conf Practice Res Techn., CT, USA, 2007 [14] Mike Y Chen, Emre Kiciman, Eugene Fratkin, Armando Fox, Eric Brewer, "Pinpoint: Problem determination in large, dynamic internet services," in Proceedings of the 42nd Annual IEEE/IFIP International Conference on Dependable Systems and Networks, 2002 [15] T Janssen, R Abreu, and A J.C van Germund, "Zoltar: A Spectrum-based Fault Localization Tool," Proc ESEC/FSE Workshop Softw Integr Eval., Amsterdam, The Netherlands, 2009 [16] Lee Naish, Hua Jie Lee, and Kotagiri Ramamohanarao, "A model for spectra-based software diagnosis," J ACM Trans Softw Eng Methodol., vol 20, no 3, 2011 [17] W Eric Wong, Vidroha Debroy, Byoungju Choi, "A family of code coverage-based heuristics for effective fault localization," J Syst Softw., vol 83, no 2, 2010 49 [18] Lee Naish, Hua Jie Lee, Kotagiri Ramamohanarao, "Spectral debugging with weights and incremental ranking," in Proc Asia-Pacific Softw Eng Conf., Batu Ferringhi, Malaysia, 2009 [19] Jian Xu, Zhenyu Zhang, W K Chan, T H Tse, and Shanping Li, "A Dynamic Fault Localization Technique with Noise Reduction for Java Programs," in Proc Int Conf Quality Softw., Madrid, Spain, 2011 [20] R Abreu, P Zoeteweij, and A J van Gemund, "Spectrum-based multiple fault localization," in Proc 24th IEEE/ACM Int Conf Automated Softw Eng., CA, USA, 2009 [21] W E Wong, V Debroy, R Gao, and Y Li, "The DStar method for effective software fault localization," IEEE Trans Rel., vol 63, no 1, 2014 [22] Marcos L Chaim, José C Maldonado, Mario Jino, "A debugging strategy based on requirements of testing," in Proceedings of the 7th European Conference on Software Maintenance and Reengineering, CSMR’03, 2003 [23] B Liblit, M Naik, A X Zheng, A Aiken, M I Jordan, "Scalable statistical bug isolation," in Proc ACM SIGPLAN Conf Programm Language Design Implementation, Chicago, IL, USA, 2005 [24] C Liu, L Fei, X Yan, J Han, S P Midkiff, "Statistical debugging: A hypothesis testing-based approach," IEEE Trans Softw Eng., vol 32, no 10, 2006 [25] W C T T Y Y P H Zhenyu Zhang, "Non-parametric statistical fault localization," J Syst Softw., vol 84, no 6, 2011 [26] W E Wong, V Debroy, D Xu, "Towards better fault localization: A crosstab-based statistical approach," IEEE Trans Syst Man Cybern C, Appl Rev., vol 42, no 3, 2012 [27] A Zeller, R Hildebrandt, "Simplifying and isolating failure inducing input," IEEE Trans Softw Eng., vol 28, no 2, 2002 50 [28] X Zhang, N Gupta, R Gupta, "Locating Faults Through Automated Predicate Switching," in Proc Int Conf Softw Eng., Shanghai, China, 2006 [29] W E Wong, Y Qi, "BP neural network-based effective fault localization," Int J Softw Eng Knowl Eng., vol 19, no 4, 2009 [30] L C Briand, Y Labiche, X Liu, "Using machine learning to support debugging with tarantula," in Proc IEEE Int Symp Softw Rel., Trolhattan, Sweden, 2007 [31] S Nessa, M Abedin, W Eric Wong, L Khan, Y Qi, "Fault localization using N-gram analysis," in Proc Int Conf Wireless Algorithms, Syst Appl, 2009 [32] Mary Jean Harrold, Gregg Rothermel, Kent Sayre, Rui Wu, Liu Yi, "An Empirical Investigation of the Relationship Between Spectra Differences and Regression Faults," J Softw Testing, Verification Rel., vol 10, no 3, 2001 [33] Jian Xu, Zhenyu Zhang, W K Chan, T H Tse, Shanping Li, "A general noise-reduction framework for fault localization of java programs," Inf Softw Technol., vol 55, no 5, 2013 [34] "The LLVM https://llvm.org/ Compiler Infrastructure," [Online] Available: [36] N S Foundation, "Software-artifact Infrastructure Repository," [Online] Available: https://sir.csc.ncsu.edu/portal/usage.php [37] Y K M K Seokhyeon Moon, "Ask the Mutants: Mutating Faulty Programs for Fault Localization," in Proceedings of the 7th IEEE International Conference on Software Testing, Verification and Validation, 2014