Re-engineering and refactoring are interventions aimed at evolving software solutions improving aspects of a technological nature, with particular focus on the elements from time to time considered more important than the specific environment, such as performance, maintainability, innovation, interoperability, scalability, availability, reliability.
The term re-engineering (reengineering) means an activity of re-deployment of an existing software system breakthrough to improve the enforcement and architectural aspects. It may include: re-documentation, restructuring and rewriting of the software (or even all) without changing the feature set that it creates.
Refactoring is a structured technique to modify the internal structure of code portions without changing its external behavior. It is applied to improve some non-functional characteristics of the software. The advantages include an improvement readability of maintainability, extensibility and reusability of code and the reduction of its complexity, possibly by introducing a posteriori an architectural scheme.