Show simple item record

dc.contributor.authorRice, Andrewen
dc.contributor.authorLicker, Nandoren
dc.date.accessioned2019-01-29T00:30:58Z
dc.date.available2019-01-29T00:30:58Z
dc.identifier.urihttps://www.repository.cam.ac.uk/handle/1810/288468
dc.description.abstractAutomated build systems are routinely used by software engineers to minimize the number of objects that need to be recompiled after incremental changes to the source files of a project. In order to achieve efficient and correct builds, developers must provide the build tools with dependency information between the files and modules of a project, usually expressed in a macro language specific to each build tool. Most build systems offer good support for well-known languages and compilers, but as projects grow larger, engineers tend to include source files generated using custom tools. In order to guarantee correctness, the authors of these tools are responsible for enumerating all the files whose contents an output depends on. Unfortunately, this is a tedious process and not all dependencies are captured in practice, which leads to incorrect builds. We automatically uncover such missing dependencies through a novel method that we call build fuzzing. The correctness of build definitions is verified by modifying files in a project, triggering incremental builds and comparing the set of changed files to the set of expected changes. These sets are determined using a dependency graph inferred by tracing the system calls executed during a clean build. We evaluate our method by exhaustively testing build rules of open-source projects, uncovering issues leading to race conditions and faulty builds in 31 of them. We provide a discussion of the bugs we detect, identifying anti-patterns in the use of the macro languages. We fix some of the issues in projects where the features of build systems allow a clean solution.
dc.titleDetecting Incorrect Build Rulesen
dc.typeConference Object
dc.identifier.doi10.17863/CAM.35755
dcterms.dateAccepted2018-12-12en
rioxxterms.versionAM
rioxxterms.licenseref.urihttp://www.rioxx.net/licenses/all-rights-reserveden
rioxxterms.licenseref.startdate2018-12-12en
dc.contributor.orcidRice, Andrew [0000-0002-4677-8032]
rioxxterms.typeConference Paper/Proceeding/Abstracten
datacite.issupplementedby.doi10.17863/CAM.35270en
pubs.conference-name41st ACM/IEEE International Conference on Software Engineeringen
pubs.conference-start-date2019-05-25en


Files in this item

Thumbnail

This item appears in the following Collection(s)

Show simple item record