Luận văn: Phương pháp tự động sửa lỗi cho chương trình Java

Sửa lỗi Java tự động hiệu quả với luận văn thạc sĩ chuyên sâu. Tìm hiểu phương pháp và công cụ giúp lập trình viên gỡ lỗi Java nhanh chóng, chính xác.

Trường đại học

Trường Đại Học Công Nghệ

Chuyên ngành

Khoa Học Máy Tính

Người đăng

Ẩn danh

Thể loại

Luận Văn Thạc Sĩ

2020

78
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

TÓM TẮT

LỜI CẢM ƠN

Danh sách hình vẽ

Danh sách bảng

Danh sách từ viết tắt và thuật ngữ

1. Chương 1: Giới thiệu

1.1. Mở đầu

1.3. Bố cục luận văn

2. Chương 2: Kiến thức nền tảng

2.1. Kiểm thử hồi quy và lỗi hồi quy

2.2. Sửa lỗi chương trình tự động

2.2.1. Xác định vị trí gây ra lỗi

2.2.2. Các phương pháp sửa lỗi tự động hiện nay

3. Chương 3: Phương pháp sửa tự động lỗi hồi quy

3.1. Tổng quan phương pháp

3.2. Xác định bản cập nhật gây ra lỗi

3.3. Thu thập thông tin mã nguồn thay đổi và nguyên liệu sửa lỗi

3.4. Các mẫu sửa lỗi

3.5. Xác định vị trí gây lỗi

3.6. Thuật toán sửa lỗi

4. Chương 4: Cài đặt công cụ và thực nghiệm

4.1. Cài đặt công cụ

4.2. Phương pháp thực nghiệm

4.3. Kết quả thực nghiệm và thảo luận

5. Chương 5: Kết luận

Danh sách các mẫu sửa lỗi

Tài liệu tham khảo

Tóm tắt

I. Sửa Lỗi Java Tự Động Tổng Quan Tiềm Năng 55 ký tự

Các hệ thống phần mềm không ngừng phát triển để đáp ứng nhu cầu thay đổi từ khách hàng và thị trường. Quá trình này thường đi kèm với các tính năng mới, tuy nhiên, những thay đổi này có thể gây ra lỗi hồi quy, khiến các chức năng hiện tại không hoạt động đúng. Sửa lỗi thủ công tốn thời gian và công sức. Sửa lỗi tự động (APR), với khả năng tự động xác định vị trí và sửa lỗi, đang trở thành một giải pháp đầy hứa hẹn. Facebook đã công bố công cụ sửa lỗi tự động của riêng mình, cho thấy tiềm năng to lớn của APR. Luận văn này tập trung vào sửa lỗi java tự động cho các chương trình Java, một trong những ngôn ngữ lập trình phổ biến nhất hiện nay, bằng cách khai thác thông tin từ lịch sử phát triển phần mềm và xây dựng công cụ LyFix mã nguồn mở. Mục tiêu là cải thiện hiệu quả sửa lỗi java và giảm sự can thiệp của con người.

1.1. Lỗi Hồi Quy Trong Phát Triển Phần Mềm

Lỗi hồi quy là một vấn đề nhức nhối trong quá trình phát triển phần mềm, đặc biệt là trong các dự án lớn và phức tạp. Theo nghiên cứu, lập trình viên có thể mất đến 8,5 năm để sửa một lỗi hồi quy. Việc phát hiện lỗi java tự độngsửa lỗi java tự động sẽ làm giảm thiểu chi phí và thời gian cho nhà phát triển, đẩy nhanh quá trình ra mắt sản phẩm, tự động sửa lỗi java sẽ hỗ trợ rất nhiều cho nhà phát triển phần mềm.

1.2. Ưu Điểm Của Sửa Lỗi Tự Động APR Java

Sửa lỗi tự động giúp tự động hóa quá trình gỡ lỗi phần mềm, giảm thiểu hoặc loại bỏ sự can thiệp của con người. Các nghiên cứu gần đây về APR đã đạt được những thành công đáng kể, đóng góp nhiều kỹ thuật sửa lỗi tốt. Một số công cụ tự động sửa lỗi: GenProg, ssFix, SimFix, HDRepair, ...đã xuất hiện và cho thấy sự hữu ích trong việc debug java tự động, java automatic bug fixing

1.3. Giới thiệu Công cụ LyFix và Hướng Tiếp Cận

Công cụ LyFix sử dụng các nguyên liệu sửa lỗimẫu sửa lỗi cụ thể được học từ lịch sử phát triển của các hệ thống phần mềm để đạt kết quả sửa lỗi tốt hơn cho các lỗi hồi quy. LyFix được xây dựng dựa trên tư tưởng của Relifix, và bổ sung thêm các mẫu sửa lỗi mới. Luận văn này cũng đặt mục tiêu xây dựng một công cụ kèm theo, có tên LyFix, cho phép người dùng sửa lỗi hồi quy Java tự động và công bố nó như một phần mềm mã nguồn mở để cộng đồng có thể sử dụng.

II. Thách Thức Khó Khăn Trong Sửa Lỗi Java Tự Động 59 ký tự

Mặc dù APR có nhiều tiềm năng, việc áp dụng nó vào thực tế vẫn còn nhiều thách thức. Các kỹ thuật hiện tại chưa khai thác đầy đủ thông tin trong lịch sử phát triển của hệ thống, ví dụ như thông tin thay đổi trong những bản cập nhật gây ra lỗi. Hơn nữa, nhiều phương pháp sửa lỗi không cung cấp công khai công cụ cài đặt kèm theo hoặc công cụ rất hạn chế, khó áp dụng cho các dự án thực tế. Việc xác định bản cập nhật gây lỗi cũng là một vấn đề quan trọng. Các thuật toán hiện có như SZZ có thể cho kết quả không chính xác. Cần một phương pháp bán tự động để xác định chính xác bản cập nhật gây lỗi và thu thập thông tin thay đổi liên quan.

2.1. Hạn Chế Của Các Kỹ Thuật Sửa Lỗi Hồi Quy Hiện Tại

Các kỹ thuật APR hiện tại chưa khai thác đầy đủ thông tin trong lịch sử phát triển của hệ thống (ví dụ: thông tin thay đổi trong những bản cập nhật gây ra lỗi) để phục vụ cho việc sửa lỗi. Hơn nữa, những phương pháp sửa lỗi này không cung cấp công khai công cụ cài đặt kèm theo hoặc công cụ rất hạn chế và khó có thể áp dụng để sửa lỗi java trong các dự án thực tế.

2.2. Độ Chính Xác Của Thuật Toán Xác Định Lỗi SZZ

Các nghiên cứu gần đây đã chỉ ra rằng SZZ có thể cho kết quả với độ chính xác thấp. Lí do là bởi vì SZZ phụ thuộc vào một giả thuyết không được thẩm định đầy đủ. Cụ thể, SZZ thường coi các dòng mã nguồn được thay đổi ở bản cập nhật sửa lỗi là các câu lệnh gây ra lỗi, và bản cập nhật gần nhất trước bản cập nhật sửa lỗi mà tạo ra thay đổi ở những dòng mã nguồn đó sẽ là bản cập nhật gây lỗi.

2.3. Vấn Đề Kiểm Thử Lỗi Trên Các Phiên Bản Mã Cũ

Không phải bao giờ các ca kiểm thử phát hiện lỗi TCBW cũng tồn tại trước khi lỗi hồi quy xuất hiện để ta có thể thực thi chúng một cách dễ dàng. Trên thực tế, có rất nhiều dự án mã nguồn mở không có TCBW từ trước. Điều này gây khó khăn cho việc xác định chính xác bản cập nhật gây lỗi.

III. Phương Pháp Sửa Lỗi Hồi Quy Tự Động LyFix 53 ký tự

Luận văn đề xuất một phương pháp sửa lỗi java tự động tập trung vào khai thác thông tin từ bản cập nhật gây lỗi. Phương pháp này bao gồm các bước: xác định bản cập nhật gây lỗi, thu thập thông tin mã nguồn thay đổi, và sử dụng thông tin này để lựa chọn và áp dụng các mẫu sửa lỗi phù hợp. Công cụ LyFix được xây dựng để thực hiện phương pháp này. LyFix sử dụng các nguyên liệu sửa lỗi (ví dụ: biểu thức boolean, câu lệnh) được trích xuất từ thông tin thay đổi để áp dụng vào các mẫu sửa lỗi (ví dụ: AddIf, Delete). Thuật toán sửa lỗi được cải tiến từ Relifix để tăng hiệu quả tìm kiếm bản vá chính xác.

3.1. Quy Trình Sửa Lỗi Tự Động Với LyFix

Quy trình sửa lỗi java tự động của LyFix bao gồm xác định bản cập nhật gây lỗi, thu thập thông tin mã nguồn thay đổi, sử dụng thông tin này để lựa chọn và áp dụng các mẫu sửa lỗi phù hợp. Sau đó là kiểm tra mã nguồn và xác nhận có sửa lỗi java thành công không.

3.2. Các Thành Phần Chính Của Phương Pháp Sửa Lỗi

Các thành phần chính của phương pháp sửa lỗi là nguyên liệu sửa lỗi, mẫu sửa lỗi (template-based repair), và thuật toán tìm kiếm bản vá. Nguyên liệu sửa lỗi được thu thập từ thông tin thay đổi của bản cập nhật gây lỗi. Mẫu sửa lỗi định nghĩa các cách thức sửa lỗi khác nhau. Thuật toán tìm kiếm bản vá kết hợp các thành phần này để tạo ra các bản vá ứng cử viên.

3.3. Cải Tiến Độ Chính Xác Nhờ Thông Tin Thay Đổi

Phương pháp sửa lỗi java tự động đề xuất tận dụng thông tin thay đổi của bản cập nhật gây lỗi để cải thiện độ chính xác của phương pháp Fault Localization. Đồng thời, thông tin này cũng giúp lựa chọn các mẫu sửa lỗinguyên liệu sửa lỗi phù hợp, từ đó tăng khả năng sửa lỗi java thành công.

IV. Mẫu Sửa Lỗi Nguyên Liệu Cải Tiến Hiệu Quả 52 ký tự

LyFix kế thừa và mở rộng các mẫu sửa lỗi từ Relifix, đồng thời bổ sung thêm các mẫu sửa lỗi mới được thiết kế đặc biệt cho lỗi hồi quy Java. Các mẫu sửa lỗi bao gồm: Delete, Revert, Swap, Negate, Convert, AddIf, AddCon, AddStmt, AddTryCatch, NullChecker, MutateMI. Các nguyên liệu sửa lỗi (biểu thức boolean, câu lệnh) được thu thập từ thông tin thay đổi của bản cập nhật gây lỗi và được sắp xếp theo độ đo khoảng cách AST để chọn nguyên liệu phù hợp nhất. Việc lựa chọn nguyên liệu sửa lỗi chính xác đóng vai trò quan trọng trong việc tạo ra các bản vá chất lượng.

4.1. Các Mẫu Sửa Lỗi Kế Thừa Từ Relifix

LyFix kế thừa các mẫu sửa lỗi từ Relifix (ví dụ: Delete, Revert, Swap, Negate, Convert, AddIf, AddCon, AddStmt) và điều chỉnh chúng để phù hợp với ngôn ngữ Java. Những mẫu sửa lỗi này được thiết kế để sửa lỗi cho các chương trình C, tuy nhiên trong bài báo không chỉ rõ cách cài đặt và không có công cụ kèm theo được công bố. Do vậy, luận văn này nhằm cài đặt lại tư tưởng các mẫu sửa lỗi của Relifix và áp dụng sửa lỗi và đánh giá phương pháp trên các chương trình Java.

4.2. Ba Mẫu Sửa Lỗi Mới Được Đề Xuất

Luận văn cũng phân tích và điều tra 51 lỗi hồi quy Java từ 3483 lỗi từ hai bộ bộ dữ liệu lỗi chuẩn BugSwarm và Bears. Từ đó, luận văn đề xuất thêm ba mẫu sửa lỗi: NullChecker, AddTryCatch, MutateMI có sử dụng các thông tin thay đổi từ bản cập nhật gây lỗi để sửa lỗi hồi quy cho các chương trình Java.

4.3. Tầm Quan Trọng Của Nguyên Liệu Sửa Lỗi

Việc sửa lỗi có thành công hay không phụ thuộc vào ba yếu tố: vị trí sửa, mẫu sửa lỗi và nguyên liệu sửa lỗi. Vì vậy lựa chọn nguyên liệu sửa lỗi chính xác sẽ quyết định khả năng sửa lỗi java của các mẫu sửa lỗi nói riêng và của công cụ nói chung.

V. Thực Nghiệm Đánh Giá Khả Năng Sửa Lỗi 50 ký tự

Luận văn tiến hành thực nghiệm để đánh giá khả năng sửa lỗi java tự động của LyFix so với jRelifix, jGenProg, jMutRepair và TBar trên tập dữ liệu 51 lỗi hồi quy thực tế từ các hệ thống phần mềm Java mã nguồn mở. Kết quả cho thấy LyFix có thể sinh ra bản vá thành công cho 56.8% lỗi, với tỉ lệ bản vá chính xác là 79.3%. So với các công cụ khác, LyFix cho kết quả tốt hơn, chứng minh hiệu quả của phương pháp đề xuất.

5.1. Bộ Dữ Liệu Lỗi Hồi Quy Được Sử Dụng

Thực nghiệm sử dụng tập dữ liệu 51 lỗi hồi quy thực tế từ các hệ thống phần mềm Java mã nguồn mở. Đây là những lỗi hồi quy thực tế từ những hệ thống phần mềm mã nguồn mở được phát triển và kiểm thử tốt.

5.2. So Sánh LyFix Với Các Công Cụ APR Khác

Luận văn tiến hành thực nghiệm đánh giá khả năng sửa lỗi java của LyFix so với jRelifix (là công cụ sửa lỗi phiên bản Java mà luận văn đã cài đặt lại giống với phương pháp sửa lỗi đề xuất trong [42]), jGenProg, jMutRepair và TBar trên tập dữ liệu 51 lỗi hồi quy.

5.3. Kết Quả Thực Nghiệm Thảo Luận Chi Tiết

Kết quả cho thấy LyFix có thể sinh ra bản vá thành công cho 56.8% lỗi có trong tập dữ liệu và tỉ lệ số bản vá chính xác là 79.3% trong khi các công cụ khác sửa lỗi tốt nhất (TBar) với kết quả sinh được bản vá 33.3% lỗi và tỉ lệ bản vá đúng là 41.

VI. Kết Luận Hướng Phát Triển Trong Tương Lai 55 ký tự

Luận văn đã đề xuất và triển khai một phương pháp sửa lỗi java tự động hiệu quả cho các lỗi hồi quy. Công cụ LyFix, với các mẫu sửa lỗinguyên liệu sửa lỗi được thiết kế đặc biệt, đã chứng minh khả năng sửa lỗi java tốt hơn so với các công cụ hiện có. Trong tương lai, có thể cải tiến LyFix bằng cách tích hợp các kỹ thuật xác định bản cập nhật gây lỗi tự động hoàn toàn, mở rộng bộ mẫu sửa lỗi, và áp dụng các phương pháp học máy để nâng cao hiệu quả sửa lỗi java.

6.1. Tóm Tắt Các Đóng Góp Chính Của Luận Văn

Các đóng góp chính của luận văn bao gồm: phương pháp bán tự động để xác định bản cập nhật gây lỗi, cài đặt và công bố miễn phí công cụ LyFix, đề xuất ba mẫu sửa lỗi hồi quy mới cho Java, và thực nghiệm đánh giá khả năng sửa lỗi java của LyFix.

6.2. Các Hướng Nghiên Cứu Tiềm Năng Để Cải Tiến APR

Trong tương lai, có thể cải tiến LyFix bằng cách tích hợp các kỹ thuật xác định bản cập nhật gây lỗi tự động hoàn toàn, mở rộng bộ mẫu sửa lỗi, và áp dụng các phương pháp học máy để nâng cao hiệu quả sửa lỗi java.

6.3. Ứng Dụng Thực Tiễn Tiềm Năng Phát Triển

Công cụ LyFix có tiềm năng ứng dụng rộng rãi trong quá trình phát triển phần mềm Java, giúp giảm chi phí và thời gian gỡ lỗi. Việc tiếp tục nghiên cứu và phát triển APR sẽ đóng góp quan trọng vào việc nâng cao chất lượng phần mềm.

02/10/2025

Trích đoạn nội dung tài liệu

Chương 1. Giới thiệu 3 dụng mã nguồn mở. Bears bao gồm 251 lỗi được thu thập thủ công từ các ứng dụng mã nguồn mở với mục đích phục vụ cho các công cụ APR. • Luận văn cài đặt và công bố miễn phí công cụ kèm theo LyFix4 , bao gồm: – Đề xuất và cài đặt công thức xác định vị trí gây lỗi phù hợp cho đối tượng là lỗi hồi quy – Cài đặt lại tám mẫu sửa lỗi dựa trên tư tưởng sửa lỗi hồi quy cho chương trình C ở [42] – Đề xuất và cài đặt ba mẫu sửa lỗi hồi quy mới cho Java (mở rộng dựa trên [36] và học từ bộ dữ liệu 51 lỗi quy đã thu thập) – Đề xuất và cài đặt thuật toán cải tiến từ thuật toán sửa lỗi của [42] để sinh được nhiều bản vá hơn và các bản vá có chất lượng tốt hơn • Luận văn tiến hành thực nghiệm đánh giá khả năng sửa lỗi của LyFix so với jRelifix (là công cụ sửa lỗi phiên bản Java mà luận văn đã cài đặt lại giống với phương pháp sửa lỗi đề xuất trong [42]), jGenProg, jMutRepair và TBar trên tập dữ liệu 51 lỗi hồi quy.

Đây là những lỗi hồi quy thực tế từ những hệ thống phần mềm mã nguồn mở được phát triển và kiểm thử tốt.3 Bố cục luận văn Các phần còn lại của luận văn được cấu trúc như sau. Chương 2 cung cấp các kiến thức nền tảng về tính chất của lỗi hồi quy và sửa lỗi tự động. Chương 3 mô tả phương pháp sửa lỗi đề xuất, bao gồm các bước: xác định bản cập nhật gây ra lỗi, thu thập thông tin mã nguồn nguồn thay đổi và nguyên liệu sửa lỗi, xác định vị trí gây ra lỗi, các mẫu sửa lỗi và thuật toán sửa lỗi. Chương 4 mô tả về kiến trúc và cài đặt công cụ, các kết quả thực nghiệm đánh giá về khả năng sửa lỗi hồi quy của phương pháp đề xuất được tiến hành và bàn luận.

Cuối cùng, Chương 5 kết luận lại toàn bộ công việc luận văn đã thực hiện, kèm theo các công việc tiếp theo có thể thực hiện để cải tiến và mở rộng công cụ.com/bqcuong/lyfix download by : skknchat@gmail.com 4 Chương 2 Kiến thức nền tảng Chương này cung cấp các kiến thức nền tảng cho luận văn. Đầu tiên, kiến thức kiểm thử hồi quy sẽ được giới thiệu một cách tổng quan. Tiếp theo, kiến thức về sửa lỗi chương trình tự động sẽ được trình bày, bao gồm: tổng quan, xác định vị trí gây ra lỗi, và các phương pháp sửa lỗi tự động phổ biến hiện nay.1 Kiểm thử hồi quy và lỗi hồi quy Các hệ thống phần mềm thay đổi không ngừng theo thời gian. Khi có một thay đổi mới được thêm vào mã nguồn, thay đổi này có thể phá hỏng các chức năng khác của chương trình mà trước đó hoạt động bình thường.

Kiểm thử hồi quy (regression testing) là một kỹ thuật được sử dụng để phát hiện các lỗi khi chương trình thay đổi. Kiểm thử hồi quy có thể áp dụng ở tất các mức kiểm thử: đơn vị, tích hợp, hệ thống, và chấp nhận [16]. Lỗi được phát hiện nhờ vào kiểm thử hồi quy gọi là lỗi hồi quy. Lỗi hồi quy được chia thành ba loại1 : • Local: Thay đổi mới gây ra lỗi, làm các chức năng tồn tại từ trước không hoạt động đúng như mong muốn nữa.

Cách sửa là khôi phục lại phần mã nguồn gây ra lỗi này.com/regression-testing/types.asp download by : skknchat@gmail.com Chương 2. Kiến thức nền tảng 5 • Unmasking: Thay đổi mới khiến luồng thực thi chương trình đi vào những câu lệnh gây ra những lỗi đã có từ trước. Cách sửa là thêm hoặc cập nhật lại các câu lệnh điều kiện để giúp luồng thực thi chương trình không còn đi vào các câu lệnh gây lỗi nữa. • Remote: Những thay đổi mới tạo ra các lỗi ở những phần mã nguồn khác trong chương trình.

Để sửa những lỗi này, ta buộc phải cập nhật lại mã nguồn ở những vị trí có lỗi cho phù hợp với thay đổi hoặc ta cần phải tạo ra các câu lệnh điều kiện để luồng thực thi chương trình không đi vào những câu lệnh gây lỗi đối với một số trạng thái nhất định. Kiến thức về thông tin, tính chất của các loại lỗi hồi quy sẽ giúp luận văn này phát triển kỹ thuật xác định vị trí lỗi, lựa chọn được các nguyên liệu sửa lỗi phù hợp, và thiết kế được các mẫu sửa lỗi tốt hơn. Kiến thức về các kỹ thuật kiểm thử hồi quy giúp luận văn thiết kế thuật toán, lựa chọn bộ ca kiểm thử rút gọn để tiết kiệm thời gian thẩm định bản vá.1: Các chiến lược kiểm thử hồi quy Hình 2.1 mô tả các chiến lược phổ biến được sử dụng để thực hiện kiểm thử hồi quy hiện nay. Trong thực tế, người ta chỉ thực thi một phần của bộ ca kiểm thử để thực hiện kiểm thử hồi quy.

Thử thách lớn nhất là cần thực thi lựa chọn đúng những ca kiểm thử có thể giúp đánh giá tốt nhất cho những phần mã nguồn thay đổi. Thực thi lại toàn bộ ca kiểm thử (Retest All) chỉ khả thi cho những dự án nhỏ. Trong những dự án có quy mô lớn, việc thực thi lại toàn bộ ca kiểm thử hầu như là download by : skknchat@gmail.com Chương 2. Kiến thức nền tảng 6 điều không thể bởi vì nó tốn rất nhiều thời gian và có thể làm chậm quá trình phát hành sản phẩm tới khách hàng.

Giảm thiểu bộ ca kiểm thử (Test Suite Minimization - TSM): Trong những hệ thống phần mềm quy mô lớn, bộ ca kiểm thử cho những hệ thống này thường rất đồ sộ, và luôn được cập nhật thêm mới các ca kiểm thử mỗi khi trải qua một bản phát triển mới. Việc thêm các ca kiểm thử mới có thể khiến những ca kiểm thử khác trở nên dư thừa bởi vì chức năng ca kiểm thử cũ có thể cũng đã được kiểm tra bởi những ca kiểm thử mới. Loại bỏ những ca kiểm thử dư thừa này không làm ảnh hướng tới độ phủ của bộ kiểm thử [41]. Các kỹ thuật TSM nhắm tới mục tiêu xác định và loại bỏ những ca kiểm thử dư thừa này ra khỏi bộ ca kiểm thử.

Một số nghiên cứu đã được đề xuất có kết quả tốt như là [25, 47, 15]. Lựa chọn ca kiểm thử (Test Case Selection): Có tên gọi khác là Regression Test Selection - RTS. Các kỹ thuật RTS giống với các kỹ thuật TSM là đều lựa chọn một tập ca kiểm thử con và chỉ thực hiện kiểm thử hồi quy trên tập đó. Điểm khác biệt chính giữa hai loại kỹ thuật này là RTS lựa chọn ca kiểm thư dựa vào các thay đổi của hệ thống được kiểm thử (System Under Test - SUT) còn TSM thì không.

Các kỹ thuật TSM thường lựa chọn ca kiểm thử dựa vào các chỉ số như độ phủ kiểm thử được đo từ một phiên bản nhất định của SUT. Ngược lại, RTS lựa chọn các ca kiểm thử dựa trên sự liên quan của chúng so với thay đổi giữa hai phiên bản của nguồn của SUT. Có nhiều nghiên cứu tập trung đã vào đề xuất các kỹ thuật RTS [39], [52], [53]. Ưu tiên ca kiểm thử (Test Case Prioritization - TCP): Các kỹ thuật TCP không lựa chọn một tập các ca kiểm thử còn mà tập trung vào việc sắp xếp độ ưu tiên thực thi của các kiểm thử theo một thứ tự dựa vào một số tiêu chí nào đó để có thể tìm được lỗi nhanh nhất.

Điều này giúp cho các kiểm thử viên có thể tối đa tỷ lệ có thể tìm được lỗi sớm của bộ kiểm thử. Các kỹ thuật TCP có thể chia làm ba nhóm chính dựa trên các mức điều khiển, câu lệnh, và hàm của chương trình [38]. Một số nghiên cứu đề xuất các kỹ thuật TCP là [26], [22], [23]. download by : skknchat@gmail.com Chương 2.

Kiến thức nền tảng 7 2.2 Sửa lỗi chương trình tự động Sửa lỗi chương trình là một trong các bước của công việc gỡ lỗi chương trình cũng như vòng đời của lỗi chương trình, bao gồm: Nhận diện lỗi - Nhận diện sự tồn tại của lỗi trong chương trình, quan sát các dấu hiện của lỗi để phục vụ cho các bước sau; Xác định vị trí gây ra lỗi - Thường là bước khó nhất, mục tiêu là để xác định xem phần nào của chương trình gây ra lỗi, cụ thể nhất là ở dòng nào; Sửa lỗi - Xác định cách giải quyết lỗi như thế nào, sau đó đề xuất bản vá và thẩm định lại bản vá.2: Các bước tiêu chuẩn trong các kỹ thuật APR hiện nay [27] Sửa lỗi chương trình tự động nhắm tới mục đích tự động hóa quá trình gỡ lỗi, giảm nhu cầu về sự can thiệp của con người trong công việc này. Các kỹ thuật APR hiện tại thường gồm ba bước chính để thực hiện nhiệm vụ sửa lỗi một hoàn chỉnh như mô tả ở Hình 2.2: Xác định vị trí gây ra lỗi → Sinh và đề xuất bản vá → Thẩm định bản vá. Tương tự ở quá trình gỡ lỗi tự nhiên của con người, mô-đun xác định vị trí gây lỗi ở APR cũng nhằm mục đích xác định các phần mã nguồn nghi ngờ gây ra lỗi (ở mức dòng, phương thức, hoặc tệp). Mô-đun sinh bản vá sẽ cố gắng sửa lỗi bằng cách tạo ra nhiều bản vá ứng cử viên nhờ việc biến đổi mã nguồn có lỗi theo phương pháp đề xuất (cú pháp, ngữ nghĩa, hướng dữ liệu, v.

Những bản vá ứng cử viên này sẽ được mô-đun thẩm định bản vá kiểm tra xem có thực sự sửa lỗi thành công hay không thông qua việc thực hiện đánh giá chương trình đã được vá lỗi theo một đặc tả cho trước (bộ ca kiểm thử, đặc tả hình thức, v. Kết quả cuối cùng sẽ là một danh sách bản vá lỗi được đề xuất cho người dùng mà có thể sử dụng để sửa lỗi chương trình ban đầu. Từ đầu những năm 2000, đã có rất nhiều nghiên cứu được thực hiện nhằm đề xuất các giải pháp phát hiện lỗi trong phần mềm [3, 6, 40] và xác định vị trí gây ra download by : skknchat@gmail.com Chương 2. Kiến thức nền tảng 8 lỗi [37, 18, 19].

Các nghiên cứu cho việc tự động sửa lỗi xuất hiện theo sau với một số lượng bài báo còn hạn chế. Tuy nhiên, kể từ khi Weimer và cộng sự giới thiệu một phương pháp sửa lỗi mới dựa trên tư tưởng lập trình di truyền [45] vào năm 2009, APR đã phát triển rất mạnh mẽ và trở thành một hướng nghiên cứu hẹp thiết yếu đối với lĩnh vực công nghệ phần mềm.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ