8

我的公司有大量用 VB6 编写的遗留应用程序。

我们正在从将 VB6 应用程序迁移到 .NET(特别是 3.5)。

将 VB6 迁移到 .NET 的最佳策略是什么?



注意:以下更新应转到“项目管理”,与主要问题无关。

[更新]:感谢您到目前为止的反馈
现在有更多问题弹出

  1. 您将如何分配开发人员来开发新的应用程序?
  2. 是否应该有一个特殊的一次性升级部门将旧应用程序转换为新应用程序?还是每个开发人员都应该参与转换过程?
  3. 只有高级开发人员才能参与转换吗?初级开发者?还是混合的?

似乎,我对这个问题思考得越多,就会出现更多的问题。

4

5 回答 5

8

显然,这是一项涉及大量工作的重大任务。
所以我的建议是把它当作一个非常长期的项目来对待。

有一个明确的目标,它可以解决诸如安全性、弹性、可维护性和应用程序的未来等主要问题。

一旦利益相关者同意这一点,开发一个原型系统来测试您的假设,您可以在其中尝试 C# 与 VB.net 或 MVC 与 Webforms。我会为此分配您最好的开发人员。

然后从您的小型遗留系统开始,并构建您将在其他领域重用的核心组件。
在这个阶段,从你更资深的开发人员开始,但每个人都必须参与进来并熟悉新的框架。
这将确保每个人都同时接受培训,没有人掉队。
根据您有多少应用程序,我会轮换开发人员,因此所有系统都可以受益。

此外,所有新工作都必须使用您的 .net 语言而不是 VB6 来完成。

逐步转换您的每个旧应用程序。(我只会在它们发生变化或更新它们有明显好处的情况下转换它们。)

这应该为您提供一个可靠的框架以供您继续使用,同时仍确保用户功能不会受到迁移的阻碍。

例如:
我曾在一家拥有大约 40 个左右 VB 应用程序的公司工作。
随着时间的推移,我们已经将所有这些迁移到 C#,现在(5 年后),我们有大约 150 个 c# 应用程序(全部在 .net 2 中)。

这些都共享一个共同的框架,使它们易于维护,并在必要时进行扩展。

于 2009-03-25T23:34:07.417 回答
7

尝试用支持 COM 的 .NET 库替换核心功能。通过将功能一点一点地迁移到 .NET 来“挖空”现有的 VB6 应用程序。

谨防完全重写。尽管它们很诱人,“因为它是干净利落的”——通常疯狂就在前面!阅读 Michael Feathers 的“有效地使用遗留代码”作为准备。尽管这本书并没有专门讨论“从一种语言迁移到另一种语言”,但它确实展示了你会遇到的许多现实世界的陷阱。

我确实认为所有开发人员都应该定义他们对之前开发的遗留应用程序进行迁移工作的时间段。因为他们已经拥有领域知识并且知道问题空间,所以他们应该是最有生产力的。

于 2009-03-25T23:52:04.893 回答
3

这是我对类似问题的回答的改编。

自动转换大型程序是比重写更好的选择。开始乐观地重写一大块软件,在修复旧架构中的一些众所周知的缺陷时取得良好的早期进展,然后陷入你刚刚认为理所当然的功能,这是一个常见的陷阱年。在这一点上,你的管理层开始变得紧张,一切都会变得非常不舒服。

...这是微软同意我的博客文章:

我在 .NET 早期工作过的许多公司首先考虑重写,部分原因是在迁移到 .NET 的同时,他们强烈希望改进底层架构和代码结构。不幸的是,其中许多项目遇到了困难,有几个项目从未完成。他们试图解决的问题太大了

这个出色的 Microsoft页面推荐了两个第三方迁移工具,它们比功能不足的内置 VB.NET 升级向导——Artinsoft和 CodeArchitects VBMigration 更好。Artinsoft 编写了内置的 VB.NET 升级向导,这是他们的改进版本。而 CodeArchitects 是由 Francesco Balena 创立的,他撰写了一些关于 VB6 和 VB.NET的经典书籍。

同一个微软页面还说:

对 .NET 进行完全重写要比转换成本高得多,而且很难做好[比转换]……我们只在少数情况下推荐这种方法。


编辑:Sung 在评论中说:“我不是自动生成代码的忠实粉丝,因为它最初很难调试,并且可能需要与重写整个代码一样长的时间”。我不得不强烈反对。一般来说,我也不喜欢代码生成,但在这种情况下,生成的代码的结构将与您原来的 VB6 相同,并且应该几乎完全可以使用。我自己还没有真正尝试过这些工具,但是从他们的客户 推荐中,这个承诺已经兑现。

And I repeat the Microsoft advice just above, based on their experience of assisting many migrations - "a complete rewrite is far more costly and difficult than converting [my emphasis]" - a flat contradiction of the supposition that it might take the same time. If you want to improve the structure of the VB6, migration then gradual refactoring is likely to be far more cost effective than a rewrite.

于 2009-03-26T08:23:47.267 回答
2

看到这个:
https ://stackoverflow.com/questions/507291/should-we-select-vb-net-or-c-when-upgrading-our-legacy-apps

当然,C# vs VB.Net 只是其中的一部分。

例如,要考虑的另一件事是,如果您还没有想利用这个机会将这些应用程序移动到 Intranet,那么您是否还没有。或者你想深入研究微软的堆栈。例如,Winforms 够用还是你想使用 WPF。

于 2009-03-25T23:26:20.087 回答
1

我将从微软的工具开始:

http://msdn.microsoft.com/en-us/library/aa480541.aspx

于 2009-03-25T23:25:30.353 回答