重写遗留代码

18 legacy refactoring maintenance cobol

我的部门目前负责维护一个相当大的COBOL代码库.我们想知道如何添加新功能以满足业务需求.COBOL程序员现在很难找到,我们也认为使用Java或C#等更现代的语言可以提高工作效率.

我们认为我们有四种选择:

  1. 从头开始重写所有内容,将旧应用程序留给自己,直到它准备好被替换
  2. 从头开始重写所有内容,让一些人维护旧应用程序,以便在构建新应用程序时满足新的业务需求
  3. 用现代语言编写所有新功能,并找到一些方法将新代码与旧功能集成.
  4. 继续维护旧的应用程序.

您认为我们最好的选择是什么?为什么?

gbj*_*anb 9

很抱歉,问题涉及cobol,它根据您的需求做出任何答案,如果您说"我们有一个旧的VB应用程序"或旧的C应用程序,那么选项#3始终是正确的方法.

我曾在3家公司工作,他们决定选择#2​​.2人试图支付新系统,但只获得了旧的收入,第3次确实非常接近.

操作#3的另一个因素是你可以保留你多年来所做的所有旧错误修正.每次重写总会引入越来越多的错误,部分原因是你想要快速完成重写,部分原因是你将用一种新的,不熟悉的语言编写它,部分是因为所有新代码都有错误.

重构和替换旧应用程序的逻辑块,最终你会有一个漂亮的新亮点.从GUI开始,以获得最安全的新方法.此外,当你用新的东西重写应用程序时,更新的东西将是最酷的,你的新应用程序将过时,你将再次发布相同的问题!

  • 对于业务应用程序,我认为最好先缓慢迁移新内容.我通过一个BigBang更换,这是一个令人印象深刻的失败.我的父亲,也是开发人员,也帮助了2.问题是:旧代码*永远不会像文档一样行事.说,COBOL-isms是不可理解的. (2认同)
  • "旧代码永远不会像文档一样":也就是说,假设有*是*docs ... (2认同)

nzp*_*mad 7

这是选项3的变体:

Microfocus提供了一个名为Enterprise Server的工具,它允许COBOL与Web服务进行交互.

如果您有COBOL程序A和另一个COBOL程序B和A通过接口部分调用B,该工具允许您将B的接口部分公开为Web服务.

对于程序A,您然后生成客户端代理,A现在可以通过Web服务调用B.

当然,因为B现在有一个Web服务,任何其他类型的程序(命令行,Windows应用程序,Java,ASP等)现在也可以调用它.

使用这种方法,您可以"蚕食边缘",将GUI移动到现代的,基于浏览器的方法,使用ASP之类的东西,同时仍然使用COBOL业务引擎.

一旦你拥有一套不错的网络服务,这些服务就可以用于任何新的开发,从长远来看,这种开发提供了远离COBOL的方法.


Tom*_*ter 6

小心尝试完全重写.很多软件公司都有很多这样的例子.Netscape就是一个很好的例子

  • 大多数情况下都是如此,但可能不在这里 最终这个应用程序必须完全重写,这只是时间和速度的问题. (2认同)

sal*_*sal 6

遵守80/20规则.坐下来与客户端一起编写20%应用程序的规格,获得80%的使用率.把它写在现代系统中.然后要么保留旧系统以减少特殊情况的数量,要么在充实新系统时将其逐步淘汰.

不要试图100%重写旧代码.那太傻了.最好的情况是你有一个过时系统的完整端口.最糟糕的情况是你花费了大量的时间和金钱来使新系统失败,而你仍然坚持使用旧系统.

使用时间和精力来改进系统,而不仅仅是移植它.移植最重要的部件后,请使用时间重新考虑特殊情况.


Fra*_*les 5

选项#2和#3是您的最佳选择.如果您的COBOL应用程序将其数据存储在SQL DB或其他一些理智的格式中,您可以使用现代语言轻松访问该格式,这是最便宜/最简单的解决方案.

如果没有,那么在重建时让工作人员实施关键的新功能是必要的.但我仍然建议每个人都要将旧代码库中的新功能限制为真正关键的功能.

从长远来看,维护COBOL只会变得更难.等待的时间越长,就越难.