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

我们正处于从 VB6 应用程序迁移到 .NET(特别是 3.5)的过渡过程中。

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



笔记:下面的更新应该转到“项目管理”,与主要问题无关。

[更新]:感谢您迄今为止的反馈
现在有 弹出的更多问题是

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

好像,我对这个问题的思考越多,更多的问题就出现了。

有帮助吗?

解决方案

显然,这是一项重大任务,涉及大量工作。
所以我的建议是将其视为一个非常长期的项目。

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

一旦利益相关者同意,开发一个原型系统来测试您的假设,您可以在其中尝试 C# vs VB.net 或 MVC vs Webforms。我会指派你们最好的开发人员来做这件事。

然后从一个小型遗留系统开始,构建您将在其他领域重复使用的核心组件。
在此阶段,从更高级的开发人员开始,但每个人都必须参与并熟悉新框架。
这将确保每个人同时接受培训,不落下任何人。
根据您拥有的应用程序数量,我将轮换开发人员,以便所有系统都能受益。

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

逐步转换您的每一个旧应用程序。(只有当它们发生变化或者更新它们有明显的好处时,我才会转换它们。)

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

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

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

其他提示

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

当心完全重写。尽管它们很诱人,“因为它是干净的切割”——通常疯狂就在前方!阅读 Michael Feathers 的《有效处理遗留代码》作为准备。尽管这本书没有具体讨论“从一种语言迁移到另一种语言”,但它确实展示了您将遇到的许多现实世界的陷阱。

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

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

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

...这是 Microsofty 的一篇博客文章 同意我的观点:

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

这个优秀的微软 推荐两个第三方迁移工具,比功能不足的内置 VB.NET 升级向导更好 - 艺廷软件 和代码架构师 VB迁移. 。Artinsoft编写了内置的VB.NET升级向导,这是他们的改进版本。CodeArchitects 由 Francesco Balena 创立,他编写了一些 经典书籍 在 VB6 和 VB.NET 上。

同一个微软页面还说:

对 .NET 进行完全重写[比转换]成本更高且更难做好......我们只建议在少数情况下使用这种方法。


编辑:宋先生在评论中说道:“我不太喜欢自动生成代码,因为最初调试起来比较困难,并且可能需要与重写整个代码一样长的时间”。我必须强烈反对。一般来说,我也不喜欢代码生成,但在这种情况下,生成的代码的结构将与原始 VB6 相同,并且应该几乎完全可用。我自己还没有真正尝试过这些工具,但是从他们的 顾客 感言 这个承诺已经兑现了。

我根据微软协助许多迁移的经验重复上面的建议 - “完整的重写是 成本更高、难度更大 而不是转换[我的重点]”——这与可能需要相同时间的假设完全矛盾。如果您想改进 VB6 的结构,那么逐步重构可能比重写更具成本效益。

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

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

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

我将从微软的工具开始:

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

您可能会发现以下文章很有用:http://www.vsj.co.uk/articles/display.asp?id=756

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top