{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:41:54Z","timestamp":1750308114102,"version":"3.41.0"},"reference-count":15,"publisher":"Association for Computing Machinery (ACM)","issue":"4","license":[{"start":{"date-parts":[[2005,5,17]],"date-time":"2005-05-17T00:00:00Z","timestamp":1116288000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGSOFT Softw. Eng. Notes"],"published-print":{"date-parts":[[2005,7]]},"abstract":"<jats:p>Refactoring usually involves statically analyzing source code to understand which transformations safely preserve execution behavior of the program. However, static analysis may not scale well for large programs when analysis results are too general, when tools for analyzing the source code are unwieldy, or when the tools simply do not exist. In such cases, it can be simpler to analyze the program at runtime to gather answers needed for safe code changes. I show how dynamic data can guide refactoring of a single data structure into a hierarchy of classes. Specifically, I show how I refactored the gcc compiler to cut its use of heap memory. In order to partition the declaration data structure into more efficiently-sized parts, I used data structure field access traces to automatically identify how the data structure might be refactored. I also identified other potential refactorings of the data structure using concept analysis. These results then guided by-hand modifications to the compiler. I finally evaluated what size test cases would be needed to gather adequate information to correctly perform the refactoring. The case study showed the refactoring could be performed with the dynamic information, but without traces from an exhaustive set of test cases, some fields would be moved incorrectly.<\/jats:p>","DOI":"10.1145\/1082983.1083248","type":"journal-article","created":{"date-parts":[[2005,11,7]],"date-time":"2005-11-07T19:28:32Z","timestamp":1131391712000},"page":"1-7","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":0,"title":["Refactoring gcc using structure field access traces and concept analysis"],"prefix":"10.1145","volume":"30","author":[{"given":"Robert W.","family":"Bowdidge","sequence":"first","affiliation":[{"name":"Apple Computer, Cupertino, CA"}]}],"member":"320","published-online":{"date-parts":[[2005,5,17]]},"reference":[{"key":"e_1_2_1_1_1","first-page":"36","volume-title":"Experiments in Identifying Reusable Abstract Data Types in Program Code. In &lt","author":"Canfora G.","year":"1993"},{"volume-title":"E. Casais & C","year":"1993","author":"Casais E.","key":"e_1_2_1_2_1"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/301618.301635"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1109\/32.908957"},{"volume-title":"Refactoring: Improving the Design of Existing Code","year":"1999","author":"Fowler M.","key":"e_1_2_1_5_1"},{"volume-title":"Formal Concept Analysis - Mathematical Foundations","year":"1999","author":"Ganser B.","key":"e_1_2_1_6_1"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/152388.152389"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSM.2001.972794"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1002\/(SICI)1096-9942(1997)3:4%3C253::AID-TAPO3%3E3.3.CO;2-I"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/353926.353940"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/1028976.1029003"},{"key":"e_1_2_1_14_1","first-page":"112","volume-title":"Aspect Mining Through the Formal Concept Analysis of Execution Traces. In &lt","author":"Tonella P.","year":"2004"},{"volume-title":"Qt cross-platform GUI library, version 3.3.2. www.trolltech.com","year":"2004","author":"Trolltech","key":"e_1_2_1_15_1"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/302405.302629"},{"key":"e_1_2_1_17_1","first-page":"127","volume-title":"7th National Conference on Artificial Intelligence KII-2000","author":"Yevtushenko S. A.","year":"2000"}],"container-title":["ACM SIGSOFT Software Engineering Notes"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1082983.1083248","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/1082983.1083248","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T16:08:14Z","timestamp":1750262894000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/1082983.1083248"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2005,5,17]]},"references-count":15,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2005,7]]}},"alternative-id":["10.1145\/1082983.1083248"],"URL":"https:\/\/doi.org\/10.1145\/1082983.1083248","relation":{"is-identical-to":[{"id-type":"doi","id":"10.1145\/1083246.1083248","asserted-by":"subject"}]},"ISSN":["0163-5948"],"issn-type":[{"type":"print","value":"0163-5948"}],"subject":[],"published":{"date-parts":[[2005,5,17]]},"assertion":[{"value":"2005-05-17","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}