6

我想重构一个最初用Visual Basic 6.0编写并随后移植到 .NET 的大型遗留应用程序。为了有信心做到这一点,我想围绕现有代码进行单元测试,以便可以比较前后。最简单和最有效的方法是什么?

有一本书叫做“有效地使用遗留代码”,看起来它可能对我有帮助。但是,它看起来只处理面向对象的语言,而 Visual Basic 6.0 不一定是 OO。这本书还能帮到我吗?我希望有读过它的人可以证明它。

具体来说,这个应用程序除了表单本身之外不使用任何类。它直接从表单访问数据库,并且不一致。有几个人在做这个项目,他们都使用自己的风格,没有任何标准。

正如我所说,这个项目已经移植到 VB.NET。但是,它只是在 Visual Studio 2008 下编译的意义上进行移植。所有的编码概念都是 Visual Basic 6.0。

4

7 回答 7

7

它不仅仅处理面向对象(OO) 语言。大部分是关于如何处理 C 中的遗留代码。

所以,是的,买它!


有一整章(第 19 章)称为:

我的项目不是面向对象的。如何进行安全更改?

还有vbUnit,一个xUnit实现,可以帮助您在Visual Basic 6.0中使用TDD

实际上,我误读了这个问题,并认为您移植,而不是您已经移植了。在这种情况下,您拥有大量的“遗留” VB.NET代码,这完全适合您。您可以利用 VB.NET 的 OO 功能并使用本书的其余部分。

我真的不能再推荐这本书了。

于 2009-06-22T21:34:30.900 回答
1

是的; 这本书的概念是伟大而强大的,并且超越了OOP。VB6可以是面向对象的,尽管它不像某些语言那样完全面向对象。

书中最强大的概念之一是“接缝”,本质上是您可以分解代码、注入测试或隔离或抽象功能位的地方。这只是甚至适用于过程代码的概念之一。

于 2009-06-22T21:37:50.270 回答
1

您可能想让问题更具体。

虽然 VB6 本身并不是一种纯粹的 OO 语言,但有足够多的 OO 元素让事情变得熟悉;此外,还有许多用于 VB6 IDE 的单元测试插件。

但让我们考虑一些高级 VB6 组件:

  • 表单是对象(您可以创建新实例)。
  • 模块的行为类似于只有静态方法的类。
  • 类和用户控件与您将获得的对象一样接近。缺少构造函数使事情变得很糟糕,但希望最初的开发人员继续使用 Initialize 或编写一致的 Init 子程序。
  • VB 中的事件很奇怪;这也是最可能让你绊倒的东西。依赖于特定事件顺序的隐藏的、有状态的代码无疑散落在各处。
  • 属性页。嗯,就是这样。

从 VB 的最佳实践开始。如果在编写应用程序时没有考虑到最佳实践代码,我认为采取这一步将为您省去很多麻烦。

于 2009-06-22T21:44:12.533 回答
1

您肯定有一些工作要做,但这里有一个在进行任何 .NET 工作之前需要考虑的策略。

将尽可能多的底层 FORM 代码移到一个类中:每个表单一个类文件作为开始。本质上,表单事件处理程序应该只代理调用底层类实例中的方法;所有自定义方法显然都可以转移到类文件中。

在阅读了 Microsoft 和其他人的最佳实践指南(等)以帮助您为 .NET 迁移做准备之后,您基本上已经为必须重新编码/重构的一些小问题做好了准备:诸如错误处理之类的烦恼,事件排序、后期绑定对象/变体、集合等。

关于错误处理代码的一句话:复制意大利面条式错误尤其困难,特别是因为普通的 Visual Basic 编码器不擅长将其用作控制流逻辑。如果例程中有两个以上,则几乎值得将每个 On Error 块分解为单独的子例程。

清理代码后,您还可以考虑将 Visual Basic 代码重构为合理的抽象(例如,单个数据适配器类和连接等),但您将是最好的判断者。

你可能不喜欢这种方法,所以一定要用一种形式试水。

于 2009-06-23T02:48:12.030 回答
1

我拥有一个副本,我购买它是为了尝试控制我们的 C/C++ 项目。因为我错过了 C#/ .NET必须提供的功能。

这些书非常类似于 C/C++,但是,正如 John 所说,有一章是在没有对象的情况下工作。

但是,如果如您所说,您的代码被移植到 .NET,则它不再是 Visual Basic 6.0 代码。.NET 有很多 Visual Basic/C# 方法可以让您连接到您的代码和测试。但话虽如此,这本书会给你一个很好的概述,你可以用不同的方法来连接一个应用程序,以及控制一个大型旧项目的策略。

于 2009-06-23T03:06:00.403 回答
0

我建议看一下 Martin Fowler 的Refactoring: Improvement the design of existing code,这是一本极好的必读书籍。

您可能正在寻找与Visual Basic 中的专业重构类似的东西。我没有读过它,但它看起来适用。

于 2009-06-22T21:44:50.660 回答
0

我认为你会发现特性测试最有好处。它们应该是自动化的。如果没有特性测试,您将不得不通过实际运行来手动测试您的应用程序/代码。添加新代码时很容易错过测试关键功能。这来自我自己的经验。

在添加新代码时,Sprout Method 和 Sprout Class 很重要。

于 2009-06-23T17:46:53.787 回答