10

2002 年,我为客户做了一个相当大的 VB6 应用程序。它使用了很多用户控件和第 3 方菜单控件(用于将图标放在菜单名称旁边)。它具有动态“可拆分”面板、带有多状态复选框的 TreeViews 等。一个非常丰富的 UI。我在这个项目上的总时间大约是 500 小时,客户很客气地让我分摊了整整一个月。(是的,就是那种工作。)不过,他们很高兴,而且他们按时支付了账单,没有争论。

因此,在与他们多年没有联系后,他们突然打电话询问我是否可以为他们将应用程序更新为 .Net。我最初的反应只是拒绝,因为我不使用 VB.Net。并且在阅读了一堆关于移植等困难的帖子后,我倾向于拒绝,可以这么说。

不过,在我告诉他们不之前,我有兴趣粗略地量化它需要付出的努力。我很想听听任何做过这种事情并且对它有多少工作有感觉的人。是不是:

  • 明显少于您在原版上使用的努力?
  • 比您在原版上使用的努力少一些?
  • 和你在原版上所用的努力一样吗?
  • 更多的?
  • 多很多?

请仅在您实际完成此类端口时才回复。答案不一定是准确的,因为我真的只是想大致了解一下。我的感觉是,付出的努力至少会和原作一样多,如果不是更多的话。但我可能是错的。谢谢你的帮助。

4

7 回答 7

9

我已经完成了你被要求的事情。就我而言,它是一个(业余)保龄球锦标赛管理系统:会员数据库管理(个人信息、IRS/奖金信息、邮件列表等)、锦标赛管理(球员分配、计分、车道票生成、奖金检查登记和边罐等)以及给定年份所有获胜者的 IRS EDI 生成。加上大约 10 亿个小项目分散在 ~ 50 个屏幕/子屏幕上。

关键是客户的理解——你必须清楚他们明白这不是小事;这对你们俩来说都是一次新的冒险(特别是如果您是 VB.Net 的新手)如果他们以前喜欢您的工作,那么他们很可能会给您留有余地/自由来学习 VB.Net。

阅读之前的一些答案让我提出一些建议(基于 30 年的软件开发经验,其中最后 20 年是顾问......)

  1. 如果他们提供,就拿走他们的钱。您需要将您的技能带入 20 世纪;让他们付钱(如果他们同意的话,再一次)。他们可能是杂志冲浪,想要“最新的东西”,没有好的理由——但也许他们意识到他们可以通过这个端口延长(你的)应用程序的生命周期。从本质上讲,他们可能有各种愚蠢的理由这样做......如果他们不雇用你来决定这个端口是否是一个好主意。然后你可以表达你对建立良好客户关系的决策过程的任何沮丧;但如果他们想这样做,那么它也可能是你的工作。

  2. 拿所有这些胡说八道的东西:C# vs VB.Net 加一粒盐。自 VB.Net / ASPX.net (vs C#) 成立以来,我一直专门在 VB.Net / ASPX.net (vs C#) 中工作,并且还没有遇到任何在 VB.Net 中无法实现的功能。有一些“纯粹主义者”只是将 VB.Net 视为玩具。好吧,我是从用汇编语言写作的时代开始的,然后是 C,然后是 C++(你可以用 Fortran,PL1 来衡量),然后是 VB5,然后是 6,然后是 VB.Net……现在是适用于 Android 的 JAVA。它非常有趣......每个都有它的优点和缺点。请记住,C# 和 VB.Net 本质上只是用于实现元语言中间体的 GUI。你可以用 C# 编写一个糟糕的程序(通过效率或内存使用或任何你选择的指标来衡量!)用 C# 编写一个程序,用 VB.Net 编写一个很棒的程序(反之亦然)。不要将好的编程等同于语言语法。(... C# 是 "

  3. 我选择让 Visual Studio 完成第一遍的大部分繁重工作。然后你会经历无数错误并清理它。它进展得非常快。

  4. 但是您需要决定是否利用您在 VB6 中手动编码的任何框架优势。EG 循环遍历字符串以定位特定字符现在就像 The_String.IndexOf("c") 一样简单面向对象)以及框架好东西,因为我变得很舒服......这会增加您的开发时间(请参阅客户理解口头禅)但是您的代码将比它在 VB6 中的效率更高。您可以简单地移植以消除错误,而不必从框架中获得任何优势。

  5. 我没有发现第 3 方 active-x 控件有任何问题。您可以添加对 FRAMEWORK 对象、COM 对象等的引用。控件供应商甚至可能具有 .Net(托管代码)版本... (见客户理解口头禅)

因此,如果您仍在阅读,那么现在我将最终告诉您,我在 VB6 的 VB.Net CONVERTED/PORTED 中的应用程序的第二次尝试是获得工作模型的原始时间的 1/3 左右......我是学习框架也是如此。(如果您对自己的技能有信心,并且多年来已经学习了几种语言,您将很快掌握 VB.Net 的要点 --- 它的 SUBTLETIES 需要一段时间。)

I must caution you that the thing that can REALLY kill you if you do not preach the CLIENT UNDERSTANDING well enough is if they want to make changes WHILE you're porting (and this is VERY LIKELY since they've been using it for awhile... I was very true in my case as well.

这里没有硬性规定。可能是更改实际上会帮助您更快地更好地理解框架,或者更改可能是一个真正的痛苦。只有您可以确定它们可能是哪种口味。如果它们看起来是 PAINFUL 类型——您可能会要求先进行转换,以便可靠地再现功能——然后返回并查看代码以进行更改并在必要时利用框架。但是,正如我所说,这里没有硬性规定和快速规定——不要让纯粹主义者告诉你不同的说法——记住他们可能就是那些说 PASCAL 将接管世界的人!

于 2010-03-13T15:19:10.663 回答
4

因此,在与他们多年没有联系后,他们突然打电话询问我是否可以为他们将应用程序更新为 .Net。

你需要问他们为什么要这样做。

对于客户来说,一时兴起做出技术决策是一个糟糕的计划。在应用任何解决方案之前,请彻底了解他们的需求和问题。只有在您像他们一样理解问题之后,您才应该提出建议。

可能是他们迷上了流行语并想要使用最新的东西,或者可能是其他一百万种东西中的任何一种。解决他们的问题可能很容易,但如果你不知道他们的问题是什么,你永远不会知道解决这个问题的最佳方法。

于 2010-03-12T19:19:26.760 回答
3

我计划首先花费大约 50% 的时间和精力来创建它。

对于包含大约 500 kloc 的商业软件产品,我已经完全按照您的要求完成了。我们平衡了重构的愿望和让某些东西尽快工作和发布的愿望。

几乎整个团队花了大约 1 年的时间来完成它……对于一个最初需要 4 年时间来创建的产品。这是一项巨大的事业……不容小觑。

于 2010-08-30T19:06:00.720 回答
2

我们现在正在做同样的事情,但它略有不同。不是一个巨大的应用程序,而是许多较小的应用程序。但是,列表中有一些更大的。我们发现它的工作量比我们最初想象的要少得多。但是......最大的未知数与我们拥有的第三方控件有关。如果你有很多基本上要重新设计的东西,你可能会考虑更多的工作。

我的一个好建议是使用 Visual Studio 2008 进行转换(不是 VS 2005)。在 VS 2008 中使用内置转换器时出现的问题比在 VS 2005 中要少得多。不知道为什么,就是这样。

所以,我不能说你不会再花 500 个小时,但很可能不会。您应该将大部分时间花在测试上,以验证没有功能丢失。

于 2010-03-12T19:10:19.770 回答
2

在我看来,

Visual Basic 6 和 Visual Basic .NET 如此不同,以至于您应该忘记它们名称的巧合,并将其视为向 .NET 的迁移 =P

我认为你有一大优势和一大劣势:

  • 优点:您已经知道应用程序必须做什么。可能您会与您的客户开会,以添加一些修改或新功能,但您对主要部分的要求非常清楚。您甚至可以在您或您的团队编码时查看旧的工作应用程序。

  • 缺点:你必须学习一门新语言。说要花多少时间,是非常主观的。我一直认为学习一门新语言不是问题,大问题是如果你必须学习编程!但你确实知道编程。你会知道你想做什么,你只需要在新的语言中搜索如何去做。

既然你要学.NET,如果非要估计的话,我想你应该假设它至少会和以前的应用程序一样,甚至更多。

我的建议是也抓住机会学习这门新语言。如果你更倾向于拒绝这个项目,让我再给你一个想法......也许你可以估计你的应用程序的一个小模块,然后告诉客户你会尝试做那个模块,看看它有多少带给你。即使您决定不继续,客户也应该支付这个小模块的费用。

你不能告诉客户你知道所有的要求,所以他们在某种程度上和你一起省钱。并且他们应该承担这个小风险(我们正在谈论一个小模块),因为谁比你更好地制作项目,你完全了解旧应用程序!

如果客户对此的看法是正确的,那么您可以通过更多的论据来做出决定。如果最终您决定继续,完成这个小模块后,您可以比以前更好地估计整个项目。

对不起,我的英语不是很好,可能我犯了很多语法错误。

编辑语法错误... =P

于 2010-03-12T19:37:36.643 回答
1

这次我会去两个月。

但说真的,这可能并不遥远——甚至可能很低——因为客户端将有一些理由需要完成端口。它不会只是一个直接的端口——他们会想要一些“小的小改进”来炸毁整个项目。

此外,我有点担心第三方控件。其余的大部分都应该可以转换,但有时会在.Net 中找到一个很好的模拟第三方控件的问题。

我还担心你不使用 vb.net。如果您是 ac# 用户并且想以这种方式重新实现,那么您会很好,但否则这是一个非首发。VB.Net 与 vb6 的不同之处足以让您陷入困境。

除此之外,我预计这次的工作量会比上次少,因为您面前有一个非常明确的设计,您只需要遵循即可。

于 2010-03-12T19:09:11.503 回答
1

这是一个巨大的话题。

您应该看看 MS 的免费书籍 -将 Microsoft Visual Basic 6.0 升级到 Microsoft Visual Basic .NET

如果您从头开始重写,而不是简单地尝试移植以前的应用程序,它应该不会花费太长时间。VB.Net 有一些特性可以缩短新应用程序的构建时间。好像您还不了解 VB.Net,您最需要时间的是学习如何以新的方式做事(tm)

于 2010-03-12T19:09:55.000 回答