How would you refactor a legacy C++ codebase to improve testability and maintainability for autonomy software?