Identifying Bugs in Make and JVM-Oriented Builds

05/14/2020
by   Thodoris Sotiropoulos, et al.
0

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 build results. 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. We evaluate the effectiveness, efficiency, and applicability of our approach by examining hundreds of Make and Gradle projects. Notably, our method is the first to handle Java-oriented build systems. The results indicate that our approach is (1) able to uncover several important issues (245 issues found in 45 open-source projects have been confirmed and fixed by the upstream developers), and (2) orders of magnitude faster than a state-of-the-art tool for Make builds.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
08/27/2021

LaForge: Always-Correct and Fast Incremental Builds from Simple Specifications

Developers rely on build systems to generate software from code. At a mi...
research
01/22/2019

Towards Predicting the Impact of Software Changes on Building Activities

The pervasive adoption of Continuous Integration practices -- both in in...
research
04/12/2021

DockerMock: Pre-Build Detection of Dockerfile Faults through Mocking Instruction Execution

Continuous Integration (CI) and Continuous Deployment (CD) are widely ad...
research
08/19/2023

Repeated Builds During Code Review: An Empirical Study of the OpenStack Community

Code review is a popular practice where developers critique each others'...
research
08/19/2022

Fixing Dockerfile Smells: An Empirical Study

Background. Containerization technologies are widely adopted in the DevO...
research
07/24/2020

Build Scripts with Perfect Dependencies

Build scripts for most build systems describe the actions to run, and th...
research
11/21/2020

An Empirical Study on Failed Error Propagation in Java Programs with Real Faults

During testing, developers can place oracles externally or internally wi...

Please sign up or login with your details

Forgot password? Click here to reset