{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,12,18]],"date-time":"2025-12-18T14:30:04Z","timestamp":1766068204174,"version":"3.41.0"},"reference-count":41,"publisher":"Association for Computing Machinery (ACM)","issue":"FSE","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Proc. ACM Softw. Eng."],"published-print":{"date-parts":[[2025,6,19]]},"abstract":"<jats:p>Code changes are an integral part of the software development process. Many code changes are meant to improve the code without changing its functional behavior, e.g., refactorings and performance improvements. Unfortunately, validating whether a code change preserves the behavior is non-trivial, particularly when the code change is performed deep inside a complex project. This paper presents ChangeGuard, an approach that uses learning-guided execution to compare the runtime behavior of a modified function. The approach is enabled by the novel concept of pairwise learning-guided execution and by a set of techniques that improve the robustness and coverage of the state-of-the-art learning-guided execution technique. Our evaluation applies ChangeGuard to a dataset of 224 manually annotated code changes from popular Python open-source projects and to three datasets of code changes obtained by applying automated code transformations. Our results show that the approach identifies semantics-changing code changes with a precision of 77.1% and a recall of 69.5%, and that it detects unexpected behavioral changes introduced by automatic code refactoring tools. In contrast, the existing regression tests of the analyzed projects miss the vast majority of semantics-changing code changes, with a recall of only 7.6%. We envision our approach being useful for detecting unintended behavioral changes early in the development process and for improving the quality of automated code transformations.<\/jats:p>","DOI":"10.1145\/3715760","type":"journal-article","created":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T15:15:34Z","timestamp":1750346134000},"page":"936-956","source":"Crossref","is-referenced-by-count":2,"title":["ChangeGuard: Validating Code Changes via Pairwise Learning-Guided Execution"],"prefix":"10.1145","volume":"2","author":[{"ORCID":"https:\/\/orcid.org\/0009-0004-2384-3163","authenticated-orcid":false,"given":"Lars","family":"Gr\u00f6ninger","sequence":"first","affiliation":[{"name":"University of Stuttgart, Stuttgart, Germany"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-7978-719X","authenticated-orcid":false,"given":"Beatriz","family":"Souza","sequence":"additional","affiliation":[{"name":"University of Stuttgart, Stuttgart, Germany"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-1623-498X","authenticated-orcid":false,"given":"Michael","family":"Pradel","sequence":"additional","affiliation":[{"name":"University of Stuttgart, Stuttgart, Germany"}]}],"member":"320","published-online":{"date-parts":[[2025,6,19]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"DyPyBench: A Benchmark of Executable Python Software. In ACM International Conference on the Foundations of Software Engineering (FSE).","author":"Bouzenia Islem","year":"2024","unstructured":"Islem Bouzenia, Bajaj Piyush Krishan, and Michael Pradel. 2024. DyPyBench: A Benchmark of Executable Python Software. In ACM International Conference on the Foundations of Software Engineering (FSE)."},{"key":"e_1_2_1_2_1","volume-title":"2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER). 507\u2013511","author":"Brito Aline","year":"2018","unstructured":"Aline Brito, Laerte Xavier, Andre Hora, and Marco Tulio Valente. 2018. APIDiff: Detecting API breaking changes. In 2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER). 507\u2013511."},{"key":"e_1_2_1_3_1","article-title":"DiffSearch: A scalable and precise search engine for code changes","author":"Grazia Luca Di","year":"2022","unstructured":"Luca Di Grazia, Paul Bredl, and Michael Pradel. 2022. DiffSearch: A scalable and precise search engine for code changes. IEEE Transactions on Software Engineering.","journal-title":"IEEE Transactions on Software Engineering."},{"key":"e_1_2_1_4_1","volume-title":"ECOOP 2006\u2013Object-Oriented Programming: 20th European Conference, Nantes, France, July 3-7, 2006. Proceedings 20","author":"Dig Danny","year":"2006","unstructured":"Danny Dig, Can Comertoglu, Darko Marinov, and Ralph Johnson. 2006. Automated detection of refactorings in evolving components. In ECOOP 2006\u2013Object-Oriented Programming: 20th European Conference, Nantes, France, July 3-7, 2006. Proceedings 20. 404\u2013428."},{"key":"e_1_2_1_5_1","volume-title":"Proceedings of the 23rd USENIX Security Symposium","author":"Egele Manuel","year":"2014","unstructured":"Manuel Egele, Maverick Woo, Peter Chapman, and David Brumley. 2014. Blanket Execution: Dynamic Similarity Testing for Program Binaries and Components. In Proceedings of the 23rd USENIX Security Symposium, San Diego, CA, USA, August 20-22, 2014.. 303\u2013317."},{"key":"e_1_2_1_6_1","volume-title":"23rd USENIX Security Symposium (USENIX Security 14)","author":"Egele Manuel","year":"2014","unstructured":"Manuel Egele, Maverick Woo, Peter Chapman, and David Brumley. 2014. Blanket execution: Dynamic similarity testing for program binaries and components. In 23rd USENIX Security Symposium (USENIX Security 14). 303\u2013317."},{"key":"e_1_2_1_7_1","volume-title":"Refactoring: improving the design of existing code","author":"Fowler Martin","unstructured":"Martin Fowler. 2018. Refactoring: improving the design of existing code. Addison-Wesley Professional."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/1368088.1368132"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1109\/MSR.2019.00016"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3377811.3380361"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/1572272.1572283"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2012.70"},{"key":"e_1_2_1_13_1","volume-title":"Proceedings of the 33rd International Conference on Software Engineering. 301\u2013310","author":"Kim Heejung","year":"2011","unstructured":"Heejung Kim, Yungbum Jung, Sunghun Kim, and Kwankeun Yi. 2011. MeCC: memory comparison-based clone detector. In Proceedings of the 33rd International Conference on Software Engineering. 301\u2013310."},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/1882291.1882353"},{"key":"e_1_2_1_15_1","doi-asserted-by":"crossref","unstructured":"Raghavan Komondoor and Susan Horwitz. 2001. Using slicing to identify duplication in source code. In International static analysis symposium. 40\u201356.","DOI":"10.1007\/3-540-47764-0_3"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1109\/WCRE.2001.957835"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE48619.2023.00085"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-59762-7_2"},{"key":"e_1_2_1_19_1","doi-asserted-by":"crossref","unstructured":"Paul Dan Marinescu and Cristian Cadar. 2013. KATCH: high-coverage testing of software patches.. In ESEC\/SIGSOFT FSE. 235\u2013245.","DOI":"10.1145\/2491411.2491438"},{"key":"e_1_2_1_20_1","volume-title":"32nd european conference on object-oriented programming (ECOOP","author":"Mezzetti Gianluca","year":"2018","unstructured":"Gianluca Mezzetti, Anders M\u00f8ller, and Martin Toldam Torp. 2018. Type regression testing to detect breaking changes in Node. js libraries. In 32nd european conference on object-oriented programming (ECOOP 2018)."},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1002\/bltj.2229"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2011.41"},{"key":"e_1_2_1_23_1","article-title":"Learning approximate execution semantics from traces for binary function similarity","author":"Pei Kexin","year":"2022","unstructured":"Kexin Pei, Zhou Xuan, Junfeng Yang, Suman Jana, and Baishakhi Ray. 2022. Learning approximate execution semantics from traces for binary function similarity. IEEE Transactions on Software Engineering.","journal-title":"IEEE Transactions on Software Engineering."},{"key":"e_1_2_1_24_1","unstructured":"Juan Altmayer Pizzorno and Emery D Berger. 2024. CoverUp: Coverage-Guided LLM-Based Test Generation. arXiv preprint arXiv:2403.16218."},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.infsof.2013.01.008"},{"key":"e_1_2_1_26_1","volume-title":"A survey on software clone detection research. Queen\u2019s School of computing TR, 541, 115","author":"Roy Chanchal Kumar","year":"2007","unstructured":"Chanchal Kumar Roy and James R Cordy. 2007. A survey on software clone detection research. Queen\u2019s School of computing TR, 541, 115 (2007), 64\u201368."},{"key":"e_1_2_1_27_1","volume-title":"Murali Krishna Ramanathan, and Baishakhi Ray","author":"Ryan Gabriel","year":"2024","unstructured":"Gabriel Ryan, Siddhartha Jain, Mingyue Shang, Shiqi Wang, Xiaofei Ma, Murali Krishna Ramanathan, and Baishakhi Ray. 2024. Code-Aware Prompting: A study of Coverage Guided Test Generation in Regression Setting using LLM. arXiv preprint arXiv:2402.00097."},{"key":"e_1_2_1_28_1","volume-title":"Code clones: Detection and management. Procedia computer science, 132","author":"Saini Neha","year":"2018","unstructured":"Neha Saini and Sukhdip Singh. 2018. Code clones: Detection and management. Procedia computer science, 132 (2018), 718\u2013727."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/2393596.2393670"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2020.2968072"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1109\/MSR.2017.14"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/3611643.3616254"},{"key":"e_1_2_1_33_1","volume-title":"International Conference on Software Engineering (ICSE).","author":"Souza Beatriz","year":"2025","unstructured":"Beatriz Souza and Michael Pradel. 2025. Treefix: Enabling Execution with a Tree of Prefixes. In International Conference on Software Engineering (ICSE)."},{"key":"e_1_2_1_34_1","volume-title":"Performance Problems You Can Fix: A Dynamic Analysis of Memoization Opportunities. In Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 607\u2013622","author":"Toffola Luca Della","unstructured":"Luca Della Toffola, Michael Pradel, and Thomas R. Gross. 2015. Performance Problems You Can Fix: A Dynamic Analysis of Memoization Opportunities. In Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). 607\u2013622."},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2020.3007722"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2020.3007722"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/3180155.3180206"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.18653\/v1"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1109\/QRS.2015.14"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/3540250.3549143"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3567550"}],"container-title":["Proceedings of the ACM on Software Engineering"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3715760","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T15:29:13Z","timestamp":1750346953000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3715760"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,6,19]]},"references-count":41,"journal-issue":{"issue":"FSE","published-print":{"date-parts":[[2025,6,19]]}},"alternative-id":["10.1145\/3715760"],"URL":"https:\/\/doi.org\/10.1145\/3715760","relation":{},"ISSN":["2994-970X"],"issn-type":[{"value":"2994-970X","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,6,19]]}}}