在我们公司,我们开发和销售一个VB6应用程序,我们认为现在是时候将其迁移到.NET了。
主要原因如下:
- 我们预计VB6运行时支持在某个时间点结束,并且我们不想在那时才开始迁移,因为这可能是一个漫长的过程。 - 只剩下1 1/2个VB6开发人员。其中半个是我。 - 越来越多的客户要求支持云和移动设备等功能。
我知道从头开始重写一个应用程序是迁移到.NET最不推荐的方法。我完全同意!抛弃十多年的代码感觉很不对,而且会浪费已经花费的大量资金,我很难向我们的管理层推荐和证明这种做法。
但是现在我看不到其他方法了。
让我稍微介绍一下这个应用程序:
正如我所说,它已经开发了十多年。有无数的开发人员在上面工作过,他们中的大多数当时都没有经验。我们留下了一名最初团队的开发人员。这个应用程序是他的第一个和最大的软件项目,到现在为止,他意识到在过去15年中做出的许多架构决策都是非常错误的,其他一些决策在当时是正确的,但是没有被重构以满足应用程序其他部分所做出的更改,因此在某个时间点变得错误了。这个应用程序似乎是代码腐烂的一个典型例子。
我们正在谈论一个大约有150 KSLOC的应用程序,全部都在一个单一的可执行文件中。它使用了大约15个外部DLL,其中一些是第三方ActiveX控件,另一些是我们自己的.NET程序集。
向应用程序添加新功能仍然是可能的,并且正在进行,但与我们的其他.NET应用程序相比,需要花费很长时间。原因是代码库中的每个小变化都需要在各个地方进行更改。唯一能够进行更改的原因是那位开发人员简单地知道应用程序的大多数依赖项和怪癖。正如你可能已经猜到的那样,意外副作用和错误的发生率相当高。
我对迁移该应用程序的第一个想法是首先清理和重构,然后使用Artinsoft/Microsoft/WhoEver的工具进行迁移/转换,然后再次进行重构,以获得一个漂亮而干净的.NET应用程序。
但我看到了一些问题:
- 似乎没有重构旧应用程序的方法。没有任何自动化测试,甚至没有正式的手动测试方法。每个小变化都需要有经验的用户进行手动测试,他们知道缺陷可能隐藏在哪里。 - 另一方面,我已经建立了一套用于测试我们.NET应用程序的流程和工具,这为我们进行重构提供了坚实的基础。
主要原因如下:
- 我们预计VB6运行时支持在某个时间点结束,并且我们不想在那时才开始迁移,因为这可能是一个漫长的过程。 - 只剩下1 1/2个VB6开发人员。其中半个是我。 - 越来越多的客户要求支持云和移动设备等功能。
我知道从头开始重写一个应用程序是迁移到.NET最不推荐的方法。我完全同意!抛弃十多年的代码感觉很不对,而且会浪费已经花费的大量资金,我很难向我们的管理层推荐和证明这种做法。
但是现在我看不到其他方法了。
让我稍微介绍一下这个应用程序:
正如我所说,它已经开发了十多年。有无数的开发人员在上面工作过,他们中的大多数当时都没有经验。我们留下了一名最初团队的开发人员。这个应用程序是他的第一个和最大的软件项目,到现在为止,他意识到在过去15年中做出的许多架构决策都是非常错误的,其他一些决策在当时是正确的,但是没有被重构以满足应用程序其他部分所做出的更改,因此在某个时间点变得错误了。这个应用程序似乎是代码腐烂的一个典型例子。
我们正在谈论一个大约有150 KSLOC的应用程序,全部都在一个单一的可执行文件中。它使用了大约15个外部DLL,其中一些是第三方ActiveX控件,另一些是我们自己的.NET程序集。
向应用程序添加新功能仍然是可能的,并且正在进行,但与我们的其他.NET应用程序相比,需要花费很长时间。原因是代码库中的每个小变化都需要在各个地方进行更改。唯一能够进行更改的原因是那位开发人员简单地知道应用程序的大多数依赖项和怪癖。正如你可能已经猜到的那样,意外副作用和错误的发生率相当高。
我对迁移该应用程序的第一个想法是首先清理和重构,然后使用Artinsoft/Microsoft/WhoEver的工具进行迁移/转换,然后再次进行重构,以获得一个漂亮而干净的.NET应用程序。
但我看到了一些问题:
- 似乎没有重构旧应用程序的方法。没有任何自动化测试,甚至没有正式的手动测试方法。每个小变化都需要有经验的用户进行手动测试,他们知道缺陷可能隐藏在哪里。 - 另一方面,我已经建立了一套用于测试我们.NET应用程序的流程和工具,这为我们进行重构提供了坚实的基础。
- 在不进行重大重构的情况下将该代码转换为.NET感觉就像垃圾进,垃圾出。即使我不喜欢称旧应用程序为垃圾,因为它以某种方式工作并证明自己有用。
- 我们的管理层习惯于明确要求快速且不太规范的解决方案,而忽略其对生产力的影响,而且这与开发团队的所有建议相违背。开发团队曾经开始否认快速且不太规范的解决方案的存在,以便能够做正确的事情。这并不意味着我们要完善功能,但我们会在估计时间时包括编写测试和进行重构的时间。因此,知道这一点后,我怀疑一旦代码转换为.NET并修复到应用程序启动并似乎工作的程度,重构阶段将被取消,并且应用程序将被交付给某些客户。
所以。我认为,尽管从头开始重写需要很多时间和资源,但这仍然可能是我们唯一的选择。
我是否缺少了其他选项?您看到不必重写该应用程序的可能性吗?