Refactoring: Improving the Design of Existing Code
Martin Fowler
November 2018