Что такое рефакторинг кода и когда он необходим?

Что такое рефакторинг кода и когда он необходим?