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

Xây dựng công cụ định vị lỗi cho ứng dụng CC++

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

Tiêu đề Xây dựng công cụ định vị lỗi cho ứng dụng C/C++
Tác giả Nguyễn Văn Hiệp
Người hướng dẫn TS. Võ Đình Hiếu
Trường học Đại học Quốc gia Hà Nội
Chuyên ngành Kỹ thuật phần mềm
Thể loại luận văn thạc sĩ
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 59
Dung lượng 2,34 MB

Cấu trúc

  • Chương 1 Giới thiệu (10)
  • Chương 2 Kiến thức nền tảng (12)
    • 2.1 Khái niệm lỗi: Fault, Error, Failure (12)
    • 2.2 Kiểm thử phần mềm (12)
    • 2.3 Gỡ lỗi (15)
    • 2.4 Các nghiên cứu về định vị lỗi (16)
    • 2.5 Các kỹ thuật định vị lỗi (16)
      • 2.5.1 Các kỹ thuật định vị truyền thống (16)
      • 2.5.2 Kỹ thuật định vị lỗi dựa trên lát cắt (17)
      • 2.5.3 Kỹ thuật định vị lỗi dựa phổ (19)
      • 2.5.4 Kỹ thuật định vị lỗi dựa trên xác suất (22)
      • 2.5.5 Kỹ thuật định vị lỗi dựa trên trạng thái (24)
      • 2.5.6 Kỹ thuật định vị lỗi dựa trên học máy (25)
      • 2.5.7 Kỹ thuật định vị lỗi dựa trên khai phá dữ liệu (26)
  • Chương 3 Công cụ định vị lỗi HiFa cho các ứng dụng C/C++ (28)
    • 3.1 Kỹ thuật định vị lỗi cho ứng dụng C/C++ (28)
      • 3.1.1 Tổng quan kỹ thuật (28)
      • 3.1.2 Ví dụ minh họa (30)
    • 3.2 Kiến trúc tổng quan công cụ HiFa (34)
    • 3.3 Quá trình điều chỉnh mã nguồn (35)
      • 3.3.1 Tổng quan về LLVM (36)
      • 3.3.2 Quá trình điều chỉnh mã của công cụ HiFa (39)
    • 3.4 Quá trình xử lý dữ liệu phổ (42)
    • 4.1 Thử nghiệm (45)
      • 4.1.1 Dữ liệu thử nghiệm (45)
      • 4.1.2 Chỉ số đánh giá (46)
    • 4.2 Kết quả và đánh giá (47)
  • Chương 5 Kết luận (54)

Nội dung

Giới thiệu

Trong quá trình phát triển phần mềm, gỡ lỗi là một công việc tốn kém và chủ yếu thực hiện thủ công Khi chạy kiểm thử với bộ kiểm thử, nếu phát hiện lỗi, lập trình viên cần kiểm tra lại chương trình để xác định các câu lệnh gây ra lỗi và sửa chữa chúng Hoạt động định vị lỗi là phần tốn kém nhất trong quá trình này, thường được thực hiện một cách thủ công và tuần tự Sau khi phát triển xong, lập trình viên sẽ chạy kiểm thử và nếu có lỗi, họ sẽ đặt điểm ngắt tại các vị trí nghi ngờ Quá trình này lặp đi lặp lại cho đến khi không còn lỗi xuất hiện, gây tốn thời gian và công sức đáng kể.

Việc áp dụng kỹ thuật và công cụ định vị lỗi có thể giúp giảm đáng kể chi phí gỡ lỗi cho lập trình viên Các kỹ thuật tự động xác định vị trí lỗi cung cấp gợi ý cho lập trình viên, cho phép họ tập trung vào những khu vực cụ thể để kiểm tra, từ đó tiết kiệm thời gian và công sức Nhiều kỹ thuật định vị lỗi đã được nghiên cứu, bao gồm các phương pháp truyền thống như hệ thống nhật ký, lệnh khẳng định, điểm ngắt và phân tích hồ sơ Ngoài ra, còn có các kỹ thuật nâng cao như dựa trên lát cắt, phổ, xác suất, trạng thái và học máy, giúp tối ưu hóa quá trình gỡ lỗi.

(machine learning-based), dựa trên khai phá dữ liệu (data mining-based), dựa trên mô hình (model-based), …

Kỹ thuật định vị lỗi dựa trên phổ (spectrum-based) là một trong những phương pháp phổ biến nhất hiện nay Mặc dù có nhiều nghiên cứu, nhưng hầu hết không cung cấp công cụ đi kèm hoặc các công cụ còn thiếu sót, khó tiếp cận cho việc định vị lỗi trong các chương trình C/C++ Luận văn này nhằm nghiên cứu và lựa chọn kỹ thuật định vị lỗi dựa trên phổ phù hợp cho các ứng dụng C/C++ Dựa trên kỹ thuật này, luận văn đã phát triển một công cụ hoàn chỉnh mang tên HiFa, giúp tự động định vị lỗi cho các ứng dụng.

HiFa là một công cụ mạnh mẽ trong việc định vị lỗi trong C/C++, tích hợp nhiều kỹ thuật SFL như Tarantula, Ochiai, Op2, và Dstar Ngoài việc sử dụng phổ ESHS phổ biến trong nghiên cứu, HiFa còn đề xuất thêm phổ DHS theo cặp def-use để nâng cao hiệu quả định vị lỗi Công cụ này đã được thử nghiệm với các tập dữ liệu, bao gồm bộ Siemens với 7 chương trình, chương trình Grep, chương trình Sed, và dữ liệu lỗi thực tế từ chương trình Space.

Chương 2 của luận văn trình bày kiến thức cơ bản về lỗi và kiểm thử phần mềm, cùng với các kỹ thuật định vị lỗi hiệu quả.

Chương 3 mô tả phương pháp định vị lỗi và kiến trúc của công cụ định vị lỗi đề xuất Chương 4 trình bày các thử nghiệm, kết quả và đánh giá khả năng định vị lỗi của công cụ Cuối cùng, Chương 5 tổng kết luận văn và đề xuất các cải tiến cho công cụ trong tương lai.

Kiến thức nền tảng

Khái niệm lỗi: Fault, Error, Failure

Theo tiêu chuẩn IEEE, fault được định nghĩa là một bước hoặc quá trình sai trong chương trình máy tính, thường do lỗi của nhà phát triển khi viết mã Error là trạng thái sai của chương trình trong quá trình thực thi, có khả năng dẫn đến failure Failure xảy ra khi chương trình sản sinh ra kết quả không đúng với mong đợi.

Luận văn này nghiên cứu các phương pháp xác định lỗi khi chương trình gặp ca kiểm thử thất bại Lỗi được định vị trong nghiên cứu này thuộc loại lỗi Failure Khi sử dụng thuật ngữ "Định vị lỗi", luận văn đề cập đến việc xác định câu lệnh hoặc thành phần của chương trình gây ra lỗi failure.

Kiểm thử phần mềm

Kiểm thử phần mềm là bước thiết yếu trong quy trình phát triển phần mềm, giúp xác định xem phần mềm có đáp ứng đúng yêu cầu kỹ thuật hay không Thông qua kiểm thử, chất lượng phần mềm được cải thiện rõ rệt Mỗi ca kiểm thử (testcase) bao gồm một tập hợp các giá trị đầu vào và kết quả đầu ra mong đợi Một ca kiểm thử được coi là thành công khi chương trình hoạt động đúng như mong đợi, với kết quả đầu ra thực tế khớp với kết quả đầu ra đã định trước Ngược lại, ca kiểm thử sẽ thất bại nếu chương trình không thực hiện đúng hành vi mong muốn.

Các chiến lược kiểm thử và ca kiểm thử đóng vai trò quan trọng trong việc đảm bảo chất lượng phần mềm bằng cách kiểm tra từ nhiều góc độ khác nhau Bộ kiểm thử có thể được xây dựng thông qua các phương pháp như kiểm thử hộp đen (tập trung vào chức năng) và kiểm thử hộp trắng (tập trung vào cấu trúc).

Kiểm thử chức năng tạo ra các ca kiểm thử dựa trên đặc tả phần mềm, chỉ sử dụng các giá trị đầu vào và đầu ra mong đợi Phương pháp này giúp xác định xem chương trình có hoạt động đúng theo hành vi mong muốn hay không Ba phương pháp phổ biến trong kiểm thử chức năng bao gồm phân tích giá trị biên, phân lớp tương đương và bảng quyết định.

Kiểm thử cấu trúc là phương pháp xây dựng ca kiểm thử dựa trên mã nguồn của chương trình, giúp phát hiện lỗi tiềm ẩn và đảm bảo cấu trúc mã được kiểm tra Hai kỹ thuật chính trong kiểm thử cấu trúc là kiểm thử dòng điều khiển và kiểm thử dòng dữ liệu Độ đo kiểm thử xác định mức độ bao phủ của chương trình bởi bộ kiểm thử, với tỷ lệ các thành phần được kiểm tra so với tổng thể chương trình Các thành phần này bao gồm câu lệnh, khối lệnh, nhánh điều khiển, và biến Mục tiêu của chiến lược kiểm thử là tạo ra bộ kiểm thử với số ca kiểm thử tối thiểu nhưng đạt được độ bao phủ tối đa, từ đó nâng cao độ tin cậy của bộ kiểm thử.

Hình 2-1: Mã nguồn hàm mid

Kiểm thử dòng điều khiển dựa trên đồ thị dòng điều khiển (CFG), là một đồ thị có hướng với các đỉnh đại diện cho câu lệnh hoặc khối lệnh và các cạnh biểu thị dòng điều khiển giữa chúng Kiểm thử dòng điều khiển bao gồm ba độ đo: C1, C2 và C3 Độ đo C1 yêu cầu mỗi câu lệnh của chương trình được thực thi ít nhất một lần; độ đo C2 yêu cầu mỗi nhánh điều kiện phải được thực hiện trong quá trình kiểm thử; và độ đo C3 yêu cầu các điều kiện con của điều kiện phức tạp phải được thực hiện ít nhất một lần với cả hai nhánh đúng và sai Đồ thị dòng điều khiển của hàm mid thể hiện độ đo C2 với 5 điểm quyết định và bốn đường thực thi.

Hình 2-2: Đồ thị dòng điều khiển tương ứng độ đo C2 của hàm mid

Kiểm thử dòng dữ liệu dựa trên đồ thị dòng dữ liệu (DFG) là một phương pháp kiểm thử mở rộng từ đồ thị kiểm soát luồng (CFG) để tích hợp thông tin về luồng dữ liệu Phương pháp này tập trung vào việc kiểm tra các hoạt động liên quan đến việc gán và sử dụng biến trong chương trình Đồ thị dòng dữ liệu cung cấp cái nhìn tổng quan về các định nghĩa và cách sử dụng của từng biến, trong đó một định nghĩa (definition) được hiểu là câu lệnh thực hiện việc gán giá trị cho biến đó.

FT gán giá trị cho một biến, và việc sử dụng biến được thể hiện qua các câu lệnh Biến có thể được áp dụng để thực hiện các phép tính liên quan đến c-use hoặc để kiểm tra các điều kiện liên quan đến p-use Hình 2-3 minh họa đồ thị dòng dữ liệu của hàm mid.

Hình 2-3: Đồ thị dòng dữ liệu của chương trình mid

Gỡ lỗi

Lỗi chương trình là một phần không thể tránh khỏi trong quá trình lập trình, xuất phát từ nhiều nguyên nhân như lỗi đánh máy, hiểu sai yêu cầu phần mềm, hoặc gán giá trị không chính xác cho biến Thuật ngữ "bug" đã xuất hiện từ thế kỷ 20 để chỉ những sai sót trong hệ thống kỹ thuật, và từ "debug" được sử dụng để mô tả quá trình tìm kiếm và sửa chữa các lỗi trong chương trình.

Trong quá trình kiểm thử và triển khai phần mềm, lỗi xuất hiện khi chương trình hoạt động không như mong muốn Khi lỗi xảy ra, gỡ lỗi là bước tiếp theo, trong đó nhà phát triển sẽ kiểm tra mã nguồn để xác định nguyên nhân của vấn đề.

11 p-use={y,z} p-use={x,y} p-use={x,z} p-use={y,z} p-use={x,y}

Gỡ lỗi là quá trình quan trọng trong lập trình, giúp xác định và sửa các lỗi trong mã nguồn Nguyên nhân gây lỗi thường liên quan đến việc sử dụng sai cú pháp hoặc logic trong chương trình Để khắc phục những lỗi này, lập trình viên cần có kiến thức vững về ngôn ngữ lập trình cũng như kỹ năng phân tích vấn đề Qua việc gỡ lỗi, họ không chỉ sửa chữa các lỗi mà còn cải thiện hiểu biết về cách hoạt động của chương trình.

Các nghiên cứu về định vị lỗi

Kể từ những năm 1970, nhiều nghiên cứu đã được thực hiện để phát triển các phương pháp định vị lỗi phần mềm Sự phát triển mạnh mẽ của kỹ thuật này được thể hiện rõ ràng từ khi James A Jones và các cộng sự giới thiệu kỹ thuật Tarantula vào năm 2005 Biểu đồ thống kê số lượng nghiên cứu và báo cáo về định vị lỗi trong giai đoạn 2003 – 2021 cũng cho thấy xu hướng gia tăng đáng kể trong lĩnh vực này.

Trước năm 2005, số lượng công bố nghiên cứu về định vị lỗi chỉ dưới 10 nghiên cứu Tuy nhiên, từ năm 2005 trở đi, số lượng nghiên cứu này đã tăng mạnh và không ngừng gia tăng Đặc biệt, trong hai năm gần đây là 2020 và 2021, số lượng công bố đã đạt gần 100 nghiên cứu.

Hình 2-4: Số lượng nghiên cứu về định vị lỗi từ 2003 - 2021

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

2.5.1 Các kỹ thuật định vị truyền thống

Các kỹ thuật định vị lỗi truyền thống rất dễ hiểu và có thể được sử dụng bởi bất kỳ nhà phát triển nào Chúng bao gồm bốn phương pháp chính: hệ thống nhật ký (Logging), khẳng định (Assertions), điểm ngắt (Breakpoints) và phân tích hồ sơ (Profiling) Phương pháp Logging cho phép in thông tin trạng thái và bộ nhớ của chương trình, giúp nhà phát triển xác định vị trí lỗi qua dữ liệu log Assertions là các câu lệnh đảm bảo giá trị trạng thái của chương trình, và khi một câu lệnh assertion sai, chương trình sẽ dừng lại, giúp xác định phạm vi lỗi Phương pháp Breakpoints cho phép dừng chương trình tại các điểm chỉ định, từ đó lấy thông tin trạng thái và thậm chí thay đổi giá trị bộ nhớ để điều chỉnh và thu thập thêm dữ liệu về lỗi Cuối cùng, Profiling phân tích các chỉ số như thời gian thực thi và sử dụng bộ nhớ, giúp phát hiện lỗi như rò rỉ bộ nhớ hoặc lỗi hàm thực thi không mong muốn.

2.5.2 Kỹ thuật định vị lỗi dựa trên lát cắt

Lát cắt chương trình là một kỹ thuật trừu tượng hóa, giúp giảm bớt chương trình bằng cách loại bỏ các phần không liên quan, trong khi vẫn giữ nguyên chức năng cho các yêu cầu nhất định Kể từ khi Weiser giới thiệu phương pháp cắt lát tĩnh vào năm 1979, đã có hàng trăm bài báo nghiên cứu về chủ đề này Một ứng dụng quan trọng của cắt lát tĩnh là giảm miền tìm kiếm khi lập trình viên xác định lỗi trong chương trình, dựa trên nguyên tắc rằng lỗi sẽ nằm trong lát cắt tĩnh liên quan đến biến không chính xác Hơn nữa, phương pháp này được mở rộng thông qua việc xây dựng xúc xắc chương trình, trong đó các mặt xúc xắc là các lát cắt độc lập, giúp giới hạn vị trí lỗi trong một lát cắt cụ thể, từ đó giảm thêm miền tìm kiếm cho lập trình viên.

Một nhược điểm của phương pháp cắt lát tĩnh là nó có thể bao gồm những câu lệnh không cần thiết, do không thể dự đoán giá trị của biến trong thời gian chạy Để khắc phục điều này, phương pháp cắt lát động (dynamic slicing) được đề xuất, giúp xác định chính xác các câu lệnh ảnh hưởng đến giá trị của biến cho một lần thực thi cụ thể Kỹ thuật cắt lát động nhiều điểm đã được Zhang và cộng sự phát triển nhằm cải thiện độ chính xác của quá trình cắt lát.

Bài viết đề cập đến ba kỹ thuật chính trong phân tích lỗi: Lát động lùi (BwS), Lát động chuyển tiếp (FwS) và Lát động hai chiều (BiS) Kỹ thuật BwS giúp xác định các câu lệnh ảnh hưởng đến giá trị đầu ra của biến lỗi, trong khi FwS tập trung vào sự khác biệt đầu vào giữa các ca kiểm thử thành công và không thành công để xác định phần gây ra lỗi Cuối cùng, BiS điều chỉnh các giá trị của một số câu lệnh điều kiện trong ca kiểm thử không thành công nhằm đảm bảo chương trình tạo ra đầu ra chính xác.

Các kỹ thuật mới trong kiểm thử phần mềm đã thay thế phương pháp lát cắt tĩnh và lát cắt động bằng kỹ thuật lát cắt thực thi Lát cắt thực thi liên quan đến việc xác định các câu lệnh được thực thi trong một ca kiểm thử luồng dữ liệu cụ thể Sự khác biệt chính giữa lát cắt thực thi và lát cắt tĩnh là lát cắt tĩnh tập trung vào việc tìm kiếm các câu lệnh có thể ảnh hưởng đến các biến liên quan đến bất kỳ đầu vào nào, trong khi lát cắt thực thi chỉ chú trọng vào các câu lệnh được thực hiện bởi một đầu vào cụ thể.

Bảng 2.1 trình bày ví dụ về các loại lát cắt trong chương trình, với cột 1 liệt kê các câu lệnh và cột 2 chứa mã nguồn của chương trình mẫu Chương trình này có một lỗi ở dòng lệnh S7 Lát cắt tĩnh cho biến đầu ra product bao gồm tất cả các câu lệnh có thể ảnh hưởng đến giá trị của product.

Lát cắt động cho biến product bao gồm các câu lệnh S1, S2, S5, S7 và S13, có ảnh hưởng đến giá trị của product đối với ca kiểm thử với giá trị đầu vào a = 2 Trong khi đó, lát cắt thực thi cho ca kiểm thử này chứa tất cả các câu lệnh được thực hiện, bao gồm S1, S2, S4, S5, S6, S12 và S13, như thể hiện trong cột thứ 5 của Bảng 2.1.

Bảng 2.1 Ví dụ về phương pháp dựa trên lát cắt chương trình

Mã nguồn Lát cắt tĩnh Lát cắt động Lát cắt thực thi

S13 input(a) i = 1; sum = 0; product = 1; if (i

Ngày đăng: 05/10/2022, 09:19

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[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 Sách, tạp chí
Tiêu đề: Empirical Evaluation of the Tarantula Automatic Fault-Localization Technique
[4] "dblp computer science bibliography," [Online]. Available: https://dblp.uni- trier.de/ Sách, tạp chí
Tiêu đề: dblp computer science bibliography
[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 Sách, tạp chí
Tiêu đề: A Survey on Software Fault Localization
[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 Sách, tạp chí
Tiêu đề: Program slicing: formal, psychological, and practical investigations of an automatic program abstraction method
[7] J. R. L. a. M. Weiser, "Automatic program bug location by program slicing," in Proc. Int. Conf. Comput. Appl., 1987 Sách, tạp chí
Tiêu đề: Automatic program bug location by program slicing
[8] H. Agrawal, J. R. Horgan, "Dynamic program slicing," in Proc. ACM SIGPLAN Conf. Program. Language Des. Implementation, NY, USA, 1990 Sách, tạp chí
Tiêu đề: Dynamic program slicing
[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 Sách, tạp chí
Tiêu đề: Fault localization using execution slices and dataflow tests
[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 Sách, tạp chí
Tiêu đề: Mining system tests to aid software maintenance
[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 Sách, tạp chí
Tiêu đề: An integrated solution for testing and analyzing java applications in an industrial setting
[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 Sách, tạp chí
Tiêu đề: On the accuracy of spectrum-based fault localization
[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 Sách, tạp chí
Tiêu đề: Pinpoint: Problem determination in large, dynamic internet services
[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 Sách, tạp chí
Tiêu đề: Zoltar: A Spectrum-based Fault Localization Tool
[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 Sách, tạp chí
Tiêu đề: A model for spectra-based software diagnosis
[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 Sách, tạp chí
Tiêu đề: A family of code coverage-based heuristics for effective fault localization
[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 Sách, tạp chí
Tiêu đề: Spectral debugging with weights and incremental ranking
[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 Sách, tạp chí
Tiêu đề: A Dynamic Fault Localization Technique with Noise Reduction for Java Programs
[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 Sách, tạp chí
Tiêu đề: Spectrum-based multiple fault localization
[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 Sách, tạp chí
Tiêu đề: The DStar method for effective software fault localization
[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 Sách, tạp chí
Tiêu đề: A debugging strategy based on requirements of testing
[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 Sách, tạp chí
Tiêu đề: Scalable statistical bug isolation

HÌNH ẢNH LIÊN QUAN

Hình 2-1: Mã nguồn hàm mid - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 2 1: Mã nguồn hàm mid (Trang 13)
Hình 2-2: Đồ thị dịng điều khiển tương ứng độ đo C2 của hàm mid - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 2 2: Đồ thị dịng điều khiển tương ứng độ đo C2 của hàm mid (Trang 14)
Hình 2-3: Đồ thị dịng dữ liệu của chương trình mid - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 2 3: Đồ thị dịng dữ liệu của chương trình mid (Trang 15)
Hình 2-4: Số lượng nghiên cứu về định vị lỗi từ 200 3- 2021 - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 2 4: Số lượng nghiên cứu về định vị lỗi từ 200 3- 2021 (Trang 16)
Bảng 2.1. Ví dụ về phương pháp dựa trên lát cắt chương trình - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Bảng 2.1. Ví dụ về phương pháp dựa trên lát cắt chương trình (Trang 19)
Bảng 2.2: Các chỉ số xếp hạng của các kỹ thuật SFL - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Bảng 2.2 Các chỉ số xếp hạng của các kỹ thuật SFL (Trang 21)
Hình 2-6: Thuật tốn Định vị lỗi sử dụng phân tích N-gram - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 2 6: Thuật tốn Định vị lỗi sử dụng phân tích N-gram (Trang 27)
Hình 3-2: Mã nguồn hàm mid - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 3 2: Mã nguồn hàm mid (Trang 30)
Bảng 3.1: Bộ kiểm thử của hàm mid - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Bảng 3.1 Bộ kiểm thử của hàm mid (Trang 31)
Bảng 3.4: Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 1 - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Bảng 3.4 Độ nghi ngờ và thứ hạng của từng câu lệnh phiên bản lỗi 1 (Trang 33)
Từ mức độ nghi ngờ trong Bảng 3.2 và Bảng 3.3, ta thu được thứ hạng nghi ngờ của các câu lệnh của phiên bản lỗi 1 như Bảng 3.4 - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
m ức độ nghi ngờ trong Bảng 3.2 và Bảng 3.3, ta thu được thứ hạng nghi ngờ của các câu lệnh của phiên bản lỗi 1 như Bảng 3.4 (Trang 33)
Hình 3-3: Kiến trúc cơng cụ HiFa - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 3 3: Kiến trúc cơng cụ HiFa (Trang 35)
Hình 3-4: LLVM Framework - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 3 4: LLVM Framework (Trang 37)
Hình 3-5: Kiến trúc trình biên dịch LLVM - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 3 5: Kiến trúc trình biên dịch LLVM (Trang 38)
Hình 3-6: Các LLVM pass - Xây dựng công cụ định vị lỗi cho ứng dụng CC++
Hình 3 6: Các LLVM pass (Trang 39)

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w