A software engineering practice which began in (but is not restricted to) dynamically typed object oriented programming circles. Literally, it is the practice of moving functionality from one place to another internally to the code without changing the external interface.

The central drive behind refactoring is making maintenance easier; this happens for three central reasons:

Refactoring is best-known in the Smalltalk and Extreme Programming circles, but is also a characteristic of good FORTH, and can be applied to nearly any other programming paradigm with good results.