ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Bùi Quang Cường PHƯƠNG PHÁP TỰ ĐỘNG SỬA LỖI CHO CÁC CHƯƠNG TRÌNH JAVA LUẬN VĂN THẠC SĨ Ngành: Khoa học máy tính HÀ NỘI - 2020 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Bùi Quang Cường PHƯƠNG PHÁP TỰ ĐỘNG SỬA LỖI CHO CÁC CHƯƠNG TRÌNH JAVA Ngành: Khoa học máy tính Chuyên ngành: Khoa học máy tính Mã số: 60 48 01 01 LUẬN VĂN THẠC SĨ NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS. Phạm Ngọc Hùng HÀ NỘI - 2020 VIETNAM NATIONAL UNIVERSITY, HA NOI UNIVERSITY OF ENGINEERING AND TECHNOLOGY Bui Quang Cuong A METHOD FOR AUTOMATED REPAIR OF ERRORS FOR JAVA PROGRAMS MASTER THESIS OF COMPUTER SCIENCE Major: Computer Science Supervisor: Assoc. Pham Ngoc Hung HANOI - 2020 i LỜI CAM ĐOAN Tôi xin cam đoan rằng những nghiên cứu về phương pháp tự động sửa lỗi cho các chương trình Java được trình bày trong luận văn này là của tôi và chưa từng được nộp như một báo cáo luận văn tại trường Đại học Công nghệ - ĐHQGHN hoặc bất kỳ trường đại học khác. Những gì tôi viết ra không sao chép từ các tài liệu, không sử dụng các kết quả của người khác mà không trích dẫn cụ thể. Tôi xin cam đoan công cụ tự động sửa lỗi cho các chương trình Java tôi trình bày trong luận văn là do tôi tự phát triển, không sao chép mã nguồn của người khác. Nếu sai tôi hoàn toàn chịu trách nhiệm theo quy định của trường Đại học Công nghệ - ĐHQGHN. Hà Nội, ngày 15 tháng 08 năm 2020 Học viên cao học Bùi Quang Cường ii TÓM TẮT Các hệ thống phần mềm luôn không ngừng phát triển theo lẽ tự nhiên để đáp ứng nhu cầu thay đổi liên tục từ khách hàng và thị trường. Tuy nhiên, những thay đổi này có thể gây ra các lỗi khiến cho những chức năng đã có của chương trình không hoạt động đúng. Những lỗi như thế này được gọi là lỗi hồi quy. Sửa lỗi tự động (Automated Program Repair - APR) gần đây đã cho thấy được tiềm năng lớn trong việc tự động sửa các lỗi của phần mềm. Mặc dù với sự phát triển mạnh mẽ của APR, chỉ có một số kỹ thuật tập trung xử lý các lỗi hồi quy. Tuy nhiên, các kỹ thuật chưa thực sự khai thác đầy đủ thông tin có sẵn trong lịch sử phát triển của các phần mềm (ví dụ: bản cập nhật gây ra lỗi, v.) để sửa lỗi hồi quy. Hơn nữa, những kỹ thuật này không công bố công cụ cài đặt cho cộng đồng hoặc công cụ rất hạn chế và khó có thể sử dụng để sửa lỗi trong thực tế. Luận văn này nhằm mục đích đề xuất phương pháp sửa lỗi hồi quy cho các chương trình Java bằng cách khai thác và mở rộng những phát hiện gần đây về lỗi hồi quy, ví dụ: mối tương quan giữa các bản cập nhật tạo ra lỗi và sửa lỗi. Luận văn cài đặt lại và cải tiến phương pháp sửa lỗi hồi quy tự động cho các chương trình C (Relifix). Từ đó, xây dựng một hệ thống có tên là LyFix, cho phép người dùng sửa lỗi hồi quy Java tự động bằng cách tận dụng các nguyên liệu sửa lỗi và các mẫu sửa lỗi cụ thể học được từ lịch sử phát triển phần mềm. Tám mẫu sửa lỗi hồi quy, thuật toán sửa lỗi đã được cài đặt lại dựa vào ý tưởng của Relifix. Ngoài ra, luận văn cài đặt thêm ba mẫu sửa lỗi hồi quy mới cho Java. Luận văn cũng thực hiện thực nghiệm để so sánh khả năng sửa lỗi của LyFix đối với jRelifix (bản cài đặt Relifix cho Java) và các công cụ sửa lỗi tự động tốt nhất hiện nay (jGenProg, jMutRepair, TBar) trên tập dữ liệu 51 lỗi hồi quy thực tế của 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 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. Từ khóa: tự động sửa lỗi chương trình, lỗi hồi quy, lịch sử phát triển phần mềm iii LỜI CẢM ƠN Đầu tiên và quan trọng nhất, tôi xin gửi lời cảm ơn trân trọng và sâu sắc tới PGS. Phạm Ngọc Hùng - người Thầy giáo đã trực tiếp hướng dẫn tận tình và đóng góp những ý kiến quý báu trong quá trình tôi học tập, nghiên cứu và cả kinh nghiệm cuộc sống từ những năm tháng tôi còn là sinh viên tại trường Đại học Công nghệ cho đến nay. Thầy đã không ngần ngại cho phép và hỗ trợ tôi tự lựa chọn đề tài để thực hiện luận văn này. Tôi xin được gửi lời cảm ơn chân thành tới TS. Bách Lê, TS. Lê Quang Lộc, và PGS. Corina Pasareanu đã hướng dẫn và hỗ trợ tôi rất nhiệt tình trong quá trình thực hiện luận văn này. Các anh và cô luôn động viên tôi và đưa ra những câu trả lời và gợi ý ngay lập tức mỗi khi tôi gặp khó khăn. Các anh và cô cũng chia sẻ rất nhiều kinh nghiệm quý báu trong nghiên cứu và cuộc sống và tôi đã học được nhiều điều từ các anh. Xin được cảm ơn ban tổ chức chương trình Google Summer of Code 2020 và Java PathFinder Team đã cho phép tài trợ kinh phí để tôi thực hiện đề tài trong luận văn này. Công trình này cũng được tài trợ một phần từ đề tài KHCN cấp ĐHQGHN, Mã số đề tài: QG. Cuối cùng, tôi xin được cảm ơn những lời động viên từ gia đình, người thân, bạn bè để giúp tôi luôn vững bước trong con đường tương lai. iv Mục lục 1 Giới thiệu 1 1.3 Bố cục luận văn . 3 2 Kiến thức nền tảng 4 2.1 Kiểm thử hồi quy và lỗi hồi quy .2 Sửa lỗi chương trình tự động .1 Xác định vị trí gây ra lỗi .2 Các phương pháp sửa lỗi tự động hiện nay . 12 3 Phương pháp sửa tự động lỗi hồi quy 16 3.1 Tổng quan phương pháp .2 Xác định bản cập nhật gây ra lỗi .3 Thu thập thông tin mã nguồn thay đổi và nguyên liệu sửa lỗi .4 Các mẫu sửa lỗi .5 Xác định vị trí gây lỗi .6 Thuật toán sửa lỗi . 34 4 Cài đặt công cụ và thực nghiệm 40 4.1 Cài đặt công cụ .1 Phương pháp thực nghiệm .2 Kết quả thực nghiệm và thảo luận . 46 5 Kết luận 52 A Danh sách các mẫu sửa lỗi 54 Tài liệu tham khảo 60 vi Danh sách hình vẽ 2.1 Các chiến lược kiểm thử hồi quy .2 Các bước tiêu chuẩn trong các kỹ thuật APR hiện nay [27] .3 Số lượng công bố mỗi năm về APR từ 1996 - 2019 .4 Tổng quan về xác định vị trí gây lỗi dựa trên phổ chương trình .5 Tổng quan về các kỹ thuật sửa lỗi [14] .1 Tổng quan phương pháp sửa tự động lỗi hồi quy .2 Các bản cập nhật gây ra lỗi và sửa lỗi của Closure 31 [21] .3 Ví dụ minh họa tính độ đo giữa nguyên liệu sửa lỗi và câu lệnh nghi ngờ lỗi .1 Kiến trúc công cụ sửa lỗi tự động LyFix . 41 vii Danh sách bảng 3.1 Nguyên liệu sửa lỗi và mẫu sửa lỗi sử dụng .2 Các mẫu sửa lỗi đã cài đặt .1 Thống kê các chỉ số của bộ dữ liệu lỗi hồi quy .2 Thống kê số lượng các hành động sửa lỗi của bộ dữ liệu lỗi hồi quy .3 Kết quả sửa lỗi trên tập dữ liệu lỗi hồi quy . 47 viii Danh sách từ viết tắt và thuật ngữ APR Automated Program Repair - Sửa lỗi chương trình tự động AST Abstract Syntax Tree - Cây cú pháp trừu tượng FL Fault Localization - Xác định vị trí gây lỗi SUT System Under Test - Hệ thống được kiểm thử RTS Regression Test Selection - Lựa chọn ca kiểm thử hồi quy TSM Test Suite Minimization - Giảm thiểu bộ ca kiểm thử TCP Test Case Prioritization - Ưu tiên ca kiểm thử BWTC Bug-witnessing Test Case - Ca kiểm thử phát hiện lỗi BIC Bug-inducing Commit - Bản cập nhật gây lỗi BFC Bug-fixing Commit - Bản cập nhật sửa lỗi RT Repair Templates - Các mẫu sửa lỗi, mỗi mẫu thực hiện một tập các hành động thay đổi mã nguồn để sửa lỗi FI Fix Ingredients - Các nguyên liệu sửa lỗi, là những thành phần mã nguồn có thể sử dụng làm tham số cho các mẫu sửa lỗi 1 Chương 1 Giới thiệu 1.1 Mở đầu Các hệ thống phần mềm phát triển và tiến hóa không ngừng như một lẽ tự nhiên để bắt kịp nhu cầu thay đổi liên tục từ phía khách hàng và thị trường. Quá trình phát triển phần mềm là một quá trình gia tăng, thường mang theo các tính năng mới được cài đặt để đáp ứng các yêu cầu thay đổi của người dùng. Tuy nhiên, những tính năng được thêm mới này có thể làm hỏng các chức năng hiện tại của hệ thống phần mềm và do đó gây ra lỗi mới. Những lỗi này thường được gọi là lỗi hồi quy. Lỗi hồi quy rất phổ biến trong các hệ thống phần mềm hiện nay và vẫn đang là một thách thức lớn trong ngành công nghiệp phát triển phần mềm [35, 11]. Xác định và sửa lỗi hồi quy là một hoạt động bắt buộc trong các vòng lặp bảo trì phần mềm [39]. Những nghiên cứu từ trước đến nay tập trung chủ yếu vào việc hỗ trợ phát hiện và xác định lỗi hồi quy [39, 52, 26, 22]. Trong khi đó, sửa lỗi hồi quy vẫn đang phụ thuộc lớn vào con người để gỡ và sửa lỗi một cách thủ công, khiến công việc này tiêu tốn thời gian và rủi ro. Ví dụ, người ta đã ước tính rằng các lập trình viên cần tới 8,5 năm để sửa một lỗi hồi quy [4]. Sửa lỗi tự động (Automated Program Repair - APR), bao gồm các pha xác định vị trí gây ra lỗi và sửa lỗi mới xuất hiện gần đây để giúp giải quyết vấn đề này. APR tập trung vào việc tự động quá trình gỡ lỗi phần mềm, từ đó giúp giảm bớt hoặc thậm chí loại bỏ sự can thiệp của con người vào quá trình sửa lỗi. Các nghiên cứu Chương 1. Giới thiệu 2 về APR gần đây đã đạt được một số thành công đáng kể và đóng góp cho ngành nhiều kỹ thuật sửa lỗi tốt [45, 17, 12]. Facebook gần đây đã công bố công cụ sửa lỗi tự động lần đầu tiên, được sử dụng rộng để sửa lỗi cho toàn bộ hệ thống mã nguồn lõi mà Facebook đang vận hành [2]. Điều này khẳng định APR đang là một hướng nghiên cứu mang lại nhiều đóng góp lớn cho lĩnh vực phát triển phần mềm.
Tổng quan nghiên cứu
Trong bối cảnh phát triển phần mềm hiện đại, các hệ thống phần mềm luôn phải liên tục cập nhật để đáp ứng nhu cầu thay đổi từ khách hàng và thị trường. Tuy nhiên, quá trình này thường dẫn đến sự xuất hiện của các lỗi hồi quy – những lỗi làm suy giảm hoặc phá hỏng các chức năng đã hoạt động ổn định trước đó. Theo ước tính, các lập trình viên có thể mất tới 8,5 năm để sửa một lỗi hồi quy, gây tốn kém thời gian và nguồn lực đáng kể. Sửa lỗi tự động (Automated Program Repair - APR) đã nổi lên như một giải pháp tiềm năng nhằm giảm thiểu sự can thiệp thủ công trong quá trình sửa lỗi, đặc biệt là đối với các lỗi hồi quy.
Luận văn tập trung nghiên cứu phương pháp sửa lỗi hồi quy 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. Mục tiêu chính là khai thác và mở rộng các phát hiện gần đây về lỗi hồi quy, đặc biệt là mối tương quan giữa các bản cập nhật gây lỗi và bản cập nhật sửa lỗi, nhằm nâng cao hiệu quả sửa lỗi tự động. Phạm vi nghiên cứu bao gồm phân tích 51 lỗi hồi quy thực tế được trích xuất từ hai bộ dữ liệu lỗi chuẩn BugSwarm và Bears, cùng với việc phát triển công cụ LyFix để thực hiện sửa lỗi tự động trên các chương trình Java.
Ý nghĩa của nghiên cứu được thể hiện qua việc cải thiện tỷ lệ sửa lỗi thành công lên đến 56.8% với tỷ lệ bản vá chính xác đạt 79.3%, vượt trội so với các công cụ sửa lỗi tự động hiện có như TBar (33.3% và 41%). Điều này không chỉ góp phần nâng cao chất lượng phần mềm mà còn giảm thiểu chi phí và thời gian bảo trì trong thực tế phát triển phần mềm.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết áp dụng
Luận văn dựa trên hai khung lý thuyết chính:
-
Kiểm thử hồi quy và lỗi hồi quy: Kiểm thử hồi quy là kỹ thuật nhằm phát hiện các lỗi phát sinh do thay đổi mã nguồn, trong đó lỗi hồi quy được phân loại thành ba loại: Local, Unmasking và Remote. Kiến thức về đặc tính lỗi hồi quy giúp thiết kế các mẫu sửa lỗi và thuật toán xác định vị trí lỗi hiệu quả.
-
Sửa lỗi chương trình tự động (APR): APR bao gồm ba bước chính: xác định vị trí gây lỗi, sinh và đề xuất bản vá, thẩm định bản vá. Luận văn áp dụng phương pháp sửa lỗi dựa trên mẫu sửa lỗi (template-based repair), một nhánh của phương pháp phỏng đoán (heuristic-based), sử dụng các mẫu sửa lỗi và nguyên liệu sửa lỗi được học từ lịch sử phát triển phần mềm.
Các khái niệm chuyên ngành quan trọng bao gồm:
- Bản cập nhật gây lỗi (Bug-inducing Commit - BIC): Bản cập nhật làm xuất hiện lỗi hồi quy.
- Bản cập nhật sửa lỗi (Bug-fixing Commit - BFC): Bản cập nhật sửa lỗi hồi quy.
- Nguyên liệu sửa lỗi (Fix Ingredients): Thành phần mã nguồn dùng làm tham số cho các mẫu sửa lỗi.
- Mẫu sửa lỗi (Repair Templates): Các hành động thay đổi mã nguồn cụ thể để sửa lỗi.
- Độ nghi ngờ (Suspiciousness): Chỉ số đánh giá khả năng gây lỗi của câu lệnh, được tính dựa trên phổ chương trình và cải tiến theo đặc thù lỗi hồi quy.
Phương pháp nghiên cứu
Nguồn dữ liệu chính gồm 51 lỗi hồi quy thực tế được trích xuất từ hai bộ dữ liệu lỗi chuẩn BugSwarm (3232 lỗi tự động thu thập) và Bears (251 lỗi thu thập thủ công). Phương pháp nghiên cứu bao gồm:
- Xác định bản cập nhật gây lỗi: Sử dụng phương pháp bán tự động dựa trên thực thi bộ ca kiểm thử phát hiện lỗi (TCBW) qua các phiên bản lịch sử, kết hợp tìm kiếm nhị phân để giảm thời gian duyệt lịch sử.
- Thu thập thông tin mã nguồn thay đổi và nguyên liệu sửa lỗi: Áp dụng công cụ Gumtree Spoon AST Diff để phân tích thay đổi mã nguồn ở cấp độ cây cú pháp trừu tượng (AST), thu thập các nguyên liệu sửa lỗi đa dạng như biểu thức boolean, câu lệnh, biến, lời gọi phương thức.
- Xác định vị trí gây lỗi: Sử dụng kỹ thuật xác định vị trí lỗi dựa trên phổ chương trình với công thức Ochiai, đồng thời cải tiến bằng cách tăng độ nghi ngờ cho các vị trí thay đổi trong bản cập nhật sửa lỗi.
- Mẫu sửa lỗi: Cài đặt 11 mẫu sửa lỗi, trong đó 8 mẫu kế thừa từ Relifix (cho chương trình C) và 3 mẫu mới mở rộng cho Java, bao gồm các hành động như xóa câu lệnh, khôi phục, hoán đổi, phủ định điều kiện, thêm câu lệnh kiểm tra điều kiện, kiểm tra null, thêm khối try/catch, cập nhật lời gọi phương thức.
- Thuật toán sửa lỗi: Thuật toán cải tiến từ Relifix, duyệt qua các vị trí nghi ngờ theo thứ tự độ nghi ngờ giảm dần, áp dụng các mẫu sửa lỗi với nguyên liệu sửa lỗi được sắp xếp theo độ đo khoảng cách AST đến vị trí lỗi, thẩm định bản vá qua hai lần kiểm thử (bộ ca kiểm thử rút gọn và toàn bộ bộ ca kiểm thử), cho phép sinh nhiều bản vá ứng viên để tăng khả năng tìm được bản vá chính xác.
Thời gian nghiên cứu tập trung vào giai đoạn 2019-2020, tại Đại học Công nghệ - Đại học Quốc gia Hà Nội, với việc phát triển và thử nghiệm công cụ LyFix trên các dự án mã nguồn mở Java.
Kết quả nghiên cứu và thảo luận
Những phát hiện chính
- Tỷ lệ sửa lỗi thành công của LyFix đạt 56.8% trên tập dữ liệu 51 lỗi hồi quy, cao hơn đáng kể so với các công cụ sửa lỗi tự động hiện có như TBar (33.3%), jRelifix, jGenProg, và jMutRepair.
- Tỷ lệ bản vá chính xác (correct patch) của LyFix đạt 79.3%, trong khi TBar chỉ đạt 41%, cho thấy LyFix không chỉ sinh được nhiều bản vá mà còn có chất lượng bản vá cao hơn.
- Việc khai thác nguyên liệu sửa lỗi từ bản cập nhật gây lỗi và sử dụng các mẫu sửa lỗi đặc thù cho lỗi hồi quy giúp tăng hiệu quả sửa lỗi, đặc biệt đối với các lỗi hồi quy loại Local và Unmasking.
- Thuật toán sửa lỗi cải tiến với cơ chế sắp xếp nguyên liệu theo khoảng cách AST và tập tabu riêng cho từng vị trí lỗi giúp tăng số lượng bản vá ứng viên và giảm thiểu lỗi biên dịch, từ đó nâng cao khả năng tìm được bản vá đúng.
Thảo luận kết quả
Kết quả thực nghiệm cho thấy việc tận dụng thông tin lịch sử phát triển phần mềm, đặc biệt là các bản cập nhật gây lỗi, là yếu tố then chốt giúp LyFix vượt trội so với các công cụ APR truyền thống. Việc mở rộng và cài đặt các mẫu sửa lỗi mới phù hợp với đặc thù ngôn ngữ Java cũng góp phần nâng cao hiệu quả sửa lỗi. So với các nghiên cứu trước đây tập trung chủ yếu vào ngôn ngữ C hoặc chưa khai thác đầy đủ lịch sử phát triển, luận văn đã chứng minh được tính khả thi và hiệu quả của phương pháp sửa lỗi hồi quy tự động cho Java.
Dữ liệu có thể được trình bày qua biểu đồ so sánh tỷ lệ sửa lỗi thành công và tỷ lệ bản vá chính xác giữa LyFix và các công cụ khác, cũng như bảng thống kê chi tiết các lỗi được sửa thành công theo từng loại lỗi hồi quy. Điều này giúp minh họa rõ ràng sự vượt trội của phương pháp đề xuất.
Đề xuất và khuyến nghị
- Triển khai công cụ LyFix trong quy trình phát triển phần mềm Java tại các doanh nghiệp và dự án mã nguồn mở nhằm tự động hóa việc sửa lỗi hồi quy, giảm thiểu thời gian và chi phí bảo trì. Thời gian áp dụng: 6-12 tháng; Chủ thể thực hiện: các nhóm phát triển phần mềm, bộ phận QA.
- Mở rộng bộ mẫu sửa lỗi và nguyên liệu sửa lỗi dựa trên phân tích sâu hơn các lỗi hồi quy trong các dự án thực tế để nâng cao khả năng sửa lỗi cho các loại lỗi phức tạp hơn. Thời gian: 12-18 tháng; Chủ thể: nhóm nghiên cứu và phát triển công cụ.
- Tích hợp LyFix với các hệ thống kiểm thử hồi quy hiện có, đặc biệt là các kỹ thuật lựa chọn và ưu tiên ca kiểm thử (RTS, TCP) để tối ưu hóa quá trình thẩm định bản vá, giảm thiểu thời gian chạy kiểm thử. Thời gian: 6 tháng; Chủ thể: nhóm phát triển công cụ và QA.
- Phát triển giao diện người dùng thân thiện và tài liệu hướng dẫn chi tiết cho LyFix nhằm hỗ trợ cộng đồng lập trình viên dễ dàng áp dụng công cụ trong thực tế. Thời gian: 3-6 tháng; Chủ thể: nhóm phát triển phần mềm và truyền thông.
Đối tượng nên tham khảo luận văn
- Nhà nghiên cứu và sinh viên ngành Khoa học máy tính, đặc biệt lĩnh vực phát triển phần mềm và kiểm thử tự động: Nghiên cứu cung cấp kiến thức sâu về sửa lỗi tự động và lỗi hồi quy, đồng thời giới thiệu thuật toán và công cụ thực nghiệm.
- Các kỹ sư phát triển phần mềm và QA tại các doanh nghiệp công nghệ: Áp dụng phương pháp và công cụ LyFix để nâng cao hiệu quả phát hiện và sửa lỗi hồi quy trong quy trình phát triển phần mềm.
- Nhóm phát triển công cụ kiểm thử và sửa lỗi tự động: Tham khảo các kỹ thuật xác định vị trí lỗi, thu thập nguyên liệu sửa lỗi và thiết kế mẫu sửa lỗi đặc thù cho Java để cải tiến công cụ hiện có.
- Cộng đồng mã nguồn mở và các dự án phần mềm Java: Sử dụng công cụ LyFix để tự động hóa việc sửa lỗi hồi quy, tăng tính ổn định và chất lượng phần mềm, đồng thời đóng góp cải tiến cho công cụ mã nguồn mở.
Câu hỏi thường gặp
-
Lỗi hồi quy là gì và tại sao nó quan trọng trong phát triển phần mềm?
Lỗi hồi quy là lỗi phát sinh khi một thay đổi mới làm hỏng chức năng đã hoạt động trước đó. Nó quan trọng vì gây ảnh hưởng đến chất lượng phần mềm và chi phí bảo trì, đặc biệt trong các dự án lớn và liên tục cập nhật. -
Phương pháp sửa lỗi tự động dựa trên mẫu sửa lỗi hoạt động như thế nào?
Phương pháp này sử dụng các mẫu sửa lỗi được học hoặc tổng hợp từ lịch sử phát triển phần mềm, kết hợp với nguyên liệu sửa lỗi (các thành phần mã nguồn) để sinh ra các bản vá ứng viên, sau đó thẩm định qua bộ ca kiểm thử. -
LyFix khác gì so với các công cụ sửa lỗi tự động hiện có?
LyFix khai thác sâu thông tin lịch sử phát triển, đặc biệt là bản cập nhật gây lỗi, sử dụng các mẫu sửa lỗi đặc thù cho Java và thuật toán cải tiến giúp tăng tỷ lệ sửa lỗi thành công và bản vá chính xác so với các công cụ như TBar, jGenProg. -
Làm thế nào để xác định chính xác bản cập nhật gây lỗi?
Phương pháp bán tự động được sử dụng, dựa trên thực thi bộ ca kiểm thử phát hiện lỗi qua các phiên bản lịch sử, kết hợp tìm kiếm nhị phân để xác định bản cập nhật làm thay đổi kết quả kiểm thử từ passed sang failed. -
Có thể áp dụng phương pháp này cho các ngôn ngữ lập trình khác ngoài Java không?
Mặc dù nghiên cứu tập trung vào Java, các nguyên lý và kỹ thuật có thể được điều chỉnh và áp dụng cho các ngôn ngữ khác, đặc biệt là những ngôn ngữ có cấu trúc tương tự như C, tuy nhiên cần phát triển các mẫu sửa lỗi phù hợp với đặc thù ngôn ngữ đó.
Kết luận
- Luận văn đã phát triển thành công phương pháp sửa lỗi hồi quy tự động cho các chương trình Java, khai thác thông tin lịch sử phát triển phần mềm và các mẫu sửa lỗi đặc thù.
- Công cụ LyFix được cài đặt và công bố mã nguồn mở, đạt tỷ lệ sửa lỗi thành công 56.8% và tỷ lệ bản vá chính xác 79.3%, vượt trội so với các công cụ hiện có.
- Thuật toán sửa lỗi cải tiến giúp sinh nhiều bản vá ứng viên chất lượng cao, đồng thời giảm thiểu lỗi biên dịch và thời gian thẩm định.
- Nghiên cứu góp phần nâng cao hiệu quả bảo trì phần mềm, giảm chi phí và thời gian sửa lỗi hồi quy trong thực tế phát triển phần mềm Java.
- Các bước tiếp theo bao gồm mở rộng mẫu sửa lỗi, tích hợp với hệ thống kiểm thử hồi quy và phát triển giao diện người dùng thân thiện để tăng tính ứng dụng của công cụ.
Các nhà phát triển và nhóm nghiên cứu được khuyến khích tải và thử nghiệm công cụ LyFix, đồng thời đóng góp ý kiến để hoàn thiện và mở rộng phương pháp sửa lỗi tự động cho phần mềm Java.