Refactoring
by
Martin Fowler
2nd edition