Phương pháp tự động sửa lỗi cho các chương trình Java Luận văn phân tích bán tự động 3483 lỗi của hai benchmark BugSwarm và Bears, từ đó thu thập được 54 lỗi hồi quy. BugSwarm bao gồm 3232 lỗi được thu thập tự động dựa trên lịch sử tích hợp liên tục (TravisCI) của các ứng 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.
ĐẠ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 Chun 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 TS 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 Prof., Dr Pham Ngoc Hung HANOI - 2020 i LỜI CAM ĐOAN Tôi xin cam đoan nghiên cứu phương pháp tự động sửa lỗi cho chương trình Java trình bày 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 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 chương trình Java tơi trình bày luận văn tơi tự phát triển, không chép mã nguồn người khác 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 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 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 thị trường Tuy nhiên, thay đổi gây lỗi khiến cho chức có chương trình khơng hoạt động Những lỗi gọi lỗi hồi quy Sửa lỗi tự động (Automated Program Repair - APR) gần cho thấy tiềm lớn việc tự động sửa lỗi phần mềm Mặc dù với phát triển mạnh mẽ APR, có số kỹ thuật tập trung xử lý lỗi hồi quy Tuy nhiên, kỹ thuật chưa thực khai thác đầy đủ thông tin có sẵn lịch sử phát triển phần mềm (ví dụ: cập nhật gây lỗi, v.v.) để sửa lỗi hồi quy Hơn nữa, kỹ thuật không công bố công cụ cài đặt cho cộng đồng cơng cụ hạn chế khó sử dụng để sửa lỗi thực tế Luận văn nhằm mục đích đề xuất phương pháp sửa lỗi hồi quy cho chương trình Java cách khai thác mở rộng phát gần lỗi hồi quy, ví dụ: mối tương quan cập nhật tạo lỗi sửa lỗi Luận văn cài đặt lại cải tiến phương pháp sửa lỗi hồi quy tự động cho chương trình C (Relifix) Từ đó, xây dựng hệ thống có tên LyFix, cho phép người dùng sửa lỗi hồi quy Java tự động cách tận dụng nguyên liệu sửa lỗi mẫu sửa lỗi cụ thể họ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ài đặt lại dựa vào ý tưởng Relifix Ngoài ra, luận văn cài đặt thêm ba mẫu sửa lỗi hồi quy cho Java Luận văn thực thực nghiệm để so sánh khả sửa lỗi LyFix jRelifix (bản cài đặt Relifix cho Java) công cụ sửa lỗi tự động tốt (jGenProg, jMutRepair, TBar) tập liệu 51 lỗi hồi quy thực tế hệ thống phần mềm Java mã nguồn mở Kết cho thấy LyFix sinh vá thành cơng cho 56.8% lỗi có tập liệu tỉ lệ số vá xác 79.3% công cụ khác sửa lỗi tốt (TBar) với kết sinh vá 33.3% lỗi tỉ lệ vá 41.1% 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 quan trọng nhất, xin gửi lời cảm ơn trân trọng sâu sắc tới PGS TS Phạm Ngọc Hùng - người Thầy giáo trực tiếp hướng dẫn tận tình đóng góp ý kiến quý báu trình tơi học tập, nghiên cứu kinh nghiệm sống từ năm tháng tơi cịn sinh viên trường Đại học Công nghệ Thầy không ngần ngại cho phép hỗ trợ tự lựa chọn đề tài để thực luận văn Tôi xin gửi lời cảm ơn chân thành tới TS Bách Lê, TS Lê Quang Lộc, PGS TS Corina Pasareanu hướng dẫn hỗ trợ tơi nhiệt tình q trình thực luận văn Các anh cô động viên đưa câu trả lời gợi ý tơi gặp khó khăn Các anh cô chia sẻ nhiều kinh nghiệm quý báu nghiên cứu sống học nhiều điều từ anh Xin cảm ơn ban tổ chức chương trình Google Summer of Code 2020 Java PathFinder Team cho phép tài trợ kinh phí để tơi thực đề tài luận văn Cơng trình tài trợ phần từ đề tài KHCN cấp ĐHQGHN, Mã số đề tài: QG.19.24 Cuối cùng, xin cảm ơn lời động viên từ gia đình, người thân, bạn bè để giúp vững bước đường tương lai iv Mục lục Giới thiệu 1.1 Mở đầu 1.2 Đóng góp 1.3 Bố cục luận văn Kiến thức tảng 2.1 Kiểm thử hồi quy 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 lỗi 2.2.2 Các phương pháp sửa lỗi tự động 12 Phương pháp sửa tự động lỗi hồi quy 16 3.1 Tổng quan phương pháp 16 3.2 Xác định cập nhật gây lỗi 17 3.3 Thu thập thông tin mã nguồn thay đổi nguyên liệu sửa lỗi 22 3.4 Các mẫu sửa lỗi 24 3.5 Xác định vị trí gây lỗi 33 v 3.6 Thuật toán sửa lỗi 34 Cài đặt công cụ thực nghiệm 40 4.1 Cài đặt công cụ 40 4.2 Thực nghiệm 42 4.2.1 Phương pháp thực nghiệm 43 4.2.2 Kết thực nghiệm thảo luận 46 Kết luận 52 A Danh sách 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.2 Các bước tiêu chuẩn kỹ thuật APR [27] 2.3 Số lượng công bố năm APR từ 1996 - 2019 2.4 Tổng quan xác định vị trí gây lỗi dựa phổ chương trình 10 2.5 Tổng quan kỹ thuật sửa lỗi [14] 13 3.1 Tổng quan phương pháp sửa tự động lỗi hồi quy 17 3.2 Các cập nhật gây lỗi sửa lỗi Closure 31 [21] 18 3.3 Ví dụ minh họa tính độ đo nguyên liệu sửa lỗi câu lệnh nghi 4.1 ngờ lỗi 36 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 mẫu sửa lỗi sử dụng 23 3.2 Các mẫu sửa lỗi cài đặt 24 4.1 Thống kê số liệu lỗi hồi quy 44 4.2 Thống kê số lượng hành động sửa lỗi liệu lỗi hồi quy 46 4.3 Kết sửa lỗi tập liệu lỗi hồi quy 47 Chương Kết luận 53 Với kết đạt được, thời gian luận văn thu thập thêm nhiều liệu lỗi hồi quy từ dự án mã nguồn mở Java khác Đây liệu giúp học giúp bổ sung vào công cụ thêm mẫu sửa lỗi mới, tăng khả sửa lỗi công cụ Một phương pháp để tăng tính hiệu sửa lỗi lựa chọn mẫu sửa lỗi nguyên liệu sửa lỗi phù hợp dựa ngữ cảnh Ví dụ: kỹ thuật xử lý ngơn ngữ tự nhiên áp dụng để hỗ trợ tách từ tên biến, phương thức thành phần mã nguồn tập nguyên liệu sửa lỗi câu lệnh ngữ cảnh khác vị trí nghi ngờ lỗi Từ đó, ta so sánh tương đồng nguyên liệu sửa lỗi ngữ cảnh để xếp hạng mức độ phù hợp nguyên liệu sửa lỗi so với vị trí lỗi Một thử thách lớn tất kỹ thuật sửa lỗi tự động plausible patch - vá tạo công cụ sửa lỗi tự động, vượt qua tất ca kiểm thử nhiên vá Lí ca kiểm thử chưa cung cấp đầy đủ Để xử lý vấn đề này, phương pháp sinh thêm ca kiểm thử hồi quy áp dụng Một cơng cụ tích hợp để thực nhiệm vụ HyDiff [34] - cho phép phân tích khác biệt phiên chương trình dựa kiểm thử hộp xám mờ (greybox fuzzing) thực thi tượng trưng bóng (shadow symbolic execution) để từ sinh thêm liệu cho ca kiểm thử 54 Phụ lục A Danh sách mẫu sửa lỗi Dưới danh sách mẫu sửa lỗi hình thức hóa theo khn mẫu chuẩn chung Tất vị trí áp dụng mẫu sửa lỗi vị trí mà mã nguồn thay đổi cập nhật gây lỗi • RP1 Xóa (các) câu lệnh thêm nhầm - int a = buggy_method (); - x = a + 1; Trong đó, hai câu lệnh thêm cập nhật gây lỗi • RP2 Khôi phục câu lệnh thay đổi trở phiên trước Khơi phục câu lệnh vị trí gây lỗi về phiên trước xảy cập nhật gây lỗi RP2.1 Thêm lại câu lệnh bị xóa + d eleted_s tatement ; RP2.2 Cập nhật lại câu lệnh - method ( arg2 ); + method ( arg1 ); Trong arg1 bị xóa arg2 thêm cập nhật gây lỗi RP2.3 Di chuyển câu lệnh vị trí cũ - moved_statement ; pivot_statement ; Phụ lục A Danh sách mẫu sửa lỗi 55 + moved_statement ; Trong moved_statement bị di chuyển lên phía trước pivot_statement cập nhật gây lỗi • RP3 Hoán đổi câu lệnh thay đổi câu lệnh liền kề - buggy_statement ; pivot_statement ; + buggy_statement ; Trong đó, buggy_statement câu lệnh bị thay đổi cập nhật gây lỗi pivot_statement câu lệnh liền kề, câu lệnh sau trước buggy_statement • RP4 Phủ định điều kiện thêm - if ( exp && new_exp ) { + if ( exp && ! new_exp ) { do_somthing ; } Trong đó, new_exp biểu thức điều kiện thêm vào cập nhật gây lỗi • RP5 Chuyển đổi câu lệnh thay đổi thành biểu thức điều kiện - is_number ( a ); + if ( is_number ( a )) { do_something ( a ); + } Trong đó, is_number(a); câu lệnh lời gọi phương thức, trả giá trị có kiểu liệu boolean thay đổi cập nhật gây lỗi • RP5 Thêm câu lệnh kiểm tra điều kiện RP5.1 Phụ lục A Danh sách mẫu sửa lỗi 56 - if ( exp ) { + if ( new_exp ) { do_something ; } RP5.2 + if ( new_exp ) { do_something ; + } RP5.3 - TYPE a = f ( x ); + TYPE a = DEFAULT_VALUE ; + if ( new_exp ) { + a = f ( x ); do_something ; + } Trong đó, new_exp biểu thức điều kiện từ tập nguyên liệu sửa lỗi DEFAULT_VALUE có giá trị dựa TYPE cơng thức đây: false , TYPE boolean 0 , TYPE kiểu liệu nguyên thủy khác DEFAULT_VALUE = "" , TYPE String null , TYPE kiểu liệu đối tượng khác • RP6 Thêm biểu thức điều kiện vào câu lệnh điều kiện có sẵn RP6.1 - if ( exp ) { + if ( exp && new_exp ) { do_something ; } RP6.2 (A.1) Phụ lục A Danh sách mẫu sửa lỗi - if ( exp ) { + if ( exp && ! new_exp ) { do_something ; } RP6.3 - if ( exp ) { + if ( exp || new_exp ) { do_something ; } RP6.4 - if ( exp ) { + if ( exp || ! new_exp ) { do_something ; } Trong đó, new_exp biểu thức điều kiện từ tập nguyên liệu sửa lỗi • RP7 Thêm câu lệnh pivot_statement ; + c hanged_s tatement ; Trong đó, changed_statement câu lệnh thay đổi cập nhật gây lỗi • RP8 Thêm khối try/catch cho câu lệnh thay đổi RP8.1 + try { chang ed_statem ent ; + } catch ( Throwable e ) {} RP8.2 try { chang ed_statem ent ; } catch ( SomeException e ) { 57 Phụ lục A Danh sách mẫu sửa lỗi h a n d l e _ s o m e _ e x c e p t i o n (); } + catch ( Throwable e ) {} Trong đó, changed_statement câu lệnh thay đổi cập nhật gây lỗi • RP9 Kiểm tra null RP9.1 + if ( obj != null ) { obj do_somthing (); + } RP9.2 - if ( obj test ()) { + if ( obj != null && obj test ()) { do_somthing ; } RP9.3 - if ( obj test ()) { + if ( obj == null || obj test ()) { do_somthing ; } Trong đó, obj đối tượng bị thay đổi cập nhật gây lỗi • RP10 Cập nhật lời gọi phương thức bị thay đổi RP10.1 Cập nhật đối số - obj method ( arg1 ); + obj method ( arg2 ); Trong đó, arg2 biến biểu thức từ tập nguyên liệu sửa lỗi RP10.2 Thêm đối đối số - obj method ( arg1 ); + obj method ( arg1 , arg2 ); 58 Phụ lục A Danh sách mẫu sửa lỗi Trong đó, arg2 biến biểu thức từ tập nguyên liệu sửa lỗi RP10.3 Bỏ đối số - obj method ( arg1 , arg2 ); + obj method ( arg1 ); RP10.4 Cập nhật tên đối tượng - obj1 method ( arg1 ); + obj2 method ( arg1 ); Trong đó, obj2 đối tượng từ tập nguyên liệu sửa lỗi 59 60 Tài liệu tham khảo [1] Rui Abreu, Peter Zoeteweij, and Arjan J C van Gemund “An Evaluation of Similarity Coefficients for Software Fault Localization” In: Proceedings of the 12th Pacific Rim International Symposium on Dependable Computing PRDC ’06 USA: IEEE Computer Society, 2006, 39–46 ISBN : 0769527248 DOI : 10.1109/ PRDC.2006.18 URL: https://doi.org/10.1109/PRDC.2006.18 [2] Johannes Bader et al “Getafix: Learning to Fix Bugs Automatically” In: Proc ACM Program Lang 3.OOPSLA (Oct 2019) DOI : 10 1145 / 3360585 URL : https://doi.org/10.1145/3360585 [3] Thomas Ball and Sriram K Rajamani “The SLAM Project: Debugging System Software via Static Analysis” In: Proceedings of the 29th ACM SIGPLANSIGACT Symposium on Principles of Programming Languages POPL ’02 Portland, Oregon: Association for Computing Machinery, 2002, 1–3 ISBN: 1581134509 DOI : 10 1145 / 503272 503274 URL : https : / / doi org / 10 1145 / 503272 503274 [4] Marcel Bohme and Abhik Roychoudhury CoREBench: Studying Complexity ă of Regression Errors In: Proceedings of the 2014 International Symposium on Software Testing and Analysis ISSTA 2014 San Jose, CA, USA: Association for Computing Machinery, 2014, 105–115 ISBN : 9781450326452 DOI : 10 1145 / 2610384.2628058 URL: https://doi.org/10.1145/2610384.2628058 [5] Johannes Bohnet, Stefan Voigt, and Jurgen Dollner Projecting code changes ă ă onto execution traces to support localization of recently introduced bugs” In: Proceedings of the 24th Symposium on Applied Computing Ed by Sung Y Shin and Sascha Ossowski ACM, 2009, pp 438–442 10.1145/1529282.1529378 ISBN : 978-1-60558-166-8 DOI : Tài liệu tham khảo 61 [6] William R Bush, Jonathan D Pincus, and David J Sielaff “A Static Analyzer for Finding Dynamic Programming Errors” In: Softw Pract Exper 30.7 (June 2000), 775–802 ISSN: 0038-0644 DOI: 10.1002/(SICI)1097-024X(200006)30: 7%3C775::AID- SPE309%3E3.0.CO;2- H URL : https://doi.org/10.1002/ (SICI)1097-024X(200006)30:7%3C775::AID-SPE309%3E3.0.CO;2-H [7] Kung Chen and Ju-Bing Chen “Aspect-Based Instrumentation for Locating Memory Leaks in Java Programs” In: Proceedings of the 31st Annual International Computer Software and Applications Conference - Volume 02 COMPSAC ’07 USA: IEEE Computer Society, 2007, 23–28 ISBN : 0769528708 DOI : 10.1109/ COMPSAC.2007.79 URL: https://doi.org/10.1109/COMPSAC.2007.79 [8] Zimin Chen et al “SequenceR: Sequence-to-Sequence Learning for End-toEnd Program Repair” In: IEEE Transaction on Software Engineering (2019) [9] Daniel Costa et al “A Framework for Evaluating the Results of the SZZ Approach for Identifying Bug-Introducing Changes” In: IEEE Transactions on Software Engineering PP (Oct 2016), pp 1–1 DOI: 10.1109/TSE.2016.2616306 [10] Vidroha Debroy and W Eric Wong “Using Mutation to Automatically Suggest Fixes for Faulty Programs” In: Proceedings of the 2010 Third International Conference on Software Testing, Verification and Validation ICST ’10 USA: IEEE Computer Society, 2010, 65–74 ISBN: 9780769539904 DOI: 10.1109/ICST.2010.66 URL : https://doi.org/10.1109/ICST.2010.66 [11] Emelie Engstrom ă and Per Runeson A Qualitative Survey of Regression Testing Practices” In: vol 6156 June 2010, pp 3–16 DOI : 10.1007/978- 3- 642- 13792-1_3 [12] Ali Ghanbari, Samuel Benton, and Lingming Zhang “Practical Program Repair via Bytecode Mutation” In: Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis ISSTA 2019 Beijing, China: Association for Computing Machinery, 2019, 19–30 ISBN: 9781450362245 DOI: 10 1145 / 3293882 3330559 3330559 URL : https : / / doi org / 10 1145 / 3293882 Tài liệu tham khảo 62 [13] Liang Gong et al “Interactive Fault Localization Leveraging Simple User Feedback” In: Proceedings of the 2012 IEEE International Conference on Software Maintenance (ICSM) ICSM ’12 USA: IEEE Computer Society, 2012, 67–76 9781467323130 DOI : 10.1109/ICSM.2012.6405255 URL : ISBN : https://doi.org/ 10.1109/ICSM.2012.6405255 [14] Claire Le Goues, Michael Pradel, and Abhik Roychoudhury “Automated Program Repair” In: Commun ACM 62.12 (Nov 2019), 56–65 DOI : ISSN : 0001-0782 10.1145/3318162 URL: https://doi.org/10.1145/3318162 [15] Hwa-You Hsu and Alessandro Orso “MINTS: A General Framework and Tool for Supporting Test-Suite Minimization” In: Proceedings of the 31st International Conference on Software Engineering ICSE ’09 USA: IEEE Computer Society, 2009, 419–429 ISBN: 9781424434534 DOI: 10.1109/ICSE.2009.5070541 URL : https://doi.org/10.1109/ICSE.2009.5070541 [16] “IEEE Standard for Software Maintenance” In: IEEE Std 1219-1998 (1998), pp 1–56 [17] Jiajun Jiang et al “Shaping Program Repair Space with Existing Patches and Similar Code” In: Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis ISSTA 2018 Amsterdam, Netherlands: Association for Computing Machinery, 2018, 298–309 DOI : 10.1145/3213846.3213871 URL : ISBN : 9781450356992 https://doi.org/10.1145/3213846 3213871 [18] James A Jones and Mary Jean Harrold “Empirical Evaluation of the Tarantula Automatic Fault-Localization Technique” In: Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering ASE ’05 Long Beach, CA, USA: Association for Computing Machinery, 2005, 273–282 ISBN: 1581139934 DOI : 10.1145/1101908.1101949 1101949 URL : https://doi.org/10.1145/1101908 Tài liệu tham khảo 63 [19] James A Jones, Mary Jean Harrold, and John Stasko “Visualization of Test Information to Assist Fault Localization” In: Proceedings of the 24th International Conference on Software Engineering ICSE ’02 Orlando, Florida: Association for Computing Machinery, 2002, 467–477 ISBN : 158113472X DOI : 10 1145/581339.581397 URL: https://doi.org/10.1145/581339.581397 [20] James A Jones, Mary Jean Harrold, and John Stasko “Visualization of Test Information to Assist Fault Localization” In: Proceedings of the 24th International Conference on Software Engineering ICSE ’02 Orlando, Florida: Association for Computing Machinery, 2002, 467–477 ISBN : 158113472X DOI : 10 1145/581339.581397 URL: https://doi.org/10.1145/581339.581397 [21] René Just, Darioush Jalali, and Michael D Ernst “Defects4J: A Database of Existing Faults to Enable Controlled Testing Studies for Java Programs” In: Proceedings of the 2014 International Symposium on Software Testing and Analysis ISSTA 2014 San Jose, CA, USA: Association for Computing Machinery, 2014, 437–440 ISBN : 9781450326452 DOI : 10.1145/2610384.2628055 URL : https: //doi.org/10.1145/2610384.2628055 [22] Jung-Min Kim and Adam Porter “A History-Based Test Prioritization Technique for Regression Testing in Resource Constrained Environments” In: Proceedings of the 24th International Conference on Software Engineering ICSE ’02 Orlando, Florida: Association for Computing Machinery, 2002, 119–129 ISBN: 158113472X DOI: 10.1145/581339.581357 URL: https://doi.org/10.1145/ 581339.581357 [23] B Korel, L H Tahat, and M Harman “Test prioritization using system models” In: 21st IEEE International Conference on Software Maintenance (ICSM’05) 2005, pp 559–568 [24] Xuan-Bach D Le, David Lo, and Claire Le Goues “History Driven Program Repair” In: IEEE 23rd International Conference on Software Analysis, Evolution and Reengineering (SANER) 2016 IEEE 2016 [25] Andreas Leitner et al “Efficient Unit Test Case Minimization” In: Proceedings of the Twenty-Second IEEE/ACM International Conference on Automated Software Tài liệu tham khảo 64 Engineering ASE ’07 Atlanta, Georgia, USA: Association for Computing Machinery, 2007, 417–420 ISBN: 9781595938824 DOI: 10.1145/1321631.1321698 URL : https://doi.org/10.1145/1321631.1321698 [26] Z Li, M Harman, and R M Hierons “Search Algorithms for Regression Test Case Prioritization” In: IEEE Transactions on Software Engineering 33.4 (2007), pp 225–237 [27] Kui Liu et al “On the Efficiency of Test Suite based Program Repair: A Systematic Assessment of 16 Automated Repair Systems for Java Programs” In: Proceedings of the 42nd International Conference on Software Engineering ACM 2020 [28] Kui Liu et al “TBar: Revisiting Template-Based Automated Program Repair” In: Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis ISSTA 2019 Beijing, China: Association for Computing Machinery, 2019, 31–42 ISBN: 9781450362245 DOI: 10.1145/3293882.3330577 URL : https://doi.org/10.1145/3293882.3330577 [29] Fan Long, Peter Amidon, and Martin Rinard “Automatic Inference of Code Transforms for Patch Generation” In: Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering ESEC/FSE 2017 Paderborn, Germany: Association for Computing Machinery, 2017, 727–739 DOI : 10.1145/3106237.3106253 URL : ISBN : 9781450351058 https://doi.org/10.1145/3106237 3106253 [30] Fan Long and Martin Rinard “Automatic Patch Generation by Learning Correct Code” In: Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages POPL ’16 St Petersburg, FL, USA: Association for Computing Machinery, 2016, 298–312 DOI : 10.1145/2837614.2837617 URL : ISBN : 9781450335492 https://doi.org/10.1145/2837614 2837617 [31] Fan Long and Martin Rinard “Staged Program Repair with Condition Synthesis” In: Proceedings of the 2015 10th Joint Meeting on Foundations of Software Tài liệu tham khảo 65 Engineering ESEC/FSE 2015 Bergamo, Italy: Association for Computing Machinery, 2015, 166–178 ISBN: 9781450336758 DOI: 10.1145/2786805.2786811 URL : https://doi.org/10.1145/2786805.2786811 [32] Fernanda Madeiral et al “Bears: An Extensible Java Bug Benchmark for Automatic Program Repair Studies” In: Proceedings of the 26th IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER ’19) 2019 URL : https://arxiv.org/abs/1901.06024 [33] Atif M Memon “Automatically Repairing Event Sequence-Based GUI Test Suites for Regression Testing” In: ACM Trans Softw Eng Methodol 18.2 (Nov 2008) ISSN : 1049-331X DOI : 10.1145/1416563.1416564 URL : https://doi org/10.1145/1416563.1416564 [34] Yannic Noller et al “HyDiff: Hybrid Differential Software Analysis” In: ICSE ’20 2020 [35] Akira Onoma et al “Regression Testing in an Industrial Environment” In: Communications of the ACM 41 (May 1998), pp 81–86 DOI : 10.1145/274946 274960 [36] Kai Pan, Sunghun Kim, and E James Whitehead “Toward an Understanding of Bug Fix Patterns” In: Empirical Softw Engg 14.3 (June 2009), 286–315 ISSN: 1382-3256 DOI : 10.1007/s10664- 008- 9077- URL : https://doi.org/10 1007/s10664-008-9077-5 [37] Manos Renieris and Steven P Reiss “Fault Localization with Nearest Neighbor Queries” In: Proceedings of the 18th IEEE International Conference on Automated Software Engineering ASE’03 Montreal, Quebec, Canada: IEEE Press, 2003, 30–39 ISBN: 0769520359 [38] G Rothermel et al “Prioritizing test cases for regression testing” In: IEEE Transactions on Software Engineering 27.10 (2001), pp 929–948 [39] Gregg Rothermel and Mary Harrold “A Safe, Efficient Regression Test Selection Technique” In: (Feb 2000) DOI: 10.1145/248233.248262 Tài liệu tham khảo 66 [40] Nick Rutar, Christian B Almazan, and Jeffrey S Foster “A Comparison of Bug Finding Tools for Java” In: Proceedings of the 15th International Symposium on Software Reliability Engineering ISSRE ’04 USA: IEEE Computer Society, 2004, 245–256 ISBN : 0769522157 DOI : 10.1109/ISSRE.2004.1 URL : https: //doi.org/10.1109/ISSRE.2004.1 [41] V Mary Sumalatha and G S V Prasad Raju “Object Oriented Test Case Generation Technique using Genetic Algorithms” In: International Journal of Computer Applications 61 (2013), pp 20–26 [42] Shin Hwei Tan and Abhik Roychoudhury “Relifix: Automated Repair of Software Regressions” In: Proceedings of the 37th International Conference on Software Engineering - Volume ICSE ’15 Florence, Italy: IEEE Press, 2015, 471–482 ISBN : 9781479919345 [43] David A Tomassi et al “BugSwarm: Mining and Continuously Growing a Dataset of Reproducible Failures and Fixes” In: Proceedings of the 41st International Conference on Software Engineering ICSE ’19 Montreal, Quebec, Canada: IEEE Press, 2019, 339–349 DOI : 10 1109 / ICSE 2019 00048 URL : https : //doi.org/10.1109/ICSE.2019.00048 [44] Jacek undefinedliwerski, Thomas Zimmermann, and Andreas Zeller “When Do Changes Induce Fixes?” In: SIGSOFT Softw Eng Notes 30.4 (May 2005), 1–5 ISSN : 0163-5948 DOI : 10 1145 / 1082983 1083147 URL : https : / / doi org/10.1145/1082983.1083147 [45] Westley Weimer et al “Automatically Finding Patches Using Genetic Programming” In: Proceedings of the 31st International Conference on Software Engineering ICSE ’09 USA: IEEE Computer Society, 2009, 364–374 ISBN: 9781424434534 DOI : 10.1109/ICSE.2009.5070536 URL : https://doi.org/10.1109/ICSE 2009.5070536 [46] Ming Wen et al “Exploring and Exploiting the Correlations between BugInducing and Bug-Fixing Commits” In: Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering ESEC/FSE 2019 Tallinn, Estonia: Association Tài liệu tham khảo 67 for Computing Machinery, 2019, 326–337 ISBN: 9781450355728 DOI: 10.1145/ 3338906.3338962 URL: https://doi.org/10.1145/3338906.3338962 [47] W E Wong et al “Test set size minimization and fault detection effectiveness: a case study in a space application” In: Proceedings Twenty-First Annual International Computer Software and Applications Conference (COMPSAC’97) 1997, pp 522–528 [48] W Eric Wong et al “A Survey on Software Fault Localization” In: IEEE Trans Softw Eng 42.8 (Aug 2016), 707–740 ISSN : 0098-5589 DOI : 10 1109 / TSE 2016.2521368 URL: https://doi.org/10.1109/TSE.2016.2521368 [49] Qi Xin and Steven P Reiss “Leveraging syntax-related code for automated program repair” In: Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE) IEEE 2017, pp 660–670 [50] Yingfei Xiong et al “Precise Condition Synthesis for Program Repair” In: Proceedings of the 39th International Conference on Software Engineering ICSE ’17 Buenos Aires, Argentina: IEEE Press, 2017, 416–426 ISBN: 9781538638682 DOI: 10.1109/ICSE.2017.45 URL: https://doi.org/10.1109/ICSE.2017.45 [51] Jifeng Xuan et al “Nopol: Automatic Repair of Conditional Statement Bugs in Java Programs” In: IEEE Transactions on Software Engineering (2016) DOI : 10.1109/TSE.2016.2560811 [52] Yih-Farn Chen, D S Rosenblum, and Kiem-Phong Vo “TESTTUBE: a system for selective regression testing” In: Proceedings of 16th International Conference on Software Engineering 1994, pp 211–220 [53] Shin Yoo and Mark Harman “Pareto Efficient Multi-Objective Test Case Selection” In: Proceedings of the 2007 International Symposium on Software Testing and Analysis ISSTA ’07 London, United Kingdom: Association for Computing Machinery, 2007, 140–150 ISBN : 9781595937346 DOI : 10.1145/1273463 1273483 URL: https://doi.org/10.1145/1273463.1273483 ... lỗi chương trình tự động Sửa lỗi chương trình bước cơng việc gỡ lỗi chương trình vịng đời lỗi chương trình, bao gồm: Nhận diện lỗi - Nhận diện tồn lỗi chương trình, quan sát dấu lỗi để phục vụ cho. .. chương trình Java cách cài đặt mở rộng phương pháp sửa lỗi phát gần lỗi hồi quy (ví dụ: phương pháp sửa lỗi hồi quy tự động cho chương trình C [42], tương quan cập nhật gây lỗi sửa lỗi [46]) Luận... 24 Chương Phương pháp sửa tự động lỗi hồi quy 3.4 Các mẫu sửa lỗi Hiện nay, luận văn cài đặt tám mẫu sửa lỗi thừa kế từ tư tưởng Relifix [42] Những mẫu sửa lỗi thiết kế để sửa lỗi cho chương trình