Breaking-Good: Explaining Breaking Dependency Updates with Build Analysis
Frank Reyes, Benoit Baudry, Martin Monperrus
TL;DR
Dependency updates frequently cause compilation failures due to API or behavior changes. Breaking-Good combining build-log analysis with dependency-tree differencing automatically explains these breakages and suggests fixes, categorized into four error types with templates. Evaluation on 243 real-world updates shows root causes are identified in 70% of cases, with substantial impact from indirect dependencies and Java-version mismatches; a user study confirms explanations are useful and actionable. The approach enables tighter integration into development workflows and advances understanding of breaking updates, including rare indirect-dependency breakages.
Abstract
Dependency updates often cause compilation errors when new dependency versions introduce changes that are incompatible with existing client code. Fixing breaking dependency updates is notoriously hard, as their root cause can be hidden deep in the dependency tree. We present Breaking-Good, a tool that automatically generates explanations for breaking updates. Breaking-Good provides a detailed categorization of compilation errors, identifying several factors related to changes in direct and indirect dependencies, incompatibilities between Java versions, and client-specific configuration. With a blended analysis of log and dependency trees, Breaking-Good generates detailed explanations for each breaking update. These explanations help developers understand the causes of the breaking update, and suggest possible actions to fix the breakage. We evaluate Breaking-Good on 243 real-world breaking dependency updates. Our results indicate that Breaking-Good accurately identifies root causes and generates automatic explanations for 70% of these breaking updates. Our user study demonstrates that the generated explanations help developers. Breaking-Good is the first technique that automatically identifies causes of a breaking dependency update and explains the breakage accordingly.
