Modern Software applications depend on libraries for their development process as they benefit from reusable functionalities to accelerate the development process. These libraries, like all software applications, release new versions of their software with new features, performance improvements, and issue fixes. Therefore, to benefit from these changes in the libraries, the clients who depend on these libraries should also be updated. Updating dependencies can be a challenge when new versions of the library introduce incompatible changes compared with its previous version. These incompatibilities, also known as breaking changes, can impact clients that depend on them.

In their recently published work [1], HASEL members Dhanushka Jayasuriya, Valerio Terragni and Kelly Blincoe, together with Jens Dietrich from the School of Engineering and Computer Science at Victoria University of Wellington and Samuel Ou a research assistant at University of Auckland, studied how open-source software repositories maintain their dependencies and examined the impact of breaking changes on the client projects. Breaking changes can be divided into two categories: syntactic and semantic (or behavioral) breaking changes. For this analysis, we focused only on syntactic breaking changes (those that cause compilation or linkage errors).

We performed our analysis using open-source Java projects built with Maven. Our results indicated that 71.60% of the dependencies used in these open-source projects were not kept up-to-date and these outdated dependencies were distributed among 43.79% of the client projects.

To identify the impact of syntactic breaking changes on client projects, we updated these outdated dependencies and attempted to compile the projects. 11.58% of the dependency updates resulted in compilation errors indicating that the dependency update contained a breaking change that impacts the client project. For the next steps, we conducted a manual analysis to detect the most common change in the library that contributed to these syntactic breaking changes. Our results showed that changes in transitive dependencies was the leading cause for the syntactic breaking changes. The top two changes in a library that introduce syntactic BCs are changing the result type of a method in a class and deleting an API package. Moreover, we observed that nearly half of these syntactic breaking changes violated the semantic versioning principle by introducing breaking changes in non-major updates.

Interested in learning more about our study? Find more about the study at https://dl.acm.org/doi/pdf/10.1145/3597926.3598147. The replication package of the study is available at https://zenodo.org/records/7978507

[1] Dhanushka Jayasuriya, Valerio Terragni, Jens Dietrich, Samuel Ou, and Kelly Blincoe. 2023. Understanding Breaking Changes in the Wild. In ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA). In press. https://doi.org/10.1145/3597926.3598147