40年COBOL老程序不兼容新系统怎么办?让AI把它编译成Java

去年,美国急聘精通上古语言 COBOL 的程序员,以帮助修复 40 多年历史软件系统的新闻吸引了人们的眼球。像 COBOL 这样的古老语言,今天已经不为年轻程序员们所知,但又有很多重要代码需要维护,能不能让人工智能来解决这个矛盾呢?
去年,IBM 展示了人工智能可以通过更新遗留代码的方式帮助人们解决繁琐的软件维护工作。现在,这家公司又提出了一种基于 AI 的重新编码方式来应对旧的应用程序,帮助它们在当今的计算平台上运转。

IBM 提出的这个最新工具叫做 Mono2Micro 和 Application Modernization Accelerator(AMA),为应用架构师带来了从旧程序中获取新价值的能力。据 IBM 研究院混合云服务总监 Nick Fuller 介绍,这是让 AI 把 COBOL 写成的程序自动转换为 Java 的第一步。

虽然迈出了一步,但 AI 目前还不能做太多的事,Fuller 解释说,这些最新的人工智能方法还只能将非模块化单片程序的旧机器码分解为独立的微服务。尽管 AMA 工具实际上是为现代化 COBOL 语言而设计的,但是在翻译编程语言时,我们还需再迈出一步,因为在这个节点上,它仅提供现代化过程中的增量步骤。Fuller 表示:「语言翻译是 AI 的一项基本挑战,我们正在努力使其中的一些旧代码以现代软件使用的语言运行。」

Mono2Micro 工具:
https://www.ibm.com/support/pages/node/6398670

与此同时,IBM 最新的 AI 工具提供了一些其他的能力。例如 Mono2Micro 会首先分析旧代码,揭示其中所有的隐藏连接,比如包含大量调用的基础业务逻辑中的多个组件,以及彼此之间的联系。而如果这些工作是让人类工程师来完成的话,则会非常费时费力。
Mono2Micro 界面图。

Mono2Micro 利用 AI 集群技术将相似的代码分组在一起,从而更清晰地展示了代码组之间的交互方式。Mono2Micro 在提取代码后,将静态(在程序运行之前对其进行分析)和动态(在程序运行期间对其进行分析)地对源代码和目标代码进行分析。

之后,该工具将基于 Java 的单片程序及其相关的业务逻辑和用户界面重构为微服务。将单片程序重构为具有特定功能的独立微服务,可以最大程度地减少软件作为单片程序时的连接,还能在不更改外部行为的情况下更改应用程序的结构。

AMA 工具的目的是分析和重构以旧语言(COBOL、PL/I)编写的程序。AMA 工具利用对源代码的静态分析,以及对应用程序结构的理解,能够创建出代表旧应用程序的图。当与深度学习方法结合使用时,这种基于图的方法可以促进数据的保留。

当数据输入是代码,功能是分析时,IBM 的 AI 策略解决了机器学习的关键挑战:数量和多重含义。我们知道,能被遗留下来执行重要任务的应用通常都保有成百上千,甚至数百万行代码。在这种情况下,通过嵌入的概念将机器学习(ML)技术应用于这些代码数据,会使工作变得更加高效。

这些嵌入层代表了一种将数据转换为数值的方法,其强大的能力在于将大量具有多种可能含义的代码映射到数值上,就像翻译人类自然语言的算法使用词嵌入把文字数值化。由于和代码分析有关,这一方法也可以用图的方式解决。

「嵌入层是强大的,没有它们你几乎无法实现任何有效的机器学习系统,」Fuller 说道。

他补充说,在代码分析的情形下,通过复制应用程序的功能,机器学习系统可以更好地把古老的应用程序重构为微服务。不过 Fuller 还是指出:「当机器学习处理之后,我们的工作还没有完成。但就人们希望获得的结果而言,这些工具可以解决大约 70% 的工作,即把重要应用重构为微服务架构。」

参考内容:
https://spectrum.ieee.org/tech-talk/computing/software/ai-legacy-software-analysis-tool