采购 COBOL 现代化服务,和买任何别的软件工作都不一样。要动的那套系统已经跑了三四十年,公司里现在没有一个人完全弄得懂它,而做砸了的代价不是错过几个迭代,是监管报送出问题。与此同时,摆在你桌上的几份方案承诺的结果一模一样,报价却差出好几倍。

这篇文章讲清楚一份认真的合作到底包含什么,几类供应商之间的差别在哪里,以及哪些问题能把建立在证据上的报价和建立在乐观上的报价分开。它假设你就是事后要为这个决定作出解释的那个人。

该看什么: 一份可信的 COBOL 现代化方案包含现状勘察、目标架构设计、数据迁移、代码转换或重新托管、以比对为核心的测试计划、并行运行、切换方案以及知识转移。只给代码转换标了价的报价,不是一份项目计划,它只是其中最便宜的四分之一。


COBOL 现代化服务实际包含什么

找三家供应商要方案,你会拿到三种不同的范围定义。在比价之前先把清单拉齐,是这个阶段最有用的一件事,因为漏掉一半工作的报价,在汇总页上永远更好看。

现状勘察与分析 排在最前面。供应商解析整套资产,画出依赖关系与数据血缘图,找出不再执行的代码,并交出程序、复制簿、作业流和数据库对象的清单。这一阶段还应当把推高成本的东西点出来:汇编模块、异常的事务处理方式、变体记录结构,以及那些编译器容忍了几十年的写法。

目标架构 紧随其后。总得有人决定这套系统将来是什么:一份被重新托管的 COBOL 负载、一份转换到现代语言的代码库、一组服务,或者是分阶段推进的某种组合。这个决定应当落在转换开工之前,而且要把推导过程写下来让人看得见,而不是丢下一句结论。

数据迁移 涵盖模式设计、抽取、转换与对账。大型机的数据格式承载着关系模式无法直接表达的含义,所以这部分工作是分析性的,而不是机械性的。

代码转换或重新托管 是所有人都盯着的部分,而它在总工作量里通常只占少数。自动化在这里能做什么、不能做什么,我们关于大型机迁移工具 的那篇文章讲过。

买方最常砍掉的环节

测试与比对 才是钱真正花掉的地方。像样的项目会搭一套框架,用同样的输入分别跑旧系统和新系统,再逐字段比对输出,然后把每一处差异都推到要么修掉、要么被正式接受为止。这本身就是一个软件项目,也应该按软件项目来报价。

并行运行与切换 指的是在一段约定的时间里,用真实的生产量同时运行两套系统,然后带着经过演练的回退方案完成切换。那些为了省时间跳过这一步的项目,后来会以不太光彩的方式出现在案例里。

知识转移与支持 为合作收尾。供应商撤走之后,你自己的团队必须能运行它、能改动它。如果这不是一项带验收标准的明确交付物,你买到的就不是现代化,你买到的是依赖。


三类供应商,各自擅长什么

这个市场分成三类,长处确实不同,而选谁更多取决于你的资产本身,而不是任何排行榜。

工具厂商及其合作伙伴 用自动转换或重新托管平台打头阵。他们的技术通常相当成熟,转换吞吐量也确实可观。要留心的是利益的方向:他们的商业利益在于把自家产品承担的比例做大,而这未必等于替你造出一份维护起来舒服的代码库。此外,他们会把你的生产资产绑在自家运行时上,这是一份值得标价的依赖。

全球系统集成商 带来的是规模、项目治理,以及组织一支跨年度大团队的能力。如果你的资产跨越多个业务单元、达到数百万行,这份供给能力是真管用的,而能提供它的人不多。代价是成本结构,以及写方案的人和真正干活的人之间的距离。请具体问清楚谁在团队里、他们坐在哪里、有过什么经历。

专业工程公司 规模小,从头到尾都是资深的人在做,而且因为没有产品要卖,通常对工具保持中立。他们适合数十万行量级的资产、分阶段推进的项目,以及难点在业务逻辑而不在体量的情形。他们组织不起一个两百人规模的项目,而且应当直说。

不存在放之四海皆准的答案,只存在对某一套资产而言正确的答案。凡是声称自家模式适合一切情形的供应商,都在告诉你一些关于他们怎么卖东西的有用信息。


能问出虚实的问题

采购问卷很少能问出真正要紧的东西,下面这些能。

“把我们最难的那个模块转出来,让我们看看结果。” 挑那个人人绕着走的程序,最好是调用汇编、又带多层变体记录的那一个。要看生成出来的代码本身,而不是一份摘要。对自家做法有把握的供应商,会在一笔金额固定、数目不大的勘察费用里做这件事。不情愿本身就是答案。

“十进制运算和排序顺序你们怎么处理?” 压缩十进制字段和大型机的排序规则,都会制造出只在财务结果和报表排序里才显形的差异。回答应当是具体的、技术性的。在这里含糊其辞,预示着一段难熬的用户验收期。

“你们的测试范围到底包含什么,比对框架由谁来写?” 你要找的是一项有名字的交付物、一份工作量估算,以及关于谁来提供接近生产的数据的明确说法。如果测试被描述成开发工作量的某个百分比,那这家供应商是在猜。

“解释不了的差异,你们怎么办?” 每个项目都会碰到输出对不上、谁也说不清缘由的情况。好的供应商会描述一套带业务方签字的分诊流程。说这种事不会发生的,要么没把一个项目做到底,要么没在说实话。

“最后产出的源代码归谁,我们能不能走人?” 答案应当是一切完全归你所有,继续运行不需要任何运行时授权。如果答案里有任何一部分牵涉到对某个专有层的持续付费,请弄清楚一旦你停付,生产系统会发生什么。

“讲一个做砸了的项目,以及你们后来改了什么。” 凡是做过几个以上这类项目的机构,都有这么一段。这个回答会告诉你,坐在对面的是工程师还是销售职能。


COBOL 现代化服务如何定价

定价模式有好几种,每一种分摊风险的方式都不同。理解这种分摊,比看清封面上的数字更重要。

按实际投入计费,对确实存在未知的工作来说是最诚实的模式,对董事会来说则是最不舒服的模式。它适合现状勘察,而现状勘察几乎总应当单独采购、并且放在最前面,正是为了让后面的部分能按证据而不是按假设来定价。

按模块或按每千行的固定价,在转换工作里很常见,并且在勘察已经弄清模块里装了什么之后是合理的。请仔细读那些除外条款。这类价格通常假定代码落在一个约定的复杂度区间内,超出这个区间的会被单独重新报价,波动就藏在那里。

按结果定价,也就是把付款绑定在已被接受的功能等价上,在动机上对得很齐,但它要求验收标准精确到能够据以裁断。把这些标准认真定义清楚,值得花那份力气。

对于勘察还没跑就给出整个项目确定固定总价的公司,请保持怀疑。那不是自信的表现。它要么加了足以覆盖最坏情况的余量,于是你在为一份可能不会发生的风险付钱;要么定得乐观,等难啃的模块浮出水面时以变更申请的形式回来。哪一种都不便宜。

至于折扣,这个市场并不那样运转。有意义的减价来自收窄范围、把项目分阶段让后面的阶段吃到前面阶段学到的东西,或者下线那些勘察证明已经没人用的代码。范围一点没变却大幅降价的供应商,等于亲口告诉你第一个数字是随口报的。预算究竟花到哪里去了,我们的 COBOL 迁移成本与周期指南 做了拆解。


值得坚持写进合同的条款

有那么几条条款,比堆多少治理机制都更能保住结果。

坚持对所有交付的源代码、模式、脚本和测试资产拥有无附加限制的所有权,比对框架也包含在内。那套框架是你今后好几年还会用到的资产。

把验收定义为在约定数据集上演示出功能等价,而不是交付代码。“转换完成了"和"输出对上了"之间的距离,就是这个项目的全部。

要求一个分阶段、带真实退出点的结构。一个拆成勘察、试点、分批转换和切换的项目,允许你在任何一个阶段之后停下来,手里还留着有价值的东西。一份铁板一块的合同做不到这一点。

把关键人员的名字写进合同,并加入关于换人的条款。来投标的团队和真正到场的团队之间的落差,是这个市场里最常见的抱怨。

最后,把知识转移做成一项有自己验收标准的交付物,以你的团队独立完成一次真实变更作为凭据。否则它就会变成最后一周发下来的一叠幻灯片。


找工程师谈,而不是找经销商

Mecanik 以独立工程公司的身份承接 COBOL 现代化COBOL 迁移 项目。我们不转售任何转换平台,所以我们在工具上的建议反映的是你的代码库需要什么,而不是我们拿了谁的授权。

我们从现状勘察和一次针对你最难那个模块的付费试点开始,因为这样得出的估算扎根于你自己的代码,而不是一个行业平均值。从那里出发,我们可以转换、可以重新托管,也可以告诉你眼下两者都不成立,而这偶尔正是正确答案。各阶段更细的内容写在我们的 COBOL 迁移服务 页面上,而排在这一切之前的重写、重构还是换平台的取舍,我们在大型机现代化策略 指南里谈过。

告诉我们你的资产大概多大、是什么在逼着这个时间点,我们会告诉你一个现实的项目大致长什么样。


延伸阅读: COBOL 到 Java 迁移 - 英国企业指南COBOL 到 C# 迁移:英国企业指南COBOL 迁移到 Python - 英国企业指南COBOL 迁移到 Go:英国企业指南


常见问题

COBOL 现代化服务包含什么? 一份完整的合作涵盖现状勘察与分析、目标架构设计、数据迁移、代码转换或重新托管、以比对为核心的测试计划、并行运行、切换方案以及知识转移。只给代码转换标价的方案,覆盖的只是实际工作里的少数部分。

谁提供 COBOL 到现代语言的迁移? 有三类:工具厂商及其实施伙伴、全球系统集成商,以及独立的专业工程公司。工具厂商提供成熟的自动化,集成商为超大规模资产提供人力规模,专业公司则为中等规模的项目提供资深工程师和工具中立性。

COBOL 现代化项目如何定价? 常见模式是按实际投入计费、按模块或每千行的固定价,以及绑定功能等价的按结果定价。现状勘察应当单独采购并且放在最前面,这样后面的部分才能按证据而不是按假设来定价。

勘察之前该不该接受固定价? 通常不该。没有分析就报出的固定价,要么加了你未必用得上的余量,要么定得乐观、注定以变更申请的形式回来。先买勘察,再用它的结论去拿后续各阶段的确定报价。

怎么验证供应商能应付我们的代码库? 请他们在勘察阶段转换你最难的那个模块,并把生成的结果给你看。挑一个包含汇编调用、变体记录结构和压缩十进制运算的模块。他们交出什么,以及答应得多痛快,比任何一通客户推荐电话都更能说明问题。