Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将丑陋且未记录的VB6代码迁移到.NET_.net_Vb6_Vb6 Migration - Fatal编程技术网

如何将丑陋且未记录的VB6代码迁移到.NET

如何将丑陋且未记录的VB6代码迁移到.NET,.net,vb6,vb6-migration,.net,Vb6,Vb6 Migration,我知道已经有关于VB6迁移的问题,但是我项目的代码库带来了一些新的问题 我不得不说,代码质量、结构和体系结构只是一场噩梦。 有两个大项目: Nr.1有40个表单、40个模块和几个类文件,这个EXE是一种“基本系统”。 Nr.2有80个表单、20个模块和一些类文件,这个EXE再次调用“基本系统”中的函数。 然后还有10个其他带有GUI的项目(每个项目1-3个表单)和90个非GUI项目,其中大多数是EXE文件,一些是DLL。DLL是用C、C++和VB6编写的。 这段代码自10年来一直在进化,并且每次

我知道已经有关于VB6迁移的问题,但是我项目的代码库带来了一些新的问题

我不得不说,代码质量、结构和体系结构只是一场噩梦。 有两个大项目: Nr.1有40个表单、40个模块和几个类文件,这个EXE是一种“基本系统”。 Nr.2有80个表单、20个模块和一些类文件,这个EXE再次调用“基本系统”中的函数。 然后还有10个其他带有GUI的项目(每个项目1-3个表单)和90个非GUI项目,其中大多数是EXE文件,一些是DLL。DLL是用C、C++和VB6编写的。 这段代码自10年来一直在进化,并且每次主要由一个(糟糕的)开发人员编写

  • 具有500行(或更多)的函数非常常见
  • 90%的GUI组件命名为text1、command2(1)和
  • 复制和粘贴到处都是。G复制了一个包含5000行代码的EXE项目(没有GUI),副本中唯一的更改是每封邮件发送文件,而不是FTP(同一项目还有2个副本)
  • 我曾经有一个小表单(15个字段),在那里我应该解决一个小问题(通常最多半小时),每次我更改某个内容时,它要么不起作用,要么在表单中产生新的错误。两天后,我决定完全重写表单,从旧表单中的20条SQL语句中,只有2条在新表单中幸存下来
  • 甚至不要询问代码中的注释
几个月前我接管了这个项目,我是唯一的维护者。变更请求和错误的流量是恒定的(但很少),我们从客户那里得到维护预算,以保持软件的运行和法律要求的“最新”

我的选择

1) 从头重写——在这种情况下,为了便于移植,我可以用Java编写它。 这里的问题是,除了一些(旧的)用户帮助之外,没有文档,所以难看的代码就是“文档”。有一个人具有高级知识,知道软件应该做什么。此外,很难说服管理层这样做,即使从长远来看有巨大的成本节约,也存在政治问题。我也不能一次做一个(vb)项目,因为数据库结构并不比代码好,也就是说,必须从头开始。所以我只能一次改变整个软件

2) 将代码迁移到VB.NET/C# 首先,我已经对主要项目进行了测试,并从Project Nr.1中获得了~2000条升级注释,其中大部分内容都发生了更改,如Screen.MousePointer、返回值可变的函数等等。 我的想法是在转换之后,为DB抽象创建类,更改代码以使用这些类,并进行重构、迁移和更改其他项目,当所有代码都使用DB类时,更改DB结构

3) 在VB6中重构代码,无论何时我必须在那里修改一些东西(我已经做了一部分),并且在某个时候重构其余的。这样就更容易看到原始功能,因为它是原始代码,当出现错误时,很明显它们不可能是迁移的结果。 当代码被重构时(我假设它也会小50-75%),将其迁移到.NET就更容易了。然后更改数据库结构(然后进行另一轮重构…)

将来还有一些更大的更改要做(使它与Win7兼容,还有另一个影响代码大部分的大CR),所以有一个很好的机会来做这些更改,因为我无论如何都要经历很多代码


我的问题是谁有迁移糟糕难看代码的经验/提示?你会建议哪些选项?

我必须经历同样的事情(没有文档和可怕代码的大规模VB6应用程序)。唯一安全合理的路线是3号。要改进某件事,你必须首先了解它。如果你走1号或2号公路,你肯定会被弄得一团糟

请记住,始终牢记您的最终目标是完全迁移到.NET。在进行重构时,考虑一下VB6s糟糕的OO支持在VB.NET或C#中会是什么样子。如果可能的话,将代码转移到其他地方以使迁移更容易

您可能想考虑将许多核心功能转换成.NET DLL,并通过COM将其暴露给VB6。这将从VB6中删除大量荒谬的代码,并有望保留大部分业务逻辑

你需要记住的最重要的事情是不要做一个牛仔

  • 为模块编写测试
  • 重构模块
  • 测试模块
  • 发布你的应用程序
  • 转到1

  • 代码是否一定要迁移?如果没有,它仍然可以达到它的目的,并且可以进行一半的维护,只需别管它,继续

    经过数小时、数周、数月的代码迁移,您将代码迁移到新语言的动机将很快消失,尤其是在您提到的规模上

    从概念上讲,代码迁移的想法是一个奇妙的想法。很可能,这是一个可怕的混乱,你会讨厌这样的生活

    想想看,在修复一个缺陷时,你现在讨厌你的生活吗?在迁移项目中,将其减少100倍


    只要它有效,大多数企业都不会太在意引擎盖下的东西。记住,他们不是开发人员,不在乎修复它(因为他们不是做这件事的人)会有多痛苦,也不在乎激励企业花费数万美元更新代码,根本没有任何商业意义。

    不要从头重写它。这听起来好像要花很多时间,而且很可能会在代码中引入新的(旧的)bug

    我想