SANER 2025
Tue 4 - Fri 7 March 2025 Montréal, Québec, Canada

Legacy software systems often lack extensive testing, but are assumed to behave correctly after years of bug fixes and stable operation. Migrating or modernizing these systems is challenging because there is little support for preventing regressions. Test carving addresses this problem by generating unit tests based on the current behavior of the system, treating it as an implicit oracle. In this paper, we present TESTGEN, a multi-language tool that generates unit tests by carving them from execution traces. TESTGEN processes method calls, including their receivers, arguments, and results, to recreate these invocations as unit tests. Its model-based approach allows it to support multiple languages. We detail how it can be extended to handle additional languages. TESTGEN aims to generate tests that are human-readable and maintainable over time. To achieve this, it reconstructs values as source code rather than relying on deserialization. We evaluate TESTGEN by generating tests for both Java and Pharo applications.