这个问题与移民项目有关。目前,遗留应用程序位于ColdFusion中,我们希望将其迁移到Spring Framework。
所以我的主要问题是:
我知道有些人可能认为这是一个非常开放的问题,但这是我的第一个迁移项目,我从未有过任何迁移项目的经验,以及在这里寻找一些有用的指导。
答案 0 :(得分:6)
移民项目充满了危险。
第一个危险是,“这是昂贵而痛苦的。让我们重建 从头开始,实现任何新的想法或功能 任何营销人员/经理/程序员都使用结构化方法 而且等等等等......“这条道路导致厄运,因为
1)它是一个开放式的工作量,
2)没有人真正知道旧系统的作用(最近看过规范?)因此你最终会重新发现新系统上线后的旧系统,会给组织的巨大痛苦和损害用新软件完成它的工作。通常情况下,新系统永远不会赶上旧系统,因此重写会导致丑陋的死亡。
进行此类迁移的正确方法是:坚持单独保留功能,并转换现有系统。没有新的好东西,功能,方法。
这种坚持有其自身的麻烦:组织经常需要做出一些改变 出于迁移发生的窗口期间的生存原因。
为了解决这个问题,您确实需要一个自动迁移工具,因此“无功能更改”规则仅适用于实际转换期间,因此尽可能短。移植工具的开发人员可以花一些时间来构建它并彻底测试转换工具;与此同时,组织可以通过常规方法增强遗留系统。当迁移工具准备就绪时......拉动触发器,转换代码,修补问题并测试结果系统的有效性。
一旦系统迁移完毕,您就可以考虑进行彻底的重组或重塑,因为我们知道基本功能仍然合理。
无论您选择何种自动迁移工具,都需要注意它所生成的代码在新环境中是可维护的。许多转换器实现了真正天真的1对1转换,并且生成的代码最终成为旧式的foo编码的新条形码,或者在天真的COBOL转换为Java之后笑称为“JOBOL”。关于如何映射语言结构的转换工具必须很复杂。 (您可能希望阅读这篇关于PL/1 To Java Conversion)的讨论。
你最大的麻烦可能是“测试”。目前的系统有完整的功能测试,对吧?呃,你没有进行任何功能测试吗?您如何验证新系统是否实现了旧系统正确执行的操作?
这里正确的答案是根据输入输出行为对遗留系统进行构造测试,并将这些测试应用于遗留系统和迁移系统。这是很多工作,没有人愿意这样做,更不用说为此付出代价了。这是迁移失败的第二种方式。
最后发生的事情是管理层严重缺乏资金并承担正确执行此项工作所需的工作。通常与开发团队的谈判如下:
Mgr: How long to do this?
Team: Two years...?
Mgr: BZZZT! Wrong answer, try again...
Team: One year?
Mgr: BZZT! ..
Team: (Gulping) 6 months?
Mgr: OK, get started.
请注意这里的工作没有实际讨论。
在6个月结束时,将开始指点。经理:“我问你们,你说6个月......”
你正在艰难地骑行。仔细准备。坚持认为人们确实列出了所有问题,并且他们产生了可信的估计。如果您是第一次进行迁移,那么您没有良好的基础来进行此类估算;如果它是该组织的第一次,它没有依据判断任何估计是否正确。
(完全披露:我有偏见。我已经构建了22年的自动迁移工具。请查看B2 migration。)
答案 1 :(得分:5)
很大程度上取决于CFML应用程序的现有结构。虽然有一个可用于CFML的框架与Spring的IoC部分相当接近,但我怀疑你正在考虑从非结构化CFML应用程序迁移到Spring Web,而不仅仅是IoC部分 - 而且你正在考虑从一种语言到另一种语言:CFML到Java。
所以现实是:它不是一个迁移项目,它是一个彻底的重写。
我知道你说“迁移是一项要求”(原文如此)但是我认为你需要更多地解释一下这是什么驱使这一点所以人们可以提供一个更好的答案而不是“你疯了,不要这样做! “ - 因为你提供的信息很少,所以没有人能够提供有用的答案。
至于这种迁移的机制, IF 你有一个使用ColdSpring的结构良好的MVC CFML应用程序,你可以将模型逐个迁移到Java并使用Spring的IoC而不是ColdSpring用于bean管理(你希望Spring成为ColdSpring的父bean工厂,这样你的其余CFML代码仍然可以访问新迁移的bean)。
将所有模型(和数据访问层)迁移到Java / Spring之后,您将解决所有.cfm视图页面到.jsp视图页面的转换,并重写所有CFML控制器/侦听器(取决于在哪个CFML框架上使用)到Spring Web处理程序。
这可能是一个庞大的项目 - 而且假设一个结构良好,受MVC框架支持的CFML应用程序已经使用ColdSpring来管理模型。
我敢打赌,你开始的是一个非结构化的混乱(这就是为什么有一个迁移的指令),在这种情况下,你的大型项目变得更加庞大。