Improving the design of existing
software code. Refactoring doesn't change the observable behavior of the software; it improves its internal structure. For example, if a
programmer wants to add new functionality to a program, he may decide to refactor the program first to simplify the addition of new functionality in order to prevent
software entropy.