{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,3,27]],"date-time":"2025-03-27T08:35:22Z","timestamp":1743064522257,"version":"3.40.3"},"publisher-location":"Cham","reference-count":16,"publisher":"Springer Nature Switzerland","isbn-type":[{"type":"print","value":"9783031572586"},{"type":"electronic","value":"9783031572593"}],"license":[{"start":{"date-parts":[[2024,1,1]],"date-time":"2024-01-01T00:00:00Z","timestamp":1704067200000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"},{"start":{"date-parts":[[2024,4,6]],"date-time":"2024-04-06T00:00:00Z","timestamp":1712361600000},"content-version":"vor","delay-in-days":96,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2024]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>This paper describes a formal general-purpose automated program repair (APR) framework based on the concept of program invariants. In the presented repair framework, the execution traces of a defected program are dynamically analyzed to infer specifications <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\varphi _{correct}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                <mml:msub>\n                  <mml:mi>\u03c6<\/mml:mi>\n                  <mml:mrow>\n                    <mml:mi>correct<\/mml:mi>\n                  <\/mml:mrow>\n                <\/mml:msub>\n              <\/mml:math><\/jats:alternatives><\/jats:inline-formula> and <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\varphi _{violated}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                <mml:msub>\n                  <mml:mi>\u03c6<\/mml:mi>\n                  <mml:mrow>\n                    <mml:mi>violated<\/mml:mi>\n                  <\/mml:mrow>\n                <\/mml:msub>\n              <\/mml:math><\/jats:alternatives><\/jats:inline-formula>, where <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\varphi _{correct}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                <mml:msub>\n                  <mml:mi>\u03c6<\/mml:mi>\n                  <mml:mrow>\n                    <mml:mi>correct<\/mml:mi>\n                  <\/mml:mrow>\n                <\/mml:msub>\n              <\/mml:math><\/jats:alternatives><\/jats:inline-formula> represents the set of likely invariants (good patterns) required for a run to be successful and <jats:inline-formula><jats:alternatives><jats:tex-math>$$\\varphi _{violated}$$<\/jats:tex-math><mml:math xmlns:mml=\"http:\/\/www.w3.org\/1998\/Math\/MathML\">\n                <mml:msub>\n                  <mml:mi>\u03c6<\/mml:mi>\n                  <mml:mrow>\n                    <mml:mi>violated<\/mml:mi>\n                  <\/mml:mrow>\n                <\/mml:msub>\n              <\/mml:math><\/jats:alternatives><\/jats:inline-formula> represents the set of likely suspicious invariants (bad patterns) that result in the bug in the defected program. These specifications are then refined using rigorous program analysis techniques, which are also used to drive the repair process towards feasible patches and assess the correctness of generated patches. We demonstrate the usefulness of leveraging invariants in APR by developing an invariant-based repair system for performance bugs. The initial analysis shows the effectiveness of invariant-based APR in handling performance bugs by producing patches that ensure program\u2019s efficiency increase without adversely impacting its functionality.<\/jats:p>","DOI":"10.1007\/978-3-031-57259-3_12","type":"book-chapter","created":{"date-parts":[[2024,4,5]],"date-time":"2024-04-05T13:01:39Z","timestamp":1712322099000},"page":"255-265","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":0,"title":["Invariant-based Program Repair"],"prefix":"10.1007","author":[{"given":"Omar I.","family":"Al-Bataineh","sequence":"first","affiliation":[]}],"member":"297","published-online":{"date-parts":[[2024,4,6]]},"reference":[{"doi-asserted-by":"crossref","unstructured":"J.\u00a0Bader, A.\u00a0Scott, M.\u00a0Pradel, and S.\u00a0Chandra. Getafix: learning to fix bugs automatically. Proc. ACM Program. Lang., pages 159:1\u2013159:27, 2019.","key":"12_CR1","DOI":"10.1145\/3360585"},{"doi-asserted-by":"crossref","unstructured":"D.\u00a0Beyer. Automatic verification of C and java programs: SV-COMP 2019. In Tools and Algorithms for the Construction and Analysis of Systems TACAS, volume 11429, pages 133\u2013155, 2019.","key":"12_CR2","DOI":"10.1007\/978-3-030-17502-3_9"},{"doi-asserted-by":"crossref","unstructured":"D.\u00a0Beyer and M.\u00a0E. Keremoglu. Cpachecker: A tool for configurable software verification. In Computer Aided Verification, pages 184\u2013190, 2011.","key":"12_CR3","DOI":"10.1007\/978-3-642-22110-1_16"},{"doi-asserted-by":"crossref","unstructured":"M.\u00a0D. Ernst, J.\u00a0H. Perkins, P.\u00a0J. Guo, S.\u00a0McCamant, C.\u00a0Pacheco, M.\u00a0S. Tschantz, and C.\u00a0Xiao. The daikon system for dynamic detection of likely invariants. Sci. Comput. Program., 69(1-3):35\u201345, 2007.","key":"12_CR4","DOI":"10.1016\/j.scico.2007.01.015"},{"doi-asserted-by":"crossref","unstructured":"X.\u00a0Gao, S.\u00a0Mechtaev, and A.\u00a0Roychoudhury. Crash-avoiding program repair. In International Symposium on Software Testing and Analysis (ISSTA), pages 8\u201318, 2019.","key":"12_CR5","DOI":"10.1145\/3293882.3330558"},{"doi-asserted-by":"crossref","unstructured":"G.\u00a0Jin, L.\u00a0Song, X.\u00a0Shi, J.\u00a0Scherpelz, and S.\u00a0Lu. Understanding and detecting real-world performance bugs. In ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI \u201912, Beijing, China - June 11 - 16, 2012, pages 77\u201388. ACM, 2012.","key":"12_CR6","DOI":"10.1145\/2345156.2254075"},{"doi-asserted-by":"crossref","unstructured":"C.\u00a0Le\u00a0Goues, T.\u00a0Nguyen, S.\u00a0Forrest, and W.\u00a0Weimer. GenProg: A Generic Method for Automatic Software Repair. IEEE Transactions on Software Engineering, 38(1):54\u201372, Jan. 2012.","key":"12_CR7","DOI":"10.1109\/TSE.2011.104"},{"doi-asserted-by":"crossref","unstructured":"S.\u00a0Mechtaev, J.\u00a0Yi, and A.\u00a0Roychoudhury. Angelix: Scalable multiline program patch synthesis via symbolic analysis. In International Conference on Software Engineering (ICSE), pages 691\u2013701, 2016.","key":"12_CR8","DOI":"10.1145\/2884781.2884807"},{"doi-asserted-by":"crossref","unstructured":"S.\u00a0Mechtaev, J.\u00a0Yi, and A.\u00a0Roychoudhury. Angelix: Scalable Multiline Program Patch Synthesis via Symbolic Analysis. In International Conference on Software Engineering (ICSE), pages 691\u2013701, May 2016.","key":"12_CR9","DOI":"10.1145\/2884781.2884807"},{"doi-asserted-by":"crossref","unstructured":"A.\u00a0Nistor, T.\u00a0Jiang, and L.\u00a0Tan. Discovering, reporting, and fixing performance bugs. In 10th Working Conference on Mining Software Repositories (MSR), pages 237\u2013246, 2013.","key":"12_CR10","DOI":"10.1109\/MSR.2013.6624035"},{"doi-asserted-by":"crossref","unstructured":"Z.\u00a0Qi, F.\u00a0Long, S.\u00a0Achour, and M.\u00a0C. Rinard. An analysis of patch plausibility and correctness for generate-and-validate patch generation systems. In Proceedings of the 2015 International Symposium on Software Testing and Analysis, ISSTA 2015, Baltimore, MD, USA, July 12-17, 2015, pages 24\u201336, 2015.","key":"12_CR11","DOI":"10.1145\/2771783.2771791"},{"doi-asserted-by":"crossref","unstructured":"R.\u00a0Shariffdeen, Y.\u00a0Noller, L.\u00a0Grunske, and A.\u00a0Roychoudhury. Concolic program repair. In SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 2021.","key":"12_CR12","DOI":"10.1145\/3453483.3454051"},{"doi-asserted-by":"crossref","unstructured":"L.\u00a0Song and S.\u00a0Lu. Performance diagnosis for inefficient loops. In Proceedings of the 39th International Conference on Software Engineering, ICSE, pages 370\u2013380, 2017.","key":"12_CR13","DOI":"10.1109\/ICSE.2017.41"},{"doi-asserted-by":"crossref","unstructured":"L.\u00a0Song and S.\u00a0Lu. Performance diagnosis for inefficient loops. In Proceedings of the 39th International Conference on Software Engineering, ICSE \u201917, pages 370\u2013380, Buenos Aires, Argentina, 2017.","key":"12_CR14","DOI":"10.1109\/ICSE.2017.41"},{"doi-asserted-by":"crossref","unstructured":"W.\u00a0Visser, K.\u00a0Havelund, G.\u00a0P. Brat, S.\u00a0Park, and F.\u00a0Lerda. Model checking programs. Autom. Software Engineering, 10(2):203\u2013232, 2003.","key":"12_CR15","DOI":"10.1023\/A:1022920129859"},{"doi-asserted-by":"crossref","unstructured":"J.\u00a0Yi and E.\u00a0Ismayilzada. Speeding up constraint-based program repair using a search-based technique. Information and Software Technology, page 106865, 2022.","key":"12_CR16","DOI":"10.1016\/j.infsof.2022.106865"}],"container-title":["Lecture Notes in Computer Science","Fundamental Approaches to Software Engineering"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-031-57259-3_12","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2024,4,5]],"date-time":"2024-04-05T13:03:56Z","timestamp":1712322236000},"score":1,"resource":{"primary":{"URL":"https:\/\/link.springer.com\/10.1007\/978-3-031-57259-3_12"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024]]},"ISBN":["9783031572586","9783031572593"],"references-count":16,"URL":"https:\/\/doi.org\/10.1007\/978-3-031-57259-3_12","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"type":"print","value":"0302-9743"},{"type":"electronic","value":"1611-3349"}],"subject":[],"published":{"date-parts":[[2024]]},"assertion":[{"value":"6 April 2024","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"FASE","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"International Conference on Fundamental Approaches to Software Engineering","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Luxembourg City","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Luxembourg","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2024","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"6 April 2024","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"11 April 2024","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"27","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"fase2024","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"https:\/\/etaps.org\/2024\/conferences\/fase\/","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Single-blind","order":1,"name":"type","label":"Type","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"EasyChair","order":2,"name":"conference_management_system","label":"Conference Management System","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"41","order":3,"name":"number_of_submissions_sent_for_review","label":"Number of Submissions Sent for Review","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"14","order":4,"name":"number_of_full_papers_accepted","label":"Number of Full Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"5","order":5,"name":"number_of_short_papers_accepted","label":"Number of Short Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"34% - The value is computed by the equation \"Number of Full Papers Accepted \/ Number of Submissions Sent for Review * 100\" and then rounded to a whole number.","order":6,"name":"acceptance_rate_of_full_papers","label":"Acceptance Rate of Full Papers","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"3-4","order":7,"name":"average_number_of_reviews_per_paper","label":"Average Number of Reviews per Paper","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"4","order":8,"name":"average_number_of_papers_per_reviewer","label":"Average Number of Papers per Reviewer","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}},{"value":"Yes","order":9,"name":"external_reviewers_involved","label":"External Reviewers Involved","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information (provided by the conference organizers)"}}]}}