{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,30]],"date-time":"2026-01-30T05:38:51Z","timestamp":1769751531565,"version":"3.49.0"},"reference-count":29,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2020,11,13]],"date-time":"2020-11-13T00:00:00Z","timestamp":1605225600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/501100000780","name":"European Commission","doi-asserted-by":"publisher","award":["825328"],"award-info":[{"award-number":["825328"]}],"id":[{"id":"10.13039\/501100000780","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2020,11,13]]},"abstract":"<jats:p>Incremental and parallel builds are crucial features of modern build systems. Parallelism enables fast builds by running independent tasks simultaneously, while incrementality saves time and computing resources by processing the build operations that were affected by a particular code change. Writing build definitions that lead to error-free incremental and parallel builds is a challenging task. This is mainly because developers are often unable to predict the effects of build operations on the file system and how different build operations interact with each other. Faulty build scripts may seriously degrade the reliability of automated builds, as they cause build failures, and non-deterministic and incorrect outputs.<\/jats:p>\n          <jats:p>To reason about arbitrary build executions, we present BuildFS, a generally-applicable model that takes into account the specification (as declared in build scripts) and the actual behavior (low-level file system operation) of build operations. We then formally define different types of faults related to incremental and parallel builds in terms of the conditions under which a file system operation violates the specification of a build operation. Our testing approach, which relies on the proposed model, analyzes the execution of single full build, translates it into BuildFS, and uncovers faults by checking for corresponding violations.<\/jats:p>\n          <jats:p>We evaluate the effectiveness, efficiency, and applicability of our approach by examining 612 Make and Gradle projects. Notably, thanks to our treatment of build executions, our method is the first to handle JVM-oriented build systems. The results indicate that our approach is (1) able to uncover several important issues (247 issues found in 47 open-source projects have been confirmed and fixed by the upstream developers), and (2) much faster than a state-of-the-art tool for Make builds (the median and average speedup is 39X and 74X respectively).<\/jats:p>","DOI":"10.1145\/3428212","type":"journal-article","created":{"date-parts":[[2020,11,24]],"date-time":"2020-11-24T23:40:14Z","timestamp":1606261214000},"page":"1-30","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["A model for detecting faults in build specifications"],"prefix":"10.1145","volume":"4","author":[{"given":"Thodoris","family":"Sotiropoulos","sequence":"first","affiliation":[{"name":"Athens University of Economics and Business, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Stefanos","family":"Chaliasos","sequence":"additional","affiliation":[{"name":"Athens University of Economics and Business, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Dimitris","family":"Mitropoulos","sequence":"additional","affiliation":[{"name":"Athens University of Economics and Business, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Diomidis","family":"Spinellis","sequence":"additional","affiliation":[{"name":"Athens University of Economics and Business, Greece"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2020,11,13]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSM.2007.4362624"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/2591062.2591135"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/1138912.1138928"},{"key":"e_1_2_2_4_1","volume-title":"Debian popularity contest. https:\/\/popcon.debian.org\/","author":"Avery Pennarun B. A.","year":"2020"},{"key":"e_1_2_2_5_1","volume-title":"Build and test software of any size, quickly and reliably. https:\/\/bazel.build","year":"2020"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10664-017-9510-8"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2151024.2151043"},{"key":"e_1_2_2_8_1","volume-title":"No Starch Press","author":"Calcote J.","year":"2020"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/2950290.2950358"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3106237.3106297"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-06410-9_43"},{"key":"e_1_2_2_12_1","volume-title":"2011 USENIX Annual Technical Conference (USENIX)","author":"Coetzee D.","year":"2011"},{"key":"e_1_2_2_13_1","volume-title":"Gradle task ordering constraints. https:\/\/github.com\/SpineEventEngine\/base\/issues\/516","author":"Dashenkov D.","year":"2020"},{"key":"e_1_2_2_14_1","volume-title":"sbuild. https:\/\/wiki.debian.org\/sbuild","year":"2020"},{"key":"e_1_2_2_15_1","volume-title":"https:\/\/wiki.debian.org\/UltimateDebianDatabase\/","year":"2020"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133956.3134059"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2858965.2814316"},{"key":"e_1_2_2_18_1","volume-title":"Make-a program for maintaining computer programs. Software: Practice & Experience, 9 ( 4 ): 255-265","author":"Feldman S. I.","year":"1979"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2660193.2660239"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2771783.2771784"},{"key":"e_1_2_2_21_1","volume-title":"Generating prerequisites automatically. https:\/\/www.gnu.org\/software\/make\/manual\/html_node\/AutomaticPrerequisites.html","author":"Make GNU","year":"2020"},{"key":"e_1_2_2_22_1","volume-title":"Handling tools that produce many outputs. https:\/\/www.gnu.org\/software\/automake\/manual\/html_node\/ Multiple-Outputs.html","author":"Make GNU","year":"2020"},{"key":"e_1_2_2_23_1","volume-title":"Build cache. https:\/\/docs.gradle.org\/current\/userguide\/build_cache.html","author":"Gradle Inc.","year":"2020"},{"key":"e_1_2_2_24_1","volume-title":"Developing custom Gradle plugins. https:\/\/docs.gradle.org\/current\/userguide\/custom_plugins.html","author":"Gradle Inc.","year":"2020"},{"key":"e_1_2_2_25_1","volume-title":"Gradle vs Maven: Performance comparison. https:\/\/gradle.org \/gradle-vs-maven-performance\/","author":"Gradle Inc.","year":"2020"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2642937.2643013"},{"key":"e_1_2_2_27_1","volume-title":"Building Software Teams: Ten Best Practices for Efective Software Development. \" O'Reilly Media","author":"Visser J.","year":"2016"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3180155.3180254"},{"key":"e_1_2_2_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3180155.3180198"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3428212","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3428212","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T22:02:56Z","timestamp":1750197776000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3428212"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,11,13]]},"references-count":29,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2020,11,13]]}},"alternative-id":["10.1145\/3428212"],"URL":"https:\/\/doi.org\/10.1145\/3428212","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,11,13]]},"assertion":[{"value":"2020-11-13","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}