Refactoring : Improving the design of existing code - Fowler, Martin (Addison Wesley, 2000)