Refactoring Legacy Systems

A pragmatic handbook for developers inheriting old codebases: characterization tests, seams, incremental rewrites and how to argue for the work.