Re-engineering and refactoring
Information technologies exist many years and many companies use them actively these days. They may have software which has gone through many versions and upgrades. After few years of active software development it is possible to come to a situation when you need to completely rework your software. This may occur for many reasons: software isn’t stable, slow; it’s impossible to extend it any further or the software has been developed using old technologies and languages and now it needs to be transferred on new platforms using up-to-date technologies.
Sometimes companies may not have any other choice but to use re-engineering or refactoring technologies for their software. Both processes are difficult and time/cost consuming but at the same time with these investments any company can reduce their support costs, increase the amount of sales and productivity of their employees, and attract new clients. As a result investments into re-engineering or refactoring can be a real profit generator tool for a company without introducing to market radically new software with expensive marketing campaign.
In both cases it is necessary to make full re-engineering or refactoring of software. These procedures are very difficult and require deep knowledge and understanding of technologies, development methodologies, methods and approaches used in re-engineering and refactoring.
Re-engineering supposes that software will be developed from the beginning using new technologies without modifying its external functional behavior or existing functionality. Refactoring supposes that software will be redeveloped completely or partially on the same technology using the existing parts of source code. Both approaches suppose that team will consist of highly experienced business analysts, architects, developers and testers who know all aspects related to refactoring and re-engineering. All processes must be inextricably linked and integral with the quality control process for providing the appropriate quality of new software.