我知道已经有关于 VB6 迁移的问题,但是我项目的代码库在这里带来了一些新问题。
我不得不说代码质量、结构和架构简直就是一场噩梦。有 2 个大项目:Nr.1 有 40 个表单、40 个模块和一些类文件,这个 EXE 是一种“基础系统”。Nr.2 有 80 个表格,20 个模块和一些类文件,这个 EXE 调用函数形成了“基础系统”。然后还有大约 10 个其他带有 GUI 的项目(每个 1-3 个表单)和另外 90 个非 GUI 项目,其中大部分是 EXE 文件,一些 DLL。DLL 是用 C、C++ 和 VB6 编写的。
代码自 10 年以来不断发展,并且一次主要由 1 个(糟糕的)开发人员编写。
- 具有 500 行(甚至更多)的函数非常常见。
- 90% 的 GUI 组件被命名为 text1, command2(1), …
- 复制和粘贴无处不在,例如复制了一个包含 5000 行代码的 EXE 项目(没有 GUI),副本中唯一的变化是通过邮件而不是 FTP 发送文件(同一个项目还有 2 个另外的副本)。
- 我曾经有一个小表格(15 个字段),我应该解决一个小问题(通常最多半小时),每次我更改某些内容时,它要么不起作用,要么在表格中产生新的错误。2 天后,我决定彻底重写表格,从旧表格中的约 20 条 SQL 语句中,只有 2 条在新表格中幸存下来。
- 甚至不要询问代码中的注释……</li>
几个月前我接手了这个项目,我是唯一的维护者。变更请求和错误的流量持续(但很少),我们从客户那里获得维护预算,以保持软件运行并在法律要求方面“保持最新”。
我的选择
1) 从头开始重写——在这种情况下,我可以用 Java 编写它以实现可移植性。这里的问题是除了一些(旧的)用户帮助之外,没有文档,所以丑陋的代码就是“文档”。有一个人有高层知道软件应该怎么做。此外,很难说服管理层这样做,即使从长远来看可以节省大量成本,也存在政治问题。我也不能一次做一个(vb)项目,因为数据库结构并不比代码好,即也必须从头开始。所以我只能一次更改整个软件。
2)首先将代码迁移到主要项目的 VB.NET / C# 迁移,我已经对其进行了测试,并从 Project Nr.1 中获得了约 2000 条升级评论,其中大部分内容如 Screen.MousePointer 已更改,具有变体返回值的函数和很快。我的想法是在转换之后,为 DB 抽象创建类,更改代码以使用这些类并进行重构,迁移和更改其他项目,当所有代码都使用 DB 类时,更改 DB 结构。
3) 无论如何我必须在 VB6 中更改某些内容时重构代码(我已经部分地这样做了),并在某些时候重构其余部分。这样更容易看到原始功能,因为它是原始代码,当出现错误时,很明显它们不可能是迁移的结果。当代码被重构时(我假设它也会小 50-75%),将它迁移到 .NET 会更容易。然后更改数据库结构(然后进行另一轮重构……)。
未来有一些更大的改变要做(使其与 Win7 兼容,以及另一个影响大部分代码的大 CR),所以会有一个很好的机会来做这些改变,因为我必须经历反正很多代码。
我的问题是谁有迁移糟糕、丑陋的代码的经验/提示?您会建议哪些选项?