  Context: A Legacy system can be defined as a system that significantly
resists modification and evolution. According to the literature, there are two
main strategies to migrate a legacy system: (a) to replace the legacy system by
a new one, (b) to incrementally migrate parts from the legacy system to the new
one. Incremental migration allows developers to better control the risks that
may occur during the migration process. However, this strategy is more complex
because it requires decomposition of the legacy system into different parts,
e.g. a set of files, and to define the order of migration of them along the
migration process. To our knowledge, there is no approach to support developers
on those activities. Objective: This paper presents an approach, named
MigrationExp, to support incremental language migrations of applications from
one source language to another target language. MigrationExp recommends the
files that should be migrated first in a particular migration iteration. As a
novelty, our approach relies on a ranking model learned, using a
learning-to-rank algorithm, from migrations made by developers. Method: We
validate our approach in the context of the migrations of Android apps, from
Java to Kotlin, a new official language for Android. We train our model using
migrations of Java code to Kotlin written by developers on open-source
applications. Results: The results show that, on the task of proposing files to
migrate, our approach outperforms a previous migration strategy proposed by
Google, in terms of its ability to accurately predict empirically observed
migration orders. Conclusion: Since most Android applications are written in
Java, we conclude that approaches to support developers such as MigrationExp
may significantly impact the development of Android applications.
