Migracja kodu to przenoszenie kodu programistycznego z jednego systemu do drugiego. Istnieją trzy różne poziomy migracji kodu o rosnącej złożoności, kosztach i ryzyku. Prosta migracja polega na przejściu z języka do nowszej wersji. Drugi, bardziej skomplikowany poziom migracji polega na przejściu na inny język programowania. Migracja na zupełnie nową platformę lub system operacyjny to najbardziej złożony rodzaj migracji.
Pierwszy typ migracji kodu to proste przejście z jednej wersji języka do nowszej, ale składniowo innej wersji. Jest to najłatwiejsza z tras migracji, ponieważ podstawowa struktura i wiele konstrukcji programistycznych zwykle się nie zmienia. W wielu przypadkach stary kod faktycznie działałby, ale nowe i ulepszone procedury lub modularyzację można ulepszyć przez przekształcenie kodu w celu dopasowania do natury nowego języka. Dlatego migracja kodu prowadziłaby do większej wydajności w wykonywaniu.
Drugim poziomem migracji kodu byłaby migracja do zupełnie innego języka programowania. Może to być spowodowane przeniesieniem do nowego systemu oprogramowania lub wdrożeniem innego systemu zarządzania relacyjnymi bazami danych (RDMS). Ten rodzaj migracji często wymaga, aby programiści nauczyli się zupełnie nowego języka lub aby asystowali przy migracji nowych programistów. W takim przypadku cały program musi zostać przepisany od podstaw. Mimo że większość konstrukcji prawdopodobnie istnieje w obu językach, dokładna składnia jest zwykle zupełnie inna.
Najbardziej złożonym przykładem migracji kodu jest migracja do całkowicie nowej platformy i/lub systemu operacyjnego (OS). Zmienia to nie tylko język programowania, ale także kod maszynowy stojący za językiem. Podczas gdy większość nowoczesnych języków programowania chroni programistę przed kodem niskiego poziomu, znajomość systemu operacyjnego i sposobu jego działania jest niezbędna do tworzenia kodu, który jest wydajny i wykonuje się zgodnie z oczekiwaniami.
Niezależnie od rodzaju migracji podejście powinno być takie samo. Zespół ds. migracji lub programista powinien podzielić każdy moduł, funkcję i podprogram na jego cel i schemat blokowy programu. Jest to inżynieria wsteczna oryginalnego cyklu życia oprogramowania (SDLC). Gdy te moduły i funkcje zostaną nakreślone zgodnie z ich przeznaczeniem na wysokim poziomie, można je przepisać i przetestować w sposób posegregowany w nowym języku. Jak w przypadku każdego zaawansowanego projektu programistycznego, odpowiednie planowanie i dokumentacja są kluczem do udanej migracji kodu.