Code migration is the movement of programming code from one system to another. There are three distinct levels of code migration with increasing complexity, cost and risk. Simple migration involves the movement from language to a newer version. A second, more complicated level of migration involves moving to a different programming language. Migrating to an entirely new platform or operating system is the most complex type of migration.
The first type of code migration is a simple movement from one version of a language to a newer, but syntactically different version. This is the easiest of migration routes as the basic structure and much of the programming constructs usually do not change. In many cases, the old code would actually work, but new and improved routines or modularization can be improved by retooling the code to fit the nature of the new language. Therefore migrating the code would lead to more efficiency in execution.
The second level of code migration would be migrating to a completely different programming language. This could be caused by porting to a new software system or implementing a different relational database management system (RDMS). This type of migration often requires that programmers learn an entirely new language, or new programmers be brought in to assist with the migration. In this case, the entire program must be rewritten from the ground up. Even though most of the constructs are likely to exist in both languages, the precise syntax is usually completely different.
The most complex example of code migration is migrating to an entirely new platform and/or operating system (OS). This not only changes the programming language, but also the machine code behind the language. While most modern programming languages shield the programmer from this low level code, knowledge of the OS and how it operates is essential to producing code that is efficient and executes as expected.
Regardless of the type of migration, the approach should be the same. The migration team or programmer should break each module, function, and sub-routine into its purpose and flow chart the program. This is a reverse engineering of the original software development life cycle (SDLC). Once these modules and functions are charted at their high-level purpose, they can be rewritten and tested in a compartmentalized fashion in the new language. Like any advanced computer programming project, proper planning and documentation are the key to a successful code migration.