🤖 AI Summary
Third-party library updates frequently introduce behavioral breaking changes (BBCs)—regressions undetectable at compile time—while client-side regression tests often fail to catch them due to low coverage or missing assertions. To address this, we propose an implicit contract modeling approach based on API interaction snapshots: via runtime instrumentation, we automatically capture real-world API call sequences issued by clients to the library, generating lightweight behavioral contract snapshots; BBCs are then identified by comparing snapshots across library versions. This approach eliminates the need for manually written assertions and circumvents the coverage bottleneck inherent in conventional compatibility testing. We implement a prototype tool, Gilesi, for the Java platform and evaluate it on multiple real-world library–client pairs. Gilesi successfully detects BBCs missed by existing test suites, significantly improving both detection rate and automation level for behavioral incompatibilities.
📝 Abstract
Modern software development heavily relies on third-party libraries to speed up development and enhance quality. As libraries evolve, they may break the tacit contract established with their clients by introducing behavioral breaking changes (BBCs) that alter run-time behavior and silently break client applications without being detected at compile time. Traditional regression tests on the client side often fail to detect such BBCs, either due to limited library coverage or weak assertions that do not sufficiently exercise the library's expected behavior. To address this issue, we propose a novel approach to client--library compatibility testing that leverages existing client tests in a novel way. Instead of relying on developer-written assertions, we propose recording the actual interactions at the API boundary during the execution of client tests (protocol, input and output values, exceptions, etc.). These sequences of API interactions are stored as snapshots which capture the exact contract expected by a client at a specific point in time. As the library evolves, we compare the original and new snapshots to identify perturbations in the contract, flag potential BBCs, and notify clients. We implement this technique in our prototype tool Gilesi, a Java framework that automatically instruments library APIs, records snapshots, and compares them. Through a preliminary case study on several client--library pairs with artificially seeded BBCs, we show that Gilesi reliably detects BBCs missed by client test suites.