Automated Decomposition of Build Targets
Venue
Proceedings of the 37th International Conference on Software Engineering, IEEE Computer Society (2015), pp. 123-133
Publication Year
2015
Authors
Mohsen Vakilian, Raluca Sauciuc, J. David Morgenthaler, Vahab Mirrokni
BibTeX
Abstract
A (build) target specifies the information that is needed to automatically build a
software artifact. This paper focuses on underutilized targets—an important
dependency problem that we identified at Google. An underutilized target is one
with files not needed by some of its dependents. Underutilized targets result in
less modular code, overly large artifacts, slow builds, and unnecessary build and
test triggers. To mitigate these problems, programmers decompose underutilized
targets into smaller targets. However, manually decomposing a target is tedious and
error-prone. Although we prove that finding the best target decomposition is
NP-hard, we introduce a greedy algorithm that proposes a decomposition through
iterative unification of the strongly connected components of the target. Our tool
found that 19,994 of 40,000 Java library targets at Google can be decomposed to at
least two targets. The results show that our tool is (1) efficient because it
analyzes a target in two minutes on average and (2) effective because for each of
1,010 targets, it would save at least 50% of the total execution time of the tests
triggered by the target.
