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.
翻译:(a) 将遗留系统替换为新的系统,(b) 将遗留系统的各个部分逐步从遗留系统迁移到新的系统。 递增移徙使开发者能够更好地控制移徙过程中可能出现的风险。然而,这一战略更为复杂,因为它要求将遗留系统分解为不同部分,例如一组文件,并界定在迁移过程中的迁移顺序。据文献,我们没有支持开发者开展这些活动的两种主要策略。目标:本文介绍了一种方法,名为“移徙扩展”,以支持将应用程序从一个来源语言逐步迁移到另一个目标语言。 递增移徙使开发者能够更好地控制在迁移过程中可能出现的风险。然而,作为一个新颖的策略,我们的方法依赖于从开发者进行的迁移过程中学习到排序的模型算法,并界定他们迁移在迁移过程中的顺序。 方法:我们验证我们用于实时的迁移方法,从一个名为“移徙扩展”的工具,从一个来源语言迁移到另一个目标语言,从一个源码,一个正式的迁移到一个源码,通过我们书面的迁移到一个源码,通过我们的书面的迁移到一个方向,一个新的语言,通过我们的迁移模式到一个方向,通过我们的迁移模式到一个方向,一个方向,通过我们的迁移定义。