Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 82 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
82
Dung lượng
391,64 KB
Nội dung
ĐẠ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 2.2.2 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 cập nhật gây lỗi 3.3 Thu thập thông tin mã nguồn thay đổ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 Cài đặt công cụ thực nghiệm 4.1 Cài đặt công cụ 4.2 Thực nghiệm 4.2.1 4.2.2 Kết luận A Danh sách mẫu sửa lỗi Tài liệu tham khảo 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 t 2.5 Tổng quan kỹ thuật sửa lỗi [14] 3.1 Tổng quan phương pháp sửa tự động lỗi hồi quy 3.2 Các cập nhật gây lỗi sửa lỗi Closure 31 [21] 3.3 Ví dụ minh họa tính độ đo nguyên liệu sửa lỗi câu ngờ lỗi 4.1 Kiến trúc công cụ sửa lỗi tự động LyFix 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 3.2 Các mẫu sửa lỗi cài đặt 4.1 Thống kê số liệu lỗi hồi quy 4.2 Thống kê số lượng hành động sửa lỗi liệu lỗ 4.3 Kết sửa lỗi tập liệu lỗi hồi quy Phụ lục A Danh sách mẫu sửa lỗi + 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_state ment;pivot_statem ent; + 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 ) { d o _ s o m t h i n g ; } 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 - i s_ nu mbe r ( a ); + if ( is_ nu mb er ( a )) { d o _ s o m e t h i n g ( 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 - if ( exp ) { + if ( new_exp ) { d o _ s o m e t h i n g ; } RP5.2 + if ( new_exp ) { d o _ s o m e t h i n g ; + } RP5.3 - TYPE a = f ( x ); + TYPE a = D E F A U L T _ V A L U E ; + if ( new_exp ) { + a = f ( x ); d o _ s o m e t h i n g ; + } 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 < 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 ) { d o _ s o m e t h i n g ; } RP6.2 Phụ lục A Danh sách mẫu sửa lỗi - if ( exp ) { + if ( exp && ! new_exp ) { d o _ s o m e t h i n g ; } RP6.3 - if ( exp ) { + if ( exp || new_exp ) { d o _ s o m e t h i n g ; } RP6.4 - if ( exp ) { + if ( exp || ! new_exp ) { d o _ s o m e t h i n g ; } 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; + changed_statement; 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 { changed_statement; + } catch ( T hr owa bl e e ) {} RP8.2 try { changed_statement; } catch ( S o m e E x c e p t i o n e ) { 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 ( T hr ow ab le 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 d o _ s o m t h i n g (); + } RP9.2 - if ( obj test ()) { + if ( obj != null && obj test ()) { d o _ s o m t h i n g ; } RP9.3 - if ( obj test ()) { + if ( obj == null || obj test ()) { d o _ s o m t h i n g ; } 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 ); 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 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 DOI: ISBN: 0769527248 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] Sys- Thomas Ball and Sriram K Rajamani “The SLAM Project: Debugging tem Software via Static Analysis” In: Proceedings of the 29th ACM SIGPLANSIGACT Symposium on Principles of Programming Languages POPL ’02 Port-land, 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 60558-166-8 DOI: 10.1145/1529282.1529378 ISBN: 978-1- Tài liệu tham khảo [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 Interna-tional 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 Con-ference on Software Testing, Verification and Validation ICST ’10 USA: IEEE Com-puter 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 Test-ing 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 Re-pair via Bytecode Mutation” In: Proceedings of the 28th ACM SIGSOFT Interna-tional Symposium on Software Testing and Analysis ISSTA 2019 Beijing, China: Association for Computing Machinery, 2019, 19–30 ISBN: 9781450362245 DOI: 10 1145 / 3293882 3330559 URL: https : / / doi org / 10 1145 / 3293882 3330559 Tài liệu tham khảo [13] Liang Gong et al “Interactive Fault Localization Leveraging Simple User Feed-back” In: Proceedings of the 2012 IEEE International Conference on Software Main-tenance (ICSM) ICSM ’12 USA: IEEE Computer Society, 2012, 67–76 10.1109/ICSM.2012.6405255 ISBN: 9781467323130 URL: DOI: https://doi.org/ 10.1109/ICSM.2012.6405255 [14] Claire Le Goues, Michael Pradel, and Abhik Roychoudhury “Automated Pro-gram Repair” In: Commun ACM 62.12 (Nov 2019), 56–65 ISSN: 0001-0782 DOI: 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 So- ciety, 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 Sympo-sium on Software Testing and Analysis ISSTA 2018 Amsterdam, Netherlands: Association for Computing Machinery, 2018, 298– 309 ISBN: 9781450356992 DOI: 10.1145/3213846.3213871 URL: 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 URL: https://doi.org/10.1145/1101908 1101949 Tài liệu tham khảo [19] James A Jones, Mary Jean Harrold, and John Stasko “Visualization of Test Information to Assist Fault Localization” In: Proceedings of the 24th Interna-tional Conference on Software Engineering ICSE ’02 Orlando, Florida: Associ-ation 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 Interna-tional Conference on Software Engineering ICSE ’02 Orlando, Florida: Associ-ation 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 9781450326452 Computing DOI: Machinery, 2014, 10.1145/2610384.2628055 437–440 URL: ISBN: https: //doi.org/10.1145/2610384.2628055 [22] Jung-Min Kim and Adam Porter “A History-Based Test Prioritization Tech-nique for Regression Testing in Resource Constrained Environments” In: Pro-ceedings of the 24th International Conference on Software Engineering ICSE ’02 Orlando, Florida: Association for Computing Machinery, 2002, 119–129 URL: [23] ISBN: 158113472X DOI: 10.1145/581339.581357 https://doi.org/10.1145/ 581339.581357 B Korel, L H Tahat, and M Harman “Test prioritization using system mod-els” 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 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 Sys-tematic 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 ISBN: 9781450351058 DOI: 10.1145/3106237.3106253 URL: https://doi.org/10.1145/3106237 3106253 [30] Fan Long and Martin Rinard “Automatic Patch Generation by Learning Cor-rect Code” In: Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Sympo-sium on Principles of Programming Languages POPL ’16 St Petersburg, FL, USA: Association for Computing Machinery, 2016, 298–312 ISBN: 9781450335492 DOI: 10.1145/2837614.2837617 URL: https://doi.org/10.1145/2837614 2837617 [31] Fan Long and Martin Rinard “Staged Program Repair with Condition Syn-thesis” In: Proceedings of the 2015 10th Joint Meeting on Foundations of Software Tài liệu tham khảo 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: [36] 10.1145/274946 274960 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 Neigh-bor Queries” In: Proceedings of the 18th IEEE International Conference on Au-tomated 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 Selec-tion Technique” In: (Feb 2000) DOI: 10.1145/248233.248262 Tài liệu tham khảo [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 Gen-eration Technique using Genetic Algorithms” In: International Journal of Com-puter Applications 61 (2013), pp 20–26 [42] Soft- Shin Hwei Tan and Abhik Roychoudhury “Relifix: Automated Repair of ware Regressions” In: Proceedings of the 37th International Conference on Software Engineering - Volume ICSE ’15 Florence, Italy: IEEE Press, 2015, 471–482 ISBN: [43] 9781479919345 David A Tomassi et al “BugSwarm: Mining and Continuously Growing a Dataset of Reproducible Failures and Fixes” In: Proceedings of the 41st Interna-tional 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 URL: [45] ISSN: 0163-5948 DOI: 10 1145 / 1082983 1083147 https : / / doi org/10.1145/1082983.1083147 Westley Weimer et al “Automatically Finding Patches Using Genetic Pro-gramming” In: Proceedings of the 31st International Conference on Software Engi-neering 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 Bug- Inducing and Bug-Fixing Commits” In: Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foun-dations of Software Engineering ESEC/FSE 2019 Tallinn, Estonia: Association Tài liệu tham khảo 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 TwentyFirst Annual In-ternational 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: Pro-ceedings of the 39th International Conference on Software Engineering ICSE ’17 Buenos Aires, Argentina: IEEE Press, 2017, 416–426 DOI: ISBN: 9781538638682 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 Se-lection” In: Proceedings of the 2007 International Symposium on Software Testing and Analysis ISSTA ’07 London, United Kingdom: Association for 9781595937346 Comput-ing DOI: Machinery, 2007, 10.1145/1273463 https://doi.org/10.1145/1273463.1273483 140–150 1273483 ISBN: URL: ... 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. .. thức) 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. .. 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