迁移项目充满危险。
第一个危险是,“这很昂贵和痛苦。让我们从头开始重建并使用结构化方法实现任何市场营销人员/管理人员/程序员拥有的新想法或功能等等..." 这条路会导致失败,因为
1) 它需要无限量的工作,
2) 没有人真正知道旧系统在做什么(最近看过规格吗?),因此在新系统上线后,您将以巨大的痛苦和对组织能力造成损害的方式重新发现旧系统。事实上,通常情况下,新系统永远也赶不上旧系统,因此重写会死得很惨。
正确的迁移方式是:坚持保留功能,并转换现有系统。没有新的好处、特性、方法。
这种坚持也有自己的麻烦:组织通常必须在迁移发生期间进行一些变更以求生存。
为了解决这个问题,你需要一个自动化迁移工具,这样“没有功能变化”的规则只适用于实际转换过程,并且尽可能短。迁移工具的开发人员可以花费一些时间来构建它并彻底测试转换工具;与此同时,组织可以通过其通常的方法增强遗留系统。当迁移工具准备好时...启动触发器,转换代码,修补问题并测试结果系统的有效性。
一旦系统迁移完成,你可以考虑进行根本性的重组或重塑,因为基本功能仍然良好。
无论你选择什么样的自动化迁移工具,都要注意它生成的代码在新环境中是可维护的。许多转换器真正地进行了天真的1对1转换,结果产生的代码最终成为了遗留FOO代码在新BAR中的版本,或者被嘲笑为“JOBOL”,即天真的COBOL到Java转换。转换工具必须在语言结构映射方面非常复杂。(你可能想阅读这篇SO讨论
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。)