Refactoring: Improving the Design of Existing Code (1999)

by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts