Reasons to re-engineer a software include:
P : Allow legacy software to quickly adapt to the changing requirements
Q : Upgrade to newer technologies/platforms/paradigm (for example, object-oriented)
R : Improve software maintainability
S : Allow change in the functionality and architecture of the software code1
P, R and S only
2
P and R only
3
P, Q, R and S
4
P, Q and R only