Refactoring: Improving the design of existing code (1999)

by M Fowler