Software Migration and Re-engineering

Occasionally it is not enough to enhance software by adding new functionalities or extending existing ones. Moreover, software improvement can be difficult when the application is too old, poorly documented or the technologies it has been built upon are now outdated. Re-engineering and software migration is essential for re-creating legacy software or porting applications to adapt to new platforms and evolving ecosystems

The most common cases when you should consider modernization

  1. The programming language, the platform or some of the applied technologies are not supported anymore. The lack of upgrades, bug fixes and security updates leaves the software vulnerable, furthermore, it will be much harder and a lot more expensive to maintain it its original form.
  2. In the field of ever-changing Information Technology, it is entirely common to leave technologies behind and move on to more innovative solutions. A previously widely used technology can grow obsolete and outdated in a short amount of time.
  3. Following market trends and customer needs it is vital to improve software products. These modifications often require more than adding new functionalities to a well designed, modular application. Sometimes the necessary alteration is more complex and demands re-engineering or software migration. For instance when converting a desktop application into a web application or cloud based service.

There are many ways to modernize existing software, including migration, re-hosting, and re-engineering.

Migration usually refers to one of the following processes: transfer the software from one programming language to another, replace the underlying database, or renew the platform (e.g., migrate from one operating system to another). In many cases, such improvement can be achieved by using automated tools to reduce time and expenses.

Re-hosting is a complex procedure; it includes hardware exchange, middleware or operating system replacement, and database migration. However, it requires little or no change in the legacy software, the application will simply be relocated to a different environment.
Re-hosting can be very efficient and can reduce the expenses of operation and maintenance. Besides, it can give access to more innovative web-based services, and integrated environments.

Another approach is package implementation, where – instead of the time consuming and expensive re-engineering – the software can be transformed by replacing it entirely or partially with an off-the-shelf solution. Accounting and management applications are good examples of pre-packaged software.

Re-engineering is an efficient and agile approach to software modernization. It refers to the evaluation, analyzation and modification process through which an obsolete software product or system is re-implemented to improve functionality, performance, maintainability and overall quality.
Re-engineering is very useful in several situations, for example when the programming language the software was written on is old and less maintainable, when the architectural design or the implementation doesn’t meet the current standards, or when the application is expected to work on a different platform.

Re-engineering can be as simple and cost-effective as code translation using a translation tool to move the code from one language to another. However, in most cases it is a long-term and complicated procedure which contains many steps including source code translation, structural and architectural improvements, re-documentation, modularisation, data migration and finally the design and implementation of additional functionalities.
The most challenging part is often the initial step of understanding the existing software. Without an accurate and detailed documentation reading and interpreting the source code can be remarkably troublesome, especially when it is written on a rarely used, old language, implementing huge methods without factorization.

Re-engineering often starts with reverse engineering, to understand functionalities, to recover lost design and specification details, and to reconstruct the original concept. It doesn’t involve any changes in the existing product, only a thorough examination of it. However, it is essential for the ultimate success of re-engineering. If the higher abstraction – synthesized during reverse engineering – is incorrect or lacks consistency, the subsequent steps relying on it will be destined to fail.
After reconstructing the original concept and requirements, these need to be compared to the current goals and needs. Some of the functionalities might turn out to be obsolete while new ones are going to be required.

With the newly developed specification, it is possible to follow the traditional software development life-cycle. First, we create technical and design documentation, including architectural design, as well as data- and control-flow diagrams. The design must be evaluated and approved since the success of re-engineering depends on its adequacy.
During the implementation phase, redundant functionalities can be removed, and the product can be rebuilt utilizing the most suitable technologies, frameworks, and programming languages.
New functionalities must not be implemented before re-engineering is completed. It is essential to compare the functionalities, behavior, and performance of the existing software to the target software when assessing the success of the re-engineering process. Once the functional equivalence is reached, the software can be refashioned to adapt more closely to the business requirements and market trends.

The benefits of software modernization

Any type of software modernization will increase performance, by optimizing the source code and the database, utilizing innovative technologies, or migrating to a better platform.
In many cases – such as re-hosting, applying off-the-shelf packages, or migrating the system – software transformation is less expensive and risky than starting the development from scratch.
Besides of making a software more maintainable, reduce the costs of operation, and improve performance, – as part of re-engineering – new functionalities can be incorporated as well.
Modernization will not only help the application preserve its quality, but it is also an excellent opportunity to increase its value and reinforce its leading place on the demanding market.
At Blueship Vietnam, we make sure your software adapts perfectly to the continuously changing hardware and software environment, should it be a web, a cloud, or a desktop application.