A change to the system that leaves its behavior unchanged, but enhances some nonfunctional quality - simplicity, flexibility, understandability, performance
The process of rearranging your classes and methods so that common code is more easily inherited or delegated to Refactoring allows you to avoid duplicating code
Refactoring means improving the design of existing code In the context of test driven development, code is refactored to removed duplication and express intent as soon as it is written and passes the tests
iterating software to improve its understandability and maintainability without modifying its functionality